From 6ee5d79ae594475d762f74749f756c5ae6349e21 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 19 十二月 2024 14:04:37 +0800 Subject: [PATCH] 内审管理迁移 --- src/components/do/a8-internal-audit-management/ViewTestRecord.vue | 190 ++ src/components/do/a8-internal-audit-management/auditMeetingSignDia.vue | 199 +++ src/components/do/a8-internal-audit-management/auditInspectionDia.vue | 247 +++ src/components/view/a8-internal-audit-management.vue | 56 src/components/do/a8-internal-audit-management/auditInspection.vue | 269 ++++ src/components/do/a8-internal-audit-management/yearPlan.vue | 330 +++++ src/components/do/a8-internal-audit-management/implementPlanDia.vue | 351 +++++ src/components/do/a8-internal-audit-management/auditReport.vue | 328 +++++ src/components/do/a8-internal-audit-management/correctiveActionDIa.vue | 423 ++++++ src/components/do/a8-internal-audit-management/auditReportDia.vue | 354 +++++ src/main.js | 6 src/components/do/a8-internal-audit-management/auditMeetingSign.vue | 217 +++ src/components/do/a8-internal-audit-management/implementationPlan.vue | 307 ++++ src/components/do/a8-internal-audit-management/correctiveAction.vue | 198 +++ src/components/do/a8-internal-audit-management/yearPlanDia.vue | 336 +++++ 15 files changed, 3,808 insertions(+), 3 deletions(-) diff --git a/src/components/do/a8-internal-audit-management/ViewTestRecord.vue b/src/components/do/a8-internal-audit-management/ViewTestRecord.vue new file mode 100644 index 0000000..7f63a11 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/ViewTestRecord.vue @@ -0,0 +1,190 @@ +<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="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> + <ZTTable + ref="yearTable" + :column="columnData" + :height="'calc(100vh - 30em)'" + :highlightCurrentRow="true" + :table-data="tableData" + :table-loading="tableLoading" + style="margin-top: 0.5em;"> + </ZTTable> + </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 ZTTable from '../../caorui/ZTTable/index.vue'; +import file from "../../../util/file"; +import filePreview from '../../tool/file-preview.vue'; + +export default { + name: 'ViewTestRecord', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { filePreview, ZTTable }, + 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, + }; + }, + // 鏂规硶闆嗗悎 + methods: { + openDia(row) { + this.filesDialogVisible = true + this.info = row + this.searchTableList() + }, + // 鏌ヨ闄勪欢鍒楄〃 + searchTableList () { + this.tableLoading = true + this.$axios.get(this.$api.internalCorrect.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 + file.downloadIamge(url,row.fileName) + }else{ + url = this.javaApi+'/word/'+row.fileUrl + const link = document.createElement('a'); + link.href = url; + link.download = row.fileName; + link.click(); + } + }, + // 鍒犻櫎 + delete (row) { + this.tableLoading = true + this.$axios.get(this.$api.internalCorrect.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); //姝g‘鐨勭粓姝� + } + }, + 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() + } + }, + }, + computed: { + headers() { + return { + 'token': sessionStorage.getItem('token') + } + }, + fileAction() { + return this.javaApi + this.$api.internalCorrect.uploadInternalCorrectFile + + } + }, +}; +</script> + +<style scoped> +</style> diff --git a/src/components/do/a8-internal-audit-management/auditInspection.vue b/src/components/do/a8-internal-audit-management/auditInspection.vue new file mode 100644 index 0000000..854f355 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditInspection.vue @@ -0,0 +1,269 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </div> + <audit-inspection-dia v-if="auditInspectionDia" ref="auditInspectionDia" @closeImplementDia="closeImplementDia"></audit-inspection-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import AuditInspectionDia from './auditInspectionDia.vue'; + +export default { + name: 'auditInspection', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { AuditInspectionDia, ZTTable }, + 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 + this.$axios.post(this.$api.internalCheck.pageInternalCheck, {entity, page}, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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 + this.$axios.get(this.$api.internalCheck.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) { + this.$axios.get(this.$api.internalCheck.exportInternalCheck + '?checkId=' + row.checkId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭妫�鏌�' + '.docx'; + link.click(); + }) + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/auditInspectionDia.vue b/src/components/do/a8-internal-audit-management/auditInspectionDia.vue new file mode 100644 index 0000000..5bcb26f --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditInspectionDia.vue @@ -0,0 +1,247 @@ +<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-input v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable size="small"></el-input> --> + <el-date-picker + v-model="form.reviewDate" + 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> +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: '璇峰~鍐欓儴闂ㄨ礋璐d汉',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 + this.$axios(this.$api.internalCheck.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') { + this.$axios.post(this.$api.internalCheck.addInternalCheck, internalCheckDto, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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') { + this.$axios.post(this.$api.internalCheck.updateInternalCheck, internalCheckDto, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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 : '' + this.$axios.post(this.$api.internalCheck.ratifyInternalCheck, internalCheckDto, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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> diff --git a/src/components/do/a8-internal-audit-management/auditMeetingSign.vue b/src/components/do/a8-internal-audit-management/auditMeetingSign.vue new file mode 100644 index 0000000..1b882d0 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditMeetingSign.vue @@ -0,0 +1,217 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </div> + <audit-meeting-sign-dia v-if="auditMeetingSignDia" ref="auditMeetingSignDia" @closeYearDia="closeYearDia"></audit-meeting-sign-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import AuditMeetingSignDia from './auditMeetingSignDia.vue'; + +export default { + name: 'auditMeetingSign', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { AuditMeetingSignDia, ZTTable }, + 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 + this.$axios.post(this.$api.internalMeeting.pageInternalMeeting, {entity, page}, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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 + this.$axios.get(this.$api.internalMeeting.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) { + this.$axios.get(this.$api.internalMeeting.exportInternalMeeting + '?meetingId=' + row.meetingId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭浼氳绛惧埌' + '.docx'; + link.click(); + }) + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/auditMeetingSignDia.vue b/src/components/do/a8-internal-audit-management/auditMeetingSignDia.vue new file mode 100644 index 0000000..8f4816e --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditMeetingSignDia.vue @@ -0,0 +1,199 @@ +<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-input v-model="form.meetingDate" clearable size="small"></el-input> --> + <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> +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 + this.$axios(this.$api.internalMeeting.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') { + this.$axios.post(this.$api.internalMeeting.addInternalMeeting, internalMeeting, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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') { + this.$axios.post(this.$api.internalMeeting.updateInternalMeeting, internalMeeting, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.personList = data + }) + }, + } +}; +</script> + +<style scoped> +.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> diff --git a/src/components/do/a8-internal-audit-management/auditReport.vue b/src/components/do/a8-internal-audit-management/auditReport.vue new file mode 100644 index 0000000..0a1d66e --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditReport.vue @@ -0,0 +1,328 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </div> + <audit-report-dia v-if="auditReportDia" ref="auditReportDia" @closeImplementDia="closeImplementDia"></audit-report-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import AuditReportDia from './auditReportDia.vue'; + +export default { + name: 'auditReport', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { AuditReportDia, ZTTable }, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + searchForm: { + purposes: '', + }, + tableColumn: [ + { + label: '瀹℃牳鐩殑', + prop: 'purposes', + }, + { + label: '瀹℃牳渚濇嵁', + prop: 'basis', + }, + { + label: '瀹℃牳鏃ユ湡', + prop: 'reviewDate', + }, + { + label: '瀹℃牳鏂规硶', + prop: 'method', + }, + { + label: '瀹℃牳鑼冨洿', + prop: 'scope', + }, + { + label: '瀹℃牳璐d换鑰�', + 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 + this.$axios.post(this.$api.internalReport.pageInternalReport, {entity, page}, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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 + this.$axios.get(this.$api.internalReport.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) { + this.$axios.get(this.$api.internalReport.exportInternalReport + '?reportId=' + row.reportId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭鎶ュ憡' + '.docx'; + link.click(); + }) + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/auditReportDia.vue b/src/components/do/a8-internal-audit-management/auditReportDia.vue new file mode 100644 index 0000000..528058b --- /dev/null +++ b/src/components/do/a8-internal-audit-management/auditReportDia.vue @@ -0,0 +1,354 @@ +<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-input v-model="form.reviewDate" :disabled="operationType === 'examine' || operationType === 'ratify'" clearable size="small"></el-input> --> + <el-date-picker + v-model="form.reviewDate" :disabled="operationType === 'examine' || operationType === 'ratify'" clearable 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="瀹℃牳璐d换鑰�" 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="棰勮鍙楀鏍搁儴闂ㄥ畬鎴愮籂姝f帾鏂芥墍闇�鏃堕棿" 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> +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: 'blur'}], + 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 + this.$axios(this.$api.internalReport.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') { + this.$axios.post(this.$api.internalReport.addInternalReport, internalReport, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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') { + this.$axios.post(this.$api.internalReport.updateInternalReport, internalReport, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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 + this.$axios.post(this.$api.internalReport.examineInternalReport, internalReport, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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 + this.$axios.post(this.$api.internalReport.qualityInternalReport, internalReport, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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: 40em; + overflow-y: auto; +} +>>> .is-required { + margin-bottom: 6px; +} +</style> diff --git a/src/components/do/a8-internal-audit-management/correctiveAction.vue b/src/components/do/a8-internal-audit-management/correctiveAction.vue new file mode 100644 index 0000000..9eda340 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/correctiveAction.vue @@ -0,0 +1,198 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </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 '../../caorui/TableCard/index.vue'; +import ZTTable from '../../caorui/ZTTable/index.vue'; +import CorrectiveActionDIa from './correctiveActionDIa.vue'; +import ViewTestRecord from './ViewTestRecord.vue'; + +export default { + name: 'correctiveAction', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { CorrectiveActionDIa, ZTTable, 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 + this.$axios.post(this.$api.internalCorrect.pageInternalCorrect, { entity, page }, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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) { + this.$axios.get(this.$api.internalCorrect.exportInternalCorrect + '?correctId=' + row.correctId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭绾犳鎺柦' + '.docx'; + link.click(); + }) + }, + closeRectifyDia () { + this.correctiveActionDIa = false + this.searchList() + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/correctiveActionDIa.vue b/src/components/do/a8-internal-audit-management/correctiveActionDIa.vue new file mode 100644 index 0000000..4786191 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/correctiveActionDIa.vue @@ -0,0 +1,423 @@ +<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>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 0" class="td-info" colspan="3"> + <el-select v-model="form.causeUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>鎻愬嚭浜猴細</p> + </td> + <td class="td-info"> + {{form.raiseUserName}} + </td> + <td class="td-title"> + <p>鎻愬嚭閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.raiseDepartment}} + </td> + </tr> + <tr v-if="showStep === 0 && currentStep !== 0"> + <td class="td-title"> + <p>鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.raiseTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td class="td-title"> + <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.causeResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.causeResult }}</span> + </td> + </tr> + <tr v-if="showStep === 1 && currentStep !== 1"> + <td class="td-title"> + <p>鍘熷洜鍒嗘瀽浜猴細</p> + </td> + <td class="td-info"> + {{form.causeUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.causeDepartment}} + </td> + </tr> + <tr v-if="showStep === 1 && currentStep !== 1"> + <td class="td-title"> + <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.causeTime}} + </td> + </tr> + <tr v-if="showStep === 1"> + <td v-if="currentStep === 1" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 1" class="td-info" colspan="3"> + <el-select v-model="form.correctUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p><span class="required-span">* </span>绾犳鎺柦锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctResult }}</span> + </td> + </tr> + <tr v-if="showStep === 2"> + <td class="td-title"> + <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.raiseDepartmentAffirm" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span> + </td> + </tr> + <tr v-if="showStep === 2 && currentStep !== 2"> + <td class="td-title"> + <p>绾犳浜猴細</p> + </td> + <td class="td-info"> + {{form.correctUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.correctDepartment}} + </td> + </tr> + <tr v-if="showStep === 2 && currentStep !== 2"> + <td class="td-title"> + <p>绾犳鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.correctTime}} + </td> + </tr> + <tr v-if="showStep === 2"> + <td v-if="currentStep === 2" class="td-title"> + <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p> + </td> + <td v-if="currentStep === 2" class="td-info" colspan="3"> + <el-select v-model="form.validationUserId" clearable filterable + placeholder="璇烽�夋嫨" size="small"> + <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </td> + </tr> + <tr v-if="showStep === 3"> + <td class="td-title"> + <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p> + </td> + <td class="td-info" colspan="3"> + <el-input v-if="showStep === 3 && currentStep === 3" v-model="form.validationResult" + :rows="5" + placeholder="璇疯緭鍏ュ唴瀹�" + size="small" + type="textarea"> + </el-input> + <span v-if="showStep === 3 && currentStep !== 3" class="td-info1"> {{ form.validationResult }}</span> + </td> + </tr> + <tr v-if="showStep === 3 && currentStep !== 3"> + <td class="td-title"> + <p>楠岃瘉浜猴細</p> + </td> + <td class="td-info"> + {{form.validationUserName}} + </td> + <td class="td-title"> + <p>璐d换閮ㄩ棬锛�</p> + </td> + <td class="td-info"> + {{form.validationDepartment}} + </td> + </tr> + <tr v-if="showStep === 3 && currentStep !== 3"> + <td class="td-title"> + <p>楠岃瘉鏃ユ湡锛�</p> + </td> + <td class="td-info" colspan="3"> + {{form.validationTime}} + </td> + </tr> + </table> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeRectifyDia">鍙� 娑�</el-button> + <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +export default { + name: '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 + this.$axios.get(this.$api.internalCorrect.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('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 1) { + if (!this.form.causeResult) { + this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�') + return + } + if (!this.form.correctUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 2) { + if (!this.form.correctResult) { + this.$message.warning('璇峰~鍐欑籂姝f帾鏂�') + return + } + if (!this.form.validationUserId) { + this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉') + return + } + } else if (this.currentStep === 3) { + if (!this.form.validationResult) { + this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�') + return + } + } + this.editLoad = true + this.form.supervisedTime = '' + this.form.flowType = this.currentStep + this.$axios.post(this.$api.internalCorrect.addInternalCorrect, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.editLoad = false + if (res.code === 201) return + this.$message.success('鎻愪氦鎴愬姛') + this.closeRectifyDia() + }).catch(err => { + console.log('err---', err); + this.editLoad = false + }) + }, + // 鍏抽棴寮规 + closeRectifyDia () { + this.formDia = false + this.$emit('closeRectifyDia') + }, + setStep (step) { + this.showStep = step + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.personList = data + }) + }, + getSupervisedUserList () { + this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.supervisedUserList = data + }) + }, + } +}; +</script> + +<style scoped> +>>>.el-dialog { + margin: 10vh auto 50px !important; +} +.tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; +} +.td-title { + height: 40px; + width: 170px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + padding: 6px; +} +.td-info { + padding: 6px; +} +.td-info1 { + display: inline-block; + width: 100%; + text-align: left; + font-size: 14px; + word-wrap: break-word; + white-space: normal; +} +</style> diff --git a/src/components/do/a8-internal-audit-management/implementPlanDia.vue b/src/components/do/a8-internal-audit-management/implementPlanDia.vue new file mode 100644 index 0000000..2b9efdc --- /dev/null +++ b/src/components/do/a8-internal-audit-management/implementPlanDia.vue @@ -0,0 +1,351 @@ +<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"/> --> + <el-date-picker + v-model="row.implement" + :disabled="operationType === 'ratify'" + 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> + </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="璐d换浜�" 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> +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 + this.$axios(this.$api.internalImplement.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') { + this.$axios.post(this.$api.internalImplement.addInternalImplement, internalImplementDto, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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') { + this.$axios.post(this.$api.internalImplement.updateInternalImplement, internalImplementDto, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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 : '' + this.$axios.post(this.$api.internalImplement.ratifyInternalImplement, internalImplementDto, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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> diff --git a/src/components/do/a8-internal-audit-management/implementationPlan.vue b/src/components/do/a8-internal-audit-management/implementationPlan.vue new file mode 100644 index 0000000..5f89ede --- /dev/null +++ b/src/components/do/a8-internal-audit-management/implementationPlan.vue @@ -0,0 +1,307 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </div> + <implement-plan-dia v-if="implementPlanDia" ref="implementPlanDia" @closeImplementDia="closeImplementDia"></implement-plan-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import ImplementPlanDia from './implementPlanDia.vue'; + +export default { + name: 'implementationPlan', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { ImplementPlanDia, ZTTable }, + 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 + this.$axios.post(this.$api.internalImplement.pageInternalImplement, {entity, page}, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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 + this.$axios.get(this.$api.internalImplement.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) { + this.$axios.get(this.$api.internalImplement.exportInternalImplement + '?implementId=' + row.implementId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭瀹炴柦璁″垝' + '.docx'; + link.click(); + }) + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/yearPlan.vue b/src/components/do/a8-internal-audit-management/yearPlan.vue new file mode 100644 index 0000000..bd720b5 --- /dev/null +++ b/src/components/do/a8-internal-audit-management/yearPlan.vue @@ -0,0 +1,330 @@ +<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"> + <ZTTable + :column="tableColumn" + :height="'calc(100vh - 20em)'" + :table-data="tableData" + :table-loading="tableLoading" + style="padding: 0 10px;margin-bottom: 16px"> + </ZTTable> + <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" + :total="total" layout="->,total, sizes, prev, pager, next, jumper" + @size-change="handleSizeChange" + @current-change="handleCurrentChange"> + </el-pagination> + </div> + <year-plan-dia v-if="yearPlanDia" ref="yearPlanDia" @closeYearDia="closeYearDia"></year-plan-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import YearPlanDia from './yearPlanDia.vue'; + +export default { + name: 'yearPlan', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { YearPlanDia, ZTTable }, + 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 + this.$axios.post(this.$api.internalPlan.pageInternalPlan, {entity, page}, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + this.tableLoading = false + if (res.code === 201) return + this.tableData = res.data.records + this.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 + this.$axios.get(this.$api.internalPlan.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) { + this.$axios.get(this.$api.internalPlan.exportInternalPlan + '?planId=' + row.planId,{responseType: "blob"}).then(res => { + this.outLoading = false + this.$message.success('瀵煎嚭鎴愬姛') + const blob = new Blob([res],{ type: 'application/msword' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '鍐呭骞村害璁″垝' + '.docx'; + link.click(); + }) + }, + closeYearDia () { + this.yearPlanDia = false + this.searchList() + }, + // 閲嶇疆鏌ヨ鏉′欢 + resetSearchForm () { + this.searchForm.purpose = ''; + this.searchList() + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + 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> diff --git a/src/components/do/a8-internal-audit-management/yearPlanDia.vue b/src/components/do/a8-internal-audit-management/yearPlanDia.vue new file mode 100644 index 0000000..93b4fbb --- /dev/null +++ b/src/components/do/a8-internal-audit-management/yearPlanDia.vue @@ -0,0 +1,336 @@ +<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> +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 + this.$axios(this.$api.internalPlan.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') { + this.$axios.post(this.$api.internalPlan.addInternalPlan, internalPlan, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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') { + this.$axios.post(this.$api.internalPlan.updateInternalPlan, internalPlan, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).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 + this.$axios.post(this.$api.internalPlan.examineInternalPlan, internalReport, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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 + this.$axios.post(this.$api.internalPlan.ratifyInternalPlan, internalReport, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + }).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: 38em; + 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> diff --git a/src/components/view/a8-internal-audit-management.vue b/src/components/view/a8-internal-audit-management.vue new file mode 100644 index 0000000..6ed3316 --- /dev/null +++ b/src/components/view/a8-internal-audit-management.vue @@ -0,0 +1,56 @@ +<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 '../do/a8-internal-audit-management/yearPlan.vue'; +import implementationPlan from '../do/a8-internal-audit-management/implementationPlan.vue'; +import AuditInspection from '../do/a8-internal-audit-management/auditInspection.vue'; +import AuditReport from '../do/a8-internal-audit-management/auditReport.vue'; +import AuditMeetingSign from '../do/a8-internal-audit-management/auditMeetingSign.vue'; +import CorrectiveAction from '../do/a8-internal-audit-management/correctiveAction.vue'; + +export default { + name: 'a8-internal-audit-management', + // 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> diff --git a/src/main.js b/src/main.js index 0d347c7..a46b9eb 100644 --- a/src/main.js +++ b/src/main.js @@ -24,8 +24,8 @@ // const javaApi = 'http://172.20.10.5:8001'; //閫氫俊娴嬭瘯搴� -Vue.prototype.LOCATIONVUE = "http://10.1.13.77:8080"; -const javaApi = 'http://10.1.13.77:8001'; +// Vue.prototype.LOCATIONVUE = "http://10.1.13.77:8080"; +// const javaApi = 'http://10.1.13.77:8001'; // 閫氫俊姝e紡搴� // Vue.prototype.LOCATIONVUE = "https://ztwxlims.ztt.cn:7443"; @@ -33,7 +33,7 @@ //浜� // Vue.prototype.LOCATIONVUE = "http://114.132.189.42:8080"; -// const javaApi = 'http://10.1.13.77/:1234'; +const javaApi = 'http://114.132.189.42:1234'; // //妫�娴嬩腑蹇冩寮忓簱 // Vue.prototype.LOCATIONVUE = "http://10.1.200.86:8080"; -- Gitblit v1.9.3