Browse Source

入离职功能调整

wangqiang 1 year ago
parent
commit
2e62604d37

+ 9 - 8
src/views/human/depart/handover/HandoverAddForm.vue

@@ -33,9 +33,10 @@
 								  :rules="[
 								  	{required: true, message: '项目经理不能为空', trigger: 'change'}
                    ]">
-						<UserSelectSignatory style="width: 100%" ref="userSelect1"
-											 :readonly="true" :limit='1' :modelValue="inputForm.projectManager"
-											 @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelectSignatory>
+<!--						<UserSelectSignatory style="width: 100%" ref="userSelect1"-->
+<!--											 :readonly="true" :limit='1' :modelValue="inputForm.projectManager"-->
+<!--											 @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelectSignatory>-->
+						<UserSelect2 :limit='1' :modelValue="inputForm.projectManager" @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelect2>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
@@ -43,9 +44,7 @@
 								  :rules="[
 								  	{required: true, message: '底稿管理员不能为空', trigger: 'change'}
                    ]">
-						<UserSelectSignatory style="width: 100%" ref="userSelect2"
-											 :readonly="true" :limit='1' :modelValue="inputForm.draftAdministrator"
-											 @update:modelValue='(value, label) => {inputForm.draftAdministrator = value}'></UserSelectSignatory>
+						<UserSelectAll size="medium" :limit='1' :modelValue="inputForm.draftAdministrator" @update:modelValue='(value) => {inputForm.draftAdministrator = value}'></UserSelectAll>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
@@ -63,7 +62,8 @@
 	import SelectTree from '@/components/treeSelect/treeSelect.vue'
 	import handoverService from '@/api/human/depart/HandoverService'
 	import CommonApi from '@/api/cw/common/CommonApi'
-	import UserSelectSignatory from '@/views/cw/workClientInfo/clientUserSelect'
+	import UserSelectAll from '@/components/userSelect'
+	import UserSelect2 from '@/components/userSelect'
 
 	export default {
 		props: {
@@ -106,7 +106,8 @@
 		},
 		components: {
 			SelectTree,
-			UserSelectSignatory,
+			UserSelectAll,
+			UserSelect2,
 		},
 		computed: {
 			bus: {

+ 24 - 5
src/views/human/depart/registration/DepartRegistrationAddForm.vue

@@ -43,8 +43,8 @@
 						<el-date-picker
 							style="width: 100%;"
 							v-model="inputForm.arrivalDate"
-							type="datetime"
-							value-format="YYYY-MM-DD HH:mm:ss"
+							type="date"
+							value-format="YYYY-MM-DD"
 							placeholder="选择到岗日期">
 						</el-date-picker>
 					</el-form-item>
@@ -54,15 +54,21 @@
 						<el-date-picker
 							style="width: 100%;"
 							v-model="inputForm.departResignationDate"
-							type="datetime"
-							value-format="YYYY-MM-DD HH:mm:ss"
+							type="date"
+							value-format="YYYY-MM-DD"
 							placeholder="选择预定离职日期">
 						</el-date-picker>
 					</el-form-item>
 				</el-col>
+
+			</el-row>
+			<el-row :gutter="26">
 				<el-col :span="12">
 					<el-form-item label="备注" prop="remarks" :rules="[]">
-						<el-input type="textarea" v-model="inputForm.remarks"></el-input>
+						<!--						<el-input type="textarea" v-model="inputForm.remarks"></el-input>-->
+						<el-input type="textarea"
+								  maxlength="500" placeholder="请输入备注"
+								  show-word-limit v-model="inputForm.remarks"></el-input>
 					</el-form-item>
 				</el-col>
 			</el-row>
@@ -236,6 +242,19 @@
 					}
 				})
 			},
