Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/flowable/task/TaskForm.vue
sangwenwei 1 year ago
parent
commit
84bac5b968
35 changed files with 14418 additions and 322 deletions
  1. 7 0
      src/api/cw/projectRecords/ProjectRecordsService.js
  2. 52 2
      src/api/cw/reportManagement/ProjectReportService.js
  3. 26 0
      src/api/cw/reportManagement/ReportOnlineArchivingService.js
  4. 26 0
      src/api/cw/reportManagement/ReportPaperArchivingService.js
  5. 7 0
      src/api/cw/reportManagement/ReportReviewService.js
  6. 33 0
      src/api/cw/reportManagement/ReportSignAndIssueService.js
  7. 2 2
      src/views/cw/invoice/InvoiceFormTask.vue
  8. 2 2
      src/views/cw/invoice/InvoiceList.vue
  9. 1 1
      src/views/cw/invoice/InvoiceUpdateForm.vue
  10. 31 16
      src/views/cw/projectRecords/ProjectRecordsAddForm.vue
  11. 23 9
      src/views/cw/projectRecords/ProjectRecordsAddForm2.vue
  12. 12 11
      src/views/cw/projectRecords/ProjectRecordsForm.vue
  13. 9 9
      src/views/cw/projectRecords/ProjectRecordsForm2.vue
  14. 1 1
      src/views/cw/projectRecords/ProjectRecordsList.vue
  15. 1 1
      src/views/cw/projectRecords/ProjectRecordsList2.vue
  16. 1 1
      src/views/cw/projectRecords/ProjectRecordsTaskForm.vue
  17. 187 0
      src/views/cw/reportManagement/ArchivedInfoExportForm.vue
  18. 3056 0
      src/views/cw/reportManagement/ProjectRecordsInfoForm.vue
  19. 254 44
      src/views/cw/reportManagement/ReportManagementFormNew.vue
  20. 1001 0
      src/views/cw/reportManagement/ReportManagementFormNew1.vue
  21. 1118 0
      src/views/cw/reportManagement/ReportManagementFormNew2.vue
  22. 1081 0
      src/views/cw/reportManagement/ReportManagementFormNew3.vue
  23. 613 176
      src/views/cw/reportManagement/ReportManagementList.vue
  24. 986 0
      src/views/cw/reportManagement/ReportManagementList2.vue
  25. 1039 0
      src/views/cw/reportManagement/ReportManagementList3.vue
  26. 778 0
      src/views/cw/reportManagement/ReportPaperArchivingUpdateForm.vue
  27. 636 0
      src/views/cw/reportManagement/onlineArchiving/ReportOnlineArchiving.vue
  28. 767 0
      src/views/cw/reportManagement/paperArchiving/ReportPaperArchiving.vue
  29. 381 44
      src/views/cw/reportManagement/reportReview/ReportReviewForm.vue
  30. 1257 0
      src/views/cw/reportManagement/reportReview/ReportReviewForm2.vue
  31. 975 0
      src/views/cw/reportManagement/signAndIssue/ReportSignAndIssue.vue
  32. 18 0
      src/views/cw/workClientInfo/WorkClientAddForm.vue
  33. 18 0
      src/views/cw/workClientInfo/WorkClientForm.vue
  34. 2 2
      src/views/cw/workContract/ContractNameForm.vue
  35. 17 1
      src/views/flowable/task/TaskForm.vue

+ 7 - 0
src/api/cw/projectRecords/ProjectRecordsService.js

@@ -23,6 +23,13 @@ export default {
 			params: { id: id },
 		});
 	},
+	projectUpgrade: function (id) {
+		return request({
+			url: prefix + "/cwProjectRecords/projectUpgrade",
+			method: "post",
+			params: { id: id },
+		});
+	},
 	save: function (inputForm) {
 		return request({
 			url: prefix + `/cwProjectRecords/save`,

+ 52 - 2
src/api/cw/reportManagement/ProjectReportService.js

@@ -2,6 +2,14 @@ import request from "@/utils/httpRequest";
 import { FINANCE_PATH as prefix } from "../../AppPath";
 
 export default {
+	archivedInfoExport: function (params) {
+		return request({
+			url: prefix + "/cwProjectReport/archivedInfoExport",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	},
   list: function (params) {
     return request({
       url: prefix + '/cwProjectReport/list',
@@ -9,6 +17,27 @@ export default {
       params: params
     })
   },
+	list2: function (params) {
+    return request({
+      url: prefix + '/cwProjectReport/list2',
+      method: 'get',
+      params: params
+    })
+  },
+	list3: function (params) {
+    return request({
+      url: prefix + '/cwProjectReport/list3',
+      method: 'get',
+      params: params
+    })
+  },
+	getTotal: function () {
+		return request({
+			url: prefix + "/cwProjectReport/getTotal",
+			method: "get",
+			params: {  },
+		});
+	},
   saveForm: function (inputForm) {
     return request({
       url: prefix + `/cwProjectReport/saveForm`,
@@ -44,14 +73,35 @@ export default {
 			params: {id: id}
 		})
 	},
+	queryBySignAndIssueId: function (id) {
+		return request({
+			url: prefix + '/cwProjectReport/queryBySignAndIssueId',
+			method: 'get',
+			params: {id: id}
+		})
+	},
+	queryByOnlineArchivingId: function (id) {
+		return request({
+			url: prefix + '/cwProjectReport/queryByOnlineArchivingId',
+			method: 'get',
+			params: {id: id}
+		})
+	},
+	queryByPaperArchivingId: function (id) {
+		return request({
+			url: prefix + '/cwProjectReport/queryByPaperArchivingId',
+			method: 'get',
+			params: {id: id}
+		})
+	},
 	/*
 	根据项目id,与报告id查询附件信息
 	 */
-	getAttachmentList(projectId,id){
+	getAttachmentList(projectId,id,type){
 		return request({
 			url: prefix + '/cwProjectReport/getAttachmentList',
 			method: 'get',
-			params: {projectId:projectId, id: id}
+			params: {projectId:projectId, id: id,type: type}
 		})
 	},
 	queryById2: function (id) {

+ 26 - 0
src/api/cw/reportManagement/ReportOnlineArchivingService.js

@@ -0,0 +1,26 @@
+import request from '@/utils/httpRequest';
+import { FINANCE_PATH as prefix } from "../../AppPath";
+
+export default {
+	queryByReportId: function (id) {
+		return request({
+			url: prefix + '/cwProjectReport/onlineArchiving/queryByReportId',
+			method: 'get',
+			params: {id: id}
+		})
+	},
+	updateStatusByReportId: function (data) {
+		return request({
+			url: prefix + '/cwProjectReport/onlineArchiving/updateStatusByReportId',
+			method: 'post',
+			data: data
+		})
+	},
+	saveForm: function (param) {
+		return request({
+			url: prefix + '/cwProjectReport/onlineArchiving/saveForm',
+			method: 'post',
+			data: param
+		})
+	}
+}

+ 26 - 0
src/api/cw/reportManagement/ReportPaperArchivingService.js

@@ -0,0 +1,26 @@
+import request from '@/utils/httpRequest';
+import { FINANCE_PATH as prefix } from "../../AppPath";
+
+export default {
+	queryByReportId: function (id) {
+		return request({
+			url: prefix + '/cwProjectReport/paperArchiving/queryByReportId',
+			method: 'get',
+			params: {id: id}
+		})
+	},
+	updateStatusByReportId: function (data) {
+		return request({
+			url: prefix + '/cwProjectReport/paperArchiving/updateStatusByReportId',
+			method: 'post',
+			data: data
+		})
+	},
+	saveForm: function (param) {
+		return request({
+			url: prefix + '/cwProjectReport/paperArchiving/saveForm',
+			method: 'post',
+			data: param
+		})
+	}
+}

+ 7 - 0
src/api/cw/reportManagement/ReportReviewService.js

@@ -58,6 +58,13 @@ export default class ReportReviewService {
       params: {id: id}
     })
   }
+	getUserInfo (id) {
+    return request({
+      url: prefix + '/projectReport/review/getUserInfo',
+      method: 'get',
+      params: {id: id}
+    })
+  }
   getProcessStatus (id) {
     return request({
       url: prefix + '/projectReport/review/getProcessStatus',

+ 33 - 0
src/api/cw/reportManagement/ReportSignAndIssueService.js

@@ -0,0 +1,33 @@
+import request from '@/utils/httpRequest';
+import { FINANCE_PATH as prefix } from "../../AppPath";
+
+export default class ReportSignAndIssueService {
+	queryByReportId (id) {
+		return request({
+			url: prefix + '/cwProjectReport/signAndIssue/queryByReportId',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+	updateStatusByReportId (data) {
+		return request({
+			url: prefix + '/cwProjectReport/signAndIssue/updateStatusByReportId',
+			method: 'post',
+			data: data
+		})
+	}
+	saveForm (param) {
+		return request({
+			url: prefix + '/cwProjectReport/signAndIssue/saveForm',
+			method: 'post',
+			data: param
+		})
+	}
+	delete(id) {
+		return request({
+			url: prefix + '/cwProjectReport/signAndIssue/delete',
+			method: 'delete',
+			params: {id: id}
+		})
+	}
+}

+ 2 - 2
src/views/cw/invoice/InvoiceFormTask.vue

@@ -301,7 +301,7 @@
 			  >
 				  <el-select v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
 					  <el-option
-						  v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+						  v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 						  :key="item.value"
 						  :label="item.label"
 						  :value="item.value">
@@ -315,7 +315,7 @@
 			  >
 				  <el-select v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
 					  <el-option
-						  v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+						  v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 						  :key="item.value"
 						  :label="item.label"
 						  :value="item.value">

+ 2 - 2
src/views/cw/invoice/InvoiceList.vue

@@ -159,7 +159,7 @@
 			  v-if="showHideItem" label="报备类型" prop="reportType">
 			  <el-select v-model="searchForm.reportType" placeholder="请选择报备类型" clearable style="width: 100%;">
 				  <el-option
-					  v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+					  v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 					  :key="item.value"
 					  :label="item.label"
 					  :value="item.value">
@@ -235,7 +235,7 @@
           <vxe-column min-width="150" title="发票金额(元)" align="center" field="account"></vxe-column>
           <vxe-column min-width="150" title="报备类型" align="center" field="reportType">
 			  <template #default="scope">
-				  {{$dictUtils.getDictLabel('cw_work_client_report_type', scope.row.reportType, '')}}
+				  {{$dictUtils.getDictLabel('program_cost_audit_type', scope.row.reportType, '')}}
 			  </template>
 		  </vxe-column>
           <vxe-column min-width="120" title="开票内容" align="center" field="billingContent">

+ 1 - 1
src/views/cw/invoice/InvoiceUpdateForm.vue

@@ -287,7 +287,7 @@
 			  >
 				  <el-select v-model="inputForm.reportType" placeholder="请选择报备类型" clearable style="width: 100%;">
 					  <el-option
-						  v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+						  v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 						  :key="item.value"
 						  :label="item.label"
 						  :value="item.value">

+ 31 - 16
src/views/cw/projectRecords/ProjectRecordsAddForm.vue

@@ -109,7 +109,7 @@
                       :url="`/system-server/sys/office/treeData?type=2`"
                       :value="inputForm.officeId"
                       :accordion="true"
-                      size="large"
+                      size="default"
                       @getValue="(value) => {inputForm.officeId=value}"/>
                   </el-form-item>
                 </el-col>
@@ -169,7 +169,7 @@
                   ]">
                     <el-select v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
                       <el-option
-                        v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+                        v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
                         :key="item.value"
                         :label="item.label"
                         :value="item.value">
@@ -216,8 +216,9 @@
                   <el-form-item label="现场负责人" prop="projectLeaderId"
                                 :rules="[
                    ]">
-                    <UserSelectSignatory :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelectSignatory>
-                  </el-form-item>
+<!--                    <UserSelectSignatory :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelectSignatory>-->
+					  <UserSelectForQualification :readonly="true" :disabled="method === 'view'" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelectForQualification>
+				  </el-form-item>
                 </el-col>
 				  <el-col :span="12">
 					  <el-form-item label="项目经理1" prop="projectMasterId"
@@ -319,12 +320,12 @@
                         :edit-rules="validContactRules"
                         :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
                       >
-                        <vxe-table-column align="center" field="name" title="姓名" :edit-render="{}">
+                        <vxe-table-column min-width="110" align="center" field="name" title="姓名" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.name" placeholder="姓名" clearable></el-input>
                           </template>
                         </vxe-table-column>
-						  <vxe-table-column align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
+						  <vxe-table-column min-width="110" align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
 							  <template v-slot:edit="scope">
 								  <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.sex" placeholder="性别" clearable style="width: 100%;" transfer>
 									  <vxe-option
@@ -336,37 +337,37 @@
 								  </vxe-select>
 							  </template>
 						  </vxe-table-column>
-						  <vxe-table-column align="center" field="officeId" title="部门" :edit-render="{}">
+						  <vxe-table-column min-width="110" align="center" field="officeId" title="部门" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.officeId" placeholder="部门" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="position" title="职务" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="position" title="职务" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.position" placeholder="职务" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="contactFirst" title="联系方式1" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="contactFirst" title="联系方式1" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.contactFirst" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式1" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="contactSecond" title="联系方式2" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="contactSecond" title="联系方式2" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.contactSecond" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式2" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="fax" title="传真" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="fax" title="传真" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.fax" placeholder="传真" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="email" title="邮箱" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="email" title="邮箱" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.email" @change="$forceUpdate()" @blur="blurEmail(scope.$rowIndex)" placeholder="邮箱" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}">
+                        <vxe-table-column min-width="111" align="center" field="remarks" title="备注" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input maxlength="500" v-model="scope.row.remarks" placeholder="备注" clearable></el-input>
                           </template>
@@ -644,9 +645,9 @@
             if (this.commonJS.isEmpty(this.inputForm.cwProjectClientInfoDTOList)) {
               this.inputForm.cwProjectClientInfoDTOList = []
             }
-            if (this.commonJS.isEmpty(this.inputForm.projectLeaderId)) {
-              this.inputForm.projectLeaderId = this.$store.state.user.id
-            }
+            // if (this.commonJS.isEmpty(this.inputForm.projectLeaderId)) {
+            //   this.inputForm.projectLeaderId = this.$store.state.user.id
+            // }
             if (this.commonJS.isEmpty(this.inputForm.projectMoney)) {
               this.inputForm.projectMoney = ''
             }
@@ -675,6 +676,20 @@
               this.$message.error('“被服务单位”中至少填写一条信息')
               throw new Error('“被服务单位”中至少填写一条信息')
             }
+            if (this.inputForm.projectLevel === '1') {
+            	if (this.inputForm.projectMoney>= 500) {
+					this.loading = false
+					this.$message.error('送审规模大于500万元,项目等级请选择B级!')
+					throw new Error('送审规模大于500万元,项目等级请选择B级!')
+				}
+
+            } else {
+				if (this.inputForm.projectMoney < 500) {
+					this.loading = false
+					this.$message.error('送审规模小于500万元,项目等级请选择A级!')
+					throw new Error('送审规模小于500万元,项目等级请选择A级!')
+				}
+			}
             if (this.$refs.uploadComponent.checkProgress()) {
               this.loading = false
               throw new Error()

+ 23 - 9
src/views/cw/projectRecords/ProjectRecordsAddForm2.vue

@@ -319,12 +319,12 @@
                         :edit-rules="validContactRules"
                         :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
                       >
-                        <vxe-table-column align="center" field="name" title="姓名" :edit-render="{}">
+                        <vxe-table-column min-width="135" align="center" field="name" title="姓名" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.name" placeholder="姓名" clearable></el-input>
                           </template>
                         </vxe-table-column>
-						  <vxe-table-column align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
+						  <vxe-table-column min-width="135" align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
 							  <template v-slot:edit="scope">
 								  <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.sex" placeholder="性别" clearable style="width: 100%;" transfer>
 									  <vxe-option
@@ -336,37 +336,37 @@
 								  </vxe-select>
 							  </template>
 						  </vxe-table-column>
-						  <vxe-table-column align="center" field="officeId" title="部门" :edit-render="{}">
+						  <vxe-table-column min-width="135" align="center" field="officeId" title="部门" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.officeId" placeholder="部门" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="position" title="职务" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="position" title="职务" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.position" placeholder="职务" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="contactFirst" title="联系方式1" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="contactFirst" title="联系方式1" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.contactFirst" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式1" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="contactSecond" title="联系方式2" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="contactSecond" title="联系方式2" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.contactSecond" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式2" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="fax" title="传真" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="fax" title="传真" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.fax" placeholder="传真" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="email" title="邮箱" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="email" title="邮箱" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input v-model="scope.row.email" @change="$forceUpdate()" @blur="blurEmail(scope.$rowIndex)" placeholder="邮箱" clearable></el-input>
                           </template>
                         </vxe-table-column>
-                        <vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}">
+                        <vxe-table-column min-width="137" align="center" field="remarks" title="备注" :edit-render="{}">
                           <template v-slot:edit="scope">
                             <el-input maxlength="500" v-model="scope.row.remarks" placeholder="备注" clearable></el-input>
                           </template>
@@ -675,6 +675,20 @@
               this.$message.error('“被服务单位”中至少填写一条信息')
               throw new Error('“被服务单位”中至少填写一条信息')
             }
+			  if (this.inputForm.projectLevel === '1') {
+				  if (this.inputForm.projectMoney>= 500) {
+					  this.loading = false
+					  this.$message.error('送审规模大于500万元,项目等级请选择B级!')
+					  throw new Error('送审规模大于500万元,项目等级请选择B级!')
+				  }
+
+			  } else {
+				  if (this.inputForm.projectMoney < 500) {
+					  this.loading = false
+					  this.$message.error('送审规模小于500万元,项目等级请选择A级!')
+					  throw new Error('送审规模小于500万元,项目等级请选择A级!')
+				  }
+			  }
             if (this.$refs.uploadComponent.checkProgress()) {
               this.loading = false
               throw new Error()

+ 12 - 11
src/views/cw/projectRecords/ProjectRecordsForm.vue

@@ -172,7 +172,7 @@
                   ]">
                     <el-select v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
                       <el-option
-                        v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+                        v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
                         :key="item.value"
                         :label="item.label"
                         :value="item.value">
@@ -219,7 +219,8 @@
                   <el-form-item label="现场负责人" prop="projectLeaderId"
                                 :rules="[
                    ]">
-                    <UserSelect :readonly="true" :disabled="method === 'view'" :limit='1' :modleValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>
+					  <UserSelectForQualification :readonly="true" :disabled="method === 'view'" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelectForQualification>
+<!--                    <UserSelect :readonly="true" :disabled="method === 'view'" :limit='1' :modleValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>-->
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
@@ -315,12 +316,12 @@
 							  :edit-rules="validContactRules"
 							  :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
 						  >
-							  <vxe-table-column align="center" field="name" title="姓名" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="110" align="center" field="name" title="姓名" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.name" placeholder="姓名" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
+							  <vxe-table-column min-width="110" align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
 								  <template #default="scope">
 									  <vxe-select :disabled="method === 'view'" v-model="scope.row.sex" placeholder="性别" clearable style="width: 100%;" transfer>
 										  <vxe-option
@@ -332,37 +333,37 @@
 									  </vxe-select>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="officeId" title="部门" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="110" align="center" field="officeId" title="部门" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.officeId" placeholder="部门" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column  align="center" field="position" title="职务" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="position" title="职务" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.position" placeholder="职务" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.contactFirst" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式1" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.contactSecond" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式2" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="fax" title="传真" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="fax" title="传真" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.fax" placeholder="传真" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="email" title="邮箱" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="email" title="邮箱" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.email" @change="$forceUpdate()" @blur="blurEmail(scope.$rowIndex)" placeholder="邮箱" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="remarks" title="备注" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input maxlength="500" v-model="scope.row.remarks" placeholder="备注" clearable></el-input>
 								  </template>

+ 9 - 9
src/views/cw/projectRecords/ProjectRecordsForm2.vue

@@ -315,12 +315,12 @@
 							  :edit-rules="validContactRules"
 							  :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
 						  >
-							  <vxe-table-column align="center" field="name" title="姓名" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="110" align="center" field="name" title="姓名" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.name" placeholder="姓名" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
+							  <vxe-table-column min-width="110" align="center" field="sex" title="性别" :edit-render="{name: '$select', options: $dictUtils.getDictList('sex')}">
 								  <template #default="scope">
 									  <vxe-select :disabled="method === 'view'" v-model="scope.row.sex" placeholder="性别" clearable style="width: 100%;" transfer>
 										  <vxe-option
@@ -332,37 +332,37 @@
 									  </vxe-select>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="officeId" title="部门" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="110" align="center" field="officeId" title="部门" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.officeId" placeholder="部门" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column  align="center" field="position" title="职务" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="position" title="职务" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.position" placeholder="职务" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.contactFirst" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式1" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.contactSecond" oninput="value=value.replace(/[^\d]/g,'')" placeholder="联系方式2" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="fax" title="传真" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="fax" title="传真" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.fax" placeholder="传真" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="email" title="邮箱" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="email" title="邮箱" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input v-model="scope.row.email" @change="$forceUpdate()" @blur="blurEmail(scope.$rowIndex)" placeholder="邮箱" clearable></el-input>
 								  </template>
 							  </vxe-table-column>
-							  <vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}" show-overflow="title">
+							  <vxe-table-column min-width="111" align="center" field="remarks" title="备注" :edit-render="{}" show-overflow="title">
 								  <template #default="scope">
 									  <el-input maxlength="500" v-model="scope.row.remarks" placeholder="备注" clearable></el-input>
 								  </template>

+ 1 - 1
src/views/cw/projectRecords/ProjectRecordsList.vue

@@ -50,7 +50,7 @@
 		<el-form-item v-if="showHideItem" label="报备类型" prop="filingType">
 			<el-select v-model="searchForm.reportType" placeholder="请选择" style="width:100%;">
 				<el-option
-					v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+					v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 					:key="item.value"
 					:label="item.label"
 					:value="item.value">

+ 1 - 1
src/views/cw/projectRecords/ProjectRecordsList2.vue

@@ -50,7 +50,7 @@
 		<el-form-item v-if="showHideItem" label="报备类型" prop="filingType">
 			<el-select v-model="searchForm.reportType" placeholder="请选择" style="width:100%;">
 				<el-option
-					v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+					v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
 					:key="item.value"
 					:label="item.label"
 					:value="item.value">

+ 1 - 1
src/views/cw/projectRecords/ProjectRecordsTaskForm.vue

@@ -150,7 +150,7 @@
                   ]">
                     <el-select v-model="inputForm.reportType" placeholder="请选择报备类型" clearable style="width: 100%;">
                       <el-option
-                        v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
+                        v-for="item in $dictUtils.getDictList('program_cost_audit_type')"
                         :key="item.value"
                         :label="item.label"
                         :value="item.value">

+ 187 - 0
src/views/cw/reportManagement/ArchivedInfoExportForm.vue

@@ -0,0 +1,187 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="800px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+					 label-width="100px" @submit.native.prevent>
+
+				<el-row  :gutter="0">
+					<el-col :span="24">
+						<el-form-item label="创建时间" prop="contractDates">
+							<el-date-picker
+								placement="bottom-start"
+								format="YYYY-MM-DD HH:mm:ss"
+								value-format="YYYY-MM-DD HH:mm:ss"
+								v-model="inputForm.contractDates"
+								type="datetimerange"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row  :gutter="0">
+					<el-col :span="24">
+						<el-form-item label="归档状态" prop="archivingStatus" :rules="[
+							{required: true, message:'归档状态不能为空', trigger:'change'}
+                   ]">
+							<el-select v-model="inputForm.archivingStatus" placeholder="请选择" style="width:100%;" clearable multiple>
+								<el-option
+									v-for="item in $dictUtils.getDictList('online_status')"
+									:key="item.value"
+									:label="item.label"
+									:value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form >
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button  v-if="method === 'edit'" type="primary" icon="el-icon-circle-check" @click="doSubmit('save')">下载</el-button>
+			</span>
+		</template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+	import moment from 'moment'
+
+  export default {
+    props: {
+      businessId: {
+        type: String,
+        default: ''
+      },
+      formReadOnly: {
+        type: Boolean,
+        default: false
+      },
+      status: {
+        type: String,
+        default: ''
+      }
+    },
+    data () {
+      return {
+		  detailKey: '',
+        title: '',
+        method: '',
+        loading: false,
+		  inputForm: {
+			  contractDates: [],
+			  archivingStatus: []
+		  },
+        keyWatch: '',
+        visible: false,
+        tabName: ''
+      }
+    },
+    created () {
+
+    },
+    computed: {
+      bus: {
+        get () {
+          return this.businessId
+        },
+        set (val) {
+          this.businessId = val
+        }
+      }
+    },
+    watch: {
+      'keyWatch': {
+        handler (newVal) {
+          if (this.commonJS.isNotEmpty(this.bus)) {
+            this.init('', this.bus)
+          } else {
+            this.$nextTick(() => {
+              this.$refs.inputForm.resetFields()
+            })
+          }
+        }
+      }
+    },
+    components: {
+
+    },
+    methods: {
+		init (method) {
+			this.visible = true
+			if (method === 'edit') {
+				this.title = '归档信息导出'
+				this.method = method
+			}
+			this.method = method
+			this.inputForm = {
+				contractDates: [],
+				archivingStatus: []
+			}
+		},
+      // 表单提交
+      doSubmit (status) {
+		  if (status === 'save') {
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+
+					  let options = {
+					  	filename: '归档一览表',
+					  	sheetName: 'Export'
+					  }
+					  if (this.inputForm.contractDates) {
+						  options.filename = moment(this.inputForm.contractDates[0]).format('YYYY-MM-DD')
+							  + '至' + moment(this.inputForm.contractDates[1]).format('YYYY-MM-DD')
+							  + options.filename
+					  }
+					  this.loading = true
+					  projectReportService.archivedInfoExport({
+					  	'itemType': '1',
+					  	'tabType': '2022',
+					  	...options,
+					  	...this.inputForm
+					  }).then((res) => {
+					  	// 将二进制流文件写入excel表,以下为重要步骤
+					  	this.$utils.downloadExcel(res, options.filename)
+						  this.close()
+					  	this.loading = false
+					  }).catch(function (err) {
+					  	this.loading = false
+					  	if (err.response) {
+					  		console.log(err.response)
+					  	}
+					  })
+				  }
+			  })
+			  return
+		  }
+      },
+		close () {
+			this.inputForm = {
+				contractDates: [],
+				archivingStatus: []
+			}
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+</style>

File diff suppressed because it is too large
+ 3056 - 0
src/views/cw/reportManagement/ProjectRecordsInfoForm.vue


+ 254 - 44
src/views/cw/reportManagement/ReportManagementFormNew.vue

@@ -57,7 +57,7 @@
 					<el-col :span="12">
 						<el-form-item label="送审价(元)" prop="reviewFee"
 									  :rules="[
-
+							{required: true, message: '送审价(元)不能为空', trigger: 'blur'},
                    ]">
 							<!--						  <el-input v-model="inputForm.reviewFee" placeholder="请输入送审价" @change="getFee" clearable></el-input>-->
 							<el-input
@@ -78,7 +78,7 @@
 					<el-col :span="12">
 						<el-form-item label="审定价(元)" prop="approvalFee"
 									  :rules="[
-
+								{required: true, message: '审定价(元)不能为空', trigger: 'blur'},
 			   ]">
 							<!--						  <el-input v-model="inputForm.approvalFee" placeholder="请输入审定价" clearable></el-input>-->
 							<el-input
@@ -124,7 +124,7 @@
 									  :rules="[
 										{required: true, message:'下一节点审核人不能为空', trigger:'blur'}
                    ]">
-							<UserSelectSignatory style="width: 100%" ref="userSelect1"
+							<UserSelectSignatory :disabled="true" style="width: 100%" ref="userSelect1"
 												 :readonly="true" :limit='1' :modelValue="inputForm.reviewBy"
 												 @update:modelValue='(value) => {inputForm.reviewBy = value}'></UserSelectSignatory>
 						</el-form-item>
@@ -240,9 +240,9 @@
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="造价咨询营业收入(万元)" prop="ziXunShouRu"
+						<el-form-item label="造价咨询营业收入(万元)" prop="ziXunShouRu"
 									  :rules="[
-
+										{ validator: ziXunShouRuRange, trigger: 'change' }
 			   ]">
 							<!--						  <el-input v-model="inputForm.ziXunShouRu" placeholder="请输入造价咨询营业收入" clearable></el-input>-->
 							<el-input
@@ -263,11 +263,68 @@
 				<div>
 					<el-divider content-position="left"><i class="el-icon-document"></i>
 						<span style="color:#f5222d;">*</span> 项目组成员(质量控制流程)
-						<el-button size="default" style="margin-left: 20px" type="primary" @click="insertEvent('detail')" plain>
+						<el-button size="default" style="margin-left: 20px" :disabled="true" type="primary" @click="insertEvent('detail')" plain>
 							新增
 						</el-button>
 					</el-divider>
-					<el-row  :gutter="15" >
+					<el-row  :gutter="15" v-if="inputForm.projectLevel==='1'">
+						<el-col :span="24">
+							<vxe-table
+								border
+								show-footer
+								show-overflow
+								ref="detailTable"
+								:key="detailKey"
+								class="vxe-table-element"
+								:data="inputForm.detailInfos"
+								style="margin-left: 5em"
+								highlight-current-row
+								:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+							>
+								<vxe-table-column title="编号" field="index" width="80">
+									<template v-slot="scope">
+										{{ scope.$rowIndex + 1 }}
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="memberName" title="成员名称" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择用户', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.memberName" :disabled="true" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="userRole" title="角色" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.userRole" :readonly="true"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="enrollCertNo" title="注册/资格证号" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.enrollCertNo" :readonly="true"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="profession" title="专业" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.profession" :readonly="true"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="content" title="本人负责内容" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.content" :disabled="true"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="opinion" title="审核意见" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.opinion" :disabled="true"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column title="操作" width="100">
+									<template v-slot="scope">
+<!--										<el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')" :disabled="true" v-if="scope.$rowIndex !== 0 ">删除</el-button>-->
+									</template>
+								</vxe-table-column>
+							</vxe-table>
+						</el-col>
+					</el-row>
+					<el-row  :gutter="15" v-else-if="inputForm.projectLevel==='2'">
 						<el-col :span="24">
 							<vxe-table
 								border
@@ -280,11 +337,15 @@
 								style="margin-left: 5em"
 								highlight-current-row
 								:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
-								:edit-rules="validRules"
 							>
+								<vxe-table-column title="编号" field="index" width="80">
+									<template v-slot="scope">
+										{{ scope.$rowIndex + 1 }}
+									</template>
+								</vxe-table-column>
 								<vxe-table-column field="memberName" title="成员名称" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择用户', trigger:'blur'}]">
 									<template v-slot:edit="scope">
-										<el-input v-model="scope.row.memberName" :disabled="scope.$rowIndex == 0" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+										<el-input v-model="scope.row.memberName" :disabled="true" @focus="userPullListForm(scope.$rowIndex)"></el-input>
 									</template>
 								</vxe-table-column>
 								<vxe-table-column field="userRole" title="角色" :edit-render="{}" show-overflow="title">
@@ -304,17 +365,17 @@
 								</vxe-table-column>
 								<vxe-table-column field="content" title="本人负责内容" :edit-render="{}" show-overflow="title">
 									<template v-slot:edit="scope">
-										<el-input v-model="scope.row.content" ></el-input>
+										<el-input v-model="scope.row.content" :readonly="true"></el-input>
 									</template>
 								</vxe-table-column>
 								<vxe-table-column field="opinion" title="审核意见" :edit-render="{}" show-overflow="title">
 									<template v-slot:edit="scope">
-										<el-input v-model="scope.row.opinion" ></el-input>
+										<el-input v-model="scope.row.opinion" :readonly="true"></el-input>
 									</template>
 								</vxe-table-column>
 								<vxe-table-column title="操作" width="100">
 									<template v-slot="scope">
-										<el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0">删除</el-button>
+<!--										<el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0 && scope.$rowIndex !== 1 ">删除</el-button>-->
 									</template>
 								</vxe-table-column>
 							</vxe-table>
@@ -333,7 +394,6 @@
 						show-overflow
 						ref="clientTable"
 						class="vxe-table-element"
-						style="margin-left: 5em;width: 100%"
 						:row-config="{keyField: 'id'}"
 						:column-config="{resizable: true}"
 						:tree-config="{transform: true, expandAll: true}"
@@ -434,10 +494,8 @@
 	} from '@/api/sys/OSSService'
 	import UserPullFormNew from '@/views/finance/invoice/UserPullFormNew'
 	import UserSelectSignatory from '@/components/userSelectNew'
