Browse Source

文件补充

sangwenwei 10 tháng trước cách đây
mục cha
commit
60ff125a6f

+ 25 - 0
src/api/ccpm/reimbursement/ReimbursementService.js

@@ -117,4 +117,29 @@ export default class ReimbursementService {
 		})
 	}
 
+
+	updateFileStatusById(param){
+		return request({
+			url: prefix + '/ccpmReimbursement/info/updateFileStatusById',
+			method: 'post',
+			data: param
+		})
+	}
+
+	findFileById (id) {
+		return request({
+			url: prefix + '/ccpmReimbursement/info/findFileById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+	saveFile (param) {
+		return request({
+			url: prefix + '/ccpmReimbursement/info/saveFile',
+			method: 'post',
+			data: param
+		})
+	}
+
 }

+ 23 - 0
src/api/consultancy/reimbursement/ReimbursementService.js

@@ -116,4 +116,27 @@ export default class ReimbursementService {
 			data: param
 		})
 	}
+	updateFileStatusById(param){
+		return request({
+			url: prefix + '/consultancyReimbursement/info/updateFileStatusById',
+			method: 'post',
+			data: param
+		})
+	}
+
+	findFileById (id) {
+		return request({
+			url: prefix + '/consultancyReimbursement/info/findFileById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+	saveFile (param) {
+		return request({
+			url: prefix + '/consultancyReimbursement/info/saveFile',
+			method: 'post',
+			data: param
+		})
+	}
 }

+ 21 - 0
src/api/cw/reimbursementApproval/ReimbursementApprovalService.js

@@ -38,6 +38,13 @@ export default class ReimbursementApprovalService {
       data: param
     })
   }
+	saveFile (param) {
+		return request({
+			url: prefix + '/reimbursementApproval/info/saveFile',
+			method: 'post',
+			data: param
+		})
+	}
   findById (id) {
     return request({
       url: prefix + '/reimbursementApproval/info/findById',
@@ -45,6 +52,13 @@ export default class ReimbursementApprovalService {
       params: {id: id}
     })
   }
+	findFileById (id) {
+		return request({
+			url: prefix + '/reimbursementApproval/info/findFileById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
   remove (id) {
     return request({
       url: prefix + '/reimbursementApproval/info/remove',
@@ -59,6 +73,13 @@ export default class ReimbursementApprovalService {
       data: param
     })
   }
+	updateFileStatusById(param){
+		return request({
+			url: prefix + '/reimbursementApproval/info/updateFileStatusById',
+			method: 'post',
+			data: param
+		})
+	}
   checkNumber (number) {
     return request({
       url: prefix + '/reimbursementApproval/info/checkNumber',

+ 24 - 0
src/api/sys/ReimbursementService.js

@@ -125,4 +125,28 @@ export default class ReimbursementService {
 		})
 	}
 
+	updateFileStatusById(param){
+		return request({
+			url: prefix + '/reimbursement/info/updateFileStatusById',
+			method: 'post',
+			data: param
+		})
+	}
+
+	findFileById (id) {
+		return request({
+			url: prefix + '/reimbursement/info/findFileById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+	saveFile (param) {
+		return request({
+			url: prefix + '/reimbursement/info/saveFile',
+			method: 'post',
+			data: param
+		})
+	}
+
 }

+ 24 - 0
src/api/zs/reimbursement/ReimbursementService.js

@@ -117,4 +117,28 @@ export default class ReimbursementService {
 		})
 	}
 
+	updateFileStatusById(param){
+		return request({
+			url: prefix + '/zsReimbursement/info/updateFileStatusById',
+			method: 'post',
+			data: param
+		})
+	}
+
+	findFileById (id) {
+		return request({
+			url: prefix + '/zsReimbursement/info/findFileById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+	saveFile (param) {
+		return request({
+			url: prefix + '/zsReimbursement/info/saveFile',
+			method: 'post',
+			data: param
+		})
+	}
+
 }

+ 164 - 1
src/views/ccpm/reimbursement/info/InfoList.vue

@@ -211,7 +211,12 @@
 					<el-button  :type="$dictUtils.getDictLabel('payment_status_info', scope.row.paymentStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("payment_status", scope.row.paymentStatus, '未付款')}} </el-button>
 				</template>
 			</vxe-column>
-          <vxe-column title="操作" width="130px" fixed="right" align="center">
+			<vxe-column min-width="100" title="文件补充状态" fixed="right" align="center" field="fileStatus">
+				<template #default="scope">
+					<el-button @click="detailFile(scope.row)"  :type="$dictUtils.getDictLabel('status_info', scope.row.fileStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.fileStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+          <vxe-column title="操作" width="200px" fixed="right" align="center">
             <template  #default="scope">
 <!--				管理员修改-->
 				<el-button v-if=" (isAdmin)" text type="primary" @click="editForm(scope.row)">修改</el-button>
@@ -224,6 +229,12 @@
 				<!--								付款-->
 				<el-button v-if="hasPermission('ccpm:user:payment') && scope.row.paymentStatus !== '1'" text type="primary"  @click="payment(scope.row)">付款</el-button>
 				<el-button v-if="hasPermission('ccpm:user:payment') && scope.row.paymentStatus === '1'" text type="primary"  @click="rePayment(scope.row)">撤回付款</el-button>
+				<!--								文件补充-->
+				<el-button v-if="hasPermission('file:supplement')&& (scope.row.fileStatus === '0' || scope.row.fileStatus === '5'|| scope.row.fileStatus === ''|| scope.row.fileStatus === null|| scope.row.fileStatus === undefined)" text type="primary" @click="addFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '3')" text type="primary"  @click="editFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '2')" text type="primary"  @click="rebackFile(scope.row)">撤回文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && scope.row.fileStatus === '4'" text type="primary"  @click="adjustFile(scope.row)">文件补充驳回调整</el-button>
+				<el-button v-if="scope.row.fileStatus==='2' && checkIsAuditFile(scope.row)" text type="primary"  @click="examineFile(scope.row)">审核</el-button>
 
 			</template>
           </vxe-column>
@@ -807,6 +818,13 @@
 				  this.procDefKeyXdj = data.key
 			  }
 		  })
+		  processService.getByName('项目-报销文件补充').then((data) => {
+			  console.log('file',data)
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.processDefinitionIdFile = data.id
+				  this.procDefKeyFile = data.key
+			  }
+		  })
       },
       // 删除
       del (id) {
@@ -1031,6 +1049,151 @@
 				})
 			})
 		},
