From 869dbe90202f17a5ac2c0262653e763d95aea039 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期三, 26 二月 2025 15:40:20 +0800 Subject: [PATCH] 质量监督记录搬迁 --- src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue | 18 src/api/cnas/process/ensureResults/qualityMonitor.js | 0 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue | 2 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue | 2 src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue | 510 ++++++++++++ src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue | 174 ++++ src/api/cnas/process/ensureResults/qualitySupervise.js | 182 ++++ src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue | 716 +++++++++++++++++ src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue | 426 ++++++++++ src/main.js | 11 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue | 2 src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue | 460 ++++++++++ src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue | 0 13 files changed, 2,490 insertions(+), 13 deletions(-) diff --git a/src/api/cnas/process/ensureResultsValidity/qualityMonitor.js b/src/api/cnas/process/ensureResults/qualityMonitor.js similarity index 100% rename from src/api/cnas/process/ensureResultsValidity/qualityMonitor.js rename to src/api/cnas/process/ensureResults/qualityMonitor.js diff --git a/src/api/cnas/process/ensureResults/qualitySupervise.js b/src/api/cnas/process/ensureResults/qualitySupervise.js new file mode 100644 index 0000000..9de4337 --- /dev/null +++ b/src/api/cnas/process/ensureResults/qualitySupervise.js @@ -0,0 +1,182 @@ +// 璐ㄩ噺鐩戠潱璁″垝椤甸潰鐩稿叧鎺ュ彛 +import request from '@/utils/request' + +// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛� +export function pageQualitySupervise(query) { + return request({ + url: '/qualitySupervise/pageQualitySupervise', + method: 'get', + params: query + }) +} +// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛� +export function ratifyQualitySupervise(query) { + return request({ + url: '/qualitySupervise/ratifyQualitySupervise', + method: 'post', + data: query + }) +} +// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛� +export function exportQualitySupervise(query) { + return request({ + url: '/qualitySupervise/exportQualitySupervise', + method: 'get', + data: query, + responseType: "blob" + }) +} +// 鍒犻櫎鐩戠潱璁″垝 +export function delQualitySupervise(query) { + return request({ + url: '/qualitySupervise/delQualitySupervise', + method: 'delete', + params: query, + }) +} +// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛� +export function pageQualitySuperviseDetail(query) { + return request({ + url: '/qualitySupervise/pageQualitySuperviseDetail', + method: 'get', + params: query, + }) +} +// 瀵煎嚭璐ㄩ噺鐩戠潱璁″垝璁板綍鍗� +export function exportSuperviseDetailRecord(query) { + return request({ + url: '/qualitySupervise/exportSuperviseDetailRecord', + method: 'get', + params: query, + responseType: "blob" + }) +} +// 瀵煎嚭涓嶇鍚堥」 +export function superviseDetailAccordingExport(query) { + return request({ + url: '/qualitySupervise/superviseDetailAccordingExport', + method: 'get', + params: query, + responseType: "blob" + }) +} +// 瀵煎嚭鐩戠潱绾犳鎺柦 +export function exportSuperviseDetaillCorrect(query) { + return request({ + url: '/qualitySupervise/exportSuperviseDetaillCorrect', + method: 'get', + params: query, + responseType: "blob" + }) +} +// 鍒犻櫎鐩戠潱璁″垝璇︽儏 +export function delQualitySuperviseDetail(query) { + return request({ + url: '/qualitySupervise/delQualitySuperviseDetail', + method: 'delete', + params: query, + }) +} +// 鏂板鐩戠潱璁″垝璇︽儏 +export function addQualitySuperviseDetail(query) { + return request({ + url: '/qualitySupervise/addQualitySuperviseDetail', + method: 'post', + data: query, + }) +} +// 淇敼鐩戠潱璁″垝璇︽儏 +export function updateQualitySuperviseDetail(query) { + return request({ + url: '/qualitySupervise/updateQualitySuperviseDetail', + method: 'post', + data: query, + }) +} +// 鏌ヨ鐩戠潱璁″垝璁板綍娴佺▼璇︽儏 +export function getSuperviseDetailRecord(query) { + return request({ + url: '/qualitySupervise/getSuperviseDetailRecord', + method: 'get', + params: query, + }) +} +// 鏂板鐩戠潱璁板綍淇℃伅 +export function addSuperviseDetailRecord(query) { + return request({ + url: '/qualitySupervise/addSuperviseDetailRecord', + method: 'post', + data: query, + }) +} +// 鎻愪氦鐩戠潱璁板綍鎵瑰噯 +export function addSuperviseRecordOpinion(query) { + return request({ + url: '/qualitySupervise/addSuperviseRecordOpinion', + method: 'post', + data: query, + }) +} +// 鑾峰彇褰撳墠鐩戠潱璁板綍鐨勭洃鐫e憳鍒楄〃 +export function getRecordUser(query) { + return request({ + url: '/qualitySupervise/getRecordUser', + method: 'get', + params: query, + }) +} +// 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭� +export function getSuperviseDetailAccording(query) { + return request({ + url: '/qualitySupervise/getSuperviseDetailAccording', + method: 'get', + params: query, + }) +} +// (瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭� +export function addEquipSuperviseDetailAccording(query) { + return request({ + url: '/qualitySupervise/addEquipSuperviseDetailAccording', + method: 'post', + data: query, + }) +} +// (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭� +export function approverEquipSuperviseDetailAccording(query) { + return request({ + url: '/qualitySupervise/approverEquipSuperviseDetailAccording', + method: 'post', + data: query, + }) +} +// 鏌ヨ鐩戠潱绾犳澶勭悊 +export function getSuperviseDetailCorrect(query) { + return request({ + url: '/qualitySupervise/getSuperviseDetailCorrect', + method: 'get', + params: query, + }) +} +// (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊 +export function addEquipSuperviseDetailCorrect(query) { + return request({ + url: '/qualitySupervise/addEquipSuperviseDetailCorrect', + method: 'post', + data: query, + }) +} +// (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊 +export function approveEquipSuperviseDetailCorrect(query) { + return request({ + url: '/qualitySupervise/approveEquipSuperviseDetailCorrect', + method: 'post', + data: query, + }) +} +// (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊 +export function getThisYearTrainingDetailed(query) { + return request({ + url: '/personTraining/getThisYearTrainingDetailed', + method: 'get' + }) +} diff --git a/src/main.js b/src/main.js index 28883c0..5809760 100644 --- a/src/main.js +++ b/src/main.js @@ -66,11 +66,20 @@ }; Vue.prototype.javaApi = process.env.VUE_APP_BASE_API ? process.env.VUE_APP_BASE_API - : "http://192.168.0.170:8002"; + : "http://192.168.1.36:8002"; Vue.prototype.checkPermi = checkPermi; Vue.prototype.uploadHeader = { Authorization: "Bearer " + getToken(), }; +// 瑙e喅el-radio-group鍗曢�夋鑷韩鐨刡ug +Vue.directive('removeAriaHidden', { + bind(el, binding) { + let ariaEls = el.querySelectorAll('.el-radio__original'); + ariaEls.forEach((item) => { + item.removeAttribute('aria-hidden'); + }); + } +}) // 鍏ㄥ眬缁勪欢鎸傝浇 Vue.component("DictTag", DictTag); diff --git a/src/views/CNAS/process/ensureResultsValidity/components/ViewRecord.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue similarity index 100% rename from src/views/CNAS/process/ensureResultsValidity/components/ViewRecord.vue rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue diff --git a/src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue similarity index 99% rename from src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue index 205ec80..e7379c8 100644 --- a/src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue +++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue @@ -184,7 +184,7 @@ import { addQualityMonitorRatify, addQualityMonitorRatifyOpinion, getQualityMonitorRatify -} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; +} from "@/api/cnas/process/ensureResults/qualityMonitor"; import {selectUserCondition} from "@/api/business/inspectionTask"; export default { diff --git a/src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue similarity index 98% rename from src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue index 66aa2b8..3089e9b 100644 --- a/src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue +++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue @@ -53,7 +53,7 @@ import { addQualityMonitorDetail, updateQualityMonitorDetail -} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; +} from "@/api/cnas/process/ensureResults/qualityMonitor"; export default { name: 'detailFormDialog', diff --git a/src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue similarity index 99% rename from src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue index 06a9db4..78d618b 100644 --- a/src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue +++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue @@ -162,7 +162,7 @@ import { addMonitorEvaluateOpinion, addQualityMonitorEvaluate, getQualityMonitorEvaluate -} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; +} from "@/api/cnas/process/ensureResults/qualityMonitor"; import {selectUserCondition} from "@/api/business/inspectionTask"; import {selectUserDepartmentLimsName} from "@/api/system/user"; diff --git a/src/views/CNAS/process/ensureResultsValidity/index.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue similarity index 98% rename from src/views/CNAS/process/ensureResultsValidity/index.vue rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue index c7f1316..024cb58 100644 --- a/src/views/CNAS/process/ensureResultsValidity/index.vue +++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue @@ -19,7 +19,7 @@ </div> </div> <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading" - height="40vh" @pagination="pagination" + height="40vh" @pagination="pagination" :rowClick="rowClick" key="yearTableData"></lims-table> </div> <div style="margin-top: 20px"> @@ -182,7 +182,7 @@ examineQualityMonitor, exportQualityMonitorDetail, exportQualityMonitorEvaluate, exportQualityMonitorRatify, pageQualityMonitor, pageQualityMonitorDetail, ratifyFinishReport, ratifyQualityMonitor -} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; +} from "@/api/cnas/process/ensureResults/qualityMonitor"; import {selectUserCondition} from "@/api/performance/class"; import {mapGetters} from "vuex"; @@ -534,6 +534,13 @@ this.uploading = false; if (response.code == 200) { this.$message.success('涓婁紶鎴愬姛'); + this.timer = setTimeout(() => { + this.uploadDia = false + this.fileList = [] + this.planYear = '' + this.examineUserId = '' + this.getYearPlanList() + }, 1000) } else { this.$message.error(response.msg) } @@ -548,13 +555,6 @@ return; } this.$refs.upload.submit(); - this.timer = setTimeout(() => { - this.uploadDia = false - this.fileList = [] - this.planYear = '' - this.examineUserId = '' - this.getYearPlanList() - }, 1000) }, // end // 瀹℃牳 diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue new file mode 100644 index 0000000..3734365 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue @@ -0,0 +1,174 @@ +<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" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 100%" + type="month" + value-format="yyyy-MM"> + </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="supervisedUserId"> + <el-select @change="usePersonName" v-model="form.supervisedUserId" placeholder="璇烽�夋嫨" size="small" style="width: 100%"> + <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </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> +import { + addQualitySuperviseDetail, + updateQualitySuperviseDetail +} from "@/api/cnas/process/ensureResults/qualitySupervise"; +import {selectUserCondition} from "@/api/business/inspectionTask"; + +export default { + name: 'detailFormDialog', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + props: ['superviseId'], + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + form: { + qualityMonitorDetailsId: '', + superviseTime: '', + supervisePurpose: '', + superviseProject: '', + supervisee: '', + supervisedUserId: '', + superviseReason: '', + remark: '', + superviseDetailsId: '', + }, + rules: { + superviseTime: [{ required: true, message: '璇疯緭鍏ョ洃鐫f棩鏈�', trigger: 'blur' }], + supervisePurpose: [{ required: true, message: '璇疯緭鍏ョ洃鐫g洰鐨�', trigger: 'blur' }], + superviseProject: [{ required: false, message: '璇疯緭鍏ョ洃鎺ч」鐩�', trigger: 'blur' }], + }, + upLoad: false, + operationType: '', + userList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia(type, row) { + this.formDia = true + this.operationType = type + this.getUserList() + if (type === 'edit') { + this.searchInfo(row) + } + }, + usePersonName (value) { + const index = this.userList.findIndex(item => item.id === value) + if (index > -1) { + this.form.supervisee = this.userList[index].name + } + }, + 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 + addQualitySuperviseDetail(entity).then(res => { + this.upLoad = false + this.$message.success('鏂板鎴愬姛') + this.closeDia() + }).catch(err => { + console.log('err---', err); + this.upLoad = false + }) + }, + // 鎻愪氦淇敼 + handleEdit () { + const entity = this.HaveJson(this.form) + this.upLoad = true + updateQualitySuperviseDetail(entity).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') + }, + getUserList(){ + selectUserCondition({ type: 0 }).then((res) => { + this.userList = res.data; + }) + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog__body { + max-height: 720px; + overflow-y: auto; +} +</style> diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue new file mode 100644 index 0000000..253a812 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue @@ -0,0 +1,510 @@ +<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="涓嶇鍚堝伐浣滄儏鍐佃褰�"></el-step> + <el-step title="鎵瑰噯"></el-step> + </el-steps> + <div style="height: 510px;overflow-y: auto"> + <table border="1" cellspacing="10" class="tables"> + <tr> + <td class="td-title"> + <p>鍙戠敓閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + <el-input v-if="currentStep === 0" v-model="form.occurrenceDepartment" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.occurrenceDepartment }}</span> + </td> + <td class="td-title"> + <p>閮ㄩ棬璐熻矗浜猴細</p> + </td> + <td class="td-info"> + <el-input v-if="currentStep === 0" v-model="form.headDepartment" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.headDepartment }}</span> + </td> + </tr> + <tr> + <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="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> + <td class="td-title"> + <p>涓嶇鍚堝伐浣滅殑璇︾粏璁板綍锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.recordDetail" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordDetail }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p>涓嶇鍚堝伐浣滅殑浠ュ強鍙婃潯娆惧彿锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.recordAccording" + :rows="4" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordAccording }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>琚洃鐫d汉锛�</p> + </td> + <td class="td-info"> +<!-- <el-select v-if="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 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="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="currentStep !== 0" class="td-info1"> {{ form.supervisedTime }}</span> + </td> + </tr> + <tr v-if="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> + <td class="td-title" v-if="currentStep !== 0"> + <p>璁板綍浜猴細</p> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.recordUserName}} + </td> + <td class="td-title"> + <p>璁板綍鏃堕棿锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.recordTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.recordTime}} + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>娑堥櫎涓嶇鍚堝伐浣滄墍閲囧彇鐨勬帾鏂斤細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.eliminateMeasure" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.eliminateMeasure }}</span> + </td> + </tr> + <tr> + <td class="td-title" v-if="currentStep !== 0"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.actionsUserName}} + </td> + <td class="td-title"> + <p>澶勭悊鏃堕棿锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.actionsTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.actionsTime}} + </td> + </tr> + <tr> + <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="currentStep !== 0"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr> + <td class="td-title"> + <p>绾犳鎺柦澶勭悊鍗曡窡韪細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.correctContent" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctContent }}</span> + </td> + </tr> + <tr> + <td class="td-title" v-if="currentStep !== 0"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.correctUserName}} + </td> + <td class="td-title"> + <p>绾犳濉啓鏃堕棿锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.correctTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td v-if="currentStep !== 0" class="td-info"> + {{form.correctTime}} + </td> + </tr> + <tr> + <td rowspan="3"> + <p>鏄惁閫氱煡瀹㈡埛鍙婂彲鎭㈠宸ヤ綔</p> + </td> + </tr> + <tr> + <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="currentStep !== 0"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr> + <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="currentStep !== 0"> + <el-radio :label="0">鍚�</el-radio> + <el-radio :label="1">鏄�</el-radio> + </el-radio-group> + </td> + </tr> + <tr> + <td class="td-title" v-if="currentStep !== 0"> + <p>褰撳墠璐熻矗浜猴細</p> + </td> + <td class="td-info" v-if="currentStep !== 0"> + {{form.qualityManagerUserName}} + </td> + <td class="td-title"> + <p>璐ㄩ噺璐熻矗浜哄~鍐欐椂闂达細</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.qualityManagerTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td v-if="currentStep !== 0" class="td-info"> + {{form.qualityManagerTime}} + </td> + </tr> + <tr v-if=" currentStep === 0"> + <td v-if="currentStep === 0" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨鎵瑰噯浜猴細</p> + </td> + <td v-if="currentStep === 0" class="td-info" colspan="3"> + <el-select v-model="form.approverUserId" 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> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeProcessingDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import { + addEquipSuperviseDetailAccording, approverEquipSuperviseDetailAccording, + getSuperviseDetailAccording +} from "@/api/cnas/process/ensureResults/qualitySupervise"; +import {selectUserCondition} from "@/api/business/inspectionTask"; + +export default { + name: 'processingSheet', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + currentStep: 0, + form: { + occurrenceDepartment: '', + headDepartment: '', + findWay: '', + recordDetail: '', + recordAccording: '', + supervisedUserId: '', + supervisedUserName: '', + supervisedTime: '', + actionsUserName: '', + eliminateMeasure: '', + // correctUserId: '', + correctUserName: '', + isCorrect: '', + // qualityManagerUserId: '', + correctContent: '', + superviseDetailsId: '', + superviseDetailsAccordingId: '', + flowType: '', + recordUserName: '', + recordTime: '', + foundDepartment: '', + actionsTime: '', + correctTime: '', + notifyCustomer: '', + backToWork: '', + qualityManagerUserName: '', + qualityManagerTime: '', + approverUserId: '', + approveId: '', + }, + editLoad: false, + personList: [], + supervisedUserList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia (row) { + this.formDia = true + this.searchInfo(row) + this.form.superviseDetailsId = row.superviseDetailsId + this.form.approveId = row.approveId + this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃 + // this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳 + }, + // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + searchInfo (row) { + this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId + getSuperviseDetailAccording({superviseDetailsId: row.superviseDetailsId}).then(res => { + this.form.supervisedUserId = res.data.supervisedUserId + this.form.supervisedUserName = res.data.supervisedUserName + if (res.data.superviseDetailsAccordingId === null) { + this.currentStep = 0 + } else { + this.form = res.data + if (res.data.isFinish === 0) { + if (res.data.approverUserId) { + this.currentStep = 1 + } + } else { + this.currentStep = 2 + } + } + }).catch(err => { + console.log('err---', err); + }) + }, + // 鎻愪氦 + handleEdit () { + if (this.currentStep === 0) { + if (this.form.findWay === null) { + this.$message.warning('璇烽�夋嫨涓嶇鍚堝伐浣滃彂鐜伴�斿緞') + return + } + if (!this.form.supervisedTime) { + this.$message.warning('璇烽�夋嫨琚洃鐫f椂闂�') + return + } + if (this.form.notifyCustomer === null) { + this.$message.warning('璇烽�夋嫨鏄惁閫氱煡瀹㈡埛') + return + } + if (this.form.backToWork === null) { + this.$message.warning('璇烽�夋嫨鏄惁鎭㈠宸ヤ綔') + return + } + if (this.form.isCorrect === null) { + this.$message.warning('璇烽�夋嫨鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂�') + return + } + if (!this.form.approverUserId) { + this.$message.warning('璇烽�夋嫨鎵瑰噯浜�') + return + } + } + this.editLoad = true + this.form.flowType = this.currentStep + if (this.currentStep === 0) { + addEquipSuperviseDetailAccording(this.form).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎻愪氦鎴愬姛') + this.closeProcessingDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + } else { + approverEquipSuperviseDetailAccording(this.form).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') + }, + getAuthorizedPerson() { + selectUserCondition({ type: 1 }).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: 20px 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/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue new file mode 100644 index 0000000..b5c9e52 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue @@ -0,0 +1,426 @@ +<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: 470px;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-select v-if="currentStep === 0" @change="usePersonName" v-model="form.supervisorId" placeholder="璇烽�夋嫨" size="small" style="width: 100%"> + <el-option v-for="item in recordUserList" :key="item.userId" :label="item.userName" :value="item.userId"></el-option> + </el-select> + <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> +import { + addSuperviseDetailRecord, + addSuperviseRecordOpinion, getRecordUser, + getSuperviseDetailRecord +} from "@/api/cnas/process/ensureResults/qualitySupervise"; +import {selectUserCondition} from "@/api/business/inspectionTask"; + +export default { + name: 'recordsDialog', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + form: { + superviseDetailsId: '', + superviseDetailsRecordId: '', + testMember: '', + supervisor: '', + supervisorId: '', + testItem: '', + sampleNumber: '', + testDate: '', + personnel: '', + device: '', + environment: '', + sampleCollection: '', + samplePreparation: '', + detectionMethod: '', + inspectionRecord: '', + examiningReport: '', + supervisionEvaluation: '', + handlingAdvice: '', + ratifyUserId: '', + ratifyUserName: '', + ratifyOpinion: '', + isAccording: '', + }, + currentStep: 0, + editLoad: false, + personList: [], + recordUserList: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia(row) { + this.formDia = true + this.searchInfo(row) + this.getAuthorizedPerson() + }, + usePersonName (value) { + const index = this.recordUserList.findIndex(item => item.userId === value) + if (index > -1) { + this.form.supervisor = this.recordUserList[index].userName + } + }, + // 鏌ヨ鐩戠潱璁″垝璇︽儏璁板綍娴佺▼淇℃伅 + searchInfo (row) { + getSuperviseDetailRecord({superviseDetailsId: row.superviseDetailsId}).then(res => { + // 鏈塻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 + this.getRecordUser() + }).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 + addSuperviseDetailRecord(this.form).then(res => { + this.editLoad = false + this.$message.success('鎿嶄綔鎴愬姛') + this.closeRecordsDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鎻愪氦鎵瑰噯 + editInfo () { + if (!this.form.ratifyOpinion) { + this.$message.warning('璇峰~鍐欏鎵规剰瑙�') + return + } + if (this.form.isAccording === null) { + this.$message.warning('璇烽�夋嫨鏄惁绗﹀悎') + return + } + this.editLoad = true + addSuperviseRecordOpinion(this.form).then(res => { + this.editLoad = false + this.$message.success('鎿嶄綔鎴愬姛') + this.closeRecordsDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鍏抽棴寮规 + closeRecordsDia () { + this.formDia = false + this.$emit('closeRecordsDia') + }, + getAuthorizedPerson() { + selectUserCondition({ type: 1 }).then((res) => { + let data = []; + res.data.forEach((a) => { + data.push({ + label: a.name, + value: a.id, + }); + }); + this.personList = data; + }); + }, + getRecordUser () { + getRecordUser({superviseDetailsId: this.form.superviseDetailsId}).then(res => { + this.recordUserList = res.data + }) + }, + } +}; +</script> + +<style scoped> +.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/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue new file mode 100644 index 0000000..0f650e5 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue @@ -0,0 +1,460 @@ +<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(2)"></el-step> + </el-steps> + <div style="height: 510px;overflow-y: auto"> + <table border="1" cellspacing="10" class="tables"> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>鍩硅璁″垝锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-select v-model="form.personTrainingDetailedId" clearable filterable + style="width: 100%" + :disabled="currentStep !== 0" + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="item in yearTrainingDetailed" :key="item.id" :label="item.trainingObjectives" :value="item.id"> + </el-option> + </el-select> + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩帮細</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.raiseResult" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="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="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> + <td class="td-title"> + <p>鎻愬嚭鏃ユ湡锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.raiseTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" colspan="3" v-if="currentStep !== 0"> + {{form.raiseTime}} + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.causeResult" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.causeResult }}</span> + </td> + </tr> + <tr v-if="currentStep !== 0"> + <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> + <td class="td-title"> + <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3" v-if="currentStep === 0"> + <el-date-picker + v-model="form.causeTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" colspan="3" v-if="currentStep !== 0"> + {{form.causeTime}} + </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.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> + <td class="td-title"> + <p><span class="required-span">* </span>绾犳鎺柦锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.correctResult" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctResult }}</span> + </td> + </tr> + <tr> + <td class="td-title"> + <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.raiseDepartmentAffirm" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span> + </td> + </tr> + <tr v-if="currentStep !== 0"> + <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> + <td class="td-title"> + <p>绾犳鏃ユ湡锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.correctTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" colspan="3" v-if="currentStep !== 0"> + {{form.correctTime}} + </td> + </tr> + <tr> + <td class="td-title"> + <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="currentStep === 0" v-model="form.validationResult" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="currentStep !== 0" class="td-info1"> {{ form.validationResult }}</span> + </td> + </tr> + <tr v-if="currentStep !== 0"> + <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> + <td class="td-title"> + <p>楠岃瘉鏃ユ湡锛�</p> + </td> + <td class="td-info" v-if="currentStep === 0"> + <el-date-picker + v-model="form.validationTime" + format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 80%" + type="date" + value-format="yyyy-MM-dd"> + </el-date-picker> + </td> + <td class="td-info" colspan="3" v-if="currentStep !== 0"> + {{form.validationTime}} + </td> + </tr> + <tr v-if="currentStep === 0"> + <td v-if="currentStep === 0" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨鎵瑰噯浜猴細</p> + </td> + <td v-if="currentStep === 0" class="td-info" colspan="3"> + <el-select v-model="form.approverUserId" 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> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeRectifyDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import { + addEquipSuperviseDetailCorrect, approveEquipSuperviseDetailCorrect, + getSuperviseDetailCorrect +} from "@/api/cnas/process/ensureResults/qualitySupervise"; +import {selectUserCondition} from "@/api/business/inspectionTask"; +import {getThisYearTrainingDetailed} from "@/api/cnas/systemManagement/correctiveAction"; + +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: '', + approverUserId: '', + validationResult: '', + validationUserName: '', + validationDepartment: '', + validationTime: '', + superviseDetailsCorrectId: '', + approveId: '', + personTrainingDetailedId: '', + }, + editLoad: false, + personList: [], + yearTrainingDetailed: [], + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia (row) { + this.formDia = true + this.searchInfo(row) + this.form.superviseDetailsId = row.superviseDetailsId + this.form.approveId = row.approveId + this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃 + this.getYearTrainingDetailed() // 鑾峰彇鍩硅璁″垝 + }, + // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + searchInfo (row) { + this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId + getSuperviseDetailCorrect({superviseDetailsId: row.superviseDetailsId}).then(res => { + if (res.data.superviseDetailsCorrectId === null) { + this.showStep = 0 + this.currentStep = 0 + } else { + this.form = res.data + if (res.data.isFinish === 0) { + if (res.data.approverUserId) { + this.showStep = 1 + this.currentStep = 1 + } + } else { + this.currentStep = 2 + this.showStep = 1 + } + } + }).catch(err => { + console.log('err---', err); + }) + }, + // 鎻愪氦 + handleEdit () { + if (this.currentStep === 0) { + if (!this.form.raiseResult) { + this.$message.warning('璇峰~鍐欎笉鍚堟牸鎻忚堪') + return + } + if (!this.form.causeResult) { + this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�') + return + } + if (!this.form.correctResult) { + this.$message.warning('璇峰~鍐欑籂姝f帾鏂�') + return + } + if (!this.form.validationResult) { + this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�') + return + } + } + this.editLoad = true + this.form.flowType = this.currentStep + if (this.currentStep === 0) { + addEquipSuperviseDetailCorrect(this.form).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎻愪氦鎴愬姛') + this.closeRectifyDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + } else { + approveEquipSuperviseDetailCorrect(this.form).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() { + selectUserCondition({ type: 1 }).then((res) => { + let data = []; + res.data.forEach((a) => { + data.push({ + label: a.name, + value: a.id, + }); + }); + this.personList = data; + }); + }, + getYearTrainingDetailed () { + getThisYearTrainingDetailed().then(res => { + this.yearTrainingDetailed = res.data + }) + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog { + margin: 20px 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/views/CNAS/process/ensureResults/qualityControlPlan/index.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue new file mode 100644 index 0000000..f25e0a1 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue @@ -0,0 +1,716 @@ +<template> + <!-- 7.7璐ㄩ噺鐩戠潱璁″垝--> + <div class="app-container"> + <div class="table-card"> + <div style="display: flex;justify-content: space-between;"> + <el-form :model="yearForm" ref="yearForm" size="small" :inline="true"> + <el-form-item label="璁″垝鍚嶇О" prop="superviseName"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="yearForm.superviseName" + @keyup.enter.native="getYearPlanList"></el-input> + </el-form-item> + <el-form-item> + <el-button icon="el-icon-refresh" size="mini" @click="clearYear">閲� 缃�</el-button> + <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearPlanList">鏌� 璇�</el-button> + </el-form-item> + </el-form> + <div> + <el-button size="small" type="primary" @click="record">瀵煎叆</el-button> + </div> + </div> + <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading" + height="40vh" @pagination="pagination" :rowClick="rowClick" + key="yearTableData"></lims-table> + </div> + <div style="margin-top: 20px"> + <div style="display: flex;justify-content: space-between;"> + <el-form :model="yearDetailForm" ref="yearDetailForm" size="small" :inline="true"> + <el-form-item> + <el-radio-group v-model="yearDetailForm.causeType" @change="getYearDetailPlanList" size="small"> + <el-radio-button :label="1">瀹氭湡鐩戠潱</el-radio-button> + <el-radio-button :label="2">鍔ㄦ�佺洃鐫�</el-radio-button> + </el-radio-group> + </el-form-item> + <el-form-item label="鐩戞帶鐩殑" prop="supervisePurpose"> + <el-input v-model="yearDetailForm.supervisePurpose" placeholder="璇疯緭鍏�" size="small"></el-input> + </el-form-item> + <el-form-item label="鐩戞帶椤圭洰" prop="superviseProject"> + <el-input v-model="yearDetailForm.superviseProject" placeholder="璇疯緭鍏�" size="small"></el-input> + </el-form-item> + <el-form-item> + <el-button icon="el-icon-refresh" size="mini" @click="clearDetail">閲� 缃�</el-button> + <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearDetailPlanList">鏌� 璇�</el-button> + </el-form-item> + </el-form> + <div> + <el-button size="small" type="primary" @click="showDialog('add')">鏂板</el-button> + </div> + </div> + <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage" :tableLoading="yearDetailLoading" + height="40vh" @pagination="pagination1" + key="yearDetailTableData"></lims-table> + </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-new v-if="rectifyDia" ref="rectifyDia" :superviseId="superviseId" @closeProcessingDia="closeRectifyDia"></rectify-dialog-new> + <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> + <!--瀵煎叆璁″垝--> + <el-dialog :visible.sync="uploadDia" title="鏁版嵁瀵煎叆" width="500px" + :close-on-click-modal="false" :close-on-press-escape="false"> + <div style="display: flex; align-items: center;"> + <span style="width: 80px">骞翠唤锛�</span> + <el-date-picker + v-model="superviseYear" + type="year" + value-format="yyyy" + clearable + size="small" + format="yyyy" + placeholder="閫夋嫨骞�"> + </el-date-picker> + <span style="width: 110px">鐩戠潱鍛橈細</span> + <el-select v-model="recordUserIds" placeholder="璇烽�夋嫨" size="small" + @change="splitList" + :multiple-limit="2" filterable multiple style="width: 100%"> + <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </div> + <div style="display: flex;align-items: center;margin: 10px 0"> + <div style="width: 60px">鎵瑰噯浜猴細</div> + <el-select v-model="ratifyUserId" clearable + filterable size="small" style="width: 50%;"> + <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </div> + <div style="margin: 0 auto;"> + <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader" :limit="1" + accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' + :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag + :data="{recordUserIds: recordUserIds1, superviseYear: superviseYear, ratifyUserId: ratifyUserId}" + name="file"> + <i class="el-icon-upload"></i> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + </el-upload> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeUploadDia">鍙� 娑�</el-button> + <el-button :loading="uploading" type="primary" @click="submitUpload()">涓� 浼�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import DetailFormDialog from './components/detailFormDialog.vue'; +import RecordsDialog from './components/recordsDialog.vue'; +import ProcessingSheet from './components/processingSheet.vue'; +import RectifyDialogNew from './components/rectifyDialogNew.vue'; +import limsTable from "@/components/Table/lims-table.vue"; +import { + delQualitySupervise, delQualitySuperviseDetail, + exportQualitySupervise, exportSuperviseDetailRecord, + pageQualitySupervise, pageQualitySuperviseDetail, + ratifyQualitySupervise, superviseDetailAccordingExport, + exportSuperviseDetaillCorrect +} from "@/api/cnas/process/ensureResults/qualitySupervise"; +import {selectUserCondition} from "@/api/business/inspectionTask"; +import {mapGetters} from "vuex"; + +export default { + name: 'a7-quality-control-plan', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {limsTable, RectifyDialogNew, ProcessingSheet, RecordsDialog, DetailFormDialog}, + 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' + }, { + dataType: 'action', + minWidth: '170', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '鎵瑰噯', + type: 'text', + disabled: (row) => { + if (row.ratifyStatus === 1 || this.userId != row.ratifyUserId) { + return true + } else { + return false + } + }, + clickFun: (row) => { + this.approvalPlan(row) + } + }, + { + name: '瀵煎嚭', + type: 'text', + clickFun: (row) => { + this.handleDown(row) + }, + disabled: (row) => { + if (row.ratifyStatus !== 1) { + return true + } else { + return false + } + }, + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delPlan(row) + }, + disabled: (row) => { + if (row.ratifyStatus === 1) { + return true + } else { + return false + } + }, + } + ] + }], + yearTableData: [], // 骞磋〃 + yearLoading: false, + yearDetailForm: { + supervisePurpose: '', + superviseProject: '', + causeType: 1 + }, + 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: {}, + downloadDialog: false, + download: {}, + uploadDia: false, + uploading: false, + fileList: [], + userList: [], + recordUserIds: [], + recordUserIds1: '', + superviseYear: '', + ratifyUserId: '', + }; + }, + mounted() { + this.getYearPlanList() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鏌ヨ骞村害璁″垝琛� + getYearPlanList () { + const entity = { + superviseName: this.yearForm.superviseName, + } + const page = this.yearPage + this.yearLoading = true + pageQualitySupervise({ ...entity, ...page }).then(res => { + this.yearLoading = false + 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() + }, + pagination({ page, limit }) { + this.yearPage.current = page; + this.yearPage.size = limit; + this.getYearPlanList(); + }, + pagination1({ page, limit }) { + this.yearDetailPage.current = page; + this.yearDetailPage.size = limit; + this.getYearPlanList(); + }, + // 瀵煎叆娴佺▼ + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload1.clearFiles() + return false; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload1.clearFiles() + }, + handleSuccessUp(response) { + this.uploading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.recordUserIds = [] + this.superviseYear = '' + this.fileList = [] + this.timer = setTimeout(() => { + this.closeUploadDia() + }, 1000) + } + }, + splitList (val) { + const string = this.HaveJson(val) + this.recordUserIds1 = string.join(','); + console.log(this.recordUserIds1) + }, + // 鎻愪氦瀵煎叆 + submitUpload() { + if (!this.superviseYear) { + this.$message.warning('璇烽�夋嫨骞翠唤') + return; + } + if (this.recordUserIds.length === 0) { + this.$message.warning('璇烽�夋嫨鐩戠潱鍛�') + return; + } + if (!this.ratifyUserId) { + this.$message.warning('璇烽�夋嫨鎵瑰噯浜�') + return; + } + this.uploading = true + this.$refs.upload1.submit(); + }, + // 鍏抽棴瀵煎叆寮规 + closeUploadDia () { + this.uploadDia = false; + this.recordUserIds = [] + this.ratifyUserId = '' + this.superviseYear = '' + this.getYearPlanList() + }, + // 鎵撳紑鎶ュ憡寮规 + record (row) { + this.uploadDia = true + this.getUserList() + }, + getUserList(){ + selectUserCondition({ type: 0 }).then((res) => { + this.userList = res.data; + }) + }, + // 鎵瑰噯 + approvalPlan (row) { + this.ratifyDialog = true + this.ratifyInfo = row + }, + handleRatify (ratifyStatus) { + // 鎵瑰噯鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃 + this.ratifyInfo.ratifyStatus = ratifyStatus + this.ratifyLoading = true + ratifyQualitySupervise(this.ratifyInfo).then(res => { + this.ratifyLoading = false + 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) { + exportQualitySupervise({superviseId: row.superviseId}).then(res => { + try { + this.outLoading = false + const blob = new Blob([res],{ type: 'application/msword' }); + this.$download.saveAs(blob, row.superviseName + '.docx') + this.$message.success('瀵煎嚭鎴愬姛') + } catch (error) { + console.error('鍒涘缓Blob瀵硅薄鏃跺嚭閿�:', error); + } + }) + }, + // 鍒犻櫎杩涘害璁″垝琛� + delPlan (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.yearLoading = true + delQualitySupervise({superviseId: row.superviseId}).then(res => { + this.yearLoading = false + 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, + causeType: this.yearDetailForm.causeType, + } + const page = this.yearDetailPage + this.yearDetailLoading = true + pageQualitySuperviseDetail({ ...entity, ...page }).then(res => { + this.yearDetailLoading = false + 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 () { + exportSuperviseDetailRecord({superviseDetailsId: this.download.superviseDetailsId}).then(res => { + const blob = new Blob([res], { type: 'application/msword' }); + this.$download.saveAs(blob, '璁板綍瀵煎嚭.docx') + this.$message.success('瀵煎嚭鎴愬姛') + }).catch(err => { + console.log('err---', err); + }) + }, + // 澶勭悊鍗曞鍑� + processingDown () { + superviseDetailAccordingExport({superviseDetailsId: this.download.superviseDetailsId}).then(res => { + const blob = new Blob([res], { type: 'application/msword' }); + this.$download.saveAs(blob, '涓嶇鍚堥」瀵煎嚭.docx') + this.$message.success('瀵煎嚭鎴愬姛') + }).catch(err => { + console.log('err---', err); + }) + }, + // 绾犳鍗曞鍑� + supervisoryDown () { + exportSuperviseDetaillCorrect({superviseDetailsCorrectId: this.download.superviseDetailsCorrectId}).then(res => { + const blob = new Blob([res], { type: 'application/msword' }); + this.$download.saveAs(blob, '鐩戠潱绾犳鎺柦.docx') + this.$message.success('瀵煎嚭鎴愬姛') + }) + }, + // 鍒犻櫎骞村害璇︽儏鍒楄〃 + delYearPlanDetail (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.yearDetailLoading = true + delQualitySuperviseDetail({superviseDetailsId: row.superviseDetailsId}).then(res => { + this.yearDetailLoading = false + this.$message.success('鍒犻櫎鎴愬姛') + this.getYearDetailPlanList() + }).catch(err => { + this.yearDetailLoading = false + console.log('err---', err); + }) + }) + }, + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + action() { + return this.javaApi + '/qualitySupervise/importQualitySupervise' + }, + ...mapGetters(["userId"]), + }, +}; +</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