-	import ReportCancellApplyService from '@/api/cw/reportCancellApply/ReportCancellApplyService'
 	import ReportReviewService from '@/api/cw/reportManagement/ReportReviewService'
 	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
-	import EnterpriseSearchService from '@/api/cw/common/EnterpriseSearchService'
 	import CommonApi from '@/api/cw/common/CommonApi'
   import FileForm from "./reportReview/FileForm";
   export default {
@@ -457,6 +515,7 @@
     },
     data () {
       return {
+		  detailKey: '',
         title: '',
         method: '',
         loading: false,
@@ -480,6 +539,7 @@
 			  ],
 		  },
 		  inputForm: {
+			  reviewByName: '',
 			  reviewNewId: '',
 			  projectLevel: '',
 			  memberName: '',
@@ -520,13 +580,9 @@
         tabName: ''
       }
     },
-	  ReportCancellApplyService: null,
 	  ReportReviewService: null,
-	  enterpriseSearchService: null,
 	  commonApi: null,
     created () {
-		this.enterpriseSearchService = new EnterpriseSearchService()
-		this.reportCancellApplyService = new ReportCancellApplyService()
 		this.reportReviewService = new ReportReviewService()
 		this.commonApi = new CommonApi()
     },
@@ -575,6 +631,7 @@
         this.reportReviewService = new ReportReviewService()
         this.method = method
 		  this.inputForm = {
+			  reviewByName: '',
 			  reviewNewId: '',
 			  projectLevel: '',
 			  memberName: '',
@@ -624,14 +681,12 @@
 
 				// 根据证书类型  获取字典值
 				let professionList = this.getProfessionList(this.inputForm.professionType)
-				professionList.forEach(item => {
-					if (item.value == this.inputForm.profession) {
-						this.inputForm.profession = item.label
-					}
-				})
-
-
 				if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+					professionList.forEach(item => {
+						if (item.value == this.inputForm.profession) {
+							this.inputForm.profession = item.label
+						}
+					})
 					let d = {
 						memberName: this.inputForm.memberName,
 						userId: this.inputForm.projectManagerId,
@@ -642,9 +697,23 @@
 					this.inputForm.detailInfos = []
 					this.inputForm.detailInfos.push(d)
 					this.detailKey = Math.random()
+				} else {
+					this.reportReviewService.getUserInfo(this.inputForm.reviewBy).then((data) => {
+						this.inputForm.detailInfos.forEach(item => {
+							professionList = this.getProfessionList(item.professionType)
+							professionList.forEach(item2 => {
+								if (item.profession == item2.value) {
+									item.profession = item2.label
+								}
+								if (item.userRole === '技术负责人') {
+									item.memberName = data.memberName + '(' + this.inputForm.reviewByName + '代)'
+								}
+							})
+						})
+					})
 				}
 
-				projectReportService.getAttachmentList(data.projectId,this.inputForm.id).then((data) => {
+				projectReportService.getAttachmentList(data.projectId,this.inputForm.id,'').then((data) => {
 					this.tableData = data
 					this.tableKey = Math.random()
 				})
@@ -660,6 +729,90 @@
 				  if (valid) {
 					  // 暂存
 					  this.loading = true
+
+					  if (this.commonJS.isEmpty(this.inputForm.reviewBy)){
+						  this.loading = false
+						  this.$message.error('请选择下一节点审核人')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.workStartDate)){
+						  this.loading = false
+						  this.$message.error('请选择工作开始时间')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.workEndDate)){
+						  this.loading = false
+						  this.$message.error('请选择工作结束时间')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos)){
+						  this.loading = false
+						  this.$message.error('至少选择一位项目组成员')
+						  throw new Error()
+					  }else {
+						  let i = this.inputForm.detailInfos.length
+
+						  if (this.inputForm.projectLevel === '1') {
+							  if (i <= 1) {
+								  this.loading = false
+								  this.$message.error('请添加咨询员信息')
+								  throw new Error('请添加咨询员信息')
+							  }
+						  } else if (this.inputForm.projectLevel === '2') {
+							  if (i <= 1) {
+								  this.loading = false
+								  this.$message.error('请添加技术负责人信息')
+								  throw new Error('请添加技术负责人信息')
+							  } else if (i <= 2) {
+								  this.loading = false
+								  this.$message.error('请添加咨询员信息')
+								  throw new Error('请添加咨询员信息')
+							  }
+						  }
+
+						  for (let j = 0; j < i; j++) {
+							  this.inputForm.detailInfos[j].detailNumber = j+1;
+							  /*let k = j + 1
+							  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].memberName)){
+								  this.loading = false
+								  this.$message.error('项目组成员第'+k+'行成员名称为空')
+								  throw new Error('项目组成员第'+k+'行成员名称为空')
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].enrollCertNo)){
+								  this.loading = false
+								  this.$message.error('项目组成员第'+k+'行注册/资格证号为空')
+								  throw new Error('项目组成员第'+k+'行注册/资格证号为空')
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].profession)){
+								  this.loading = false
+								  this.$message.error('项目组成员第'+k+'行专业为空')
+								  throw new Error('项目组成员第'+k+'行专业为空')
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].content)){
+								  this.loading = false
+								  this.$message.error('项目组成员第'+k+'行本人负责内容为空')
+								  throw new Error('项目组成员第'+k+'行本人负责内容为空')
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].opinion)){
+								  this.loading = false
+								  this.$message.error('项目组成员第'+k+'行审核意见为空')
+								  throw new Error('项目组成员第'+k+'行审核意见为空')
+							  }*/
+
+
+						  }
+					  }
+
+					  this.tableData.forEach(item=>{
+						  if (item.levelFlag === 2 && item.mustFlag === 1){
+							  if (item.children.length === 0){
+								  this.loading = false
+								  this.$message.error('文件未上传')
+								  throw new Error('文件未上传')
+							  }
+						  }
+					  })
+
 					  this.reportReviewService.saveFormReviewNew(this.inputForm).then(() => {
 						  this.$emit('refreshList')
 						  this.close()
@@ -674,6 +827,7 @@
       },
 		close () {
 			this.inputForm = {
+				reviewByName: '',
 				reviewNewId: '',
 				projectLevel: '',
 				memberName: '',
@@ -814,6 +968,15 @@
 				callback();
 			}
 		},
+		ziXunShouRuRange(rule, value, callback) {
+			if (!value || value.trim() === "") {
+				callback(new Error('造价咨询营业收入不能为空!'));
+			} else if (parseFloat(value) <= 0) {
+				callback(new Error('造价咨询营业收入必须大于0!'));
+			} else {
+				callback();
+			}
+		},
 		// 项目组成员下拉弹窗
 		userPullListForm (rowIndex) {
 			this.indexRow = rowIndex
@@ -832,7 +995,6 @@
 			}
 		},
 		showFile (row) {
-			console.log("showFile",row)
 			row.name = row.attachmentName
 			openWindowOnUrl(row)
 		},
@@ -851,26 +1013,22 @@
 		},
 		//测试按钮
 		openFileForm(id,typeId){
-			console.log('this.id', id )
 			this.$refs.fileForm.init("add", id,this.inputForm.projectId)
 		},
 		toHref (row) {
-			console.log("toHref",row)
 			toHref(row)
 		},
 		getFiles(){
-			projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id).then((data) => {
+			projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id,'').then((data) => {
 				this.tableData = data
 				this.tableKey = Math.random()
 			})
 
 		},
 		getProgramForUser (rows) {
-			console.log('rows', rows)
 			this.inputForm.detailInfos[this.indexRow].userId = rows[0].id
 			this.inputForm.detailInfos[this.indexRow].memberName = rows[0].name
 			this.inputForm.detailInfos[this.indexRow].enrollCertNo = rows[0].enrollCertNo
-
 			// 根据证书类型  获取字典值
 			let professionList = this.getProfessionList(rows[0].type)
 			professionList.forEach(item => {
@@ -885,18 +1043,70 @@
 		},
 		async insertEvent (type) {
 			if (type === 'detail') {
-				let d = {
-					memberName: '',
-					userId: '',
-					userRole: '咨询员',
-					enrollCertNo: '',
-					profession: '',
-				}
-				if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
-					this.inputForm.detailInfos = []
+
+				//根据项目等级来设置
+				if (this.inputForm.projectLevel === '1') {
+					let d = {
+						memberName: '',
+						userId: '',
+						userRole: '咨询员',
+						enrollCertNo: '',
+						profession: '',
+					}
+					if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+						this.inputForm.detailInfos = []
+					}
+					this.inputForm.detailInfos.push(d)
+					this.detailKey = Math.random()
+				} else if (this.inputForm.projectLevel === '2') {
+
+					if (this.commonJS.isEmpty(this.inputForm.reviewBy)) {
+						this.$message.error('请先选择审核人员!')
+						throw new Error('请先选择审核人员!')
+					}
+
+					if (this.inputForm.detailInfos.length  == 1) {
+						//查询陈红星的注册/资格证号,专业信息
+						this.reportReviewService.getUserInfo(this.inputForm.reviewBy).then((data) => {
+
+							let professionList = this.getProfessionList(data.professionType)
+							professionList.forEach(item => {
+								if (item.value == data.profession) {
+									data.profession = item.label
+								}
+							})
+
+							let d = {
+								memberName: data.memberName + '(' + this.inputForm.reviewByName + '代)',
+								userId: data.id,
+								userRole: '技术负责人',
+								enrollCertNo: data.enrollCertNo,
+								profession: data.profession,
+							}
+							if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+								this.inputForm.detailInfos = []
+							}
+							this.inputForm.detailInfos.push(d)
+							this.detailKey = Math.random()
+						}).catch(() => {
+
+						})
+					} else {
+						let d = {
+							memberName: '',
+							userId: '',
+							userRole: '咨询员',
+							enrollCertNo: '',
+							profession: '',
+						}
+						if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+							this.inputForm.detailInfos = []
+						}
+						this.inputForm.detailInfos.push(d)
+						this.detailKey = Math.random()
+					}
+
 				}
-				this.inputForm.detailInfos.push(d)
-				this.detailKey = Math.random()
 			}
 		},
     }

File diff suppressed because it is too large
+ 1001 - 0
src/views/cw/reportManagement/ReportManagementFormNew1.vue


File diff suppressed because it is too large
+ 1118 - 0
src/views/cw/reportManagement/ReportManagementFormNew2.vue


File diff suppressed because it is too large
+ 1081 - 0
src/views/cw/reportManagement/ReportManagementFormNew3.vue


+ 613 - 176
src/views/cw/reportManagement/ReportManagementList.vue

@@ -1,74 +1,62 @@
 <template>
   <div class="page">
-    <el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
-      <!-- 搜索框-->
-      <el-form-item label="项目编号" prop="projectNumber">
-        <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
-      </el-form-item>
-      <el-form-item label="项目名称" prop="projectName">
-        <el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
-      </el-form-item>
-      <el-form-item v-if="showHideItem" label="项目经理1" prop="projectMasterName">
-        <UserSelect :limit='1' :modelValue="searchForm.projectMasterName" @update:modelValue='(value, label) => {searchForm.projectMasterName = value}'></UserSelect>
-      </el-form-item>
-      <el-form-item v-if="showHideItem" label="项目经理2" prop="realHeaderName">
-        <UserSelect :limit='1' :modelValue="searchForm.realHeaderName" @update:modelValue='(value, label) => {searchForm.realHeaderName = value}'></UserSelect>
-      </el-form-item>
+	  <el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+		  <!-- 搜索框-->
+		  <el-form-item v-if="showHideItem" label="报告文号" prop="reportNo">
+			  <el-input v-model="searchForm.reportNo" placeholder="请输入报告文号" clearable></el-input>
+		  </el-form-item>
+		  <el-form-item label="项目编号" prop="projectNumber">
+			  <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+		  </el-form-item>
+		  <el-form-item label="项目名称" prop="projectName">
+			  <el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+		  </el-form-item>
 
-		<el-form-item v-if="showHideItem" label="创建人" prop="createBy">
-        <SelectUserTree
-          ref="companyTree"
-          :props="{
+		  <el-form-item v-if="showHideItem" label="创建人" prop="createBy">
+			  <SelectUserTree
+				  ref="companyTree"
+				  :props="{
                   value: 'id',             // ID字段名
                   label: 'name',         // 显示名称
                   children: 'children'    // 子级字段名
                 }"
-          :url="`/system-server/sys/user/treeUserDataAllOffice?type=2`"
-          :value="searchForm.createBy"
-          :clearable="true"
-		  size="default"
-          :accordion="true"
-          @getValue="(value) => {searchForm.createBy=value}"/>
-      </el-form-item>
+				  :url="`/system-server/sys/user/treeUserDataAllOffice?type=2`"
+				  :value="searchForm.createBy"
+				  :clearable="true"
+				  size="default"
+				  :accordion="true"
+				  @getValue="(value) => {searchForm.createBy=value}"/>
+		  </el-form-item>
 
-      <el-form-item v-if="showHideItem" label="报告文号" prop="reportNo">
-        <el-input v-model="searchForm.reportNo" placeholder="请输入报告文号" clearable></el-input>
-      </el-form-item>
-      <el-form-item v-if="showHideItem" label="审计收费(税前、元)" prop="contractAmounts">
-        <InputNumber :disabled="false" :precision="num" :value="searchForm.contractAmounts"
-					 @changefrom="(val)=>{searchForm.contractAmounts[0]=val}"
-					 @changeto="(val)=>{searchForm.contractAmounts[1]=val}"
-		></InputNumber>
-      </el-form-item>
-      <el-form-item v-if="showHideItem" label="报备类型" prop="filingType">
-        <el-select v-model="searchForm.filingType" placeholder="请选择" style="width:100%;">
-          <el-option
-            v-for="item in $dictUtils.getDictList('cw_work_client_report_type')"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item v-if="showHideItem" label="创建时间" prop="contractDates">
-        <el-date-picker
-          placement="bottom-start"
-          format="YYYY-MM-DD HH:mm:ss"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          v-model="searchForm.contractDates"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期">
-        </el-date-picker>
-      </el-form-item>
+		  <el-form-item v-if="showHideItem" label="项目类别" prop="projectCategory">
+			  <el-select v-model="searchForm.projectCategory" placeholder="请选择" style="width:100%;">
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('program_engineering_consultation_type')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+		  </el-form-item>
+		  <el-form-item v-if="showHideItem" label="创建时间" prop="contractDates">
+			  <el-date-picker
+				  placement="bottom-start"
+				  format="YYYY-MM-DD HH:mm:ss"
+				  value-format="YYYY-MM-DD HH:mm:ss"
+				  v-model="searchForm.contractDates"
+				  type="datetimerange"
+				  range-separator="至"
+				  start-placeholder="开始日期"
+				  end-placeholder="结束日期">
+			  </el-date-picker>
+		  </el-form-item>
 
-      <el-form-item>
-        <el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
-        <el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
-        <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
-      </el-form-item>
-    </el-form>
+		  <el-form-item>
+			  <el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+			  <el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+			  <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+		  </el-form-item>
+	  </el-form>
     <div class="jp-table top" style="">
       <vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
         <template #buttons>
@@ -111,30 +99,58 @@
           :data="dataList"
           :checkbox-config="{}">
           <vxe-column type="seq" width="60" title="序号"></vxe-column>
-          <vxe-column width="100" align="center" title="单据编号" field="documentNo">
-            <template #default="scope">
-              <el-link  type="primary" :underline="false" v-if="hasPermission('cwProjectReport:list')" @click="view(scope.row.id)">{{scope.row.documentNo}}</el-link>
-              <el-link  type="primary" :underline="false" v-else-if="hasPermission('cwProjectReport:list')"  @click="view(scope.row.id,)">{{scope.row.documentNo}}</el-link>
-              <span v-else>{{scope.row.documentNo}}</span>
-            </template>
-          </vxe-column>
+<!--          <vxe-column width="100" align="center" title="单据编号" field="documentNo">-->
+<!--            <template #default="scope">-->
+<!--              <el-link  type="primary" :underline="false" v-if="hasPermission('cwProjectReport:list')" @click="view(scope.row.id)">{{scope.row.documentNo}}</el-link>-->
+<!--              <el-link  type="primary" :underline="false" v-else-if="hasPermission('cwProjectReport:list')"  @click="view(scope.row.id,)">{{scope.row.documentNo}}</el-link>-->
+<!--              <span v-else>{{scope.row.documentNo}}</span>-->
+<!--            </template>-->
+<!--          </vxe-column>-->
           <vxe-column width="150" align="center" title="项目编号" field="projectNumber"></vxe-column>