+		//文件补充
+		addFile(row){
+			// 读取流程表单
+			let tabTitle = `发起流程【项目-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [项目-报销文件补充]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				status: 'startAndClose'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: 'startAndClose',
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessId: row.id,
+						isShow: false,
+						routePath: '/ccpm/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
+		//查询文件补充审核人
+		checkIsAuditFile(row){
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditFileUserIds)) {
+				for (const userId of row.auditFileUserIds) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		//文件补充  重新调整
+		todoFile(row){
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdFile
+			}).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: '/ccpm/reimbursement/info/InfoList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		//文件补充 审核
+		examineFile (row) {
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				if (data.fileStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充 驳回调整
+		adjustFile(row){
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				console.log('data', data)
+				if (data.fileStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充流程详情
+		detailFile(row){
+			taskService.getTaskDef({
+				procInsId: row.procInsIdFile,
+				procDefId: this.processDefinitionIdFile
+			}).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.fileSuppleId,
+						status: 'reback'
+					}
+				})
+			})
+		},
+		//文件补充撤回
+		rebackFile(row){
+			this.$confirm(`确定撤回流程吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				processService.revokeProcIns(row.procInsIdFile).then((data) => {
+					let param = {fileStatus: '3', fileSuppleId: row.fileSuppleId}
+					this.reimbursementService.updateFileStatusById(param)
+					this.$message.success('回退成功')
+					this.refreshList()
+				})
+			})
+		},
+		//文件补充 修改
+		editFile(row){
+			status = 'startAndClose'
+			let tabTitle = `发起流程【项目-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [项目-报销文件补充]`
+
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				businessId: row.fileSuppleId,
+				businessTable: 'ccpm_reimbursement_file_supplement',
+				status: status
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'ccpm_reimbursement_file_supplement',
+						businessId: row.fileSuppleId,
+						isShow: false,
+						routePath: '/ccpm/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
     }
   }
 </script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2152 - 0
src/views/ccpm/reimbursement/info/ReimbursementFileSupplementForm.vue


+ 164 - 1
src/views/consultancy/reimbursement/info/InfoList.vue

