朱佳吉
2024-05-09 1e9c7a02ec2b8caf7dda6000d7f0f79849df6b45
Merge remote-tracking branch 'origin/master'

# Conflicts:
# src/assets/api/controller.js
# static/js/menu.js
已修改14个文件
1553 ■■■■■ 文件已修改
src/assets/api/controller.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-inspect-order-plan/Inspection.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-sample/detail.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a5-capacity-scope.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a6-device-management.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-inspect-order-plan.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-sample.vue 559 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b2-standard.vue 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b3-classes.vue 735 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-daily-business-statistics.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-inspection-item-statistics.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/js/menu.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -22,6 +22,7 @@
    certification,
    sealScope,
    informationNotification,
    performanceShift,
    unPass,
    }
}
@@ -257,6 +258,12 @@
  triggerModificationStatusToRead:"/informationNotification/triggerModificationStatusToRead",//点击详情触发修改状态为已读
}
const performanceShift = {
  add:"/performanceShift/add",//绩效管理-班次-排班
  page:"/performanceShift/page",//绩效管理-班次-分页查询
  update:"/performanceShift/update/",//绩效管理-班次-班次状态修改
}
const unPass = {
    pageInsUnPass:"/unPass/pageInsUnPass", // 查询不合格样品数据
}
src/components/do/b1-ins-order/add.vue
@@ -270,10 +270,17 @@
        <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">
              size="small" @change="handleChangeModel" :disabled="active>1" style="width: 100%;" disabled>
              <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column prop="modelNum" label="型号参数" width="130" align="center" v-if="!(active>1)">
          <template slot-scope="scope">
            <el-input size="small" v-model="scope.row.modelNum" clearable placeholder="非必填"
              @keyup.enter.native="methodChange(scope.row.standardMethodListId, scope.row)"
              @clear="methodChange(scope.row.standardMethodListId, scope.row)"></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="standardMethodListId" label="检验标准" align="center" min-width="100">
@@ -334,7 +341,7 @@
        <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
        <el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column>
        <el-table-column prop="manDay" label="预计时间(天)" width="120" show-overflow-tooltip></el-table-column>
        <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
        <el-table-column prop="manHour" label="工时系数" width="100" show-overflow-tooltip></el-table-column>
        <!-- <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> -->
        <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
        <el-table-column prop="ask" label="要求值" min-width="220px">
@@ -370,7 +377,7 @@
            <el-row>
              <el-col :span="24">
                <span><i
                    :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
                    :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-row>
@@ -562,6 +569,7 @@
          sampleType: null,
          sample: null,
          model: null,
          modelNum: null,
          sampleNum: 1,
          isLeave: 0,
          unit: null