+			// 暂存
+			async saveForm (callback) {
+				this.loading = true
+				this.inputForm.type = '1'
+				departRegistrationService.save(this.inputForm).then((data) => {
+					callback()
+					this.$refs.inputForm.resetFields()
+					this.loading = false
+				}).catch(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = false
+				})
+			},
 			// 送审
 			async startForm (callback) {
 				this.$refs['inputForm'].validate(async (valid) => {

+ 12 - 7
src/views/human/depart/registration/DepartRegistrationEditForm.vue

@@ -11,7 +11,7 @@
 			v-model="visible">
 			<el-row>
 				<el-row>
-					<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''" :disabled="(status === 'audit' || status === 'taskFormDetail')"
+					<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''" :disabled="(status === 'audit' || status === 'taskFormDetail' || method === 'view')"
 							 label-width="100px" @submit.native.prevent>
 
 						<el-divider content-position="left"><i class="el-icon-document"></i> 社保信息</el-divider>
@@ -54,8 +54,8 @@
 									<el-date-picker
 										style="width: 100%;"
 										v-model="inputForm.arrivalDate"
-										type="datetime"
-										value-format="YYYY-MM-DD HH:mm:ss"
+										type="date"
+										value-format="YYYY-MM-DD"
 										placeholder="选择到岗日期">
 									</el-date-picker>
 								</el-form-item>
@@ -65,19 +65,22 @@
 									<el-date-picker
 										style="width: 100%;"
 										v-model="inputForm.departResignationDate"
-										type="datetime"
-										value-format="YYYY-MM-DD HH:mm:ss"
+										type="date"
+										value-format="YYYY-MM-DD"
 										placeholder="选择预定离职日期">
 									</el-date-picker>
 								</el-form-item>
 							</el-col>
+						</el-row>
+						<el-row :gutter="26">
 							<el-col :span="12">
 								<el-form-item label="备注" prop="remarks" :rules="[]">
-									<el-input type="textarea" v-model="inputForm.remarks"></el-input>
+									<el-input type="textarea"
+											  maxlength="500" placeholder="请输入备注"
+											  show-word-limit v-model="inputForm.remarks"></el-input>
 								</el-form-item>
 							</el-col>
 						</el-row>
-
 					</el-form>
 				</el-row>
 			</el-row>
@@ -193,6 +196,8 @@
 					this.title = `新建离职申请`
 				} else if (method === 'edit') {
 					this.title = '修改离职申请信息'
+				} else if (method === 'view') {
+					this.title = '查看离职申请信息'
 				}
 				this.inputForm.id = id
 				this.visible = true

+ 66 - 17
src/views/human/depart/registration/DepartRegistrationList.vue

@@ -14,7 +14,8 @@
     <div class="jp-table top" style="">
       <vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
         <template #buttons>
-          <el-button v-if="!haveComplete" type="primary" icon="el-icon-plus" @click="start()">新建</el-button>
+<!--          <el-button v-if="!haveComplete" type="primary" icon="el-icon-plus" @click="start()">新建</el-button>-->
+          <el-button  type="primary" icon="el-icon-plus" @click="start()">新建</el-button>
         </template>
       </vxe-toolbar>
       <div style="height: calc(100% - 90px)">
@@ -43,19 +44,24 @@
           :data="dataList"
           :checkbox-config="{}">
           <vxe-column type="seq" width="60" title="序号"></vxe-column>
-          <vxe-column min-width="160" align="center" title="姓名" field="name"></vxe-column>
-          <vxe-column min-width="160" align="center" title="联系电话" field="mobilePhone"></vxe-column>
+          <vxe-column min-width="160" align="center" title="姓名" field="name">
+			  <template #default="scope">
+				  <el-link  type="primary" :underline="false" v-if="hasPermission('depart:view')" @click="view(scope.row.id)">{{scope.row.name}}</el-link>
+				  <span v-else>{{scope.row.name}}</span>
+			  </template>
+		  </vxe-column>
+          <vxe-column min-width="160" align="center" title="联系电话" field="mobile"></vxe-column>
 		  <vxe-column min-width="160" align="center" title="所属部门" field="departmentName"></vxe-column>
 			<vxe-column min-width="100" title="状态" fixed="right" align="center" field="type">
 				<template #default="scope">
-					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('human_status_info', scope.row.type, '')" effect="dark" >{{$dictUtils.getDictLabel("human_status", scope.row.type, '未开始')}} </el-button>
+					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.type, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.type, '未开始')}} </el-button>
 				</template>
 			</vxe-column>
 			<vxe-column min-width="100" title="交接状态" fixed="right" align="center" field="handoverType">
 				<template #default="scope">
 					<el-button @click="handoverDetail(scope.row)"
