From 36a30a262c16b6c37be7d1817c46d6693a324cc4 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 19 十二月 2024 13:15:57 +0800 Subject: [PATCH] 完成管理评审搬迁 --- src/components/do/a9-management-review/managementReviewPlan.vue | 325 ++++++++++++ src/components/view/a9-management-review.vue | 47 + src/components/do/a9-management-review/meetingRecordsDia.vue | 173 ++++++ src/components/do/a9-management-review/managementFormDIa.vue | 263 +++++++++ src/components/do/a9-management-review/reviewReportDia.vue | 280 ++++++++++ src/components/do/a9-management-review/meetingRecords.vue | 207 +++++++ src/components/do/a9-management-review/reviewReport.vue | 279 ++++++++++ 7 files changed, 1,574 insertions(+), 0 deletions(-) diff --git a/src/components/do/a9-management-review/managementFormDIa.vue b/src/components/do/a9-management-review/managementFormDIa.vue new file mode 100644 index 0000000..7607018 --- /dev/null +++ b/src/components/do/a9-management-review/managementFormDIa.vue @@ -0,0 +1,263 @@ +<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="right" label-width="auto" style="height: 75vh;overflow-y: auto;overflow-x: hidden;"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璇勫鏃堕棿" prop="reviewTime"> + <el-date-picker + v-model="form.reviewTime" + :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> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璇勫鍦扮偣" prop="judgingLocation"> + <el-input v-model="form.judgingLocation" :disabled="operationType === 'ratify'" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫鐩殑" prop="judgingPurpose"> + <el-input v-model="form.judgingPurpose" :disabled="operationType === 'ratify'" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫鏂瑰紡" prop="judgingMethod"> + <el-input v-model="form.judgingMethod" :disabled="operationType === 'ratify'" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鍙傚姞浜哄憳" prop="participants"> + <!-- <el-input v-model="form.participants" :disabled="operationType === 'ratify'" clearable size="small"></el-input> --> + <el-select v-model="form.participants" size="small" style="width: 100%;" filterable :disabled="operationType === 'ratify'" clearable multiple > + <el-option + v-for="item in personList" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫鑼冨洿" prop="judgingScope"> + <el-input v-model="form.judgingScope" :disabled="operationType === 'ratify'" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫渚濇嵁" prop="judgingBasis"> + <el-input v-model="form.judgingBasis" + :disabled="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="mainContext"> + <el-input v-model="form.mainContext" + :disabled="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="preparationRequirements"> + <el-input v-model="form.preparationRequirements" + :disabled="operationType === 'ratify'" + :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 @click="closeImplementDia">鍙� 娑�</el-button> + <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵� 鍑�</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="qualityRemark" type="textarea"></el-input> + </span> + <span slot="footer" class="dialog-footer"> + <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button> + <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import { dateFormat } from '../../../util/date' +export default { + name: 'managementFormDIa', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + diaLoading: false, + loading: false, + form: { + id: '', + reviewTime: '', + judgingLocation: '', + judgingPurpose: '', + judgingMethod: '', + participants: [], + judgingScope: '', + judgingBasis: '', + mainContext: '', + preparationRequirements: '', + }, + rules: { + reviewTime: [{required: true, message: '璇烽�夋嫨璇勫鏃堕棿',trigger: 'blur'}], + judgingLocation: [{required: true, message: '璇峰~鍐欒瘎瀹″湴鐐�',trigger: 'blur'}], + judgingPurpose: [{required: true, message: '璇峰~鍐欒瘎瀹$洰鐨�',trigger: 'blur'}], + judgingMethod: [{required: true, message: '璇峰~鍐欒瘎瀹℃柟寮�',trigger: 'blur'}], + participants: [{required: true, message: '璇峰~鍐欏弬鍔犱汉鍛�',trigger: 'change'}], + judgingScope: [{required: true, message: '璇峰~鍐欒瘎瀹¤寖鍥�',trigger: 'blur'}], + judgingBasis: [{required: true, message: '璇峰~鍐欒瘎瀹′緷鎹�',trigger: 'blur'}], + mainContext: [{required: true, message: '璇峰~鍐欒瘎瀹′富瑕佸唴瀹�',trigger: 'blur'}], + preparationRequirements: [{required: true, message: '璇峰~鍐欏噯澶囧伐浣滆姹�',trigger: 'blur'}], + }, + operationType: '', + approvalDialog: false, + approvalLoading: false, + qualityRemark: '', + personList:[], + }; + }, + mounted() { + this.getAuthorizedPerson() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鎵撳紑寮规 + openDia (type, row) { + this.formDia = true + this.operationType = type + if (type !== 'add') { + this.form = row + this.form.participants = row.participants ? row.participants.split(',').map(m=>Number(m)) : [] + } + }, + // 鏌ヨ璇︽儏 + // 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) + internalReport.participants = internalReport.participants.join(',') + if (this.operationType === 'add') { + this.$axios.post(this.$api.manageReviewProgram.addReviewProgram, 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.put(this.$api.manageReviewProgram.modifyReviewProgram, 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; + } + }); + }, + // 鎻愪氦鎵瑰噯淇℃伅 + handleApproval (qualityStatus) { + this.approvalLoading = true + const internalReport = this.HaveJson(this.form) + internalReport.approve = JSON.parse(localStorage.getItem("user")).name + internalReport.approveDate = dateFormat(new Date()) + internalReport.participants = internalReport.participants.join(',') + this.$axios.put(this.$api.manageReviewProgram.modifyReviewProgram, 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') + }, + 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> +>>>.el-dialog { + margin: 6vh auto 50px !important; +} +</style> diff --git a/src/components/do/a9-management-review/managementReviewPlan.vue b/src/components/do/a9-management-review/managementReviewPlan.vue new file mode 100644 index 0000000..e30d32b --- /dev/null +++ b/src/components/do/a9-management-review/managementReviewPlan.vue @@ -0,0 +1,325 @@ +<template> + <div> + <div class="search-background"> + <span class="search-group"> + <span style="width: 160px">璇勫鍦扮偣锛�</span> + <el-input v-model="searchForm.judgingLocation" 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> + <management-form-d-ia v-if="managementFormDIa" ref="managementFormDIa" @closeImplementDia="closeImplementDia"></management-form-d-ia> + <el-dialog :visible.sync="listDialogVisible" top="15vh" + title="鏂囦欢鏌ョ湅" + width="400px"> + <div style="max-height:60vh;overflow-y: auto;"> + <p v-for="(item,index) in fileList" :key="index"> + <span>{{ item.fileName }}</span> + <el-button size="small" type="text" icon="el-icon-view" @click="lookFile(item.url,item.fileName)" style="margin-left: 20px;">棰勮</el-button> + <el-button size="small" type="text" icon="el-icon-bottom" @click="handleDown0(item.url,item.fileName)" style="margin-left: 20px;">涓嬭浇</el-button> + </p> + </div> + </el-dialog> + <el-dialog + title="鏌ョ湅闄勪欢" + :visible.sync="lookDialogVisible" + width="800px" top="5vh" fullscreen> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.url" + :currentFile="{}" style="height: 90vh;overflow-y: auto;"/> + </el-dialog> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import ManagementFormDIa from './managementFormDIa.vue'; +import filePreview from '../../tool/file-preview.vue' + +export default { + name: 'managementReviewPlan', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { ManagementFormDIa, ZTTable,filePreview }, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + searchForm: { + judgingLocation: '', + }, + listDialogVisible:false, + lookDialogVisible:false, + fileList:[], + currentInfo:{}, + tableColumn: [ + { + label: '璇勫鏃堕棿', + prop: 'reviewTime', + }, + { + label: '璇勫鍦扮偣', + prop: 'judgingLocation', + }, + { + label: '璇勫鐩殑', + prop: 'judgingPurpose', + }, + { + label: '璇勫鏂瑰紡', + prop: 'judgingMethod', + }, + { + label: '璇勫鑼冨洿', + prop: 'judgingScope', + }, + // { + // dataType: 'tag', + // label: '鎵瑰噯鐘舵��', + // prop: 'approve', + // 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; + // } + // } + // }, + { + dataType: 'action', + minWidth: '110', + label: '鎿嶄綔', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.openFormDia('edit', row); + }, + disabled: (row) => { + return !!row.approve + }, + }, + { + name: '涓婁紶', + type: 'upload', + multiple:true, + limit:20, + accept:'.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.pdf', + clickFun: async (row,file, fileList) => { + const formData = new FormData(); + formData.append('file',file.raw); // 鏂囦欢瀛楁 + formData.append('id', row.id); // 鏂囦欢鍚嶅瓧娈� + let res = await this.$axios.post(this.$api.manageReviewProgram.addReviewProgramFile, formData,{ + headers: { + 'Content-Type': 'multipart/form-data;' + }, + noQs: true + }) + if(res.code==200){ + this.$message({ message: '涓婁紶鎴愬姛', type: 'success' }); + // this.searchList() + return + }else{ + this.$message({ message: '涓婁紶澶辫触', type: 'error' }); + return + } + }, + disabled: (row) => { + return !!row.approve + }, + }, + { + name: '鏌ョ湅闄勪欢', + type: 'text', + clickFun: (row) => { + this.$axios.get(this.$api.manageReviewProgram.selectReviewProgramFile + '?id='+row.id).then(res => { + this.listDialogVisible = true; + this.fileList = res.data.fileList + }); + }, + }, + { + name: '鎵瑰噯', + type: 'text', + clickFun: (row) => { + this.openFormDia('ratify', row); + }, + disabled: (row) => { + return !!row.approve + }, + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delPlan(row) + }, + disabled: (row) => { + if (row.qualityStatus === 1) { + return true + } else { + return false + } + }, + }, + { + name: '涓嬭浇', + type: 'text', + clickFun: (row) => { + this.handleDown(row) + } + }, + ] + } + ], + tableData: [], + tableLoading: false, + page: { + size: 20, + current: 1, + }, + total: 0, + managementFormDIa: false, + }; + }, + mounted() { + this.searchList() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鏌ヨ鍒楄〃 + searchList () { + this.tableLoading = true + this.$axios.get(this.$api.manageReviewProgram.getPageReviewProgram + '?judgingLocation=' + this.searchForm.judgingLocation + '&pages=' + this.page.current + '&size=' + this.page.size).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. managementFormDIa = true + this.$nextTick(() => { + this.$refs. managementFormDIa.openDia(type, row) + }) + }, + closeImplementDia () { + this. managementFormDIa = false + this.searchList() + }, + // 閲嶇疆鏌ヨ鏉′欢 + resetSearchForm () { + this.searchForm.judgingLocation = ''; + this.searchList() + }, + // 鍒犻櫎 + delPlan (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.tableLoading = true + this.$axios.delete(this.$api.manageReviewProgram.deleteReviewProgram + '?id=' + row.id).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: '宸插彇娑堝垹闄�' + }); + }); + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + this.searchList(); + }, + handleDown(row){ + this.$axios.post(this.$api.manageReviewProgram.exportReviewProgram,{id:row.id},{responseType: "blob"}).then(res => { + if(res.code == 201){ + this.$message.error(res.message) + return + } + this.$message.success('涓嬭浇鎴愬姛') + const blob = new Blob([res],{ type: 'application/octet-stream' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '璇勫璁″垝.docx'; + link.click(); + }) + }, + lookFile(url,name){ + this.currentInfo.url = url + this.currentInfo.name = name + this.lookDialogVisible = true + }, + handleDown0(url,name){ + if(!url) return this.$message.warning('鏂囦欢鏈笂浼�') + let url0 = this.javaApi+'/word/'+url + const link = document.createElement('a'); + link.href = url0; + link.target = '_blank'; + link.click(); + } + } +}; +</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/a9-management-review/meetingRecords.vue b/src/components/do/a9-management-review/meetingRecords.vue new file mode 100644 index 0000000..66594c6 --- /dev/null +++ b/src/components/do/a9-management-review/meetingRecords.vue @@ -0,0 +1,207 @@ +<template> + <div> + <div class="search-background"> + <span class="search-group"> + <span style="width: 160px">浼氳鍦扮偣锛�</span> + <el-input v-model="searchForm.place" 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> + <meeting-records-dia v-if="meetingRecordsDia" ref="meetingRecordsDia" @closeYearDia="closeYearDia"></meeting-records-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import MeetingRecordsDia from './meetingRecordsDia.vue'; +import ManagementFormDIa from './managementFormDIa.vue'; + +export default { + name: 'meetingRecords', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { ManagementFormDIa, MeetingRecordsDia, ZTTable }, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + searchForm: { + place: '', + }, + tableColumn: [ + { + label: '鏃堕棿', + prop: 'meetingTime', + minWidth: '100' + }, + { + label: '涓绘寔浜�', + prop: 'compere', + minWidth: '100' + }, + { + label: '浼氳鍦扮偣', + prop: 'place', + minWidth: '100' + }, + { + label: '浼氳鍐呭鎽樿', + prop: 'content', + minWidth: '100' + }, + { + dataType: 'action', + minWidth: '120', + label: '鎿嶄綔', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.openFormDia('edit', row); + }, + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delPlan(row) + } + }, + { + name: '涓嬭浇', + type: 'text', + clickFun: (row) => { + this.handleDown(row) + } + }, + ] + } + ], + tableData: [], + tableLoading: false, + page: { + size: 20, + current: 1, + }, + total: 0, + meetingRecordsDia: false + }; + }, + mounted() { + this.searchList() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鏌ヨ鍒楄〃 + searchList () { + this.tableLoading = true + this.$axios.get(this.$api.manageMeeting.getPageMeeting + '?place=' + this.searchForm.place + '&pages=' + this.page.current + '&size=' + this.page.size).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. meetingRecordsDia = true + this.$nextTick(() => { + this.$refs. meetingRecordsDia.openDia(type, row) + }) + }, + closeYearDia () { + this. meetingRecordsDia = false + this.searchList() + }, + // 閲嶇疆鏌ヨ鏉′欢 + resetSearchForm () { + this.searchForm.place = ''; + this.searchList() + }, + // 鍒犻櫎 + delPlan (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.tableLoading = true + this.$axios.delete(this.$api.manageMeeting.deleteMeeting + '?id=' + row.id).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: '宸插彇娑堝垹闄�' + }); + }); + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + this.searchList(); + }, + handleDown(row){ + this.$axios.post(this.$api.manageMeeting.exportMeeting,{id:row.id},{responseType: "blob"}).then(res => { + if(res.code == 201){ + this.$message.error(res.message) + return + } + this.$message.success('涓嬭浇鎴愬姛') + const blob = new Blob([res],{ type: 'application/octet-stream' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '浼氳璁板綍.docx'; + link.click(); + }) + }, + } +}; +</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/a9-management-review/meetingRecordsDia.vue b/src/components/do/a9-management-review/meetingRecordsDia.vue new file mode 100644 index 0000000..a5f73c8 --- /dev/null +++ b/src/components/do/a9-management-review/meetingRecordsDia.vue @@ -0,0 +1,173 @@ +<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="meetingTime"> + <el-date-picker + v-model="form.meetingTime" + 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="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="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="content"> + <el-input v-model="form.content" 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: 'meetingRecordsDia', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + diaLoading: false, + loading: false, + form: { + id: '', + meetingTime: '', + compere: '', + place: '', + content: '', + participant: [], + }, + rules: { + meetingTime: [{required: true, message: '璇峰~鍐欎細璁椂闂�',trigger: 'blur'}], + compere: [{required: true, message: '璇峰~鍐欎富鎸佷汉',trigger: 'blur'}], + place: [{required: true, message: '璇峰~鍐欏湴鐐�',trigger: 'blur'}], + content: [{required: true, message: '璇峰~鍐欎細璁唴瀹规憳瑕�',trigger: 'blur'}], + participant: [{required: true, message: '璇烽�夋嫨鍙傚姞浜哄憳',trigger: 'change'}], + }, + operationType: '', + personList: [] + }; + }, + mounted() { + + }, + // 鏂规硶闆嗗悎 + methods: { + // 鎵撳紑寮规 + openDia (type, row) { + this.operationType = type + this.getAuthorizedPerson() + if (type !== 'add') { + this.form = row + this.form.participant = row.participant.split(',').map(a => { + a = Number(a) + return a + }) + } + this.formDia = true + }, + // 鎻愪氦寮规鏁版嵁 + 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.manageMeeting.addMeeting, 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.put(this.$api.manageMeeting.modifyMeeting, 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> +</style> diff --git a/src/components/do/a9-management-review/reviewReport.vue b/src/components/do/a9-management-review/reviewReport.vue new file mode 100644 index 0000000..902c104 --- /dev/null +++ b/src/components/do/a9-management-review/reviewReport.vue @@ -0,0 +1,279 @@ +<template> + <div> + <div class="search-background"> + <span class="search-group"> + <span style="width: 160px">鍦扮偣锛�</span> + <el-input v-model="searchForm.place" 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> + <review-report-dia v-if="reviewReportDia" ref="reviewReportDia" @closeYearDia="closeYearDia"></review-report-dia> + </div> +</template> + +<script> +import ZTTable from '../../caorui/ZTTable/index.vue'; +import ReviewReportDia from './reviewReportDia.vue'; + +export default { + name: 'reviewReport', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { ReviewReportDia, ZTTable }, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + searchForm: { + place: '', + }, + tableColumn: [ + { + label: '鐩殑', + prop: 'objective', + minWidth: '100' + }, + { + label: '鍦扮偣', + prop: 'place', + minWidth: '100' + }, + { + label: '涓绘寔浜�', + prop: 'compere', + minWidth: '100' + }, + { + label: '璁板綍浜�', + prop: 'recordPeople', + minWidth: '100' + }, + { + label: '鏃ユ湡', + prop: 'date', + minWidth: '100' + }, + { + label: '椤垫', + prop: 'page', + minWidth: '100' + }, + { + label: '璇勫鏂瑰紡', + prop: 'judgingMethod', + minWidth: '100' + }, + { + label: '璇勫渚濇嵁', + prop: 'reviewBasis', + minWidth: '100' + }, + { + dataType: 'action', + minWidth: '160', + label: '鎿嶄綔', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.openFormDia('edit', row); + }, + disabled:(row)=>{ + return !!row.audit||!!row.approval + } + }, + { + name: '瀹℃牳', + type: 'text', + clickFun: (row) => { + this.$confirm('纭畾瀹℃牳閫氳繃?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.submit('audit',row) + }).catch(() => { + }); + }, + disabled:(row)=>{ + return !!row.audit + } + }, + { + name: '鎵瑰噯', + type: 'text', + clickFun: (row) => { + this.$confirm('纭畾鎵瑰噯閫氳繃?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.submit('approval',row) + }).catch(() => { + }); + }, + disabled:(row)=>{ + return !row.audit||!!row.approval + } + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delPlan(row) + } + }, + { + name: '涓嬭浇', + type: 'text', + clickFun: (row) => { + this.handleDown(row) + } + }, + ] + } + ], + tableData: [], + tableLoading: false, + page: { + size: 20, + current: 1, + }, + total: 0, + reviewReportDia: false, + }; + }, + mounted() { + this.searchList() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鏌ヨ鍒楄〃 + searchList () { + this.tableLoading = true + this.$axios.get(this.$api.manageReviewReport.getPageReviewReport + '?place=' + this.searchForm.place + '&pages=' + this.page.current + '&size=' + this.page.size).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. reviewReportDia = true + this.$nextTick(() => { + this.$refs. reviewReportDia.openDia(type, row) + }) + }, + closeYearDia () { + this. reviewReportDia = false + this.searchList() + }, + // 閲嶇疆鏌ヨ鏉′欢 + resetSearchForm () { + this.searchForm.place = ''; + this.searchList() + }, + // 鍒犻櫎 + delPlan (row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.tableLoading = true + this.$axios.delete(this.$api.manageReviewReport.deleteReviewReport + '?id=' + row.id).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: '宸插彇娑堝垹闄�' + }); + }); + }, + // 鍒嗛〉 + handleSizeChange(val) { + this.page.size = val; + this.searchList(); + }, + handleCurrentChange(val) { + this.page.current = val; + this.searchList(); + }, + handleDown(row){ + this.$axios.post(this.$api.manageReviewReport.exportReviewReport,{id:row.id},{responseType: "blob"}).then(res => { + if(res.code == 201){ + this.$message.error(res.message) + return + } + this.$message.success('涓嬭浇鎴愬姛') + const blob = new Blob([res],{ type: 'application/octet-stream' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '璇勫鎶ュ憡.docx'; + link.click(); + }) + }, + submit(type,row){ + let obj = row + obj[type] = JSON.parse(localStorage.getItem("user")).name; + this.$axios.put(this.$api.manageReviewReport.modifyReviewReport, obj, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }).then(res => { + if (res.code === 201) return + this.$message.success('鎿嶄綔鎴愬姛') + this.searchList() + }).catch(err => { + console.log('err---', err); + }) + } + } +}; +</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/a9-management-review/reviewReportDia.vue b/src/components/do/a9-management-review/reviewReportDia.vue new file mode 100644 index 0000000..a990b12 --- /dev/null +++ b/src/components/do/a9-management-review/reviewReportDia.vue @@ -0,0 +1,280 @@ +<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" style="height: 75vh;overflow-y: auto;overflow-x: hidden;"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐩殑" prop="objective"> + <el-input v-model="form.objective" 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="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="recordPeople"> + <el-input v-model="form.recordPeople" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏃ユ湡" prop="date"> + <el-date-picker + v-model="form.date" + 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="page"> + <el-input v-model="form.page" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璇勫鏂瑰紡" prop="judgingMethod"> + <el-input v-model="form.judgingMethod" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璇勫渚濇嵁" prop="reviewBasis"> + <el-input v-model="form.reviewBasis" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鍑哄腑浜哄憳" prop="attendess"> + <!-- <el-input v-model="form.attendess " clearable size="small"></el-input> --> + <el-select v-model="form.attendess" size="small" style="width: 100%;" filterable clearable multiple > + <el-option + v-for="item in personList" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫杈撳叆鎯呭喌" prop="reviewInputs"> + <el-input v-model="form.reviewInputs" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇勫杩囩▼姒傚喌" prop="reviewProcess"> + <el-input v-model="form.reviewProcess" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="涓昏璁姒傝堪" prop="mainTopic"> + <el-input v-model="form.mainTopic" + :rows="5" + clearable + placeholder="璇疯緭鍏ュ唴瀹癸紝鍙緭鍏ュ嚑鍗冨瓧" + size="small" + type="textarea"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="浜嬮」" prop="matters"> + <el-input v-model="form.matters" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璐熻矗浜�" prop="head"> + <el-input v-model="form.head" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="瀹屾垚鏃ユ湡" prop="completionDate"> + <el-date-picker + v-model="form.completionDate" + 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="24"> + <el-form-item label="璺熻釜纭浜�" prop="trackingConfirmed"> + <el-input v-model="form.trackingConfirmed" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璺熻釜鎯呭喌纭璁板綍" prop="follerUp"> + <el-input v-model="form.follerUp" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="浣撶郴璇勪环" prop="overallEvaluation"> + <el-input v-model="form.overallEvaluation" clearable size="small"></el-input> + </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: 'reviewReportDia', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + formDia: false, + diaLoading: false, + loading: false, + form: { + id: '', + objective: '', + place: '', + compere: '', + recordPeople: '', + date: '', + page: '', + judgingMethod: '', + reviewBasis: '', + attendess : [], + reviewInputs : '', + reviewProcess : '', + mainTopic : '', + matters : '', + head : '', + completionDate : '', + trackingConfirmed : '', + follerUp : '', + overallEvaluation : '', + }, + rules: { + objective: [{required: true, message: '璇峰~鍐欑洰鐨�',trigger: 'blur'}], + place: [{required: true, message: '璇峰~鍐欏湴鐐�',trigger: 'blur'}], + compere: [{required: true, message: '璇峰~鍐欎富鎸佷汉',trigger: 'blur'}], + recordPeople: [{required: true, message: '璇峰~鍐欒褰曚汉',trigger: 'blur'}], + date: [{required: true, message: '璇烽�夋嫨鏃ユ湡',trigger: 'change'}], + completionDate: [{required: true, message: '璇烽�夋嫨瀹屾垚鏃ユ湡',trigger: 'change'}], + page: [{required: true, message: '璇峰~鍐欓〉娆�',trigger: 'blur'}], + judgingMethod: [{required: true, message: '璇峰~鍐欒瘎瀹℃柟寮�',trigger: 'blur'}], + reviewBasis: [{required: true, message: '璇峰~鍐欒瘎瀹′緷鎹�',trigger: 'blur'}], + attendess : [{required: true, message: '璇峰~鍐欏嚭甯汉鍛�',trigger: 'change'}], + reviewInputs : [{required: true, message: '璇峰~鍐欒瘎瀹¤緭鍏ユ儏鍐�',trigger: 'blur'}], + reviewProcess : [{required: true, message: '璇峰~鍐欒瘎瀹¤緭鍏ユ儏鍐�',trigger: 'blur'}], + mainTopic : [{required: true, message: '璇峰~鍐欎富瑕佽棰樻杩�',trigger: 'blur'}], + matters : [{required: true, message: '璇峰~鍐欎富瑕佽棰樻杩�',trigger: 'blur'}], + head : [{required: true, message: '璇峰~鍐欒礋璐d汉',trigger: 'blur'}], + trackingConfirmed : [{required: true, message: '璇峰~鍐欒窡韪‘璁や汉',trigger: 'blur'}], + follerUp : [{required: true, message: '璇峰~鍐欒窡韪‘璁や汉',trigger: 'blur'}], + overallEvaluation : [{required: true, message: '璇峰~鍐欎綋绯昏瘎浠�',trigger: 'blur'}], + }, + operationType: '', + personList: [] + }; + }, + mounted() { + + }, + // 鏂规硶闆嗗悎 + methods: { + // 鎵撳紑寮规 + openDia (type, row) { + this.formDia = true + this.operationType = type + this.getAuthorizedPerson() + if (type !== 'add') { + this.form = row + this.form.attendess = this.form.attendess?this.form.attendess.split(',').map(m=>Number(m)):[] + } + }, + // 鎻愪氦寮规鏁版嵁 + handleEdit () { + this.$refs['form'].validate((valid) => { + if (valid) { + this.loading = true + const internalMeeting = this.HaveJson(this.form) + internalMeeting.attendess = internalMeeting.attendess?internalMeeting.attendess.join(','):'' + if (this.operationType === 'add') { + this.$axios.post(this.$api.manageReviewReport.addReviewReport, 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.put(this.$api.manageReviewReport.modifyReviewReport, 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> +>>>.el-dialog { + margin: 4vh auto 50px !important; +} +>>>.el-dialog__body { + max-height: 600px; + overflow-y: auto; +} +</style> diff --git a/src/components/view/a9-management-review.vue b/src/components/view/a9-management-review.vue new file mode 100644 index 0000000..f89cf25 --- /dev/null +++ b/src/components/view/a9-management-review.vue @@ -0,0 +1,47 @@ +<template> + <div class="main"> + <el-tabs v-model="activeName" class="tab-panel" type="border-card"> + <el-tab-pane label="绠$悊璇勫璁″垝" name="yearPlan"> + <management-review-plan></management-review-plan> + </el-tab-pane> + <el-tab-pane label="浼氳璁板綍" name="implementationPlan"> + <meeting-records></meeting-records> + </el-tab-pane> + <el-tab-pane label="璇勫鎶ュ憡" name="meetingSignIn"> + <review-report></review-report> + </el-tab-pane> + </el-tabs> + </div> +</template> + +<script> +import ManagementReviewPlan from '../do/a9-management-review/managementReviewPlan.vue'; +import MeetingRecords from '../do/a9-management-review/meetingRecords.vue'; +import ReviewReport from '../do/a9-management-review/reviewReport.vue'; + +export default { + name: 'a9-management-review', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: { ReviewReport, MeetingRecords, ManagementReviewPlan}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + activeName: 'yearPlan', + }; + }, + mounted() { + + }, + // 鏂规硶闆嗗悎 + methods: {} +}; +</script> + +<style scoped> +.main { + padding: 15px 0; +} +.tab-panel { + background: #fff; +} +</style> -- Gitblit v1.9.3