@@ -722,7 +730,10 @@
          this.saveLoad = true
          this.$axios.post(this.$api.insOrder.addInsOrder, {
            insOrder: this.addObj,
            list: JSON.stringify(this.sampleList)
            list: JSON.stringify(this.sampleList.map(a=>{
              a.model = a.model + ((a.modelNum==null||a.modelNum==''||a.modelNum=='null')?'':('-'+a.modelNum))
              return a
            }))
          }, {
            headers: {
              'Content-Type': 'application/json'
@@ -847,9 +858,7 @@
        this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => {
          this.list = res.data
          this.list.forEach(a => {
            a.children.forEach(b => {
              this.expandedKeys.push(b.label)
            })
            this.expandedKeys.push(a.label)
          })
        })
      },
@@ -1114,9 +1123,10 @@
        })
      },
      methodChange(val, row) {
        if(val===null||val==='')return
        this.getProductLoad = true
        this.$axios.post(this.$api.standardTree.selectStandardProductList, {
          model: this.addObj.model,
          model: this.addObj.model + '-' + row.modelNum,
          standardMethodListId: val
        }, {
          headers: {
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -674,13 +674,15 @@
              }
            }
            if (b.v.ps != undefined && b.v.ps.value === '结论') {
              this.param[b.i].insResult = b
              conclusionList.forEach((n, i) => {
                if (n.r == b.r && n.c == b.c) {
                  b.v.f =
                    `(${this.comparisonList.find(j=>j.value==(finalList[i].c)).label}${finalList[i].r+1})`
                }
              })
              if(b.i!==undefined){
                this.param[b.i].insResult = b
                conclusionList.forEach((n, i) => {
                  if (n.r == b.r && n.c == b.c) {
                    b.v.f =
                      `(${this.comparisonList.find(j=>j.value==(finalList[i].c)).label}${finalList[i].r+1})`
                  }
                })
              }
            }
            set.add(b.r)
            if (b.v.f) {
src/components/do/b1-sample/detail.vue
@@ -69,7 +69,11 @@
                <el-table-column prop="inspectionItemSubclass" label="检验项分类" min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="laboratory" label="实验室" min-min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="unit" label="单位" min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="equipValue" label="设备" min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="equipName" label="设备" min-width="100" show-overflow-tooltip>
          <template slot-scope="scope">
            {{handleData(scope.row.equipName)}}
          </template>
        </el-table-column>
                <el-table-column prop="entrustCode" label="委托编号" min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="updateUserName" label="检验人" min-width="100" show-overflow-tooltip></el-table-column>
                <el-table-column prop="updateTime" label="检验时间" min-width="100" show-overflow-tooltip></el-table-column>
@@ -129,6 +133,12 @@
        this.histories = histories;
        this.products = products;
      })
    },
    handleData(e){
      let info = JSON.parse(e).map(item => {
        return item.v;
      }).join(',')
      return info
    }
  }
}
src/components/view/a5-capacity-scope.vue
@@ -228,11 +228,11 @@
              multiple: true
            }
          },
          requiredAdd: ['sonLaboratory', 'inspectionItem', 'manHour', 'inspectionItemType', 'inspectionValueType',
            'unit', 'method', 'price', 'manDay', 'templateId'
          requiredAdd: ['sonLaboratory', 'inspectionItem', 'inspectionItemType', 'inspectionValueType',
            'unit', 'method', 'manDay', 'templateId'
          ],
          requiredUp: ['sonLaboratory', 'inspectionItem', 'manHour', 'inspectionItemType', 'inspectionValueType',
            'unit', 'method', 'price', 'manDay', 'templateId'
          requiredUp: ['sonLaboratory', 'inspectionItem', 'inspectionItemType', 'inspectionValueType',
            'unit', 'method', 'manDay', 'templateId'
          ]
        },
        testObjectData: {
src/components/view/a6-device-management.vue
@@ -633,6 +633,9 @@
                //row = 点击对应行值一行值
                //复制给formData
                this.formData = this.HaveJson(row);
        if(typeof(row.insProductIds)==='number'){
          row.insProductIds = row.insProductIds+''
        }
                this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
            },
            beforeUpload(file) {
@@ -664,12 +667,12 @@
                }
            },
            submitForm() {
                this.upLoad = true;
                delete this.formData.createTime
                delete this.formData.updateTime
                delete this.formData.createUser
                delete this.formData.updateUser
        this.formData.insProductIds = this.formData.insProductIds.join()
        this.upLoad = true;
                this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.formData, {
                    headers: {
                        'Content-Type': 'application/json'
@@ -691,7 +694,7 @@
            },
            submitForm2() {
                this.upLoad2 = true;
        this.formData.insProductIds = this.formData.insProductIds.join()
        this.formData2.insProductIds = this.formData2.insProductIds.join()
                this.$axios.post(this.$api.deviceScope.addDeviceParameter, this.formData2, {
                    headers: {
                        'Content-Type': 'application/json'
src/components/view/b1-inspect-order-plan.vue
@@ -132,7 +132,7 @@
                        <el-col :span="21">
                            <div style="display: flex;align-items: center;margin-bottom: 10px;">
                                <ul class="tab">
                                    <li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}
                                    <li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label.replace('试验室','')}}
                                    </li>
                                </ul>
                                <div>
@@ -245,9 +245,9 @@
                            font: '复核',
                            type: 'text',
                            method: 'handleReview',
                            disabFun: (row, index) => {
                            /* disabFun: (row, index) => {
                                return row.userId == null || row.insState != 3
                            }
                            } */
                        }, {
                            id: '',
                            font: '认领',
src/components/view/b1-sample.vue
@@ -156,6 +156,9 @@
  .custom-tree-node:hover .el-button {
    opacity: 1;
  }
  >>>.el-loading-mask {
    z-index: 10;
  }
</style>
<template>
@@ -209,7 +212,7 @@
        </div>
      </div>
      <div class="table" v-loading="tableLoading">
        <table border="1" class="tables" cellpadding="10" style="table-layout:fixed;">
        <table border="1" class="tables" cellpadding="10" style="table-layout:fixed;" v-if="tableList.length>0">
          <tbody>
            <tr v-for="(item,index) in tableList" :key="index">
              <td v-for="(m,i) in item" :key="i" class="content">
@@ -239,14 +242,15 @@
            </tr>
          </tbody>
        </table>
        <span v-else style="color: rgb(144, 147, 153);display: inline-block;position: absolute;top: 60%;left: 50%;transform: translate(-50%,-50%);">暂无数据</span>
      </div>
    </div>
    <Detail v-else @hanldeBack="isDetail=false" :id="currentId" />
    <el-dialog title="样品入库" :visible.sync="storageVisible" width="350px">
      <div class="shaoma">
      <!-- <div class="shaoma">
        <img src="../../../static/img/扫码.svg" alt="" style="margin-right: 5px;">
        <span>扫码入库</span>
      </div>
      </div> -->
      <el-row>
        <el-col class="search_thing" :span="24">
          <div class="search_label"><span class="required-span">* </span>样品编号:</div>
@@ -275,10 +279,10 @@
      </span>
    </el-dialog>
    <el-dialog title="样品出库" :visible.sync="exportVisible" width="350px">
      <div class="shaoma">
      <!-- <div class="shaoma">
        <img src="../../../static/img/扫码.svg" alt="" style="margin-right: 5px;">
        <span>扫码出库</span>
      </div>
      </div> -->
      <el-row>
        <el-col class="search_thing" :span="24">
          <div class="search_label"><span class="required-span">* </span>样品编号:</div>
@@ -292,7 +296,7 @@
        <el-button type="primary" @click="confirmExport" :loading="upLoadExport">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="库位维护" :visible.sync="keepVisible" width="350px">
    <el-dialog title="库位维护" :visible.sync="keepVisible" width="350px" :append-to-body="true">
      <el-tree :data="warehouse" ref="tree" :props="{ children: 'warehouseShelfList', label: 'name' }" node-key="id"
        :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
        @node-collapse="nodeClose" :default-expanded-keys="expandedKeys" v-if="keepVisible"
@@ -302,7 +306,7 @@
            <el-col :span="20">
              <span><i
                  :class="`node_i ${node.level<2 ? 'el-icon-folder-opened': 'el-icon-tickets'}`"></i>
                {{ data.name }}{{ node.level }}</span>
                {{ data.name }}</span>
            </el-col>
            <el-col :span="4" v-if="node.level<3">
              <el-button type="text" size="mini" icon="el-icon-edit" @click.stop="handleEdit(data,node.level)">
@@ -315,7 +319,7 @@
      </el-tree>
      <span slot="footer" class="dialog-footer">
        <el-button @click="keepVisible = false">取 消</el-button>
        <el-button type="primary" @click="confirmKeep" :loading="upLoadKeep">确 定</el-button>
        <el-button type="primary" @click="keepVisible = false" >确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog :title="isEdit?'仓库修改':'仓库新增'" :visible.sync="warehouseVisible" width="350px">
@@ -387,463 +391,9 @@
        shelvesVisible: false,
        upLoadStorage: false,
        upLoadExport: false,
        upLoadKeep: false,
        upLoadWarehouse: false,
        upLoadShelves: false,
        tableList: [
          [{
              title: '1-1-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-2-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-3-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-4-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-5-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-6-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-7-4',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
          ],
          [{
              title: '1-1-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-2-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-3-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-4-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-5-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-6-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-7-3',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
          ],
          [{
              title: '1-1-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-2-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-3-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-4-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-5-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-6-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-7-2',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
          ],
          [{
              title: '1-1-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-2-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-3-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-4-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-5-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-6-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
            {
              title: '1-7-1',
              list: [{
                  name: '原材料',
                  specs: '规格1',
                  num: 20,
                  type: 0,
                },
                {
                  name: '原材料',
                  specs: '规格2',
                  num: 20,
                  type: 1,
                },
              ]
            },
          ]
        ],
        tableList: [],
        rowList: [],
        value: '',
        name:'',
@@ -853,7 +403,7 @@
        isEdit: false, //弹框--是否是修改,默认为false
        isDetail: false, //详情--是否展示为详情页面,默认为false
        currentEdit:null,//当前要维护的信息
        tableLoading:true,
        tableLoading:false,
        sampleCode:'',
        currentId:null,
        searchSampleCode:''
@@ -866,6 +416,11 @@
      selectList() {
        this.$axios.get(this.$api.warehouse.selectWarehouse).then(res => {
          this.warehouse = res.data
          if(res.data.length==0){
            this.entity.warehouseId = '';
            this.entity.shelfId = '';
            this.tableList = []
          }
          this.storageList = this.HaveJson(res.data).map(item=>{
            item.warehouseShelfList&&item.warehouseShelfList.length>0&&item.warehouseShelfList.map(m=>{
              let warehouseShelfList = [];
@@ -894,6 +449,16 @@
            if(this.shelf.length>0){
              this.entity.shelfId = this.shelf[0].id
              this.handleShelf(this.entity.shelfId)
            }else{
              this.tableList = []
            }
          }else if(this.warehouse.length>0){
            this.warehouseChange(this.entity.warehouseId)
            if(this.shelf.length>0){
              this.entity.shelfId = this.shelf[0].id
              this.handleShelf(this.entity.shelfId)
            }else{
              this.tableList = []
            }
          }
        })
@@ -956,10 +521,6 @@
            this.handleShelf(this.entity.shelfId)
          })
      },
      // 维护
      confirmKeep() {
        this.upLoadKeep = true;
      },
      // 添加/修改仓库
      confirmWarehouse() {
        if (!this.name) {
@@ -979,6 +540,7 @@
                }).then(res => {
            this.upLoadWarehouse = false;
            this.warehouseVisible = false
            // this.keepVisible = false
            this.currentEdit = null;
            if (res.code == 201) {
              this.$message.error('修改失败')
@@ -986,6 +548,8 @@
            }
            this.$message.success('修改成功')
            this.selectList()
            this.name = ''
            this.warehouseChange(this.entity.warehouseId)
          })
        }else{
          // 新增仓库
@@ -1000,10 +564,10 @@
            }
            this.$message.success('添加成功')
            this.selectList()
            this.name = ''
            this.warehouseChange(this.entity.warehouseId)
          })
        }
        this.name = ''
        this.warehouseChange(this.entity.warehouseId)
      },
      // 添加/修改货架
      confirmShelves() {
@@ -1031,11 +595,12 @@
                }).then(res => {
            this.upLoadShelves = false;
            this.shelvesVisible = false
            // this.keepVisible = false
            if (res.code == 201) {
              this.$message.error('添加失败')
              this.$message.error('修改失败')
              return
            }
            this.$message.success('添加成功')
            this.$message.success('修改成功')
            this.selectList()
            this.currentEdit ={};
          })
@@ -1070,6 +635,7 @@
      },
      nodeOpen(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
        this.selectTree[node.level-1] = data.id;
      },
      nodeClose(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
@@ -1134,6 +700,7 @@
        this.isDetail = true;
      },
      warehouseChange(val) {
        this.tableList = []
        let map = this.warehouse.find(a => {
          return a.id === val ? a : null
        })
@@ -1141,33 +708,37 @@
        this.entity.shelfId = '';
      },
      handleShelf(e){
        this.tableLoading = true;
        this.$axios.get(this.$api.warehouse.getWarehouse+'?shelfId='+e).then(res => {
          let data = res.data;
          let set =new Set()
          this.tableList = [];
          let arr = []
          data.forEach(m=>{
            set.add(m.col)
            if(arr.length>0){
              if(arr.find(n=>n.row==m.row)){
                arr.push(m)
        if(e){
          this.tableLoading = true;
          this.$axios.get(this.$api.warehouse.getWarehouse+'?shelfId='+e).then(res => {
            this.tableLoading = false;
            let data = res.data;
            let set =new Set()
            this.tableList = [];
            let arr = []
            data.forEach(m=>{
              set.add(m.col)
              if(arr.length>0){
                if(arr.find(n=>n.row==m.row)){
                  arr.push(m)
                }else{
                  this.tableList.push(arr)
                  arr = []
                  arr.push(m)
                }
              }else{
                this.tableList.push(arr)
                arr = []
                arr.push(m)
              }
            }else{
              arr.push(m)
            })
            this.tableList.push(arr)
            this.rowList = [];
            for(let i=0;i<set.size;i++){
              this.rowList.push(`${i+1} 列`)
            }
          }).catch(e=>{
            this.tableLoading = false;
          })
          this.tableList.push(arr)
          this.rowList = [];
          for(let i=0;i<set.size;i++){
            this.rowList.push(`${i+1} 列`)
          }
          this.tableLoading = false;
        })
        }
      },
      handleSearch(){
        if(!this.searchSampleCode){
src/components/view/b2-standard.vue
@@ -78,7 +78,7 @@
  }
  .standard .has-gutter .el-table__cell .cell {
    line-height: 38px;
    line-height: 34px;
    background-color: #f8f8f8;
  }
@@ -114,9 +114,9 @@
        style="height:calc(100% - 30px);overflow-y: scroll;scrollbar-width: none;">
        <div class="custom-tree-node" slot-scope="{ node, data }">
          <el-row style="width: 100%;">
            <el-col :span="21" :class="{sort:node.level>3}">
            <el-col :span="21" :class="{sort:node.level>3}" :title="data.label">
              <span><i
                  :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
                  :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">
@@ -142,9 +142,9 @@
        <!-- </el-col> -->
      </el-row>
      <el-row class="standard_table" v-loading="tableLoad">
        <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;overflow-y: auto;"
          tooltip-effect="dark" highlight-current-row @row-click="rowClick" ref="standard">
          <el-table-column prop="code" label="标准编号" show-overflow-tooltip width="180">
        <el-table class="el-table" :data="standardList" style="width: 100%;" height="220" tooltip-effect="dark"
          highlight-current-row @row-click="rowClick" ref="standard">
          <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>
            </template>
@@ -166,6 +166,7 @@
          @select="upProductSelect" @select-all="handleAll">
          <el-table-column type="selection" width="65">
          </el-table-column>
          <el-table-column prop="model" label="型号" min-width="120" 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"
@@ -198,8 +199,22 @@
            </template>
          </el-table-column>
          <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="price" label="单价(元)" width="90" show-overflow-tooltip></el-table-column>
          <el-table-column prop="manHour" label="工时(H)" width="90" show-overflow-tooltip></el-table-column>
          <el-table-column prop="price" label="单价(元)" width="120">
            <template slot-scope="scope">
              <el-input v-model="scope.row.price" size="small" placeholder="单价(元)"
                @change="(value)=>upStandardProductListOfPrice(value,scope.row.id)" v-if="upStandardProduct">
              </el-input>
              <span v-else>{{scope.row.price}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="manHour" label="工时系数" width="120">
            <template slot-scope="scope">
              <el-input v-model="scope.row.manHour" size="small" placeholder="单价(元)"
                @change="(value)=>upStandardProductListOfManHour(value,scope.row.id)" v-if="upStandardProduct">
              </el-input>
              <span v-else>{{scope.row.manHour}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
          <el-table-column prop="section" label="操作" width="120">
@@ -277,19 +292,41 @@
        <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="区间设置" :visible.sync="sectionUpDia" width="500px">
    <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">
          <el-table-column type="index" label="序号" width="70" align="center">
          </el-table-column>
          <el-table-column label="区间" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.thing" clearable></el-input>
              <el-input size="small" v-model="scope.row.thing" clearable placeholder="区间"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="要求值" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.ask" clearable placeholder="要求值"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="要求描述" align="center">
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable type="textarea"
                :autosize="{ minRows: 1, maxRows: 2}"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="单价" align="center" width="120">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.price" clearable placeholder="单价"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="工时系数" align="center" width="120">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.manHour" clearable placeholder="工时系数"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="操作" width="70" align="center">
            <template slot-scope="scope">
              <el-button size="mini" type="danger" icon="el-icon-minus" circle @click="sectionList.splice(scope.$index, 1)"></el-button>
              <el-button size="mini" type="danger" icon="el-icon-minus" circle
                @click="sectionList.splice(scope.$index, 1)"></el-button>
            </template>
          </el-table-column>
        </el-table>
@@ -738,7 +775,39 @@
            this.$message.error('未保存')
            return
          }
          this.$message.success('已保存')
          // this.$message.success('已保存')
        })
      },
      upStandardProductListOfPrice(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          price: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      upStandardProductListOfManHour(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          manHour: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      delStandardMethodByFLSSM(id) {
@@ -875,26 +944,54 @@
        this.sectionRow = row
        this.sectionUpDia = true
        this.sectionList = []
        if(this.sectionRow.section!==null){
          JSON.parse(this.sectionRow.section).forEach(a=>{
        if (this.sectionRow.section != null && this.sectionRow.section != '') {
          JSON.parse(this.sectionRow.section).forEach((a, ai) => {
            this.sectionList.push({
              thing: a
              thing: a,
              ask: JSON.parse(this.sectionRow.ask)[ai],
              tell: JSON.parse(this.sectionRow.tell)[ai],
              price: JSON.parse(this.sectionRow.price)[ai],
              manHour: JSON.parse(this.sectionRow.manHour)[ai]
            })
          })
        }
      },
      sectionLoadAdd() {
        let sectionList = []
        this.sectionList.forEach(a=>{
          if(a.thing!==''){
        let askList = []
        let tellList = []
        let priceList = []
        let manHourList = []
        this.sectionList.forEach(a => {
          if (a.thing !== '') {
            sectionList.push(a.thing)
            askList.push(a.ask)
            tellList.push(a.tell)
            priceList.push(a.price)
            manHourList.push(a.manHour)
          }
        })
        this.sectionRow.section = JSON.stringify(sectionList)
        if (sectionList.length === 0) {
          this.sectionRow.section = null
          this.sectionRow.ask = null
          this.sectionRow.tell = null
          this.sectionRow.price = null
          this.sectionRow.manHour = null
        } else {
          this.sectionRow.section = JSON.stringify(sectionList)
          this.sectionRow.ask = JSON.stringify(askList)
          this.sectionRow.tell = JSON.stringify(tellList)
          this.sectionRow.price = JSON.stringify(priceList)
          this.sectionRow.manHour = JSON.stringify(manHourList)
        }
        this.sectionLoad = true
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: this.sectionRow.id,
          section: this.sectionRow.section
          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'
src/components/view/b3-classes.vue
@@ -0,0 +1,735 @@
<template>
<div class="class-page">
  <div class="search">
    <div class="search_thing">
      <div class="search_label">选择时间:</div>
      <div class="search_input">
        <el-date-picker
          v-model="query.year"
          type="year"
          size="small"
          placeholder="选择年"
          style="width: 140px;"
          :clearable="false">
        </el-date-picker>
        <el-select
        v-model="query.month"
        clearable
        placeholder="选择月"
        style="width: 140px;margin-left: 16px;"
        size="small">
          <el-option
            v-for="item in monthOptions"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-input v-model="query.userName" placeholder="请输入人员名称" size="small" style="width: 140px;margin: 0 16px;" clearable ></el-input>
        <el-select v-model="query.laboratory" placeholder="请选择实验室" style="width: 140px;" size="small" clearable >
          <el-option
            v-for="item in laboratory"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
      </div>
    </div>
    <div class="search_thing" style="padding-left: 30px;">
      <el-button size="small" @click="refresh()">重 置</el-button>
      <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
    </div>
    <div class="search_thing btns" style="padding-left: 30px;">
      <el-button size="small" type="primary">导 出</el-button>
      <el-button size="small" type="primary" @click="schedulingVisible = true">排 班</el-button>
    </div>
  </div>
  <div class="center" v-loading="pageLoading">
    <scroll-pagination @load="init" :finishLoding="finishLoding">
      <div class="clearfix">
        <div class="fixed-left">
          <div class="content-title" style="padding-left: 16px;box-sizing: border-box;">
            人员名称
          </div>
          <div class="content-user" :class="{hoverType:currentUserIndex==index}" v-for="(item,index) in list" :key="'e'+index" v-on:mouseenter="onMouseEnter(index)"
          v-on:mouseleave="currentUserIndex=null">
            <div class="user-pic">{{ item.name.charAt(0) }}</div>
            <div class="user-info">
              <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p>
              <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">早: {{ item.day0 }}, 中: {{ item.day1 }}, 夜: {{ item.day2 }}, 休: {{ item.day3 }}, 假: {{ item.day4 }}</p>
              <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">合计出勤: </span><span style="font-size: 16px;
    color: #FF4902;">{{ item.totalAttendance }}天</span></p>
            </div>
          </div>
        </div>
        <div class="scroll-right">
          <div class="content">
            <div class="content-title content-title-right" style="border-bottom: 0;">
              <div class="content-title-item" v-for="(item,index) in weeks" :key="'b'+index">
                <span class="month">{{ item.weekNum }}周</span>
                <span class="day">{{ item.day }}</span>
                <span class="week">{{ item.week }}</span>
              </div>
            </div>
            <div class="content-body" v-for="(item,index) in list" :key="'c'+index"
            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',}">
                  <div class="work-box-left">
                    <span>{{ getShiftByDic(m.shift) }}</span>
                  </div>
                  <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)">
                    <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i>
                    <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>
        </div>
      </div>
    </scroll-pagination>
  </div>
  <el-dialog title="排班" :visible.sync="schedulingVisible" width="400px">
    <div class="search_thing">
      <div class="search_label" style="width:90px">周次:</div>
      <div class="search_input">
        <el-date-picker
          v-model="schedulingQuery.week"
          type="week"
          format="yyyy 第 WW 周"
          placeholder="选择周次" style="width: 203px;">
        </el-date-picker>
      </div>
    </div>
    <div class="search_thing">
      <div class="search_label" style="width:90px">人员名称:</div>
      <div class="search_input">
        <el-select v-model="schedulingQuery.userId" placeholder="请选择" style="width: 100%;" multiple clearable collapse-tags >
          <el-option
            v-for="item in personList"
            :key="item.id"
            :label="item.name"
            :value="item.id">
          </el-option>
        </el-select>
      </div>
    </div>
    <div class="search_thing">
      <div class="search_label" style="width:90px">班次:</div>
      <div class="search_input">
        <el-select v-model="schedulingQuery.shift" placeholder="请选择" style="width: 100%;">
          <el-option
            v-for="item in classType"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
      </div>
    </div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="schedulingVisible = false">取 消</el-button>
      <el-button type="primary" @click="confirmScheduling" :loading="loading">确 定</el-button>
    </span>
  </el-dialog>
</div>
</template>
<script>
import {
        getYearAndMonthAndDays
    } from '../../util/date'
  import ScrollPagination from '../tool/scroll-paging.vue'
export default {
  components: {
    ScrollPagination
  },
  data () {
    return{
      currentYear:new Date().getFullYear(),
      currentMonth:new Date().getMonth()+1,
      query:{
        userName:'',
        laboratory:'',
        year:'',
        month:''
      },
      monthOptions:[
        {
          value:'1',
          label:'1月'
        },
        {
          value:'2',
          label:'2月'
        },
        {
          value:'3',
          label:'3月'
        },
        {
          value:'4',
          label:'4月'
        },
        {
          value:'5',
          label:'5月'
        },
        {
          value:'6',
          label:'6月'
        },
        {
          value:'7',
          label:'7月'
        },
        {
          value:'8',
          label:'8月'
        },
        {
          value:'9',
          label:'9月'
        },
        {
          value:'10',
          label:'10月'
        },
        {
          value:'11',
          label:'11月'
        },
        {
          value:'12',
          label:'12月'
        },
      ],
      laboratory:[],
      weeks:[],
      workList:[
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'中班',
          time:'8:00-16:00',
        },
        {
          type:'夜班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
        {
          type:'早班',
          time:'8:00-16:00',
        },
      ],
      classType:[],
      currentUserIndex:null,
      schedulingVisible:false,
      personList:[],
      loading:false,
      schedulingQuery:{
        week:'',
        userId:null,
        shift:''
      },
      list:[],
      currentPage: 1, // 当前页
      pageSize: 10, // 一页10条
      total: '',
      pageLoading: true, // 组件loading的展示,默认为true
      finishLoding: false // 加载完成,显示已经没有更多了
    }
  },
  mounted(){
    this.selectEnumByCategory()
    this.obtainItemParameterList()
    this.getUsers()
    this.init()
  },
  methods: {
    refresh(){
      this.list = [];
      this.currentPage = 1
      this.query = {
        userName:'',
        laboratory:'',
        year:'',
        month:''
      }
      this.init()
    },
    refreshTable(){
      this.list = [];
      this.currentPage = 1
      this.init()
    },
    init(){
      if(this.currentPage==1){
        this.pageLoading = true
      }
      this.$axios.post(this.$api.performanceShift.page, {
        size:this.pageSize,
        current:this.currentPage,
        time:this.query.month?this.query.year+'-'+this.query.month:this.query.year,
        userName:this.query.userName,
        laboratory:this.query.laboratory,
        }).then(res => {
          this.pageLoading = false
          if (res.code == 201) return
          this.total = res.data.total
          let list = res.data.records.map(item=>{
            for (let key in item) {
              let type = this.getDayByDic(key)
              if(type!=undefined||type!=null){
                item[`day${type}`] = item[key]
              }
            }
            return item
          });
          // 右侧日期获取
          if(this.currentPage==1){
            if(list&&list.length>0){
              this.weeks = [];
              list[0].list&&list[0].list.forEach(item=>{
                let obj = {
                  weekNum:item.weekly,
                  week:item.headerTime.split(' ')[1],
                  day:item.headerTime.split(' ')[0]
                }
                this.weeks.push(obj)
              })
            }
          }
          if(list.length==0){
            this.finishLoding = true;
          }else{
            if(list.length<this.pageSize){
              this.finishLoding = true;
            }
            this.list = this.list.concat(list)
            if(this.total==this.list.length){
              this.finishLoding = true;
            }
            this.currentPage++;
          }
        })
    },
    onMouseEnter(index){
      this.currentUserIndex = index
    },
    confirmScheduling(){
      if(!this.schedulingQuery.week){
        this.$message.error('请选择周次')
        return
      }
      let time = this.schedulingQuery.week.getTime()
      let startWeek  =getYearAndMonthAndDays(new Date(time - 24 * 60 * 60 * 1000)) + ' 00:00:00'
      let endWeek = getYearAndMonthAndDays(new Date(time + 24 * 60 * 60 * 1000 * 5))+ ' 00:00:00'
      if(!this.schedulingQuery.userId||this.schedulingQuery.userId.length==0){
        this.$message.error('请选择人员')
        return
      }
      if(!this.schedulingQuery.shift){
        this.$message.error('请选择班次')
        return
      }
      this.loading = true
      this.$axios.post(this.$api.performanceShift.add, {
            startWeek,
            endWeek,
            userId:this.schedulingQuery.userId.join(','),
            shift:this.schedulingQuery.shift}, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
        this.loading = false
        if (res.code == 201) return
        this.$message.success('操作成功')
        this.schedulingVisible = false
        this.schedulingQuery = {
          week:'',
          userId:null,
          shift:''
        }
        this.refresh()
      })
    },
    selectEnumByCategory() {
      this.$axios.post(this.$api.enums.selectEnumByCategory, {
        category: "班次类型"
      }).then(res => {
        this.classType = res.data
      })
    },
    obtainItemParameterList() {
      this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.laboratoryName,
            value: a.id
          })
        })
        this.laboratory = data
      })
    },
    handleCommand(e,m){
      if(e!=m.shift){
        this.$axios.put(this.$api.performanceShift.update+m.id, {
          id:m.id,
          shift:e
        }).then(res => {
          if (res.code == 201) return
          this.$message.success('操作成功')
          m.shift = e
        })
      }
    },
    getUsers(){
      this.$axios.post(this.$api.user.selectUserList, {
                    page: {
            current: -1,
            size: -1,
          },
                    entity: {
            name: null,
          }
                }, {
                    headers: {
                        'Content-Type': 'application/json'
                    }
                }).then(res => {
                    if (res.code === 201) {
                        return
                    }
          let arr = res.data.body.records
          this.personList = arr
        })
    },
    getDayByDic(e){
      let obj = this.classType.find(m=>m.label==e)
      if(obj){
        return obj.value
      }
    },
    getShiftByDic(e){
      let obj = this.classType.find(m=>m.value==e)
      if(obj){
        return obj.label
      }
      return '未排班'
    }
  }
}
</script>
<style scoped>
.search {
  height: 50px;
  display: flex;
  align-items: center;
  position: relative;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 70px;
  font-size: 14px;
  text-align: right;
}
.search_input{
  display: flex;
  align-items: center;
}
.btns{
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translate(0,-50%);
}
.center {
  width: 100%;
  height: calc(100% - 40px );
  background-color: #fff;
  overflow-y: auto;
  display: flex;
}
>>>.scroll-pagination{
  overflow-y: scroll;
  scrollbar-width: none; /* 对于 Firefox 和 IE 的兼容写法 */
}
>>>.scroll-pagination::-webkit-scrollbar {
  display: none; /* 对于 Chrome, Safari 和 Opera 的写法 */
}
.fixed-left {
  float: left;
  width: 220px; /* 左边区域宽度 */
  background-color: #fff;
  box-shadow: 2px -2px 5px rgba(51,51,51,0.12); /* 左边阴影 */
}
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}
.scroll-right {
  width: calc(100% - 220px); /* 减去左边区域宽度 */
  min-height: calc(100% - 10px); /* 视口高度 */
  margin-left: 220px;
  overflow-x: scroll;
}
.content {
  min-height: calc(100% - 10px); /* 视口高度 */
}
.content-title{
  height: 52px;
  line-height: 52px;
  border-bottom: 1px solid #EEEEEE;
}
.content-title-right{
  display: flex;
  align-items: center;
}
.content-title-item{
  height: 100%;
  width: 100px;
  flex-shrink: 0;
  border-bottom: 1px solid #EEEEEE;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: center;
}
.content-title-item .month{
  font-size: 12px;
  color: #3A7BFA;
  box-sizing: border-box;
  padding: 0 4px;
  border-radius: 50%;
  background: #D6E4FF;
  line-height: 30px;
  text-align: center;
  margin-right: 6px;
}
.content-title-item .day{
  font-size: 16px;
  color: #333333;
  margin-right: 6px;
}
.content-title-item .week{
  font-size: 14px;
  color: #999999;
}
.content-body{
  display: flex;
  align-items: center;
}
.content-body-item{
  height: 80px;
  width: 100px;
  flex-shrink: 0;
  box-sizing: border-box;
  padding: 4px;
  border-right: 1px solid #EEEEEE;
  border-bottom: 1px solid #EEEEEE;
}
.work-box{
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-around;
  background: #F5F7FB;
  border-radius: 8px 8px 8px 8px;
  color: #999;
  font-size: 14px;
}
.work-box.type0{
  background: rgba(58,123,250,0.15);
  color: #3A7BFA;
}
.work-box.type1{
  background: #E3DCFE;
  color: #635998;
}
.work-box.type2{
  background: #FAE2CA;
  color: #BC8D5E;
}
.work-box.type3{
  background: #E1F3D8;
  color: #67C23A;
}
.work-box.type4{
  background: #FDE2E2;
  color: #F56C6C;
}
.el-icon-arrow-down::before{
  color: #c6c4c4;
}
.type0 .el-icon-arrow-down::before{
  color: #fff;
}
.type1 .el-icon-arrow-down::before{
  color: #fff;
}
.type2 .el-icon-arrow-down::before{
  color: #fff;
}
.type3 .el-icon-arrow-down::before{
  color: #fff;
}
.type4 .el-icon-arrow-down::before{
  color: #fff;
}
.work-box-left{
  display: flex;
  justify-content: center;
  flex-direction: column;
  line-height: 24px;
}
.content-user{
  width: 100%;
  height: 80px;
  box-sizing: border-box;
  border-bottom: 1px solid #EEEEEE;
  display: flex;
  align-items: center;
}
.user-pic{
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background: #C0C4CC;
  color: #fff;
  font-size: 20px;
  text-align: center;
  line-height: 50px;
  margin-left: 10px;
}
.user-info{
  flex: 1;
  margin-left: 10px;
}
.hoverType{
  background: rgba(58,123,250,0.05);
}
</style>
src/components/view/b4-daily-business-statistics.vue
@@ -147,10 +147,12 @@
      },
      pageData:{},
      loading:false,
      timers:null,
    }
  },
  mounted(){
    this.init()
    this.timers&&clearInterval(this.timers);
    setInterval(this.init,1000*60*5)
  },
  methods:{
    init(){
@@ -181,6 +183,9 @@
        return '0'
      }
    }
  },
  deactivated(){
    this.timers&&clearInterval(this.timers);
  }
}
</script>
src/components/view/b4-inspection-item-statistics.vue
@@ -129,7 +129,7 @@
        },
        chartData2:{
          title:'今日项目合格率',
          percentage:'68%',
          percentage:'0',
          color:['#1CCAB8','#E1E4E8'],
          data:[
            {
@@ -150,16 +150,16 @@
        },
        chartData3:{
          title:'今日项目完成率',
          percentage:'68%',
          percentage:'0',
          color:['#FBB647','#E1E4E8'],
          data:[
            {
              name:'完成',
              value:'68'
              value:'0'
            },
            {
              name:'未完成',
              value:'32'
              value:'0'
            },
          ]
        },
@@ -171,25 +171,28 @@
        },
        chartData4:{
          title:'今日项延期率',
          percentage:'68%',
          percentage:'0',
          color:['#FF3838','#E1E4E8'],
          data:[
            {
              name:'延期',
              value:'68'
              value:'0'
            },
            {
              name:'未延期',
              value:'32'
              value:'0'
            },
          ]
        },
        loading:false,
        pageData:{}
        pageData:{},
        timers:null
      }
    },
    mounted(){
      this.init()
      // this.init()
      this.timers&&clearInterval(this.timers);
      setInterval(this.init,1000*60*5)
    },
    methods:{
      init(){
@@ -227,7 +230,7 @@
        this.chartConfig3.isLoading = true
        this.chartConfig4.isLoading = true
      })
    },
      },
      handleData(val){
        if(val){
          return Math.abs(val)*100;
@@ -235,6 +238,9 @@
          return '0'
        }
      }
    },
    deactivated(){
      this.timers&&clearInterval(this.timers);
    }
  }
  </script>
src/main.js
@@ -13,8 +13,11 @@
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// const javaApi = 'http://127.0.0.1:8001';//李
const javaApi = 'http://114.132.189.42:1234';//测试服
// const javaApi = 'http://192.168.11.200:8001';//李
// const javaApi = 'http://192.168.11.249:8001';//张
const javaApi = 'http://172.20.10.3:8001';//姜
// const javaApi = 'http://192.168.11.2:8001';//柴
// const javaApi = 'http://114.132.189.42:1234';//测试服
//胜云服务器
// Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn";
// const javaApi = 'http://122.114.52.69:8001';
static/js/menu.js
@@ -100,7 +100,7 @@
        }, {
            v: "班次",
            i: "font icon-erjidaohang",
            u: "",
            u: "b3-classes",
            p: ""
        }]
    },