@@ -211,7 +211,12 @@
 					<el-button  :type="$dictUtils.getDictLabel('payment_status_info', scope.row.paymentStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("payment_status", scope.row.paymentStatus, '未付款')}} </el-button>
 				</template>
 			</vxe-column>
-          <vxe-column title="操作" width="130px" fixed="right" align="center">
+			<vxe-column min-width="100" title="文件补充状态" fixed="right" align="center" field="fileStatus">
+				<template #default="scope">
+					<el-button @click="detailFile(scope.row)"  :type="$dictUtils.getDictLabel('status_info', scope.row.fileStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.fileStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+          <vxe-column title="操作" width="200px" fixed="right" align="center">
             <template  #default="scope">
 				<!--				管理员修改-->
 				<el-button v-if=" (isAdmin)" text type="primary" @click="editForm(scope.row)">修改</el-button>
@@ -224,6 +229,12 @@
 				<!--								付款-->
 				<el-button v-if="hasPermission('consultancy:user:payment') && scope.row.paymentStatus !== '1'" text type="primary"  @click="payment(scope.row)">付款</el-button>
 				<el-button v-if="hasPermission('consultancy:user:payment') && scope.row.paymentStatus === '1'" text type="primary"  @click="rePayment(scope.row)">撤回付款</el-button>
+				<!--								文件补充-->
+				<el-button v-if="hasPermission('file:supplement')&& (scope.row.fileStatus === '0' || scope.row.fileStatus === '5'|| scope.row.fileStatus === ''|| scope.row.fileStatus === null|| scope.row.fileStatus === undefined)" text type="primary" @click="addFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '3')" text type="primary"  @click="editFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '2')" text type="primary"  @click="rebackFile(scope.row)">撤回文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && scope.row.fileStatus === '4'" text type="primary"  @click="adjustFile(scope.row)">文件补充驳回调整</el-button>
+				<el-button v-if="scope.row.fileStatus==='2' && checkIsAuditFile(scope.row)" text type="primary"  @click="examineFile(scope.row)">审核</el-button>
 
             </template>
           </vxe-column>
@@ -674,6 +685,13 @@
 				  this.procDefKeyZjb = data.key
 			  }
 		  })
+		  processService.getByName('咨询-报销文件补充').then((data) => {
+			  console.log('file',data)
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.processDefinitionIdFile = data.id
+				  this.procDefKeyFile = data.key
+			  }
+		  })
       },
       // 删除
       del (id) {
@@ -893,6 +911,151 @@
 				})
 			})
 		},
+		//文件补充
+		addFile(row){
+			// 读取流程表单
+			let tabTitle = `发起流程【咨询-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [咨询-报销文件补充]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				status: 'startAndClose'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: 'startAndClose',
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessId: row.id,
+						isShow: false,
+						routePath: '/consultancy/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
+		//查询文件补充审核人
+		checkIsAuditFile(row){
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditFileUserIds)) {
+				for (const userId of row.auditFileUserIds) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		//文件补充  重新调整
+		todoFile(row){
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdFile
+			}).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: '/consultancy/reimbursement/info/InfoList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		//文件补充 审核
+		examineFile (row) {
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				if (data.fileStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充 驳回调整
+		adjustFile(row){
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				console.log('data', data)
+				if (data.fileStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充流程详情
+		detailFile(row){
+			taskService.getTaskDef({
+				procInsId: row.procInsIdFile,
+				procDefId: this.processDefinitionIdFile
+			}).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.fileSuppleId,
+						status: 'reback'
+					}
+				})
+			})
+		},
+		//文件补充撤回
+		rebackFile(row){
+			this.$confirm(`确定撤回流程吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				processService.revokeProcIns(row.procInsIdFile).then((data) => {
+					let param = {fileStatus: '3', fileSuppleId: row.fileSuppleId}
+					this.reimbursementService.updateFileStatusById(param)
+					this.$message.success('回退成功')
+					this.refreshList()
+				})
+			})
+		},
+		//文件补充 修改
+		editFile(row){
+			status = 'startAndClose'
+			let tabTitle = `发起流程【咨询-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [咨询-报销文件补充]`
+
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				businessId: row.fileSuppleId,
+				businessTable: 'consultancy_reimbursement_file_supplement',
+				status: status
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'consultancy_reimbursement_file_supplement',
+						businessId: row.fileSuppleId,
+						isShow: false,
+						routePath: '/consultancy/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
     }
   }
 </script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2140 - 0
