Crunchy
2024-05-22 d8bb0e96fbbb763c623255629d623e7308ef5dee
Merge remote-tracking branch 'origin/master'
已修改16个文件
618 ■■■■■ 文件已修改
index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-inspect-order-plan/Inspection.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/value-table.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a6-device-management.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-report-preparation.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-unpass.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b2-standard.vue 410 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b3-classes.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-daily-business-statistics.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-inspection-item-statistics.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-sample-defects.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/person-manage.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/role-manage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -21,7 +21,7 @@
    </head>
    <body>
        <div id="app"></div>
        <script type='text/javascript' src='http://192.168.73.130:9001/web-apps/apps/api/documents/api.js'></script>
        <!-- <script type='text/javascript' src='http://192.168.73.130:9001/web-apps/apps/api/documents/api.js'></script> -->
        <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/plugins/js/plugin.js"></script>
        <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/luckysheet.umd.js"></script>
    </body>
src/assets/api/controller.js
@@ -181,9 +181,11 @@
    delStandardTree: "/standardTree/delStandardTree", //删除标准树的层级
    selectStandardProductList: "/standardTree/selectStandardProductList", //通过标准树查询对应的检验项目
    selectStandardProductListByMethodId: "/standardTree/selectStandardProductListByMethodId", //通过检验标准查询检验项目
  selectStandardProductByMethodId: "/standardTree/selectStandardProductByMethodId", //批量编辑查询检验项目
    selectStandardMethodEnum: "/standardTree/selectStandardMethodEnum", //获取标准树下标准方法枚举
  getStandardTree2: "/standardTree/getStandardTree2", //获取产品架构
  upStandardProducts: "/standardTree/upStandardProducts", //获取产品架构
  selectStandardProductEnumByMethodId: "/standardTree/selectStandardProductEnumByMethodId", //批量编辑查询所有检验项目和检验子项枚举
}
const standardMethod = {
@@ -283,4 +285,5 @@
const companies = {
  selectCompaniesList: "/companies/selectCompaniesList", //获取人事系统组织
  selectSimpleList: "/companies/selectSimpleList", //获取人事系统组织下的人员
  addPersonUser: "/companies/addPersonUser", //获取人事系统组织下的人员
}
src/components/do/b1-ins-order/add.vue
@@ -272,7 +272,7 @@
        <el-table-column prop="model" label="样品型号" align="center" min-width="100">
          <template slot-scope="scope">
            <el-select v-model="scope.row.model" filterable allow-create default-first-option placeholder="样品型号"
              size="small" @change="handleChangeModel" :disabled="active>1" style="width: 100%;" disabled>
              size="small" @change="handleChangeModel" :disabled="active>1" style="width: 100%;">
              <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
@@ -348,7 +348,7 @@
        <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
        <el-table-column prop="ask" label="要求值" min-width="220px">
          <template slot-scope="scope">
            <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea"
            <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea" readonly
              :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)" :readonly="active>1"></el-input>
          </template>
        </el-table-column>
