From 6566ae250ee4a89613a36953c7a42a212c33125f Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 26 十二月 2024 14:33:06 +0800 Subject: [PATCH] 完成7.7质量监督计划 --- src/components/do/a7-quality-control-plan/recordsDialog.vue | 423 +++++++++++ src/components/do/a7-quality-control-plan/rectifyDialog.vue | 421 +++++++++++ src/components/do/a7-quality-control-plan/processingSheet.vue | 512 +++++++++++++ src/components/do/a7-quality-control-plan/detailFormDialog.vue | 163 ++++ src/components/view/a7-quality-control-plan.vue | 676 ++++++++++++++++++ 5 files changed, 2,195 insertions(+), 0 deletions(-) diff --git a/src/components/do/a7-quality-control-plan/detailFormDialog.vue b/src/components/do/a7-quality-control-plan/detailFormDialog.vue new file mode 100644 index 0000000..68218a1 --- /dev/null +++ b/src/components/do/a7-quality-control-plan/detailFormDialog.vue @@ -0,0 +1,163 @@ +<template> + <div> + <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" + :title="operationType === 'edit'? '缂栬緫' : '鏂板'" + :visible.sync="formDia" + width="80%" @close="closeDia"> + <el-form ref="form" :model="form" :rules="rules" label-width="140px"> + <el-col :span="12"> + <el-form-item label="鐩戠潱鏃ユ湡" prop="superviseTime"> + <el-date-picker + v-model="form.superviseTime" + clearable + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 100%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鐩戠潱鐩殑" prop="supervisePurpose"> + <el-input v-model="form.supervisePurpose" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鐩戞帶椤圭洰" prop="superviseProject"> + <el-input v-model="form.superviseProject" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="琚洃鐫d汉鍛�" prop="supervisee"> + <el-input v-model="form.supervisee" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鐩戠潱鍘熷洜" prop="superviseReason"> + <el-input v-model="form.superviseReason" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="澶囨敞" prop="remark"> + <el-input v-model="form.remark" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeDia">鍙� 娑�</el-button> + <el-button :loading="upLoad" type="primary" @click="submitForm">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +export default { + name: 'detailFormDialog', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + props: ['superviseId'], + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + form: { + qualityMonitorDetailsId: '', + superviseTime: '', + supervisePurpose: '', + superviseProject: '', + supervisee: '', + superviseReason: '', + remark: '', + superviseDetailsId: '', + }, + rules: { + superviseTime: [{ required: true, message: '璇疯緭鍏ョ洃鐫f棩鏈�', trigger: 'blur' }], + supervisePurpose: [{ required: true, message: '璇疯緭鍏ョ洃鐫g洰鐨�', trigger: 'blur' }], + superviseProject: [{ required: true, message: '璇疯緭鍏ョ洃鎺ч」鐩�', trigger: 'blur' }], + }, + upLoad: false, + operationType: '', + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia(type, row) { + this.formDia = true + this.operationType = type + if (type === 'edit') { + this.searchInfo(row) + } + }, + searchInfo (row) { + this.form = {...row} + }, + // 鎻愪氦琛ㄥ崟 + submitForm () { + this.$refs['form'].validate((valid) => { + if (valid) { + if (this.operationType === 'add') { + this.handleAdd() + } else { + this.handleEdit() + } + } + }) + }, + // 鎻愪氦鏂板 + handleAdd () { + let entity = this.HaveJson(this.form) + entity.superviseId = this.superviseId + this.upLoad = true + this.$axios.post(this.$api.qualitySupervise.addQualitySuperviseDetail, entity, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.upLoad = false + if (res.code === 201) return + this.$message.success('鏂板鎴愬姛') + this.closeDia() + }).catch(err => { + console.log('err---', err); + this.upLoad = false + }) + }, + // 鎻愪氦淇敼 + handleEdit () { + const entity = this.HaveJson(this.form) + this.upLoad = true + this.$axios.post(this.$api.qualitySupervise.updateQualitySuperviseDetail, entity, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.upLoad = false + if (res.code === 201) return + this.$message.success('淇敼鎴愬姛') + this.closeDia() + }).catch(err => { + console.log('err---', err); + this.upLoad = false + }) + }, + // 鍏抽棴寮规 + closeDia () { + this.$refs.form.resetFields(); + this.formDia = false + this.$emit('closeDia') + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog__body { + max-height: 720px; + overflow-y: auto; +} +</style> diff --git a/src/components/do/a7-quality-control-plan/processingSheet.vue b/src/components/do/a7-quality-control-plan/processingSheet.vue new file mode 100644 index 0000000..383cd8c --- /dev/null +++ b/src/components/do/a7-quality-control-plan/processingSheet.vue @@ -0,0 +1,512 @@ +<template> + <div> + <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" + :visible.sync="formDia" + title="涓嶇鍚堝伐浣滄帶鍒跺崟" + width="60%" @close="closeProcessingDia"> + <el-steps :active="currentStep" align-center finish-status="success"> + <el-step title="涓嶇鍚堝伐浣滄儏鍐佃褰�" @click.native="setStep(0)"></el-step> + <el-step title="澶勭悊鎺柦" @click.native="setStep(1)"></el-step> + <el-step title="绾犳鎺柦" @click.native="setStep(2)"></el-step> + <el-step title="鏄惁閫氱煡瀹㈡埛鍙婂彲鎭㈠宸ヤ綔" @click.native="setStep(3)"></el-step> + </el-steps> + <div> + <table border="1" cellspacing="10" class="tables"> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p>鍙戠敓閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.occurrenceDepartment" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.occurrenceDepartment }}</span> + </td> + <td class="td-title"> + <p>閮ㄩ棬璐熻矗浜猴細</p> + </td> + <td class="td-info"> + <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.headDepartment" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.headDepartment }}</span> + </td> + </tr> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p><span class="required-span">* </span>涓嶇鍚堝伐浣滃彂鐜伴�斿緞锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-radio-group v-model="form.findWay" v-removeAriaHidden :disabled="showStep === 0 && currentStep !== 0"> + <el-radio :label="0">绠$悊璇勫</el-radio> + <el-radio :label="1">鍐呴儴瀹℃牳</el-radio> + <el-radio :label="2">妫�娴嬭繃绋嬫帶鍒�</el-radio> + <el-radio :label="3">鍐呴儴璐ㄩ噺鎺у埗</el-radio> + <el-radio :label="4">鍐呴儴鐩戠潱</el-radio> + <el-radio :label="5">澶栭儴璇勫</el-radio> + <el-radio :label="6">澶栭儴鎶曡瘔</el-radio> + <el-radio :label="7">鍏朵粬</el-radio> + </el-radio-group> + </td> + </tr> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p>涓嶇鍚堝伐浣滅殑璇︾粏璁板綍锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.recordDetail" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.recordDetail }}</span> + </td> + </tr> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p>涓嶇鍚堝伐浣滅殑浠ュ強鍙婃潯娆惧彿锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.recordAccording" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.recordAccording }}</span> + </td> + </tr> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p><span class="required-span">* </span>琚洃鐫d汉锛�</p> + </td> + <td class="td-info"> + <el-select v-if="showStep === 0 && currentStep === 0" v-model="form.supervisedUserId" clearable + filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in supervisedUserList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.supervisedUserName }}</span> + </td> + <td class="td-title"> + <p><span class="required-span">* </span>琚洃鐫f椂闂达細</p> + </td> + <td class="td-info"> + <el-date-picker + v-if="showStep === 0 && currentStep === 0" + v-model="form.supervisedTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.supervisedTime }}</span> + </td> + </tr> + <tr v-if="showStep === 0"> + <td v-if="currentStep === 0" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 0" class="td-info"> + <el-select v-model="form.actionsUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>鍙戠幇閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.foundDepartment}} + </td> + <td class="td-title"> + <p>鏃堕棿锛�</p> + </td> + <td class="td-info"> + {{form.recordTime}} + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>璁板綍浜猴細</p> + </td> + <td class="td-info"> + {{form.recordUserName}} + </td> + <td class="td-title"> + <p>璁板綍鏃堕棿锛�</p> + </td> + <td class="td-info"> + {{form.recordTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td class="td-title"> + <p><span class="required-span">* </span>娑堥櫎涓嶇鍚堝伐浣滄墍閲囧彇鐨勬帾鏂斤細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.eliminateMeasure" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.eliminateMeasure }}</span> + </td> + </tr> + <tr v-if="showStep === 1"> + <td class="td-title"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info"> + {{form.actionsUserName}} + </td> + <td class="td-title"> + <p>澶勭悊鏃堕棿锛�</p> + </td> + <td class="td-info"> + {{form.actionsTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td v-if="currentStep === 1" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 1" class="td-info" colspan="3"> + <el-select v-model="form.correctUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p><span class="required-span">* </span>鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂斤細</p> + </td> + <td class="td-info" colspan="3"> + <el-radio-group v-model="form.isCorrect" v-removeAriaHidden :disabled="showStep === 2 && currentStep !== 2"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p>绾犳鎺柦澶勭悊鍗曡窡韪細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctContent" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctContent }}</span> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info"> + {{form.correctUserName}} + </td> + <td v-if="showStep === 2 && currentStep !== 2" class="td-title"> + <p>澶勭悊鏃堕棿锛�</p> + </td> + <td v-if="showStep === 2 && currentStep !== 2" class="td-info"> + {{form.correctTime}} + </td> + <td v-if="currentStep === 2" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 2" class="td-info"> + <el-select v-model="form.qualityManagerUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 3"> + <td rowspan="3"> + <p>鏄惁閫氱煡瀹㈡埛鍙婂彲鎭㈠宸ヤ綔</p> + </td> + </tr> + <tr v-if="showStep === 3"> + <td class="td-title"> + <p><span class="required-span">* </span>閫氱煡瀹㈡埛锛�</p> + </td> + <td class="td-info" colspan="2"> + <el-radio-group v-model="form.notifyCustomer" v-removeAriaHidden :disabled="showStep === 3 && currentStep !== 3"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr v-if="showStep === 3"> + <td class="td-title"> + <p><span class="required-span">* </span>鎭㈠宸ヤ綔锛�</p> + </td> + <td class="td-info" colspan="2"> + <el-radio-group v-model="form.backToWork" v-removeAriaHidden :disabled="showStep === 3 && currentStep !== 3"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr v-if="showStep === 3"> + <td class="td-title"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info"> + {{form.qualityManagerUserName}} + </td> + <td v-if="showStep === 3 && currentStep !== 3" class="td-title"> + <p>澶勭悊鏃堕棿锛�</p> + </td> + <td v-if="showStep === 3 && currentStep !== 2" class="td-info"> + {{form.qualityManagerTime}} + </td> + </tr> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeProcessingDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +export default { + name: 'processingSheet', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + currentStep: 0, + showStep: 0, + form: { + occurrenceDepartment: '', + headDepartment: '', + findWay: '', + recordDetail: '', + recordAccording: '', + supervisedUserId: '', + supervisedUserName: '', + supervisedTime: '', + actionsUserId: '', + actionsUserName: '', + eliminateMeasure: '', + correctUserId: '', + correctUserName: '', + isCorrect: '', + qualityManagerUserId: '', + correctContent: '', + superviseDetailsId: '', + superviseDetailsAccordingId: '', + flowType: '', + recordUserName: '', + recordTime: '', + foundDepartment: '', + actionsTime: '', + correctTime: '', + notifyCustomer: '', + backToWork: '', + qualityManagerUserName: '', + qualityManagerTime: '', + }, + editLoad: false, + personList: [], + supervisedUserList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia (row) { + this.formDia = true + this.searchInfo(row) + this.form.superviseDetailsId = row.superviseDetailsId + this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃 + this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳 + }, + // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + searchInfo (row) { + this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId + this.$axios.get(this.$api.qualitySupervise.getSuperviseDetailAccording + '?superviseDetailsId=' + row.superviseDetailsId).then(res => { + if (res.code === 201) return + if (res.data.superviseDetailsAccordingId === null) { + this.showStep = 0 + this.currentStep = 0 + } else { + this.form = res.data + if (res.data.isFinish === 0) { + if (res.data.actionsUserId) { + this.showStep = 1 + this.currentStep = 1 + } + if (res.data.correctUserId) { + this.showStep = 2 + this.currentStep = 2 + } + if (res.data.qualityManagerUserId) { + this.showStep = 3 + this.currentStep = 3 + } + } else { + this.currentStep = 4 + this.showStep = 3 + } + } + }).catch(err => { + console.log('err---', err); + }) + }, + // 鎻愪氦 + handleEdit () { + if (this.currentStep === 0) { + if (this.form.findWay === null) { + this.$message.warning('璇烽�夋嫨涓嶇鍚堝伐浣滃彂鐜伴�斿緞') + return + } + if (!this.form.supervisedUserId) { + this.$message.warning('璇烽�夋嫨琚洃鐫d汉') + return + } + if (!this.form.supervisedTime) { + this.$message.warning('璇烽�夋嫨琚洃鐫f椂闂�') + return + } + if (!this.form.actionsUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 1) { + if (!this.form.supervisedUserId) { + this.$message.warning('璇峰~鍐欐秷闄や笉绗﹀悎宸ヤ綔鎵�閲囧彇鐨勬帾鏂�') + return + } + if (!this.form.correctUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 2) { + if (this.form.isCorrect === null) { + this.$message.warning('璇烽�夋嫨鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂�') + return + } + if (!this.form.qualityManagerUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 3) { + if (this.form.notifyCustomer === null) { + this.$message.warning('璇烽�夋嫨鏄惁閫氱煡瀹㈡埛') + return + } + if (this.form.backToWork === null) { + this.$message.warning('璇烽�夋嫨鏄惁鎭㈠宸ヤ綔') + return + } + } + this.editLoad = true + this.form.supervisedTime = '' + this.form.flowType = this.currentStep + delete this.form.recordTime + delete this.form.actionsTime + delete this.form.correctTime + this.$axios.post(this.$api.qualitySupervise.addSuperviseDetailAccording, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎻愪氦鎴愬姛') + this.closeProcessingDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鍏抽棴寮规 + closeProcessingDia () { + this.formDia = false + this.$emit('closeProcessingDia') + }, + setStep (step) { + this.showStep = step + }, + 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 + }) + }, + getSupervisedUserList () { + this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.supervisedUserList = data + }) + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog { + margin: 10vh auto 50px !important; +} +.tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; +} +.td-title { + height: 40px; + width: 170px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + padding: 6px; +} +.td-info { + padding: 6px; +} +.td-info1 { + display: inline-block; + width: 100%; + text-align: left; + font-size: 14px; + word-wrap: break-word; + white-space: normal; +} +</style> diff --git a/src/components/do/a7-quality-control-plan/recordsDialog.vue b/src/components/do/a7-quality-control-plan/recordsDialog.vue new file mode 100644 index 0000000..ddd6e39 --- /dev/null +++ b/src/components/do/a7-quality-control-plan/recordsDialog.vue @@ -0,0 +1,423 @@ +<template> + <div> + <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" + :visible.sync="formDia" + title="妫�娴嬪伐浣滅洃鐫h褰曡〃" + width="70%" @close="closeRecordsDia"> + <el-steps :active="currentStep" align-center finish-status="success"> + <el-step title="瀹炴柦"></el-step> + <el-step title="鎵瑰噯"></el-step> + </el-steps> + <div style="height: 65vh;overflow-y: auto"> + <table border="1" cellspacing="10" class="tables"> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬩汉鍛橈細</p> + </td> + <td colspan="2"> + <el-input v-if="currentStep === 0" v-model="form.testMember" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.testMember }}</span> + </td> + <td class="td-title"> + <p><span class="required-span">* </span>鐩戠潱鍛橈細</p> + </td> + <td colspan="2"> + <el-input v-if="currentStep === 0" v-model="form.supervisor" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.supervisor }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬮」鐩細</p> + </td> + <td> + <el-input v-if="currentStep === 0" v-model="form.testItem" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.testItem }}</span> + </td> + <td class="td-title"> + <p><span class="required-span">* </span>鏍峰搧缂栧彿锛�</p> + </td> + <td> + <el-input v-if="currentStep === 0" v-model="form.sampleNumber" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.sampleNumber }}</span> + </td> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬫棩鏈燂細</p> + </td> + <td> + <el-input v-if="currentStep === 0" v-model="form.testDate" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.testDate }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>浜哄憳锛�</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.personnel" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.personnel }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>浠櫒璁惧锛�</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.device" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.device }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>宸ヤ綔鐜锛�</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.environment" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.environment }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>鏍峰搧閲囬泦锛�</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.sampleCollection" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.sampleCollection }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>鏍峰搧鐨勫噯澶囷細</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.samplePreparation" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.samplePreparation }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬫柟娉曪細</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.detectionMethod" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.detectionMethod }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬭褰曪細</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.inspectionRecord" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.inspectionRecord }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>妫�娴嬫姤鍛婏細</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.examiningReport" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-else class="td-info"> {{ form.examiningReport }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>鐩戠潱鎯呭喌璇勪环锛�</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.supervisionEvaluation" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-else class="td-info"> {{ form.supervisionEvaluation }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>涓嶇鍚堝鐞嗘剰瑙侊細</p> + </td> + <td colspan="5"> + <el-input v-if="currentStep === 0" v-model="form.handlingAdvice" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-else class="td-info"> {{ form.handlingAdvice }}</span> + </td> + </tr> + <tr> + <td v-if="currentStep === 0" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ユ壒鍑嗕汉锛�</p> + </td> + <td v-if="currentStep === 0" colspan="5"> + <el-select v-model="form.ratifyUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + <td v-if="currentStep === 1" class="td-title"> + <p>鎵瑰噯璐熻矗浜猴細</p> + </td> + <td v-if="currentStep === 1" class="td-info" colspan="5"> + {{form.ratifyUserName}} + </td> + </tr> + <tr v-if="currentStep === 1 || currentStep === 2"> + <td class="td-title"> + <p><span class="required-span">* </span>瀹℃壒缁撹锛�</p> + </td> + <td colspan="2"> + <el-input v-if="currentStep === 1" + v-model="form.ratifyOpinion" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep === 2" class="td-info"> {{ form.ratifyOpinion }}</span> + </td> + <td class="td-title"> + <p v-if="currentStep === 1">璇烽�夋嫨鏄惁绗﹀悎锛�</p> + <p v-if="currentStep === 2">鏄惁绗﹀悎锛�</p> + </td> + <td colspan="2"> + <el-radio-group v-if="currentStep === 1" v-model="form.isAccording"> + <el-radio :label="0">涓嶇鍚�</el-radio> + <el-radio :label="1">绗﹀悎</el-radio> + </el-radio-group> + <span v-if="currentStep === 2" class="td-info"> {{ form.isAccording === 0 ? '涓嶇鍚�' : '绗﹀悎' }}</span> + </td> + </tr> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeRecordsDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +export default { + name: 'recordsDialog', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + form: { + superviseDetailsId: '', + superviseDetailsRecordId: '', + testMember: '', + supervisor: '', + testItem: '', + sampleNumber: '', + testDate: '', + personnel: '', + device: '', + environment: '', + sampleCollection: '', + samplePreparation: '', + detectionMethod: '', + inspectionRecord: '', + examiningReport: '', + supervisionEvaluation: '', + handlingAdvice: '', + ratifyUserId: '', + ratifyUserName: '', + ratifyOpinion: '', + isAccording: '', + }, + currentStep: 0, + editLoad: false, + personList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia(row) { + this.formDia = true + this.searchInfo(row) + this.getAuthorizedPerson() + }, + // 鏌ヨ鐩戠潱璁″垝璇︽儏璁板綍娴佺▼淇℃伅 + searchInfo (row) { + this.$axios.get(this.$api.qualitySupervise.getSuperviseDetailRecord + '?superviseDetailsId=' + row.superviseDetailsId).then(res => { + if (res.code === 201) return + // 鏈塻uperviseDetailsRecordId璇存槑鎻愪氦杩囪褰� + if (res.data.superviseDetailsRecordId) { + // 鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉� + if (res.data.isFinish === 0) { + this.currentStep = 1 + } else if (res.data.isFinish === 1) { + this.currentStep = 2 + } + } else { + this.currentStep = 0 + } + this.form = res.data + this.form.superviseDetailsId = row.superviseDetailsId + }).catch(err => { + console.log('err---', err); + }) + }, + // 鎻愪氦娴佺▼ + handleEdit () { + if (!this.form.testMember || !this.form.supervisor || !this.form.testItem || !this.form.sampleNumber + || !this.form.testDate) { + this.$message.warning('璇峰~鍐欏畬鏁�') + return + } + if (this.currentStep === 0) { + this.addInfo() + } else { + this.editInfo() + } + }, + // 鎻愪氦璁板綍 + addInfo () { + if (!this.form.ratifyUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ユ壒鍑嗕汉') + return + } + this.editLoad = true + this.$axios.post(this.$api.qualitySupervise.addSuperviseDetailRecord, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎿嶄綔鎴愬姛') + this.closeRecordsDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鎻愪氦鎵瑰噯 + editInfo () { + if (!this.form.ratifyOpinion) { + this.$message.warning('璇峰~鍐欏鎵规剰瑙�') + return + } + console.log('this.form.isAccording---', this.form.isAccording); + if (this.form.isAccording === null) { + this.$message.warning('璇烽�夋嫨鏄惁绗﹀悎') + return + } + this.editLoad = true + this.$axios.post(this.$api.qualitySupervise.addSuperviseRecordOpinion, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎿嶄綔鎴愬姛') + this.closeRecordsDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鍏抽棴寮规 + closeRecordsDia () { + this.formDia = false + this.$emit('closeRecordsDia') + }, + 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> + +<style scoped> +>>>.el-dialog { + margin: 20px auto 50px !important; +} +.tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; +} +.td-title { + height: 40px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + padding: 6px; +} +.td-info { + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; +} +.tables td { + height: 40px; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + padding: 6px; +} +</style> diff --git a/src/components/do/a7-quality-control-plan/rectifyDialog.vue b/src/components/do/a7-quality-control-plan/rectifyDialog.vue new file mode 100644 index 0000000..591f7c6 --- /dev/null +++ b/src/components/do/a7-quality-control-plan/rectifyDialog.vue @@ -0,0 +1,421 @@ +<template> + <div> + <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" + :visible.sync="formDia" + title="绾犳鎺柦澶勭悊鍗�" + width="60%" @close="closeRectifyDia"> + <el-steps :active="currentStep" align-center finish-status="success"> + <el-step title="涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩�" @click.native="setStep(0)"></el-step> + <el-step title="鍘熷洜鍒嗘瀽" @click.native="setStep(1)"></el-step> + <el-step title="绾犳鎺柦" @click.native="setStep(2)"></el-step> + <el-step title="瀹炴柦楠岃瘉缁撴灉" @click.native="setStep(3)"></el-step> + </el-steps> + <div style="height: 65vh;overflow-y: auto;"> + <table border="1" cellspacing="10" class="tables"> + <tr v-if="showStep === 0"> + <td class="td-title"> + <p><span class="required-span">* </span>涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩帮細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.raiseResult" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.raiseResult }}</span> + </td> + </tr> + <tr v-if="showStep === 0"> + <td v-if="currentStep === 0" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 0" class="td-info" colspan="3"> + <el-select v-model="form.causeUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>鎻愬嚭浜猴細</p> + </td> + <td class="td-info"> + {{form.raiseUserName}} + </td> + <td class="td-title"> + <p>鎻愬嚭閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.raiseDepartment}} + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.raiseTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td class="td-title"> + <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.causeResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.causeResult }}</span> + </td> + </tr> + <tr v-if="showStep === 1 && currentStep !== 1"> + <td class="td-title"> + <p>鍘熷洜鍒嗘瀽浜猴細</p> + </td> + <td class="td-info"> + {{form.causeUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.causeDepartment}} + </td> + </tr> + <tr v-if="showStep === 1 && currentStep !== 1"> + <td class="td-title"> + <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.causeTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td v-if="currentStep === 1" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 1" class="td-info" colspan="3"> + <el-select v-model="form.correctUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p><span class="required-span">* </span>绾犳鎺柦锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctResult }}</span> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.raiseDepartmentAffirm" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span> + </td> + </tr> + <tr v-if="showStep === 2 && currentStep !== 2"> + <td class="td-title"> + <p>绾犳浜猴細</p> + </td> + <td class="td-info"> + {{form.correctUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.correctDepartment}} + </td> + </tr> + <tr v-if="showStep === 2 && currentStep !== 2"> + <td class="td-title"> + <p>绾犳鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.correctTime}} + </td> + </tr> + <tr v-if="showStep === 2"> + <td v-if="currentStep === 2" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 2" class="td-info" colspan="3"> + <el-select v-model="form.validationUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 3"> + <td class="td-title"> + <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 3 && currentStep === 3" v-model="form.validationResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 3 && currentStep !== 3" class="td-info1"> {{ form.validationResult }}</span> + </td> + </tr> + <tr v-if="showStep === 3 && currentStep !== 3"> + <td class="td-title"> + <p>楠岃瘉浜猴細</p> + </td> + <td class="td-info"> + {{form.validationUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.validationDepartment}} + </td> + </tr> + <tr v-if="showStep === 3 && currentStep !== 3"> + <td class="td-title"> + <p>楠岃瘉鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.validationTime}} + </td> + </tr> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeRectifyDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +export default { + name: 'rectifyDialog', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + currentStep: 0, + showStep: 0, + form: { + superviseDetailsId: '', + raiseResult: '', + vdeRaiseResult: '', + causeUserId: '', + raiseUserName: '', + raiseDepartment: '', + raiseTime: '', + causeResult: '', + causeUserName: '', + causeDepartment: '', + causeTime: '', + correctUserId: '', + correctResult: '', + raiseDepartmentAffirm: '', + correctUserName: '', + correctDepartment: '', + correctTime: '', + validationUserId: '', + validationResult: '', + validationUserName: '', + validationDepartment: '', + validationTime: '', + }, + editLoad: false, + personList: [], + supervisedUserList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia (row) { + this.formDia = true + this.searchInfo(row) + this.form.superviseDetailsId = row.superviseDetailsId + this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃 + this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳 + }, + // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + searchInfo (row) { + this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId + this.$axios.get(this.$api.qualitySupervise.getSuperviseDetailCorrect + '?superviseDetailsId=' + row.superviseDetailsId).then(res => { + if (res.code === 201) return + if (res.data.superviseDetailsCorrectId === null) { + this.showStep = 0 + this.currentStep = 0 + } else { + this.form = res.data + if (res.data.isFinish === 0) { + if (res.data.causeUserId) { + this.showStep = 1 + this.currentStep = 1 + } + if (res.data.correctUserId) { + this.showStep = 2 + this.currentStep = 2 + } + if (res.data.validationUserId) { + this.showStep = 3 + this.currentStep = 3 + } + } else { + this.currentStep = 4 + this.showStep = 3 + } + } + }).catch(err => { + console.log('err---', err); + }) + }, + // 鎻愪氦 + handleEdit () { + if (this.currentStep === 0) { + if (!this.form.raiseResult) { + this.$message.warning('璇峰~鍐欎笉鍚堟牸鎻忚堪') + return + } + if (!this.form.causeUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 1) { + if (!this.form.causeResult) { + this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�') + return + } + if (!this.form.correctUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 2) { + if (!this.form.correctResult) { + this.$message.warning('璇峰~鍐欑籂姝f帾鏂�') + return + } + if (!this.form.validationUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 3) { + if (!this.form.validationResult) { + this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�') + return + } + } + this.editLoad = true + this.form.supervisedTime = '' + this.form.flowType = this.currentStep + delete this.form.recordTime + delete this.form.actionsTime + delete this.form.correctTime + this.$axios.post(this.$api.qualitySupervise.addSuperviseDetailCorrect, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎻愪氦鎴愬姛') + this.closeRectifyDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鍏抽棴寮规 + closeRectifyDia () { + this.formDia = false + this.$emit('closeRectifyDia') + }, + setStep (step) { + this.showStep = step + }, + 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 + }) + }, + getSupervisedUserList () { + this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.supervisedUserList = data + }) + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog { + margin: 10vh auto 50px !important; +} +.tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; +} +.td-title { + height: 40px; + width: 170px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + padding: 6px; +} +.td-info { + padding: 6px; +} +.td-info1 { + display: inline-block; + width: 100%; + text-align: left; + font-size: 14px; + word-wrap: break-word; + white-space: normal; +} +</style> diff --git a/src/components/view/a7-quality-control-plan.vue b/src/components/view/a7-quality-control-plan.vue new file mode 100644 index 0000000..491b737 --- /dev/null +++ b/src/components/view/a7-quality-control-plan.vue @@ -0,0 +1,676 @@ +<template> +<!-- 7.7璐ㄩ噺鐩戠潱璁″垝--> + <div> + <div class="table-card"> + <TableCard title="骞村害璁″垝琛�"> + <template v-slot:form> + <div class="items_center"> + <span>璁″垝鍚嶇О锛�</span> + <el-input v-model="yearForm.superviseName" class="search" placeholder="璇疯緭鍏�" + size="small"></el-input> + <el-button size="small" type="primary" @click="getYearPlanList">鏌ヨ</el-button> + <el-button size="small" @click="clearYear">閲嶇疆</el-button> + </div> + <div> + <el-upload ref='upload' :action="action" + :before-upload="beforeUpload" :headers="headers" :on-error="onError" + :on-success="handleSuccessUp" :show-file-list="false" accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'> + <el-button :loading="upLoading" size="small" type="primary">瀵煎叆</el-button> + </el-upload> + </div> + </template> + <template v-slot:table> + <ZTTable + ref="yearTable" + :column="yearColumnData" + :height="'25vh'" + :highlightCurrentRow="true" + :rowClick="rowClick" + :table-data="yearTableData" + :table-loading="yearLoading" + style="margin-top: 0.5em;padding: 0 15px;" + > + </ZTTable> + <el-divider></el-divider> + <!-- 鍒嗛〉 --> + <div class="pagination"> + <div></div> + <el-pagination :page-size="yearPage.size" :page-sizes="[10, 20, 30, 40]" + :total="yearPage.total" layout="total, sizes, prev, pager, next, jumper" + @current-change="handleYearCurrent" @size-change="handleYearSizeChange"> + </el-pagination> + </div> + </template> + </TableCard> + </div> + <div class="table-card"> + <TableCard title="骞村害璁″垝鏄庣粏琛�"> + <template v-slot:form> + <div class="items_center"> + <span>鐩戠潱鐩殑锛�</span> + <el-input v-model="yearDetailForm.supervisePurpose" class="search" placeholder="璇疯緭鍏�" size="small"></el-input> + <span>鐩戠潱椤圭洰锛�</span> + <el-input v-model="yearDetailForm.superviseProject" class="search" placeholder="璇疯緭鍏�" size="small"></el-input> + <el-button size="small" type="primary" @click="getYearDetailPlanList">鏌ヨ</el-button> + <el-button size="small" @click="clearDetail">閲嶇疆</el-button> + </div> + <div> + <el-button size="small" type="primary" @click="showDialog('add')">鏂板</el-button> + </div> + </template> + <template v-slot:table> + <ZTTable :column="yearDetailColumnData" :height="'25vh'" :table-data="yearDetailTableData" + :table-loading="yearDetailLoading" style="margin-top: 18px; padding: 0 15px;"> + </ZTTable> + <el-divider></el-divider> + <!-- 鍒嗛〉 --> + <div class="pagination"> + <div></div> + <el-pagination :page-size="yearDetailPage.size" :page-sizes="[10, 20, 30, 40]" + :total="yearDetailPage.total" layout="total, sizes, prev, pager, next, jumper" + @current-change="handleYearDetailCurrent" @size-change="handleYearDetailSizeChange"> + </el-pagination> + </div> + </template> + </TableCard> + </div> + <!--鏂板淇敼寮规--> + <detail-form-dialog v-if="formDia" ref="formDia" :superviseId="superviseId" @closeDia="closeDia"></detail-form-dialog> + <!--璁板綍娴佺▼寮规--> + <records-dialog v-if="recordsDia" ref="recordsDia" :superviseId="superviseId" @closeRecordsDia="closeRecordsDia"></records-dialog> + <!--涓嶇鍚堝鐞嗘祦绋嬪脊妗�--> + <processing-sheet v-if="processingDia" ref="processingDia" :superviseId="superviseId" @closeProcessingDia="closeProcessingDia"></processing-sheet> + <!--绾犳澶勭悊娴佺▼寮规--> + <rectify-dialog v-if="rectifyDia" ref="rectifyDia" :superviseId="superviseId" @closeProcessingDia="closeRectifyDia"></rectify-dialog> + <el-dialog :visible.sync="ratifyDialog" title="鎵瑰噯" width="30%" @close="closeRatifyDia"> + <span> + 鎵瑰噯澶囨敞锛� + <el-input v-model="ratifyInfo.ratifyRemark" type="textarea"></el-input> + </span> + <span slot="footer" class="dialog-footer"> + <el-button :loading="ratifyLoading" @click="handleRatify(0)">涓嶆壒鍑�</el-button> + <el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">鎵� 鍑�</el-button> + </span> + </el-dialog> + <el-dialog + :visible.sync="downloadDialog" + title="瀵煎嚭" + width="600px"> + <span> + <el-button plain type="primary" @click="controlDown">璁板綍鍗曞鍑�</el-button> + <el-button plain type="primary" @click="processingDown">澶勭悊鍗曞鍑�</el-button> + <el-button plain type="primary" @click="supervisoryDown">绾犳鍗曞鍑�</el-button> + </span> + <span slot="footer" class="dialog-footer"> + <el-button @click="downloadDialog = false">鍙� 娑�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import ZTTable from '../caorui/ZTTable/index.vue'; +import TableCard from '../caorui/TableCard/index.vue'; +import DetailFormDialog from '../do/a7-quality-control-plan/detailFormDialog.vue'; +import RecordsDialog from '../do/a7-quality-control-plan/recordsDialog.vue'; +import ProcessingSheet from '../do/a7-quality-control-plan/processingSheet.vue'; +import RectifyDialog from '../do/a7-quality-control-plan/rectifyDialog.vue'; + +export default { + name: 'a7-quality-control-plan', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { RectifyDialog, ProcessingSheet, RecordsDialog, DetailFormDialog, TableCard, ZTTable }, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + yearForm: { + superviseName: '', + }, + yearPage: { + current: 1, + size: 20, + total: 0 + }, + yearColumnData: [ + { + label: '璁″垝鍚嶇О', + prop: 'superviseName', + minWidth: '150px' + }, { + label: '缂栧埗浜�', + prop: 'writeUserName', + minWidth: '100' + }, { + label: '缂栧埗鏃ユ湡', + prop: 'writeTime', + minWidth: '160' + }, { + dataType: 'tag', + label: '鎵瑰噯鐘舵��', + prop: 'ratifyStatus', + minWidth: '100', + formatData: (params) => { + if (params === 0) { + return '涓嶆壒鍑�'; + } else if (params === 1) { + return '鎵瑰噯'; + } else { + return null; + } + }, + formatType: (params) => { + if (params === 0) { + return 'danger'; + } else if (params === 1) { + return 'success'; + } else { + return null; + } + } + },{ + label: '鎵瑰噯鍐呭', + prop: 'ratifyRemark', + minWidth: '100' + },{ + label: '鎵瑰噯浜�', + prop: 'ratifyUserName', + minWidth: '100' + },{ + label: '鎵瑰噯鏃ユ湡', + prop: 'ratifyTime', + minWidth: '160' + }, { + label: '鍒涘缓鏃ユ湡', + prop: 'createTime', + minWidth: '160' + }, { + label: '鍒涘缓浜�', + prop: 'createUser', + minWidth: '100' + }, { + dataType: 'action', + minWidth: '170', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '鎵瑰噯', + type: 'text', + disabled: (row) => { + if (row.ratifyStatus === 1) { + return true + } else { + return false + } + }, + clickFun: (row) => { + this.approvalPlan(row) + } + }, + { + name: '瀵煎嚭', + type: 'text', + clickFun: (row) => { + this.handleDown(row) + } + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delPlan(row) + } + } + ] + }], + yearTableData: [], // 骞磋〃 + yearLoading: false, + yearDetailForm: { + supervisePurpose: '', + superviseProject: '' + }, + yearDetailColumnData: [ + { + label: '鐩戠潱鏃ユ湡', + prop: 'superviseTime', + minWidth: '150px' + }, { + label: '鐩戠潱鐩殑', + prop: 'supervisePurpose', + minWidth: '150px', + showOverflowTooltip: true, + }, { + label: '鐩戞帶椤圭洰', + prop: 'superviseProject', + minWidth: '150px' + }, { + label: '琚洃鐫d汉鍛�', + prop: 'supervisee', + minWidth: '150px' + }, { + label: '鐩戠潱鍘熷洜', + prop: 'superviseReason', + minWidth: '150px' + },{ + label: '澶囨敞', + prop: 'remark', + minWidth: '150px' + },{ + dataType: 'action', + width: '260', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.showDialog('edit', row) + } + }, + { + name: '璁板綍', + type: 'text', + clickFun: (row) => { + this.records(row) + } + }, + { + name: '澶勭悊', + type: 'text', + clickFun: (row) => { + this.processing(row) + }, + disabled: (row) => { + if (row.isAccording === 1 || row.isAccording === null) { + return true + } else { + return false + } + }, + }, + { + name: '绾犳', + type: 'text', + clickFun: (row) => { + this.rectify(row) + }, + disabled: (row) => { + if (row.isAccording === 1 || row.isAccording === null || row.isCorrect === null || row.isCorrect === 0) { + return true + } else { + return false + } + }, + }, + { + name: '瀵煎嚭', + type: 'text', + clickFun: (row) => { + this.openDownloadDia(row); + }, + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delYearPlanDetail(row) + } + } + ] + } + ], + yearDetailTableData: [], // 骞存槑缁嗚〃 + yearDetailLoading: false, + yearDetailPage: { + current: 1, + size: 20, + total: 0 + }, + superviseId: '', + formDia: false, + recordsDia: false, + processingDia: false, + rectifyDia: false, + ratifyDialog: false, + ratifyLoading: false, + ratifyInfo: {}, + upLoading: false, + downloadDialog: false, + download: {}, + }; + }, + mounted() { + this.getYearPlanList() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鏌ヨ骞村害璁″垝琛� + getYearPlanList () { + const entity = { + superviseName: this.yearForm.superviseName, + } + const page = this.yearPage + this.yearLoading = true + this.$axios.post(this.$api.qualitySupervise.pageQualitySupervise, { entity, page }, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.yearLoading = false + if (res.code === 201) return + this.yearTableData = res.data.records + this.yearPage.total = res.data.total + if (this.yearTableData.length > 0) { + this.rowClick(this.yearTableData[0]) + } + }).catch(err => { + console.log('err---', err); + this.yearLoading = false + }) + }, + clearYear () { + this.yearForm.superviseName = '' + this.getYearPlanList() + }, + // 瀵煎叆娴佺▼ + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.getYearPlanList() + } + }, + // 鎵瑰噯 + approvalPlan (row) { + this.ratifyDialog = true + this.ratifyInfo = row + }, + handleRatify (ratifyStatus) { + // 鎵瑰噯鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃 + this.ratifyInfo.ratifyStatus = ratifyStatus + this.ratifyLoading = true + this.$axios.post(this.$api.qualitySupervise.ratifyQualitySupervise, this.ratifyInfo, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.ratifyLoading = false + if (res.code === 201) return + this.$message.success('鎿嶄綔鎴愬姛') + this.closeRatifyDia() + }).catch(err => { + console.log('err---', err); + this.ratifyLoading = false + }) + }, + closeRatifyDia () { + this.ratifyDialog = false + this.ratifyInfo.ratifyRemark = '' + this.getYearPlanList() + }, + // 瀵煎嚭 + handleDown (row) { + this.$axios.get(this.$api.qualitySupervise.exportQualitySupervise + '?superviseId=' + row.superviseId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = row.superviseName + '.docx'; + link.click(); + }) + }, + // 鍒犻櫎杩涘害璁″垝琛� + delPlan (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.yearLoading = true + this.$axios.get(this.$api.qualitySupervise.delQualitySupervise + '?superviseId=' + row.superviseId).then(res => { + this.yearLoading = false + if (res.code === 201) return + this.$message.success('鍒犻櫎鎴愬姛') + this.getYearPlanList() + }).catch(err => { + this.yearLoading = false + console.log('err---', err); + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }); + }, + // 骞村害璁″垝琛ㄦ牸锛岀偣鍑昏鏁版嵁鍚庡埛鏂拌鎯� + rowClick(row) { + this.superviseId = row.superviseId + this.getYearDetailPlanList() + }, + // 鑾峰彇骞村害鏄庣粏琛� + getYearDetailPlanList () { + const entity = { + superviseId: this.superviseId, + supervisePurpose: this.yearDetailForm.supervisePurpose, + superviseProject: this.yearDetailForm.superviseProject, + } + const page = this.yearDetailPage + this.yearDetailLoading = true + this.$axios.post(this.$api.qualitySupervise.pageQualitySuperviseDetail, { entity, page }, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.yearDetailLoading = false + if (res.code === 201) return + this.yearDetailTableData = res.data.records + this.yearDetailPage.total = res.data.total + }).catch(err => { + console.log('err---', err); + this.yearDetailLoading = false + }) + }, + // 閲嶇疆鏄庣粏琛� + clearDetail () { + this.yearDetailForm = { + supervisePurpose: '', + superviseProject: '' + } + this.getYearDetailPlanList() + }, + // 鎵撳紑骞村害鏄庣粏鏂板銆佷慨鏀瑰脊妗� + showDialog (type, row) { + this.formDia = true + this.$nextTick(() => { + this.$refs.formDia.openDia(type, row) + }) + }, + closeDia () { + this.formDia = false + this.getYearDetailPlanList() + }, + // 璁板綍娴佺▼ + records (row) { + this.recordsDia = true + this.$nextTick(() => { + this.$refs.recordsDia.openDia(row) + }) + }, + closeRecordsDia () { + this.recordsDia = false + this.getYearDetailPlanList() + }, + // 涓嶇鍚堟祦绋嬪脊妗� + processing (row) { + this.processingDia = true + this.$nextTick(() => { + this.$refs.processingDia.openDia(row) + }) + }, + closeProcessingDia () { + this.processingDia = false + this.getYearDetailPlanList() + }, + // 绾犳娴佺▼寮规 + rectify (row) { + this.rectifyDia = true + this.$nextTick(() => { + this.$refs.rectifyDia.openDia(row) + }) + }, + closeRectifyDia () { + this.rectifyDia = false + this.getYearDetailPlanList() + }, + // 鎵撳紑瀵煎嚭寮规 + openDownloadDia (row) { + this.downloadDialog = true + this.download = row + }, + // 瀵煎嚭璁板綍 + controlDown () { + this.$axios.get( this.$api.qualitySupervise.exportSuperviseDetailRecord+ '?superviseDetailsId=' + this.download.superviseDetailsId,{responseType: "blob"}).then(res => { + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '璁板綍瀵煎嚭' + '.docx'; + link.click(); + }).catch(err => { + console.log('err---', err); + }) + }, + // 澶勭悊鍗曞鍑� + processingDown () { + this.$axios.get( this.$api.qualitySupervise.superviseDetailAccordingExport+ '?superviseDetailsId=' + this.download.superviseDetailsId,{responseType: "blob"}).then(res => { + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '涓嶇鍚堥」瀵煎嚭' + '.docx'; + link.click(); + }).catch(err => { + console.log('err---', err); + }) + }, + // 绾犳鍗曞鍑� + supervisoryDown () { + this.$axios.get(this.$api.qualitySupervise.exportSuperviseDetaillCorrect + '?superviseDetailsCorrectId=' + this.download.superviseDetailsCorrectId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鐩戠潱绾犳鎺柦' + '.docx'; + link.click(); + }) + }, + // 鍒犻櫎骞村害璇︽儏鍒楄〃 + delYearPlanDetail (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.yearDetailLoading = true + this.$axios.get(this.$api.qualitySupervise.delQualitySuperviseDetail + '?superviseDetailsId=' + row.superviseDetailsId).then(res => { + this.yearDetailLoading = false + if (res.code === 201) return + this.$message.success('鍒犻櫎鎴愬姛') + this.getYearDetailPlanList() + }).catch(err => { + this.yearDetailLoading = false + console.log('err---', err); + }) + }) + }, + // 骞磋鍒掑垎椤� + handleYearCurrent(page) { + this.yearPage.current = page + this.getYearPlanList() + }, + handleYearSizeChange(size) { + this.yearPage.size = size + this.getYearPlanList() + }, + // 骞存槑缁嗚鍒掑垎椤� + handleYearDetailCurrent(page) { + this.yearDetailPage.current = page + this.getYearDetailPlanList() + }, + handleYearDetailSizeChange(size) { + this.yearDetailPage.size = size + this.getYearDetailPlanList() + }, + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'token': sessionStorage.getItem('token') + } + }, + action() { + return this.javaApi + this.$api.qualitySupervise.importQualitySupervise + } + }, +}; +</script> + +<style scoped> +.table-card { + background-color: #ffffff; +} +.flex_column { + display: flex; + height: 80vh; + flex-direction: column; + overflow: auto; + justify-content: space-between; +} + +.pagination { + display: flex; + justify-content: space-between +} + +.items_center { + display: flex; + align-items: center; +} + +.date_box { + margin: 0 5px; +} + +.search { + width: 150px; + padding: 0 16px; +} +</style> -- Gitblit v1.9.3