-          <vxe-column min-width="220" align="center" title="项目名称" field="projectName"></vxe-column>
-		  <vxe-column width="170" align="center" title="报告文号" field="reportNo"></vxe-column>
-			<vxe-column width="80" align="center" title="创建人" field="userName"></vxe-column>
-          <vxe-column width="120" align="center" title="报告所属部门" field="departmentName"></vxe-column>
-          <vxe-column width="100" align="center" title="项目经理1" field="projectMasterName"></vxe-column>
-          <vxe-column width="100" align="center" title="项目经理2" field="projectMaster2Name"></vxe-column>
-			<vxe-column min-width="160" align="center" title="客户名称" field="servedUnitName"></vxe-column>
+          <vxe-column min-width="220" align="center" title="项目名称" field="projectName">
+			  <template #default="scope">
+				  <el-link  type="primary" :underline="false" @click="projectView(scope.row.projectId)">{{scope.row.projectName}}</el-link>
+			  </template>
+		  </vxe-column>
+		  <vxe-column width="170" align="center" title="报告号" field="reportNo"></vxe-column>
+		  <vxe-column width="170" align="center" title="合同名称" field="contractName">
+			  <template #default="scope">
+				  <el-link  type="primary" :underline="false" @click="contractView(scope.row.contractId)">{{scope.row.contractName}}</el-link>
+			  </template>
+		  </vxe-column>
+		  <vxe-column width="170" align="center" title="委托方" field="clientName"></vxe-column>
+			<vxe-column width="80" align="center" title="登记人" field="userName"></vxe-column>
+			<vxe-column width="110" align="center" title="复核通过时间" field="checkCompleteTime"></vxe-column>
           <vxe-column width="110" align="center" title="创建时间" field="createTime"></vxe-column>
 			<vxe-column min-width="130" title="项目等级" field="projectLevel" align="center">
 				<template #default="scope">
 					{{$dictUtils.getDictLabel('cw_project_level', scope.row.projectLevel, '')}}
 				</template>
 			</vxe-column>
-			<vxe-column min-width="100" title="状态" fixed="right" align="center" field="reviewStatus">
+			<vxe-column min-width="130" title="质量复核" fixed="right" align="center" field="reviewStatus">
+				<template #default="scope">
+					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('quality_status_info', scope.row.reviewStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("quality_status", scope.row.reviewStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="100" title="报告签发" fixed="right" align="center" field="signAndIssueStatus">
 				<template #default="scope">
-					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.reviewStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.reviewStatus, '未开始')}} </el-button>
+					<el-button @click="signAndIssueDetail(scope.row)"
+							   :type="$dictUtils.getDictLabel('status_info', scope.row.signAndIssueStatus, '')"
+							   effect="dark">
+						{{$dictUtils.getDictLabel("status", scope.row.signAndIssueStatus, '未开始')}}
+					</el-button>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="130" title="电子/超期天数" fixed="right" align="center" field="onlineArchivingStatus">
+				<template #default="scope">
+					<el-button @click="pushOnlineDetail(scope.row)" :type="$dictUtils.getDictLabel('online_status_info', scope.row.onlineArchivingStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("online_status", scope.row.onlineArchivingStatus, '未开始')}} </el-button>
+					<span v-if="scope.row.onlineOverdueDates > 0">{{scope.row.onlineOverdueDates}}天</span>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="100" title="纸质/超期天数" fixed="right" align="center" field="paperArchivingStatus">
+				<template #default="scope">
+					<el-button @click="pushPaperDetail(scope.row)" :type="$dictUtils.getDictLabel('online_status_info', scope.row.paperArchivingStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("online_status", scope.row.paperArchivingStatus, '未开始')}} </el-button>
+					<span v-if="scope.row.paperOverdueDates > 0">{{scope.row.paperOverdueDates}}天</span>
 				</template>
 			</vxe-column>
           <vxe-column title="操作" width="200px" fixed="right" align="center">
@@ -144,21 +160,35 @@
                 <el-button text type="primary" @click="del(scope.row.id,scope.row.projectId)">删除</el-button>
               </div>
 				<div v-else>
-					<el-button v-if="hasPermission('cwProjectReport:edit')&&
+					<!--<el-button v-if="hasPermission('cwProjectReport:edit')&&
                               (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId))&&
-                              scope.row.status === '5'"
+                              scope.row.status === '5' && scope.row.reviewStatus === '5'"
 							   text type="primary"  @click="edit(scope.row.id)">修改</el-button>
 
 					<el-button v-else-if="hasPermission('cwProjectReport:del')&&
                               (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId))&&
-                              scope.row.status === '5'"
-							   text type="primary" @click="del(scope.row.id,scope.row.projectId)">删除</el-button>
-					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '0' || scope.row.reviewStatus === '1' || scope.row.reviewStatus === '3' || scope.row.reviewStatus === undefined || scope.row.reviewStatus === '')" text type="primary" @click="pushF(scope.row)">复核</el-button>
-					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '2'" text type="primary" @click="rebackF(scope.row)">撤回复核申请</el-button>
+                              scope.row.status === '5' && scope.row.reviewStatus === '5'"
+							   text type="primary" @click="del(scope.row.id,scope.row.projectId)">删除</el-button>-->
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '0' || scope.row.reviewStatus === '1' || scope.row.reviewStatus === '6' || scope.row.reviewStatus === '3' || scope.row.reviewStatus === undefined || scope.row.reviewStatus === '')" text type="primary" @click="pushF(scope.row)">复核</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '2'" text type="primary" @click="rebackF(scope.row)">撤回复核</el-button>
 					<!--              审核-->
-					<el-button v-if="scope.row.reviewStatus==='2' && checkIsAuditReview(scope.row)" text type="primary" @click="examineReview(scope.row)">审核</el-button>
+<!--					<el-button v-if="scope.row.reviewStatus==='2' && checkIsAuditReview(scope.row)" text type="primary" @click="examineReview(scope.row)">审核</el-button>-->
 					<!--              被驳回后当前申请人重新调整-->
 					<el-button v-if="hasPermission('cw:workContract:filed')&&scope.row.createById === $store.state.user.id&&scope.row.reviewStatus === '4'" text type="primary" @click="adjustReview(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '5' || scope.row.reviewStatus === '7')
+					&& (scope.row.signAndIssueStatus === '0' || scope.row.signAndIssueStatus === '1' || scope.row.signAndIssueStatus === '3' || scope.row.signAndIssueStatus === undefined || scope.row.signAndIssueStatus === '') && scope.row.projectLevel !== '2'" text type="primary" @click="pushSignAndIssue(scope.row)">报告签发</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.signAndIssueStatus === '2'" text type="primary" @click="rebackSignAndIssue(scope.row)">撤回签发</el-button>
+					<el-button v-if="hasPermission('signAndIssue:del') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && (scope.row.signAndIssueStatus === '1' || scope.row.signAndIssueStatus === '3' || scope.row.signAndIssueStatus === '4')" text type="primary" @click="deleteSignAndIssue(scope.row)">删除签发</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed')&&scope.row.createById === $store.state.user.id&&scope.row.reviewStatus === '5'&&scope.row.signAndIssueStatus === '4'" text type="primary" @click="adjustSignAndIssue(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '5' || scope.row.reviewStatus === '7') && (scope.row.signAndIssueStatus === '5' || scope.row.projectLevel === '2')
+							   && (scope.row.onlineArchivingStatus === '0' || scope.row.onlineArchivingStatus === '1' || scope.row.onlineArchivingStatus === '3' || scope.row.onlineArchivingStatus === undefined || scope.row.onlineArchivingStatus === '' || scope.row.onlineArchivingStatus === '6')"
+							   text type="primary" @click="pushOnlineArchiving(scope.row)">线上归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '2'" text type="primary" @click="rebackPushOnline(scope.row)">撤回线上归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '4'" text type="primary" @click="adjustPushOnline(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && scope.row.reviewStatus === '5' && (scope.row.onlineArchivingStatus === '5' || scope.row.onlineArchivingStatus === '7')
+					&& (scope.row.paperArchivingStatus === '0' || scope.row.paperArchivingStatus === '1' || scope.row.paperArchivingStatus === '3' || scope.row.paperArchivingStatus === undefined || scope.row.paperArchivingStatus === '' || scope.row.paperArchivingStatus === '6')" text type="primary" @click="pushPaperArchiving(scope.row)">纸质归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '5' && scope.row.paperArchivingStatus === '2'" text type="primary" @click="rebackPushPaper(scope.row)">撤回纸质归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '5' && scope.row.paperArchivingStatus === '4'" text type="primary" @click="adjustPushPaper(scope.row)">驳回调整</el-button>
 				</div>
             </template>
           </vxe-column>
@@ -176,14 +206,20 @@
     </div>
     <ReportManagementForm ref="reportManagementForm" @refreshList="refreshList"></ReportManagementForm>
     <ReportManagementAddForm ref="reportManagementAddForm" @refreshList="refreshList"></ReportManagementAddForm>
-
+	  <ContractAddForm ref="contractAddForm" @refreshDataList="refreshList"></ContractAddForm>
+	  <ProjectRecordsInfoForm ref="projectRecordsInfoForm" @refreshList="refreshList"></ProjectRecordsInfoForm>
   </div>
 </template>
 
 <script>
+	import ContractAddForm from '@/views/cw/workContract/contractRegisitionAddForm/ContractAddForm'
+	import ProjectRecordsInfoForm from './ProjectRecordsInfoForm'
   import InputNumber from '@/views/cw/workContract/InputNumber.vue'
   import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
   import ReportReviewService from '@/api/cw/reportManagement/ReportReviewService'
+  import ReportSignAndIssueService from '@/api/cw/reportManagement/ReportSignAndIssueService'
+  import reportOnlineArchivingService from '@/api/cw/reportManagement/ReportOnlineArchivingService'
+  import reportPaperArchivingService from '@/api/cw/reportManagement/reportPaperArchivingService'
   import ReportNumberApplyService from '@/api/cw/reportManagement/ReportNumberApplyService'
   import taskService from '@/api/flowable/TaskService'
   import processService from '@/api/flowable/ProcessService'
@@ -202,20 +238,14 @@
         showHideIcon: 'el-icon-arrow-down',
         showHideName: '展示',
         num: 0,
-        searchForm: {
-          contractAmounts: [],
-          reportNo: '',
-          status1: '',
-          projectNumber: '',
-          projectName: '',
-          projectMasterId: '',
-          projectMaster2Id: '',
-          createBy: '',
-          contractDates: [],
-          projectMasterName: '', // 项目经理1
-          realHeaderName: '', // 项目经理2
-          filingType: ''
-        },
+		  searchForm: {
+			  reportNo: '',
+			  projectNumber: '',
+			  projectName: '',
+			  createBy: '',
+			  contractDates: [],
+			  projectCategory: ''
+		  },
         dataList: [],
         tablePage: {
           total: 0,
@@ -227,6 +257,14 @@
         loading: false,
         processDefinitionAuditId: '',
         procDefAuditKey: '',
+		  signAndIssueProcDefId: '',
+		  signAndIssueProcDefKey: '',
+		  paperArchivingProcDefId: '',
+		  paperArchivingProcDefKey: '',
+		  onlineArchivingProcDefIdA: '',
+		  onlineArchivingProcDefKeyA: '',
+		  onlineArchivingProcDefIdB: '',
+		  onlineArchivingProcDefKeyB: '',
 		processDefinitionAuditIdAndSId: '',
         procDefAuditKeyAndSId: '',
         isAdmin: false,
@@ -249,12 +287,16 @@
       }
     },
     reportReviewService: null,
+	  reportSignAndIssueService: null,
 	  reportNumberApplyService: null,
     created () {
       this.reportReviewService = new ReportReviewService()
+      this.reportSignAndIssueService = new ReportSignAndIssueService()
       this.reportNumberApplyService = new ReportNumberApplyService()
     },
     components: {
+		ContractAddForm,
+		ProjectRecordsInfoForm,
       ReportManagementForm,
       ReportManagementAddForm,
       SelectUserTree,
@@ -309,6 +351,14 @@
       view (id) {
         this.$refs.reportManagementForm.init('view', id, '报告审核单下载')
       },
+		// 查看合同信息
+	  contractView (id) {
+			this.$refs.contractAddForm.init('view', id)
+      },
+		// 查看项目信息
+	  projectView (id) {
+			this.$refs.projectRecordsInfoForm.init('view', id)
+      },
       // 查询当前用户是否是管理员用户
       checkIsAdmin () {
         userService.is().then((data) => {
@@ -345,6 +395,30 @@
             this.procDefAuditKey = data.key
           }
         })
+		  processService.getByName('报告签发').then((data) => {
+          if (!this.commonJS.isEmpty(data.id)) {
+            this.signAndIssueProcDefId = data.id
+            this.signAndIssueProcDefKey = data.key
+          }
+        })
+		  processService.getByName('报告-线上归档(A)').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.onlineArchivingProcDefIdA = data.id
+				  this.onlineArchivingProcDefKeyA = data.key
+			  }
+		  })
+		  processService.getByName('报告-线上归档(B)').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.onlineArchivingProcDefIdB = data.id
+				  this.onlineArchivingProcDefKeyB = data.key
+			  }
+		  })
+		  processService.getByName('报告-纸质归档').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.paperArchivingProcDefId = data.id
+				  this.paperArchivingProcDefKey = data.key
+			  }
+		  })
       },
       // 当前页
       currentChangeHandle ({ currentPage, pageSize }) {
@@ -394,70 +468,40 @@
 			} else {
 				title = ' ' + row.documentNo + ' - ' + row.projectName
 			}
-			console.log('row', row)
 
-			if (this.commonJS.isEmpty(row.newType) || row.newType !== '1'){
-
-				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告复核]'
-				let status = 'startAndHold'
-				if (row.reviewStatus === '3') {
-					status = 'startAndClose'
-				} else if (row.reviewStatus === '4') {
-					status = 'reapplyFlag'
-				}
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告复核]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
 
-				taskService.getTaskDef({ procDefId: this.processDefinitionAuditId,
-					businessId: row.id,
-					businessTable: 'cw_project_report_review_new'}).then((data) => {
-					this.$router.push({
-						path: '/flowable/task/TaskForm',
-						query: {
-							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-							procDefId: this.processDefinitionAuditId,
-							procDefKey: this.procDefAuditKey,
-							title: title,
-							formType: data.formType,
-							formUrl: data.formUrl,
-							formTitle: processTitle,
-							businessTable: 'cw_project_report_review_new',
-							businessId: row.id,
-							isShow: 'false',
-							status: status,
-							routePath: '/cw/reportManagement/ReportManagementList'
-						}
-					})
-				})
-			} else if ( row.newType === '1') {
-				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-复核及签章]'
-				let status = 'startAndHold'
-				if (row.reviewStatus === '3') {
-					status = 'startAndClose'
-				} else if (row.reviewStatus === '4') {
-					status = 'reapplyFlag'
-				}
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+			}
 
-				taskService.getTaskDef({ procDefId: this.processDefinitionAuditIdAndSId,
-					businessId: row.id,
-					businessTable: 'cw_project_report_review_new'}).then((data) => {
-					this.$router.push({
-						path: '/flowable/task/TaskForm',
-						query: {
-							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-							procDefId: this.processDefinitionAuditIdAndSId,
-							procDefKey: this.procDefAuditKeyAndSId,
-							title: title,
-							formType: data.formType,
-							formUrl: data.formUrl,
-							formTitle: processTitle,
-							businessTable: 'cw_project_report_review_new',
-							businessId: row.id,
-							isShow: 'false',
-							status: status,
-							routePath: '/cw/reportManagement/ReportManagementList'
-						}
-					})
+			taskService.getTaskDef({ procDefId: this.processDefinitionAuditId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_review_new'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionAuditId,
+						procDefKey: this.procDefAuditKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_review_new',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList'
+					}
 				})
-			}
+			})
 		},
 		// 审核或重新调整跳转
 		todoReview (row) {
@@ -493,23 +537,26 @@
 		},
 		// 流程详情
 		detail (row) {
-			taskService.getTaskDef({
-				procInsId: row.procInsId3,
-				procDefId: this.processDefinitionAuditId
-			}).then((data) => {
-				this.$router.push({
-					path: '/flowable/task/TaskFormDetail',
-					query: {
-						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						isShow: 'false',
-						readOnly: true,
-						title: '复核流程详情',
-						formTitle: '复核流程详情',
-						businessId: row.id,
-						status: 'reback'
-					}
+			if (!this.commonJS.isEmpty(row.reviewStatus) && row.reviewStatus !== '0') {
+				taskService.getTaskDef({
+					procInsId: row.procInsId3,
+					procDefId: this.processDefinitionAuditId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '复核流程详情',
+							formTitle: '复核流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
 				})
-			})
+			}
+
 		},
 		// 撤回报告复核
 		rebackF (row) {
@@ -544,6 +591,396 @@
 				}
 			})
 		},
