From cdd1902016ebdeab0a0615693e36b66450202765 Mon Sep 17 00:00:00 2001 From: zouyu <2723363702@qq.com> Date: 星期六, 02 十二月 2023 16:44:13 +0800 Subject: [PATCH] modified: src/api/plan/productionschedul.js modified: src/api/quality/packageInspect.js modified: src/views/plan/productionschedul/index.vue modified: src/views/quality/packageinspect/index.vue modified: src/views/quality/packageinspect/packageInspect-form.vue modified: vue.config.js --- src/views/plan/productionschedul/index.vue | 130 +++++++++++++++- src/views/quality/packageinspect/index.vue | 26 +- src/views/quality/packageinspect/packageInspect-form.vue | 257 ++++++++++++++----------------- vue.config.js | 4 src/api/plan/productionschedul.js | 10 + src/api/quality/packageInspect.js | 7 6 files changed, 268 insertions(+), 166 deletions(-) diff --git a/src/api/plan/productionschedul.js b/src/api/plan/productionschedul.js index c0df5f0..5c56f9a 100644 --- a/src/api/plan/productionschedul.js +++ b/src/api/plan/productionschedul.js @@ -10,7 +10,15 @@ export function fetchScheduleById(id) { return request({ - url: '/mes//productionSchedul/'+id, + url: '/mes/productionSchedul/'+id, method: 'get', }) +} + +export function fillTime(data) { + return request({ + url: '/mes/productionSchedul/fillTime', + method: 'put', + data: data + }) } \ No newline at end of file diff --git a/src/api/quality/packageInspect.js b/src/api/quality/packageInspect.js index 08a312b..f9881e6 100644 --- a/src/api/quality/packageInspect.js +++ b/src/api/quality/packageInspect.js @@ -29,4 +29,11 @@ data: data }) } +export function updatePackageInspectById(data) { + return request({ + url: '/mes/packageInspect/updatePackageInspectById', + method: 'post', + params: data + }) +} diff --git a/src/views/plan/productionschedul/index.vue b/src/views/plan/productionschedul/index.vue index 0775072..3a03c19 100644 --- a/src/views/plan/productionschedul/index.vue +++ b/src/views/plan/productionschedul/index.vue @@ -3,7 +3,7 @@ <basic-container> <el-row> <el-col :span="12"> - <div style="height:80vh"> + <div style="height:80vh;padding: 0px 10px;"> <avue-crud :data="tableData" ref="crud" :option="option" :span-method="spanMethod" @refresh-change="getData" :page="page" @@ -20,7 +20,7 @@ <el-card> <div slot="header" class="clearfix"> <span>璋冨害鏃堕棿绾�</span> - <el-button style="float: right; padding: 3px 0" type="text">鎿嶄綔鎸夐挳</el-button> + <el-button v-if="scheduleList.length>0" @click="openEditDialog" style="float: right; padding: 3px 0" type="text">缂栬緫</el-button> </div> <div style="height:70vh;overflow-y: scroll;"> <el-timeline> @@ -28,10 +28,15 @@ placement="top" v-for="(item, index) in scheduleList" :key="index" - :timestamp="item.planTime"> - <el-card style="width:95%;margin: 0;padding: 0px 10px;"> - <p style="font-weight: bold;">{{item.title}}</p> - <p>瀹為檯鏃堕棿: {{ item.actualTime }}</p> + :timestamp="item.title"> + <el-card shadow="hover" :body-style="{margin: '0',padding:'0px 20px 0px 20px'}" style="width:90%;"> + <p> + <span style="font-weight: bold;">璁″垝鏃堕棿: </span> + {{item.planTime}} + </p> + <p> + <span style="font-weight: bold;">瀹為檯鏃堕棿: </span> + {{ item.actualTime }}</p> </el-card> </el-timeline-item> </el-timeline> @@ -41,6 +46,57 @@ </el-col> </el-row> </basic-container> + <el-dialog + title="缂栬緫鏃堕棿绾�" + :visible.sync="dialogVisible" + top="5vh" + width="50%" + :before-close="handleClose"> + <div style="height:60vh;overflow-y: scroll;"> + <el-timeline> + <el-timeline-item + placement="top" + v-for="(item, index) in scheduleEditList" + :key="index" + :timestamp="item.title"> + <el-card shadow="hover" style="width:90%" :body-style="{padding:'20px 20px 5px 20px'}"> + <el-row> + <el-col :span="3"> + <p style="font-weight: bold;line-height: 50%;">璁″垝鏃堕棿: </p> + </el-col> + <el-col :span="21"> + <el-date-picker + style="width:100%" + v-model="item.planTime" + value-format="yyyy-MM-dd HH:mm:ss" + type="datetime" + placeholder="閫夋嫨鏃ユ湡鏃堕棿"> + </el-date-picker> + </el-col> + </el-row> + <el-row> + <el-col :span="3"> + <p style="font-weight: bold;line-height: 50%;">瀹為檯鏃堕棿: </p> + </el-col> + <el-col :span="21"> + <el-date-picker + style="width:100%" + v-model="item.actualTime" + value-format="yyyy-MM-dd HH:mm:ss" + type="datetime" + placeholder="閫夋嫨鏃ユ湡鏃堕棿"> + </el-date-picker> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmEditSchedul">纭� 瀹�</el-button> + </span> + </el-dialog> </div> </template> @@ -48,6 +104,7 @@ import { fetchScheduleList, fetchScheduleById, + fillTime } from '@/api//plan/productionschedul' import TableForm from './template-form' import ttable from '@/views/common/ztt-table.vue' @@ -55,7 +112,9 @@ export default { data() { return { + dialogVisible: false, scheduleList: [], + scheduleEditList: [], typeOptions: [], multipleSelection: [], loading: true, @@ -221,6 +280,53 @@ beforeDestroy() { }, methods: { + openEditDialog(){ + this.scheduleEditList = JSON.parse(JSON.stringify(this.scheduleList)) + this.dialogVisible = true + }, + confirmEditSchedul(){ + let data = this.scheduleEditList + let orderObj = this.multipleSelection[0] + console.log("data---",data) + console.log("orderObj-----",orderObj) + let obj = { + "documentActualTime": data[0].actualTime, + "documentPlanTime": data[0].planTime, + "bomActualTime": data[1].actualTime, + "bomPlanTime": data[1].planTime, + "contractActualTime": data[2].actualTime, + "contractPlanTime": data[2].planTime, + "arrivalActualTime": data[3].actualTime, + "arrivalPlanTime": data[3].planTime, + "checkActualTime": data[4].actualTime, + "checkPlanTime": data[4].planTime, + "productActualTime": data[5].actualTime, + "productPlanTime": data[5].planTime, + "id": orderObj.id, + "contractNo": orderObj.contractNo, + "customerName": orderObj.customerName, + "deliveryDate": orderObj.deliveryDate, + "orderTime": orderObj.orderTime, + "productType": orderObj.productType, + "projectName": orderObj.projectName + } + console.log("obj----->>>",obj); + fillTime(obj).then(res=>{ + if(res.status===200){ + this.$message.success("鏇存柊鎴愬姛") + }else{ + this.$message.error("鏇存柊澶辫触") + } + this.getScheduleById(orderObj.id) + this.dialogVisible = false + }).catch(error=>{ + console.log(error); + }) + + }, + handleClose(done){ + done() + }, initTimeLine(data){ this.scheduleList = [] if(data){ @@ -270,10 +376,14 @@ }, selectionRow(val){ if (val.length > 1) { - const preVal = val.shift(); - this.$refs.crud.toggleRowSelection(preVal, false); - } - this.getScheduleById(val[0].id) + const preVal = val.shift(); + this.$refs.crud.toggleRowSelection(preVal, false); + } + else{ + this.scheduleList=[] + } + this.multipleSelection = val + this.getScheduleById(val[0].id) }, formatDate(row, cellValue){ if (cellValue) { diff --git a/src/views/quality/packageinspect/index.vue b/src/views/quality/packageinspect/index.vue index 9e58f4b..1e7783d 100644 --- a/src/views/quality/packageinspect/index.vue +++ b/src/views/quality/packageinspect/index.vue @@ -74,7 +74,7 @@ // 鏍囬 column: [ { - minWidth: '150', + minWidth: '180', prop: 'packInsNo', label: '鍖呰妫�楠岀紪鍙�', isTrue: true, @@ -83,7 +83,7 @@ render: { fun: this.addOrUpdateHandle } }, { - minWidth: '150', + minWidth: '180', prop: 'packageNo', label: '鍖呰缂栫爜', isTrue: true, @@ -91,7 +91,7 @@ searchInfoType: 'text' }, { - minWidth: '150', + minWidth: '180', prop: 'contractNo', label: '鍚堝悓鍙�', isTrue: true, @@ -99,7 +99,7 @@ searchInfoType: 'text' }, { - minWidth: '150', + minWidth: '180', prop: 'projectName', label: '椤圭洰鍚嶇О', isTrue: true, @@ -107,7 +107,7 @@ searchInfoType: 'text' }, { - minWidth: '150', + minWidth: '180', prop: 'customerName', label: '瀹㈡埛鍚嶇О', isTrue: true, @@ -115,7 +115,7 @@ searchInfoType: 'text' }, { - minWidth: '150', + minWidth: '180', prop: 'createTime', label: '鎶ユ鏃ユ湡', isTrue: true, @@ -125,7 +125,7 @@ formatter: this.formatDateTime, }, { - minWidth: '150', + minWidth: '180', prop: 'createUser', label: '鎶ユ浜�', isTrue: true, @@ -133,11 +133,12 @@ searchInfoType: 'text' }, { - minWidth: '150', + minWidth: '200', prop: 'result', label: '缁撹', isTrue: true, isSearch: true, + searchInfoType: 'text' }, ], toolbar: [ @@ -157,8 +158,8 @@ operatorConfig: { fixed: 'right', label: '鎿嶄綔', - width: 120, - minWidth: 120 + width: 100, + minWidth: 100 }, }, } @@ -201,8 +202,9 @@ this.$router.push({ name: 'packageInspectForm', query: { - id: row == null ? null : row.id, - } + id: row == null ? null : row.id + }, + params:{resultVal : row == null ? null : row.result} }) }, formatResult(row, column, cellValue){ diff --git a/src/views/quality/packageinspect/packageInspect-form.vue b/src/views/quality/packageinspect/packageInspect-form.vue index 5fbff88..b34bfa9 100644 --- a/src/views/quality/packageinspect/packageInspect-form.vue +++ b/src/views/quality/packageinspect/packageInspect-form.vue @@ -6,7 +6,6 @@ <h2>缂栬緫-鍖呰妫�楠�</h2> </div> <div class="btn-group header-right"> - <el-button @click="save()" type="primary">淇濆瓨</el-button> </div> </div> <div class="page-main"> @@ -63,10 +62,14 @@ </el-form> </div> <div class="packageInspect-detail"> - <el-row style="width:100%;z-index: 10;height:50px;"> - <el-col :span="22">妫�楠岄」鐩�</el-col> + <el-row :gutter="10" style="width:100%;z-index: 10;height:50px;"> + <el-col :span="20">妫�楠岄」鐩�</el-col> <el-col :span="2"> - <el-button style="width:100%" size="small" @click="clickAddLine()">娣诲姞妫�楠岄」鐩�</el-button> + <el-button v-if="resultVal==''" style="width:100%" size="small" @click="clickAddLine()">娣诲姞妫�楠岄」鐩�</el-button> + </el-col> + <el-col :span="2"> + <el-button v-if="resultVal==''" style="width:100%" type="primary" size="small" + @click="savePackIns()">淇濆瓨</el-button> </el-col> </el-row> <el-row style="width:100%;"> @@ -86,40 +89,41 @@ </el-table-column> <el-table-column prop="name" label="椤圭洰" width="260"> <template slot-scope="scope"> - <el-input v-if="scope.row.children" class="inline-input" style="width:90%;" v-model="scope.row.name" + <el-input :readonly="resultVal!=''" v-if="scope.row.children" class="inline-input" style="width:90%;" v-model="scope.row.name" placeholder="璇疯緭鍏ラ」鐩悕绉�"></el-input> </template> </el-table-column> <el-table-column prop="required" label="瑕佹眰" width="260"> <template slot-scope="scope"> - <div> - <el-input v-model="scope.row.required" + <div v-if="!scope.row.children"> + <el-input :readonly="resultVal!=''" v-model="scope.row.required" placeholder="璇疯緭鍏ヨ姹�"></el-input> </div> </template> </el-table-column> <el-table-column prop="note" label="妫�楠屾弿杩�" width="260" > <template slot-scope="scope"> - <div> - <el-input v-model="scope.row.note" placeholder="妫�楠屾弿杩�"></el-input> + <div v-if="!scope.row.children"> + <el-input :readonly="resultVal!=''" v-model="scope.row.note" placeholder="妫�楠屾弿杩�"></el-input> </div> </template> </el-table-column> - <el-table-column fixed="right" prop="testState" label="缁撹" min-width="150"> + <el-table-column prop="testState" label="缁撹" min-width="150"> <template slot-scope="scope"> - <el-select v-model="scope.row.result"> + <el-select :disabled="resultVal!=''" @change="changeResult" v-model="scope.row.result" v-if="!scope.row.children"> <el-option label="鍚堟牸" value="鍚堟牸"></el-option> <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"></el-option> </el-select> </template> </el-table-column> - <el-table-column fixed="right" style="background-color: white;" label="鎿嶄綔" width="200"> + <el-table-column v-if="resultVal==''" fixed="right" style="background-color: white;" label="鎿嶄綔" width="200"> <template slot-scope="scope"> - <el-button icon="el-icon-circle-check" type="text" @click="savePackIns(scope.row,scope.$index)">淇濆瓨</el-button> <el-button v-if="scope.row.children" icon="el-icon-circle-plus-outline" type="text" @click="clickAddChildren(scope.row,scope.$index)">娣诲姞琛�</el-button> - <el-button v-if="!scope.row.children || scope.row.children.length==0" - icon="el-icon-circle-close" type="text" + <el-button v-if="!scope.row.children" icon="el-icon-circle-close" type="text" @click="clickDelLine(scope.row,scope.$index,scope.row.children!=null)">鍙栨秷</el-button> + <el-button v-if="scope.row.children" icon="el-icon-circle-close" type="text" + @click="clickDelLine(scope.row,scope.$index,scope.row.children!=null)">鍒犻櫎椤圭洰</el-button> + </template> </el-table-column> </el-table> @@ -132,21 +136,22 @@ </el-row> <el-row style="width:100%"> <el-col :span="24"> - <el-table border height="90" :data="conclusionTable" ref="conclusion" v-model="conclusion" + <el-table class="l-mes" border height="90" :data="conclusionTable" ref="conclusion" v-model="conclusion" :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}" :cell-style="{textAlign:'center'}"> <el-table-column prop="packageNo" label="鍖呰缂栧彿"></el-table-column> - <el-table-column prop="name" label="鐗╂枡鍚嶇О"></el-table-column> <el-table-column prop="userName" label="妫�楠屽憳"></el-table-column> - <el-table-column prop="judgeState" label="妫�楠岀粨璁�"> + <el-table-column prop="result" label="妫�楠岀粨璁�"> <template slot-scope="scope"> - <el-tag type="success" v-if="scope.row.testState == '1'">鍚堟牸</el-tag> - <el-tag type="danger" v-else-if="scope.row.testState == '0'">涓嶅悎鏍�</el-tag> + <el-select :disabled="resultVal!=''" style="width:100%" v-model="scope.row.result"> + <el-option label="鍚堟牸" value="鍚堟牸"></el-option> + <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"></el-option> + </el-select> </template> </el-table-column> <el-table-column label="鎿嶄綔"> <template> - <el-button type="text" :disabled="resultVal!=null && dataForm.id!=null" @click="showDialog()" size="small">涓婃姤</el-button> + <el-button type="text" :disabled="resultVal!=''" @click="submitSave()" size="small">涓婃姤</el-button> </template> </el-table-column> </el-table> @@ -154,21 +159,6 @@ </el-row> </div> </div> - <el-dialog - title="涓婃姤" - :visible.sync="dialogVisible" - width="30%" class="l-mes"> - <el-row> - <el-col> - <span>涓嶅悎鏍兼暟閲�:</span> - <el-input type="number" v-model="unqualifiedNum" placeholder="璇疯緭鍏ヤ笉鍚堟牸鏁伴噺"/> - </el-col> - </el-row> - <span slot="footer" class="dialog-footer"> - <el-button @click="dialogVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="submitSave()">纭� 瀹�</el-button> - </span> - </el-dialog> </div> </template> @@ -176,6 +166,7 @@ import { fetchListById, updatePackageInsProduct, + updatePackageInspectById, } from '@/api/quality/packageInspect' export default { computed:{}, @@ -184,15 +175,7 @@ data(){ return{ loading: false, - unqualifiedNum: null, - dialogVisible:false, resultVal: null, - projectList: [], - // 娣诲姞鍒� - empiricalValueAdd: 1, - // 缂栬緫鏃跺瓨鍌ㄦ渶闀跨殑鍒楁暟瀛楋紝鍋氬垹闄ゅ垽鏂� - empiricalValueAddMaxNumber: 0, - columnList: [], dataForm:{ id: null, packInsNo: null, @@ -215,9 +198,8 @@ conclusion: null, conclusionTable: [{ packageNo: '', - name: '', userName: '', - testState: '' + result: '' }], dataRule: {}, } @@ -229,80 +211,65 @@ }, created(){ this.dataForm.id = this.$route.query.id + this.resultVal = this.$route.params.resultVal + if(!this.resultVal){ + let val = sessionStorage.getItem("packIns-resultVal-"+this.dataForm.id) + if(val){ + this.resultVal=val + } + } this.init() }, watch:{ - dialogVisible(newVal){ - if(newVal){ - this.unqualifiedNum = null - } - }, + list(){ + this.changeResult() + } }, methods:{ - checkTestState(){ - let resultVal = '1' - this.list.forEach(item=>{ - if(item.children){ - item.children.forEach(ele=>{ - if(ele.testState == 0){ - resultVal = '0' - } - }) - } + changeResult(){ + let result = '鍚堟牸' + let data = this.list + if(data){ + data.forEach(item=>{ + if(item.children){ + item.children.forEach(ele=>{ + if(ele.result=='涓嶅悎鏍�'){ + result='涓嶅悎鏍�' + } + }) + } }) - this.resultVal = resultVal - this.conclusionTable[0].testState = resultVal - sessionStorage.setItem("raw-resultVal-"+this.dataForm.id,resultVal) - }, - showDialog(){ - let size = 0 //涓嶅悎鏍奸」鐩暟閲� - this.list.forEach(item=>{ - if(item.children){ - let num = item.children.filter(e=>{ - return e.testState == 0 - }).length - size+=num - } - }) - if (size > 0) { - this.dialogVisible = true - }else{ - this.submitSave() } + this.conclusionTable[0].result = result }, //涓婃姤 submitSave(){ let data = { id: this.dataForm.id, - number: this.unqualifiedNum, + result: this.conclusionTable[0].result, } - updateRawInspectsById(data).then(res => { - if(res.data.code == 0 && (res.data.data=='1'|| res.data.data=='0')){ - sessionStorage.setItem("raw-resultVal-"+this.dataForm.id,res.data.data) + updatePackageInspectById(data).then(res => { + if(res.data.code === 0){ + this.resultVal = res.data.data + sessionStorage.setItem("packIns-resultVal-"+this.dataForm.id,res.data.data) this.$message.success("涓婃姤鎴愬姛"); }else{ - this.$message.error("涓婃姤澶辫触锛�",res.data.data); + this.$message.error("涓婃姤澶辫触",res.data.data); } - this.dialogVisible = false - this.checkTestState() }); }, // 娣诲姞琛� clickAddLine(row) { this.list.push({ - pId: '', name: '', - note: '', - required: '', - result: '', randomId: Math.random(), children: [] }) }, //娣诲姞瀛愮骇 clickAddChildren(row,index){ - console.log(row,index); row.children.push({ + name: row.name, note: '', required: '', result: '', @@ -327,19 +294,34 @@ } }, //淇濆瓨妫�鏌ラ」 - savePackIns(row,index){ - if(row){ - let obj = { - name: row.anme, - note: row.note, - packageInspectId: row.packageInspectId, - required: row.required, - result: row.result, - } - updatePackageInsProduct(obj).then(res=>{ - console.log(res); + savePackIns(){ + if(this.list.length==0){ + this.$message.error("妫�楠岄」鐩负绌�!") + return + }else{ + let dataList = [] + this.list.forEach(item=>{ + if(item.children){ + item.children.forEach(ele=>{ + let obj = { + id: ele.pid || null, + name: item.name, + note: ele.note, + packageInspectId: this.dataForm.id, + required: ele.required, + result: ele.result, + } + dataList.push(obj) + }) + } + }) + updatePackageInsProduct(dataList).then(res=>{ + if(res.status===200){ + this.$message.success("淇濆瓨鎴愬姛") + } }).catch(error=>{ console.log(error); + this.$message.error("淇濆瓨澶辫触") }) } }, @@ -354,51 +336,44 @@ this.dataForm.projectName = data.projectName this.dataForm.createTime = data.createTime this.dataForm.createUser = data.createUser - this.list = data.packageInsProductS - + this.list = [] + let userNameList = [] + data.packageInsProductS.forEach(item => { + if (item.children) { + let ele = { + randomId: Math.random(), + name: null, + children: [] + } + ele.name = item.name + item.children.forEach(obj => { + if(obj.userName){ + userNameList.push(obj.userName) + } + let o = { + name: item.name, + randomId: Math.random(), + required: obj.required, + pid: obj.pid, + note: obj.note?obj.note:'', + result: obj.presult + } + ele.children.push(o) + }) + this.list.push(ele) + } + }) + this.conclusionTable = [{ + packageNo: data.packageNo, + userName: Array.from(new Set(userNameList)).join(','), + result: null + }] }).catch(error=>{ this.$message.error("鑾峰彇澶辫触",error) }) }else{ this.conclusionTable = [] } - }, - changeState(row, index) { - if (row.rpId != null && row.rpId != '') { - let val = row.testValueList.join(",") - if (val === undefined || val === '' || val === null) { - return - } - let obj = { - deviceId: row.deviceId, - rpId: row.rpId, - testValue: val, - note: row.note - } - updateRawInsProduct(obj).then(res => { - if (res.data.code == 0) { - this.$message.success("鏇存柊鎴愬姛") - } else { - this.$message.error("鏇存柊澶辫触") - } - this.init() - }) - } - }, - save(){ - let data = this.dataForm - this.list.forEach(item=>{ - item.children.forEach(c=>{ - c.testValue=c.testValueList.join(",") - }) - }) - data.packageInsProductS = this.list - addRawInspects(data).then(res=>{ - this.$message.success("淇濆瓨鎴愬姛") - this.$router.go(-1) - }).catch(error=>{ - this.$message.error(error) - }) }, }, } diff --git a/vue.config.js b/vue.config.js index b450b4c..f9db903 100644 --- a/vue.config.js +++ b/vue.config.js @@ -3,11 +3,11 @@ * https://cli.vuejs.org/zh/config/ */ // const url = 'http://192.168.2.7:9999' -const url = 'http://192.168.2.7:9999' +// const url = 'http://192.168.2.7:9999' //const url = 'http://192.168.32.45:9999' // const url = 'http://192.168.0.23:9999' -// const url = 'http://localhost:9999' + const url = 'http://localhost:9999' // const url = 'http://ztt-gateway:9999' const localUrl = 'http://localhost:8089' -- Gitblit v1.9.3