src/views/consultancy/reimbursement/info/ReimbursementFileSupplementForm.vue


+ 168 - 3
src/views/cw/reimbursementApproval/info/InfoList.vue

@@ -219,7 +219,12 @@
 							<el-button  :type="$dictUtils.getDictLabel('payment_status_info', scope.row.paymentStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("payment_status", scope.row.paymentStatus, '未付款')}} </el-button>
 						</template>
 					</vxe-column>
-					<vxe-column title="操作" min-width="130px" fixed="right" align="center">
+					<vxe-column min-width="100" title="文件补充状态" fixed="right" align="center" field="fileStatus">
+						<template #default="scope">
+							<el-button @click="detailFile(scope.row)"  :type="$dictUtils.getDictLabel('status_info', scope.row.fileStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.fileStatus, '未开始')}} </el-button>
+						</template>
+					</vxe-column>
+					<vxe-column title="操作" min-width="180px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
 								<el-button text type="primary" @click="editForm(scope.row)">修改</el-button>
@@ -236,6 +241,16 @@
 <!--								付款-->
 								<el-button v-if="hasPermission('cw:user:payment') && scope.row.paymentStatus !== '1'" text type="primary"  @click="payment(scope.row)">付款</el-button>
 								<el-button v-if="hasPermission('cw:user:payment') && scope.row.paymentStatus === '1'" text type="primary"  @click="rePayment(scope.row)">撤回付款</el-button>
+
+<!--								文件补充-->
+								<el-button v-if="hasPermission('file:supplement')&& (scope.row.fileStatus === '0' || scope.row.fileStatus === '5'|| scope.row.fileStatus === ''|| scope.row.fileStatus === null|| scope.row.fileStatus === undefined)" text type="primary" @click="addFile(scope.row)">文件补充</el-button>
+								<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '3')" text type="primary"  @click="editFile(scope.row)">文件补充</el-button>
+								<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '2')" text type="primary"  @click="rebackFile(scope.row)">撤回文件补充</el-button>
+								<el-button v-if="hasPermission('file:supplement') && scope.row.fileStatus === '4'" text type="primary"  @click="adjustFile(scope.row)">文件补充驳回调整</el-button>
+								<el-button v-if="scope.row.fileStatus==='2' && checkIsAuditFile(scope.row)" text type="primary"  @click="examineFile(scope.row)">审核</el-button>
+
+
+
 							</div>
 						</template>
 					</vxe-column>
@@ -715,8 +730,13 @@
 						this.procDefKeySs = data.key
 					}
 				})
-
-
+				processService.getByName('会计-报销文件补充').then((data) => {
+					console.log('file',data)
+					if (!this.commonJS.isEmpty(data.id)) {
+						this.processDefinitionIdFile = data.id
+						this.procDefKeyFile = data.key
+					}
+				})
 			},
 			// 删除
 			del (id) {
@@ -961,6 +981,151 @@
 					})
 				})
 			},