+
+		pushSignAndIssue (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告签发]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+			}
+
+			taskService.getTaskDef({ procDefId: this.signAndIssueProcDefId,
+				businessId: row.signAndIssueId,
+				businessTable: 'cw_project_report_sign_and_issue'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.signAndIssueProcDefId,
+						procDefKey: this.signAndIssueProcDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_sign_and_issue',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList'
+					}
+				})
+			})
+		},
+		// 报告签发流程详情
+		signAndIssueDetail (row) {
+			if (!this.commonJS.isEmpty(row.signAndIssueStatus) && row.signAndIssueStatus !== '0') {
+				taskService.getTaskDef({
+					procInsId: row.procInsId4,
+					procDefId: this.signAndIssueProcDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '报告签发流程详情',
+							formTitle: '报告签发流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回报告签发
+		rebackSignAndIssue (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await this.reportSignAndIssueService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId4).then((data) => {
+							let form = {status: '3', id: row.signAndIssueId}
+							this.reportSignAndIssueService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 报告签发驳回调整
+		adjustSignAndIssue (row) {
+			this.reportSignAndIssueService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoSignAndIssue(row)
+				}
+			})
+		},
+		// 审核或重新调整跳转
+		todoSignAndIssue (row) {
+      	console.log('row', row)
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.signAndIssueTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		// 删除签发
+		deleteSignAndIssue (row) {
+			this.$confirm(`确定要删除该报告签发吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				this.reportSignAndIssueService.delete(row.signAndIssueId).then((data) => {
+					this.$message.success(data)
+					this.refreshList()
+					this.loading = false
+				})
+			})
+		},
+		pushOnlineArchiving (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[报告-线上归档]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			let procDefId = ''
+			let procDefKey = ''
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+				procDefId = this.onlineArchivingProcDefIdA
+				procDefKey = this.onlineArchivingProcDefKeyA
+			} else if (row.projectLevel === '2'){
+				status = 'startAndClose'
+				procDefId = this.onlineArchivingProcDefIdB
+				procDefKey = this.onlineArchivingProcDefKeyB
+			}
+			console.log('row', row)
+
+
+			taskService.getTaskDef({ procDefId: procDefId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_online_archiving'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: procDefId,
+						procDefKey: procDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_online_archiving',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList'
+					}
+				})
+			})
+		},
+		// 线上归档流程详情
+		pushOnlineDetail (row) {
+			if (!this.commonJS.isEmpty(row.onlineArchivingStatus) && row.onlineArchivingStatus !== '0') {
+				let procDefId = ''
+				if (row.projectLevel === '1') {
+					procDefId = this.onlineArchivingProcDefIdA
+				} else if (row.projectLevel === '2'){
+					procDefId = this.onlineArchivingProcDefIdB
+				}
+				taskService.getTaskDef({
+					procInsId: row.onlineArchivingProcInsId,
+					procDefId: procDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '线上归档流程详情',
+							formTitle: '线上归档流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回线上归档
+		rebackPushOnline (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await reportOnlineArchivingService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.onlineArchivingProcInsId).then((data) => {
+							let form = {status: '3', id: row.onlineArchivingId}
+							reportOnlineArchivingService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 在线归档驳回调整
+		adjustPushOnline (row) {
+			reportOnlineArchivingService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoPushOnline(row)
+				}
+			})
+		},
+		todoPushOnline (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.onlineArchivingTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		pushPaperArchiving (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[报告-线上归档]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			let procDefId = this.paperArchivingProcDefId
+			let procDefKey = this.paperArchivingProcDefKey
+			status = 'startAndClose'
+
+
+			taskService.getTaskDef({ procDefId: procDefId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_paper_archiving'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: procDefId,
+						procDefKey: procDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_paper_archiving',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList'
+					}
+				})
+			})
+		},
+		// 纸质归档流程详情
+		pushPaperDetail (row) {
+			if (!this.commonJS.isEmpty(row.paperArchivingStatus) && row.paperArchivingStatus !== '0') {
+				let procDefId = this.paperArchivingProcDefId
+				taskService.getTaskDef({
+					procInsId: row.paperArchivingProcInsId,
+					procDefId: procDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '纸质归档流程详情',
+							formTitle: '纸质归档流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回纸质归档
+		rebackPushPaper (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await reportPaperArchivingService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.paperArchivingProcInsId).then((data) => {
+							let form = {status: '3', id: row.paperArchivingId}
+							reportPaperArchivingService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 纸质归档驳回调整
+		adjustPushPaper (row) {
+			reportPaperArchivingService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoPushPaper(row)
+				}
+			})
+		},
+		todoPushPaper (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.onlineArchivingTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
     }
   }
 </script>

+ 986 - 0
src/views/cw/reportManagement/ReportManagementList2.vue

@@ -0,0 +1,986 @@
+<template>
+  <div class="page">
+    <el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+      <!-- 搜索框-->
+		<el-form-item v-if="showHideItem" label="报告文号" prop="reportNo">
+			<el-input v-model="searchForm.reportNo" placeholder="请输入报告文号" clearable></el-input>
+		</el-form-item>
+      <el-form-item label="项目编号" prop="projectNumber">
+        <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+      </el-form-item>
+      <el-form-item label="项目名称" prop="projectName">
+        <el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+      </el-form-item>
+
+		<el-form-item v-if="showHideItem" label="创建人" prop="createBy">
+        <SelectUserTree
+          ref="companyTree"
+          :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+          :url="`/system-server/sys/user/treeUserDataAllOffice?type=2`"
+          :value="searchForm.createBy"
+          :clearable="true"
+		  size="default"
+          :accordion="true"
+          @getValue="(value) => {searchForm.createBy=value}"/>
+      </el-form-item>
+
+      <el-form-item v-if="showHideItem" label="项目类别" prop="projectCategory">
+        <el-select v-model="searchForm.projectCategory" placeholder="请选择" style="width:100%;">
+          <el-option
+            v-for="item in $dictUtils.getDictList('program_engineering_consultation_type')"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="showHideItem" label="创建时间" prop="contractDates">
+        <el-date-picker
+          placement="bottom-start"
+          format="YYYY-MM-DD HH:mm:ss"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          v-model="searchForm.contractDates"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+        <el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+        <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="jp-table top" style="">
+      <vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
+        <template #buttons>
+<!--          <el-button v-if="hasPermission('cw_work_client:info:add')" type="primary" icon="el-icon-plus" @click="start()">新建</el-button>-->
+        </template>
+		  <template #tools>
+			  <vxe-button
+				  text
+				  type="primary"
+				  :title="searchVisible ? '收起检索' : '展开检索'"
+				  icon="vxe-icon-search"
+				  class="tool-btn"
+				  @click="searchVisible = !searchVisible"
+			  ></vxe-button>
+		  </template>
+      </vxe-toolbar>
+      <div style="height: calc(100% - 90px)">
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="auto"
+          :loading="loading"
+          ref="clientTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :print-config="{}"
+          :export-config="{
+                    remote: true,
+                    filename: `报告信息${moment(new Date()).format('YYYY-MM-DD')}`,
+                    sheetName: '报告信息',
+                    exportMethod: exportMethod,
+                    types: ['xlsx'],
+                    modes: ['current', 'selected', 'all']
+                  }"
+          :menu-config="{}"
+          @sort-change="sortChangeHandle"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :checkbox-config="{}">
+          <vxe-column type="seq" width="60" title="序号"></vxe-column>
+<!--          <vxe-column width="100" align="center" title="单据编号" field="documentNo">-->
+<!--            <template #default="scope">-->
+<!--              <el-link  type="primary" :underline="false" v-if="hasPermission('cwProjectReport:list')" @click="view(scope.row.id)">{{scope.row.documentNo}}</el-link>-->
+<!--              <el-link  type="primary" :underline="false" v-else-if="hasPermission('cwProjectReport:list')"  @click="view(scope.row.id,)">{{scope.row.documentNo}}</el-link>-->
+<!--              <span v-else>{{scope.row.documentNo}}</span>-->
+<!--            </template>-->
+<!--          </vxe-column>-->
+          <vxe-column width="150" align="center" title="项目编号" field="projectNumber"></vxe-column>
+          <vxe-column min-width="220" align="center" title="项目名称" field="projectName">
+			  <template #default="scope">
+				  <el-link  type="primary" :underline="false" @click="projectView(scope.row.projectId)">{{scope.row.projectName}}</el-link>
+			  </template>
+		  </vxe-column>
+		  <vxe-column width="170" align="center" title="报告号" field="reportNo"></vxe-column>
+		  <vxe-column width="170" align="center" title="合同名称" field="contractName">
+			  <template #default="scope">
+				  <el-link  type="primary" :underline="false" @click="contractView(scope.row.contractId)">{{scope.row.contractName}}</el-link>
+			  </template>
+		  </vxe-column>
+		  <vxe-column width="170" align="center" title="委托方" field="clientName"></vxe-column>
+			<vxe-column width="80" align="center" title="登记人" field="userName"></vxe-column>
+			<vxe-column width="110" align="center" title="复核通过时间" field="checkCompleteTime"></vxe-column>
+          <vxe-column width="110" align="center" title="创建时间" field="createTime"></vxe-column>
+			<vxe-column min-width="130" title="项目等级" field="projectLevel" align="center">
+				<template #default="scope">
+					{{$dictUtils.getDictLabel('cw_project_level', scope.row.projectLevel, '')}}
+				</template>
+			</vxe-column>
+			<vxe-column min-width="130" title="质量复核" fixed="right" align="center" field="reviewStatus">
+				<template #default="scope">
+					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('quality_status_info', scope.row.reviewStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("quality_status", scope.row.reviewStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="100" title="报告签发" fixed="right" align="center" field="signAndIssueStatus">
+				<template #default="scope">
+					<el-button @click="signAndIssueDetail(scope.row)"
+							   :type="$dictUtils.getDictLabel('status_info', scope.row.signAndIssueStatus, '')"
+							   effect="dark">
+						{{$dictUtils.getDictLabel("status", scope.row.signAndIssueStatus, '未开始')}}
+					</el-button>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="130" title="电子/超期天数" fixed="right" align="center" field="onlineArchivingStatus">
+				<template #default="scope">
+					<el-button @click="pushOnlineDetail(scope.row)" :type="$dictUtils.getDictLabel('online_status_info', scope.row.onlineArchivingStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("online_status", scope.row.onlineArchivingStatus, '未开始')}} </el-button>
+					<span v-if="scope.row.onlineOverdueDates > 0">{{scope.row.onlineOverdueDates}}天</span>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="100" title="纸质/超期天数" fixed="right" align="center" field="paperArchivingStatus">
+				<template #default="scope">
+					<el-button @click="pushPaperDetail(scope.row)" :type="$dictUtils.getDictLabel('online_status_info', scope.row.paperArchivingStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("online_status", scope.row.paperArchivingStatus, '未开始')}} </el-button>
+					<span v-if="scope.row.paperOverdueDates > 0">{{scope.row.paperOverdueDates}}天</span>
+				</template>
+			</vxe-column>
+          <vxe-column title="操作" width="200px" fixed="right" align="center">
+            <template  #default="scope">
+              <div v-if="isAdmin">
+                <el-button text type="primary"  @click="edit(scope.row.id)">修改</el-button>
+                <el-button text type="primary" @click="del(scope.row.id,scope.row.projectId)">删除</el-button>
+              </div>
+				<div v-else>
+					<!--<el-button v-if="hasPermission('cwProjectReport:edit')&&
+                              (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId))&&
+                              scope.row.status === '5' && scope.row.reviewStatus === '5'"
+							   text type="primary"  @click="edit(scope.row.id)">修改</el-button>
+
+					<el-button v-else-if="hasPermission('cwProjectReport:del')&&
+                              (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId))&&
+                              scope.row.status === '5' && scope.row.reviewStatus === '5'"
+							   text type="primary" @click="del(scope.row.id,scope.row.projectId)">删除</el-button>-->
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '0' || scope.row.reviewStatus === '1' || scope.row.reviewStatus === '6' || scope.row.reviewStatus === '3' || scope.row.reviewStatus === undefined || scope.row.reviewStatus === '')" text type="primary" @click="pushF(scope.row)">复核</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '2'" text type="primary" @click="rebackF(scope.row)">撤回复核</el-button>
+					<!--              审核-->
+<!--					<el-button v-if="scope.row.reviewStatus==='2' && checkIsAuditReview(scope.row)" text type="primary" @click="examineReview(scope.row)">审核</el-button>-->
+					<!--              被驳回后当前申请人重新调整-->
+					<el-button v-if="hasPermission('cw:workContract:filed')&&scope.row.createById === $store.state.user.id&&scope.row.reviewStatus === '4'" text type="primary" @click="adjustReview(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '5' || scope.row.reviewStatus === '7')
+					&& (scope.row.signAndIssueStatus === '0' || scope.row.signAndIssueStatus === '1' || scope.row.signAndIssueStatus === '3' || scope.row.signAndIssueStatus === undefined || scope.row.signAndIssueStatus === '') && scope.row.projectLevel !== '2'" text type="primary" @click="pushSignAndIssue(scope.row)">报告签发</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.signAndIssueStatus === '2'" text type="primary" @click="rebackSignAndIssue(scope.row)">撤回签发</el-button>
+					<el-button v-if="hasPermission('signAndIssue:del') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && (scope.row.signAndIssueStatus === '1' || scope.row.signAndIssueStatus === '3' || scope.row.signAndIssueStatus === '4')" text type="primary" @click="deleteSignAndIssue(scope.row)">删除签发</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed')&&scope.row.createById === $store.state.user.id&&scope.row.reviewStatus === '5'&&scope.row.signAndIssueStatus === '4'" text type="primary" @click="adjustSignAndIssue(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && (scope.row.reviewStatus === '5' || scope.row.reviewStatus === '7') && (scope.row.signAndIssueStatus === '5' || scope.row.projectLevel === '2')
+							   && (scope.row.onlineArchivingStatus === '0' || scope.row.onlineArchivingStatus === '1' || scope.row.onlineArchivingStatus === '3' || scope.row.onlineArchivingStatus === undefined || scope.row.onlineArchivingStatus === '' || scope.row.onlineArchivingStatus === '6')"
+							   text type="primary" @click="pushOnlineArchiving(scope.row)">线上归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '2'" text type="primary" @click="rebackPushOnline(scope.row)">撤回线上归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '4'" text type="primary" @click="adjustPushOnline(scope.row)">驳回调整</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && scope.row.reviewStatus === '5' && (scope.row.onlineArchivingStatus === '5' || scope.row.onlineArchivingStatus === '7')
+					&& (scope.row.paperArchivingStatus === '0' || scope.row.paperArchivingStatus === '1' || scope.row.paperArchivingStatus === '3' || scope.row.paperArchivingStatus === undefined || scope.row.paperArchivingStatus === '' || scope.row.paperArchivingStatus === '6')" text type="primary" @click="pushPaperArchiving(scope.row)">纸质归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '5' && scope.row.paperArchivingStatus === '2'" text type="primary" @click="rebackPushPaper(scope.row)">撤回纸质归档</el-button>
+					<el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5'&& scope.row.reviewStatus === '5' && scope.row.onlineArchivingStatus === '5' && scope.row.paperArchivingStatus === '4'" text type="primary" @click="adjustPushPaper(scope.row)">驳回调整</el-button>
+				</div>
+            </template>
+          </vxe-column>
+        </vxe-table>
+        <vxe-pager
+          background
+          :current-page="tablePage.currentPage"
+          :page-size="tablePage.pageSize"
+          :total="tablePage.total"
+          :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+          :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+          @page-change="currentChangeHandle">
+        </vxe-pager>
+      </div>
+    </div>
+    <ReportManagementForm ref="reportManagementForm" @refreshList="refreshList"></ReportManagementForm>
+    <ReportManagementAddForm ref="reportManagementAddForm" @refreshList="refreshList"></ReportManagementAddForm>
+	  <ContractAddForm ref="contractAddForm" @refreshDataList="refreshList"></ContractAddForm>
+	  <ProjectRecordsInfoForm ref="projectRecordsInfoForm" @refreshList="refreshList"></ProjectRecordsInfoForm>
+  </div>
+</template>
+
+<script>
+	import ContractAddForm from '@/views/cw/workContract/contractRegisitionAddForm/ContractAddForm'
+	import ProjectRecordsInfoForm from './ProjectRecordsInfoForm'
+  import InputNumber from '@/views/cw/workContract/InputNumber.vue'
+  import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+  import ReportReviewService from '@/api/cw/reportManagement/ReportReviewService'
+  import ReportSignAndIssueService from '@/api/cw/reportManagement/ReportSignAndIssueService'
+  import reportOnlineArchivingService from '@/api/cw/reportManagement/ReportOnlineArchivingService'
+  import reportPaperArchivingService from '@/api/cw/reportManagement/reportPaperArchivingService'
+  import ReportNumberApplyService from '@/api/cw/reportManagement/ReportNumberApplyService'
+  import taskService from '@/api/flowable/TaskService'
+  import processService from '@/api/flowable/ProcessService'
+  import ReportManagementForm from './ReportManagementFormNew1'
+  import ReportManagementAddForm from './ReportManagementAddForm'
+  import pick from 'lodash.pick'
+  import userService from '@/api/sys/UserService'
+  import SelectUserTree from '@/views/utils/treeUserSelect'
+  import projectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
+  import UserSelect from '@/views/cw/workClientInfo/clientUserSelect'
+  export default {
+    data () {
+      return {
+      	searchVisible : true,
+        showHideItem: false,
+        showHideIcon: 'el-icon-arrow-down',
+        showHideName: '展示',
+        num: 0,
+        searchForm: {
+          reportNo: '',
+          projectNumber: '',
+          projectName: '',
+          createBy: '',
+          contractDates: [],
+			projectCategory: ''
+        },
+        dataList: [],
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        tableKey: '',
+        loading: false,
+        processDefinitionAuditId: '',
+        procDefAuditKey: '',
+		  signAndIssueProcDefId: '',
+		  signAndIssueProcDefKey: '',
+		  paperArchivingProcDefId: '',
+		  paperArchivingProcDefKey: '',
+		  onlineArchivingProcDefIdA: '',
+		  onlineArchivingProcDefKeyA: '',
+		  onlineArchivingProcDefIdB: '',
+		  onlineArchivingProcDefKeyB: '',
+		processDefinitionAuditIdAndSId: '',
+        procDefAuditKeyAndSId: '',
+        isAdmin: false,
+        create: '',
+        processDefinitionSId: '',
+        procDefSKey: '',
+        processDefinitionSId2: '',
+        procDefSKey2: '',
+        processDefinitionSId3: '',
+        procDefSKey3: '',
+        haveProjectIds: '',
+	    processDefinitionSigId: '',
+	    procDefSigKey: '',
+	    processDefinitionTakeNumberAuditId: '',
+	    procDefTakeNumberAuditKey: '',
+	    processDefinitionTakeNumberSId: '',
+	    procDefSTakeNumberKey: '',
+		  processDefinitionTakeNumberReviewAuditId: '',
+		  procDefTakeNumberReviewAuditKey: '',
+      }
+    },
+    reportReviewService: null,
+	  reportSignAndIssueService: null,
+	  reportNumberApplyService: null,
+    created () {
+      this.reportReviewService = new ReportReviewService()
+      this.reportSignAndIssueService = new ReportSignAndIssueService()
+      this.reportNumberApplyService = new ReportNumberApplyService()
+    },
+    components: {
+		ContractAddForm,
+		ProjectRecordsInfoForm,
+      ReportManagementForm,
+      ReportManagementAddForm,
+      SelectUserTree,
+      InputNumber,
+      UserSelect,
+    },
+    computed: {
+      userName () {
+        return this.$store.state.user.name
+      },
+      user () {
+        this.createName = this.$store.state.user.name
+        return this.$store.state.user
+      }
+    },
+    mounted () {
+		this.$nextTick(() => {
+			//将表格和工具栏进行关联
+			const $table = this.$refs.clientTable;
+			const $toolbar = this.$refs.toolbarRef;
+			$table.connect($toolbar);
+		})
+      this.refreshList()
+    },
+    activated () {
+      this.refreshList()
+    },
+    methods: {
+      showHide () {
+        if (this.showHideItem === false) {
+          this.showHideItem = true
+          this.showHideIcon = 'el-icon-arrow-up'
+          this.showHideName = '隐藏'
+        } else {
+          this.showHideItem = false
+          this.showHideIcon = 'el-icon-arrow-down'
+          this.showHideName = '展示'
+        }
+      },
+      // 新增
+      add () {
+        this.$refs.reportManagementForm.init('add', '', '')
+      },
+      // 修改
+      edit (id) {
+        id = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+          return item.id
+        })[0]
+        this.$refs.reportManagementForm.init('edit', id, '')
+      },
+      // 查看
+      view (id) {
+        this.$refs.reportManagementForm.init('view', id, '报告审核单下载')
+      },
+		// 查看合同信息
+	  contractView (id) {
+			this.$refs.contractAddForm.init('view', id)
+      },
+		// 查看项目信息
+	  projectView (id) {
+			this.$refs.projectRecordsInfoForm.init('view', id)
+      },
+      // 查询当前用户是否是管理员用户
+      checkIsAdmin () {
+        userService.is().then((data) => {
+          this.isAdmin = data
+        })
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        projectReportService.list2({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          projectRecordsService.getHaveProjectIds().then((data) => {
+            if (this.commonJS.isNotEmpty(data)) {
+              this.haveProjectIds = data.map(i => {
+                if (this.commonJS.isNotEmpty(i)) {
+                  return i
+                }
+              }).join(',')
+            }
+          })
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.tableKey = Math.random()
+          this.loading = false
+        })
+        this.checkIsAdmin()
+        processService.getByName('会计-报告复核(咨询)').then((data) => {
+          if (!this.commonJS.isEmpty(data.id)) {
+            this.processDefinitionAuditId = data.id
+            this.procDefAuditKey = data.key
+          }
+        })
+		  processService.getByName('报告签发').then((data) => {
+          if (!this.commonJS.isEmpty(data.id)) {
+            this.signAndIssueProcDefId = data.id
+            this.signAndIssueProcDefKey = data.key
+          }
+        })
+		  processService.getByName('报告-线上归档(A)').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.onlineArchivingProcDefIdA = data.id
+				  this.onlineArchivingProcDefKeyA = data.key
+			  }
+		  })
+		  processService.getByName('报告-线上归档(B)').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.onlineArchivingProcDefIdB = data.id
+				  this.onlineArchivingProcDefKeyB = data.key
+			  }
+		  })
+		  processService.getByName('报告-纸质归档').then((data) => {
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.paperArchivingProcDefId = data.id
+				  this.paperArchivingProcDefKey = data.key
+			  }
+		  })
+      },
+      // 当前页
+      currentChangeHandle ({ currentPage, pageSize }) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.refreshList()
+      },
+      // 排序
+      sortChangeHandle (column) {
+        this.tablePage.orders = []
+        if (column.order != null) {
+          this.tablePage.orders.push({column: this.$utils.toLine(column.property), asc: column.order === 'asc'})
+        }
+        this.refreshList()
+      },
+      // 删除
+      del (id,projectId) {
+      	console.log('projectId', projectId)
+        let ids = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          projectReportService.delete(ids,projectId).then((data) => {
+            this.$message.success(data)
+            this.refreshList()
+            this.loading = false
+          })
+        })
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      start () {
+        this.$refs.reportManagementAddForm.init('add')
+      },
+		pushF (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告复核]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+			}
+
+			taskService.getTaskDef({ procDefId: this.processDefinitionAuditId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_review_new'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionAuditId,
+						procDefKey: this.procDefAuditKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_review_new',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList2'
+					}
+				})
+			})
+		},
+		// 审核或重新调整跳转
+		todoReview (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.revTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList2'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		// 查询当前登录人是否是数据的审核人
+		checkIsAuditReview (row) {
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditUserIdsRev)) {
+				for (const userId of row.auditUserIdsRev) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		// 流程详情
+		detail (row) {
+			if (!this.commonJS.isEmpty(row.reviewStatus) && row.reviewStatus !== '0') {
+				taskService.getTaskDef({
+					procInsId: row.procInsId3,
+					procDefId: this.processDefinitionAuditId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '复核流程详情',
+							formTitle: '复核流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回报告复核
+		rebackF (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await this.reportReviewService.queryByReportIdNew(row.id).then((data) => {
+					if (data.reviewStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId3).then((data) => {
+							let form = {reviewStatus: '3', id: row.reviewNewId}
+							this.reportReviewService.updateReviewStatusByReportIdNew(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 驳回后调整
+		adjustReview (row) {
+			this.reportReviewService.queryByReportIdNew(row.id).then((data) => {
+				if (data.reviewStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoReview(row)
+				}
+			})
+		},
+
+		pushSignAndIssue (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告签发]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+			}
+
+			taskService.getTaskDef({ procDefId: this.signAndIssueProcDefId,
+				businessId: row.signAndIssueId,
+				businessTable: 'cw_project_report_sign_and_issue'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.signAndIssueProcDefId,
+						procDefKey: this.signAndIssueProcDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_sign_and_issue',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList2'
+					}
+				})
+			})
+		},
+		// 报告签发流程详情
+		signAndIssueDetail (row) {
+			if (!this.commonJS.isEmpty(row.signAndIssueStatus) && row.signAndIssueStatus !== '0') {
+				taskService.getTaskDef({
+					procInsId: row.procInsId4,
+					procDefId: this.signAndIssueProcDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '报告签发流程详情',
+							formTitle: '报告签发流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回报告签发
+		rebackSignAndIssue (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await this.reportSignAndIssueService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId4).then((data) => {
+							let form = {status: '3', id: row.signAndIssueId}
+							this.reportSignAndIssueService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 报告签发驳回调整
+		adjustSignAndIssue (row) {
+			this.reportSignAndIssueService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoSignAndIssue(row)
+				}
+			})
+		},
+		// 审核或重新调整跳转
+		todoSignAndIssue (row) {
+      	console.log('row', row)
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.signAndIssueTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList2'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		// 删除签发
+		deleteSignAndIssue (row) {
+			this.$confirm(`确定要删除该报告签发吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				this.reportSignAndIssueService.delete(row.signAndIssueId).then((data) => {
+					this.$message.success(data)
+					this.refreshList()
+					this.loading = false
+				})
+			})
+		},
+		pushOnlineArchiving (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[报告-线上归档]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			let procDefId = ''
+			let procDefKey = ''
+			if (row.projectLevel === '1') {
+				status = 'startAndClose'
+				procDefId = this.onlineArchivingProcDefIdA
+				procDefKey = this.onlineArchivingProcDefKeyA
+			} else if (row.projectLevel === '2'){
+				status = 'startAndClose'
+				procDefId = this.onlineArchivingProcDefIdB
+				procDefKey = this.onlineArchivingProcDefKeyB
+			}
+			console.log('row', row)
+
+
+			taskService.getTaskDef({ procDefId: procDefId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_online_archiving'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: procDefId,
+						procDefKey: procDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_online_archiving',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList2'
+					}
+				})
+			})
+		},
+		// 线上归档流程详情
+		pushOnlineDetail (row) {
+			if (!this.commonJS.isEmpty(row.onlineArchivingStatus) && row.onlineArchivingStatus !== '0') {
+				let procDefId = ''
+				if (row.projectLevel === '1') {
+					procDefId = this.onlineArchivingProcDefIdA
+				} else if (row.projectLevel === '2'){
+					procDefId = this.onlineArchivingProcDefIdB
+				}
+				taskService.getTaskDef({
+					procInsId: row.onlineArchivingProcInsId,
+					procDefId: procDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '线上归档流程详情',
+							formTitle: '线上归档流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回线上归档
+		rebackPushOnline (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await reportOnlineArchivingService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.onlineArchivingProcInsId).then((data) => {
+							let form = {status: '3', id: row.onlineArchivingId}
+							reportOnlineArchivingService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 在线归档驳回调整
+		adjustPushOnline (row) {
+			reportOnlineArchivingService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoPushOnline(row)
+				}
+			})
+		},
+		todoPushOnline (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.onlineArchivingTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList2'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		pushPaperArchiving (row) {
+			// 读取流程表单
+			let title = ' '
+			if (!row.documentNo) {
+				title = ' ' + row.projectName
+			} else {
+				title = ' ' + row.documentNo + ' - ' + row.projectName
+			}
+
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[报告-线上归档]'
+			let status = 'startAndHold'
+			if (row.reviewStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.reviewStatus === '4') {
+				status = 'reapplyFlag'
+			}
+
+			let procDefId = this.paperArchivingProcDefId
+			let procDefKey = this.paperArchivingProcDefKey
+			status = 'startAndClose'
+
+
+			taskService.getTaskDef({ procDefId: procDefId,
+				businessId: row.id,
+				businessTable: 'cw_project_report_paper_archiving'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: procDefId,
+						procDefKey: procDefKey,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'cw_project_report_paper_archiving',
+						businessId: row.id,
+						isShow: 'false',
+						status: status,
+						routePath: '/cw/reportManagement/ReportManagementList2'
+					}
+				})
+			})
+		},
+		// 纸质归档流程详情
+		pushPaperDetail (row) {
+			if (!this.commonJS.isEmpty(row.paperArchivingStatus) && row.paperArchivingStatus !== '0') {
+				let procDefId = this.paperArchivingProcDefId
+				taskService.getTaskDef({
+					procInsId: row.paperArchivingProcInsId,
+					procDefId: procDefId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '纸质归档流程详情',
+							formTitle: '纸质归档流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+			}
+
+		},
+		// 撤回纸质归档
+		rebackPushPaper (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => { // 需要修改row.sid1
+				await reportPaperArchivingService.queryByReportId(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.paperArchivingProcInsId).then((data) => {
+							let form = {status: '3', id: row.paperArchivingId}
+							reportPaperArchivingService.updateStatusByReportId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 纸质归档驳回调整
+		adjustPushPaper (row) {
+			reportPaperArchivingService.queryByReportId(row.id).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoPushPaper(row)
+				}
+			})
+		},
+		todoPushPaper (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.onlineArchivingTaskId
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+						isShow: false,
+						formReadOnly: true,
+						formTitle: `${data.taskName}`,
+						cUser: cUser,
+						title: `审批【${data.taskName || ''}】`,
+						routePath: '/cw/reportManagement/ReportManagementList2'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+    }
+  }
+</script>

File diff suppressed because it is too large
+ 1039 - 0
src/views/cw/reportManagement/ReportManagementList3.vue


+ 778 - 0
src/views/cw/reportManagement/ReportPaperArchivingUpdateForm.vue

@@ -0,0 +1,778 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="1400px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+				 label-width="135px" @submit.native.prevent>
+			<el-divider content-position="left"><i class="el-icon-document"></i> 项目合同信息</el-divider>
+			<el-row>
+				<el-col :span="12">
+					<el-form-item label="合同编号" prop="contractNo"
+								  :rules="[
+                   ]">
+						<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractNo"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="合同名称" prop="contractName"
+								  :rules="[
+                   ]">
+						<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractName"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="合同金额(元)" prop="contractAmount"
+								  :rules="[
+                   ]">
+						<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractAmount"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="委托方" prop="clientName"
+								  :rules="[
+                   ]">
+						<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.clientName"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="合同类型" prop="contractType"
+								  :rules="[
+              ]">
+						<el-select :disabled="true" v-model="inputForm.contractType" placeholder="请选择" style="width:100%;">
+							<el-option
+								v-for="item in $dictUtils.getDictList('cw_contract_type')"
+								:key="item.value"
+								:label="item.label"
+								:value="item.value">
+							</el-option>
+						</el-select>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-divider content-position="left"><i class="el-icon-document"></i> 项目基础信息</el-divider>
+			<el-row  :gutter="0">
+				<el-col :span="12">
+					<el-form-item label="项目名称" prop="projectName"
+								  :rules="[
+                   ]">
+						<el-input :disabled="true" v-model="inputForm.projectName" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目编号" prop="projectNumber"
+								  :rules="[
+                   ]">
+						<el-input :disabled="true" v-model="inputForm.projectNumber" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="创建人" prop="projectCreateByName"
+								  :rules="[
+                   ]">
+						<el-input :disabled="true" v-model="inputForm.projectCreateByName" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目责任人" prop="projectCreateByName"
+								  :rules="[
+                   ]">
+						<el-input :disabled="true" v-model="inputForm.projectCreateByName" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目所属部门" prop="officeId"
+								  :rules="[
+                                {required: true, message:'项目所属部门不能为空', trigger:'blur'}
+                   ]">
+						<SelectTree
+							ref="officeTree"
+							:props="{
+                          value: 'id',             // ID字段名
+                          label: 'name',         // 显示名称
+                          children: 'children'    // 子级字段名
+                        }"
+							:url="`/system-server/sys/office/treeData?type=2`"
+							:value="inputForm.officeId"
+							:accordion="true"
+							size="large"
+							:disabled="true"
+							@getValue="(value) => {inputForm.officeId=value}"/>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="现场负责人" prop="projectManager"
+								  :rules="[
+                   ]">
+						<el-input :disabled="true" v-model="inputForm.projectManager" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目类别" prop="reportType"
+								  :rules="[
+                                 {required: true, message:'项目类别不能为空', trigger:'blur'}
+                  ]">
+						<el-select :disabled="true" v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
+							<el-option
+								v-for="item in $dictUtils.getDictList('program_engineering_consultation_type')"
+								:key="item.value"
+								:label="item.label"
+								:value="item.value">
+							</el-option>
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目等级" prop="projectLevel"
+								  :rules="[
+                  {required: true, message:'请选择项目等级(500万及500万以上为A级,500万以下为B级)', trigger:'blur'}
+               ]">
+						<el-radio-group :disabled="true" v-model="inputForm.projectLevel">
+							<el-radio  v-for="item in $dictUtils.getDictList('cw_project_level')" :label="item.value" >{{item.label}}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="项目规模(元)" prop="projectMoney"
+								  :rules="[{required: true, message:'项目规模不能为空', trigger:'blur'}
+                   ]">
+						<el-input-number
+							:disabled="true"
+							v-model="inputForm.projectMoney"
+							controls-position="right"
+							style="width:100%"
+							:precision="2"
+							:max="9999999999"
+							:step="0.01"
+							:min="0"
+							placeholder="请填写项目规模"
+							:controls="false"
+							clearable>
+						</el-input-number>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="工作开始日期" prop="planStartDate"
+								  :rules="[
+                 ]">
+						<el-date-picker
+							:disabled="true"
+							v-model="inputForm.planStartDate"
+							type="date"
+							value-format="YYYY-MM-DD"
+							placeholder="选择工作开始日期"
+							style="width:100%"
+							placement="bottom-start"
+							clearable>
+						</el-date-picker>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="工作结束日期" prop="planEndDate"
+								  :rules="[
+                 ]">
+						<el-date-picker
+							:disabled="true"
+							v-model="inputForm.planEndDate"
+							type="date"
+							value-format="YYYY-MM-DD"
+							placeholder="选择工作结束日期"
+							style="width:100%"
+							placement="bottom-start"
+							clearable>
+						</el-date-picker>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="创建时间" prop="createDate"
+								  :rules="[
+                   ]">
+						<el-date-picker
+							:disabled="true"
+							v-model="inputForm.createDate"
+							type="date"
+							value-format="YYYY-MM-DD"
+							placeholder="选择创建时间"
+							style="width:100%"
+							placement="bottom-start"
+							clearable>
+						</el-date-picker>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-form v-if="status === 'audit'" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+					 label-width="135px" @submit.native.prevent>
+				<el-row>
+					<el-col  :span="12">
+						<el-form-item label="案卷号" prop="filedNo"
+									  :rules="[
+                                {required: true, message:'案卷号不能为空', trigger:'blur'}
+                   ]">
+							<el-input :disabled="false" v-model="inputForm.filedNo" placeholder="请填写案卷号" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col  :span="12">
+						<el-form-item label="确认案卷号" prop="confirmFiledNo"
+									  :rules="[
+                                {required: true, message:'确认案卷号不能为空', trigger:'blur'}
+                   ]">
+							<el-input :disabled="false" v-model="inputForm.confirmFiledNo" placeholder="请填写确认案卷号" clearable></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<el-form v-if="inputForm.paperArchivingStatus === '5'" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+					 label-width="135px" @submit.native.prevent>
+				<el-row>
+					<el-col  :span="12">
+						<el-form-item label="案卷号" prop="filedNo"
+									  :rules="[
+                                {required: true, message:'案卷号不能为空', trigger:'blur'}
+                   ]">
+							<el-input v-model="inputForm.filedNo" placeholder="请填写案卷号" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col  :span="12">
+						<el-form-item label="确认案卷号" prop="confirmFiledNo"
+									  :rules="[
+                                {required: true, message:'确认案卷号不能为空', trigger:'blur'}
+                   ]">
+							<el-input v-model="inputForm.confirmFiledNo" placeholder="请填写确认案卷号" clearable></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<el-divider content-position="left"><i class="el-icon-document"></i>
+				委托方联系人信息
+			</el-divider>
+			<el-row  :gutter="15" >
+				<el-col :span="24">
+					<vxe-table
+						border
+						show-footer
+						show-overflow
+						ref="contactTable"
+						class="vxe-table-element"
+						:data="inputForm.contactInfos"
+						style="margin-left: 5em"
+						:key="amountKey"
+						highlight-current-row
+						:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+					>
+						<vxe-table-column field="clientContactsName" title="委托方" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.clientContactsName" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="name" title="联系人姓名" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.name" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.contactFirst" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.contactSecond" ></el-input>
+							</template>
+						</vxe-table-column>
+					</vxe-table>
+				</el-col>
+			</el-row>
+			<el-divider content-position="left"><i class="el-icon-document"></i>
+				施工方信息
+			</el-divider>
+			<el-row  :gutter="15" >
+				<el-col :span="24">
+					<vxe-table
+						border
+						show-footer
+						show-overflow
+						ref="contactTable"
+						class="vxe-table-element"
+						:data="inputForm.constructionParty"
+						style="margin-left: 5em"
+						:key="amountKey3"
+						highlight-current-row
+						:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+					>
+						<vxe-table-column field="clientContactsName" title="施工方单位名称" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.clientContactsName" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="name" title="联系人姓名" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.name" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.contactFirst" ></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+							<template v-slot:edit="scope">
+								<el-input maxlength="15" :readonly="true" v-model="scope.row.contactSecond" ></el-input>
+							</template>
+						</vxe-table-column>
+					</vxe-table>
+				</el-col>
+			</el-row>
+			<el-divider content-position="left"><i class="el-icon-document"></i>
+				项目报告
+			</el-divider>
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+					 label-width="160px" @submit.native.prevent>
+				<el-row  :gutter="15" >
+					<el-col :span="24">
+						<vxe-table
+							border
+							show-footer
+							show-overflow
+							ref="contactTable"
+							class="vxe-table-element"
+							:data="inputForm.projectReportInfos"
+							style="margin-left: 5em"
+							:key="amountKey2"
+							highlight-current-row
+							:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+						>
+							<vxe-table-column field="reportNo" title="报告编号" :edit-render="{}" show-overflow="title">
+								<template v-slot:edit="scope">
+									<el-input maxlength="15" :readonly="true" v-model="scope.row.reportNo" @focus="openProgramPageForm(scope.$rowIndex, scope.row)"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="projectName" title="报告名称" :edit-render="{}" show-overflow="title">
+								<template v-slot:edit="scope">
+									<el-input maxlength="15" :readonly="true" v-model="scope.row.projectName" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="createTime" title="创建日期" :edit-render="{}" show-overflow="title">
+								<template v-slot:edit="scope">
+									<el-input maxlength="15" :readonly="true" v-model="scope.row.createTime" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="status" title="状态" :edit-render="{}" show-overflow="title">
+								<template v-slot:edit="scope">
+									<el-input maxlength="15" :readonly="true" v-model="scope.row.status" ></el-input>
+								</template>
+							</vxe-table-column>
+						</vxe-table>
+					</el-col>
+				</el-row>
+			</el-form>
+		</el-form >
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" icon="el-icon-circle-check" @click="doSubmit('save')">确定</el-button>
+			</span>
+		</template>
+		<ReportManagementForm ref="reportManagementForm"></ReportManagementForm>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	import ReportManagementForm from './ReportManagementFormNew'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import OSSSerivce, {
+		// eslint-disable-next-line no-unused-vars
+		beforeAvatarUpload,
+		// eslint-disable-next-line no-unused-vars
+		openWindowOnUrl,
+		// eslint-disable-next-line no-unused-vars
+		toHref
+	} from '@/api/sys/OSSService'
+	import reportPaperArchivingService from '@/api/cw/reportManagement/ReportPaperArchivingService'
+	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+	import CommonApi from '@/api/cw/common/CommonApi'
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				amountKey: '',
+				amountKey2: '',
+				amountKey3: '',
+				title: '',
+				method: '',
+				loading: false,
+				visible: false,
+				inputForm: {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				},
+				keyWatch: '',
+			}
+		},
+		commonApi: null,
+		created () {
+			this.commonApi = new CommonApi()
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.commonJS.isNotEmpty(this.bus)) {
+						this.init('', this.bus)
+					} else {
+						this.$nextTick(() => {
+							// this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		components: {
+			ReportManagementForm,
+			SelectTree,
+		},
+		methods: {
+			getKeyWatch (keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init (method, id) {
+				this.method = method
+				this.visible = true
+				if (method === 'edit') {
+					this.title = '报告信息修改'
+					this.method = method
+				}
+				this.inputForm = {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					// this.$refs.inputForm.resetFields()
+
+					this.loading = true
+					projectReportService.queryByIdNew(this.inputForm.id).then((data) => {
+						if (data) {
+							this.inputForm = this.recover(this.inputForm, data)
+
+							if (this.status === 'taskFormDetail' || this.status === 'audit') {
+								this.method = 'view'
+							} else {
+								this.method = 'false'
+							}
+							this.loading = false
+						} else {
+							projectReportService.queryByPaperArchivingId(this.inputForm.id).then((data2) => {
+								if (data2) {
+									this.inputForm = this.recover(this.inputForm, data2)
+
+									if (this.status === 'taskFormDetail' || this.status === 'audit') {
+										this.method = 'view'
+									} else {
+										this.method = 'false'
+									}
+									this.loading = false
+								}
+
+							})
+						}
+
+					})
+				})
+			},
+			saveForm (callback) {
+				this.doSubmit('save', callback)
+			},
+			startForm (callback) {
+				this.loading = true
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						} else {
+							this.doSubmit('start', callback)
+						}
+					})
+				} else {
+					this.doSubmit('start', callback)
+				}
+			},
+			async agreeForm (callback) {
+				this.loading = true
+				await reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '2') { // 审核状态不是“待审核”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error()
+					} else {
+						this.doSubmit('agree', callback)
+					}
+				})
+			},
+			reapplyForm (callback) {
+				this.loading = true
+				reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					} else {
+						this.doSubmit('reapply', callback)
+					}
+				})
+			},
+			// 表单提交
+			doSubmit (status, callback) {
+				if (status === 'save') {
+					if (this.inputForm.filedNo !== this.inputForm.confirmFiledNo) {
+						this.$message.error('“案卷号”与“确认案卷号”不一致,请重新填写')
+						this.loading = false
+						throw new Error('“案卷号”与“确认案卷号”不一致,请重新填写')
+					}
+					this.loading = true
+					reportPaperArchivingService.saveForm(this.inputForm).then((data) => {
+						this.$emit('refreshList')
+						this.close()
+						this.loading = false
+					}).catch(() => {
+						this.loading = false
+					})
+					return
+				} else if (status === 'start') {
+					// 送审  待审核
+					this.inputForm.status = '2'
+				} else if (status === 'agree') {
+					// 审核同意
+					this.inputForm.agreeDate = this.moment(new Date()).format('YYYY-MM-DD')
+					this.inputForm.agreeUserId = this.$store.state.user.id
+					// this.inputForm.status = '5'
+				} else if (status === 'reapply') {
+					this.inputForm.status = '2'
+				}
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (status === 'agree') {
+
+							if (this.inputForm.filedNo !== this.inputForm.confirmFiledNo) {
+								this.$message.error('“案卷号”与“确认案卷号”不一致,请重新填写')
+								this.loading = false
+								throw new Error('“案卷号”与“确认案卷号”不一致,请重新填写')
+							} else {
+								this.inputForm.status = '5'
+								reportPaperArchivingService.saveForm(this.inputForm).then((data2) => {
+									callback(data2.businessTable, data2.businessId, this.inputForm)
+									this.loading = false
+								}).catch(() => {
+									this.loading = false
+								})
+							}
+
+
+
+						}else{
+
+							reportPaperArchivingService.saveForm(this.inputForm).then((data) => {
+								callback(data.businessTable, data.businessId, this.inputForm)
+								this.loading = false
+							}).catch(() => {
+								this.loading = false
+							})
+
+						}
+
+					} else {
+						this.loading = false
+					}
+				})
+			},
+			async updateStatusById (type, callback) {
+				this.loading = true
+				if (type === 'reject' || type === 'reback') {
+					await reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '2') { // status的值不等于“审核中”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							if (type === 'reject') {
+								reportPaperArchivingService.queryByReportId(this.inputForm.id).then((review) => {
+									console.log('review', review)
+									this.rejectOn(callback)
+								})
+							}
+							if (type === 'reback') {
+								// 撤回
+								let param = {status: '3', id: this.inputForm.paperArchivingId}
+								reportPaperArchivingService.updateStatusByReportId(param)
+							}
+						}
+					})
+				} else if (type === 'hold') {
+					reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							// 终止
+							let param = {status: '1', id: this.inputForm.paperArchivingId}
+							reportPaperArchivingService.updateStatusByReportId(param).then(() => {
+								callback()
+								this.loading = false
+							})
+						}
+					})
+				}
+			},
+			// 这个方法是这个之前这个页面的驳回方法,现在粘出来复用
+			rejectOn (callback) {
+				// 驳回
+				let param
+				this.inputForm.status = '4'
+				param = {status: this.inputForm.status,
+					id: this.inputForm.paperArchivingId,
+					needUpdate2: this.inputForm.needUpdate2,
+					needUpdate3: this.inputForm.needUpdate3,
+					remark2: this.inputForm.remark2,
+					remark3: this.inputForm.remark3,
+					details: this.inputForm.details
+				}
+				reportPaperArchivingService.updateStatusByReportId(param).then(() => {
+					this.loading = false
+					callback()
+				})
+			},
+			close () {
+				this.inputForm = {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+				this.$refs.inputForm.resetFields()
+				this.visible = false
+			},
+			openProgramPageForm (rowIndex, row) {
+				this.$refs.reportManagementForm.init('view', this.inputForm.id, '')
+			},
+		}
+	}
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+</style>