@@ -876,8 +876,8 @@
      },
      activeStandardTree() {
        let trees = this.selectTree.split(" - ")
        if (trees.length < 5) {
          this.$message.error('未选择型号')
        if (trees.length < 4) {
          this.$message.error('未选择产品')
          return
        }
        this.addObj.factory = trees[0]
@@ -1144,7 +1144,7 @@
        if(val===null||val==='')return
        this.getProductLoad = true
        this.$axios.post(this.$api.standardTree.selectStandardProductList, {
          model: this.addObj.model + '-' + row.modelNum,
          model: row.model + '-' + row.modelNum,
          standardMethodListId: val
        }, {
          headers: {
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -319,7 +319,7 @@
    </el-drawer>
    <el-drawer title="任务切换" :visible.sync="taskVisible" :size="500">
      <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList"
        :componentData="componentData" :key="upIndex" style="max-height: 100%;height: inherit;"/>
        :componentData="componentData" :key="upIndex" style="height: 100%;"/>
    </el-drawer>
    <el-dialog title="检验复核" :visible.sync="reviewDia" width="500px">
      <div class="body" style="display: flex;padding: 10px;" v-if="reviewDia">
src/components/tool/value-table.vue
@@ -564,14 +564,17 @@
      },
      sizeChange(val) {
        this.page.size = val
        this.selectList()
        this.selectList('page')
      },
      currentChange(val) {
        this.page.current = val
        this.selectList()
        this.selectList('page')
      },
      selectList() {
      selectList(val) {
        this.loading = true
        if(val===undefined){
          this.page.current = 1;
        }
        if (this.data.isPage != undefined && this.data.isPage != true) {
          this.page = {
            current: -1,
@@ -593,6 +596,7 @@
          this.total = res.data.body.total
          this.tableHead = res.data.head
          this.tableData = res.data.body.records
          // console.log(JSON.stringify(this.tableHead)+"---------"+JSON.stringify(this.tableData))
          for (var a in this.data.selectField) {
            if (this.data.selectField[a].choose == true) {
              this.tableData.map(b => {
src/components/view/a6-device-management.vue
@@ -687,7 +687,7 @@
          this.$message.error('未输入启用日期')
          return
        }
        if(!this.formData.deviceStatus){
        if(this.formData.deviceStatus==='' || this.formData.deviceStatus===null){
          this.$message.error('未选择当前状态')
          return
        }
src/components/view/b1-report-preparation.vue
@@ -160,6 +160,7 @@
  import {
    convertToHtml
  } from 'mammoth';
  import axios from "axios";
  export default {
    components: {
      ValueTable,
@@ -180,9 +181,9 @@
          showSelect: false,
          select: false,
          do: [
              {
            {
              id: 'handleWeave',
              font: '在线编制',
              font: '编制',
              type: 'text',
              method: 'handleWeave',
              disabFun: (row, index) => {
@@ -383,25 +384,31 @@
          if (power[i].menuMethod == 'writeReport') {
            sub = true
          }
          if (power[i].menuMethod == 'ratifyReport') {
            approve = true
          }
          if (power[i].menuMethod == 'examineReport') {
            issued = true
          }
        }
        if (!approve) {
          this.componentData.do.splice(5, 1)
          this.componentData.do.splice(6, 1)
        }
        if (!issued) {
          this.componentData.do.splice(4, 1)
          this.componentData.do.splice(5, 1)
        }
        if (!sub) {
          this.componentData.do.splice(3, 1)
          this.componentData.do.splice(4, 1)
        }
        if (!res) {
          this.componentData.do.splice(2, 1)
          this.componentData.do.splice(3, 1)
        }
        if (!up) {
          this.componentData.do.splice(1, 1)
          this.componentData.do.splice(2, 1)
        }
        // if (!edit) {
        //   this.componentData.do.splice(0, 1)
        // }
        if (!edit) {
          this.componentData.do.splice(0, 1)
        }
      },
      confirmClaim() {
        // console.log(this.$refs.Word.getValue())
src/components/view/b1-unpass.vue
@@ -45,8 +45,8 @@
        <div class="search_thing">
          <div class="search_label">规格型号:</div>
          <div class="search_input">
              <el-input size="small" placeholder="请输入" clearable
              v-model="componentData.entity.model" @keyup.enter.native="refreshTable()"></el-input></div>
              <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.model"
                        @keyup.enter.native="refreshTable()"></el-input></div>
        </div>
        <div class="search_thing">
          <div class="search_label">样品名称:</div>
@@ -86,23 +86,24 @@
          entity: {
            sample: null,
            model: null,
            orderBy: {
              field: 'id',
              order: 'asc'
            }
          },
          isIndex: true,
          showSelect: false,
          select: false,
          do: [
          ],
          linkEvent: {
            // code: {
            //   method: 'selectAllByOne'
            // }
          },
          tagField: [],
          selectField: [],
          requiredAdd: ['model','sample',],
          requiredUp: []
        },
        entityCopy: {},
        upIndex: 0,
        statusList: [],
      }
  },
  mounted() {
@@ -124,4 +125,3 @@
  }
}
</script>
src/components/view/b2-standard.vue
@@ -65,21 +65,26 @@
    width: 80% !important;
    overflow: hidden;
  }
  >>>.el-table__body-wrapper{
  >>>.el-table__body-wrapper {
    height: calc(100% - 46px) !important;
  }
  >>>.header-class{
  >>>.header-class {
    height: 40px !important;
  }
  >>>.header-class th.el-table__cell>.cell{
  >>>.header-class th.el-table__cell>.cell {
    line-height: 20px !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }
  >>>.el-table__row{
  >>>.el-table__row {
    height: 35px !important;
  }
  .search{
  .search {
    height: 20%;
    border-bottom: 1px solid #ebeef5;
    margin-bottom: 16px;
@@ -88,27 +93,29 @@
    box-sizing: border-box;
    padding-bottom: 10px;
  }
  .search-item{
  .search-item {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
  }
  .search-item .el-row{
  .search-item .el-row {
    display: flex;
    align-items: center;
  }
  .search-item .el-col{
  .search-item .el-col {
    margin-left: 0;
  }
  .more-edit .dialog-footer{
  .more-edit .dialog-footer {
    position: absolute;
    top: 15px;
    right: 70px;
  }
  >>>.more-edit .el-dialog__body{
    height: calc(100vh - 90px);
  }
  >>>.is-disabled .el-textarea__inner{
  >>>.is-disabled .el-textarea__inner {
    background: rgba(0, 0, 0, 0.05) !important;
  }
</style>
@@ -139,6 +146,11 @@
  .standard .el-table .warning-row .cell {
    color: #bababa;
  }
  .el-table-filter__list{
    max-height: 400px;
    overflow-y: auto;
  }
</style>
<template>
@@ -165,7 +177,7 @@
                  :class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i>
                {{ data.code }} {{ data.label }}</span>
            </el-col>
            <el-col :span="2" style="text-align: right;" v-if="delStandardTree">
            <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level==5">
              <el-button type="text" size="mini" @click.stop="remove(node, data)">
                <i class="el-icon-delete"></i>
              </el-button>
@@ -177,11 +189,13 @@
    <div class="right">
      <el-row class="title" style="width: 100%;">
        <el-col :span="20" style="font-size: 14px;color: #999;">{{selectTree}}</el-col>
        <el-button size="small" type="primary" @click="handleMore" style="position: absolute;right: 0px;top: 1px;" v-if="upStandardProduct">批量编辑</el-button>
        <el-button size="small" type="primary" @click="handleMore" style="position: absolute;right: 0px;top: 1px;"
          v-if="upStandardProduct">批量编辑</el-button>
      </el-row>
      <el-row class="standard_table" v-loading="tableLoad">
        <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220" tooltip-effect="dark"
          highlight-current-row @row-click="rowClick" ref="standard" header-row-class-name="header-class">
        <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220"
          tooltip-effect="dark" highlight-current-row @row-click="rowClick" ref="standard"
          header-row-class-name="header-class">
          <el-table-column prop="code" label="标准编号" show-overflow-tooltip width="200">
            <template slot-scope="scope">
              <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span>
@@ -200,21 +214,16 @@
      </el-row>
      <el-row class="product_table" v-loading="tableLoad2">
        <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe
          :fit="true" border
          @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
          @select="upProductSelect"
          @select-all="handleAll"
          class="productTable"
          header-row-class-name="header-class">
          <el-table-column type="selection" width="50" >
          :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
          @select="upProductSelect" @select-all="handleAll" class="productTable" header-row-class-name="header-class">
          <el-table-column type="selection" width="50">
          </el-table-column>
          <el-table-column prop="model" label="型号" min-width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
          <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> -->
          <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
            show-overflow-tooltip></el-table-column>
          <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters"
            :filter-method="filterHandler"></el-table-column>
          <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
          <el-table-column prop="ask" label="要求值" min-width="200px">
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable
@@ -261,7 +270,7 @@
          <el-table-column prop="templateId" label="模板" width="200">
            <template slot-scope="scope">
              <el-select v-model="scope.row.templateId" size="small" filterable :disabled="!upStandardProduct"
               @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)">
                @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)">
                <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option>
              </el-select>
            </template>
@@ -273,13 +282,8 @@
            </template>
          </el-table-column>
        </el-table>
        <el-pagination
        style="position: absolute;right: 16px;bottom: 1px;"
          @current-change="handleCurrentChange"
          :current-page="currentPage"
          layout="total, prev, pager, next, jumper"
          :page-size="50"
          :total="total">
        <el-pagination style="position: absolute;right: 16px;bottom: 1px;" @current-change="handleCurrentChange"
          :current-page="currentPage" layout="total, prev, pager, next, jumper" :page-size="50" :total="total">
        </el-pagination>
      </el-row>
    </div>
@@ -323,8 +327,8 @@
        <el-button type="primary" @click="addStandardTree" :loading="addLoad">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="批量编辑" :visible.sync="moreEdit" width="90%" style="height: 100vh;" class="more-edit">
      <div class="body" style="height: 100%;display: flex;flex-direction: column;">
    <el-dialog title="批量编辑" :visible.sync="moreEdit" width="90%" class="more-edit">
      <div class="body" style="display: flex;flex-direction: column;height: 80vh;">
        <div class="search">
          <div class="search-item">
            <el-row style="width: 25%;margin-bottom: 16px;">
@@ -340,7 +344,8 @@
                <!-- <span class="required-span">* </span> -->
                要求描述:</el-col>
              <el-col :span="16" style="display: flex;align-items: flex-start;height: 100%;">
                <el-input size="small" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}" v-model="moreInfo.tell" :disabled="moreSelects.length==0"></el-input>
                <el-input size="small" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}"
                  v-model="moreInfo.tell" :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;margin-bottom: 16px;">
@@ -348,7 +353,8 @@
                <!-- <span class="required-span">* </span> -->
                试验方法:</el-col>
              <el-col :span="16">
                <el-select v-model="moreInfo.methodS" size="small" filterable style="width: 100%;" :disabled="moreSelects.length==0">
                <el-select v-model="moreInfo.methodS" size="small" filterable style="width: 100%;"
                  :disabled="moreSelects.length==0">
                  <el-option v-for="(a, ai) in methodList" :key="ai" :label="a.label" :value="a.value"></el-option>
                </el-select>
              </el-col>
@@ -357,7 +363,7 @@
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                单价(元):</el-col>
              <el-col :span="16" >
              <el-col :span="16">
                <el-input size="small" v-model="moreInfo.price" clearable :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
@@ -366,7 +372,8 @@
                <!-- <span class="required-span">* </span> -->
                工时系数:</el-col>
              <el-col :span="16">
                <el-input size="small" v-model="moreInfo.manHour" clearable :disabled="moreSelects.length==0"></el-input>
                <el-input size="small" v-model="moreInfo.manHour" clearable
                  :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;">
@@ -374,7 +381,8 @@
                <!-- <span class="required-span">* </span> -->
                模板:</el-col>
              <el-col :span="16">
                <el-select v-model="moreInfo.templateId" size="small" filterable  placeholder="模板" style="width: 100%;" :disabled="moreSelects.length==0">
                <el-select v-model="moreInfo.templateId" size="small" filterable placeholder="模板" style="width: 100%;"
                  :disabled="moreSelects.length==0">
                  <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option>
                </el-select>
              </el-col>
@@ -390,24 +398,20 @@
        </div>
        <div style="flex: 1;overflow-y: auto;" v-loading="productTableLoading0">
          <el-table :data="productList0" ref="productTable0" style="width: 100%;" height="94%" tooltip-effect="dark"
          stripe
          :fit="true" border
          @select-all="handleSelectAll0"
          @select="handleSelectionChange0"
          header-row-class-name="header-class"
          :row-key="row=>row.id"
          >
            <el-table-column type="selection" width="50" >
            stripe :fit="true" border @select-all="handleSelectAll0" @select="handleSelectionChange0" filter-placement="bottom-start"
            header-row-class-name="header-class" :row-key="row=>row.id" @filter-change="filterHandler">
            <el-table-column type="selection" width="50">
            </el-table-column>
            <el-table-column prop="model" label="型号" min-width="100" show-overflow-tooltip></el-table-column>
            <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
            <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
              show-overflow-tooltip></el-table-column>
            <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip :filters="filters0"
              :filter-multiple="false" column-key="inspectionItem"></el-table-column>
            <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip
              :filters="filters1" :filter-multiple="false" column-key="inspectionItemSubclass"></el-table-column>
            <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters"
              :filter-method="filterHandler"></el-table-column>
              :filter-multiple="false" column-key="sonLaboratory"></el-table-column>
            <el-table-column prop="ask" label="要求值" min-width="200px"></el-table-column>
            <el-table-column prop="tell" label="要求描述" min-width="220px"></el-table-column>
            <el-table-column prop="method" label="试验方法" width="200"></el-table-column>
            <el-table-column prop="methodS" label="试验方法" width="200"></el-table-column>
            <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
            <el-table-column prop="price" label="单价(元)" width="120"></el-table-column>
            <el-table-column prop="manHour" label="工时系数" width="120"></el-table-column>
@@ -419,44 +423,12 @@
            </el-table-column>
            <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
          </el-table>
          <el-pagination
        style="position: absolute;right: 16px;bottom: 4px;"
          @current-change="handleCurrentChange0"
          :current-page="currentPage0"
          layout="total, prev, pager, next, jumper"
          :page-size="50"
          :total="total0">
        </el-pagination>
          <el-pagination style="position: absolute;right: 16px;bottom: 4px;" @current-change="handleCurrentChange0"
            :current-page="currentPage0" layout="total, prev, pager, next, jumper" :page-size="100" :total="total0">
          </el-pagination>
        </div>
      </div>
    </el-dialog>
    <!-- <el-dialog title="新增标准" :visible.sync="addStandardDia" width="400px">
      <div class="body">
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">
            <span class="required-span">* </span>标准名称:
          </el-col>
          <el-col :span="16" :offset="1">
            <el-select v-model="standardId" size="small" style="width: 100%;" clearable>
              <el-option v-for="(a, ai) in standardEnum" :key="ai" :value="a.value" :label="a.label"></el-option>
            </el-select>
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addStandardDia = false">取 消</el-button>
        <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">确 定</el-button>
      </span>
    </el-dialog> -->
    <!-- <el-dialog title="新增项目" :visible.sync="addProductDia" width="70%">
      <div class="body" style="height: 60vh;" v-if="addProductDia">
        <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" />
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addProductDia = false">取 消</el-button>
        <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button>
      </span>
    </el-dialog> -->
    <el-dialog title="区间设置" :visible.sync="sectionUpDia" width="70%">
      <div class="body" style="padding: 5px 0;">
        <el-table :data="sectionList" border style="width: 100%" height="350px">
@@ -586,41 +558,71 @@
        sectionRow: null,
        sectionList: [],
        templateList: [],
        total:0,
        currentPage:1,
        total: 0,
        currentPage: 1,
        standardId: 0,
        moreEdit:false,
        moreEditLoad:false,
        moreSelects:[],
        total0:0,
        currentPage0:1,
        moreEdit: false,
        moreEditLoad: false,
        moreSelects: [],
        total0: 0,
        currentPage0: 1,
        productList0: [],
        moreInfo:{
          ask:'',
          tell:'',
          methodS:'',
          price:'',
          manHour:'',
          templateId:''
        moreInfo: {
          ask: '',
          tell: '',
          methodS: '',
          price: '',
          manHour: '',
          templateId: ''
        },
        methodList:[],
        productTableLoading0:false
        methodList: [],
        productTableLoading0: false,
        filters0: [{
            text: '测试',
            value: 0,
          },
          {
            text: '测试1',
            value: 1,
          },
          {
            text: '测试2',
            value: 2,
          }
        ],
        filters1: [{
            text: '测试',
            value: 0,
          },
          {
            text: '测试1',
            value: 1,
          },
          {
            text: '测试2',
            value: 2,
          }
        ],
        pages: 1,
        inspectionItem: null,
        inspectionItemSubclass: null,
        sonLaboratory: null
      }
    },
    watch: {
      moreEdit(val) {
        if(!val){
        if (!val) {
          this.$refs.productTable0.clearSelection()
          this.moreSelects = []
          this.currentPage0 = 1;
          this.productList0 = []
          this.moreInfo = {
            ask:'',
            tell:'',
            methodS:'',
            price:'',
            manHour:'',
            templateId:''
            ask: '',
            tell: '',
            methodS: '',
            price: '',
            manHour: '',
            templateId: ''
          }
        }
      }
@@ -640,6 +642,7 @@
      this.selectEnumByCategoryForInspectionValueType()
      this.selectEnumByCategoryForSonLaboratory()
      this.getStandardTemplate()
      this.selectStandardMethods()
    },
    methods: {
      filterNode(value, data) {
@@ -1102,6 +1105,7 @@
        this.addProductDia = false
      },
      rowClick(row, column, event) {
        this.currentPage = 1;
        this.tableLoad2 = true
        this.standardId = row.id
        this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, {
@@ -1115,7 +1119,7 @@
            this.productList.forEach(a => {
              if (a.state == 1) this.toggleSelection(a)
            })
          }, 200)
          }, 300)
          this.tableLoad2 = false
        })
      },
@@ -1148,19 +1152,37 @@
          // this.$message.success('已保存')
        })
      },
      filterHandler(value, row, column) {
        const property = column['property'];
        return row[property] === value;
      filterHandler(value) {
        for (let column in value) {
          if(value[column].length === 0){
            if(column==='inspectionItem'){
              this.inspectionItem = null
            }else if(column === 'inspectionItemSubclass'){
              this.inspectionItemSubclass = null
            }else if(column === 'sonLaboratory'){
              this.sonLaboratory = null
            }
          }else{
            if(column==='inspectionItem'){
              this.inspectionItem = value[column][0]
            }else if(column === 'inspectionItemSubclass'){
              this.inspectionItemSubclass = value[column][0]
            }else if(column === 'sonLaboratory'){
              this.sonLaboratory = value[column][0]
            }
          }
          this.getList()
        }
      },
      handleAll(e) {
        if (e.length > 0) {
          this.productList = this.productList.map(m => {
          this.productList.map(m => {
            m.state = 0
            this.upProductSelect(null, m)
            return m
          })
        } else {
          this.productList = this.productList.map(m => {
          this.productList.map(m => {
            m.state = 1
            this.upProductSelect(null, m)
            return m
@@ -1169,12 +1191,12 @@
      },
      sectionUp(row) {
        if (Array.isArray(row)) {
            // 值是一个数组
            if(row.length === 0){
              return this.$message.error('请选择检验项')
            }
            this.sectionRow = {}
            this.sectionUpDia = true
          // 值是一个数组
          if (row.length === 0) {
            return this.$message.error('请选择检验项')
          }
          this.sectionRow = {}
          this.sectionUpDia = true
        } else {
          // 值是一个对象
          this.sectionRow = row
@@ -1222,8 +1244,8 @@
          this.sectionRow.manHour = JSON.stringify(manHourList)
        }
        this.sectionLoad = true
        if(this.moreSelects.length === 0){
            this.$axios.post(this.$api.standardTree.upStandardProductList, {
        if (this.moreSelects.length === 0) {
          this.$axios.post(this.$api.standardTree.upStandardProductList, {
            id: this.sectionRow.id,
            section: this.sectionRow.section,
            ask: this.sectionRow.ask,
@@ -1243,31 +1265,34 @@
            this.$message.success('已保存')
            this.sectionUpDia = false
          })
        }else{
        } else {
          this.$axios.post(this.$api.standardTree.upStandardProducts, {
          ids:this.moreSelects.map(a=>a.id),
          standardProductList:{
            section: this.sectionRow.section,
            ask: this.sectionRow.ask,
            tell: this.sectionRow.tell,
            price: this.sectionRow.price,
            manHour: this.sectionRow.manHour
          }
            ids: this.moreSelects.map(a => a.id),
            standardProductList: {
              section: this.sectionRow.section,
              ask: this.sectionRow.ask,
              tell: this.sectionRow.tell,
              price: this.sectionRow.price,
              manHour: this.sectionRow.manHour
            }
          }, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
          this.sectionLoad = false
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          this.$message.success('已保存')
          this.sectionUpDia = false
          this.currentPage0 = 1;
          this.getList()
        })
            this.sectionLoad = false
            if (res.code == 201) {
              this.$message.error('未保存')
              return
            }
            this.$message.success('已保存')
            this.sectionUpDia = false
            this.currentPage0 = 1;
            this.getList()
            this.rowClick({
              id: this.standardId
            })
          })
        }
      },
      getStandardTemplate() {
@@ -1292,12 +1317,11 @@
          this.tableLoad2 = false
        })
      },
      async handleMore(){
        if(!this.standardId&&this.standardId!=0){
      async handleMore() {
        if ((!this.standardId && this.standardId != 0) || this.standardList.length == 0) {
          return this.$message.error('请选择实验室、样品')
        }
        await this.getList()
        this.selectStandardMethods()
        this.moreEdit = true
      },
      selectStandardMethods() {
@@ -1312,19 +1336,19 @@
          this.methodList = data
        })
      },
      subMoreEdit(){
        if(this.moreSelects.length===0){
      subMoreEdit() {
        if (this.moreSelects.length === 0) {
          return this.$message.error('请选择检验项')
        }
        this.moreEditLoad = true
        this.$axios.post(this.$api.standardTree.upStandardProducts, {
          ids:this.moreSelects.map(a=>a.id),
          standardProductList:this.moreInfo
          }, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
          ids: this.moreSelects.map(a => a.id),
          standardProductList: this.moreInfo
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          this.moreEditLoad = false
          if (res.code == 201) {
            this.$message.error('未保存')
@@ -1333,6 +1357,9 @@
          this.$message.success('已保存')
          this.currentPage0 = 1;
          this.getList()
          this.rowClick({
            id: this.standardId
          })
          // this.moreInfo = {
          //   ask:'',
          //   tell:'',
@@ -1343,49 +1370,76 @@
          // }
        })
      },
      handleSelectAll0(rows){
        if(rows.length){
          rows.forEach(a=>{
            if(!this.moreSelects.find(b=>a.id===b.id)){
      handleSelectAll0(rows) {
        if (rows.length) {
          rows.forEach(a => {
            if (!this.moreSelects.find(b => a.id === b.id)) {
              this.moreSelects.push(a)
            }
          })
        }else{
          this.productList0.forEach(a=>{
            this.moreSelects = this.moreSelects.filter(b=>b.id!=a.id )
        } else {
          this.productList0.forEach(a => {
            this.moreSelects = this.moreSelects.filter(b => b.id != a.id)
          })
        }
      },
      handleSelectionChange0(val,row){
        if(this.moreSelects.find(a=>a.id===row.id)){
          this.moreSelects = this.moreSelects.filter(a=>a.id!=row.id)
        }else{
      handleSelectionChange0(val, row) {
        if (this.moreSelects.find(a => a.id === row.id)) {
          this.moreSelects = this.moreSelects.filter(a => a.id != row.id)
        } else {
          this.moreSelects.push(row)
        }
      },
      getList(){
      getList() {
        this.productTableLoading0 = true
        this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, {
        this.getItemEnum()
        this.$axios.post(this.$api.standardTree.selectStandardProductByMethodId, {
          id: this.standardId,
          tree: this.selectTree,
          page: this.currentPage0
          page: this.currentPage0,
          laboratory: this.sonLaboratory,
          items: this.inspectionItemSubclass,
          item: this.inspectionItem
        }).then(res => {
          this.productList0 = res.data.productList
          this.productList0 = res.data.records
          this.total0 = res.data.total
          this.productTableLoading0 = false
          this.$nextTick(()=>{
            this.productList0.forEach((a,i) => {
              if(this.moreSelects.find(b=>a.id==b.id)){
                // console.log(111111111,a)
                this.$refs.productTable0.toggleRowSelection(this.productList0[i],true)
          this.page = res.data.pages
          this.$nextTick(() => {
            this.productList0.forEach((a, i) => {
              if (this.moreSelects.find(b => a.id == b.id)) {
                this.$refs.productTable0.toggleRowSelection(this.productList0[i], true)
              }
            })
          })
        })
      },
      handleCurrentChange0(e){
      handleCurrentChange0(e) {
        this.currentPage0 = e;
        this.getList()
      },
      getItemEnum(){
        this.$axios.post(this.$api.standardTree.selectStandardProductEnumByMethodId,{
          id: this.standardId,
          tree: this.selectTree
        }).then(res=>{
          this.filters0 = []
          this.filters1 = []
          res.data.item.forEach(a=>{
            this.filters0.push({
              text: a.inspectionItem,
              value: a.inspectionItem
            })
          })
          res.data.items.forEach(a=>{
            if(a!=null){
              this.filters1.push({
                text: a.inspectionItemSubclass,
                value: a.inspectionItemSubclass
              })
            }
          })
        })
      }
    }
  }
src/components/view/b3-classes.vue
@@ -83,18 +83,14 @@
            v-on:mouseenter="onMouseEnter(index)"
          v-on:mouseleave="currentUserIndex=null">
              <div class="content-body-item" v-for="(m,i) in item.list" :key="'d'+i" :class="{hoverType:currentUserIndex==index}">
                <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',type5:m.shift==='5',type6:m.shift==='6'}">
                  <!-- <div class="work-box-left">
                    <span>{{ getShiftByDic(m.shift) }}</span>
                  </div> -->
                  <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!upPower">
                    <!-- <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i> -->
                <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!upPower">
                    <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',type5:m.shift==='5',type6:m.shift==='6'}">
                    <span style="cursor: pointer;" :style="`opacity: ${getShiftByDic(m.shift)=='无'?0:1};`">{{ getShiftByDic(m.shift) }}</span>
                  </div>
                    <el-dropdown-menu slot="dropdown">
                      <el-dropdown-item v-for="(n,j) in classType" :key="'h'+j" :command="n.value">{{ n.label }}</el-dropdown-item>
                    </el-dropdown-menu>
                  </el-dropdown>
                </div>
              </div>
            </div>
          </div>
@@ -767,7 +763,7 @@
  display: flex;
  align-items: center;
  justify-content: space-around;
  background: #F5F7FB;
  background: #edeff2;
  border-radius: 8px 8px 8px 8px;
  color: #999;
  font-size: 14px;
@@ -869,7 +865,7 @@
  margin-left: 10px;
}
.hoverType{
  background: rgba(58,123,250,0.05);
  background: rgba(58,123,250,0.03);
}
.year-table{
  width: 100%;
src/components/view/b4-daily-business-statistics.vue
@@ -151,8 +151,9 @@
    }
  },
  mounted(){
    this.init()
    this.timers&&clearInterval(this.timers);
    setInterval(this.init,1000*60*5)
    setInterval(this.init(),1000*60*5)
  },
  methods:{
    init(){
src/components/view/b4-inspection-item-statistics.vue
@@ -190,9 +190,9 @@
      }
    },
    mounted(){
      // this.init()
      this.init()
      this.timers&&clearInterval(this.timers);
      setInterval(this.init,1000*60*5)
      setInterval(this.init(),1000*60*5)
    },
    methods:{
      init(){
src/components/view/b4-sample-defects.vue
@@ -73,6 +73,7 @@
      <el-table
        :data="tableData"
        style="width: 100%;margin-bottom: 10px;height: calc(100% - 40px);"
        height="calc(100% - 40px)"
        row-key="id"
        v-loading="loading"
        border
src/components/view/person-manage.vue
@@ -174,8 +174,8 @@
          <el-button size="small" @click="refresh()">重 置</el-button>
          <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
        </div>
        <div class="search_thing">
          <el-button size="small" type="primary" @click="openthirdParty">获取三方人员</el-button>
        <div class="search_thing" style="display: flex;justify-content: right;margin-right: 10px;">
          <el-button size="small" type="primary" @click="openthirdParty" v-if="addUserPower">获取三方人员</el-button>
          <el-button size="small" type="primary" @click="opeaAdd" v-if="addPower">新增用户</el-button>
        </div>
      </div>
@@ -204,15 +204,29 @@
      <div class="body">
        <el-row>
          <el-col :span="9" style="height: 70vh;overflow: hidden;">
            <el-input placeholder="输入关键字进行过滤" v-model="search2" size="small" style="width: 90%;padding: 0 5% 10px 5%;"
            <el-input placeholder="输入关键字搜索" v-model="search2" size="small" style="width: 90%;padding: 0 5% 10px 5%;"
              clearable @blur="searchFilter2" @clear="searchFilter2" @keyup.enter.native="searchFilter2()">
            </el-input>
            <el-tree :data="datathirdParty" node-key="id" :props="defaultProps" @node-click="nodeClick2"
              style="height: calc(100% - 42px);" :filter-node-method="filterNode2" ref="tree2" highlight-current>
              style="height: calc(100% - 42px);"
              @node-expand="nodeOpen0" :filter-node-method="filterNode2" ref="tree2" highlight-current>
            </el-tree>
          </el-col>
          <el-col :span="15" style="height: 70vh;padding-left: 8px;">
            <el-table height="70vh" border stripe :data="personList" v-loading="personLoad" ref="personTable"
            <div class="search_thing" style="width: 360px;margin-bottom: 10px;">
              <div class="search_label" style="width: 140px;">员工号/员工姓名:</div>
              <div class="search_input">
                <el-input
                size="small"
                placeholder="请输入工号/员工姓名"
                @clear="searchPerson"
                clearable
                v-model="userSearch2"
                @keyup.enter.native="searchPerson()">
                <i slot="suffix" class="el-input__icon el-icon-search" style="cursor: pointer;" @click="searchPerson"></i></el-input>
                </div>
            </div>
            <el-table height="67vh" border stripe :data="personList" v-loading="personLoad" ref="personTable"
              @selection-change="handleSelectionChange">
              <el-table-column type="selection" width="50">
              </el-table-column>
@@ -330,6 +344,7 @@
        upIndex: 0,
        addDia: false,
        addPower: true,
        addUserPower: true,
        delStandardTree: true,
        addDia0: false,
        addOb: {
@@ -343,12 +358,19 @@
        expandedKeys: [],
        addLoad: false,
        personList: [],
        personListCopy:[],
        treeLoad: false,
        personLoad: false,
        search2: '',
        multipleSelection: []
        multipleSelection: [],
        companiesList:[],
        currentCompaniesList: [],
        userSearch2:''
      }
    },
    // watch: {
    //   userSearch2(val){}
    // },
    mounted() {
      this.selectTreeList()
      this.selectRole()
@@ -359,6 +381,7 @@
      openthirdParty() {
        this.addthirdParty = true;
        this.$axios.get(this.$api.companies.selectCompaniesList).then(res => {
          this.companiesList = JSON.parse(JSON.stringify(res.data));
          this.datathirdParty = []
          for (let ai = 0; ai < res.data.length; ai++) {
            let a = res.data[ai]
@@ -442,6 +465,7 @@
        let power = JSON.parse(sessionStorage.getItem('power'))
        let up = false
        let add = false
        let addUserPower = false
        let delStandardTree = false
        for (var i = 0; i < power.length; i++) {
          if (power[i].menuMethod == 'updateUser') {
@@ -453,15 +477,19 @@
          if (power[i].menuMethod == 'delDepartment') {
            delStandardTree = true
          }
          if (power[i].menuMethod == 'selectCompaniesList') {
            addUserPower = true
          }
        }
        if (!up) {
          this.componentData.do.splice(0, 1)
        }
        this.delStandardTree = delStandardTree
        this.addPower = add
        this.addUserPower = addUserPower
      },
      handleAdd() {
        if (this.addOb.fatherId) {
        if (this.addOb.fatherId||this.addOb.name=='全部') {
          this.addDia0 = true;
        } else {
          this.$message.error('请选择一个架构层级')
@@ -498,6 +526,9 @@
      },
      nodeOpen(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
      },
      nodeOpen0(data, node, el){
        this.currentCompaniesList[node.level-1] = data.id
      },
      nodeClose(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
@@ -566,11 +597,13 @@
        })
      },
      nodeClick2(ob, node, el) {
        this.currentCompaniesList[node.level-1] = ob.id
        if (ob.id !== 'SC21') {
          this.personLoad = true
          this.$axios.post(this.$api.companies.selectSimpleList, {
            companyId: ob.id
          }).then(res => {
            this.personListCopy = JSON.parse(JSON.stringify(res.data))
            this.personList = res.data
            this.personLoad = false
            this.$refs.personTable.doLayout()
@@ -579,9 +612,65 @@
      },
      handleSelectionChange(val) {
        this.multipleSelection = val;
        console.log(this.multipleSelection);
      },
      addUser2(){
        if(this.multipleSelection.length === 0){
          return this.$message.error('请选择人员')
        }
        if(this.currentCompaniesList.length === 0){
          return this.$message.error('请选择组织')
        }
        for (let index = this.currentCompaniesList.length-1; index >1; index--) {
          let obj = this.multipleSelection.find(a=>a.companyId==this.currentCompaniesList[index])
          if(!obj){
            this.currentCompaniesList.splice(index,1)
          }else{
            return
          }
        }
        let arr = []
        this.currentCompaniesList.forEach(b=>{
          /* this.companiesList.forEach(a=>{
            if(a.companyId===b){
              console.log(a)
            }
          }) */
          let obj = this.companiesList.find(a=>a.companyId==b)
          arr.push(obj)
          })
        this.addLoad = true
        this.$axios.post(this.$api.companies.addPersonUser, {
          company: arr,
          person: this.multipleSelection
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code === 201) {
            this.addLoad = false
            return
          }
          this.$message.success('操作成功')
          this.multipleSelection = []
          this.$refs.personTable.clearSelection()
          this.addthirdParty = false
          this.addLoad = false
          this.personList = []
          this.userSearch2 = ''
          this.refresh()
        }).catch(e => {
          this.addthirdParty = false
          this.addLoad = false
        })
      },
      searchPerson(){
        let arr = JSON.parse(JSON.stringify(this.personListCopy))
        this.personList = arr.filter(a=>{
          if(a.employeeID.includes(this.userSearch2)||a.name.includes(this.userSearch2)){
            return true
          }
        })
      }
    }
  }
src/components/view/role-manage.vue
@@ -115,7 +115,7 @@
          entity: {
            name: null,
            orderBy: {
              field: 'id',
                field: 'id',
              order: 'asc'
            }
          },
src/main.js
@@ -13,10 +13,11 @@
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
const javaApi = 'http://192.168.11.200:8001';//李
// const javaApi = 'http://192.168.11.200:8001';//李
// const javaApi = 'http://10.20.102.168:8001';//张
// const javaApi = 'http://172.20.10.3:8001';//姜
// const javaApi = 'http://192.168.11.2:8001';//柴
 const javaApi = 'http://127.0.0.1:8001';//晏
// const javaApi = 'http://114.132.189.42:1234';//测试服
//胜云服务器
// Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn";