Merge remote-tracking branch 'origin/master'
# Conflicts:
# src/assets/api/controller.js
# static/js/menu.js
| | |
| | | certification, |
| | | sealScope, |
| | | informationNotification, |
| | | performanceShift, |
| | | unPass, |
| | | } |
| | | } |
| | |
| | | triggerModificationStatusToRead:"/informationNotification/triggerModificationStatusToRead",//点击详情触发修改状态为已读 |
| | | } |
| | | |
| | | const performanceShift = { |
| | | add:"/performanceShift/add",//绩效管理-班次-排班 |
| | | page:"/performanceShift/page",//绩效管理-班次-分页查询 |
| | | update:"/performanceShift/update/",//绩效管理-班次-班次状态修改 |
| | | } |
| | | |
| | | const unPass = { |
| | | pageInsUnPass:"/unPass/pageInsUnPass", // 查询不合格样品数据 |
| | | } |
| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | sampleType: null, |
| | | sample: null, |
| | | model: null, |
| | | modelNum: null, |
| | | sampleNum: 1, |
| | | isLeave: 0, |
| | | unit: null |
| | |
| | | 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' |
| | |
| | | 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) |
| | | }) |
| | | }) |
| | | }, |
| | |
| | | }) |
| | | }, |
| | | 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: { |
| | |
| | | } |
| | | } |
| | | 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) { |
| | |
| | | <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> |
| | |
| | | this.histories = histories; |
| | | this.products = products; |
| | | }) |
| | | }, |
| | | handleData(e){ |
| | | let info = JSON.parse(e).map(item => { |
| | | return item.v; |
| | | }).join(',') |
| | | return info |
| | | } |
| | | } |
| | | } |
| | |
| | | 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: { |
| | |
| | | //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) { |
| | |
| | | } |
| | | }, |
| | | 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' |
| | |
| | | }, |
| | | 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' |
| | |
| | | <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> |
| | |
| | | font: '复核', |
| | | type: 'text', |
| | | method: 'handleReview', |
| | | disabFun: (row, index) => { |
| | | /* disabFun: (row, index) => { |
| | | return row.userId == null || row.insState != 3 |
| | | } |
| | | } */ |
| | | }, { |
| | | id: '', |
| | | font: '认领', |
| | |
| | | .custom-tree-node:hover .el-button { |
| | | opacity: 1; |
| | | } |
| | | >>>.el-loading-mask { |
| | | z-index: 10; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | |
| | | </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"> |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | <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" |
| | |
| | | <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)"> |
| | |
| | | </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"> |
| | |
| | | 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:'', |
| | |
| | | isEdit: false, //弹框--是否是修改,默认为false |
| | | isDetail: false, //详情--是否展示为详情页面,默认为false |
| | | currentEdit:null,//当前要维护的信息 |
| | | tableLoading:true, |
| | | tableLoading:false, |
| | | sampleCode:'', |
| | | currentId:null, |
| | | searchSampleCode:'' |
| | |
| | | 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 = []; |
| | |
| | | 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 = [] |
| | | } |
| | | } |
| | | }) |
| | |
| | | this.handleShelf(this.entity.shelfId) |
| | | }) |
| | | }, |
| | | // 维护 |
| | | confirmKeep() { |
| | | this.upLoadKeep = true; |
| | | }, |
| | | // 添加/修改仓库 |
| | | confirmWarehouse() { |
| | | if (!this.name) { |
| | |
| | | }).then(res => { |
| | | this.upLoadWarehouse = false; |
| | | this.warehouseVisible = false |
| | | // this.keepVisible = false |
| | | this.currentEdit = null; |
| | | if (res.code == 201) { |
| | | this.$message.error('修改失败') |
| | |
| | | } |
| | | this.$message.success('修改成功') |
| | | this.selectList() |
| | | this.name = '' |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }) |
| | | }else{ |
| | | // 新增仓库 |
| | |
| | | } |
| | | this.$message.success('添加成功') |
| | | this.selectList() |
| | | this.name = '' |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }) |
| | | } |
| | | this.name = '' |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }, |
| | | // 添加/修改货架 |
| | | confirmShelves() { |
| | |
| | | }).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 ={}; |
| | | }) |
| | |
| | | }, |
| | | 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') |
| | |
| | | this.isDetail = true; |
| | | }, |
| | | warehouseChange(val) { |
| | | this.tableList = [] |
| | | let map = this.warehouse.find(a => { |
| | | return a.id === val ? a : null |
| | | }) |
| | |
| | | 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){ |
| | |
| | | } |
| | | |
| | | .standard .has-gutter .el-table__cell .cell { |
| | | line-height: 38px; |
| | | line-height: 34px; |
| | | background-color: #f8f8f8; |
| | | } |
| | | |
| | |
| | | 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"> |
| | |
| | | <!-- </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> |
| | |
| | | @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" |
| | |
| | | </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"> |
| | |
| | | <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> |
| | |
| | | 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) { |
| | |
| | | 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' |
| | |
| | | <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> |
| | |
| | | }, |
| | | pageData:{}, |
| | | loading:false, |
| | | timers:null, |
| | | } |
| | | }, |
| | | mounted(){ |
| | | this.init() |
| | | this.timers&&clearInterval(this.timers); |
| | | setInterval(this.init,1000*60*5) |
| | | }, |
| | | methods:{ |
| | | init(){ |
| | |
| | | return '0' |
| | | } |
| | | } |
| | | }, |
| | | deactivated(){ |
| | | this.timers&&clearInterval(this.timers); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | }, |
| | | chartData2:{ |
| | | title:'今日项目合格率', |
| | | percentage:'68%', |
| | | percentage:'0', |
| | | color:['#1CCAB8','#E1E4E8'], |
| | | data:[ |
| | | { |
| | |
| | | }, |
| | | chartData3:{ |
| | | title:'今日项目完成率', |
| | | percentage:'68%', |
| | | percentage:'0', |
| | | color:['#FBB647','#E1E4E8'], |
| | | data:[ |
| | | { |
| | | name:'完成', |
| | | value:'68' |
| | | value:'0' |
| | | }, |
| | | { |
| | | name:'未完成', |
| | | value:'32' |
| | | value:'0' |
| | | }, |
| | | ] |
| | | }, |
| | |
| | | }, |
| | | 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(){ |
| | |
| | | this.chartConfig3.isLoading = true |
| | | this.chartConfig4.isLoading = true |
| | | }) |
| | | }, |
| | | }, |
| | | handleData(val){ |
| | | if(val){ |
| | | return Math.abs(val)*100; |
| | |
| | | return '0' |
| | | } |
| | | } |
| | | }, |
| | | deactivated(){ |
| | | this.timers&&clearInterval(this.timers); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | |
| | | //本地 |
| | | 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'; |
| | |
| | | }, { |
| | | v: "班次", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | u: "b3-classes", |
| | | p: "" |
| | | }] |
| | | }, |