+ 636 - 0
src/views/cw/reportManagement/onlineArchiving/ReportOnlineArchiving.vue

@@ -0,0 +1,636 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-row>
+			<el-col :span="24">
+
+				<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+						 label-width="135px" @submit.native.prevent>
+
+					<el-divider content-position="left"><i class="el-icon-document"></i> 项目信息</el-divider>
+					<el-row  :gutter="0">
+						<el-col :span="12">
+							<el-form-item label="报告号" prop="reportNo"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.reportNo" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="报告日期" prop="reportDate"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.reportDate" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同编号" prop="contractNo"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.contractNo" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同名称" prop="contractName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.contractName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="委托方" prop="clientName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.clientName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目编号" prop="projectNumber"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectNumber" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目名称" prop="projectName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="归档申请人" prop="applyUserName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.applyUserName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="归档时间" prop="applyDates"
+										  :rules="[
+                   ]">
+								<el-date-picker
+									:disabled="true"
+									style="width: 100%;"
+									v-model="inputForm.applyDates"
+									type="date"
+									value-format="YYYY-MM-DD"
+									placeholder="选择归档时间">
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+					</el-row>
+					<el-row>
+						<el-col :span="24">
+							<el-form-item label="说明" prop="onlineRemarks"
+										  :rules="[
+                   ]">
+								<el-input type="textarea"
+										  maxlength="200" placeholder="请输入说明"
+										  show-word-limit v-model="inputForm.onlineRemarks"></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form >
+				<el-divider content-position="left"><i class="el-icon-document"></i>
+					<span>文件信息</span>
+				</el-divider>
+				<el-row  :gutter="15" >
+					<el-col :span="24">
+						<vxe-table
+							border
+							show-overflow
+							ref="clientTable"
+							class="vxe-table-element"
+							style="margin-left: 5em"
+							:row-config="{keyField: 'id'}"
+							:column-config="{resizable: true}"
+							:tree-config="{transform: true, expandAll: true}"
+							:key="tableKey"
+							:data="tableData">
+							<vxe-column field="name" title="文件要求" width="240px" tree-node>
+								<template #default="scope">
+							<span style="font-weight: bold"
+								  v-if="scope.row.parentId === '0'"
+							>{{ scope.row.name }}
+							</span>
+									<span
+										v-if="scope.row.parentId !== '0' && scope.row.mustFlag === 1"
+									><span style="color: red;font-weight: bold">* </span>{{ scope.row.name }}
+							</span>
+									<span
+										v-if="scope.row.parentId !== '0' && scope.row.mustFlag === 0"
+									>{{ scope.row.name }}
+							</span>
+								</template>
+							</vxe-column>
+							<vxe-column field="attachmentName" title="文件描述/文件名称" show-overflow="false">
+								<template #default="scope">
+							<span
+								v-if="scope.row.levelFlag === 2"
+							>
+								<span style="font-weight: bold">文件格式及大小:{{ scope.row.size }}</span>
+								<br>
+								<span>{{ scope.row.type }}</span>
+							</span>
+									<div v-if="ifName(scope.row) === true">
+										<el-image
+											style="width: 30px; height: 30px;padding-top: 4px;"
+											:src="scope.row.lsUrl"
+											:preview-src-list="[scope.row.lsUrl]"
+											:preview-teleported="true"
+										></el-image>
+									</div>
+									<div v-else>
+										<el-link v-if="scope.row.levelFlag === 3"  type="primary" :underline="false" @click="showFile(scope.row)">{{scope.row.attachmentName}}</el-link>
+									</div>
+								</template>
+							</vxe-column>
+							<vxe-column field="workAttachmentType" width="100px" title="文件类型"></vxe-column>
+							<vxe-column field="createDate" title="上传时间" width="100px"></vxe-column>
+							<vxe-column field="fileSize" width="100px" title="文件大小(M)">
+								<template #default="scope">
+									{{getSize(scope.row.fileSize)}}
+								</template>
+							</vxe-column>
+
+							<vxe-column
+								title="操作"
+								width="100px"
+								fixed="right"
+								align="center"
+							>
+								<template #default="scope">
+									<el-button
+										v-if="scope.row.levelFlag === 2"
+										type="primary"
+										size="small"
+										:disabled="status === 'audit' ||status === 'taskFormDetail'|| method ==='view'"
+										@click="openFileForm(scope.row.id,this.inputForm.id)"
+									>编辑</el-button>
+									<el-button
+										v-if="scope.row.levelFlag === 3"
+										type="info"
+										size="small"
+										@click="toHref(scope.row)" >下载</el-button>
+
+								</template>
+							</vxe-column>
+						</vxe-table>
+					</el-col>
+				</el-row>
+				<FileForm ref="fileForm" @getFiles="getFiles"></FileForm>
+			</el-col>
+		</el-row>
+	</div>
+</template>
+
+<script>
+	import moment from 'moment';
+	import FileForm from '@/views/cw/reportManagement/reportReview/FileForm'
+	import OSSSerivce, {
+		// eslint-disable-next-line no-unused-vars
+		beforeAvatarUpload,
+		// eslint-disable-next-line no-unused-vars
+		openWindowOnUrl,
+		// eslint-disable-next-line no-unused-vars
+		toHref
+	} from '@/api/sys/OSSService'
+	import reportOnlineArchivingService from '@/api/cw/reportManagement/ReportOnlineArchivingService'
+	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+	import CommonApi from '@/api/cw/common/CommonApi'
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				tableKey: '',
+				tableData: [],
+				detailKey: '',
+				title: '',
+				method: '',
+				loading: false,
+				inputForm: {
+					onlineArchivingProcInsId: '',
+					onlineArchivingId: '',
+					projectId: '',
+					reportNo: '',
+					reportDate: '',
+					contractNo: '',
+					contractName: '',
+					clientName: '',
+					projectNumber: '',
+					applyDates: new Date(),
+					onlineRemarks: '',
+					applyUserName: this.$store.state.user.name,
+					applyUserId: this.$store.state.user.id,
+					projectName: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				},
+				keyWatch: '',
+			}
+		},
+		commonApi: null,
+		created () {
+			this.commonApi = new CommonApi()
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.commonJS.isNotEmpty(this.bus)) {
+						this.init('', this.bus)
+					} else {
+						this.$nextTick(() => {
+							// this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		components: {
+			FileForm,
+		},
+		methods: {
+			getKeyWatch (keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init (method, id) {
+				console.log('method', method)
+				this.method = method
+				this.inputForm = {
+					onlineArchivingProcInsId: '',
+					onlineArchivingId: '',
+					projectId: '',
+					reportNo: '',
+					reportDate: '',
+					contractNo: '',
+					contractName: '',
+					clientName: '',
+					projectNumber: '',
+					applyDates: '',
+					onlineRemarks: '',
+					applyUserName: '',
+					applyUserId: '',
+					projectName: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					// this.$refs.inputForm.resetFields()
+
+					this.loading = true
+					projectReportService.queryByIdNew(this.inputForm.id).then((data) => {
+						if (data) {
+							this.inputForm = this.recover(this.inputForm, data)
+
+							projectReportService.getAttachmentList(data.projectId,this.inputForm.id,'归档').then((data) => {
+								this.tableData = data
+								this.tableKey = Math.random()
+							})
+
+							if (this.commonJS.isEmpty(this.inputForm.applyUserId)) {
+								this.inputForm.applyUserId = this.$store.state.user.id
+								this.inputForm.applyUserName = this.$store.state.user.name
+							}
+							if (this.commonJS.isEmpty(this.inputForm.applyDates)) {
+								this.inputForm.applyDates = this.moment(new Date()).format('YYYY-MM-DD')
+							}
+
+							if (this.status === 'taskFormDetail' || this.status === 'audit') {
+								this.method = 'view'
+							} else {
+								this.method = 'false'
+							}
+							this.loading = false
+						} else {
+							projectReportService.queryByOnlineArchivingId(this.inputForm.id).then((data2) => {
+								if (data2) {
+									this.inputForm = this.recover(this.inputForm, data2)
+
+									projectReportService.getAttachmentList(data2.projectId,this.inputForm.id,'归档').then((data) => {
+										this.tableData = data
+										this.tableKey = Math.random()
+									})
+
+									if (this.commonJS.isEmpty(this.inputForm.applyUserId)) {
+										this.inputForm.applyUserId = this.$store.state.user.id
+										this.inputForm.applyUserName = this.$store.state.user.name
+									}
+									if (this.commonJS.isEmpty(this.inputForm.applyDates)) {
+										this.inputForm.applyDates = this.moment(new Date()).format('YYYY-MM-DD')
+									}
+
+									if (this.status === 'taskFormDetail' || this.status === 'audit') {
+										this.method = 'view'
+									} else {
+										this.method = 'false'
+									}
+									this.loading = false
+								}
+
+							})
+						}
+
+					})
+				})
+			},
+			saveForm (callback) {
+				this.doSubmit('save', callback)
+			},
+			startForm (callback) {
+				this.loading = true
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						} else {
+							this.doSubmit('start', callback)
+						}
+					})
+				} else {
+					this.doSubmit('start', callback)
+				}
+			},
+			async agreeForm (callback) {
+				this.loading = true
+				await reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '2') { // 审核状态不是“待审核”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error()
+					} else {
+						this.doSubmit('agree', callback)
+					}
+				})
+			},
+			reapplyForm (callback) {
+				this.loading = true
+				reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					} else {
+						this.doSubmit('reapply', callback)
+					}
+				})
+			},
+			// 表单提交
+			doSubmit (status, callback) {
+				if (status === 'save') {
+					// 暂存
+					this.inputForm.status = '1'
+					this.loading = true
+					reportOnlineArchivingService.saveForm(this.inputForm).then((data) => {
+						callback(data.businessTable, data.businessId, this.inputForm)
+						this.loading = false
+					}).catch(() => {
+						this.loading = false
+					})
+					return
+				} else if (status === 'start') {
+					// 送审  待审核
+					this.inputForm.status = '2'
+				} else if (status === 'agree') {
+					// 审核同意
+					this.inputForm.agreeDate = this.moment(new Date()).format('YYYY-MM-DD')
+					this.inputForm.agreeUserId = this.$store.state.user.id
+					// this.inputForm.status = '5'
+				} else if (status === 'reapply') {
+					this.inputForm.status = '2'
+				}
+				if (this.commonJS.isEmpty(this.tableData)) {
+					this.loading = false
+					this.$message.error('附件信息加载中,请稍等!')
+					throw new Error('附件信息加载中,请稍等!')
+				}
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (status === 'agree') {
+							console.log('this.inputForm.onlineArchivingProcInsId', this.inputForm.onlineArchivingProcInsId)
+							//判断当前节点是哪一个节点
+							this.commonApi.getTaskNameByProcInsId(this.inputForm.onlineArchivingProcInsId).then((data) => {
+								if (this.commonJS.isNotEmpty(data)) {
+									if (data === '报告归档管理员审核') {
+										this.inputForm.status = '5'
+									} else {
+										this.inputForm.status = '2'
+									}
+								}
+								console.log('data', data)
+								reportOnlineArchivingService.saveForm(this.inputForm).then((data2) => {
+									callback(data2.businessTable, data2.businessId, this.inputForm)
+									this.loading = false
+								}).catch(() => {
+									this.loading = false
+								})
+							})
+
+
+
+						}else{
+
+							this.tableData.forEach(item=>{
+								if (item.levelFlag === 2 && item.mustFlag === 1){
+									if (item.children.length === 0){
+										this.loading = false
+										this.$message.error('文件未上传')
+										throw new Error('文件未上传')
+									}
+								}
+							})
+
+							reportOnlineArchivingService.saveForm(this.inputForm).then((data) => {
+								callback(data.businessTable, data.businessId, this.inputForm)
+								this.loading = false
+							}).catch(() => {
+								this.loading = false
+							})
+
+						}
+
+					} else {
+						this.loading = false
+					}
+				})
+			},
+			async updateStatusById (type, callback) {
+				this.loading = true
+				if (type === 'reject' || type === 'reback') {
+					await reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '2') { // status的值不等于“审核中”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							if (type === 'reject') {
+								reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((review) => {
+									console.log('review', review)
+									this.rejectOn(callback)
+								})
+							}
+							if (type === 'reback') {
+								// 撤回
+								let param = {status: '3', id: this.inputForm.onlineArchivingId}
+								reportOnlineArchivingService.updateStatusByReportId(param)
+							}
+						}
+					})
+				} else if (type === 'hold') {
+					reportOnlineArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							// 终止
+							let param = {status: '1', id: this.inputForm.onlineArchivingId}
+							reportOnlineArchivingService.updateStatusByReportId(param).then(() => {
+								callback()
+								this.loading = false
+							})
+						}
+					})
+				}
+			},
+			// 这个方法是这个之前这个页面的驳回方法,现在粘出来复用
+			rejectOn (callback) {
+				// 驳回
+				let param
+				this.inputForm.status = '4'
+				param = {status: this.inputForm.status,
+					id: this.inputForm.onlineArchivingId,
+					needUpdate2: this.inputForm.needUpdate2,
+					needUpdate3: this.inputForm.needUpdate3,
+					remark2: this.inputForm.remark2,
+					remark3: this.inputForm.remark3,
+					details: this.inputForm.details
+				}
+				reportOnlineArchivingService.updateStatusByReportId(param).then(() => {
+					this.loading = false
+					callback()
+				})
+			},
+			close () {
+				this.inputForm = {
+					onlineArchivingId: '',
+					projectId: '',
+					reportNo: '',
+					reportDate: '',
+					contractNo: '',
+					contractName: '',
+					clientName: '',
+					projectNumber: '',
+					applyDates: '',
+					onlineRemarks: '',
+					applyUserName: '',
+					applyUserId: '',
+					projectName: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+			},
+			ifName (row) {
+				if (this.commonJS.isEmpty(row.attachmentName)) {
+					row.attachmentName = '---'
+					return false
+				}
+				let suffix = row.attachmentName.substring(row.attachmentName.lastIndexOf('.') + 1)
+				if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+					return true
+				} else {
+					return false
+				}
+			},
+			showFile (row) {
+				console.log("showFile",row)
+				row.name = row.attachmentName
+				openWindowOnUrl(row)
+			},
+			getSize (value) {
+				if (this.commonJS.isEmpty(value)) {
+					return ''
+				} else {
+					let val = parseInt(value)
+					let k = 1024
+					let sizes = ['B', 'KB', 'MB', 'GB', 'PB', 'TB', 'EB', 'ZB', 'YB']
+					let i = Math.floor(Math.log(val) / Math.log(k))
+					let result = val / Math.pow(k, i);
+					let kb = parseFloat(result.toPrecision(3));
+					return kb + '' + sizes[i]
+				}
+			},
+			//测试按钮
+			openFileForm(id,typeId){
+				console.log('this.id', id )
+				this.$refs.fileForm.init("add", id,this.inputForm.projectId)
+			},
+			toHref (row) {
+				console.log("toHref",row)
+				toHref(row)
+			},
+			getFiles(){
+				projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id,'归档').then((data) => {
+					this.tableData = data
+					this.tableKey = Math.random()
+				})
+
+			},
+		}
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+
+	/deep/ .vxe-select-option {
+		padding: 0 .6em;
+		max-width: 600px;
+		overflow: visible;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		-webkit-user-select: none;
+		-moz-user-select: none;
+		-ms-user-select: none;
+		user-select: none
+	}
+</style>

