From 0ac8b28b5fd2285e2edad81419b1df6aa04f6288 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期四, 26 十二月 2024 14:30:56 +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