-							   :type="$dictUtils.getDictLabel('cw_status_flag', scope.row.handoverType, '')" effect="dark" >
-						{{$dictUtils.getDictLabel("cw_status", scope.row.handoverType, '未开始')}} </el-button>
+							   :type="$dictUtils.getDictLabel('status_info', scope.row.handoverType, '')" effect="dark" >
+						{{$dictUtils.getDictLabel("status", scope.row.handoverType, '未开始')}} </el-button>
 				</template>
 			</vxe-column>
 
@@ -68,17 +74,17 @@
                       scope.row.type === '5' || scope.row.type === '4' || scope.row.type === '3'" text type="primary" @click="del(scope.row.id)">删除</el-button>
               </div>
 				<div v-else>
-					<el-button v-if="hasPermission('depart:edit') && scope.row.createById === $store.state.user.id && (scope.row.type === '1' || scope.row.type === '3' )" text type="primary"   @click="edit(scope.row)">修改</el-button>
+					<el-button v-if="hasPermission('depart:edit') && scope.row.createById === $store.state.user.id && (scope.row.type === '1' || scope.row.type === '3' )" text type="primary"   @click="editForm(scope.row)">修改</el-button>
 					<el-button v-if="hasPermission('depart:edit') && scope.row.createById === $store.state.user.id && (scope.row.type === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
-					<el-button v-if="hasPermission('depart:del') && scope.row.createById === $store.state.user.id && (scope.row.type === '1')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+					<el-button v-if="hasPermission('depart:del') && scope.row.createById === $store.state.user.id && (scope.row.type === '1' || scope.row.type === '3' || scope.row.type === undefined)" text type="primary"  @click="del(scope.row.id)">删除</el-button>
 					<!--              审核-->
 					<el-button v-if="scope.row.type==='2'&& checkIsAudit(scope.row)" text type="primary"  @click="examine(scope.row)">审核</el-button>
 					<!--              被驳回后当前申请人重新调整-->
-					<el-button v-if="scope.row.createById === $store.state.user.id&&scope.row.type === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
-					<el-button v-if="(scope.row.createById === $store.state.user.id) && haveComplete && (scope.row.handoverType === undefined || scope.row.handoverType === '0' || scope.row.handoverType === '1' || scope.row.handoverType === '3')" text type="primary" @click="handover(scope.row)">离职交接</el-button>
-					<!--借用撤回-->
-					<el-button v-if="haveComplete && scope.row.handoverType === '2' && (scope.row.createById === $store.state.user.id)" text type="primary" @click="rebackHandover(scope.row)">撤回离职交接</el-button>
-					<el-button v-if="scope.row.createById === $store.state.user.id&&haveComplete&& scope.row.handoverType === '4'" text type="primary"  @click="adjustHandover(scope.row)">驳回调整</el-button>
+					<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.type === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
+					<el-button v-if="(scope.row.createById === $store.state.user.id) && scope.row.type === '5' && (scope.row.handoverType === undefined || scope.row.handoverType === '0' || scope.row.handoverType === '1' || scope.row.handoverType === '3')" text type="primary" @click="handover(scope.row)">离职交接</el-button>
+					<!--离职交接撤回-->
+					<el-button v-if="scope.row.type === '5' && scope.row.handoverType === '2' && (scope.row.createById === $store.state.user.id)" text type="primary" @click="rebackHandover(scope.row)">撤回离职交接</el-button>
+					<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.type === '5'&& scope.row.handoverType === '4'" text type="primary"  @click="adjustHandover(scope.row)">驳回调整</el-button>
 				</div>
             </template>
           </vxe-column>