+ 767 - 0
src/views/cw/reportManagement/paperArchiving/ReportPaperArchiving.vue

@@ -0,0 +1,767 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-row>
+			<el-col :span="24">
+
+				<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+						 label-width="135px" @submit.native.prevent>
+					<el-divider content-position="left"><i class="el-icon-document"></i> 项目合同信息</el-divider>
+					<el-row>
+						<el-col :span="12">
+							<el-form-item label="合同编号" prop="contractNo"
+										  :rules="[
+                   ]">
+								<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractNo"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同名称" prop="contractName"
+										  :rules="[
+                   ]">
+								<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractName"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同金额(元)" prop="contractAmount"
+										  :rules="[
+                   ]">
+								<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.contractAmount"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="委托方" prop="clientName"
+										  :rules="[
+                   ]">
+								<el-input placeholder="" :disabled="true" show-word-limit v-model="inputForm.clientName"></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同类型" prop="contractType"
+										  :rules="[
+              ]">
+								<el-select :disabled="true" v-model="inputForm.contractType" placeholder="请选择" style="width:100%;">
+									<el-option
+										v-for="item in $dictUtils.getDictList('cw_contract_type')"
+										:key="item.value"
+										:label="item.label"
+										:value="item.value">
+									</el-option>
+								</el-select>
+							</el-form-item>
+						</el-col>
+					</el-row>
+					<el-divider content-position="left"><i class="el-icon-document"></i> 项目基础信息</el-divider>
+					<el-row  :gutter="0">
+						<el-col :span="12">
+							<el-form-item label="项目名称" prop="projectName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目编号" prop="projectNumber"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectNumber" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="创建人" prop="projectCreateByName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectCreateByName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目责任人" prop="projectCreateByName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectCreateByName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目所属部门" prop="officeId"
+										  :rules="[
+                                {required: true, message:'项目所属部门不能为空', trigger:'blur'}
+                   ]">
+								<SelectTree
+									ref="officeTree"
+									:props="{
+                          value: 'id',             // ID字段名
+                          label: 'name',         // 显示名称
+                          children: 'children'    // 子级字段名
+                        }"
+									:url="`/system-server/sys/office/treeData?type=2`"
+									:value="inputForm.officeId"
+									:accordion="true"
+									size="large"
+									:disabled="true"
+									@getValue="(value) => {inputForm.officeId=value}"/>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="现场负责人" prop="projectManager"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectManager" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目类别" prop="reportType"
+										  :rules="[
+                                 {required: true, message:'项目类别不能为空', trigger:'blur'}
+                  ]">
+								<el-select :disabled="true" v-model="inputForm.reportType" placeholder="请选择项目类别" clearable style="width: 100%;">
+									<el-option
+										v-for="item in $dictUtils.getDictList('program_engineering_consultation_type')"
+										:key="item.value"
+										:label="item.label"
+										:value="item.value">
+									</el-option>
+								</el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目等级" prop="projectLevel"
+										  :rules="[
+                  {required: true, message:'请选择项目等级(500万及500万以上为A级,500万以下为B级)', trigger:'blur'}
+               ]">
+								<el-radio-group :disabled="true" v-model="inputForm.projectLevel">
+									<el-radio  v-for="item in $dictUtils.getDictList('cw_project_level')" :label="item.value" >{{item.label}}</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目规模(元)" prop="projectMoney"
+										  :rules="[{required: true, message:'项目规模不能为空', trigger:'blur'}
+                   ]">
+								<el-input-number
+									:disabled="true"
+									v-model="inputForm.projectMoney"
+									controls-position="right"
+									style="width:100%"
+									:precision="2"
+									:max="9999999999"
+									:step="0.01"
+									:min="0"
+									placeholder="请填写项目规模"
+									:controls="false"
+									clearable>
+								</el-input-number>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工作开始日期" prop="planStartDate"
+										  :rules="[
+                 ]">
+								<el-date-picker
+									:disabled="true"
+									v-model="inputForm.planStartDate"
+									type="date"
+									value-format="YYYY-MM-DD"
+									placeholder="选择工作开始日期"
+									style="width:100%"
+									placement="bottom-start"
+									clearable>
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工作结束日期" prop="planEndDate"
+										  :rules="[
+                 ]">
+								<el-date-picker
+									:disabled="true"
+									v-model="inputForm.planEndDate"
+									type="date"
+									value-format="YYYY-MM-DD"
+									placeholder="选择工作结束日期"
+									style="width:100%"
+									placement="bottom-start"
+									clearable>
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="创建时间" prop="createDate"
+										  :rules="[
+                   ]">
+								<el-date-picker
+									:disabled="true"
+									v-model="inputForm.createDate"
+									type="date"
+									value-format="YYYY-MM-DD"
+									placeholder="选择创建时间"
+									style="width:100%"
+									placement="bottom-start"
+									clearable>
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+					</el-row>
+					<el-form v-if="status === 'audit'" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+							 label-width="135px" @submit.native.prevent>
+						<el-row>
+							<el-col  :span="12">
+								<el-form-item label="案卷号" prop="filedNo"
+											  :rules="[
+                                {required: true, message:'案卷号不能为空', trigger:'blur'}
+                   ]">
+									<el-input :disabled="false" v-model="inputForm.filedNo" placeholder="请填写案卷号" clearable></el-input>
+								</el-form-item>
+							</el-col>
+							<el-col  :span="12">
+								<el-form-item label="确认案卷号" prop="confirmFiledNo"
+											  :rules="[
+                                {required: true, message:'确认案卷号不能为空', trigger:'blur'}
+                   ]">
+									<el-input :disabled="false" v-model="inputForm.confirmFiledNo" placeholder="请填写确认案卷号" clearable></el-input>
+								</el-form-item>
+							</el-col>
+						</el-row>
+					</el-form>
+					<el-form v-if="inputForm.paperArchivingStatus === '5'" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+							 label-width="135px" @submit.native.prevent>
+						<el-row>
+							<el-col  :span="12">
+								<el-form-item label="案卷号" prop="filedNo"
+											  :rules="[
+                                {required: true, message:'案卷号不能为空', trigger:'blur'}
+                   ]">
+									<el-input :disabled="true" v-model="inputForm.filedNo" placeholder="请填写案卷号" clearable></el-input>
+								</el-form-item>
+							</el-col>
+							<el-col  :span="12">
+								<el-form-item label="确认案卷号" prop="confirmFiledNo"
+											  :rules="[
+                                {required: true, message:'确认案卷号不能为空', trigger:'blur'}
+                   ]">
+									<el-input :disabled="true" v-model="inputForm.confirmFiledNo" placeholder="请填写确认案卷号" clearable></el-input>
+								</el-form-item>
+							</el-col>
+						</el-row>
+					</el-form>
+					<el-divider content-position="left"><i class="el-icon-document"></i>
+						委托方联系人信息
+					</el-divider>
+					<el-row  :gutter="15" >
+						<el-col :span="24">
+							<vxe-table
+								border
+								show-footer
+								show-overflow
+								ref="contactTable"
+								class="vxe-table-element"
+								:data="inputForm.contactInfos"
+								style="margin-left: 5em"
+								:key="amountKey"
+								highlight-current-row
+								:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+							>
+								<vxe-table-column field="clientContactsName" title="委托方" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.clientContactsName" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="name" title="联系人姓名" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.name" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.contactFirst" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.contactSecond" ></el-input>
+									</template>
+								</vxe-table-column>
+							</vxe-table>
+						</el-col>
+					</el-row>
+					<el-divider content-position="left"><i class="el-icon-document"></i>
+						施工方信息
+					</el-divider>
+					<el-row  :gutter="15" >
+						<el-col :span="24">
+							<vxe-table
+								border
+								show-footer
+								show-overflow
+								ref="contactTable"
+								class="vxe-table-element"
+								:data="inputForm.constructionParty"
+								style="margin-left: 5em"
+								:key="amountKey3"
+								highlight-current-row
+								:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+							>
+								<vxe-table-column field="clientContactsName" title="施工方单位名称" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.clientContactsName" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="name" title="联系人姓名" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.name" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="contactFirst" title="联系方式1" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.contactFirst" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column field="contactSecond" title="联系方式2" :edit-render="{}" show-overflow="title">
+									<template v-slot:edit="scope">
+										<el-input maxlength="15" :readonly="true" v-model="scope.row.contactSecond" ></el-input>
+									</template>
+								</vxe-table-column>
+							</vxe-table>
+						</el-col>
+					</el-row>
+					<el-divider content-position="left"><i class="el-icon-document"></i>
+						项目报告
+					</el-divider>
+					<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+							 label-width="160px" @submit.native.prevent>
+						<el-row  :gutter="15" >
+							<el-col :span="24">
+								<vxe-table
+									border
+									show-footer
+									show-overflow
+									ref="contactTable"
+									class="vxe-table-element"
+									:data="inputForm.projectReportInfos"
+									style="margin-left: 5em"
+									:key="amountKey2"
+									highlight-current-row
+									:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+								>
+									<vxe-table-column field="reportNo" title="报告编号" :edit-render="{}" show-overflow="title">
+										<template v-slot:edit="scope">
+											<el-input maxlength="15" :readonly="true" v-model="scope.row.reportNo" @focus="openProgramPageForm(scope.$rowIndex, scope.row)"></el-input>
+										</template>
+									</vxe-table-column>
+									<vxe-table-column field="projectName" title="报告名称" :edit-render="{}" show-overflow="title">
+										<template v-slot:edit="scope">
+											<el-input maxlength="15" :readonly="true" v-model="scope.row.projectName" ></el-input>
+										</template>
+									</vxe-table-column>
+									<vxe-table-column field="createTime" title="创建日期" :edit-render="{}" show-overflow="title">
+										<template v-slot:edit="scope">
+											<el-input maxlength="15" :readonly="true" v-model="scope.row.createTime" ></el-input>
+										</template>
+									</vxe-table-column>
+									<vxe-table-column field="status" title="状态" :edit-render="{}" show-overflow="title">
+										<template v-slot:edit="scope">
+											<el-input maxlength="15" :readonly="true" v-model="scope.row.status" ></el-input>
+										</template>
+									</vxe-table-column>
+								</vxe-table>
+							</el-col>
+						</el-row>
+					</el-form>
+				</el-form >
+			</el-col>
+		</el-row>
+	</div>
+	<ReportManagementForm ref="reportManagementForm"></ReportManagementForm>
+</template>
+
+<script>
+	import ReportManagementForm from '../ReportManagementFormNew'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import OSSSerivce, {
+		// eslint-disable-next-line no-unused-vars
+		beforeAvatarUpload,
+		// eslint-disable-next-line no-unused-vars
+		openWindowOnUrl,
+		// eslint-disable-next-line no-unused-vars
+		toHref
+	} from '@/api/sys/OSSService'
+	import reportPaperArchivingService from '@/api/cw/reportManagement/ReportPaperArchivingService'
+	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+	import CommonApi from '@/api/cw/common/CommonApi'
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				amountKey: '',
+				amountKey2: '',
+				amountKey3: '',
+				title: '',
+				method: '',
+				loading: false,
+				inputForm: {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				},
+				keyWatch: '',
+			}
+		},
+		commonApi: null,
+		created () {
+			this.commonApi = new CommonApi()
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.commonJS.isNotEmpty(this.bus)) {
+						this.init('', this.bus)
+					} else {
+						this.$nextTick(() => {
+							// this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		components: {
+			ReportManagementForm,
+			SelectTree,
+		},
+		methods: {
+			getKeyWatch (keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init (method, id) {
+				this.method = method
+				this.inputForm = {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					// this.$refs.inputForm.resetFields()
+
+					this.loading = true
+					projectReportService.queryByIdNew(this.inputForm.id).then((data) => {
+						if (data) {
+							this.inputForm = this.recover(this.inputForm, data)
+
+							if (this.status === 'taskFormDetail' || this.status === 'audit') {
+								this.method = 'view'
+							} else {
+								this.method = 'false'
+							}
+							this.loading = false
+						} else {
+							projectReportService.queryByPaperArchivingId(this.inputForm.id).then((data2) => {
+								if (data2) {
+									this.inputForm = this.recover(this.inputForm, data2)
+
+									if (this.status === 'taskFormDetail' || this.status === 'audit') {
+										this.method = 'view'
+									} else {
+										this.method = 'false'
+									}
+									this.loading = false
+								}
+
+							})
+						}
+
+					})
+				})
+			},
+			saveForm (callback) {
+				this.doSubmit('save', callback)
+			},
+			startForm (callback) {
+				this.loading = true
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						} else {
+							this.doSubmit('start', callback)
+						}
+					})
+				} else {
+					this.doSubmit('start', callback)
+				}
+			},
+			async agreeForm (callback) {
+				this.loading = true
+				await reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '2') { // 审核状态不是“待审核”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error()
+					} else {
+						this.doSubmit('agree', callback)
+					}
+				})
+			},
+			reapplyForm (callback) {
+				this.loading = true
+				reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					} else {
+						this.doSubmit('reapply', callback)
+					}
+				})
+			},
+			// 表单提交
+			doSubmit (status, callback) {
+				if (status === 'save') {
+					// 暂存
+					this.inputForm.status = '1'
+					this.loading = true
+					reportPaperArchivingService.saveForm(this.inputForm).then((data) => {
+						callback(data.businessTable, data.businessId, this.inputForm)
+						this.loading = false
+					}).catch(() => {
+						this.loading = false
+					})
+					return
+				} else if (status === 'start') {
+					// 送审  待审核
+					this.inputForm.status = '2'
+				} else if (status === 'agree') {
+					// 审核同意
+					this.inputForm.agreeDate = this.moment(new Date()).format('YYYY-MM-DD')
+					this.inputForm.agreeUserId = this.$store.state.user.id
+					// this.inputForm.status = '5'
+				} else if (status === 'reapply') {
+					this.inputForm.status = '2'
+				}
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (status === 'agree') {
+
+							if (this.inputForm.filedNo !== this.inputForm.confirmFiledNo) {
+								this.$message.error('“案卷号”与“确认案卷号”不一致,请重新填写')
+								this.loading = false
+								throw new Error('“案卷号”与“确认案卷号”不一致,请重新填写')
+							} else {
+								this.inputForm.status = '5'
+								reportPaperArchivingService.saveForm(this.inputForm).then((data2) => {
+									callback(data2.businessTable, data2.businessId, this.inputForm)
+									this.loading = false
+								}).catch(() => {
+									this.loading = false
+								})
+							}
+
+
+
+						}else{
+
+							reportPaperArchivingService.saveForm(this.inputForm).then((data) => {
+								callback(data.businessTable, data.businessId, this.inputForm)
+								this.loading = false
+							}).catch(() => {
+								this.loading = false
+							})
+
+						}
+
+					} else {
+						this.loading = false
+					}
+				})
+			},
+			async updateStatusById (type, callback) {
+				this.loading = true
+				if (type === 'reject' || type === 'reback') {
+					await reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '2') { // status的值不等于“审核中”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							if (type === 'reject') {
+								reportPaperArchivingService.queryByReportId(this.inputForm.id).then((review) => {
+									console.log('review', review)
+									this.rejectOn(callback)
+								})
+							}
+							if (type === 'reback') {
+								// 撤回
+								let param = {status: '3', id: this.inputForm.paperArchivingId}
+								reportPaperArchivingService.updateStatusByReportId(param)
+							}
+						}
+					})
+				} else if (type === 'hold') {
+					reportPaperArchivingService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							// 终止
+							let param = {status: '1', id: this.inputForm.paperArchivingId}
+							reportPaperArchivingService.updateStatusByReportId(param).then(() => {
+								callback()
+								this.loading = false
+							})
+						}
+					})
+				}
+			},
+			// 这个方法是这个之前这个页面的驳回方法,现在粘出来复用
+			rejectOn (callback) {
+				// 驳回
+				let param
+				this.inputForm.status = '4'
+				param = {status: this.inputForm.status,
+					id: this.inputForm.paperArchivingId,
+					needUpdate2: this.inputForm.needUpdate2,
+					needUpdate3: this.inputForm.needUpdate3,
+					remark2: this.inputForm.remark2,
+					remark3: this.inputForm.remark3,
+					details: this.inputForm.details
+				}
+				reportPaperArchivingService.updateStatusByReportId(param).then(() => {
+					this.loading = false
+					callback()
+				})
+			},
+			close () {
+				this.inputForm = {
+					paperArchivingStatus: '',
+					paperArchivingId: '',
+					contactInfos: [],
+					constructionParty: [],
+					projectReportInfos: [],
+					contractNo: '',
+					contractName: '',
+					contractAmount: '',
+					clientName: '',
+					contractType: '',
+					projectName: '',
+					projectNumber: '',
+					location: '',
+					projectCreateByName: '',
+					officeId: '',
+					projectManager: '',
+					reportType: '',
+					projectLevel: '',
+					projectMoney: '',
+					planStartDate: '',
+					planEndDate: '',
+					createDate: '',
+					filedNo: '',
+					confirmFiledNo: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+			},
+			openProgramPageForm (rowIndex, row) {
+				this.$refs.reportManagementForm.init('view', this.inputForm.id, '')
+			},
+		}
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+
+	/deep/ .vxe-select-option {
+		padding: 0 .6em;
+		max-width: 600px;
+		overflow: visible;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		-webkit-user-select: none;
+		-moz-user-select: none;
+		-ms-user-select: none;
+		user-select: none
+	}
+</style>

+ 381 - 44
src/views/cw/reportManagement/reportReview/ReportReviewForm.vue

@@ -49,7 +49,7 @@
 				  <el-col :span="12">
 					  <el-form-item label="送审价(元)" prop="reviewFee"
 									:rules="[
-
+							{required: true, message: '送审价(元)不能为空', trigger: 'blur'},
                    ]">
 <!--						  <el-input v-model="inputForm.reviewFee" placeholder="请输入送审价" @change="getFee" clearable></el-input>-->
 						  <el-input
@@ -70,7 +70,7 @@
 				  <el-col :span="12">
 					  <el-form-item label="审定价(元)" prop="approvalFee"
 									:rules="[
-
+									{required: true, message: '审定价(元)不能为空', trigger: 'blur'},
 			   ]">
 <!--						  <el-input v-model="inputForm.approvalFee" placeholder="请输入审定价" clearable></el-input>-->
 						  <el-input
@@ -232,11 +232,10 @@
 					  </el-form-item>
 				  </el-col>
 				  <el-col :span="12">
-					  <el-form-item label="造价咨询营业收入(万元)" prop="ziXunShouRu"
+					  <el-form-item label="造价咨询营业收入(万元)" prop="ziXunShouRu"
 									:rules="[
-
+										{ validator: ziXunShouRuRange, trigger: 'change' }
 			   ]">
-<!--						  <el-input v-model="inputForm.ziXunShouRu" placeholder="请输入造价咨询营业收入" clearable></el-input>-->
 						  <el-input
 							  v-on:input="inputForm.ziXunShouRu=inputForm.ziXunShouRu.replace(/[^\d.]/g,'')
 							  .replace(/^\./g,'')
@@ -259,7 +258,7 @@
 						  新增
 					  </el-button>
 				  </el-divider>
-				  <el-row  :gutter="15" >
+				  <el-row  :gutter="15" v-if="inputForm.projectLevel==='1' && status !== 'audit' ">
 					  <el-col :span="24">
 						  <vxe-table
 							  border
@@ -274,9 +273,14 @@
 							  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
 							  :edit-rules="validRules"
 						  >
+							  <vxe-table-column title="编号" field="index" width="80">
+								  <template v-slot="scope">
+									  {{ scope.$rowIndex + 1 }}
+								  </template>
+							  </vxe-table-column>
 							  <vxe-table-column field="memberName" title="成员名称" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择用户', trigger:'blur'}]">
 								  <template v-slot:edit="scope">
-									  <el-input v-model="scope.row.memberName" :disabled="scope.$rowIndex == 0" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+									  <el-input v-model="scope.row.memberName" :disabled="scope.$rowIndex == 0 " @focus="userPullListForm(scope.$rowIndex)"></el-input>
 								  </template>
 							  </vxe-table-column>
 							  <vxe-table-column field="userRole" title="角色" :edit-render="{}" show-overflow="title">