+			//文件补充
+			addFile(row){
+				// 读取流程表单
+				let tabTitle = `发起流程【会计-报销文件补充】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报销文件补充]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+					status: 'startAndClose'}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionIdFile,
+							procDefKey: this.procDefKeyFile,
+							status: 'startAndClose',
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessId: row.id,
+							isShow: false,
+							routePath: '/cw/reimbursementApproval/info/InfoList'
+						}
+					})
+				})
+			},
+			//查询文件补充审核人
+			checkIsAuditFile(row){
+				let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+				if (this.commonJS.isNotEmpty(row.auditFileUserIds)) {
+					for (const userId of row.auditFileUserIds) {
+						if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+							return true
+						}
+					}
+				}
+				return false
+			},
+			//文件补充  重新调整
+			todoFile(row){
+				let cUser = false
+				taskService.getTaskDefInfo({
+					taskId: row.taskIdFile
+				}).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/reimbursementApproval/info/InfoList'   // 数据处理后需要跳转的页面路径
+						}
+					})
+				})
+			},
+			//文件补充 审核
+			examineFile (row) {
+				this.reimbursementApprovalService.findFileById(row.fileSuppleId).then((data) => {
+					if (data.fileStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todoFile(row)
+					}
+				})
+			},
+			//文件补充 驳回调整
+			adjustFile(row){
+				this.reimbursementApprovalService.findFileById(row.fileSuppleId).then((data) => {
+					console.log('data', data)
+					if (data.fileStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todoFile(row)
+					}
+				})
+			},
+			//文件补充流程详情
+			detailFile(row){
+				taskService.getTaskDef({
+					procInsId: row.procInsIdFile,
+					procDefId: this.processDefinitionIdFile
+				}).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.fileSuppleId,
+							status: 'reback'
+						}
+					})
+				})
+			},
+			//文件补充撤回
+			rebackFile(row){
+				this.$confirm(`确定撤回流程吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					processService.revokeProcIns(row.procInsIdFile).then((data) => {
+						let param = {fileStatus: '3', fileSuppleId: row.fileSuppleId}
+						this.reimbursementApprovalService.updateFileStatusById(param)
+						this.$message.success('回退成功')
+						this.refreshList()
+					})
+				})
+			},
+			//文件补充 修改
+			editFile(row){
+				status = 'startAndClose'
+				let tabTitle = `发起流程【会计-报销文件补充】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报销文件补充]`
+
+				taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+					businessId: row.fileSuppleId,
+					businessTable: 'cw_reimbursement_file_supplement',
+					status: status
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionIdFile,
+							procDefKey: this.procDefKeyFile,
+							status: status,
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessTable: 'cw_reimbursement_file_supplement',
+							businessId: row.fileSuppleId,
+							isShow: false,
+							routePath: '/cw/reimbursementApproval/info/InfoList'
+						}
+					})
+				})
+			},
 		}
 	}
 </script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2472 - 0
src/views/cw/reimbursementApproval/info/ReimbursementFileSupplementForm.vue


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

@@ -776,6 +776,11 @@ export default {
 		// Process_1711418224962 物资-项目报销
 		// Process_1702534302878 日常办公-请假申请
 		// Process_1713769833657 苏州-业务操作报销
+		// Process_1722305645394 会计-报销文件补充
+		// Process_1722389642543 评估-报销文件补充
+		// Process_1722404901733 中审-报销文件补充
+		// Process_1722412442950 项目-报销文件补充
+		// Process_1722416114655 咨询-报销文件补充
 		// 驳回
 		reject(vars) {
 			if (this.procDefId.includes('Process_1667978088459') ||
@@ -864,7 +869,12 @@ export default {
 				this.procDefId.includes('Process_1711414021644') ||
 				this.procDefId.includes('Process_1711418224962') ||
 				this.procDefId.includes('Process_1702534302878') ||
-				this.procDefId.includes('Process_1713769833657')
+				this.procDefId.includes('Process_1713769833657') ||
+				this.procDefId.includes('Process_1722305645394') ||
+				this.procDefId.includes('Process_1722389642543') ||
+				this.procDefId.includes('Process_1722404901733') ||
+				this.procDefId.includes('Process_1722412442950') ||
+				this.procDefId.includes('Process_1722416114655')
 			) {
 				console.log('进入新版驳回')
 				this.$confirm(`确定驳回流程吗?`, '提示', {

+ 167 - 1
src/views/reimbursement/info/InfoList.vue

@@ -202,7 +202,12 @@
 					<el-button  :type="$dictUtils.getDictLabel('payment_status_info', scope.row.paymentStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("payment_status", scope.row.paymentStatus, '未付款')}} </el-button>
 				</template>
 			</vxe-column>
-          <vxe-column title="操作" min-width="130px" fixed="right" align="center">
+			<vxe-column min-width="100" title="文件补充状态" fixed="right" align="center" field="fileStatus">
+				<template #default="scope">
+					<el-button @click="detailFile(scope.row)"  :type="$dictUtils.getDictLabel('status_info', scope.row.fileStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.fileStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+          <vxe-column title="操作" min-width="200px" fixed="right" align="center">
             <template  #default="scope">
 <!--				管理员修改-->
 				<el-button v-if=" (isAdmin)" text type="primary" @click="editForm(scope.row)">修改</el-button>
@@ -215,6 +220,14 @@
 				<!--								付款-->
 				<el-button v-if="hasPermission('pg:user:payment') && scope.row.paymentStatus !== '1'" text type="primary"  @click="payment(scope.row)">付款</el-button>
 				<el-button v-if="hasPermission('pg:user:payment') && scope.row.paymentStatus === '1'" text type="primary"  @click="rePayment(scope.row)">撤回付款</el-button>
+
+				<!--								文件补充-->
+				<el-button v-if="hasPermission('file:supplement')&& (scope.row.fileStatus === '0' || scope.row.fileStatus === '5'|| scope.row.fileStatus === ''|| scope.row.fileStatus === null|| scope.row.fileStatus === undefined)" text type="primary" @click="addFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '3')" text type="primary"  @click="editFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '2')" text type="primary"  @click="rebackFile(scope.row)">撤回文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && scope.row.fileStatus === '4'" text type="primary"  @click="adjustFile(scope.row)">文件补充驳回调整</el-button>
+				<el-button v-if="scope.row.fileStatus==='2' && checkIsAuditFile(scope.row)" text type="primary"  @click="examineFile(scope.row)">审核</el-button>
+
 			</template>
           </vxe-column>
         </vxe-table>
@@ -665,6 +678,14 @@
 				  this.procDefKeyZjb = data.key
 			  }
 		  })
+
+		  processService.getByName('评估-报销文件补充').then((data) => {
+			  console.log('file',data)
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.processDefinitionIdFile = data.id
+				  this.procDefKeyFile = data.key
+			  }
+		  })
       },
       // 删除
       del (id) {
@@ -904,6 +925,151 @@
 				})
 			})
 		},
