Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | color: #fff; |
| | | opacity: 0.5; |
| | | } |
| | | /* .v-modal { |
| | | z-index: 1 !important; |
| | | } */ |
| | | .luckysheet-cols-menu { |
| | | z-index: 9999 !important; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | |
| | | </div> |
| | | </div> |
| | | </body> |
| | | <script type='text/javascript' src='http://192.168.21.53:9001/web-apps/apps/api/documents/api.js'></script> |
| | | <script |
| | | type="text/javascript" |
| | | src="http://192.168.21.53:9001/web-apps/apps/api/documents/api.js" |
| | | ></script> |
| | | <script src="<%= BASE_URL %>luckysheet/plugins/js/plugin.js"></script> |
| | | <script src="<%= BASE_URL %>luckysheet/luckysheet.umd.js"></script> |
| | | <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script> |
| | |
| | | export function upPlanUser2(query) { |
| | | return request({ |
| | | url: '/insOrderPlan/upPlanUser2', |
| | | method: 'post', |
| | | data: query |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ£éªä¸å |
| | |
| | | return request({ |
| | | url: '/insOrder/upInsOrder', |
| | | method: 'post', |
| | | data: query |
| | | params: query |
| | | }) |
| | | } |
| | | // å°å¾
å®¡æ ¸æ´æ°ææ¤éç¶æ |
| | |
| | | responseType: "blob" |
| | | }) |
| | | } |
| | | // å é¤çç£è®¡å |
| | | // å é¤çæ§è®¡å |
| | | export function delQualitySupervise(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/delQualitySupervise', |
| | |
| | | params: query |
| | | }) |
| | | } |
| | | // æ°å¢çæ§è®¡å详æ
|
| | | export function addQualityMonitorDetail(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/addQualityMonitorDetail', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // ä¿®æ¹çæ§è®¡å详æ
|
| | | export function updateQualityMonitorDetail(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/updateQualityMonitorDetail', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | export function getQualityMonitorRatify(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/getQualityMonitorRatify', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ°å¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | export function addQualityMonitorRatify(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/addQualityMonitorRatify', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æäº¤çæ§è®¡å详æ
æ¹åæè§ |
| | | export function addQualityMonitorRatifyOpinion(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/addQualityMonitorRatifyOpinion', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢çæ§è¯ä»· |
| | | export function getQualityMonitorEvaluate(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/getQualityMonitorEvaluate', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ°å¢çæ§è¯ä»·æ¹å |
| | | export function addMonitorEvaluateOpinion(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/addMonitorEvaluateOpinion', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ°å¢çæ§è¯ä»· |
| | | export function addQualityMonitorEvaluate(query) { |
| | | return request({ |
| | | url: '/qualityMonitor/addQualityMonitorEvaluate', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸ç¬¦åå·¥ä½ç¸å
³æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | | //æ¥è¯¢çç£è®°å½ä¸ç¬¦åæ§å¶ä¿¡æ¯å表 |
| | | export function pageSuperviseDetailAccording(query) { |
| | | return request({ |
| | | url: "/qualitySupervise/pageSuperviseDetailAccording", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºä¸ç¬¦å项 |
| | | export function superviseDetailAccordingExport(query) { |
| | | return request({ |
| | | url: "/qualitySupervise/superviseDetailAccordingExport", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //æ¥è¯¢çç£è®°å½ä¸ç¬¦åæ§å¶ä¿¡æ¯ |
| | | export function getSuperviseDetailAccording(query) { |
| | | return request({ |
| | | url: "/qualitySupervise/getSuperviseDetailAccording", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¸ç¬¦å项çåå¸å页æ¥è¯¢ |
| | | export function pageInconsistentDistribution(query) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/pageInconsistentDistribution", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¸ç¬¦å项çåå¸å é¤ |
| | | export function delInconsistentDistribution(query) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/delInconsistentDistribution", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºä¸ç¬¦å项çåå¸ |
| | | export function exportInconsistentDistribution(query) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/exportInconsistentDistribution", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¸ç¬¦å项çåå¸è¯¦æ
|
| | | export function getInconsistentDistributionOne(query) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/getInconsistentDistributionOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // ä¸ç¬¦å项çå叿°å¢ |
| | | export function addInconsistentDistribution(data) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/addInconsistentDistribution", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // ä¸ç¬¦å项çåå¸ä¿®æ¹ |
| | | export function updateInconsistentDistribution(data) { |
| | | return request({ |
| | | url: "/inconsistentDistribution/updateInconsistentDistribution", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | |
| | | params: params |
| | | }) |
| | | } |
| | | // è·åå½åç»å½äººåé¨é¨ |
| | | export function selectUserDepartmentLimsName(query) { |
| | | return request({ |
| | | url: '/system/newUser/selectUserDepartmentLimsName', |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | height: 100%; |
| | | left: 0px; |
| | | top: 0px; |
| | | z-index: 99999 !important; |
| | | } |
| | | </style> |
| | | <style> |
| | |
| | | border-color: transparent; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | #luckysheet .returnView { |
| | | width: 50px; |
| | | height: 26px; |
| | |
| | | #luckysheet .save:active { |
| | | opacity: 0.7; |
| | | } |
| | | |
| | | /* #luckysheet-postil-overshow { |
| | | z-index: 9999 !important; |
| | | } */ |
| | | </style> |
| | | <template> |
| | | <div id="luckysheet"></div> |
| | |
| | | .user-info { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .user-content { |
| | |
| | | <el-step title="宿½"></el-step> |
| | | <el-step title="æ¹å"></el-step> |
| | | </el-steps> |
| | | <div style="height: 620px;overflow-y: auto"> |
| | | <div style="height: 520px;overflow-y: auto"> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr> |
| | | <td class="td-title"> |
| | |
| | | |
| | | <script> |
| | | |
| | | import { |
| | | addQualityMonitorRatify, addQualityMonitorRatifyOpinion, |
| | | getQualityMonitorRatify |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
| | | name: 'carryOutDialog', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | |
| | | }, |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo (row) { |
| | | this.$axios.get(this.$api.qualityMonitor.getQualityMonitorRatify + '?qualityMonitorDetailsId=' + row.qualityMonitorDetailsId).then(res => { |
| | | if (res.code === 201) return |
| | | getQualityMonitorRatify({qualityMonitorDetailsId: row.qualityMonitorDetailsId}).then(res => { |
| | | // ædetailsRatifyIdå说ææäº¤è¿å®æ½ä¿¡æ¯ |
| | | if (res.data.detailsRatifyId) { |
| | | // æ¯å¦ç»æ0:æªç»æ, 1:å·²ç»æ |
| | |
| | | }, |
| | | // æäº¤å®æ½ |
| | | addInfo () { |
| | | this.$axios.post(this.$api.qualityMonitor.addQualityMonitorRatify, this.form, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | addQualityMonitorRatify(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | |
| | | }, |
| | | // æäº¤æ¹å |
| | | editInfo () { |
| | | this.$axios.post(this.$api.qualityMonitor.addQualityMonitorRatifyOpinion, this.form, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | addQualityMonitorRatifyOpinion(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | |
| | | this.$emit('closeCarryOutDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | this.$axios.get(this.$api.user.getUserMenu).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.personList = data; |
| | | }); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 20px auto 50px !important; |
| | | } |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addQualityMonitorDetail, |
| | | updateQualityMonitorDetail |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | |
| | | export default { |
| | | name: 'detailFormDialog', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | |
| | | let entity = this.HaveJson(this.form) |
| | | entity.qualityMonitorId = this.qualityMonitorId |
| | | this.upLoad = true |
| | | this.$axios.post(this.$api.qualityMonitor.addQualityMonitorDetail, entity, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | addQualityMonitorDetail(entity).then(res => { |
| | | this.upLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æ°å¢æå') |
| | |
| | | handleEdit () { |
| | | const entity = this.HaveJson(this.form) |
| | | this.upLoad = true |
| | | this.$axios.post(this.$api.qualityMonitor.updateQualityMonitorDetail, entity, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | updateQualityMonitorDetail(entity).then(res => { |
| | | this.upLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('ä¿®æ¹æå') |
| | |
| | | |
| | | <script> |
| | | import ViewRecord from './ViewRecord.vue'; |
| | | import { |
| | | addMonitorEvaluateOpinion, addQualityMonitorEvaluate, |
| | | getQualityMonitorEvaluate |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {selectUserDepartmentLimsName} from "@/api/system/user"; |
| | | |
| | | export default { |
| | | name: 'evaluateDialog', |
| | |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo (row) { |
| | | this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | this.$axios.get(this.$api.qualityMonitor.getQualityMonitorEvaluate + '?qualityMonitorDetailsId=' + row.qualityMonitorDetailsId).then(res => { |
| | | if (res.code === 201) return |
| | | getQualityMonitorEvaluate({qualityMonitorDetailsId: row.qualityMonitorDetailsId}).then(res => { |
| | | if (res.data === null) { |
| | | this.showStep = 0 |
| | | this.currentStep = 0 |
| | |
| | | // æäº¤ |
| | | handleEdit () { |
| | | if (this.currentStep === 2) { |
| | | this.$axios.post(this.$api.qualityMonitor.addMonitorEvaluateOpinion, this.form, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | this.editLoad = true |
| | | addMonitorEvaluateOpinion(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeEvaDia() |
| | | }).catch(err => { |
| | |
| | | return |
| | | } |
| | | } |
| | | this.$axios.post(this.$api.qualityMonitor.addQualityMonitorEvaluate, this.form, { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | this.editLoad = true |
| | | addQualityMonitorEvaluate(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeEvaDia() |
| | | }).catch(err => { |
| | |
| | | }) |
| | | }, |
| | | getAuthorizedPerson() { |
| | | this.$axios.get(this.$api.user.getUserMenu).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.personList = data; |
| | | }); |
| | | }, |
| | | getDepartment() { |
| | | this.$axios.get(this.$api.user.selectUserDepartmentLimsName).then(res => { |
| | | if (res.code === 201) return |
| | | selectUserDepartmentLimsName().then(res => { |
| | | this.form.implementDepartment = res.data |
| | | }) |
| | | }, |
| | |
| | | </div> |
| | | <div> |
| | | æ¹åæè§ï¼ |
| | | <el-input v-model="approvalRemarks" :disabled="this.ratifyStatus === 1" type="textarea"></el-input> |
| | | <el-input v-model="ratifyRemark" :disabled="this.ratifyStatus === 1" type="textarea"></el-input> |
| | | </div> |
| | | <span v-if="this.ratifyStatus !== 1" slot="footer" class="dialog-footer"> |
| | | <el-button :loading="lookDialogLoading" @click="handleApproval(0)">䏿¹å</el-button> |
| | |
| | | </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" :disabled="!download.qualityMonitorDetailsId" @click="controlDown">宿½è®¡å导åº</el-button> |
| | | <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId" @click="processingDown">è¯ä»·å¯¼åº</el-button> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="downloadDialog = false">å æ¶</el-button> |
| | |
| | | </div> |
| | | <div style="margin: 0 auto;"> |
| | | <el-upload ref="upload" :action="action" :auto-upload="false" :file-list="fileList" |
| | | :headers="headers" :limit="1" |
| | | :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="{planYear: planYear, examineUserId: examineUserId}" |
| | |
| | | </el-dialog> |
| | | <!--çææ¥åå¼¹æ¡--> |
| | | <el-dialog :visible.sync="uploadDia1" title="çææ¥å" width="500px"> |
| | | <div v-if="approvalRemarks"> |
| | | <div v-if="ratifyRemark"> |
| | | æ¹åæè§ï¼ |
| | | <el-input v-model="approvalRemarks" :disabled="this.ratifyStatus === 1" type="textarea"></el-input> |
| | | <el-input v-model="ratifyRemark" :disabled="this.ratifyStatus === 1" type="textarea"></el-input> |
| | | </div> |
| | | <div style="margin: 0 auto;"> |
| | | <el-upload ref="upload1" :action="action1" :auto-upload="false" |
| | | :data="{qualityMonitorDetailsId: qualityMonitorDetailsId}" :file-list="fileList1" :headers="headers" |
| | | <el-upload ref="upload1" :action="action1" :auto-upload="false" :data="{qualityMonitorDetailsId: qualityMonitorDetailsId}" :file-list="fileList1" :headers="uploadHeader" |
| | | :limit="1" |
| | | :on-change="beforeUpload1" :on-error="onError1" :on-success="onSuccess1" accept='.doc,.docx' |
| | | drag |
| | |
| | | ratifyQualityMonitor |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/performance/class"; |
| | | import {getToken} from "@/utils/auth"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | | name: 'a7-Ensure-results-validity', |
| | |
| | | name: 'å®¡æ ¸', |
| | | type: 'text', |
| | | disabled: (row) => { |
| | | if (row.examineStatus === 1 || JSON.parse(localStorage.getItem("user")).userId != row.examineUserId) { |
| | | if (row.examineStatus === 1 || this.userId != row.examineUserId) { |
| | | return true |
| | | } else { |
| | | return false |
| | |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1 || row.examineStatus !== 1 || JSON.parse(localStorage.getItem("user")).userId != row.ratifyUserId) { |
| | | if (row.ratifyStatus === 1 || row.examineStatus !== 1 || this.userId != row.ratifyUserId) { |
| | | return true |
| | | } else { |
| | | return false |
| | |
| | | currentInfo: {}, |
| | | qualityMonitorDetailsId: '', |
| | | ratifyStatus: '', |
| | | approvalRemarks: '', |
| | | ratifyRemark: '', |
| | | downloadDialog: false, |
| | | download: {}, |
| | | planYear: '', |
| | | headers: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | planYear: '' |
| | | }; |
| | | }, |
| | | mounted() { |
| | |
| | | handleApproval (status) { |
| | | const personTrainingUpdateDto = { |
| | | qualityMonitorDetailsId: this.currentInfo.qualityMonitorDetailsId, |
| | | ratifyRemark: this.approvalRemarks, |
| | | ratifyRemark: this.ratifyRemark, |
| | | ratifyStatus: status |
| | | } |
| | | this.lookDialogLoading = true |
| | |
| | | this.carryOutDia = false |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // æå¼æ¥åå¼¹æ¡ |
| | | // æå¼å®ææ¥åå¼¹æ¡ |
| | | record (row) { |
| | | this.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | this.approvalRemarks = row.approvalRemarks |
| | | this.ratifyRemark = row.ratifyRemark |
| | | if (row.finishReportUrl) { |
| | | this.currentInfo = row |
| | | this.ratifyStatus = row.ratifyStatus |
| | |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | ...mapGetters(["userId"]), |
| | | action() { |
| | | return this.javaApi + '/qualityMonitor/importQualityMonitor' |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="ä¸ç¬¦å项çåå¸" width="90%" @close="closeDia"> |
| | | <table border="1" cellspacing="10" class="table"> |
| | | <tr> |
| | | <td>ç« èå·</td> |
| | | <th class="div-with-line"> |
| | | <span style="float: left;">è¦ç´ </span> |
| | | <span style="float: right;">é¨é¨</span> |
| | | </th> |
| | | <th>主任</th> |
| | | <th>ææ¯è´è´£äºº</th> |
| | | <th>è´¨éè´è´£äºº</th> |
| | | <th>综å室</th> |
| | | <th>è¯éªå®¤</th> |
| | | <th>å计</th> |
| | | <th>å %</th> |
| | | </tr> |
| | | <tr v-for="(item, index) in distributionDetailList" :key="item.value"> |
| | | <td>{{ item.chapterNumber }}</td> |
| | | <th>{{ item.essentials }}</th> |
| | | <th> |
| | | <el-input-number v-model="item.director" :precision="0" clearable size="small"></el-input-number> |
| | | </th> |
| | | <th> |
| | | <el-input-number v-model="item.technology" :precision="0" clearable size="small"></el-input-number> |
| | | </th> |
| | | <th> |
| | | <el-input-number v-model="item.quality" :precision="0" clearable size="small"></el-input-number> |
| | | </th> |
| | | <th> |
| | | <el-input-number v-model="item.comprehensive" :precision="0" clearable size="small"></el-input-number> |
| | | </th> |
| | | <th> |
| | | <el-input-number v-model="item.testing" :precision="0" clearable size="small"></el-input-number> |
| | | </th> |
| | | <th> |
| | | {{ item.total }} |
| | | </th> |
| | | <th> |
| | | {{ (item.proportion ? item.proportion : 0) + '%' }} |
| | | </th> |
| | | </tr> |
| | | <tr> |
| | | <td> </td> |
| | | <th> |
| | | å æ¯ |
| | | </th> |
| | | <th> |
| | | {{ (distributionProportion.director ? distributionProportion.director : 0) + '%' }} |
| | | </th> |
| | | <th> |
| | | {{ (distributionProportion.technology ? distributionProportion.technology : 0) + '%' }} |
| | | </th> |
| | | <th> |
| | | {{ (distributionProportion.quality ? distributionProportion.quality : 0) + '%' }} |
| | | </th> |
| | | <th> |
| | | {{ (distributionProportion.comprehensive ? distributionProportion.comprehensive : 0) + '%' }} |
| | | </th> |
| | | <th> |
| | | {{ (distributionProportion.testing ? distributionProportion.testing : 0) + '%' }} |
| | | </th> |
| | | <th> |
| | | {{ distributionProportion.total ? distributionProportion.total : 0 }} |
| | | </th> |
| | | <th> </th> |
| | | </tr> |
| | | </table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDia">å æ¶</el-button> |
| | | <el-button :loading="loading" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInconsistentDistributionOne, |
| | | addInconsistentDistribution, |
| | | updateInconsistentDistribution |
| | | } from '@/api/cnas/process/nonconformingWork.js' |
| | | export default { |
| | | name: 'formDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | distributionDetailList: [], |
| | | form: { |
| | | |
| | | }, |
| | | distributionProportion: {} |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } else { |
| | | this.selectEnumByCategory() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInconsistentDistributionOne({ distributionId: row.distributionId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | this.distributionDetailList = this.form.distributionDetailList |
| | | this.distributionProportion = this.form.distributionProportion |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | const date = new Date(); |
| | | const year = date.getFullYear(); |
| | | this.loading = true |
| | | const internalPlan = this.HaveJson(this.form) |
| | | internalPlan.distributionYear = year |
| | | internalPlan.distributionDetailList = this.HaveJson(this.distributionDetailList) |
| | | if (this.operationType === 'add') { |
| | | addInconsistentDistribution(internalPlan).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInconsistentDistribution(internalPlan).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | }, |
| | | closeDia() { |
| | | this.formDia = false |
| | | this.$emit('closeDia') |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.distributionDetailList = [] |
| | | // è¦ç´ |
| | | this.getDicts("essential").then((response) => { |
| | | let arr = this.dictToValue(response.data) |
| | | arr.map((item) => { |
| | | const obj = Object.assign({ |
| | | essentials: item.label, |
| | | chapterNumber: item.value, |
| | | }) |
| | | this.distributionDetailList.push(obj) |
| | | }) |
| | | }); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 6vh auto 50px !important; |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 68vh; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | >>>.is-required { |
| | | margin-bottom: 6px; |
| | | } |
| | | |
| | | .table { |
| | | width: 100%; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .table td { |
| | | width: 30px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .table th { |
| | | width: 70px; |
| | | height: 70px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .div-with-line { |
| | | width: 70px; |
| | | height: 70px; |
| | | position: relative; |
| | | /*overflow: hidden; /* éèæº¢åºå
容 */ |
| | | } |
| | | |
| | | .div-with-line::after { |
| | | content: ''; |
| | | position: absolute; |
| | | bottom: 0; |
| | | height: 1px; |
| | | background-color: #000000; |
| | | left: 50%; |
| | | transform: translateX(-50%) rotate(45deg); |
| | | transform-origin: center 50%; |
| | | top: 50%; |
| | | width: 100px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <!-- <div class="view-title"> |
| | | <span>ä¸ç¬¦å项çåå¸</span> |
| | | <span> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> --> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 120px">年份ï¼</span> |
| | | <el-input v-model="searchForm.distributionYear" clearable size="small"></el-input> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <div class="btn"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <div> |
| | | <TableCard :showForm="false" :showTitle="false"> |
| | | <template v-slot:table> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 19em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" :page="page" |
| | | @pagination="pagination"> |
| | | </limsTable> |
| | | </template> |
| | | </TableCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <form-dia v-if="formDia" ref="formDia" @closeDia="closeDia"></form-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import TableCard from '@/components/TableCard/index.vue'; |
| | | import FormDia from './components/formDia.vue'; |
| | | import { |
| | | pageInconsistentDistribution, |
| | | delInconsistentDistribution, |
| | | exportInconsistentDistribution, |
| | | } from '@/api/cnas/process/nonconformingWork.js' |
| | | |
| | | export default { |
| | | name: 'a7-distribution-of-nonconforming', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { FormDia, TableCard, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | distributionYear: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: '年份', |
| | | prop: 'distributionYear', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å建人', |
| | | prop: 'createUserName', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å建æ¶é´', |
| | | prop: 'createTime', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ä¿®æ¹äºº', |
| | | prop: 'updateUserName', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ä¿®æ¹æ¶é´', |
| | | prop: 'updateTime', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '220', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | formDia: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInconsistentDistribution({ ...entity, ...page }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | delInconsistentDistribution({ distributionId: row.distributionId }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾ï¼æ¹åå¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.formDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.formDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInconsistentDistribution({ distributionId: row.distributionId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'ä¸ç¬¦å项çåå¸' + '.docx'); |
| | | }) |
| | | }, |
| | | closeDia() { |
| | | this.formDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.distributionYear = ''; |
| | | this.searchList() |
| | | }, |
| | | // å页 |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .view-title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 60px; |
| | | padding-left: 20px; |
| | | } |
| | | |
| | | .search-background { |
| | | width: 100%; |
| | | height: 80px; |
| | | line-height: 80px; |
| | | background-color: #ffffff; |
| | | display: flex; |
| | | position: relative; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | |
| | | .table { |
| | | background-color: #ffffff; |
| | | } |
| | | |
| | | .btn { |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 16px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="ä¸ç¬¦å工使§å¶å" |
| | | width="80%" @close="closeProcessingDia"> |
| | | <div style="height: 660px; overflow-y: auto"> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr> |
| | | <td class="first-title" rowspan="8"> |
| | | <p>ä¸ç¬¦å工使
åµè®°å½</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>åçé¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <span class="td-info1"> {{ form.occurrenceDepartment }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>é¨é¨è´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <span class="td-info1"> {{ form.headDepartment }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>ä¸ç¬¦åå·¥ä½åç°éå¾ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-radio-group v-model="form.findWay" v-removeAriaHidden disabled> |
| | | <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"> |
| | | <span class="td-info1"> {{ form.recordDetail }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>ä¸ç¬¦åå·¥ä½ç以ååæ¡æ¬¾å·ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <span class="td-info1"> {{ form.recordAccording }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>被çç£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <span class="td-info1"> {{ form.supervisedUserName }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>被çç£æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <span class="td-info1"> {{ form.supervisedTime }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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"> |
| | | <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> |
| | | <td class="first-title" rowspan="3"> |
| | | <p>å¤çæªæ½</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>æ¶é¤ä¸ç¬¦å工使éåçæªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <span class="td-info1"> {{ form.eliminateMeasure }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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> |
| | | <td class="first-title" rowspan="4"> |
| | | <p>çº æ£æªæ½</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>æ¯å¦éè¦éåçº æ£æªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-radio-group v-model="form.isCorrect" v-removeAriaHidden disabled> |
| | | <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"> |
| | | <span class="td-info1"> {{ form.correctContent }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>è´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.correctUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>å¤çæ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.correctTime }} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="first-title" rowspan="4"> |
| | | <p>æ¯å¦éç¥å®¢æ·å坿¢å¤å·¥ä½</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>éç¥å®¢æ·ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-radio-group v-model="form.notifyCustomer" v-removeAriaHidden disabled> |
| | | <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-radio-group v-model="form.backToWork" v-removeAriaHidden disabled> |
| | | <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"> |
| | | {{ form.qualityManagerUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>å¤çæ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.qualityManagerTime }} |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getSuperviseDetailAccording |
| | | } from '@/api/cnas/process/nonconformingWork.js' |
| | | export default { |
| | | name: 'qualityInfo', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | form: { |
| | | occurrenceDepartment: '', |
| | | headDepartment: '', |
| | | findWay: '', |
| | | recordDetail: '', |
| | | recordAccording: '', |
| | | supervisedUserName: '', |
| | | supervisedTime: '', |
| | | actionsUserName: '', |
| | | eliminateMeasure: '', |
| | | correctUserName: '', |
| | | isCorrect: '', |
| | | correctContent: '', |
| | | recordUserName: '', |
| | | recordTime: '', |
| | | foundDepartment: '', |
| | | actionsTime: '', |
| | | correctTime: '', |
| | | notifyCustomer: '', |
| | | backToWork: '', |
| | | qualityManagerUserName: '', |
| | | qualityManagerTime: '', |
| | | }, |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia(row) { |
| | | this.formDia = true |
| | | this.searchInfo(row) |
| | | }, |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo(row) { |
| | | this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | getSuperviseDetailAccording({ superviseDetailsId: row.superviseDetailsId }).then(res => { |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeProcessingDia() { |
| | | this.formDia = false |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 5vh auto 50px !important; |
| | | } |
| | | |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .first-title { |
| | | display: table-cell; |
| | | width: 100px; |
| | | /* 设置ä¸ä¸ªåºå®å®½åº¦ */ |
| | | height: 200px; |
| | | /* 设置ä¸ä¸ªåºå®é«åº¦ */ |
| | | text-align: center; |
| | | /* æ°´å¹³å±
ä¸ */ |
| | | vertical-align: middle; |
| | | /* åç´å±
ä¸ */ |
| | | writing-mode: vertical-rl; |
| | | /* æåç«ç´æå */ |
| | | padding: 10px 0; |
| | | } |
| | | |
| | | .td-title { |
| | | height: 40px; |
| | | width: 170px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | |
| | | .td-info { |
| | | padding: 10px; |
| | | } |
| | | |
| | | .td-info1 { |
| | | display: inline-block; |
| | | width: 100%; |
| | | text-align: left; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 120px">åçé¨é¨ï¼</span> |
| | | <el-input v-model="searchForm.occurrenceDepartment" clearable size="small"></el-input> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <div> |
| | | <TableCard :showForm="false" :showTitle="false"> |
| | | <template v-slot:table> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 19em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" :page="page" |
| | | @pagination="pagination"> |
| | | </limsTable> |
| | | </template> |
| | | </TableCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <quality-info v-if="qualityInfo" ref="qualityInfo"></quality-info> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import TableCard from '@/components/TableCard/index.vue'; |
| | | import QualityInfo from './components/qualityInfo.vue'; |
| | | import { |
| | | pageSuperviseDetailAccording, |
| | | superviseDetailAccordingExport |
| | | } from '@/api/cnas/process/nonconformingWork.js' |
| | | |
| | | export default { |
| | | name: 'a7-nonconforming-item', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { QualityInfo, TableCard, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | occurrenceDepartment: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'åçé¨é¨', |
| | | prop: 'occurrenceDepartment', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'é¨é¨è´è´£äºº', |
| | | prop: 'headDepartment', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'åç°éå¾', |
| | | prop: 'findWay', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '详ç»è®°å½', |
| | | prop: 'recordDetail', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '便®åæ¡æ¬¾å·', |
| | | prop: 'recordAccording', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'åç°é¨é¨', |
| | | prop: 'foundDepartment', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '被çç£äºº', |
| | | prop: 'supervisedUserName', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '60', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'æ¥ç', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.viewInfo(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openDownloadDia(row); |
| | | }, |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | qualityInfo: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = { |
| | | occurrenceDepartment: this.searchForm.occurrenceDepartment, |
| | | } |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageSuperviseDetailAccording({ ...entity, ...page }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.occurrenceDepartment = ''; |
| | | this.searchList() |
| | | }, |
| | | viewInfo(row) { |
| | | this.qualityInfo = true |
| | | this.$nextTick(() => { |
| | | this.$refs.qualityInfo.openDia(row) |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | openDownloadDia(row) { |
| | | superviseDetailAccordingExport({ superviseDetailsId: row.superviseDetailsId }).then(res => { |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'ä¸ç¬¦å项导åº' + '.docx'); |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // å页 |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .view-title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 60px; |
| | | padding-left: 20px; |
| | | } |
| | | |
| | | .search-background { |
| | | width: 100%; |
| | | height: 80px; |
| | | line-height: 80px; |
| | | background-color: #ffffff; |
| | | display: flex; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | |
| | | .table { |
| | | background-color: #ffffff; |
| | | } |
| | | </style> |
| | |
| | | <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">è¿è´§éªè¯</el-button> |
| | | <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary" @click="openUnPassDialog('add')">ä¸åæ ¼å¤ç</el-button> |
| | | <el-button size="small" type="primary" @click="sampleVisible = true;uploadSample();">æ ·å忢</el-button> |
| | | <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">ä»»å¡åæ¢</el-button> |
| | | <!-- <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">ä»»å¡åæ¢</el-button>--> |
| | | <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">æäº¤</el-button> |
| | | <!-- 夿 ¸ --> |
| | | <el-button v-if="state == 2" size="medium" type="primary" @click="openAddCheck">éè¿</el-button> |
| | |
| | | size="medium" style="margin-right: 5px">{{ item.label }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£éªäºº" min-width="80px" prop="checkName" show-overflow-tooltip></el-table-column> |
| | | <el-table-column align="center" label="æ¯å¦çæ ·" prop="isLeave" show-overflow-tooltip width="95px"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.isLeave == 0 ? "å¦" : "æ¯" }}</span> |
| | |
| | | this.getAuthorizedPerson(); |
| | | // this.getPower(); |
| | | this.startWorker(); |
| | | this.getList0() |
| | | // this.getList0() // ä»»å¡åæ¢ |
| | | this.scrollInit(); |
| | | }, |
| | | watch: { |
| | |
| | | |
| | | }, |
| | | goBack () { |
| | | const obj = { path: "/business/materialOrder" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | this.$router.go(-1) |
| | | } |
| | | } |
| | | } |
| | |
| | | return row[property] === value; |
| | | }, |
| | | goBack () { |
| | | const obj = { path: "/business/materialOrder" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | this.$router.go(-1) |
| | | } |
| | | } |
| | | } |
| | |
| | | this.productList0.splice(index,1) |
| | | }, |
| | | goBack () { |
| | | const obj = { path: "/business/productOrder" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | this.$router.go(-1) |
| | | } |
| | | } |
| | | } |
| | |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog :before-close="closeCopyTem" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="isShowCopyTem" :title="title" width="35%"> |
| | | :visible.sync="isShowCopyTem" :title="title" width="35%" :modal-append-to-body="false"> |
| | | <el-form ref="copyForm" :model="copyForm" :rules="copyFormRules" label-position="right" label-width="80px"> |
| | | <el-form-item label="模çç¼å·" prop="number"> |
| | | <el-input v-model="copyForm.number" clearable size="small"></el-input> |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* >>>.el-dialog__wrapper { |
| | | z-index: 100 !important; |
| | | } */ |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å½å±é¨é¨" prop="deptId"> |
| | | <treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="è¯·éæ©å½å±é¨é¨" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |