From e02fa5bedb087519dabee9690c13f1b7f8be0787 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期一, 01 四月 2024 15:31:44 +0800 Subject: [PATCH] 完成交接复核功能 --- src/components/view/enums.vue | 6 + src/components/do/b1-ins-order/add.vue | 4 src/components/tool/value-table.vue | 43 ++++++++ src/main.js | 2 src/components/do/b1-inspect-order-plan/Inspection.vue | 95 ++++++++++++++++-- src/components/view/b1-inspect-order-plan.vue | 128 +++++++++++++++++++++++- src/assets/api/controller.js | 2 7 files changed, 255 insertions(+), 25 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index f97a408..e605ddb 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -137,6 +137,8 @@ claimInsOrderPlan: "/insOrderPlan/claimInsOrderPlan",//璁ら妫�楠屼换鍔� doInsOrder: "/insOrderPlan/doInsOrder",//鎵ц妫�楠屾搷浣� saveInsContext: "/insOrderPlan/saveInsContext",//淇濆瓨妫�楠屽唴瀹� + upPlanUser: "/insOrderPlan/upPlanUser",//浠诲姟浜ゆ帴 + verifyPlan: "/insOrderPlan/verifyPlan",//澶嶆牳妫�楠屼换鍔� } const systemLog = { diff --git a/src/components/do/b1-ins-order/add.vue b/src/components/do/b1-ins-order/add.vue index 201c3e4..3b58669 100644 --- a/src/components/do/b1-ins-order/add.vue +++ b/src/components/do/b1-ins-order/add.vue @@ -107,6 +107,7 @@ <span style="color: #3A7BFA;">淇濆瓨妯℃澘</span> </el-button> <el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">鎻愪氦</el-button> + <!-- 瀹℃牳 --> <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3">涓嶉�氳繃</el-button> <el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad" v-show="active==3">閫氳繃</el-button> @@ -458,6 +459,7 @@ </el-row> </span> </el-dialog> + </div> </template> @@ -1123,7 +1125,7 @@ this.$nextTick(()=>{ this.$refs.productTable.doLayout() }) - } + }, } } </script> diff --git a/src/components/do/b1-inspect-order-plan/Inspection.vue b/src/components/do/b1-inspect-order-plan/Inspection.vue index 87ce163..7b70bdc 100644 --- a/src/components/do/b1-inspect-order-plan/Inspection.vue +++ b/src/components/do/b1-inspect-order-plan/Inspection.vue @@ -18,24 +18,21 @@ .center { width: calc(100% - 40px); - height: calc(100% - 60px - 80px - 40px); + max-height: 580px; background-color: #fff; border-radius: 3px; padding: 20px; - position: relative; + overflow-y: auto; } .center-box { - height: 100%; display: flex; align-items: center; justify-content: center; flex-wrap: wrap; - overflow-y: auto; } .tables { - /* width: 800px; */ margin-bottom: 16px; } @@ -127,6 +124,10 @@ <el-col :span="12" style="text-align: right;"> <el-button size="small" type="primary" @click="sampleVisible=true">鏍峰搧鍒囨崲</el-button> <el-button size="small" type="primary" @click="taskVisible=true">浠诲姟鍒囨崲</el-button> + <!-- 澶嶆牳 --> + <el-button size="medium" type="primary" @click="upInsReview(1)" :loading="reviewLoading" + v-show="state>1">閫氳繃</el-button> + <el-button size="medium" @click="upInsReview(0)" v-show="state>1">涓嶉�氳繃</el-button> <el-button size="small" @click="$emit('goback')">杩斿洖</el-button> </el-col> </el-row> @@ -169,11 +170,11 @@ <div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`"> <template v-if="n.v.ps!=undefined && n.v.ps.value==='妫�楠屽��'"> <el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v" - :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')" + :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')||state>1" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)" /> <el-input v-else-if="getInspectionValueType(n.i) == 2" class="table_input" type="textarea" - :autosize="{ minRows: 1}" v-model="n.v.v" /> - <el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v"> + :autosize="{ minRows: 1}" v-model="n.v.v" :disabled="state>1" /> + <el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v" :disabled="state>1"> <el-option label="鏄�" value="鏄�"></el-option> <el-option label="鍚�" value="鍚�"></el-option> </el-select> @@ -181,7 +182,7 @@ v-else-if="getInspectionValueType(n.i) == 4">/</span> <el-button type="primary" icon="el-icon-edit" size="mini" circle v-if="getInspectionItemType(n.i) == 1" style="border: 0;margin-left: 2px;" - @click="getSystemValue(n)" :disabled="n.u != userId && n.u != undefined && n.u != ''"> + @click="getSystemValue(n)" :disabled="(n.u != userId && n.u != undefined && n.u != '')||state>1"> </el-button> </template> <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='缁撹'"> @@ -190,7 +191,7 @@ <span v-else :style="`font-family:${n.v.ff} !important;`">寰呭畾</span> </template> <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='璁惧'"> - <el-select v-model="n.v.v" placeholder="璇烽�夋嫨" @visible-change="e=>getEquipOptions(e,n.i)"> + <el-select v-model="n.v.v" placeholder="璇烽�夋嫨" @visible-change="e=>getEquipOptions(e,n.i)" :disabled="state>1"> <el-option v-for="item in equipOptions" :key="item.value" @@ -239,13 +240,25 @@ <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList" :componentData="componentData" :key="upIndex" /> </el-drawer> + <el-dialog title="妫�楠屽鏍�" :visible.sync="reviewDia" width="400px"> + <div class="body" style="display: flex;align-items: center;" v-if="reviewDia"> + <div class="search_label" style="width: 120px;"><span class="required-span">* </span>涓嶉�氳繃鍘熷洜锛�</div> + <div class="search_input"> + <el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 3, maxRows: 5}"></el-input> + </div> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="reviewDia = false">鍙� 娑�</el-button> + <el-button type="primary" @click="handleReviewDia" :loading="reviewLoading">纭� 瀹�</el-button> + </span> + </el-dialog> </div> </template> <script> import ValueTable from '../../tool/value-table.vue' export default { - props: ['sonLaboratory', 'orderId'], + props: ['sonLaboratory', 'orderId','state'], components: { ValueTable, }, @@ -298,7 +311,10 @@ comparisonList: [], excelMethodList: [], equipOptions:[], - userId: 0 + userId: 0, + reviewLoading:false, + reviewDia:false, + noReason:'' } }, created() { @@ -794,6 +810,61 @@ this.userId = res.data.id }) }, + // 澶嶆牳 + upInsReview(e){ + if(e==1){ + // 閫氳繃 + this.reviewLoading = true; + this.$axios.post(this.$api.insOrderPlan.verifyPlan, { + orderId:this.orderId, + type:1, + laboratory:this.sonLaboratory, + tell:null + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 200 && res.data) { + this.reviewLoading = false; + this.$message.success("澶嶆牳閫氳繃") + this.$emit('goback') + } + }).catch(error => { + console.error(error) + this.reviewLoading = false; + }) + }else{ + // 涓嶉�氳繃 + this.reviewDia = true; + } + }, + handleReviewDia(){ + if(this.noReason){ + this.reviewLoading = true; + this.$axios.post(this.$api.insOrderPlan.verifyPlan, { + orderId:this.orderId, + type:0, + laboratory:this.sonLaboratory, + tell:this.noReason + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 200 && res.data) { + this.reviewLoading = false; + this.$message.success("澶嶆牳涓嶉�氳繃") + this.$emit('goback') + } + }).catch(error => { + console.error(error) + this.reviewLoading = false; + }) + }else{ + this.$message.error('鏈緭鍏ヤ笉閫氳繃鍘熷洜') + } + }, } } </script> diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue index fbd1c28..9efd2dd 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -80,7 +80,8 @@ @row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0" :summary-method="getSummaries" :row-class-name="tableRowClassName" :row-key="record=>record.id" :current-row-key="data.currentId" - highlight-current-row> + highlight-current-row + :span-method="spanMethod"> <el-table-column type="selection" width="65" v-if="data.showSelect" :key="Math.random()"> </el-table-column> <el-table-column type="index" align="center" label="搴忓彿" width="70" v-if="data.isIndex" :key="Math.random()"> @@ -346,7 +347,9 @@ uploadDia: false, token: null, fileList: [], - init: true + init: true, + testArr: [], + testPosition: 0, } }, watch: { @@ -370,6 +373,37 @@ } }, methods: { + rowspan(spanArr, position, spanName) { + this.tableData.forEach((item, index) => { + if (index === 0) { + spanArr.push(1); + position = 0; + } else { + if ( + this.tableData[index][spanName] === + this.tableData[index - 1][spanName] + ) { + spanArr[position] += 1; + spanArr.push(0); + } else { + spanArr.push(1); + position = index; + } + } + }); + }, + spanMethod({ row, column, rowIndex, columnIndex }){ + if(this.data.spanConfig!=undefined&&this.data.spanConfig.rows){ + if (columnIndex === this.data.spanConfig.rows.index) { + const _row = this.testArr[rowIndex]; + const _col = _row > 0 ? 1 : 0; + return { + rowspan: _row, + colspan: _col, + }; + } + } + }, selectChange(val) { if (this.data.select) { this.multipleSelection = val; @@ -438,6 +472,11 @@ }) } } + if(this.data.spanConfig!=undefined&&this.data.spanConfig.rows){ + this.testArr = [] + this.testPosition = 0 + this.rowspan(this.testArr, this.testPosition, this.data.spanConfig.rows.name); + } this.loading = false }).catch(e => { this.loading = false diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue index 2b397b2..f344c46 100644 --- a/src/components/view/b1-inspect-order-plan.vue +++ b/src/components/view/b1-inspect-order-plan.vue @@ -72,7 +72,7 @@ border-radius: 8px 0 0 8px; } - .tab li:nth-child(3) { + .tab li:nth-last-child(1) { border-radius: 0 8px 8px 0; } @@ -158,13 +158,32 @@ 鏄惁璁ら濮旀墭缂栧彿<span style="color:#33C130">{{sampleUserForm.entrustCode}}</span>鐨勪换鍔� <span slot="footer" class="dialog-footer"> <el-button @click="claimVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button> + <el-button type="primary" @click="confirmClaim" :loading="loading">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="妫�楠屼氦鎺�" :visible.sync="connectVisible" width="400px"> + <div class="search_thing"> + <div class="search_label" style="width:90px">浜ゆ帴浜哄憳锛�</div> + <div class="search_input"> + <el-select v-model="connectPerson" placeholder="璇烽�夋嫨" style="width: 100%;"> + <el-option + v-for="item in personList" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </div> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="connectVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmConnect" :loading="loading">纭� 瀹�</el-button> </span> </el-dialog> <div style="width: 100%;height: 100%;" v-if="activeFace >0"> <Add :active="activeFace" :currentId="currentId"/> </div> - <Inspection v-if="state==1" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory"/> + <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :state="state"/> </div> </template> @@ -175,7 +194,6 @@ getYearAndMonthAndDays } from '../../util/date' import Add from '../do/b1-ins-order/add.vue' -import { number } from 'echarts' export default { components: { ValueTable, @@ -217,13 +235,13 @@ id: '', font: '浜ゆ帴', type: 'text', - method: '' + method: 'handleConnect' }, { id: '', font: '澶嶆牳', type: 'text', - method: '' + method: 'handleReview', }, { id: '', font: '璁ら', @@ -262,6 +280,10 @@ }] } }, + spanConfig:{ + rows:'entrustCode',//鍚堝苟琛�,閫氬父娑夊強涓�涓瓧娈� + cols:[],//鍚堝苟鍒�,閫氬父娑夊強鍑犱釜瀛楁 + }, selectField: {}, requiredAdd: [], requiredUp: [] @@ -269,22 +291,62 @@ upIndex: 0, planTotal: 0, insStateList: [], - state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈紝榛樿涓�0 - activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍� + state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0 + activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0 currentId: null, entityCopy: {}, orderId: 0, + personList:[], + connectVisible:false, + connectPerson:'', + loading:false, } }, created() { this.getLaboratoryDicts() this.getTypeDicts() this.getInsStateDicts() + this.getAuthorizedPerson() }, mounted() { this.entityCopy = this.HaveJson(this.componentData.entity) + this.getPower() }, methods: { + // 鏉冮檺鍒嗛厤 + getPower(radio) { + let power = JSON.parse(sessionStorage.getItem('power')) + let inspection = false + let connect = false + let review = false + let claim = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'doInsOrder') { + inspection = true + } + if (power[i].menuMethod == 'upPlanUser') { + connect = true + } + if (power[i].menuMethod == 'verifyPlan') { + review = true + } + if (power[i].menuMethod == 'claimInsOrderPlan') { + claim = true + } + } + if (!claim) { + this.componentData.do.splice(3, 1) + } + if (!review) { + this.componentData.do.splice(2, 1) + } + if (!connect) { + this.componentData.do.splice(1, 1) + } + if (!inspection) { + this.componentData.do.splice(0, 1) + } + }, changeCheckBox(val) { this.componentData.entity.userId = val?0:null this.refreshTable() @@ -307,18 +369,21 @@ } }, confirmClaim() { + this.loading = true; this.$axios.post(this.$api.insOrderPlan.claimInsOrderPlan, this.sampleUserForm, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code === 200 && res.data) { + this.loading = false; this.$message.success("璁ら鎴愬姛") this.claimVisible = false this.refreshTable() } }).catch(error => { console.error(error) + this.loading = false; }) }, refreshTable() { @@ -423,7 +488,52 @@ handleInspection(row){ this.state = 1; this.orderId = row.id - } + }, + handleConnect(row){ + this.orderId = row.id + this.connectVisible=true; + }, + confirmConnect(){ + if(this.connectPerson){ + this.loading = true; + this.$axios.post(this.$api.insOrderPlan.upPlanUser, { + orderId:this.orderId, + userId:this.connectPerson + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 200 && res.data) { + this.loading = false; + this.$message.success("浜ゆ帴鎴愬姛") + this.connectVisible = false + this.refreshTable() + } + }).catch(error => { + console.error(error) + this.loading = false; + }) + }else{ + this.$message.error('鏈�夋嫨浜ゆ帴浜哄憳') + } + }, + handleReview(row){ + this.state = 2; + this.orderId = row.id + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.personList = data + }) + }, } } </script> diff --git a/src/components/view/enums.vue b/src/components/view/enums.vue index b00c5a2..2084cb7 100644 --- a/src/components/view/enums.vue +++ b/src/components/view/enums.vue @@ -102,6 +102,12 @@ }], tagField: {}, selectField: {}, + spanConfig:{ + rows:{ + name:'category', + index:1 + },//鍚堝苟琛�,閫氬父娑夊強涓�涓瓧娈� + }, requiredAdd:['category','label','value'], requiredUp:['category','label','value'] }, diff --git a/src/main.js b/src/main.js index 018e938..def9d78 100644 --- a/src/main.js +++ b/src/main.js @@ -13,7 +13,7 @@ //鏈湴 Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; -const javaApi = 'http://192.168.0.24:8001';//鏉� +const javaApi = 'http://192.168.0.10:8001';//鏉� // const javaApi = 'http://114.132.189.42:9006';//娴嬭瘯鏈� //鑳滀簯鏈嶅姟鍣� // Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn"; -- Gitblit v1.9.3