+		//文件补充
+		addFile(row){
+			// 读取流程表单
+			let tabTitle = `发起流程【评估-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-报销文件补充]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				status: 'startAndClose'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: 'startAndClose',
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessId: row.id,
+						isShow: false,
+						routePath: '/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
+		//查询文件补充审核人
+		checkIsAuditFile(row){
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditFileUserIds)) {
+				for (const userId of row.auditFileUserIds) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		//文件补充  重新调整
+		todoFile(row){
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdFile
+			}).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: '/reimbursement/info/InfoList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		//文件补充 审核
+		examineFile (row) {
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				if (data.fileStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充 驳回调整
+		adjustFile(row){
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				console.log('data', data)
+				if (data.fileStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充流程详情
+		detailFile(row){
+			taskService.getTaskDef({
+				procInsId: row.procInsIdFile,
+				procDefId: this.processDefinitionIdFile
+			}).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.fileSuppleId,
+						status: 'reback'
+					}
+				})
+			})
+		},
+		//文件补充撤回
+		rebackFile(row){
+			this.$confirm(`确定撤回流程吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				processService.revokeProcIns(row.procInsIdFile).then((data) => {
+					let param = {fileStatus: '3', fileSuppleId: row.fileSuppleId}
+					this.reimbursementService.updateFileStatusById(param)
+					this.$message.success('回退成功')
+					this.refreshList()
+				})
+			})
+		},
+		//文件补充 修改
+		editFile(row){
+			status = 'startAndClose'
+			let tabTitle = `发起流程【评估-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-报销文件补充]`
+
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				businessId: row.fileSuppleId,
+				businessTable: 'reimbursement_file_supplement',
+				status: status
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'reimbursement_file_supplement',
+						businessId: row.fileSuppleId,
+						isShow: false,
+						routePath: '/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
     }
   }
 </script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2286 - 0
src/views/reimbursement/info/ReimbursementFileSupplementForm.vue


+ 164 - 1
src/views/zs/reimbursement/info/InfoList.vue

@@ -211,7 +211,12 @@
 					<el-button  :type="$dictUtils.getDictLabel('payment_status_info', scope.row.paymentStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("payment_status", scope.row.paymentStatus, '未付款')}} </el-button>
 				</template>
 			</vxe-column>
-          <vxe-column title="操作" width="130px" fixed="right" align="center">
+			<vxe-column min-width="100" title="文件补充状态" fixed="right" align="center" field="fileStatus">
+				<template #default="scope">
+					<el-button @click="detailFile(scope.row)"  :type="$dictUtils.getDictLabel('status_info', scope.row.fileStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.fileStatus, '未开始')}} </el-button>
+				</template>
+			</vxe-column>
+          <vxe-column title="操作" width="200px" fixed="right" align="center">
             <template  #default="scope">
 				<!--				管理员修改-->
 				<el-button v-if=" (isAdmin)" text type="primary" @click="editForm(scope.row)">修改</el-button>