@@ -306,12 +310,131 @@
 							  </vxe-table-column>
 							  <vxe-table-column title="操作" width="100">
 								  <template v-slot="scope">
-									  <el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0">删除</el-button>
+									  <el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0 ">删除</el-button>
 								  </template>
 							  </vxe-table-column>
 						  </vxe-table>
 					  </el-col>
 				  </el-row>
+				  <el-row  :gutter="15" v-else-if="inputForm.projectLevel==='2' && status !== 'audit'">
+					  <el-col :span="24">
+						  <vxe-table
+							  border
+							  show-footer
+							  show-overflow
+							  ref="detailTable"
+							  :key="detailKey"
+							  class="vxe-table-element"
+							  :data="inputForm.detailInfos"
+							  style="margin-left: 5em"
+							  highlight-current-row
+							  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+							  :edit-rules="validRules"
+						  >
+							  <vxe-table-column title="编号" field="index" width="80">
+								  <template v-slot="scope">
+									  {{ scope.$rowIndex + 1 }}
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="memberName" title="成员名称" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择用户', trigger:'blur'}]">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.memberName" :disabled="scope.$rowIndex == 0 || scope.$rowIndex == 1" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="userRole" title="角色" :edit-render="{}" show-overflow="title">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.userRole" :readonly="true"></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="enrollCertNo" title="注册/资格证号" :edit-render="{}" show-overflow="title">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.enrollCertNo" :readonly="true"></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="profession" title="专业" :edit-render="{}" show-overflow="title">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.profession" :readonly="true"></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="content" title="本人负责内容" :edit-render="{}" show-overflow="title">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.content" ></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column field="opinion" title="审核意见" :edit-render="{}" show-overflow="title">
+								  <template v-slot:edit="scope">
+									  <el-input v-model="scope.row.opinion" ></el-input>
+								  </template>
+							  </vxe-table-column>
+							  <vxe-table-column title="操作" width="100">
+								  <template v-slot="scope">
+									  <el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0 && scope.$rowIndex !== 1 ">删除</el-button>
+								  </template>
+							  </vxe-table-column>
+						  </vxe-table>
+					  </el-col>
+				  </el-row>
+				  <el-form :model="inputForm" ref="inputForm" v-loading="loading" v-if="status === 'audit'" :class="method==='view'?'readonly':''"
+						   label-width="160px" @submit.native.prevent>
+					  <el-row  :gutter="15" >
+						  <el-col :span="24">
+							  <vxe-table
+								  border
+								  show-footer
+								  show-overflow
+								  ref="detailTable"
+								  :key="detailKey"
+								  class="vxe-table-element"
+								  :data="inputForm.detailInfos"
+								  style="margin-left: 5em"
+								  highlight-current-row
+								  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon:'_'}"
+								  :edit-rules="validRules2"
+							  >
+								  <vxe-table-column title="编号" field="index" width="80">
+									  <template v-slot="scope">
+										  {{ scope.$rowIndex + 1 }}
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="memberName" title="成员名称" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择用户', trigger:'blur'}]">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.memberName" :disabled="scope.$rowIndex == 0 || scope.$rowIndex == 1" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="userRole" title="角色" :edit-render="{}" show-overflow="title">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.userRole" :readonly="true"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="enrollCertNo" title="注册/资格证号" :edit-render="{}" show-overflow="title">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.enrollCertNo" :readonly="true"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="profession" title="专业" :edit-render="{}" show-overflow="title">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.profession" :readonly="true"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="content" title="本人负责内容" :edit-render="{}" show-overflow="title">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.content" :readonly="scope.$rowIndex == 0 || scope.$rowIndex == 1"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column field="opinion" title="审核意见" :edit-render="{}" show-overflow="title">
+									  <template v-slot:edit="scope">
+										  <el-input v-model="scope.row.opinion" :readonly="scope.$rowIndex == 0 || scope.$rowIndex == 1"></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column title="操作" width="100">
+									  <template v-slot="scope">
+										  <el-button size="default" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')"  v-if="scope.$rowIndex !== 0 && scope.$rowIndex !== 1 && scope.$rowIndex !== 2">删除</el-button>
+									  </template>
+								  </vxe-table-column>
+							  </vxe-table>
+						  </el-col>
+					  </el-row>
+				  </el-form>
 			  </div>
 			  <UserPullFormNew ref="userPullFormNew" @getProgramForUser="getProgramForUser"></UserPullFormNew>
 		  </el-form >
@@ -462,11 +585,26 @@
 				  {required: true, message: '审核意见不能为空'}
 			  ],
 		  },
+		  validRules2: {
+			  memberName: [
+				  {required: true, message: '成员名称不能为空'}
+			  ],
+			  enrollCertNo: [
+				  {required: true, message: '注册/资格证号不能为空'}
+			  ],
+			  profession: [
+				  {required: true, message: '专业不能为空'}
+			  ],
+			  opinion: [
+				  {required: true, message: '审核意见不能为空'}
+			  ],
+		  },
 		  detailKey: '',
         title: '',
         method: '',
         loading: false,
         inputForm: {
+			reviewByName: '',
 			procInsId3: '',
 			reviewNewId: '',
 			projectLevel: '',
@@ -559,6 +697,7 @@
         this.reportReviewService = new ReportReviewService()
         this.method = method
         this.inputForm = {
+			reviewByName: '',
 			procInsId3: '',
 			reviewNewId: '',
 			projectLevel: '',
@@ -610,13 +749,12 @@
 
 			  // 根据证书类型  获取字典值
 			  let professionList = this.getProfessionList(this.inputForm.professionType)
-			  professionList.forEach(item => {
-			  	if (item.value == this.inputForm.profession) {
-					this.inputForm.profession = item.label
-				}
-			  })
-
 			  if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+				  professionList.forEach(item => {
+					  if (item.value == this.inputForm.profession) {
+						  this.inputForm.profession = item.label
+					  }
+				  })
 				  let d = {
 					  memberName: this.inputForm.memberName,
 					  userId: this.inputForm.projectManagerId,
@@ -627,10 +765,55 @@
 				  this.inputForm.detailInfos = []
 				  this.inputForm.detailInfos.push(d)
 				  this.detailKey = Math.random()
+			  } else {
+				  console.log('this.inputForm.detailInfos', this.inputForm.detailInfos)
+				  this.reportReviewService.getUserInfo(this.inputForm.reviewBy).then((data) => {
+					  this.inputForm.detailInfos.forEach(item => {
+						  professionList = this.getProfessionList(item.professionType)
+						  professionList.forEach(item2 => {
+							  if (item.profession == item2.value) {
+								  item.profession = item2.label
+							  }
+							  if (item.userRole === '技术负责人') {
+								  item.memberName = data.memberName + '(' + this.inputForm.reviewByName + '代)'
+							  }
+						  })
+					  })
+				  })
+
 			  }
+			  console.log('status', this.status)
+			  if (this.status === 'audit') {
+
+				  this.reportReviewService.getUserInfo(this.inputForm.reviewBy).then((data) => {
+
+					  let professionList = this.getProfessionList(data.professionType)
+					  professionList.forEach(item => {
+						  if (item.value == data.profession) {
+							  data.profession = item.label
+						  }
+					  })
 
+					  let d = {
+						  memberName: data.memberName + '(' + this.inputForm.reviewByName + '代)',
+						  userId: this.inputForm.reviewBy,
+						  userRole: '技术负责人',
+						  enrollCertNo: data.enrollCertNo,
+						  profession: data.profession,
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+						  this.inputForm.detailInfos = []
+					  }
+					  this.inputForm.detailInfos.push(d)
+					  this.detailKey = Math.random()
+				  }).catch(() => {
 
-			  projectReportService.getAttachmentList(data.projectId,this.inputForm.id).then((data) => {
+				  })
+			  }
+
+
+
+			  projectReportService.getAttachmentList(data.projectId,this.inputForm.id,'').then((data) => {
 				  this.tableData = data
 				  this.tableKey = Math.random()
 			  })
@@ -723,20 +906,41 @@
             this.loading = true
 			  if (status === 'agree') {
 
-				  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId3).then((data) => {
-					  if (this.commonJS.isNotEmpty(data)) {
-						  if (data === '三级复核') {
-							  this.inputForm.reviewStatus = '5'
-						  } else {
-							  this.inputForm.reviewStatus = '2'
-						  }
+				  let i = this.inputForm.detailInfos.length
+
+				  for (let j = 0; j < i; j++) {
+					  this.inputForm.detailInfos[j].detailNumber = j+1;
+					  let k = j + 1
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].memberName)){
+						  this.loading = false
+						  this.$message.error('项目组成员第'+k+'行成员名称为空')
+						  throw new Error('项目组成员第'+k+'行成员名称为空')
 					  }
-					  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
-						  callback(data.businessTable, data.businessId, this.inputForm)
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].enrollCertNo)){
 						  this.loading = false
-					  }).catch(() => {
+						  this.$message.error('项目组成员第'+k+'行注册/资格证号为空')
+						  throw new Error('项目组成员第'+k+'行注册/资格证号为空')
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].profession)){
 						  this.loading = false
-					  })
+						  this.$message.error('项目组成员第'+k+'行专业为空')
+						  throw new Error('项目组成员第'+k+'行专业为空')
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].opinion)){
+						  this.loading = false
+						  this.$message.error('项目组成员第'+k+'行审核意见为空')
+						  throw new Error('项目组成员第'+k+'行审核意见为空')
+					  }
+
+
+				  }
+
+				  this.inputForm.reviewStatus = '5'
+				  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
+					  callback(data.businessTable, data.businessId, this.inputForm)
+					  this.loading = false
+				  }).catch(() => {
+					  this.loading = false
 				  })
 
 			  }else{
@@ -761,7 +965,27 @@
 					  throw new Error()
 				  }else {
 					  let i = this.inputForm.detailInfos.length
+
+					  if (this.inputForm.projectLevel === '1') {
+						  if (i <= 1) {
+							  this.loading = false
+							  this.$message.error('请添加咨询员信息')
+							  throw new Error('请添加咨询员信息')
+						  }
+					  } else if (this.inputForm.projectLevel === '2') {
+						  if (i <= 1) {
+							  this.loading = false
+							  this.$message.error('请添加技术负责人信息')
+							  throw new Error('请添加技术负责人信息')
+						  } else if (i <= 2) {
+							  this.loading = false
+							  this.$message.error('请添加咨询员信息')
+							  throw new Error('请添加咨询员信息')
+						  }
+					  }
+
 					  for (let j = 0; j < i; j++) {
+						  this.inputForm.detailInfos[j].detailNumber = j+1;
 						  let k = j + 1
 						  if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].memberName)){
 							  this.loading = false
@@ -792,12 +1016,63 @@
 
 					  }
 				  }
