Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | </div> |
| | | </div> |
| | | </body> |
| | | <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> |
| | |
| | | return request({ |
| | | url: "/insOrderPlan/verifyPlan", |
| | | method: "post", |
| | | data: data, |
| | | params: data, |
| | | }); |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // å
审管çç¸å
³æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | | //年度计å-å页 |
| | | export function pageInternalPlan(query) { |
| | | return request({ |
| | | url: "/internalPlan/pageInternalPlan", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //年度计å-å é¤ |
| | | export function delInternalPlan(query) { |
| | | return request({ |
| | | url: "/internalPlan/delInternalPlan", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //年度计å-å¯¼åº |
| | | export function exportInternalPlan(query) { |
| | | return request({ |
| | | url: "/internalPlan/exportInternalPlan", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //年度计å详æ
|
| | | export function getInternalPlanOne(query) { |
| | | return request({ |
| | | url: "/internalPlan/getInternalPlanOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // 年度计å-æ°å¢ |
| | | export function addInternalPlan(data) { |
| | | return request({ |
| | | url: "/internalPlan/addInternalPlan", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // 年度计å-ä¿®æ¹ |
| | | export function updateInternalPlan(data) { |
| | | return request({ |
| | | url: "/internalPlan/updateInternalPlan", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // 年度计å-å®¡æ ¸ |
| | | export function examineInternalPlan(data) { |
| | | return request({ |
| | | url: "/internalPlan/examineInternalPlan", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // 年度计å-æ¹å |
| | | export function ratifyInternalPlan(data) { |
| | | return request({ |
| | | url: "/internalPlan/ratifyInternalPlan", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //å
审宿½è®¡åå页æ¥è¯¢ |
| | | export function pageInternalImplement(query) { |
| | | return request({ |
| | | url: "/internalImplement/pageInternalImplement", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
审宿½è®¡åå é¤ |
| | | export function delInternalImplement(query) { |
| | | return request({ |
| | | url: "/internalImplement/delInternalImplement", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºå
审宿½è®¡å |
| | | export function exportInternalImplement(query) { |
| | | return request({ |
| | | url: "/internalImplement/exportInternalImplement", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
审宿½è®¡å详æ
|
| | | export function getInternalImplementOne(query) { |
| | | return request({ |
| | | url: "/internalImplement/getInternalImplementOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å
审宿½è®¡åæ°å¢ |
| | | export function addInternalImplement(data) { |
| | | return request({ |
| | | url: "/internalImplement/addInternalImplement", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
审宿½è®¡åä¿®æ¹ |
| | | export function updateInternalImplement(data) { |
| | | return request({ |
| | | url: "/internalImplement/updateInternalImplement", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
审宿½è®¡åä¿®æ¹ |
| | | export function ratifyInternalImplement(data) { |
| | | return request({ |
| | | url: "/internalImplement/ratifyInternalImplement", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //ä¼è®®ç¾å°æ¥è¯¢ |
| | | export function pageInternalMeeting(query) { |
| | | return request({ |
| | | url: "/internalMeeting/pageInternalMeeting", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // ä¼è®®ç¾å°å é¤ |
| | | export function delInternalMeeting(query) { |
| | | return request({ |
| | | url: "/internalMeeting/delInternalMeeting", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºå
审ä¼è®® |
| | | export function exportInternalMeeting(query) { |
| | | return request({ |
| | | url: "/internalMeeting/exportInternalMeeting", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¼è®®ç¾å°æ¥è¯¢è¯¦æ
|
| | | export function getInternalMeetingOne(query) { |
| | | return request({ |
| | | url: "/internalMeeting/getInternalMeetingOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢ä¼è®®ç¾å° |
| | | export function addInternalMeeting(data) { |
| | | return request({ |
| | | url: "/internalMeeting/addInternalMeeting", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // ä¼è®®ç¾å°ä¿®æ¹ |
| | | export function updateInternalMeeting(data) { |
| | | return request({ |
| | | url: "/internalMeeting/updateInternalMeeting", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //å
å®¡æ£æ¥å页æ¥è¯¢ |
| | | export function pageInternalCheck(query) { |
| | | return request({ |
| | | url: "/internalCheck/pageInternalCheck", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
å®¡æ£æ¥å é¤ |
| | | export function delInternalCheck(query) { |
| | | return request({ |
| | | url: "/internalCheck/delInternalCheck", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºå
å®¡æ£æ¥ |
| | | export function exportInternalCheck(query) { |
| | | return request({ |
| | | url: "/internalCheck/exportInternalCheck", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
å®¡æ£æ¥è¯¦æ
|
| | | export function getInternalCheckOne(query) { |
| | | return request({ |
| | | url: "/internalCheck/getInternalCheckOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å
å®¡æ£æ¥æ°å¢ |
| | | export function addInternalCheck(data) { |
| | | return request({ |
| | | url: "/internalCheck/addInternalCheck", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
å®¡æ£æ¥ä¿®æ¹ |
| | | export function updateInternalCheck(data) { |
| | | return request({ |
| | | url: "/internalCheck/updateInternalCheck", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
å®¡æ£æ¥æ¹å |
| | | export function ratifyInternalCheck(data) { |
| | | return request({ |
| | | url: "/internalCheck/ratifyInternalCheck", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //æ¥è¯¢å
审管ççº æ£æªæ½å表 |
| | | export function pageInternalCorrect(query) { |
| | | return request({ |
| | | url: "/internalCorrect/pageInternalCorrect", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºå
审管ççº æ£æªæ½éä»¶ |
| | | export function exportInternalCorrect(query) { |
| | | return request({ |
| | | url: "/internalCorrect/exportInternalCorrect", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //æ¥è¯¢å
审管ççº æ£å¤ç详æ
|
| | | export function getInternalCorrect(query) { |
| | | return request({ |
| | | url: "/internalCorrect/getInternalCorrect", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æäº¤å
审管ççº æ£æªæ½å表 |
| | | export function addInternalCorrect(data) { |
| | | return request({ |
| | | url: "/internalCorrect/addInternalCorrect", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //å
审æ¥åå é¤ |
| | | export function delInternalReport(query) { |
| | | return request({ |
| | | url: "/internalReport/delInternalReport", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
审æ¥åå页æ¥è¯¢ |
| | | export function pageInternalReport(query) { |
| | | return request({ |
| | | url: "/internalReport/pageInternalReport", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //导åºå
审æ¥å |
| | | export function exportInternalReport(query) { |
| | | return request({ |
| | | url: "/internalReport/exportInternalReport", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å
审æ¥å详æ
|
| | | export function getInternalReportOne(query) { |
| | | return request({ |
| | | url: "/internalReport/getInternalReportOne", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å
审æ¥åæ°å¢ |
| | | export function addInternalReport(data) { |
| | | return request({ |
| | | url: "/internalReport/addInternalReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
审æ¥åä¿®æ¹ |
| | | export function updateInternalReport(data) { |
| | | return request({ |
| | | url: "/internalReport/updateInternalReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
审æ¥åå®¡æ ¸ |
| | | export function examineInternalReport(data) { |
| | | return request({ |
| | | url: "/internalReport/examineInternalReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å
审æ¥åè´è´£äººå¡«å |
| | | export function qualityInternalReport(data) { |
| | | return request({ |
| | | url: "/internalReport/qualityInternalReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //æ¥è¯¢å
审管ççº æ£æªæ½éä»¶ |
| | | export function getInternalCorrectFileList(query) { |
| | | return request({ |
| | | url: "/internalCorrect/getInternalCorrectFileList", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å é¤å
审管ççº æ£æªæ½éä»¶ |
| | | export function delInternalCorrectFile(query) { |
| | | return request({ |
| | | url: "/internalCorrect/delInternalCorrectFile", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | // ç»æ åæ æ·»å æ£éªæ å |
| | | export function addStandardMethodList(data) { |
| | | return request({ |
| | | url: "/standardTree/addStandardMethodList", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // æ·»å æ åæ |
| | | export function addStandardTree(data) { |
| | | return request({ |
| | |
| | | }); |
| | | } |
| | | |
| | | // å 餿 åæ ä¸çæ£éªæ å |
| | | export function delStandardMethodByFLSSM(data) { |
| | | return request({ |
| | | url: "/standardTree/delStandardMethodByFLSSM", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å 餿 åæ ä¸çæ£éªæ å |
| | | export function delStandardProductByIds(data) { |
| | | return request({ |
| | | url: "/standardTree/delStandardProductByIds", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢æ åæ ä¸çæ£éªé¡¹ç® |
| | | export function addStandardProduct(data) { |
| | | return request({ |
| | | url: "/standardTree/addStandardProduct", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // éè¿æ£éªæ åæ¥è¯¢æ£éªé¡¹ç® |
| | | export function selectStandardProductListByMethodId(query) { |
| | |
| | | row.forEach((a) => { |
| | | count += a.name.length; |
| | | }); |
| | | return count * 15 + 60 + "px"; |
| | | return count * 15 + 70 + "px"; |
| | | }, |
| | | iconFn(row) { |
| | | if (row.name === "ç¼è¾" || row.name === "ä¿®æ¹") { |
| | |
| | | <TableCard :showForm="false" :showTitle="false"> |
| | | <template v-slot:table> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 17em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"> |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination" |
| | | :page="page"> |
| | | </limsTable> |
| | | </template> |
| | | </TableCard> |
| | |
| | | <TableCard :showForm="false" :showTitle="false"> |
| | | <template v-slot:table> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 22em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"> |
| | | :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination" |
| | | :page="page"> |
| | | </limsTable> |
| | | </template> |
| | | </TableCard> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :visible.sync="filesDialogVisible" title="éä»¶" width="80%" @closed="closeFilesLook"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload" |
| | | :data="{ correctId: info.correctId }" :headers="uploadHeader" :on-error="onError" |
| | | :on-success="handleSuccessUp" :show-file-list="false" |
| | | accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;"> |
| | | <el-button size="small" style="height: 38px" type="primary">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | <div> |
| | | <limsTable ref="yearTable" :column="columnData" :height="'calc(100vh - 30em)'" :highlightCurrentRow="true" |
| | | :table-data="tableData" :table-loading="tableLoading" style="margin-top: 0.5em;" :page="page"> |
| | | </limsTable> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="lookDialogVisible" fullscreen title="æ¥çéä»¶" top="5vh" width="800px"> |
| | | <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl" |
| | | style="height: 90vh;overflow-y: auto;" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import filePreview from '@/components/Preview/filePreview.vue' |
| | | import { |
| | | getInternalCorrectFileList, |
| | | delInternalCorrectFile, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'ViewTestRecord', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { filePreview, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | filesDialogVisible: false, |
| | | tableLoading: false, |
| | | filesLookInfo: {}, |
| | | columnData: [ |
| | | { |
| | | label: 'æä»¶åç§°', |
| | | prop: 'fileName', |
| | | minWidth: '150px' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '100', |
| | | label: 'æä½', |
| | | fixed: 'right', |
| | | operation: [ |
| | | { |
| | | name: 'é¢è§', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleLook(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.upload(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delete(row) |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | info: {}, |
| | | currentInfo: {}, |
| | | lookDialogVisible: false, |
| | | page: { |
| | | total: 0, |
| | | size: -1, |
| | | current: -1, |
| | | }, |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia(row) { |
| | | this.filesDialogVisible = true |
| | | this.info = row |
| | | this.searchTableList() |
| | | }, |
| | | // æ¥è¯¢éä»¶å表 |
| | | searchTableList() { |
| | | this.tableLoading = true |
| | | getInternalCorrectFileList({ correctId: this.info.correctId }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | closeFilesLook() { |
| | | this.filesDialogVisible = false |
| | | }, |
| | | // æ¥çæä»¶ |
| | | handleLook(row) { |
| | | this.currentInfo = row |
| | | this.lookDialogVisible = true |
| | | }, |
| | | // ä¸è½½ |
| | | upload(row) { |
| | | let url = ''; |
| | | if (row.type == 1) { |
| | | url = this.javaApi + '/img/' + row.fileUrl |
| | | this.$download.saveAs(url, row.fileName) |
| | | } else { |
| | | url = this.javaApi + '/word/' + row.fileUrl |
| | | this.$download.saveAs(url, row.fileName) |
| | | } |
| | | }, |
| | | // å é¤ |
| | | delete(row) { |
| | | this.tableLoading = true |
| | | delInternalCorrectFile({ correctFileId: row.correctFileId }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchTableList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // ä¸ä¼ éªè¯ |
| | | fileBeforeUpload(file) { |
| | | let flag = true |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | flag = false |
| | | } |
| | | if (!flag) { |
| | | return Promise.reject(flag); //æ£ç¡®çç»æ¢ |
| | | } |
| | | }, |
| | | onError(err, file, fileList, type) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | handleSuccessUp(response,) { |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.searchTableList() |
| | | } else { |
| | | this.$message.error(response.message); |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | fileAction() { |
| | | return this.javaApi + '/internalCorrect/uploadInternalCorrectFile' |
| | | |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">å审é¨é¨ï¼</span> |
| | | <el-input v-model="searchForm.department" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <audit-inspection-dia v-if="auditInspectionDia" ref="auditInspectionDia" |
| | | @closeImplementDia="closeImplementDia"></audit-inspection-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import AuditInspectionDia from './auditInspectionDia.vue'; |
| | | import { |
| | | pageInternalCheck, |
| | | delInternalCheck, |
| | | exportInternalCheck |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | |
| | | export default { |
| | | name: 'auditInspection', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { AuditInspectionDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | department: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'å审é¨é¨', |
| | | prop: 'department', |
| | | }, |
| | | { |
| | | label: 'é¨é¨è´è´£äºº', |
| | | prop: 'departmentHead', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸å', |
| | | prop: 'auditor', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¥æ', |
| | | prop: 'reviewDate', |
| | | }, { |
| | | 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: '140' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '220', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1) { |
| | | return false |
| | | } else { |
| | | return true |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('ratify', 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 |
| | | } |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | auditInspectionDia: false |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalCheck({ ...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 |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾ï¼æ¹åå¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.auditInspectionDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.auditInspectionDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.auditInspectionDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.department = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | delInternalCheck({ checkId: row.checkId }).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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalCheck({ checkId: row.checkId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
å®¡æ£æ¥' + '.docx'); |
| | | }) |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="å
é¨å®¡æ ¸å®æ½è®¡å" width="80%" @close="closeImplementDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="auto"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å审é¨é¨" prop="department"> |
| | | <el-input v-model="form.department" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é¨é¨è´è´£äºº" prop="departmentHead"> |
| | | <el-input v-model="form.departmentHead" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸å" prop="auditor"> |
| | | <el-input v-model="form.auditor" :disabled="operationType === 'ratify'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¥æ" prop="reviewDate"> |
| | | <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px"> |
| | | <el-button size="small" type="primary" @click="addRow">æ·»å </el-button> |
| | | <el-button size="small" type="danger" @click="clearTable">æ¸
空</el-button> |
| | | </div> |
| | | <el-table :data="checkDetailList" border height="300" style="width: 100%"> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column header-align="center" label="æ¶åè¦ç´ åè´¨éä½ç³»æä»¶æ¡æ¬¾" prop="element"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.element" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="å®¡æ ¸å
容" prop="content"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.content" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="å®¡æ ¸æ¹å¼" prop="method"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.method" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="å®¡æ ¸ç»æè®°å½" prop="resultRecords" width="180"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.resultRecords" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="ä¸ç¬¦åæ§è´¨" prop="nonNature" width="180"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.nonNature" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">䏿¹å</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">æ¹ |
| | | å</el-button> |
| | | <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">æ |
| | | 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="approvalDialog = false">å æ¶</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInternalCheckOne, |
| | | addInternalCheck, |
| | | updateInternalCheck, |
| | | ratifyInternalCheck, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'auditInspectionDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | department: '', |
| | | departmentHead: '', |
| | | auditor: '', |
| | | reviewDate: '', |
| | | }, |
| | | rules: { |
| | | department: [{ required: true, message: '请填åå审é¨é¨', trigger: 'blur' }], |
| | | departmentHead: [{ required: true, message: '请填åé¨é¨è´è´£äºº', trigger: 'blur' }], |
| | | auditor: [{ required: true, message: '请填åå®¡æ ¸å', trigger: 'blur' }], |
| | | reviewDate: [{ required: true, message: '请填åå®¡æ ¸æ¥æ', trigger: 'blur' }], |
| | | }, |
| | | checkDetailList: [], |
| | | operationType: '', |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | ratifyRemark: '', |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInternalCheckOne({ checkId: row.checkId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | this.checkDetailList = this.form.checkDetailList |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | if (this.checkDetailList.length === 0) { |
| | | this.$message.warning('请添å è¡¨æ ¼æ°æ®') |
| | | return |
| | | } |
| | | this.loading = true |
| | | const internalCheckDto = this.HaveJson(this.form) |
| | | internalCheckDto.checkDetailList = this.HaveJson(this.checkDetailList) |
| | | if (this.operationType === 'add') { |
| | | addInternalCheck(internalCheckDto).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInternalCheck(internalCheckDto).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | ratify(ratifyStatus) { |
| | | // 䏿¹åéè¦å¡«åæ¹åå
容 |
| | | if (ratifyStatus === 0) { |
| | | this.approvalDialog = true |
| | | } else { |
| | | this.handleApproval(ratifyStatus) |
| | | } |
| | | }, |
| | | // æäº¤æ¹åä¿¡æ¯ |
| | | handleApproval(ratifyStatus) { |
| | | this.approvalLoading = true |
| | | const internalCheckDto = this.HaveJson(this.form) |
| | | internalCheckDto.ratifyStatus = ratifyStatus |
| | | internalCheckDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : '' |
| | | ratifyInternalCheck(internalCheckDto).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeImplementDia(this.departId); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | // å¢å è¡¨æ ¼è¡æ°æ® |
| | | addRow() { |
| | | this.checkDetailList.push({ |
| | | element: '', |
| | | content: '', |
| | | method: '', |
| | | resultRecords: '', |
| | | nonNature: '', |
| | | }) |
| | | }, |
| | | // æ¸
ç©ºè¡¨æ ¼æ°æ® |
| | | clearTable() { |
| | | this.checkDetailList = [] |
| | | }, |
| | | closeImplementDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeImplementDia') |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">æ¶é´ï¼</span> |
| | | <el-input v-model="searchForm.meetingDate" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <audit-meeting-sign-dia v-if="auditMeetingSignDia" ref="auditMeetingSignDia" |
| | | @closeYearDia="closeYearDia"></audit-meeting-sign-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import AuditMeetingSignDia from './auditMeetingSignDia.vue'; |
| | | import { |
| | | pageInternalMeeting, |
| | | delInternalMeeting, |
| | | exportInternalMeeting, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | |
| | | export default { |
| | | name: 'auditMeetingSign', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { AuditMeetingSignDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | meetingDate: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'æ¶é´', |
| | | prop: 'meetingDate', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '主æäºº', |
| | | prop: 'compere', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å°ç¹', |
| | | prop: 'place', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ä¼è®®ä¸»é¢', |
| | | prop: 'subject', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'åä¼äººå', |
| | | prop: 'participantName', |
| | | minWidth: '120' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | fixed: 'right', |
| | | minWidth: '220', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | auditMeetingSignDia: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalMeeting({ ...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 |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾å¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.auditMeetingSignDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.auditMeetingSignDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeYearDia() { |
| | | this.auditMeetingSignDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.meetingDate = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | delInternalMeeting({ meetingId: row.meetingId }).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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalMeeting({ meetingId: row.meetingId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
审ä¼è®®ç¾å°' + '.docx'); |
| | | }) |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="å
审ä¼è®®ç¾å°è¡¨" width="1000px" @close="closeYearDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¶é´" prop="meetingDate"> |
| | | <el-date-picker v-model="form.meetingDate" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="è¯·éæ©" |
| | | size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="主æäºº" prop="compere"> |
| | | <el-input v-model="form.compere" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å°ç¹" prop="place"> |
| | | <el-input v-model="form.place" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼è®®ä¸»é¢" prop="subject"> |
| | | <el-input v-model="form.subject" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åä¼äººå" prop="participant"> |
| | | <el-select v-model="form.participant" clearable filterable multiple placeholder="è¯·éæ©" size="small" |
| | | style="width: 100%;"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeYearDia">å æ¶</el-button> |
| | | <el-button :loading="loading" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | selectUserCondition, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | import { |
| | | getInternalMeetingOne, |
| | | addInternalMeeting, |
| | | updateInternalMeeting, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'auditMeetingSignDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | meetingDate: '', |
| | | compere: '', |
| | | place: '', |
| | | subject: '', |
| | | participant: [], |
| | | }, |
| | | rules: { |
| | | meetingDate: [{ required: true, message: '请填åä¼è®®æ¶é´', trigger: 'blur' }], |
| | | compere: [{ required: true, message: '请填å主æäºº', trigger: 'blur' }], |
| | | place: [{ required: true, message: '请填åå°ç¹', trigger: 'blur' }], |
| | | subject: [{ required: true, message: '请填åä¼è®®ä¸»é¢', trigger: 'blur' }], |
| | | participant: [{ required: true, message: 'è¯·éæ©åå 人å', trigger: 'change' }], |
| | | }, |
| | | operationType: '', |
| | | personList: [] |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | this.getAuthorizedPerson() |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInternalMeetingOne({ meetingId: row.meetingId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | this.form.participant = this.form.participant.split(',').map(Number) |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalMeeting = this.HaveJson(this.form) |
| | | internalMeeting.participant = internalMeeting.participant.join(',') |
| | | if (this.operationType === 'add') { |
| | | addInternalMeeting(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInternalMeeting(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | closeYearDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeYearDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .table { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .table td { |
| | | height: 34px; |
| | | width: 100px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 4px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">å®¡æ ¸ç®çï¼</span> |
| | | <el-input v-model="searchForm.purposes" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <audit-report-dia v-if="auditReportDia" ref="auditReportDia" |
| | | @closeImplementDia="closeImplementDia"></audit-report-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import AuditReportDia from './auditReportDia.vue'; |
| | | import { |
| | | delInternalReport, |
| | | pageInternalReport, |
| | | exportInternalReport, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'auditReport', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { AuditReportDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | purposes: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'å®¡æ ¸ç®ç', |
| | | prop: 'purposes', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸ä¾æ®', |
| | | prop: 'basis', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¥æ', |
| | | prop: 'reviewDate', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¹æ³', |
| | | prop: 'method', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸èå´', |
| | | prop: 'scope', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸è´£ä»»è
', |
| | | prop: 'responsible', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸ç»é¿', |
| | | prop: 'leader', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸å', |
| | | prop: 'auditor', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸ç»åå·¥æ
åµ', |
| | | prop: 'division', |
| | | }, |
| | | { |
| | | dataType: 'tag', |
| | | label: 'å®¡æ ¸ç¶æ', |
| | | prop: 'examineStatus', |
| | | 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: 'examineRemark', |
| | | minWidth: '140' |
| | | }, |
| | | { |
| | | dataType: 'tag', |
| | | label: 'è´¨éè´è´£äººç¶æ', |
| | | prop: 'qualityStatus', |
| | | 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: 'qualityRemark', |
| | | minWidth: '140' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '220', |
| | | fixed: 'right', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.examineStatus === 1 || row.examineStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å®¡æ ¸', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('examine', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.examineStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æè§', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('ratify', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.qualityStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.qualityStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | auditReportDia: false |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalReport({ ...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 |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾ï¼æ¹åå¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.auditReportDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.auditReportDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.auditReportDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.purposes = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | delInternalReport({ reportId: row.reportId }).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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalReport({ reportId: row.reportId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
审æ¥å' + '.docx'); |
| | | }) |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="å
é¨å®¡æ ¸æ¥å" width="80%" @close="closeImplementDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸ç®ç" prop="purposes"> |
| | | <el-input v-model="form.purposes" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸ä¾æ®" prop="basis"> |
| | | <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¥æ" prop="reviewDate"> |
| | | <el-date-picker v-model="form.reviewDate" |
| | | :disabled="operationType === 'examine' || operationType === 'ratify'" clearable format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸æ¹æ³" prop="method"> |
| | | <el-input v-model="form.method" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸èå´" prop="scope"> |
| | | <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸è´£ä»»è
" prop="responsible"> |
| | | <el-input v-model="form.responsible" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸ç»é¿" prop="leader"> |
| | | <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸å" prop="auditor"> |
| | | <el-input v-model="form.auditor" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸ç»åå·¥æ
åµ" prop="division"> |
| | | <el-input v-model="form.division" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸æ¦åµ" prop="overview"> |
| | | <el-input v-model="form.overview" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å
审ç»å¯¹ä¸å¿ç®¡çä½ç³»çç»è®ºæ§è¯ä»·" prop="conclusion"> |
| | | <el-input v-model="form.conclusion" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æ¹è¿æè§" prop="suggest"> |
| | | <el-input v-model="form.suggest" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="é¢è®¡åå®¡æ ¸é¨é¨å®æçº æ£æªæ½æéæ¶é´" prop="actionDate"> |
| | | <el-input v-model="form.actionDate" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ä¸ç¬¦åæ
嵿´æ¹æ»ä½è·è¿ç¡®è®¤äºº" prop="followUser"> |
| | | <el-input v-model="form.followUser" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ä¸ç¬¦åæ
嵿´æ¹æ»ä½è·è¿ç¡®è®¤è®°å½" prop="followRecord"> |
| | | <el-input v-model="form.followRecord" |
| | | :disabled="operationType === 'examine' || operationType === 'ratify'" :rows="3" clearable size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æ¬æ¥ååæ¾èå´" prop="reportScope"> |
| | | <el-input v-model="form.reportScope" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="operationType === 'ratify'" :span="24"> |
| | | <el-form-item label="è´¨éè´è´£äººæè§" prop="qualityRemark"> |
| | | <el-input v-model="form.qualityRemark" :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">é |
| | | è¿</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" @click="handleApproval(0)">䏿¹å</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">æ¹ |
| | | å</el-button> |
| | | <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeImplementDia">å |
| | | æ¶</el-button> |
| | | <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary" |
| | | @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="examineDialog" title="å®¡æ ¸" width="30%" @close="examineDialog = false"> |
| | | <span> |
| | | å®¡æ ¸å¤æ³¨ï¼ |
| | | <el-input v-model="examineRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="examineLoading" @click="examineDialog = false">å æ¶</el-button> |
| | | <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="qualityRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="approvalDialog = false">å æ¶</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInternalReportOne, |
| | | addInternalReport, |
| | | updateInternalReport, |
| | | examineInternalReport, |
| | | qualityInternalReport, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'auditReportDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | purposes: '', |
| | | basis: '', |
| | | reviewDate: '', |
| | | method: '', |
| | | scope: '', |
| | | responsible: '', |
| | | leader: '', |
| | | auditor: '', |
| | | division: '', |
| | | overview: '', |
| | | conclusion: '', |
| | | suggest: '', |
| | | actionDate: '', |
| | | followUser: '', |
| | | followRecord: '', |
| | | reportScope: '', |
| | | qualityRemark: '', |
| | | }, |
| | | rules: { |
| | | purposes: [{ required: true, message: '请填åå®¡æ ¸ç®ç', trigger: 'blur' }], |
| | | basis: [{ required: true, message: '请填åå®¡æ ¸ä¾æ®', trigger: 'blur' }], |
| | | reviewDate: [{ required: true, message: '请填åå®¡æ ¸æ¥æ', trigger: 'change' }], |
| | | method: [{ required: true, message: '请填åå®¡æ ¸æ¹æ³', trigger: 'blur' }], |
| | | scope: [{ required: true, message: '请填åå®¡æ ¸èå´', trigger: 'blur' }], |
| | | responsible: [{ required: true, message: '请填åå®¡æ ¸è´£ä»»è
', trigger: 'blur' }], |
| | | leader: [{ required: true, message: '请填åå®¡æ ¸ç»é¿', trigger: 'blur' }], |
| | | auditor: [{ required: true, message: '请填åå®¡æ ¸å', trigger: 'blur' }], |
| | | division: [{ required: true, message: '请填åå®¡æ ¸ç»åå·¥æ
åµ', trigger: 'blur' }], |
| | | overview: [{ required: true, message: '请填åå®¡æ ¸æ¦åµ', trigger: 'blur' }], |
| | | conclusion: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | suggest: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | actionDate: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | followUser: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | followRecord: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | reportScope: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | qualityRemark: [{ required: true, message: '请填å', trigger: 'blur' }], |
| | | }, |
| | | operationType: '', |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | examineDialog: false, |
| | | examineLoading: false, |
| | | qualityRemark: '', |
| | | examineRemark: '', |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInternalReportOne({ reportId: row.reportId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | if (this.operationType === 'add') { |
| | | addInternalReport(internalReport).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInternalReport(internalReport).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | // å®¡æ ¸æµç¨ |
| | | examine(examineStatus) { |
| | | if (examineStatus === 0) { |
| | | this.examineDialog = true |
| | | } else { |
| | | this.handleExamine(examineStatus) |
| | | } |
| | | }, |
| | | handleExamine(examineStatus) { |
| | | this.examineLoading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.examineStatus = examineStatus |
| | | examineInternalReport(internalReport).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeImplementDia(this.departId); |
| | | } |
| | | this.examineLoading = false |
| | | }).catch(() => { |
| | | this.examineLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å®¡æ ¸ä¿¡æ¯ |
| | | handleApproval(qualityStatus) { |
| | | this.approvalLoading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.qualityStatus = qualityStatus |
| | | qualityInternalReport(internalReport).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeImplementDia(this.departId); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeImplementDia') |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 6vh auto 50px !important; |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 42em; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | >>>.is-required { |
| | | margin-bottom: 6px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 200px">ä¸åæ ¼æè¿°ï¼</span> |
| | | <el-input v-model="searchForm.raiseResult" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <corrective-action-d-ia v-if="correctiveActionDIa" ref="correctiveActionDIa" |
| | | @closeRectifyDia="closeRectifyDia"></corrective-action-d-ia> |
| | | <view-test-record v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></view-test-record> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import TableCard from '@/components/TableCard/index.vue'; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import CorrectiveActionDIa from './correctiveActionDIa.vue'; |
| | | import ViewTestRecord from './ViewTestRecord.vue'; |
| | | import { |
| | | pageInternalCorrect, |
| | | exportInternalCorrect, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | |
| | | export default { |
| | | name: 'correctiveAction', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { CorrectiveActionDIa, limsTable, TableCard, ViewTestRecord }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | raiseResult: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'ä¸åæ ¼æå离äºå®çæè¿°', |
| | | prop: 'raiseResult', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'åå åæ', |
| | | prop: 'causeResult', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'çº æ£æªæ½', |
| | | prop: 'correctResult', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '宿½éªè¯ç»æ', |
| | | prop: 'validationResult', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '220', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'çº æ£', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('rectify', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.viewFiles(row); |
| | | }, |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | correctiveActionDIa: false, |
| | | viewTestRecordDialog: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = { |
| | | raiseResult: this.searchForm.raiseResult, |
| | | } |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalCorrect({ ...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.raiseResult = ''; |
| | | this.searchList() |
| | | }, |
| | | // æ¥çéä»¶ |
| | | viewFiles(row) { |
| | | this.viewTestRecordDialog = true |
| | | this.$nextTick(() => { |
| | | this.$refs.viewTestRecordDialog.openDia(row) |
| | | }) |
| | | }, |
| | | openFormDia(type, row) { |
| | | this.correctiveActionDIa = true |
| | | this.$nextTick(() => { |
| | | this.$refs.correctiveActionDIa.openDia(type, row) |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalCorrect({ correctId: row.correctId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
å®¡çº æ£æªæ½' + '.docx'); |
| | | }) |
| | | }, |
| | | closeRectifyDia() { |
| | | this.correctiveActionDIa = false |
| | | this.searchList() |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="çº æ£æªæ½å¤çå" |
| | | width="60%" @close="closeRectifyDia"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="ä¸åæ ¼æå离äºå®çæè¿°" @click.native="setStep(0)"></el-step> |
| | | <el-step title="åå åæ" @click.native="setStep(1)"></el-step> |
| | | <el-step title="çº æ£æªæ½" @click.native="setStep(2)"></el-step> |
| | | <el-step title="宿½éªè¯ç»æ" @click.native="setStep(3)"></el-step> |
| | | </el-steps> |
| | | <div> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr v-if="showStep === 0"> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>ä¸åæ ¼æå离äºå®çæè¿°ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.raiseResult" :rows="4" |
| | | placeholder="请è¾å
¥å
容" size="small" type="textarea"> |
| | | </el-input> |
| | | <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.raiseResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 0"> |
| | | <td v-if="currentStep === 0" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥è´è´£äººï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 0" class="td-info" colspan="3"> |
| | | <el-select v-model="form.causeUserId" clearable filterable placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 0 && currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>æåºäººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.raiseUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>æåºé¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.raiseDepartment }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 0 && currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | {{ form.raiseTime }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 1"> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>åå åæï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.causeResult" :rows="5" |
| | | placeholder="请è¾å
¥å
容" size="small" type="textarea"> |
| | | </el-input> |
| | | <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.causeResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 1 && currentStep !== 1"> |
| | | <td class="td-title"> |
| | | <p>åå åæäººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.causeUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.causeDepartment }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 1 && currentStep !== 1"> |
| | | <td class="td-title"> |
| | | <p>åå åææ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | {{ form.causeTime }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 1"> |
| | | <td v-if="currentStep === 1" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥è´è´£äººï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 1" class="td-info" colspan="3"> |
| | | <el-select v-model="form.correctUserId" clearable filterable placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 2"> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>çº æ£æªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctResult" :rows="5" |
| | | placeholder="请è¾å
¥å
容" size="small" type="textarea"> |
| | | </el-input> |
| | | <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 2"> |
| | | <td class="td-title"> |
| | | <p>æåºè¦æ±é¨é¨ç¡®è®¤ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.raiseDepartmentAffirm" :rows="5" |
| | | placeholder="请è¾å
¥å
容" size="small" type="textarea"> |
| | | </el-input> |
| | | <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 2 && currentStep !== 2"> |
| | | <td class="td-title"> |
| | | <p>çº æ£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.correctUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.correctDepartment }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 2 && currentStep !== 2"> |
| | | <td class="td-title"> |
| | | <p>çº æ£æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | {{ form.correctTime }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 2"> |
| | | <td v-if="currentStep === 2" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥è´è´£äººï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 2" class="td-info" colspan="3"> |
| | | <el-select v-model="form.validationUserId" clearable filterable placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 3"> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>宿½éªè¯ç»æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="showStep === 3 && currentStep === 3" v-model="form.validationResult" :rows="5" |
| | | placeholder="请è¾å
¥å
容" size="small" type="textarea"> |
| | | </el-input> |
| | | <span v-if="showStep === 3 && currentStep !== 3" class="td-info1"> {{ form.validationResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 3 && currentStep !== 3"> |
| | | <td class="td-title"> |
| | | <p>éªè¯äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.validationUserName }} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{ form.validationDepartment }} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="showStep === 3 && currentStep !== 3"> |
| | | <td class="td-title"> |
| | | <p>éªè¯æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | {{ form.validationTime }} |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeRectifyDia">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInternalCorrect, |
| | | addInternalCorrect, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | import { |
| | | selectUserCondition, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | export default { |
| | | name: 'correctiveActionDIa', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | form: { |
| | | superviseDetailsId: '', |
| | | raiseResult: '', |
| | | vdeRaiseResult: '', |
| | | causeUserId: '', |
| | | raiseUserName: '', |
| | | raiseDepartment: '', |
| | | raiseTime: '', |
| | | causeResult: '', |
| | | causeUserName: '', |
| | | causeDepartment: '', |
| | | causeTime: '', |
| | | correctUserId: '', |
| | | correctResult: '', |
| | | raiseDepartmentAffirm: '', |
| | | correctUserName: '', |
| | | correctDepartment: '', |
| | | correctTime: '', |
| | | validationUserId: '', |
| | | validationResult: '', |
| | | validationUserName: '', |
| | | validationDepartment: '', |
| | | validationTime: '', |
| | | }, |
| | | editLoad: false, |
| | | personList: [], |
| | | supervisedUserList: [], |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | this.form.superviseDetailsId = row.superviseDetailsId |
| | | } |
| | | this.getAuthorizedPerson() // è·å人åå表 |
| | | this.getSupervisedUserList() // è·åå½åé¨é¨äººå |
| | | }, |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo(row) { |
| | | this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | getInternalCorrect({ correctId: row.correctId }).then(res => { |
| | | if (res.code === 201) return |
| | | if (res.data.superviseDetailsCorrectId === null) { |
| | | this.showStep = 0 |
| | | this.currentStep = 0 |
| | | } else { |
| | | this.form = res.data |
| | | if (res.data.isFinish === 0) { |
| | | if (res.data.causeUserId) { |
| | | this.showStep = 1 |
| | | this.currentStep = 1 |
| | | } |
| | | if (res.data.correctUserId) { |
| | | this.showStep = 2 |
| | | this.currentStep = 2 |
| | | } |
| | | if (res.data.validationUserId) { |
| | | this.showStep = 3 |
| | | this.currentStep = 3 |
| | | } |
| | | } else { |
| | | this.currentStep = 4 |
| | | this.showStep = 3 |
| | | } |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // æäº¤ |
| | | handleEdit() { |
| | | if (this.currentStep === 0) { |
| | | if (!this.form.raiseResult) { |
| | | this.$message.warning('请填åä¸åæ ¼æè¿°') |
| | | return |
| | | } |
| | | if (!this.form.causeUserId) { |
| | | this.$message.warning('è¯·éæ©ä¸ä¸æ¥è´è´£äºº') |
| | | return |
| | | } |
| | | } else if (this.currentStep === 1) { |
| | | if (!this.form.causeResult) { |
| | | this.$message.warning('请填ååå åæ') |
| | | return |
| | | } |
| | | if (!this.form.correctUserId) { |
| | | this.$message.warning('è¯·éæ©ä¸ä¸æ¥è´è´£äºº') |
| | | return |
| | | } |
| | | } else if (this.currentStep === 2) { |
| | | if (!this.form.correctResult) { |
| | | this.$message.warning('请填åçº æ£æªæ½') |
| | | return |
| | | } |
| | | if (!this.form.validationUserId) { |
| | | this.$message.warning('è¯·éæ©ä¸ä¸æ¥è´è´£äºº') |
| | | return |
| | | } |
| | | } else if (this.currentStep === 3) { |
| | | if (!this.form.validationResult) { |
| | | this.$message.warning('请填å宿½éªè¯ç»æ') |
| | | return |
| | | } |
| | | } |
| | | this.editLoad = true |
| | | this.form.supervisedTime = '' |
| | | this.form.flowType = this.currentStep |
| | | addInternalCorrect(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().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | getSupervisedUserList() { |
| | | selectUserCondition({ type: 2 }).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.supervisedUserList = data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 10vh auto 50px !important; |
| | | } |
| | | |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .td-title { |
| | | height: 40px; |
| | | width: 170px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | |
| | | .td-info { |
| | | padding: 6px; |
| | | } |
| | | |
| | | .td-info1 { |
| | | display: inline-block; |
| | | width: 100%; |
| | | text-align: left; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="å
é¨å®¡æ ¸å®æ½è®¡å" width="80%" @close="closeImplementDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="auto"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸ç®ç" prop="purposes"> |
| | | <el-input v-model="form.purposes" :disabled="operationType === 'ratify'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸æ§è´¨" prop="nature"> |
| | | <el-input v-model="form.nature" :disabled="operationType === 'ratify'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸èå´" prop="scope"> |
| | | <el-input v-model="form.scope" :disabled="operationType === 'ratify'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸ä¾æ®" prop="basis"> |
| | | <el-input v-model="form.basis" :disabled="operationType === 'ratify'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸ç»é¿" prop="teamLeader"> |
| | | <el-input v-model="form.teamLeader" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å
审å" prop="internalAuditor"> |
| | | <el-input v-model="form.internalAuditor" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¥æ" prop="reviewDate"> |
| | | <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¹æ³" prop="auditMethod"> |
| | | <el-input v-model="form.auditMethod" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="馿¬¡ä¼è®®æ¶é´" prop="firstMeetingTime"> |
| | | <el-date-picker v-model="form.firstMeetingTime" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ«æ¬¡ä¼è®®æ¶é´" prop="lastMeetingTime"> |
| | | <el-date-picker v-model="form.lastMeetingTime" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¥åæäº¤æ¥æ" prop="submitTime"> |
| | | <el-date-picker v-model="form.submitTime" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸æ¥ååæ¾èå´" prop="submitScope"> |
| | | <el-input v-model="form.submitScope" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px"> |
| | | <el-button size="small" type="primary" @click="addRow">æ·»å </el-button> |
| | | <el-button size="small" type="danger" @click="clearTable">æ¸
空</el-button> |
| | | </div> |
| | | <el-table :data="implementDetailList" border height="300" style="width: 100%"> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column header-align="center" label="æ¶é´" prop="implement"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.implement" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="åå®¡æ ¸é¨é¨" prop="department"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.department" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="责任人" prop="responsible"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.responsible" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="å®¡æ ¸å" prop="auditor" width="180"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.auditor" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column header-align="center" label="å®¡æ ¸å
容" prop="reviewContent" width="180"> |
| | | <template slot-scope="{row}"> |
| | | <el-input v-model="row.reviewContent" :disabled="operationType === 'ratify'" size="small" /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">䏿¹å</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">æ¹ |
| | | å</el-button> |
| | | <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">æ |
| | | 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="approvalDialog = false">å æ¶</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInternalImplementOne, |
| | | addInternalImplement, |
| | | updateInternalImplement, |
| | | ratifyInternalImplement, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'implementPlanDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | purposes: '', |
| | | nature: '', |
| | | scope: '', |
| | | basis: '', |
| | | teamLeader: '', |
| | | internalAuditor: '', |
| | | reviewDate: '', |
| | | auditMethod: '', |
| | | firstMeetingTime: '', |
| | | lastMeetingTime: '', |
| | | submitTime: '', |
| | | submitScope: '', |
| | | }, |
| | | rules: { |
| | | purposes: [{ required: true, message: '请填åå®¡æ ¸ç®ç', trigger: 'blur' }], |
| | | nature: [{ required: true, message: '请填åå®¡æ ¸æ§è´¨', trigger: 'blur' }], |
| | | scope: [{ required: true, message: '请填åå®¡æ ¸èå´', trigger: 'blur' }], |
| | | basis: [{ required: true, message: '请填åå®¡æ ¸ä¾æ®', trigger: 'blur' }], |
| | | teamLeader: [{ required: true, message: '请填åå®¡æ ¸ç»é¿', trigger: 'blur' }], |
| | | internalAuditor: [{ required: true, message: '请填åå
审å', trigger: 'blur' }], |
| | | reviewDate: [{ required: true, message: '请填åå®¡æ ¸æ¶é´', trigger: 'blur' }], |
| | | auditMethod: [{ required: true, message: '请填åå®¡æ ¸æ¹æ³', trigger: 'blur' }], |
| | | firstMeetingTime: [{ required: true, message: '请填å馿¬¡ä¼è®®æ¶é´', trigger: 'blur' }], |
| | | lastMeetingTime: [{ required: true, message: 'è¯·å¡«åæ«æ¬¡ä¼è®®æ¶é´', trigger: 'blur' }], |
| | | submitTime: [{ required: true, message: '请填åå®¡æ ¸æ¥åæäº¤æ¥æ', trigger: 'blur' }], |
| | | submitScope: [{ required: true, message: '请填åå®¡æ ¸æ¥ååæ¾èå´', trigger: 'blur' }], |
| | | }, |
| | | implementDetailList: [], |
| | | operationType: '', |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | ratifyRemark: '', |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInternalImplementOne({ implementId: row.implementId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | this.implementDetailList = this.form.implementDetailList |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | if (this.implementDetailList.length === 0) { |
| | | this.$message.warning('请添å è¡¨æ ¼æ°æ®') |
| | | return |
| | | } |
| | | this.loading = true |
| | | const internalImplementDto = this.HaveJson(this.form) |
| | | internalImplementDto.implementDetailList = this.HaveJson(this.implementDetailList) |
| | | if (this.operationType === 'add') { |
| | | addInternalImplement(internalImplementDto).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInternalImplement(internalImplementDto).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | ratify(ratifyStatus) { |
| | | // 䏿¹åéè¦å¡«åæ¹åå
容 |
| | | if (ratifyStatus === 0) { |
| | | this.approvalDialog = true |
| | | } else { |
| | | this.handleApproval(ratifyStatus) |
| | | } |
| | | }, |
| | | // æäº¤æ¹åä¿¡æ¯ |
| | | handleApproval(ratifyStatus) { |
| | | this.approvalLoading = true |
| | | const internalImplementDto = this.HaveJson(this.form) |
| | | internalImplementDto.ratifyStatus = ratifyStatus |
| | | internalImplementDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : '' |
| | | ratifyInternalImplement(internalImplementDto).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeImplementDia(this.departId); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | // å¢å è¡¨æ ¼è¡æ°æ® |
| | | addRow() { |
| | | this.implementDetailList.push({ |
| | | implement: '', |
| | | department: '', |
| | | responsible: '', |
| | | auditor: '', |
| | | reviewContent: '', |
| | | }) |
| | | }, |
| | | // æ¸
ç©ºè¡¨æ ¼æ°æ® |
| | | clearTable() { |
| | | this.implementDetailList = [] |
| | | }, |
| | | closeImplementDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeImplementDia') |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 10vh auto 50px !important; |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 38em; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">å®¡æ ¸ç®çï¼</span> |
| | | <el-input v-model="searchForm.purposes" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page"> |
| | | </limsTable> |
| | | </div> |
| | | <implement-plan-dia v-if="implementPlanDia" ref="implementPlanDia" |
| | | @closeImplementDia="closeImplementDia"></implement-plan-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | pageInternalImplement, |
| | | delInternalImplement, |
| | | exportInternalImplement, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import ImplementPlanDia from './implementPlanDia.vue'; |
| | | |
| | | export default { |
| | | name: 'implementationPlan', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { ImplementPlanDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | purposes: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'å®¡æ ¸ç®ç', |
| | | prop: 'purposes', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ§è´¨', |
| | | prop: 'nature', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸èå´', |
| | | prop: 'scope', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸ä¾æ®', |
| | | prop: 'basis', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸ç»é¿', |
| | | prop: 'teamLeader', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å
审å', |
| | | prop: 'internalAuditor', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¥æ', |
| | | prop: 'reviewDate', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¹æ³', |
| | | prop: 'auditMethod', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: '馿¬¡ä¼è®®æ¶é´', |
| | | prop: 'firstMeetingTime', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: 'æ«æ¬¡ä¼è®®æ¶é´', |
| | | prop: 'lastMeetingTime', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¥åæäº¤æ¥æ', |
| | | prop: 'submitTime', |
| | | minWidth: '100', |
| | | }, |
| | | { |
| | | label: 'å®¡æ ¸æ¥ååæ¾èå´', |
| | | prop: 'submitScope', |
| | | minWidth: '100', |
| | | }, { |
| | | 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' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '220', |
| | | fixed: 'right', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('ratify', 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 |
| | | } |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | implementPlanDia: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalImplement({ ...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 |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾ï¼æ¹åå¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.implementPlanDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.implementPlanDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.implementPlanDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.purposes = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | delInternalImplement({ implementId: row.implementId }).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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalImplement({ implementId: row.implementId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
审宿½è®¡å' + '.docx'); |
| | | }) |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">å
审ç®çï¼</span> |
| | | <el-input v-model="searchForm.purpose" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page"> |
| | | </limsTable> |
| | | </div> |
| | | <year-plan-dia v-if="yearPlanDia" ref="yearPlanDia" @closeYearDia="closeYearDia"></year-plan-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import YearPlanDia from './yearPlanDia.vue'; |
| | | import { |
| | | pageInternalPlan, |
| | | delInternalPlan, |
| | | exportInternalPlan, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | |
| | | export default { |
| | | name: 'yearPlan', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { YearPlanDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | purpose: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'å
审ç®ç', |
| | | prop: 'purpose', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å
审èå´', |
| | | prop: 'scope', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å
审便®', |
| | | prop: 'basis', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ç»é¿', |
| | | prop: 'leader', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ç»å', |
| | | prop: 'crew', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'tag', |
| | | label: 'å®¡æ ¸ç¶æ', |
| | | prop: 'examineStatus', |
| | | 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: 'examineRemark', |
| | | minWidth: '100' |
| | | }, { |
| | | label: 'å®¡æ ¸äºº', |
| | | prop: 'examineUserName', |
| | | minWidth: '100' |
| | | }, { |
| | | label: 'å®¡æ ¸æ¥æ', |
| | | prop: 'examineTime', |
| | | 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', |
| | | fixed: 'right', |
| | | minWidth: '220', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å®¡æ ¸', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('examine', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.examineStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('ratify', row); |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) { |
| | | 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 |
| | | } |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearPlanDia: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | const entity = this.searchForm |
| | | const page = this.page |
| | | this.tableLoading = true |
| | | pageInternalPlan({ ...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 |
| | | delInternalPlan({ planId: row.planId }).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.yearPlanDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.yearPlanDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | handleDown(row) { |
| | | exportInternalPlan({ planId: row.planId }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'å
审年度计å' + '.docx'); |
| | | }) |
| | | }, |
| | | closeYearDia() { |
| | | this.yearPlanDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.purpose = ''; |
| | | this.searchList() |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="å
é¨å®¡æ ¸å¹´åº¦è®¡å" width="1000px" @close="closeYearDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å
审ç®ç" prop="purpose"> |
| | | <el-input v-model="form.purpose" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å
审èå´" prop="scope"> |
| | | <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | :rows="3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å
审便®" prop="basis"> |
| | | <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»é¿" prop="leader"> |
| | | <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»å" prop="crew"> |
| | | <el-input v-model="form.crew" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <table border="1" cellspacing="10" class="table"> |
| | | <tr> |
| | | <td class="div-with-line"> |
| | | <span style="float: left;">é¨é¨</span> |
| | | <span style="float: right;">æä»½</span> |
| | | </td> |
| | | <th v-for="(item, index) in dic1" :key="index">{{ item }}</th> |
| | | </tr> |
| | | <tr v-for="(item, index) in planDetailList" :key="index"> |
| | | <td>{{ item.department }}</td> |
| | | <th> |
| | | <el-input v-model="item.january" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.february" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.march" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.april" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.may" :disabled="operationType === 'examine' || operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.june" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.july" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.august" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.september" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.october" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.november" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="item.december" :disabled="operationType === 'examine' || operationType === 'ratify'" |
| | | clearable size="small"></el-input> |
| | | </th> |
| | | </tr> |
| | | </table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">é |
| | | è¿</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" @click="approval(0)">䏿¹å</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">æ¹ |
| | | å</el-button> |
| | | <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeYearDia">å |
| | | æ¶</el-button> |
| | | <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary" |
| | | @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="examineDialog" title="å®¡æ ¸" width="30%" @close="examineDialog = false"> |
| | | <span> |
| | | å®¡æ ¸å¤æ³¨ï¼ |
| | | <el-input v-model="examineRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="examineLoading" @click="examineDialog = false">å æ¶</el-button> |
| | | <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="approvalDialog = false">å æ¶</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getInternalPlanOne, |
| | | addInternalPlan, |
| | | updateInternalPlan, |
| | | examineInternalPlan, |
| | | ratifyInternalPlan, |
| | | } from '@/api/cnas/systemManagement/internalAuditManagement.js' |
| | | export default { |
| | | name: 'yearPlanDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | purpose: '', |
| | | scope: '', |
| | | basis: '', |
| | | leader: '', |
| | | crew: '', |
| | | }, |
| | | rules: { |
| | | purpose: [{ required: true, message: '请填åå
审ç®ç', trigger: 'blur' }], |
| | | scope: [{ required: true, message: '请填åå
审èå´', trigger: 'blur' }], |
| | | basis: [{ required: true, message: '请填åå
审便®', trigger: 'blur' }], |
| | | leader: [{ required: true, message: '请填åç»é¿', trigger: 'blur' }], |
| | | crew: [{ required: true, message: '请填åç»å', trigger: 'blur' }], |
| | | }, |
| | | operationType: '', |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | examineDialog: false, |
| | | examineLoading: false, |
| | | ratifyRemark: '', |
| | | examineRemark: '', |
| | | dic1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], |
| | | planDetailList: [{ department: 'è£
å¤çµç¼å®éªå®¤' }, { department: 'é信产åå®éªå®¤' }, { department: 'çµå产åå®éªå®¤' }, { department: 'å¨è½äº§åå®éªå®¤' }, { department: 'å°é¢çº¿ç¼å®éªå®¤' }], |
| | | }; |
| | | }, |
| | | mounted() { |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo(row) { |
| | | this.diaLoading = true |
| | | getInternalPlanOne({ planId: row.planId }).then(res => { |
| | | this.diaLoading = false |
| | | if (res.code === 201) return |
| | | this.form = res.data |
| | | this.planDetailList = this.form.planDetailList |
| | | }).catch(err => { |
| | | console.log(err) |
| | | this.diaLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalPlan = this.HaveJson(this.form) |
| | | internalPlan.planDetailList = this.HaveJson(this.planDetailList) |
| | | if (this.operationType === 'add') { |
| | | addInternalPlan(internalPlan).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | updateInternalPlan(internalPlan).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | // å®¡æ ¸æµç¨ |
| | | examine(examineStatus) { |
| | | if (examineStatus === 0) { |
| | | this.examineDialog = true |
| | | } else { |
| | | this.handleExamine(examineStatus) |
| | | } |
| | | }, |
| | | handleExamine(examineStatus) { |
| | | this.examineLoading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.examineStatus = examineStatus |
| | | internalReport.examineRemark = this.examineRemark |
| | | examineInternalPlan(internalReport).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeYearDia(this.departId); |
| | | } |
| | | this.examineLoading = false |
| | | }).catch(() => { |
| | | this.examineLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤æ¹åä¿¡æ¯ |
| | | approval(ratifyStatus) { |
| | | if (ratifyStatus === 0) { |
| | | this.approvalDialog = true |
| | | } else { |
| | | this.handleApproval(ratifyStatus) |
| | | } |
| | | }, |
| | | handleApproval(ratifyStatus) { |
| | | this.approvalLoading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.ratifyStatus = ratifyStatus |
| | | internalReport.ratifyRemark = this.ratifyRemark |
| | | ratifyInternalPlan(internalReport).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeYearDia(this.departId); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | closeYearDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeYearDia') |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 6vh auto 50px !important; |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 42em; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | >>>.is-required { |
| | | margin-bottom: 6px; |
| | | } |
| | | |
| | | .table { |
| | | width: 100%; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .table th { |
| | | width: 70px; |
| | | } |
| | | |
| | | .table td { |
| | | 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 class="main"> |
| | | <el-tabs v-model="activeName" class="tab-panel" type="border-card"> |
| | | <el-tab-pane label="年度计å" name="yearPlan"> |
| | | <year-plan></year-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å
é¨å®æ½è®¡å" name="implementationPlan"> |
| | | <implementation-plan></implementation-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å
审ä¼è®®ç¾å°" name="meetingSignIn"> |
| | | <audit-meeting-sign></audit-meeting-sign> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å
å®¡æ£æ¥" name="auditInspection"> |
| | | <audit-inspection></audit-inspection> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="çº æ£æªæ½" name="correctiveAction"> |
| | | <corrective-action></corrective-action> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å
审æ¥å" name="auditReport"> |
| | | <audit-report></audit-report> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import YearPlan from './components/yearPlan.vue'; |
| | | import implementationPlan from './components/implementationPlan.vue'; |
| | | import AuditInspection from './components/auditInspection.vue'; |
| | | import AuditReport from './components/auditReport.vue'; |
| | | import AuditMeetingSign from './components/auditMeetingSign.vue'; |
| | | import CorrectiveAction from './components/correctiveAction.vue'; |
| | | |
| | | export default { |
| | | name: 'InternalAuditManagement', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { CorrectiveAction, AuditMeetingSign, AuditReport, AuditInspection, YearPlan, implementationPlan }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | activeName: 'yearPlan', |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: {} |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .main { |
| | | padding: 15px 0; |
| | | } |
| | | |
| | | .tab-panel { |
| | | background: #fff; |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading" |
| | | :rowClassName="rowClassName" :height="'calc(100vh - 250px)'" @pagination="pagination" |
| | | :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination" |
| | | key="tableData0"></lims-table> |
| | | </div> |
| | | <!-- <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == null">--> |
| | |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog title="æ¥çéä»¶" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}" |
| | | style="max-height: 90vh;overflow-y: auto;" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {mapGetters} from "vuex"; |
| | | import {upReportUrl} from "@/api/business/insReport"; |
| | | import {delfile} from "@/api/business/rawMaterialOrder"; |
| | | import filePreview from "@/components/Preview/filePreview.vue"; |
| | | |
| | | export default { |
| | | components: { |
| | | filePreview, |
| | | onlyoffice, |
| | | limsTable, |
| | | // ShowInfo, |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | lookDialogVisible: false, |
| | | alone: false, |
| | | tabList: [], |
| | | active: 1, |
| | |
| | | issuedVisible: false, |
| | | fullscreen: false, |
| | | option:null, |
| | | orderTypeList: [ |
| | | {label: 'å§æè¯éª', value: 'Customer-ordered test'}, |
| | | {label: 'æ½æ£', value: 'æ½æ£'}, |
| | | {label: 'è¿åæ£éª', value: 'è¿åæ£éª'}, |
| | | {label: 'å£åº¦æ£éª', value: 'Quarterly inspection'}, |
| | | ], |
| | | urgencyLevel: [], |
| | | inspectionTaskState: [], |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | }, |
| | | // è¿åæä½ |
| | | handleRestore(row) { |
| | | upReportUrl({id: row.insReportId}).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | } |
| | | }) |
| | | this.$confirm('æ¯å¦è¿åå½åæ¥å?', "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }).then(() => { |
| | | upReportUrl({id: row.insReportId}).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('è¿åæå') |
| | | this.refreshTable() |
| | | } |
| | | }) |
| | | }).catch(() => { }) |
| | | |
| | | }, |
| | | // æ¥çæ¥å |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | let fileName = row.url |
| | | let fileType = "docx" |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | fileName = row.tempUrlPdf |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | this.issuedVisible = true; |
| | | if (!row.tempUrlPdf) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | this.currentInfo = row |
| | | this.lookDialogVisible = true |
| | | // this.currentInfo = row; |
| | | // let fileName = row.url |
| | | // let fileType = "docx" |
| | | // if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | // fileName = row.tempUrlPdf |
| | | // fileType = "pdf" |
| | | // } |
| | | // fileName = fileName.replace('/word/','') |
| | | // const userName = this.nickName |
| | | // this.option = { |
| | | // url: this.javaApi + "/word/" + fileName, |
| | | // isEdit: false, |
| | | // fileType: fileType, |
| | | // title: fileName, |
| | | // lang: 'zh-CN', |
| | | // isPrint: false, |
| | | // user_id: 1, |
| | | // user_name: userName, |
| | | // editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | // } |
| | | // this.issuedVisible = true; |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | |
| | | </el-col> |
| | | <el-col :span="16" style="text-align: right"> |
| | | <el-button size="small" type="primary" @click="refreshView">å·æ°</el-button> |
| | | <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="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="addVerifyDia = true">æäº¤</el-button> |
| | | <!-- 夿 ¸ --> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨:"> |
| | | <!-- <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>--> |
| | | <el-input v-model="insOrder.remark" :disabled="state !== 1" clearable placeholder="请è¾å
¥" size="small" |
| | | <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="请è¾å
¥" size="small" |
| | | @blur="subOtherForm(insOrder.remark, 'remark')"></el-input> |
| | | <!-- <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> --> |
| | | </el-form-item> |
| | |
| | | }, |
| | | // æå¼è¿è´§éªè¯å¼¹æ¡ |
| | | openPurchase() { |
| | | const operationType = this.state === 1 ? "add" : "view"; |
| | | const operationType = this.state == 1 ? "add" : "view"; |
| | | this.purchaseDialog = true; |
| | | const item = { |
| | | id: this.currentSample.id, |
| | |
| | | align-items: center; |
| | | } |
| | | </style> |
| | | <style> |
| | | <style scoped> |
| | | /* .inspection .el-form-item__label { |
| | | color: #000; |
| | | } */ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="inspection_order"> |
| | | <div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="padding-left: 20px;text-align: left;">æ¥åç¼å¶</el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="search" style="position: relative;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ¥åç¼å·ï¼</div> |
| | | <div class="search_input"><el-input v-model="componentData.entity.code" clearable placeholder="请è¾å
¥" |
| | | size="small" @keyup.enter.native="refreshTable()"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="componentData.entity.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ä¸åç±»å«ï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="componentData.entity.typeSource" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ£éªç±»å«ï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="refresh()">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="refreshTable()">æ¥ è¯¢</el-button> |
| | | <el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">æ¹éä¸è½½</el-button> |
| | | </div> |
| | | </div> |
| | | <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> |
| | | <div class="table"> |
| | | <el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column header-align="center" align="center" width="70" prop="prop" label="åºå·" type="index"></el-table-column> |
| | | <el-table-column prop="code" label="æ¥åç¼å·" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="typeSource" label="ä¸åç±»å«" min-width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>åææä¸å</el-tag> |
| | | <el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>æåä¸å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="orderType" label="æ£éªç±»å«" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>å§æè¯éª</el-tag> |
| | | <el-tag v-if="scope.row.orderType === 'æ½æ£'" disable-transitions>æ½æ£</el-tag> |
| | | <el-tag type="info" v-if="scope.row.orderType === 'è¿åæ£éª'" disable-transitions>è¿åæ£éª</el-tag> |
| | | <el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>å£åº¦æ£éª</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" min-width="150"></el-table-column> |
| | | <el-table-column prop="writeUserName" label="æäº¤äºº" min-width="110"></el-table-column> |
| | | <el-table-column prop="writeTime" label="æäº¤æ¶é´" min-width="150"></el-table-column> |
| | | <el-table-column prop="state" label="æäº¤ç¶æ" min-width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>å¾
æäº¤</el-tag> |
| | | <el-tag type="success" v-if="scope.row.state === 1" disable-transitions>å·²æäº¤</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="examineUser" label="å®¡æ ¸äºº" width="110"></el-table-column> |
| | | <el-table-column prop="examineTime" label="å®¡æ ¸æ¶é´" width="180"></el-table-column> |
| | | <el-table-column prop="isExamine" label="å®¡æ ¸ç¶æ" width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>ä¸éè¿</el-tag> |
| | | <el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>éè¿</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="examineTell" label="å®¡æ ¸å¤æ³¨" width="180"></el-table-column> |
| | | <el-table-column prop="ratifyUser" label="æ¹å人" width="110"></el-table-column> |
| | | <el-table-column prop="ratifyTime" label="æ¹åæ¶é´" width="180"></el-table-column> |
| | | <el-table-column prop="isRatify" label="æ¹åç¶æ" width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>䏿¹å</el-tag> |
| | | <el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>æ¹å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="ratifyTell" label="æ¹å夿³¨" width="180"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column label="æä½" fixed="right" min-width="360" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="viewIssued(scope.row)">æ¥çæ¥å</el-button> |
| | | <el-upload ref='upload1' |
| | | style="display: inline" |
| | | :action="fileAction1 +'?id='+ scope.row.id" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload1" |
| | | :headers="headers" :on-error="onError1" |
| | | :on-success="handleSuccessUp1" |
| | | :show-file-list="false" |
| | | accept='.doc,.docx'> |
| | | <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">ä¸ä¼ </el-button> |
| | | <!-- <span>ä¸ä¼ </span>--> |
| | | </el-upload> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">è¿å</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">éåä»»å¡</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">æäº¤</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">å®¡æ ¸</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">æ¹å</el-button> |
| | | <el-popover placement="bottom" :width="170" trigger="hover"> |
| | | <template #reference> |
| | | <el-button link type="text" size="small">æ´å¤</el-button> |
| | | </template> |
| | | <div> |
| | | <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">ä¸è½½</el-button> |
| | | <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">åå§è®°å½</el-button> |
| | | <el-button type="text" size="small" @click="handleFileLook(scope.row)">éä»¶ä¸ä¼ </el-button> |
| | | </div> |
| | | </el-popover> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current" |
| | | style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" |
| | | layout="->,total, sizes, prev, pager, next, jumper" :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="å¨çº¿ç¼å¶" |
| | | width="22cm"> |
| | | <div class="full-screen"> |
| | | <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" |
| | | @click="fullscreen=true;"></i> |
| | | <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;"> |
| | | </div> |
| | | <Word v-if="claimVisible" ref="Word" :class="{fullscreen:fullscreen}" :value="value" style="height:70vh" /> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="claimVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="confirmClaim">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="æ¥åå®¡æ ¸" |
| | | width="80vw"> |
| | | <div class="full-screen"> |
| | | <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i> |
| | | <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" > |
| | | </div> |
| | | <div v-if="issuedVisible" style="height: 80vh;"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :disabled="loadingIssued" @click="issuedReasonVisible=true">ä¸éè¿</el-button> |
| | | <el-button type="primary" @click="subIssued">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="ä¸éè¿åå " width="400px"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ä¸éè¿åå ï¼</div> |
| | | <div class="search_input"><el-input v-model="reason" clearable placeholder="请è¾å
¥" size="small"></el-input></div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible=false">åæ¶</el-button> |
| | | <el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="æ¥åæ¹å" width="80vw"> |
| | | <div class="full-screen"> |
| | | <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i> |
| | | <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" > |
| | | </div> |
| | | <div v-if="approveVisible" style="height: 80vh;"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :disabled="loadingApprove" @click="approveReasonVisible=true">䏿¹å</el-button> |
| | | <el-button :loading="loadingApprove" type="primary" @click="subApprove">æ¹ å</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="䏿¹ååå " width="400px"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">䏿¹ååå ï¼</div> |
| | | <div class="search_input"><el-input v-model="reason" clearable placeholder="请è¾å
¥" size="small"></el-input></div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :disabled="loadingApproveReason" @click="approveReasonVisible=false">åæ¶</el-button> |
| | | <el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="æå®æ¹å人å" |
| | | width="400px" |
| | | @close="closeAddApproverDia"> |
| | | <div class="body" style="display: flex;padding: 10px;align-items: center;"> |
| | | <div class="search_label" style="width: 150px;"><span class="required-span">*</span>æ¹å人ï¼</div> |
| | | <div class="search_input" style="width: 100%;"> |
| | | <el-select v-model="approver" clearable filterable placeholder="è¯·éæ©" size="small" style="width: 100%;"> |
| | | <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeAddApproverDia">å æ¶</el-button> |
| | | <el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia" |
| | | title="æå®å®¡æ ¸äººå" |
| | | width="400px" |
| | | @close="closeAddVerifyDia"> |
| | | <div class="body" style="display: flex;padding: 10px;align-items: center;"> |
| | | <div class="search_label" style="width: 150px;"><span class="required-span">*</span>å®¡æ ¸äººï¼</div> |
| | | <div class="search_input" style="width: 100%;"> |
| | | <el-select v-model="verifyUser" clearable filterable placeholder="è¯·éæ©" size="small" style="width: 100%;"> |
| | | <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeAddVerifyDia">å æ¶</el-button> |
| | | <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <div v-if="activeFace >0 && isCopper === null" style="width: 100%;height: 100%;"> |
| | | <Add :active="activeFace" :currentId="currentId" :examine="examine"/> |
| | | </div> |
| | | <div v-if="activeFace >0 && isCopper === 0" style="width: 100%;height: 100%;"> |
| | | <CustomsInspection :active="activeFace" :currentId="currentId" :customsInspection="customsInspection" :isReport="isReport"/> |
| | | </div> |
| | | <div v-if="activeFace >0 && isCopper === 1" style="width: 100%;height: 100%;"> |
| | | <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder> |
| | | </div> |
| | | <!--产ä¸é¾ä¿¡æ¯æ¥ç--> |
| | | <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo> |
| | | <!--æ¥åæ¥ç--> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="æ¥åæ¥ç" |
| | | width="80vw"> |
| | | <div class="full-screen"> |
| | | <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i> |
| | | <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" > |
| | | </div> |
| | | <div v-if="viewIssuedVisible" style="height: 80vh;"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | </el-dialog> |
| | | <!--æ£éªä»»å¡ä¿¡æ¯æ¥ç--> |
| | | <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId" |
| | | :sonLaboratory="sonLaboratory" :state="state" |
| | | :typeSource="typeSource" |
| | | @goback="goback" @refreshView="refreshView"/> |
| | | <!--éä»¶æ¥ç--> |
| | | <el-dialog :visible.sync="filesDialogVisible" title="éä»¶æ¥ç" width="80%" @closed="closeFilesLook"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <el-upload ref='upload' |
| | | :action="fileAction" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}" |
| | | :headers="headers" :on-error="onError" |
| | | :on-success="handleSuccessUp" |
| | | :show-file-list="false" |
| | | accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;"> |
| | | <el-button size="small" style="height: 38px" type="primary">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | <!-- <div v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">--> |
| | | <!-- <ValueTable :key="upIndex"--> |
| | | <!-- ref="fileList"--> |
| | | <!-- :componentData="fileComponentData"--> |
| | | <!-- :delUrl="$api.insOrderPlan.delfile"--> |
| | | <!-- :url="$api.insOrderPlan.getFileList"--> |
| | | <!-- class="value-table"/>--> |
| | | <!-- </div>--> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue"; |
| | | // import ShowInfo from "../do/b1-material-ins-order/showInfo.vue"; |
| | | import file from "@/utils/file"; |
| | | export default { |
| | | components: {onlyoffice}, |
| | | data() { |
| | | return { |
| | | componentData: { |
| | | entity: { |
| | | queryStatus: null, |
| | | code: null, |
| | | typeSource: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: true, |
| | | select: true, |
| | | selectMethod: 'handleChange', |
| | | do: [ |
| | | { |
| | | id: '', |
| | | font: 'æ¥çæ¥å', |
| | | type: 'text', |
| | | method: 'viewIssued', |
| | | }, |
| | | { |
| | | id: 'download', |
| | | font: 'ä¸è½½', |
| | | type: 'text', |
| | | method: 'download' |
| | | }, { |
| | | id: 'handleUpload', |
| | | font: 'ä¸ä¼ ', |
| | | type: 'upload', |
| | | uploadConfig: { |
| | | url: this.$api.insReport.inReport, |
| | | accept: '.docx' |
| | | }, |
| | | method: 'handleUpload', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || userName != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleRestore', |
| | | font: 'è¿å', |
| | | type: 'text', |
| | | method: 'handleRestore', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'sendBackTask', |
| | | font: 'éåä»»å¡', |
| | | type: 'text', |
| | | method: 'sendBackTask', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handle', |
| | | font: 'æäº¤', |
| | | type: 'text', |
| | | method: 'handle', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleIssued', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleIssued', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser |
| | | } |
| | | }, { |
| | | id: 'handleApprove', |
| | | font: 'æ¹å', |
| | | type: 'text', |
| | | method: 'handleApprove', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser |
| | | } |
| | | }, |
| | | { |
| | | id: '', |
| | | font: 'åå§è®°å½', |
| | | type: 'text', |
| | | method: 'viewInspectInfo', |
| | | }, |
| | | { |
| | | id: '', |
| | | font: 'éä»¶ä¸ä¼ ', |
| | | type: 'text', |
| | | method: 'handleFileLook', |
| | | } |
| | | ], |
| | | linkEvent: { |
| | | code: { |
| | | method: 'selectAllByOne' |
| | | } |
| | | }, |
| | | tagField: { |
| | | isRatify: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '䏿¹å' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'æ¹å' |
| | | }] |
| | | }, |
| | | isExamine: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: 'ä¸éè¿' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'éè¿' |
| | | }] |
| | | }, |
| | | state: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: 'å¾
æäº¤' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'å·²æäº¤' |
| | | }] |
| | | }, |
| | | typeSource: { |
| | | select: [{ |
| | | value: 0, |
| | | label: 'æåä¸å', |
| | | type: 'info' |
| | | },{ |
| | | value: 1, |
| | | label: 'åææä¸å', |
| | | type: 'info' |
| | | }] |
| | | }, |
| | | queryStatus: { |
| | | select: [{ |
| | | value: 0, |
| | | label: 'å¾
æäº¤', |
| | | type: 'info' |
| | | },{ |
| | | value: 1, |
| | | label: 'å¾
å®¡æ ¸', |
| | | type: 'info' |
| | | },{ |
| | | value: 2, |
| | | label: 'å¾
æ¹å', |
| | | type: 'info' |
| | | }] |
| | | }, |
| | | orderType: { |
| | | select: [{ |
| | | value: 'Customer-ordered test', |
| | | label: 'å§æè¯éª', |
| | | type: 'success', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'æ½æ£', |
| | | label: 'æ½æ£', |
| | | type: '', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'è¿åæ£éª', |
| | | label: 'è¿åæ£éª', |
| | | type: 'info', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'Quarterly inspection', |
| | | label: 'å£åº¦æ£éª', |
| | | type: 'warning', |
| | | effect: 'plain' |
| | | }] |
| | | } |
| | | }, |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'], |
| | | requiredUp: [] |
| | | }, |
| | | page: { |
| | | current: 1, |
| | | size: 20, |
| | | }, |
| | | total: null, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | statusList: [], |
| | | claimVisible: false, |
| | | issuedVisible: false, |
| | | issuedReasonVisible: false, |
| | | approveVisible: false, |
| | | approveReasonVisible: false, |
| | | fullscreen: false, |
| | | loadingApproveReason: false, |
| | | loadingApprove: false, |
| | | loadingIssuedReason: false, |
| | | loadingIssued: false, |
| | | value: ``, |
| | | reason: '', |
| | | currentInfo: null, |
| | | option:null, |
| | | mutiList:[], |
| | | outLoading:false, |
| | | inLoading:false, |
| | | addApproverDia: false, // æå®å®¡æ¹äººåå¼¹æ¡ |
| | | approver: '', // 审æ¹äººå |
| | | approverId: '', // 审æ¹äººå |
| | | approverList: [], |
| | | addVerifyDia: false, // æå®å®¡æ ¸äººåå¼¹æ¡ |
| | | verifyUser: null, // å®¡æ ¸äººå |
| | | loadingVerify: false, // å®¡æ ¸äººå |
| | | typeSourceList: [ |
| | | {label: 'æåä¸å', value: 0}, |
| | | {label: 'åææä¸å', value: 1}, |
| | | ], |
| | | orderTypeList: [ |
| | | {label: 'å§æè¯éª', value: 'Customer-ordered test'}, |
| | | {label: 'æ½æ£', value: 'æ½æ£'}, |
| | | {label: 'è¿åæ£éª', value: 'è¿åæ£éª'}, |
| | | {label: 'å£åº¦æ£éª', value: 'Quarterly inspection'}, |
| | | ], |
| | | showInfoDialog: false, // 产ä¸é¾ä¿¡æ¯æ¥ç |
| | | isReport: 1, |
| | | activeFace: 0, // 1ï¼ä¸åï¼2ï¼æ¥çï¼3ï¼å®¡æ ¸ï¼é»è®¤ä¸º0 |
| | | customsInspection: {}, |
| | | currentId: null, |
| | | examine: null, |
| | | viewIssuedVisible: false, |
| | | queryStatusList: [ |
| | | {label: 'å¾
æäº¤', value: 0}, |
| | | {label: 'å¾
å®¡æ ¸', value: 1}, |
| | | {label: 'å¾
æ¹å', value: 2}, |
| | | ], |
| | | state: 0, |
| | | orderId: 0, |
| | | inspectorList: [],//æ£éªäººåå表 |
| | | InspectionKey: 1, |
| | | typeSource: null,// 0:æåä¸åï¼1ï¼åææä¸å |
| | | sonLaboratory: '', // è¯éªå®¤ |
| | | filesDialogVisible: false, |
| | | filesLookInfo: {}, |
| | | fileComponentData: { |
| | | entity: { |
| | | insOrderId:'' |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | sort: false, |
| | | init:false, |
| | | do: [ |
| | | { |
| | | id: 'parent', |
| | | font: 'ä¸è½½', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | },{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | } |
| | | ], |
| | | isPage: false, |
| | | linkEvent: {}, |
| | | tagField: { |
| | | type:{ |
| | | select:[ |
| | | { |
| | | value: 1, |
| | | label: 'å¾ç' |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: 'æä»¶' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | currentId: '', |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | isCopper: null, |
| | | tableLoading: false, |
| | | valueTableData: [], |
| | | userName: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.insReport.upAll |
| | | }, |
| | | fileAction() { |
| | | return this.javaApi + this.$api.insOrderPlan.uploadFile |
| | | }, |
| | | fileAction1() { |
| | | return this.javaApi + this.$api.insReport.inReport |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.userName = JSON.parse(localStorage.getItem("user")).name |
| | | this.getPower() |
| | | this.refreshTable() |
| | | }, |
| | | methods: { |
| | | handleChange(arr){ |
| | | this.mutiList = arr |
| | | }, |
| | | // æ¥çæ£éªæ°æ® |
| | | viewInspectInfo (row) { |
| | | //å½åæ£éªä»»å¡çæ£éªäººå表 |
| | | let inspectorList = [] |
| | | if(row.userName){ |
| | | inspectorList = row.userName.split(',') |
| | | } |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | if(user){ |
| | | inspectorList.push(user.name) |
| | | } |
| | | this.inspectorList = inspectorList |
| | | this.state = 3; |
| | | this.typeSource = row.typeSource |
| | | this.orderId = row.insOrderId |
| | | this.sonLaboratory = row.sonLaboratory |
| | | }, |
| | | goback() { |
| | | this.state = 0 |
| | | this.refreshTable('page') |
| | | }, |
| | | handleFileLook (row) { |
| | | this.filesLookInfo = row |
| | | this.filesDialogVisible = true |
| | | this.fileComponentData.entity.insOrderId = row.insOrderId |
| | | this.$nextTick(() => { |
| | | this.$refs['fileList'].selectList() |
| | | }) |
| | | }, |
| | | closeFilesLook () { |
| | | this.filesDialogVisible = false |
| | | }, |
| | | handleSuccessUp(response, ) { |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.$refs.fileList.selectList() |
| | | } |
| | | }, |
| | | handleSuccessUp1(response, ) { |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | } |
| | | }, |
| | | handleDown(row){ |
| | | this.$axios.post(this.$api.insOrderPlan.downFile, { |
| | | id: row.id, |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | let url = ''; |
| | | if(res.data.type==1){ |
| | | url = this.javaApi+'/img/'+res.data.fileUrl |
| | | file.downloadIamge(url,row.fileName) |
| | | }else{ |
| | | url = this.javaApi+'/word/'+res.data.fileUrl |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = row.fileName; |
| | | link.click(); |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | |
| | | }) |
| | | }, |
| | | // å·æ°é¡µé¢ |
| | | refreshView () { |
| | | this.InspectionKey++ |
| | | }, |
| | | // æ¥ç产ä¸é¾ä¿¡æ¯ |
| | | openInfoDialog (row) { |
| | | this.showInfoDialog = true |
| | | this.$nextTick(() => { |
| | | this.$refs.showInfoDialog.getInfo(row.ifsInventoryId) |
| | | }) |
| | | }, |
| | | handleDowns(){ |
| | | if(this.mutiList.length==0){ |
| | | this.$message.error('è¯·éæ©æ¥å') |
| | | return |
| | | } |
| | | let str = this.mutiList.map(m=>m.id).join(',') |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | // const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | | // const url = URL.createObjectURL(blob); |
| | | // const link = document.createElement('a'); |
| | | // link.href = url; |
| | | // link.download = 'æ¥å.zip'; |
| | | // link.click(); |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + res.message; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | }) |
| | | }, |
| | | beforeUpload(file){ |
| | | const isZip = file.type === 'application/zip' || file.name.endsWith('.zip'); |
| | | if (!isZip) { |
| | | this.$message.error('ä¸ä¼ æä»¶åªè½æ¯ ZIP æ ¼å¼!'); |
| | | } |
| | | if(isZip){ |
| | | this.inLoading = true; |
| | | } |
| | | return isZip; |
| | | }, |
| | | fileBeforeUpload(file) { |
| | | let flag = true |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | flag = false |
| | | } |
| | | if (!flag) { |
| | | return Promise.reject(flag); //æ£ç¡®çç»æ¢ |
| | | } |
| | | }, |
| | | fileBeforeUpload1(file) { |
| | | let flag = true |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload1.clearFiles() |
| | | flag = false |
| | | } |
| | | if (!flag) { |
| | | return Promise.reject(flag); //æ£ç¡®çç»æ¢ |
| | | } |
| | | }, |
| | | handleSuccess(response,){ |
| | | this.inLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('导å
¥æå') |
| | | this.refreshTable() |
| | | }else{ |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | onError(err, file, fileList,type) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | onError1(err, file, fileList,type) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload1.clearFiles() |
| | | }, |
| | | refreshTable(e) { |
| | | this.tableLoading = false |
| | | this.$axios.post(this.$api.insReport.pageInsReport, { |
| | | page: this.page, |
| | | entity: this.componentData.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.total = res.data.body.total |
| | | this.valueTableData = res.data.body.records |
| | | }) |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.page.size = val |
| | | this.refreshTable(); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.page.current = val |
| | | this.refreshTable(); |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.refreshTable(); |
| | | }, |
| | | async handleWeave(row) { |
| | | let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //åèvabOnlyOfficeç»ä»¶åæ°é
ç½® |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: true, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | }) |
| | | window.open(href, '_blank'); |
| | | }, |
| | | // æéåé
|
| | | getPower(radio) { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let edit = false |
| | | let up = false |
| | | let res = false |
| | | let sub = false |
| | | let issued = true |
| | | let approve = true |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'upReportFile') { |
| | | edit = true |
| | | } |
| | | if (power[i].menuMethod == 'inReport') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'upReportUrl') { |
| | | res = true |
| | | } |
| | | if (power[i].menuMethod == 'writeReport') { |
| | | sub = true |
| | | } |
| | | if (power[i].menuMethod == 'ratifyReport') { |
| | | approve = true |
| | | } |
| | | if (power[i].menuMethod == 'examineReport') { |
| | | issued = true |
| | | } |
| | | } |
| | | if (!approve) { |
| | | this.componentData.do.splice(6, 1) |
| | | } |
| | | if (!issued) { |
| | | this.componentData.do.splice(5, 1) |
| | | } |
| | | if (!sub) { |
| | | this.componentData.do.splice(4, 1) |
| | | } |
| | | if (!res) { |
| | | this.componentData.do.splice(3, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(2, 1) |
| | | } |
| | | if (!edit) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | }, |
| | | confirmClaim() { |
| | | // console.log(this.$refs.Word.getValue()) |
| | | }, |
| | | playOrder(num) { |
| | | this.activeFace = num |
| | | }, |
| | | async selectAllByOne(row) { |
| | | this.isCopper = row.isCopper |
| | | this.customsInspection = row |
| | | this.activeFace = 2; |
| | | this.examine = 1; |
| | | this.isReport = 1 |
| | | this.currentId = parseInt(row.insOrderId) |
| | | }, |
| | | download(row) { |
| | | let url = row.urlS ? row.urlS : row.url; |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + url; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | }, |
| | | // è¿åæä½ |
| | | handleRestore(row) { |
| | | this.$axios.post(this.$api.insReport.upReportUrl, { |
| | | id: row.id |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | } |
| | | }) |
| | | }, |
| | | // å®¡æ ¸æé® |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | let fileType = "docx" |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | fileName = row.tempUrlPdf |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | this.issuedVisible = true; |
| | | }, |
| | | // æ¥çpdfæ¥å |
| | | viewIssuedPdf(row) { |
| | | this.currentInfo = row; |
| | | let url = row.tempUrlPdf |
| | | if(url){ |
| | | url = url.split('.')[0]+'.pdf' |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + url; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | } |
| | | }, |
| | | // æ¥çæ¥å |
| | | viewIssued(row) { |
| | | this.currentInfo = row; |
| | | let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | let fileType = "docx" |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | fileName = row.tempUrlPdf |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | this.viewIssuedVisible = true; |
| | | }, |
| | | // éåå°ä»»å¡ |
| | | sendBackTask(row) { |
| | | this.$confirm('确认éåå°æ£éªä»»å¡?éååééæ°æäº¤å¤æ ¸', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.upLoad = true |
| | | this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => { |
| | | this.upLoad = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('éåæåï¼') |
| | | this.refreshTable('page') |
| | | }).catch(err => { |
| | | this.upLoad = false |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å®¡æ ¸éè¿ |
| | | submitAddApprover () { |
| | | if (!this.approver) { |
| | | this.$message.error('è¯·éæ©å®¡æ¹äºº') |
| | | return |
| | | } |
| | | this.loadingIssued = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | userId: this.approver, |
| | | isExamine: 1 |
| | | }).then(res => { |
| | | this.loadingIssued = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æäº¤æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.addApproverDia = false |
| | | this.issuedVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('æäº¤å¤±è´¥') |
| | | this.loadingIssued = false; |
| | | }) |
| | | }, |
| | | closeAddApproverDia () { |
| | | this.addApproverDia = false |
| | | this.approver = '' |
| | | }, |
| | | // ç¹å»éè¿ï¼éè¦éæ©æ¹å人å |
| | | subIssued() { |
| | | this.getAuthorizedPerson() |
| | | this.addApproverDia = true |
| | | }, |
| | | // è·å人åå表 |
| | | getAuthorizedPerson() { |
| | | this.$axios.get(this.$api.user.selectQualityUserList).then(res => { |
| | | let data = [] |
| | | let userName = JSON.parse(localStorage.getItem("user")).name; |
| | | res.data.forEach(a => { |
| | | // if(a.name !== userName) { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | // } |
| | | }) |
| | | this.approverList = data |
| | | }) |
| | | }, |
| | | // æ¹åæé® |
| | | handleApprove(row) { |
| | | this.currentInfo = row; |
| | | let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | let fileType = "docx" |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | fileName = row.tempUrlPdf |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | this.approveVisible = true; |
| | | }, |
| | | // æ¹åéè¿ |
| | | subApprove() { |
| | | this.loadingApprove = true; |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | id: this.currentInfo.id, |
| | | isRatify: 1 |
| | | }).then(res => { |
| | | this.loadingApprove = false; |
| | | if (res.code == 201) { |
| | | this.$message.error('æ¹å失败') |
| | | return |
| | | } |
| | | this.$message.success('å·²æ¹å') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.approveVisible = false; |
| | | }) |
| | | }, |
| | | handle (row) { |
| | | this.getAuthorizedPerson() |
| | | this.currentInfo = row; |
| | | this.addVerifyDia = true |
| | | }, |
| | | // æäº¤å®¡æ ¸äººæä½ |
| | | handleSubmit(row) { |
| | | this.loadingVerify = true |
| | | this.$axios.post(this.$api.insReport.writeReport, { |
| | | id: this.currentInfo.id, |
| | | userId: this.verifyUser, |
| | | }).then(res => { |
| | | this.loadingVerify = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.addVerifyDia = false |
| | | this.$message.success('æäº¤æå') |
| | | this.refreshTable('page') |
| | | }).catch(e => { |
| | | this.loadingVerify = false |
| | | this.$message.error('æäº¤å¤±è´¥') |
| | | }) |
| | | }, |
| | | closeAddVerifyDia () { |
| | | this.addVerifyDia = false |
| | | this.verifyUser = '' |
| | | }, |
| | | // å®¡æ ¸ä¸éè¿åå æäº¤ |
| | | handleIssuedReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请è¾å
¥åå ') |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingIssuedReason = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('æä½å¤±è´¥') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | }, |
| | | // 䏿¹ååå æäº¤ |
| | | handleApproveReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请è¾å
¥åå ') |
| | | } |
| | | this.loadingApproveReason = true |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | id: this.currentInfo.id, |
| | | isRatify: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingApproveReason = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.approveVisible = false; |
| | | this.approveReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('æä½å¤±è´¥') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 120px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .full-screen { |
| | | position: absolute; |
| | | right: 52px; |
| | | top: 22px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .fullscreen { |
| | | height: 82vh |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog title="è¿è´§éªè¯åå§è®°å½" :visible.sync="isShow" width="1000px" :show-close="false" :close-on-click-modal="false" |
| | | style="max-height: 96vh; margin-top: 2vh" :modal-append-to-body="false" :close-on-press-escape="false"> |
| | | <el-dialog title="è¿è´§éªè¯åå§è®°å½" :visible.sync="isShow" width="70%" :show-close="false" :close-on-click-modal="false" |
| | | :modal-append-to-body="false" :close-on-press-escape="false"> |
| | | <div class="search"> |
| | | <el-form :inline="true" :model="purchaseForm" label-position="right" :rules="purchaseFormRules" |
| | | ref="purchaseForm" class="form-inline" label-width="130px"> |
| | | ref="purchaseForm" class="form-inline" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ£éªç¼å·:"> |
| | |
| | | </h4> |
| | | <div class="title">ä¸ã便¹äº§åæ£æµæ¥åçåºæ¬ä¿¡æ¯ç¡®è®¤</div> |
| | | <el-form-item label="ææåç§°:" prop="basicName"> |
| | | <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·:" prop="basicModel"> |
| | | <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="æææ¹å·:" prop="basicBatchNo"> |
| | | <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="æ§è¡æ å:" prop="basicStandard"> |
| | | <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'" |
| | | v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="çäº§æ¥æ:" prop="basicDate"> |
| | | <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾è´§æ°é:" prop="basicNumber"> |
| | | <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="ææé¢è²:" prop="basicColor"> |
| | | <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'" v-removeAriaHidden> |
| | | <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | |
| | | <el-table-column prop="inspectionItem" label="éªè¯é¡¹ç®" width="300"></el-table-column> |
| | | <el-table-column prop="result" label="éªè¯ç»æ"> |
| | | <template slot-scope="scope"> |
| | | <el-radio-group v-model="scope.row.result" v-removeAriaHidden :disabled="operationType === 'view'"> |
| | | <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'"> |
| | | <el-radio label="1">符å</el-radio> |
| | | <el-radio label="2">ä¸ç¬¦å</el-radio> |
| | | <el-radio label="3">ä¸éç¨</el-radio> |
| | |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="$emit('resetPurchaseDialog')">å æ¶</el-button> |
| | | <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading" |
| | | v-if="operationType === 'add'">ç¡® |
| | | å®</el-button> |
| | | <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading" v-if="operationType === 'add'">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="å¾
éªè¯é¡¹ç®" :visible.sync="factoryVerifyItemDia" width="1000px" |
| | |
| | | // æ¹æ³éå |
| | | methods: { |
| | | async getInsOrder(operationType, item) { |
| | | console.log('operationType----', operationType) |
| | | this.operationType = operationType |
| | | this.info = item |
| | | // æ¥è¯¢å·²æäº¤çæ°æ® |
| | |
| | | .headLine>>>.el-form-item__content { |
| | | width: 68%; |
| | | } |
| | | |
| | | >>>.el-form-item__content { |
| | | display: inline-block; |
| | | } |
| | |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 700px; |
| | | max-height: 600px; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
| | |
| | | obtainItemParameterList, |
| | | selectTestObjectByName, |
| | | selectStandardMethods, |
| | | addStandardMethodList, |
| | | addStandardTree, |
| | | updateStandardTree, |
| | | selectsStandardMethodByFLSSM, |
| | | upStandardProductList, |
| | | delStandardMethodByFLSSM, |
| | | delStandardProductByIds, |
| | | addStandardProduct, |
| | | selectStandardProductListByMethodId, |
| | | updateSection, |
| | | upStandardProducts, |
| | |
| | | this.selectTestObjectByName(); |
| | | this.selectStandardMethods(); |
| | | this.selectEnumByCategoryForSonLaboratory(); |
| | | this.selectEnumByCategoryForsampleType(); |
| | | this.getStandardTemplate(); |
| | | this.selectStandardMethodsSec(); |
| | | this.token = { |
| | |
| | | this.standardEnum = data; |
| | | }); |
| | | }, |
| | | addStandardMethodList() { |
| | | if (this.standardId == null || this.standardId == "") { |
| | | this.$message.error("æ åæ¹æ³æªéæ©"); |
| | | return; |
| | | } |
| | | this.addLoad2 = true; |
| | | addStandardMethodList({ |
| | | standardId: this.standardId, |
| | | tree: this.selectTree, |
| | | }).then((res) => { |
| | | this.addLoad2 = false; |
| | | this.addStandardDia = false; |
| | | this.$message.success("æ·»å æå"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | }, |
| | | // æäº¤å类添å |
| | | addStandardTree() { |
| | | if (this.addOb.sampleType == null || this.addOb.sampleType == "") { |
| | |
| | | this.$message.success("å·²ä¿å"); |
| | | }); |
| | | }, |
| | | delStandardMethodByFLSSM(id) { |
| | | this.$confirm("æ¯å¦å é¤å½åæ°æ®?", "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | this.tableLoad = true; |
| | | delStandardMethodByFLSSM({ id: id }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("å·²å é¤"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | }) |
| | | .catch(() => { }); |
| | | }, |
| | | handleSelectionChange(val) { |
| | | this.selects = []; |
| | | val.forEach((a) => { |
| | | this.selects.push(a.id); |
| | | }); |
| | | }, |
| | | delStandardProductByIds() { |
| | | if (this.selects.length == 0) { |
| | | this.$message.error("æªé䏿°æ®"); |
| | | return; |
| | | } |
| | | this.$confirm( |
| | | "æ¯å¦å é¤å½åéä¸ " + this.selects.length + " æ¡æ°æ®?", |
| | | "è¦å", |
| | | { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | } |
| | | ) |
| | | .then(() => { |
| | | this.tableLoad = true; |
| | | delStandardProductByIds({ |
| | | ids: JSON.stringify(this.selects), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("å·²å é¤"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | }) |
| | | .catch(() => { }); |
| | | }, |
| | | addStandardProductDo() { |
| | | let selects = this.$refs.ValueTable.multipleSelection; |
| | | if (selects.length == 0) { |
| | | this.$message.error("æªéæ©æ°æ®"); |
| | | return; |
| | | } |
| | | let select = []; |
| | | selects.forEach((a) => { |
| | | select.push(a.id); |
| | | }); |
| | | this.tableLoad = true; |
| | | addStandardProduct({ |
| | | ids: JSON.stringify(select), |
| | | tree: this.selectTree, |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("æ·»å æå"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | this.addProductDia = false; |
| | | }, |
| | | |
| | | refreshList() { |
| | | this.batchCopyDia = false; |
| | | const index = this.standardList.findIndex( |