@@ -224,6 +229,12 @@
 				<!--								付款-->
 				<el-button v-if="hasPermission('zs:user:payment') && scope.row.paymentStatus !== '1'" text type="primary"  @click="payment(scope.row)">付款</el-button>
 				<el-button v-if="hasPermission('zs:user:payment') && scope.row.paymentStatus === '1'" text type="primary"  @click="rePayment(scope.row)">撤回付款</el-button>
+				<!--								文件补充-->
+				<el-button v-if="hasPermission('file:supplement')&& (scope.row.fileStatus === '0' || scope.row.fileStatus === '5'|| scope.row.fileStatus === ''|| scope.row.fileStatus === null|| scope.row.fileStatus === undefined)" text type="primary" @click="addFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '3')" text type="primary"  @click="editFile(scope.row)">文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && (scope.row.fileStatus === '2')" text type="primary"  @click="rebackFile(scope.row)">撤回文件补充</el-button>
+				<el-button v-if="hasPermission('file:supplement') && scope.row.fileStatus === '4'" text type="primary"  @click="adjustFile(scope.row)">文件补充驳回调整</el-button>
+				<el-button v-if="scope.row.fileStatus==='2' && checkIsAuditFile(scope.row)" text type="primary"  @click="examineFile(scope.row)">审核</el-button>
 
 			</template>
           </vxe-column>
@@ -675,6 +686,13 @@
 				  this.procDefKeyZjb = data.key
 			  }
 		  })
+		  processService.getByName('中审-报销文件补充').then((data) => {
+			  console.log('file',data)
+			  if (!this.commonJS.isEmpty(data.id)) {
+				  this.processDefinitionIdFile = data.id
+				  this.procDefKeyFile = data.key
+			  }
+		  })
       },
       // 删除
       del (id) {
@@ -894,6 +912,151 @@
 				})
 			})
 		},
+		//文件补充
+		addFile(row){
+			// 读取流程表单
+			let tabTitle = `发起流程【中审-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [中审-报销文件补充]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				status: 'startAndClose'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: 'startAndClose',
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessId: row.id,
+						isShow: false,
+						routePath: '/zs/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
+		//查询文件补充审核人
+		checkIsAuditFile(row){
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditFileUserIds)) {
+				for (const userId of row.auditFileUserIds) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		//文件补充  重新调整
+		todoFile(row){
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdFile
+			}).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: '/zs/reimbursement/info/InfoList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		//文件补充 审核
+		examineFile (row) {
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				if (data.fileStatus !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充 驳回调整
+		adjustFile(row){
+			this.reimbursementService.findFileById(row.fileSuppleId).then((data) => {
+				console.log('data', data)
+				if (data.fileStatus !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFile(row)
+				}
+			})
+		},
+		//文件补充流程详情
+		detailFile(row){
+			taskService.getTaskDef({
+				procInsId: row.procInsIdFile,
+				procDefId: this.processDefinitionIdFile
+			}).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.fileSuppleId,
+						status: 'reback'
+					}
+				})
+			})
+		},
+		//文件补充撤回
+		rebackFile(row){
+			this.$confirm(`确定撤回流程吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				processService.revokeProcIns(row.procInsIdFile).then((data) => {
+					let param = {fileStatus: '3', fileSuppleId: row.fileSuppleId}
+					this.reimbursementService.updateFileStatusById(param)
+					this.$message.success('回退成功')
+					this.refreshList()
+				})
+			})
+		},
+		//文件补充 修改
+		editFile(row){
+			status = 'startAndClose'
+			let tabTitle = `发起流程【中审-报销文件补充】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [中审-报销文件补充]`
+
+			taskService.getTaskDef({ procDefId: this.processDefinitionIdFile,
+				businessId: row.fileSuppleId,
+				businessTable: 'zs_reimbursement_file_supplement',
+				status: status
+			}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionIdFile,
+						procDefKey: this.procDefKeyFile,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'zs_reimbursement_file_supplement',
+						businessId: row.fileSuppleId,
+						isShow: false,
+						routePath: '/zs/reimbursement/info/InfoList'
+					}
+				})
+			})
+		},
     }
   }
 </script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2139 - 0
src/views/zs/reimbursement/info/ReimbursementFileSupplementForm.vue