-				  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
-					  callback(data.businessTable, data.businessId, this.inputForm)
-					  this.loading = false
-				  }).catch(() => {
-					  this.loading = false
+				  this.tableData.forEach(item=>{
+					  if (item.levelFlag === 2 && item.mustFlag === 1){
+						  if (item.children.length === 0){
+							  this.loading = false
+							  this.$message.error('文件未上传')
+							  throw new Error('文件未上传')
+						  }
+					  }
 				  })
+
+				  var newDate = this.moment(new Date).format('YYYY-MM-DD');
+				  console.log('newDate', newDate)
+				  if(this.inputForm.workStartDate > newDate || this.inputForm.workEndDate < newDate){
+
+					  this.$confirm(`质量复核日期不在工作开始结束日期之内,是否要修改工作开始结束日期??`, '提示', {
+						  confirmButtonText: '否',
+						  cancelButtonText: '是',
+						  type: 'warning'
+					  }).then(() => {
+						  if (this.inputForm.projectLevel === '1') {
+							  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
+								  callback(data.businessTable, data.businessId, this.inputForm)
+								  this.loading = false
+							  }).catch(() => {
+								  this.loading = false
+							  })
+						  } else if (this.inputForm.projectLevel === '2'){
+							  this.inputForm.reviewStatus = '5'
+							  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
+								  this.$router.push({path: '/cw/reportManagement/ReportManagementList'})
+								  this.loading = false
+							  }).catch(() => {
+								  this.loading = false
+							  })
+						  }
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  if (this.inputForm.projectLevel === '1') {
+						  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
+							  callback(data.businessTable, data.businessId, this.inputForm)
+							  this.loading = false
+						  }).catch(() => {
+							  this.loading = false
+						  })
+					  } else if (this.inputForm.projectLevel === '2'){
+						  this.inputForm.reviewStatus = '5'
+						  this.reportReviewService.saveFormReviewNew(this.inputForm).then((data) => {
+							  this.$router.push({path: '/cw/reportManagement/ReportManagementList'})
+							  this.loading = false
+						  }).catch(() => {
+							  this.loading = false
+						  })
+					  }
+				  }
+
 			  }
 
           } else {
@@ -815,7 +1090,7 @@
               throw new Error()
             } else {
               if (type === 'reject') {
-                this.reportReviewService.queryByReportId(this.inputForm.id).then((review) => {
+                this.reportReviewService.queryByReportIdNew(this.inputForm.id).then((review) => {
                 	console.log('review', review)
 					this.rejectOn(callback)
                 })
@@ -864,6 +1139,7 @@
       },
       close () {
         this.inputForm = {
+			reviewByName: '',
 			procInsId3: '',
 			reviewNewId: '',
 			projectLevel: '',
@@ -904,18 +1180,70 @@
 		// 新增
 		async insertEvent (type) {
 			if (type === 'detail') {
-				let d = {
-					memberName: '',
-					userId: '',
-					userRole: '咨询员',
-					enrollCertNo: '',
-					profession: '',
-				}
-				if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
-					this.inputForm.detailInfos = []
+
+				//根据项目等级来设置
+				if (this.inputForm.projectLevel === '1') {
+					let d = {
+						memberName: '',
+						userId: '',
+						userRole: '咨询员',
+						enrollCertNo: '',
+						profession: '',
+					}
+					if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+						this.inputForm.detailInfos = []
+					}
+					this.inputForm.detailInfos.push(d)
+					this.detailKey = Math.random()
+				} else if (this.inputForm.projectLevel === '2') {
+
+					if (this.commonJS.isEmpty(this.inputForm.reviewBy)) {
+						this.$message.error('请先选择审核人员!')
+						throw new Error('请先选择审核人员!')
+					}
+
+					if (this.inputForm.detailInfos.length  == 1) {
+						//查询陈红星的注册/资格证号,专业信息
+						this.reportReviewService.getUserInfo(this.inputForm.reviewBy).then((data) => {
+
+							let professionList = this.getProfessionList(data.professionType)
+							professionList.forEach(item => {
+								if (item.value == data.profession) {
+									data.profession = item.label
+								}
+							})
+
+							let d = {
+								memberName: data.memberName + '(' + this.inputForm.reviewByName + '代)',
+								userId: this.inputForm.reviewBy,
+								userRole: '技术负责人',
+								enrollCertNo: data.enrollCertNo,
+								profession: data.profession,
+							}
+							if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+								this.inputForm.detailInfos = []
+							}
+							this.inputForm.detailInfos.push(d)
+							this.detailKey = Math.random()
+						}).catch(() => {
+
+						})
+					} else {
+						let d = {
+							memberName: '',
+							userId: '',
+							userRole: '咨询员',
+							enrollCertNo: '',
+							profession: '',
+						}
+						if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
+							this.inputForm.detailInfos = []
+						}
+						this.inputForm.detailInfos.push(d)
+						this.detailKey = Math.random()
+					}
+
 				}
-				this.inputForm.detailInfos.push(d)
-				this.detailKey = Math.random()
 			}
 		},
 		getProgramForUser (rows) {
@@ -1038,6 +1366,15 @@
 				callback();
 			}
 		},
+		ziXunShouRuRange(rule, value, callback) {
+			if (!value || value.trim() === "") {
+				callback(new Error('造价咨询营业收入不能为空!'));
+			} else if (parseFloat(value) <= 0) {
+				callback(new Error('造价咨询营业收入必须大于0!'));
+			} else {
+				callback();
+			}
+		},
 		// 项目组成员下拉弹窗
 		userPullListForm (rowIndex) {
 			this.indexRow = rowIndex
@@ -1083,7 +1420,7 @@
 			toHref(row)
 		},
 		getFiles(){
-			projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id).then((data) => {
+			projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id,'').then((data) => {
 				this.tableData = data
 				this.tableKey = Math.random()
 			})

File diff suppressed because it is too large
+ 1257 - 0
src/views/cw/reportManagement/reportReview/ReportReviewForm2.vue


+ 975 - 0
src/views/cw/reportManagement/signAndIssue/ReportSignAndIssue.vue

@@ -0,0 +1,975 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-row>
+			<el-col :span="24">
+
+				<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="true"
+						 label-width="135px" @submit.native.prevent>
+
+					<el-divider content-position="left"><i class="el-icon-document"></i> 项目信息</el-divider>
+					<el-row  :gutter="0">
+						<el-col :span="12">
+							<el-form-item label="项目名称" prop="projectName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目编号" prop="projectNumber"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectNumber" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="项目负责人" prop="projectManager"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectManager" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="创建人" prop="projectCreateByName"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectCreateByName" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="创建时间" prop="projectCreateTime"
+										  :rules="[
+                   ]">
+								<el-input :disabled="true" v-model="inputForm.projectCreateTime" clearable></el-input>
+							</el-form-item>
+						</el-col>
+					</el-row>
+					<el-divider content-position="left"><i class="el-icon-document"></i> 质量复核信息</el-divider>
+					<el-row  :gutter="0">
+						<el-col :span="12">
+							<el-form-item label="送审价(元)" prop="reviewFee"
+										  :rules="[
+							{required: true, message: '送审价(元)不能为空', trigger: 'blur'},
+                   ]">
+								<!--						  <el-input v-model="inputForm.reviewFee" placeholder="请输入送审价" @change="getFee" clearable></el-input>-->
+								<el-input
+									@change="getFee"
+									v-on:input="inputForm.reviewFee=inputForm.reviewFee.replace(/[^\d.]/g,'')
+							  .replace(/^\./g,'')
+							  .replace(/\.{2,}/g,'.')
+							  .replace('.','$#$').replace(/\./g,'').replace('$#$','.')
+							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
+									v-model="inputForm.reviewFee"
+									controls-position="right"
+									:controls="false"
+									style="width:100%;"
+									placeholder="请输入送审价(元)"
+									clearable />
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="审定价(元)" prop="approvalFee"
+										  :rules="[
+									{required: true, message: '审定价(元)不能为空', trigger: 'blur'},
+			   ]">
+								<!--						  <el-input v-model="inputForm.approvalFee" placeholder="请输入审定价" clearable></el-input>-->
+								<el-input
+									@change="getApprovalFee"
+									v-on:input="inputForm.approvalFee=inputForm.approvalFee.replace(/[^\d.]/g,'')
+							  .replace(/^\./g,'')
+							  .replace(/\.{2,}/g,'.')
+							  .replace('.','$#$').replace(/\./g,'').replace('$#$','.')
+							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
+									v-model="inputForm.approvalFee"
+									controls-position="right"
+									:controls="false"
+									style="width:100%;"
+									placeholder="请输入审定价(元)"
+									clearable />
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="合同类别" prop="contractCategory" :rules="[]">
+								<el-radio-group v-model="inputForm.contractCategory">
+									<el-radio v-for="item in $dictUtils.getDictList('contract_amount_type')" :key="item.value" :label="item.value">{{item.label}}</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12" v-if="inputForm.contractCategory === '1'">
+							<el-form-item label="合同价(元)" prop="contractFee"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.contractFee" placeholder="请输入合同价(元)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12" v-if="inputForm.contractCategory === '2'">
+							<el-form-item label="费率(%)" prop="contractRate"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.contractRate" placeholder="请输入费率(%)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="下一节点审核人" prop="reviewBy"
+										  :rules="[
+										{required: true, message:'下一节点审核人不能为空', trigger:'change'}
+                   ]">
+								<UserSelectSignatory style="width: 100%" ref="userSelect1"
+													 :readonly="true" :limit='1' :modelValue="inputForm.reviewBy"
+													 @update:modelValue='(value) => {inputForm.reviewBy = value}'></UserSelectSignatory>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="核增核减额(元)" prop="verifyFee"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.verifyFee" :disabled="true" placeholder="请输入核增核减额(元)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="核增核减率(%)" prop="verifyRate"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.verifyRate" :disabled="true" placeholder="请输入核增核减率(%)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="咨询标的额(元)" prop="consultFee"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.consultFee" :disabled="true" placeholder="请输入咨询标的额(元)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="土建造价(元)" prop="buildingFee"
+										  :rules="[
+
+			   ]">
+								<!--						  <el-input v-model="inputForm.buildingFee" placeholder="请输入土建造价(元)" clearable></el-input>-->
+								<el-input
+									@change="getBuildingFee"
+									v-on:input="inputForm.buildingFee=inputForm.buildingFee.replace(/[^\d.]/g,'')
+							  .replace(/^\./g,'')
+							  .replace(/\.{2,}/g,'.')
+							  .replace('.','$#$').replace(/\./g,'').replace('$#$','.')
+							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
+									v-model="inputForm.buildingFee"
+									controls-position="right"
+									:controls="false"
+									style="width:100%;"
+									placeholder="土建造价(元)"
+									clearable />
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="安装造价(元)" prop="installFee"
+										  :rules="[
+
+			   ]">
+								<!--						  <el-input v-model="inputForm.installFee" placeholder="请输入安装造价(元)" clearable></el-input>-->
+								<el-input
+									@change="getInstallFee"
+									v-on:input="inputForm.installFee=inputForm.installFee.replace(/[^\d.]/g,'')
+							  .replace(/^\./g,'')
+							  .replace(/\.{2,}/g,'.')
+							  .replace('.','$#$').replace(/\./g,'').replace('$#$','.')
+							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
+									v-model="inputForm.installFee"
+									controls-position="right"
+									:controls="false"
+									style="width:100%;"
+									placeholder="安装造价(元)"
+									clearable />
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="土建比例(%)" prop="buildingRate"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.buildingRate" :disabled="true" placeholder="请输入土建比例(%)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="安装比例(%)" prop="installRate"
+										  :rules="[
+
+			   ]">
+								<el-input v-model="inputForm.installRate" :disabled="true" placeholder="请输入安装比例(%)" clearable></el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工作开始时间" prop="workStartDate" :rules="[
+					  	{required: true, message: '工作开始时间不能为空', trigger: 'blur'},
+					  	{ validator: validateDateRange, trigger: 'change' }
+               ]">
+								<el-date-picker
+									style="width: 100%"
+									v-model="inputForm.workStartDate"
+									value-format="YYYY-MM-DD"
+									placeholder="选择日期"
+								>
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="工作结束时间" prop="workEndDate" :rules="[
+					  	{required: true, message: '工作结束时间不能为空', trigger: 'blur'},
+					  	{ validator: validateDateRange, trigger: 'change' }
+               ]">
+								<el-date-picker
+									style="width: 100%"
+									v-model="inputForm.workEndDate"
+									value-format="YYYY-MM-DD"
+									placeholder="选择日期"
+								>
+								</el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="造价咨询营业收入(万元)" prop="ziXunShouRu"
+										  :rules="[
+										{ validator: ziXunShouRuRange, trigger: 'change' }
+			   ]">
+								<el-input
+									v-on:input="inputForm.ziXunShouRu=inputForm.ziXunShouRu.replace(/[^\d.]/g,'')
+							  .replace(/^\./g,'')
+							  .replace(/\.{2,}/g,'.')
+							  .replace('.','$#$').replace(/\./g,'').replace('$#$','.')
+							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
+									v-model="inputForm.ziXunShouRu"
+									controls-position="right"
+									:controls="false"
+									style="width:100%;"
+									placeholder="请输入造价咨询营业收入(万元)"
+									clearable />
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-form >
+				<el-divider content-position="left"><i class="el-icon-document"></i>
+					<span>文件信息</span>
+				</el-divider>
+				<el-row  :gutter="15" >
+					<el-col :span="24">
+						<vxe-table
+							border
+							show-overflow
+							ref="clientTable"
+							class="vxe-table-element"
+							style="margin-left: 5em"
+							:row-config="{keyField: 'id'}"
+							:column-config="{resizable: true}"
+							:tree-config="{transform: true, expandAll: true}"
+							:key="tableKey"
+							:data="tableData">
+							<vxe-column field="name" title="文件要求" width="240px" tree-node>
+								<template #default="scope">
+							<span style="font-weight: bold"
+								  v-if="scope.row.parentId === '0'"
+							>{{ scope.row.name }}
+							</span>
+									<span
+										v-if="scope.row.parentId !== '0' && scope.row.mustFlag === 1"
+									><span style="color: red;font-weight: bold">* </span>{{ scope.row.name }}
+							</span>
+									<span
+										v-if="scope.row.parentId !== '0' && scope.row.mustFlag === 0"
+									>{{ scope.row.name }}
+							</span>
+								</template>
+							</vxe-column>
+							<vxe-column field="attachmentName" title="文件描述/文件名称" show-overflow="false">
+								<template #default="scope">
+							<span
+								v-if="scope.row.levelFlag === 2"
+							>
+								<span style="font-weight: bold">文件格式及大小:{{ scope.row.size }}</span>
+								<br>
+								<span>{{ scope.row.type }}</span>
+							</span>
+									<div v-if="ifName(scope.row) === true">
+										<el-image
+											style="width: 30px; height: 30px;padding-top: 4px;"
+											:src="scope.row.lsUrl"
+											:preview-src-list="[scope.row.lsUrl]"
+											:preview-teleported="true"
+										></el-image>
+									</div>
+									<div v-else>
+										<el-link v-if="scope.row.levelFlag === 3"  type="primary" :underline="false" @click="showFile(scope.row)">{{scope.row.attachmentName}}</el-link>
+									</div>
+								</template>
+							</vxe-column>
+							<vxe-column field="workAttachmentType" width="100px" title="文件类型"></vxe-column>
+							<vxe-column field="createDate" title="上传时间" width="100px"></vxe-column>
+							<vxe-column field="fileSize" width="100px" title="文件大小(M)">
+								<template #default="scope">
+									{{getSize(scope.row.fileSize)}}
+								</template>
+							</vxe-column>
+
+							<vxe-column
+								title="操作"
+								width="100px"
+								fixed="right"
+								align="center"
+							>
+								<template #default="scope">
+									<el-button
+										v-if="scope.row.levelFlag === 2"
+										type="primary"
+										size="small"
+										:disabled="status === 'audit' ||status === 'taskFormDetail'|| method ==='view'"
+										@click="openFileForm(scope.row.id,this.inputForm.id)"
+									>编辑</el-button>
+									<el-button
+										v-if="scope.row.levelFlag === 3"
+										type="info"
+										size="small"
+										@click="toHref(scope.row)" >下载</el-button>
+
+								</template>
+							</vxe-column>
+						</vxe-table>
+					</el-col>
+				</el-row>
+				<FileForm ref="fileForm" @getFiles="getFiles"></FileForm>
+			</el-col>
+		</el-row>
+	</div>
+</template>
+
+<script>
+	import moment from 'moment';
+	import FileForm from '@/views/cw/reportManagement/reportReview/FileForm'
+	import OSSSerivce, {
+		// eslint-disable-next-line no-unused-vars
+		beforeAvatarUpload,
+		// eslint-disable-next-line no-unused-vars
+		openWindowOnUrl,
+		// eslint-disable-next-line no-unused-vars
+		toHref
+	} from '@/api/sys/OSSService'
+	import UserSelectSignatory from '@/components/userSelectNew'
+	import ReportSignAndIssueService from '@/api/cw/reportManagement/ReportSignAndIssueService'
+	import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+	import CommonApi from '@/api/cw/common/CommonApi'
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				tableKey: '',
+				tableData: [],
+				validRules: {
+					memberName: [
+						{required: true, message: '成员名称不能为空'}
+					],
+					enrollCertNo: [
+						{required: true, message: '注册/资格证号不能为空'}
+					],
+					profession: [
+						{required: true, message: '专业不能为空'}
+					],
+					content: [
+						{required: true, message: '本人负责内容不能为空'}
+					],
+					opinion: [
+						{required: true, message: '审核意见不能为空'}
+					],
+				},
+				validRules2: {
+					memberName: [
+						{required: true, message: '成员名称不能为空'}
+					],
+					enrollCertNo: [
+						{required: true, message: '注册/资格证号不能为空'}
+					],
+					profession: [
+						{required: true, message: '专业不能为空'}
+					],
+					opinion: [
+						{required: true, message: '审核意见不能为空'}
+					],
+				},
+				detailKey: '',
+				title: '',
+				method: '',
+				loading: false,
+				inputForm: {
+					reviewByName: '',
+					procInsId3: '',
+					signAndIssueId: '',
+					projectLevel: '',
+					memberName: '',
+					enrollCertNo: '',
+					profession: '',
+					professionType: '',
+					projectName: '',
+					projectId: '',
+					projectNumber: '',
+					projectManager: '',
+					projectManagerId: '',
+					projectCreateByName: '',
+					projectCreateTime: '',
+					reviewFee: '',
+					approvalFee: '',
+					contractCategory: '',
+					contractFee: '',
+					contractRate: '',
+					reviewBy: '',
+					verifyFee: '',
+					verifyRate: '',
+					consultFee: '',
+					buildingFee: '',
+					installFee: '',
+					buildingRate: '',
+					installRate: '',
+					workStartDate: '',
+					workEndDate: '',
+					ziXunShouRu: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				},
+				keyWatch: '',
+			}
+		},
+		reportSignAndIssueService: null,
+		commonApi: null,
+		created () {
+			this.reportSignAndIssueService = new ReportSignAndIssueService()
+			this.commonApi = new CommonApi()
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.commonJS.isNotEmpty(this.bus)) {
+						this.init('', this.bus)
+					} else {
+						this.$nextTick(() => {
+							// this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		components: {
+			FileForm,
+			UserSelectSignatory,
+		},
+		methods: {
+			getKeyWatch (keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init (method, id) {
+				console.log('method', method)
+				this.method = method
+				this.inputForm = {
+					reviewByName: '',
+					procInsId3: '',
+					signAndIssueId: '',
+					projectLevel: '',
+					memberName: '',
+					enrollCertNo: '',
+					profession: '',
+					professionType: '',
+					projectName: '',
+					projectId: '',
+					projectNumber: '',
+					projectManager: '',
+					projectManagerId: '',
+					projectCreateByName: '',
+					projectCreateTime: '',
+					reviewFee: '',
+					approvalFee: '',
+					contractCategory: '',
+					contractFee: '',
+					contractRate: '',
+					reviewBy: '',
+					verifyFee: '',
+					verifyRate: '',
+					consultFee: '',
+					buildingFee: '',
+					installFee: '',
+					buildingRate: '',
+					installRate: '',
+					workStartDate: '',
+					workEndDate: '',
+					ziXunShouRu: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					// this.$refs.inputForm.resetFields()
+
+					this.loading = true
+					projectReportService.queryByIdNew(this.inputForm.id).then((data) => {
+						if (data) {
+							this.inputForm = this.recover(this.inputForm, data)
+
+							if (this.commonJS.isEmpty(this.inputForm.contractCategory)) {
+								this.inputForm.contractCategory = '1'
+							}
+
+							projectReportService.getAttachmentList(data.projectId,this.inputForm.id,'').then((data) => {
+								this.tableData = data
+								this.tableKey = Math.random()
+							})
+
+							if (this.status === 'taskFormDetail' || this.status === 'audit') {
+								this.method = 'view'
+							} else {
+								this.method = 'false'
+							}
+							this.loading = false
+						} else {
+							projectReportService.queryBySignAndIssueId(this.inputForm.id).then((data2) => {
+								if (data2) {
+									this.inputForm = this.recover(this.inputForm, data2)
+
+									if (this.commonJS.isEmpty(this.inputForm.contractCategory)) {
+										this.inputForm.contractCategory = '1'
+									}
+
+									projectReportService.getAttachmentList(data2.projectId,this.inputForm.id,'').then((data3) => {
+										this.tableData = data3
+										this.tableKey = Math.random()
+									})
+
+									if (this.status === 'taskFormDetail' || this.status === 'audit') {
+										this.method = 'view'
+									} else {
+										this.method = 'false'
+									}
+									this.loading = false
+								}
+
+							})
+						}
+
+					})
+				})
+			},
+			clearClientList () {
+				// 项目直接对接联系人列表清除
+				this.inputForm.clientList = []
+				this.$forceUpdate()
+			},
+			saveForm (callback) {
+				this.doSubmit('save', callback)
+			},
+			startForm (callback) {
+				this.loading = true
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((data) => {
+						if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						} else {
+							this.doSubmit('start', callback)
+						}
+					})
+				} else {
+					this.doSubmit('start', callback)
+				}
+			},
+			async agreeForm (callback) {
+				this.loading = true
+				await this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '2') { // 审核状态不是“待审核”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error()
+					} else {
+						this.doSubmit('agree', callback)
+					}
+				})
+			},
+			reapplyForm (callback) {
+				this.loading = true
+				this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((data) => {
+					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					} else {
+						this.doSubmit('reapply', callback)
+					}
+				})
+			},
+			// 表单提交
+			doSubmit (status, callback) {
+				if (status === 'save') {
+					// 暂存
+					this.inputForm.status = '1'
+					this.loading = true
+					this.reportSignAndIssueService.saveForm(this.inputForm).then((data) => {
+						callback(data.businessTable, data.businessId, this.inputForm)
+						this.loading = false
+					}).catch(() => {
+						this.loading = false
+					})
+					return
+				} else if (status === 'start') {
+					// 送审  待审核
+					this.inputForm.status = '2'
+					this.inputForm.assignee = this.inputForm.reviewBy
+				} else if (status === 'agree') {
+					// 审核同意
+					this.inputForm.agreeDate = this.moment(new Date()).format('YYYY-MM-DD')
+					this.inputForm.agreeUserId = this.$store.state.user.id
+					// this.inputForm.status = '5'
+				} else if (status === 'reapply') {
+					this.inputForm.status = '2'
+					this.inputForm.assignee = this.inputForm.reviewBy
+				}
+				if (this.commonJS.isEmpty(this.tableData)) {
+					this.loading = false
+					this.$message.error('附件信息加载中,请稍等!')
+					throw new Error('附件信息加载中,请稍等!')
+				}
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (status === 'agree') {
+
+							this.inputForm.status = '5'
+							this.reportSignAndIssueService.saveForm(this.inputForm).then((data) => {
+								callback(data.businessTable, data.businessId, this.inputForm)
+								this.loading = false
+							}).catch(() => {
+								this.loading = false
+							})
+
+						}else{
+
+							this.tableData.forEach(item=>{
+								if (item.levelFlag === 2 && item.mustFlag === 1){
+									if (item.children.length === 0){
+										this.loading = false
+										this.$message.error('文件未上传')
+										throw new Error('文件未上传')
+									}
+								}
+							})
+
+							this.reportSignAndIssueService.saveForm(this.inputForm).then((data) => {
+								callback(data.businessTable, data.businessId, this.inputForm)
+								this.loading = false
+							}).catch(() => {
+								this.loading = false
+							})
+
+						}
+
+					} else {
+						this.loading = false
+					}
+				})
+			},
+			async updateStatusById (type, callback) {
+				this.loading = true
+				if (type === 'reject' || type === 'reback') {
+					await this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '2') { // status的值不等于“审核中”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							if (type === 'reject') {
+								this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((review) => {
+									console.log('review', review)
+									this.rejectOn(callback)
+								})
+							}
+							if (type === 'reback') {
+								// 撤回
+								let param = {status: '3', id: this.inputForm.signAndIssueId}
+								this.reportSignAndIssueService.updateStatusByReportId(param)
+							}
+						}
+					})
+				} else if (type === 'hold') {
+					this.reportSignAndIssueService.queryByReportId(this.inputForm.id).then((data) => {
+						if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error()
+						} else {
+							// 终止
+							let param = {status: '1', id: this.inputForm.signAndIssueId}
+							this.reportSignAndIssueService.updateStatusByReportId(param).then(() => {
+								callback()
+								this.loading = false
+							})
+						}
+					})
+				}
+			},
+			// 这个方法是这个之前这个页面的驳回方法,现在粘出来复用
+			rejectOn (callback) {
+				// 驳回
+				let param
+				this.inputForm.status = '4'
+				param = {status: this.inputForm.status,
+					id: this.inputForm.signAndIssueId,
+					needUpdate2: this.inputForm.needUpdate2,
+					needUpdate3: this.inputForm.needUpdate3,
+					remark2: this.inputForm.remark2,
+					remark3: this.inputForm.remark3,
+					details: this.inputForm.details
+				}
+				this.reportSignAndIssueService.updateStatusByReportId(param).then(() => {
+					this.loading = false
+					callback()
+				})
+			},
+			close () {
+				this.inputForm = {
+					reviewByName: '',
+					procInsId3: '',
+					signAndIssueId: '',
+					projectLevel: '',
+					memberName: '',
+					enrollCertNo: '',
+					profession: '',
+					professionType: '',
+					projectName: '',
+					projectId: '',
+					projectNumber: '',
+					projectManager: '',
+					projectManagerId: '',
+					projectCreateByName: '',
+					projectCreateTime: '',
+					reviewFee: '',
+					approvalFee: '',
+					contractCategory: '',
+					contractFee: '',
+					contractRate: '',
+					reviewBy: '',
+					verifyFee: '',
+					verifyRate: '',
+					consultFee: '',
+					buildingFee: '',
+					installFee: '',
+					buildingRate: '',
+					installRate: '',
+					workStartDate: '',
+					workEndDate: '',
+					ziXunShouRu: '',
+					createBy: {
+						id: '',
+						name: this.$store.state.user.name
+					},
+				}
+			},
+			getProfessionList(type) {
+				switch (type) {
+					case '1':
+					case '2':
+						return this.$dictUtils.getDictList('sys_cert_profession_build');
+					case '3':
+					case '4':
+						return this.$dictUtils.getDictList('sys_cert_profession_cost');
+					case '5':
+						return this.$dictUtils.getDictList('sys_cert_profession_supervision');
+					case '6':
+						return this.$dictUtils.getDictList('sys_cert_profession_accounting');
+					default:
+						return [];
+				}
+			},
+			getFee() {
+				//送审价
+				var rf = this.inputForm.reviewFee
+				//审定价
+				var af = this.inputForm.approvalFee
+				if (this.commonJS.isNotEmpty(rf) && rf !== '0.00' && this.commonJS.isNotEmpty(af) && af !== '0.00') {
+					var hf = (af*100-rf*100)/100;
+					var rate = parseFloat(hf) / parseFloat(rf) * 100
+					this.inputForm.verifyFee = hf.toFixed(2)
+					this.inputForm.verifyRate = rate.toFixed(2)
+				}
+				if (this.commonJS.isNotEmpty(af)) {
+					this.inputForm.consultFee = af
+				}
+
+			},
+			getApprovalFee() {
+				//送审价
+				var rf = this.inputForm.reviewFee
+				//审定价
+				var af = this.inputForm.approvalFee
+				if(this.commonJS.isNotEmpty(rf) && rf != '0.00' && this.commonJS.isNotEmpty(af) && af !='0.00'){
+					//计算审核增减额
+					var hf = (af*100-rf*100)/100;
+					var rate = parseFloat(hf) / parseFloat(rf) * 100
+					this.inputForm.verifyFee = hf.toFixed(2)
+					this.inputForm.verifyRate = rate.toFixed(2)
+				}
+				if(this.commonJS.isNotEmpty(af)){
+					this.inputForm.consultFee = af
+				}
+				this.inputForm.buildingFee = ''
+				this.inputForm.installFee = ''
+				this.inputForm.buildingRate = ''
+				this.inputForm.installRate = ''
+			},
+			getBuildingFee() {
+				var af = this.inputForm.approvalFee
+				//土建
+				var bf = this.inputForm.buildingFee
+				if(this.commonJS.isNotEmpty(bf) && this.commonJS.isNotEmpty(af)){
+					var hf = parseInt(af)-parseInt(bf);
+					var rate = Math.round(parseInt(bf) / parseInt(af) * 100) / 100 * 100
+					this.inputForm.buildingRate = rate
+					this.inputForm.installFee = hf
+					var inRate = Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100
+					this.inputForm.installRate = inRate
+				}
+				if(this.commonJS.isEmpty(bf) || this.commonJS.isEmpty(af)){
+					this.inputForm.buildingRate = ''
+				}
+			},
+			getInstallFee() {
+				var af = this.inputForm.approvalFee
+				//安装
+				var inf = this.inputForm.installFee
+				if(this.commonJS.isNotEmpty(inf) && this.commonJS.isNotEmpty(af)){
+					var hf = parseInt(af)-parseInt(inf);
+					var rate = Math.round(parseInt(inf) / parseInt(af) * 100) / 100 * 100
+					this.inputForm.installRate = rate
+					this.inputForm.buildingFee = hf
+					var bRate = Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100
+					this.inputForm.buildingRate = bRate
+				}
+				if(this.commonJS.isEmpty(inf) || this.commonJS.isEmpty(af)){
+					this.inputForm.installRate = ''
+				}
+			},
+			validateDateRange(rule, value, callback) {
+				const workStartDate = this.inputForm.workStartDate;
+				const workEndDate = this.inputForm.workEndDate;
+
+				if (workStartDate && workEndDate && workStartDate > workEndDate) {
+					this.inputForm.workEndDate = ''
+					callback(new Error('工作开始时间不能大于工作结束时间'));
+				} else {
+					callback();
+				}
+			},
+			ziXunShouRuRange(rule, value, callback) {
+				if (!value || value.trim() === "") {
+					callback(new Error('造价咨询营业收入不能为空!'));
+				} else if (parseFloat(value) <= 0) {
+					callback(new Error('造价咨询营业收入必须大于0!'));
+				} else {
+					callback();
+				}
+			},
+			ifName (row) {
+				if (this.commonJS.isEmpty(row.attachmentName)) {
+					row.attachmentName = '---'
+					return false
+				}
+				let suffix = row.attachmentName.substring(row.attachmentName.lastIndexOf('.') + 1)
+				if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+					return true
+				} else {
+					return false
+				}
+			},
+			showFile (row) {
+				console.log("showFile",row)
+				row.name = row.attachmentName
+				openWindowOnUrl(row)
+			},
+			getSize (value) {
+				if (this.commonJS.isEmpty(value)) {
+					return ''
+				} else {
+					let val = parseInt(value)
+					let k = 1024
+					let sizes = ['B', 'KB', 'MB', 'GB', 'PB', 'TB', 'EB', 'ZB', 'YB']
+					let i = Math.floor(Math.log(val) / Math.log(k))
+					let result = val / Math.pow(k, i);
+					let kb = parseFloat(result.toPrecision(3));
+					return kb + '' + sizes[i]
+				}
+			},
+			//测试按钮
+			openFileForm(id,typeId){
+				console.log('this.id', id )
+				this.$refs.fileForm.init("add", id,this.inputForm.projectId)
+			},
+			toHref (row) {
+				console.log("toHref",row)
+				toHref(row)
+			},
+			getFiles(){
+				projectReportService.getAttachmentList(this.inputForm.projectId,this.inputForm.id,'').then((data) => {
+					this.tableData = data
+					this.tableKey = Math.random()
+				})
+
+			},
+		}
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+
+	/deep/ .vxe-select-option {
+		padding: 0 .6em;
+		max-width: 600px;
+		overflow: visible;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		-webkit-user-select: none;
+		-moz-user-select: none;
+		-ms-user-select: none;
+		user-select: none
+	}
+</style>

+ 18 - 0
src/views/cw/workClientInfo/WorkClientAddForm.vue

@@ -93,6 +93,21 @@
                       </el-select>
                     </el-form-item>
                   </el-col>
+					<el-col :span="12">
+                    <el-form-item label="代表方" prop="representativeParty"
+                                  :rules="[
+                                  {required: true, message:'代表方不能为空', trigger:'blur'}
+                   ]">
+                      <el-select v-model="inputForm.representativeParty" placeholder="请选择代表方" clearable style="width: 100%;">
+                        <el-option
+                          v-for="item in $dictUtils.getDictList('representative_party')"
+                          :key="item.value"
+                          :label="item.label"
+                          :value="item.value">
+                        </el-option>
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
                   <el-col :span="12">
                     <el-form-item label="特殊客户类型" prop="scType"
                                   :rules="[
@@ -757,6 +772,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',
@@ -938,6 +954,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',
@@ -1143,6 +1160,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',

+ 18 - 0
src/views/cw/workClientInfo/WorkClientForm.vue

@@ -92,6 +92,21 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
+				  <el-col :span="12">
+					  <el-form-item label="代表方" prop="representativeParty"
+									:rules="[
+                                  {required: true, message:'代表方不能为空', trigger:'blur'}
+                   ]">
+						  <el-select v-model="inputForm.representativeParty" placeholder="请选择代表方" clearable style="width: 100%;">
+							  <el-option
+								  v-for="item in $dictUtils.getDictList('representative_party')"
+								  :key="item.value"
+								  :label="item.label"
+								  :value="item.value">
+							  </el-option>
+						  </el-select>
+					  </el-form-item>
+				  </el-col>
                 <el-col :span="12">
                   <el-form-item label="特殊客户类型" prop="scType"
                                 :rules="[
@@ -935,6 +950,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',
@@ -1138,6 +1154,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',
@@ -1423,6 +1440,7 @@
           abbreviation: '',
           englishName: '',
           type: '',
+			representativeParty: '',
           uscCode: '',
           scType: '',
           manageLevelType: '',

+ 2 - 2
src/views/cw/workContract/ContractNameForm.vue

@@ -295,12 +295,12 @@
 							highlight-current-row
 							:edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: false}"
 						>
-							<vxe-table-column align="center" field="no" title="客户编号" :edit-render="{}">
+							<vxe-table-column min-width="448" align="center" field="no" title="客户编号" :edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input :readonly="true" v-model="scope.row.no" placeholder="客户编号" clearable></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column align="center" field="name" title="客户名称" :edit-render="{}">
+							<vxe-table-column min-width="448" align="center" field="name" title="客户名称" :edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input :readonly="true" v-model="scope.row.name" placeholder="客户名称" clearable></el-input>
 								</template>

+ 17 - 1
src/views/flowable/task/TaskForm.vue

@@ -689,6 +689,7 @@ export default {
 		// Process_1669087010742 报告签章-公章+执业章
 		// Process_1668677901585 项目报告归档
 		// Process_1670486210438 报告复核
+		// Process_1708914940212 报告复核(咨询)
 		// Process_1670486210439 会计-报告号领取
 		// Process_1668759076824 报告作废申请
 		// Process_1670548572652 报告作废归档
@@ -740,6 +741,10 @@ export default {
 		// Process_1702005929963 完善个人信息
 		// Process_1702369424692 会计-报告号申请
 		// Process_1670486210440 会计-报告号复核
+		// Process_1706161347628 报告签发
+		// Process_1706253503727 报告-线上归档(B)
+		// Process_1706579004224 报告-线上归档(A)
+		// Process_1706603798678 报告-纸质归档
 		// Process_1706856742798 批量归档
 
 		// 驳回
@@ -751,6 +756,7 @@ export default {
 				this.procDefId.includes('Process_1669087010742') ||
 				this.procDefId.includes('Process_1668677901585') ||
 				this.procDefId.includes('Process_1670486210438') ||
+				this.procDefId.includes('Process_1708914940212') ||
 				this.procDefId.includes('Process_1670486210439') ||
 				this.procDefId.includes('Process_1668759076824') ||
 				this.procDefId.includes('Process_1670548572652') ||
@@ -803,6 +809,11 @@ export default {
 				this.procDefId.includes('Process_1702369424692') ||
 				this.procDefId.includes('Process_1670486210440') ||
 				this.procDefId.includes('Process_1706856742798')
+				this.procDefId.includes('Process_1670486210440') ||
+				this.procDefId.includes('Process_1706161347628') ||
+				this.procDefId.includes('Process_1706253503727') ||
+				this.procDefId.includes('Process_1706579004224') ||
+				this.procDefId.includes('Process_1706603798678')
 			) {
 				console.log('进入新版驳回')
 				this.$confirm(`确定驳回流程吗?`, '提示', {
@@ -908,6 +919,7 @@ export default {
 				this.procDefId.includes('Process_1669087010742') ||
 				this.procDefId.includes('Process_1668677901585') ||
 				this.procDefId.includes('Process_1670486210438') ||
+				this.procDefId.includes('Process_1708914940212') ||
 				this.procDefId.includes('Process_1670486210439') ||
 				this.procDefId.includes('Process_1668759076824') ||
 				this.procDefId.includes('Process_1670548572652') ||
@@ -954,7 +966,11 @@ export default {
 				this.procDefId.includes('Process_1699256313120') ||
 				this.procDefId.includes('Process_1699321267272') ||
 				this.procDefId.includes('Process_1699926014064') ||
-				this.procDefId.includes('Process_1698129477831')
+				this.procDefId.includes('Process_1698129477831') ||
+				this.procDefId.includes('Process_1706161347628') ||
+				this.procDefId.includes('Process_1706253503727') ||
+				this.procDefId.includes('Process_1706579004224') ||
+				this.procDefId.includes('Process_1706603798678')
 			) {
 				if (this.formType === '2') {
 					vars = {...vars, agree: false}