From 5b7f94597f3216dcbbab69bb592783561fcc150c Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期四, 26 十二月 2024 14:33:03 +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 | 2
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,806 insertions(+), 1 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 51638df..b2a35c8 100644
--- a/src/main.js
+++ b/src/main.js
@@ -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