@@ -109,7 +115,7 @@
   export default {
     data () {
       return {
-		  haveComplete: false,
+		  // haveComplete: false,
         num: 0,
         searchForm: {
           projectNumber: '',
@@ -158,6 +164,10 @@
       this.refreshList()
     },
     methods: {
+		// 查看
+		view (id) {
+			this.$refs.departRegistrationEditForm.init('view', id)
+		},
       // 新增
       add () {
       },
@@ -201,9 +211,9 @@
 				  this.handoverDefAuditKey = data.key
 			  }
 		  })
-		  departRegistrationService.selectComplete().then((data) => {
-				this.haveComplete = data
-		  })
+		  // departRegistrationService.selectComplete().then((data) => {
+			// 	this.haveComplete = data
+		  // })
       },
       // 当前页
       currentChangeHandle ({ currentPage, pageSize }) {
@@ -247,6 +257,45 @@
 			  })
 		  })
       },
+		editForm (row) {
+			// 暂存修改
+			let status = ''
+			if (row.type === '1') {
+				status = 'startAndHold'
+			}
+			// 撤回或者驳回修改
+			if (row.type === '3') {
+				status = 'startAndClose'
+			} else if (row.status === '4') {
+				status = 'reapplyFlag'
+			}
+			// 读取流程表单
+			let tabTitle = `发起流程【离职申请】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [离职申请]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionAuditId,
+				businessId: row.id,
+				businessTable: 'human_resources_depart_registration',
+				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.processDefinitionAuditId,
+						procDefKey: this.procDefKey,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'human_resources_depart_registration',
+						businessId: row.id,
+						isShow: false,
+						routePath: '/human/depart/registration/DepartRegistrationList'
+					}
+				})
+			})
+		},
 		// 查看离职申请流程结果
 		detail (row) {
 			if (row.type !== '0' && row.type !== '1') {

+ 76 - 16
src/views/human/practice/register/RegistrationAddForm.vue

@@ -21,7 +21,7 @@
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
-					<el-form-item label="身份证号码" prop="idCard" :rules="[{required: true, message: '身份证号码不能为空', trigger: 'change'}]">
+					<el-form-item label="身份证号码" prop="idCard" :rules="[{required: true,validator: validator.isCardId, trigger:'blur'}]">
 						<el-input v-model="inputForm.idCard"></el-input>
 					</el-form-item>
 				</el-col>
@@ -37,7 +37,14 @@
 				</el-col>
 				<el-col :span="12">
 					<el-form-item label="政治面貌" prop="politicalOutlook" :rules="[]">
-						<el-input v-model="inputForm.politicalOutlook"></el-input>
+						<el-select v-model="inputForm.politicalOutlook" placeholder="请选择政治面貌" style="width:100%;">
+							<el-option
+								v-for="item in $dictUtils.getDictList('political_outlook')"
+								:key="item.value"
+								:label="item.label"
+								:value="item.value">
+							</el-option>
+						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
@@ -57,12 +64,14 @@
 				</el-col>
 				<el-col :span="12">
 					<el-form-item label="QQ号/微信号" prop="qqNum" :rules="[]">
-						<el-input v-model="inputForm.qqNum"></el-input>
+						<el-input v-model="inputForm.qqNum" :maxlength="20" :minlength="5"></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
 					<el-form-item label="简介" prop="remarks" :rules="[]">
-						<el-input type="textarea" v-model="inputForm.remarks"></el-input>
+						<el-input type="textarea"
+								  maxlength="500" placeholder="请输入简介"
+								  show-word-limit v-model="inputForm.remarks"></el-input>
 					</el-form-item>
 				</el-col>
 				<el-form v-if="status === 'audit' || status === 'taskFormDetail'" style="width: 100%" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
@@ -97,9 +106,10 @@
 										  :rules="[
 								  	{required: true, message: '项目经理不能为空', trigger: 'change'}
                    ]">
-								<UserSelectSignatory style="width: 100%" ref="userSelect1"
-													 :readonly="true" :limit='1' :modelValue="inputForm.projectManager"
-													 @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelectSignatory>
+<!--								<UserSelectSignatory style="width: 100%" ref="userSelect1"-->
+<!--													 :readonly="true" :limit='1' :modelValue="inputForm.projectManager"-->
+<!--													 @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelectSignatory>-->
+								<UserSelect2 :limit='1' :modelValue="inputForm.projectManager" @update:modelValue='(value, label) => {inputForm.projectManager = value}'></UserSelect2>
 							</el-form-item>
 						</el-col>
 						<el-col :span="12">
@@ -107,8 +117,8 @@
 								<el-date-picker
 									style="width: 100%;"
 									v-model="inputForm.practiceStartDay"
-									type="datetime"
-									value-format="YYYY-MM-DD HH:mm:ss"
+									type="date"
+									value-format="YYYY-MM-DD"
 									placeholder="选择实习开始日期">
 								</el-date-picker>
 							</el-form-item>
@@ -118,8 +128,8 @@
 								<el-date-picker
 									style="width: 100%;"
 									v-model="inputForm.practiceCompleteDay"
-									type="datetime"
-									value-format="YYYY-MM-DD HH:mm:ss"
+									type="date"
+									value-format="YYYY-MM-DD"
 									placeholder="选择实习结束日期">
 								</el-date-picker>
 							</el-form-item>
@@ -247,7 +257,7 @@
 <script>
 	import registerService from '@/api/human/register/RegisterService'
 	import SelectTree from '@/components/treeSelect/treeSelect.vue'
-	import UserSelectSignatory from '@/views/cw/workClientInfo/clientUserSelect'
+	import UserSelect2 from '@/components/userSelect'
 
 	export default {
 		props: {
@@ -301,7 +311,7 @@
 		},
 		components: {
 			SelectTree,
-			UserSelectSignatory,
+			UserSelect2,
 		},
 		computed: {
 			bus: {
@@ -392,9 +402,26 @@
 				this.$refs['inputForm'].validate((valid) => {
 					if (valid) {
 						this.loading = true
-						if (this.commonJS.isEmpty(this.inputForm.files)) {
-							this.inputForm.files = []
+						if (this.commonJS.isEmpty(this.inputForm.idCard)) {
+							this.loading = false
+							this.$message.error('身份证号码不能为空')
+							throw new Error('身份证号码不能为空')
+						}
+						if (!this.validateXG.isPhoneOrMobile(this.inputForm.mobilePhone)) {
+							this.$message.error('”联系电话“填写不正确,请重新填写')
+							this.loading = false
+							throw new Error('”联系电话“填写不正确,请重新填写')
+						}
+						if (this.commonJS.isNotEmpty(this.inputForm.qqNum)){
+							//判断是否是汉字
+							const chineseRegex = /[\u4e00-\u9fa5]/;
+							if (chineseRegex.test(this.inputForm.qqNum)){
+								this.$message.error('QQ号/微信号填写不正确,请重新填写')
+								this.loading = false
+								throw new Error('QQ号/微信号填写不正确,请重新填写')
+							}
 						}
+
 						this.inputForm.id = this.businessId
 						registerService.save(this.inputForm).then((data) => {
 							this.close()
@@ -425,11 +452,44 @@
 					}
 				})
 			},
+
+			// 暂存
+			async saveForm (callback) {
+				this.loading = true
+				this.inputForm.type = '1'
+				registerService.save(this.inputForm).then((data) => {
+					callback()
+					this.$refs.inputForm.resetFields()
+					this.loading = false
+				}).catch(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = false
+				})
+			},
 			// 送审
 			async startForm (callback) {
 				this.$refs['inputForm'].validate(async (valid) => {
 					if (valid) {
 						this.loading = true
+						if (this.commonJS.isEmpty(this.inputForm.idCard)) {
+							this.loading = false
+							this.$message.error('身份证号码不能为空')
+							throw new Error('身份证号码不能为空')
+						}
+						if (!this.validateXG.isPhoneOrMobile(this.inputForm.mobilePhone)) {
+							this.$message.error('”联系电话“填写不正确,请重新填写')
+							this.loading = false
+							throw new Error('”联系电话“填写不正确,请重新填写')
+						}
+						if (this.commonJS.isNotEmpty(this.inputForm.qqNum)){
+							//判断是否是汉字
+							const chineseRegex = /[\u4e00-\u9fa5]/;
+							if (chineseRegex.test(this.inputForm.qqNum)){
+								this.$message.error('QQ号/微信号填写不正确,请重新填写')
+								this.loading = false
+								throw new Error('QQ号/微信号填写不正确,请重新填写')
+							}
+						}
 						this.inputForm.type = '2'
 						registerService.save(this.inputForm).then((data) => {
 							this.inputForm.title = `${this.$store.state.user.name} 发起了 [${data.no}] - [实习登记]`
@@ -539,7 +599,7 @@
 					this.$refs.familyTable.remove(row)
 					this.inputForm.familyMembers.splice(rowIndex, 1)
 				}
-			},
+			}
 		}
 	}
 </script>

+ 56 - 1
src/views/human/practice/register/RegistrationList.vue

@@ -51,7 +51,7 @@
           <vxe-column min-width="160" align="center" title="项目经理" field="projectManagerName"></vxe-column>
 			<vxe-column min-width="100" title="状态" fixed="right" align="center" field="type">
 				<template #default="scope">
-					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('human_status_info', scope.row.type, '')" effect="dark" >{{$dictUtils.getDictLabel("human_status", scope.row.type, '未开始')}} </el-button>
+					<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.type, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.type, '未开始')}} </el-button>
 				</template>
 			</vxe-column>
 
@@ -63,6 +63,8 @@
                 <el-button v-if="
                       scope.row.type === '5' || scope.row.type === '4' || scope.row.type === '3'" text type="primary" @click="del(scope.row.id)">删除</el-button>
               </div>
+				<el-button v-if="hasPermission('reimburseRegister:edit') && scope.row.createById === $store.state.user.id && (scope.row.type === '1' || scope.row.type === '3' )" text type="primary"   @click="editForm(scope.row)">修改</el-button>
+				<el-button v-if="hasPermission('reimburseRegister:edit') && scope.row.createById === $store.state.user.id && (scope.row.type === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
             </template>
           </vxe-column>
         </vxe-table>
@@ -218,6 +220,45 @@
 			  })
 		  })
       },
+		editForm (row) {
+			// 暂存修改
+			let status = ''
+			if (row.type === '1') {
+				status = 'startAndHold'
+			}
+			// 撤回或者驳回修改
+			if (row.type === '3') {
+				status = 'startAndClose'
+			} else if (row.status === '4') {
+				status = 'reapplyFlag'
+			}
+			// 读取流程表单
+			let tabTitle = `发起流程【实习登记】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [实习登记]`
+			taskService.getTaskDef({ procDefId: this.processDefinitionAuditId,
+				businessId: row.id,
+				businessTable: 'human_resources_practice_registration',
+				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.processDefinitionAuditId,
+						procDefKey: this.procDefAuditKey,
+						status: status,
+						title: tabTitle,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'human_resources_practice_registration',
+						businessId: row.id,
+						isShow: false,
+						routePath: '/human/practice/register/RegistrationList'
+					}
+				})
+			})
+		},
 		// 查看实习登记流程结果
 		detail (row) {
 			if (row.reviewStatus !== '0' && row.reviewStatus !== '1') {
@@ -284,6 +325,20 @@
 				})
 			})
 		},
+		reback (row) {
+			this.$confirm(`确定撤回流程吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				processService.revokeProcIns(row.procInsId).then((data) => {
+					let param = {type: '3', id: row.id}
+					registerService.updateStatusById(param)
+					this.$message.success('回退成功')
+					this.refreshList()
+				})
+			})
+		},
     }
   }
 </script>