27 changed files with 1520 additions and 235 deletions
@ -0,0 +1,47 @@
|
||||
package com.ruoyi.workflow.domain; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.baomidou.mybatisplus.annotation.*; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import java.io.Serializable; |
||||
import java.util.Date; |
||||
import java.math.BigDecimal; |
||||
|
||||
import com.ruoyi.common.core.domain.BaseEntity; |
||||
|
||||
/** |
||||
* 用户流程关联对象 user_deploy_relation |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@TableName("user_deploy_relation") |
||||
public class UserDeployRelation extends BaseEntity { |
||||
|
||||
private static final long serialVersionUID=1L; |
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
private String id; |
||||
/** |
||||
* 手机号码 |
||||
*/ |
||||
private String cellphone; |
||||
/** |
||||
* 流程id |
||||
*/ |
||||
private String deployId; |
||||
/** |
||||
* 流程编号 |
||||
*/ |
||||
private String procInsId; |
||||
/** |
||||
* 备注 |
||||
*/ |
||||
private String remark; |
||||
|
||||
} |
@ -0,0 +1,55 @@
|
||||
package com.ruoyi.workflow.domain.bo; |
||||
|
||||
import com.ruoyi.common.core.validate.AddGroup; |
||||
import com.ruoyi.common.core.validate.EditGroup; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import javax.validation.constraints.*; |
||||
|
||||
import java.util.Date; |
||||
|
||||
import com.ruoyi.common.core.domain.BaseEntity; |
||||
|
||||
/** |
||||
* 用户流程关联业务对象 user_deploy_relation |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
|
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class UserDeployRelationBo extends BaseEntity { |
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
@NotBlank(message = "id不能为空", groups = { AddGroup.class, EditGroup.class }) |
||||
private String id; |
||||
|
||||
/** |
||||
* 手机号码 |
||||
*/ |
||||
@NotBlank(message = "手机号码不能为空", groups = { AddGroup.class, EditGroup.class }) |
||||
private String cellphone; |
||||
|
||||
/** |
||||
* 流程id |
||||
*/ |
||||
@NotBlank(message = "流程id不能为空", groups = { AddGroup.class, EditGroup.class }) |
||||
private String deployId; |
||||
|
||||
/** |
||||
* 流程编号 |
||||
*/ |
||||
@NotBlank(message = "流程编号不能为空", groups = { AddGroup.class, EditGroup.class }) |
||||
private String procInsId; |
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) |
||||
private String remark; |
||||
|
||||
|
||||
} |
@ -0,0 +1,55 @@
|
||||
package com.ruoyi.workflow.domain.vo; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import com.ruoyi.common.annotation.ExcelDictFormat; |
||||
import com.ruoyi.common.convert.ExcelDictConvert; |
||||
import lombok.Data; |
||||
import java.util.Date; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 用户流程关联视图对象 user_deploy_relation |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
@Data |
||||
@ExcelIgnoreUnannotated |
||||
public class UserDeployRelationVo { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
@ExcelProperty(value = "id") |
||||
private String id; |
||||
|
||||
/** |
||||
* 手机号码 |
||||
*/ |
||||
@ExcelProperty(value = "手机号码") |
||||
private String cellphone; |
||||
|
||||
/** |
||||
* 流程id |
||||
*/ |
||||
@ExcelProperty(value = "流程id") |
||||
private String deployId; |
||||
|
||||
/** |
||||
* 流程编号 |
||||
*/ |
||||
@ExcelProperty(value = "流程编号") |
||||
private String procInsId; |
||||
|
||||
/** |
||||
* 备注 |
||||
*/ |
||||
@ExcelProperty(value = "备注") |
||||
private String remark; |
||||
|
||||
|
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.ruoyi.workflow.mapper; |
||||
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus; |
||||
import com.ruoyi.workflow.domain.UserDeployRelation; |
||||
import com.ruoyi.workflow.domain.vo.UserDeployRelationVo; |
||||
|
||||
/** |
||||
* 用户流程关联Mapper接口 |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
public interface UserDeployRelationMapper extends BaseMapperPlus<UserDeployRelationMapper, UserDeployRelation, UserDeployRelationVo> { |
||||
|
||||
} |
@ -0,0 +1,48 @@
|
||||
package com.ruoyi.workflow.service; |
||||
|
||||
import com.ruoyi.common.core.domain.PageQuery; |
||||
import com.ruoyi.common.core.page.TableDataInfo; |
||||
import com.ruoyi.workflow.domain.bo.UserDeployRelationBo; |
||||
import com.ruoyi.workflow.domain.vo.UserDeployRelationVo; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 用户流程关联Service接口 |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
public interface IUserDeployRelationService { |
||||
|
||||
/** |
||||
* 查询用户流程关联 |
||||
*/ |
||||
UserDeployRelationVo queryById(String id); |
||||
|
||||
/** |
||||
* 查询用户流程关联列表 |
||||
*/ |
||||
TableDataInfo<UserDeployRelationVo> queryPageList(UserDeployRelationBo bo, PageQuery pageQuery); |
||||
|
||||
/** |
||||
* 查询用户流程关联列表 |
||||
*/ |
||||
List<UserDeployRelationVo> queryList(UserDeployRelationBo bo); |
||||
|
||||
/** |
||||
* 新增用户流程关联 |
||||
*/ |
||||
Boolean insertByBo(UserDeployRelationBo bo); |
||||
|
||||
/** |
||||
* 修改用户流程关联 |
||||
*/ |
||||
Boolean updateByBo(UserDeployRelationBo bo); |
||||
|
||||
/** |
||||
* 校验并批量删除用户流程关联信息 |
||||
*/ |
||||
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
||||
} |
@ -0,0 +1,110 @@
|
||||
package com.ruoyi.workflow.service.impl; |
||||
|
||||
import cn.hutool.core.bean.BeanUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.ruoyi.common.utils.StringUtils; |
||||
import com.ruoyi.common.core.page.TableDataInfo; |
||||
import com.ruoyi.common.core.domain.PageQuery; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.ruoyi.workflow.domain.UserDeployRelation; |
||||
import com.ruoyi.workflow.domain.bo.UserDeployRelationBo; |
||||
import com.ruoyi.workflow.domain.vo.UserDeployRelationVo; |
||||
import com.ruoyi.workflow.mapper.UserDeployRelationMapper; |
||||
import com.ruoyi.workflow.service.IUserDeployRelationService; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Collection; |
||||
|
||||
/** |
||||
* 用户流程关联Service业务层处理 |
||||
* |
||||
* @author ruoyi |
||||
* @date 2024-04-25 |
||||
*/ |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class UserDeployRelationServiceImpl implements IUserDeployRelationService { |
||||
|
||||
private final UserDeployRelationMapper baseMapper; |
||||
|
||||
/** |
||||
* 查询用户流程关联 |
||||
*/ |
||||
@Override |
||||
public UserDeployRelationVo queryById(String id){ |
||||
return baseMapper.selectVoById(id); |
||||
} |
||||
|
||||
/** |
||||
* 查询用户流程关联列表 |
||||
*/ |
||||
@Override |
||||
public TableDataInfo<UserDeployRelationVo> queryPageList(UserDeployRelationBo bo, PageQuery pageQuery) { |
||||
LambdaQueryWrapper<UserDeployRelation> lqw = buildQueryWrapper(bo); |
||||
Page<UserDeployRelationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
||||
return TableDataInfo.build(result); |
||||
} |
||||
|
||||
/** |
||||
* 查询用户流程关联列表 |
||||
*/ |
||||
@Override |
||||
public List<UserDeployRelationVo> queryList(UserDeployRelationBo bo) { |
||||
LambdaQueryWrapper<UserDeployRelation> lqw = buildQueryWrapper(bo); |
||||
return baseMapper.selectVoList(lqw); |
||||
} |
||||
|
||||
private LambdaQueryWrapper<UserDeployRelation> buildQueryWrapper(UserDeployRelationBo bo) { |
||||
Map<String, Object> params = bo.getParams(); |
||||
LambdaQueryWrapper<UserDeployRelation> lqw = Wrappers.lambdaQuery(); |
||||
lqw.eq(StringUtils.isNotBlank(bo.getCellphone()), UserDeployRelation::getCellphone, bo.getCellphone()); |
||||
lqw.eq(StringUtils.isNotBlank(bo.getDeployId()), UserDeployRelation::getDeployId, bo.getDeployId()); |
||||
return lqw; |
||||
} |
||||
|
||||
/** |
||||
* 新增用户流程关联 |
||||
*/ |
||||
@Override |
||||
public Boolean insertByBo(UserDeployRelationBo bo) { |
||||
UserDeployRelation add = BeanUtil.toBean(bo, UserDeployRelation.class); |
||||
validEntityBeforeSave(add); |
||||
boolean flag = baseMapper.insert(add) > 0; |
||||
if (flag) { |
||||
bo.setId(add.getId()); |
||||
} |
||||
return flag; |
||||
} |
||||
|
||||
/** |
||||
* 修改用户流程关联 |
||||
*/ |
||||
@Override |
||||
public Boolean updateByBo(UserDeployRelationBo bo) { |
||||
UserDeployRelation update = BeanUtil.toBean(bo, UserDeployRelation.class); |
||||
validEntityBeforeSave(update); |
||||
return baseMapper.updateById(update) > 0; |
||||
} |
||||
|
||||
/** |
||||
* 保存前的数据校验 |
||||
*/ |
||||
private void validEntityBeforeSave(UserDeployRelation entity){ |
||||
//TODO 做一些数据校验,如唯一约束
|
||||
} |
||||
|
||||
/** |
||||
* 批量删除用户流程关联 |
||||
*/ |
||||
@Override |
||||
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
||||
if(isValid){ |
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
} |
||||
return baseMapper.deleteBatchIds(ids) > 0; |
||||
} |
||||
} |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 29 KiB |
@ -0,0 +1,656 @@
|
||||
<template> |
||||
<div class="app-container"> |
||||
<el-tabs tab-position="top" :value="processed === true ? 'approval' : 'form'"> |
||||
|
||||
<el-tab-pane label="任务办理" name="approval" v-if="processed === true"> |
||||
<el-card class="box-card" shadow="hover" v-if="taskFormOpen"> |
||||
<div slot="header" class="clearfix"> |
||||
<span>填写表单</span> |
||||
</div> |
||||
<div class="cu-content"> |
||||
<v-form-render :form-json="taskFormData.formModel" :form-data="{}" ref="taskFormParser"></v-form-render> |
||||
</div> |
||||
</el-card> |
||||
<el-card class="box-card" shadow="hover"> |
||||
<div slot="header" class="clearfix"> |
||||
<span>审批流程</span> |
||||
</div> |
||||
<el-row> |
||||
<el-col :span="20" :offset="2"> |
||||
<el-form ref="taskForm" :model="taskForm" :rules="rules" label-width="120px"> |
||||
<el-form-item label="审批意见" prop="comment"> |
||||
<el-input type="textarea" :rows="5" v-model="taskForm.comment" placeholder="请输入 审批意见" /> |
||||
</el-form-item> |
||||
<el-form-item label="抄送人" prop="copyUserIds"> |
||||
<el-tag :key="index" v-for="(item, index) in copyUser" closable :disable-transitions="false" |
||||
@close="handleClose('copy', item)"> |
||||
{{ item.nickName }} |
||||
</el-tag> |
||||
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle |
||||
@click="onSelectCopyUsers" /> |
||||
</el-form-item> |
||||
<el-form-item label="指定审批人" prop="copyUserIds"> |
||||
<el-tag :key="index" v-for="(item, index) in nextUser" closable :disable-transitions="false" |
||||
@close="handleClose('next', item)"> |
||||
{{ item.nickName }} |
||||
</el-tag> |
||||
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle |
||||
@click="onSelectNextUsers" /> |
||||
</el-form-item> |
||||
</el-form> |
||||
</el-col> |
||||
</el-row> |
||||
<el-row :gutter="10" type="flex" justify="center"> |
||||
<el-col :span="1.5"> |
||||
<el-button icon="el-icon-circle-check" type="success" @click="handleComplete">通过</el-button> |
||||
</el-col> |
||||
<el-col :span="1.5"> |
||||
<el-button icon="el-icon-chat-line-square" type="primary" @click="handleDelegate">委派</el-button> |
||||
</el-col> |
||||
<el-col :span="1.5"> |
||||
<el-button icon="el-icon-thumb" type="success" @click="handleTransfer">转办</el-button> |
||||
</el-col> |
||||
<el-col :span="1.5"> |
||||
<el-button icon="el-icon-refresh-left" type="warning" @click="handleReturn">退回</el-button> |
||||
</el-col> |
||||
<el-col :span="1.5"> |
||||
<el-button icon="el-icon-circle-close" type="danger" @click="handleReject">拒绝</el-button> |
||||
</el-col> |
||||
</el-row> |
||||
</el-card> |
||||
</el-tab-pane> |
||||
|
||||
<el-tab-pane label="表单信息" name="form"> |
||||
<div v-if="formOpen"> |
||||
<el-card class="box-card" shadow="never" v-for="(formInfo, index) in processFormList" :key="index"> |
||||
<div slot="header" class="clearfix"> |
||||
<span>{{ formInfo.title }}</span> |
||||
</div> |
||||
<!--流程处理表单模块--> |
||||
<div class="cu-content"> |
||||
<v-form-render :form-json="formInfo.formModel" :form-data="formInfo.formData" |
||||
ref="vFormRef"></v-form-render> |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</el-tab-pane> |
||||
|
||||
<el-tab-pane label="流转记录" name="record"> |
||||
<el-card class="box-card" shadow="never"> |
||||
<el-col :span="20" :offset="2"> |
||||
<div class="block"> |
||||
<el-timeline> |
||||
<el-timeline-item v-for="(item, index) in historyProcNodeList" :key="index" :icon="setIcon(item.endTime)" |
||||
:color="setColor(item.endTime)"> |
||||
<p style="font-weight: 700">{{ item.activityName }}</p> |
||||
<el-card v-if="item.activityType === 'startEvent'" class="box-card" shadow="hover"> |
||||
{{ item.assigneeName }} 在 {{ item.createTime }} 发起流程 |
||||
</el-card> |
||||
<el-card v-if="item.activityType === 'userTask'" class="box-card" shadow="hover"> |
||||
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> |
||||
<el-descriptions-item label="实际办理">{{ item.assigneeName || '-' }}</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> |
||||
<el-descriptions-item label="候选办理">{{ item.candidate || '-' }}</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> |
||||
<el-descriptions-item label="接收时间">{{ item.createTime || '-' }}</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> |
||||
<el-descriptions-item label="办结时间">{{ item.endTime || '-' }}</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> |
||||
<el-descriptions-item label="耗时">{{ item.duration || '-' }}</el-descriptions-item> |
||||
</el-descriptions> |
||||
<div v-if="item.commentList && item.commentList.length > 0"> |
||||
<div v-for="(comment, index) in item.commentList" :key="index"> |
||||
<el-divider content-position="left"> |
||||
<el-tag :type="approveTypeTag(comment.type)" size="mini">{{ commentType(comment.type) |
||||
}}</el-tag> |
||||
<el-tag type="info" effect="plain" size="mini">{{ comment.time }}</el-tag> |
||||
</el-divider> |
||||
<span>{{ comment.fullMessage }}</span> |
||||
</div> |
||||
</div> |
||||
</el-card> |
||||
<el-card v-if="item.activityType === 'endEvent'" class="box-card" shadow="hover"> |
||||
{{ item.createTime }} 结束流程 |
||||
</el-card> |
||||
</el-timeline-item> |
||||
</el-timeline> |
||||
</div> |
||||
</el-col> |
||||
</el-card> |
||||
</el-tab-pane> |
||||
|
||||
<!-- <el-tab-pane label="流程跟踪" name="track">--> |
||||
<!-- <el-card class="box-card" shadow="never">--> |
||||
<!-- <process-viewer :key="`designer-${loadIndex}`" :style="'height:' + height" :xml="xmlData"--> |
||||
<!-- :finishedInfo="finishedInfo" :allCommentList="historyProcNodeList" />--> |
||||
<!-- </el-card>--> |
||||
<!-- </el-tab-pane>--> |
||||
</el-tabs> |
||||
|
||||
<!--退回流程--> |
||||
<el-dialog :title="returnTitle" :visible.sync="returnOpen" width="40%" append-to-body> |
||||
<el-form ref="taskForm" :model="taskForm" label-width="80px"> |
||||
<el-form-item label="退回节点" prop="targetKey"> |
||||
<el-radio-group v-model="taskForm.targetKey"> |
||||
<el-radio-button v-for="item in returnTaskList" :key="item.id" |
||||
:label="item.id">{{ item.name }}</el-radio-button> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
</el-form> |
||||
<span slot="footer" class="dialog-footer"> |
||||
<el-button @click="returnOpen = false">取 消</el-button> |
||||
<el-button type="primary" @click="submitReturn">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
|
||||
<el-dialog :title="userData.title" :visible.sync="userData.open" width="60%" append-to-body> |
||||
<el-row type="flex" :gutter="20"> |
||||
<!--部门数据--> |
||||
<el-col :span="5"> |
||||
<el-card shadow="never" style="height: 100%"> |
||||
<div slot="header"> |
||||
<span>部门列表</span> |
||||
</div> |
||||
<div class="head-container"> |
||||
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" /> |
||||
<el-tree :data="deptOptions" :props="deptProps" :expand-on-click-node="false" |
||||
:filter-node-method="filterNode" ref="tree" default-expand-all @node-click="handleNodeClick" /> |
||||
</div> |
||||
</el-card> |
||||
</el-col> |
||||
<el-col :span="18"> |
||||
<el-table ref="userTable" :key="userData.type" height="500" v-loading="userLoading" :data="userList" |
||||
highlight-current-row @current-change="changeCurrentUser" @selection-change="handleSelectionChange"> |
||||
<el-table-column v-if="userData.type === 'copy' || userData.type === 'next'" width="55" type="selection" /> |
||||
<el-table-column v-else width="30"> |
||||
<template slot-scope="scope"> |
||||
<el-radio :label="scope.row.userId" v-model="currentUserId">{{ '' }}</el-radio> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="用户名" align="center" prop="nickName" /> |
||||
<el-table-column label="手机" align="center" prop="phonenumber" /> |
||||
<el-table-column label="部门" align="center" prop="dept.deptName" /> |
||||
</el-table> |
||||
<pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" |
||||
@pagination="getList" /> |
||||
</el-col> |
||||
</el-row> |
||||
<span slot="footer" class="dialog-footer"> |
||||
<el-button @click="userData.open = false">取 消</el-button> |
||||
<el-button type="primary" @click="submitUserData">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { detailProcess } from '@/api/workflow/process' |
||||
import { complete, delegate, transfer, rejectTask, returnList, returnTask } from '@/api/workflow/task' |
||||
import { selectUser, deptTreeSelect } from '@/api/system/user' |
||||
import ProcessViewer from '@/components/ProcessViewer' |
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css' |
||||
import Treeselect from '@riophae/vue-treeselect' |
||||
|
||||
export default { |
||||
name: "WorkDetail", |
||||
components: { |
||||
ProcessViewer, |
||||
Treeselect |
||||
}, |
||||
props: {}, |
||||
computed: { |
||||
commentType() { |
||||
return val => { |
||||
switch (val) { |
||||
case '1': return '通过' |
||||
case '2': return '退回' |
||||
case '3': return '驳回' |
||||
case '4': return '委派' |
||||
case '5': return '转办' |
||||
case '6': return '终止' |
||||
case '7': return '撤回' |
||||
} |
||||
} |
||||
}, |
||||
approveTypeTag() { |
||||
return val => { |
||||
switch (val) { |
||||
case '1': return 'success' |
||||
case '2': return 'warning' |
||||
case '3': return 'danger' |
||||
case '4': return 'primary' |
||||
case '5': return 'success' |
||||
case '6': return 'danger' |
||||
case '7': return 'info' |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
height: document.documentElement.clientHeight - 205 + 'px;', |
||||
// 模型xml数据 |
||||
loadIndex: 0, |
||||
xmlData: undefined, |
||||
finishedInfo: { |
||||
finishedSequenceFlowSet: [], |
||||
finishedTaskSet: [], |
||||
unfinishedTaskSet: [], |
||||
rejectedTaskSet: [] |
||||
}, |
||||
historyProcNodeList: [], |
||||
// 部门名称 |
||||
deptName: undefined, |
||||
// 部门树选项 |
||||
deptOptions: undefined, |
||||
userLoading: false, |
||||
// 用户表格数据 |
||||
userList: null, |
||||
deptProps: { |
||||
children: "children", |
||||
label: "label" |
||||
}, |
||||
// 查询参数 |
||||
queryParams: { |
||||
pageNum: 1, |
||||
pageSize: 10, |
||||
deptId: undefined |
||||
}, |
||||
total: 0, |
||||
// 遮罩层 |
||||
loading: true, |
||||
taskForm: { |
||||
comment: "", // 意见内容 |
||||
procInsId: "", // 流程实例编号 |
||||
taskId: "",// 流程任务编号 |
||||
copyUserIds: "", // 抄送人Id |
||||
vars: "", |
||||
targetKey: "" |
||||
}, |
||||
rules: { |
||||
comment: [{ required: true, message: '请输入审批意见', trigger: 'blur' }], |
||||
}, |
||||
currentUserId: null, |
||||
variables: [], // 流程变量数据 |
||||
taskFormOpen: false, |
||||
taskFormData: {}, // 流程变量数据 |
||||
processFormList: [], // 流程变量数据 |
||||
formOpen: false, // 是否加载流程变量数据 |
||||
returnTaskList: [], // 回退列表数据 |
||||
processed: false, |
||||
returnTitle: null, |
||||
returnOpen: false, |
||||
rejectOpen: false, |
||||
rejectTitle: null, |
||||
userData: { |
||||
title: '', |
||||
type: '', |
||||
open: false, |
||||
}, |
||||
copyUser: [], |
||||
nextUser: [], |
||||
userMultipleSelection: [], |
||||
userDialogTitle: '', |
||||
userOpen: false |
||||
}; |
||||
}, |
||||
created() { |
||||
this.initData(); |
||||
}, |
||||
methods: { |
||||
initData() { |
||||
this.taskForm.procInsId = this.$route.params && this.$route.params.procInsId; |
||||
this.taskForm.taskId = this.$route.query && this.$route.query.taskId; |
||||
this.processed = this.$route.query && eval(this.$route.query.processed || false); |
||||
// 流程任务重获取变量表单 |
||||
this.getProcessDetails(this.taskForm.procInsId, this.taskForm.taskId); |
||||
this.loadIndex = this.taskForm.procInsId; |
||||
}, |
||||
/** 查询部门下拉树结构 */ |
||||
getTreeSelect() { |
||||
deptTreeSelect().then(response => { |
||||
this.deptOptions = response.data; |
||||
}); |
||||
}, |
||||
/** 查询用户列表 */ |
||||
getList() { |
||||
this.userLoading = true; |
||||
selectUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
||||
this.userList = response.rows; |
||||
this.total = response.total; |
||||
this.toggleSelection(this.userMultipleSelection); |
||||
this.userLoading = false; |
||||
}); |
||||
}, |
||||
// 筛选节点 |
||||
filterNode(value, data) { |
||||
if (!value) return true; |
||||
return data.label.indexOf(value) !== -1; |
||||
}, |
||||
// 节点单击事件 |
||||
handleNodeClick(data) { |
||||
this.queryParams.deptId = data.id; |
||||
this.getList(); |
||||
}, |
||||
setIcon(val) { |
||||
if (val) { |
||||
return "el-icon-check"; |
||||
} else { |
||||
return "el-icon-time"; |
||||
} |
||||
}, |
||||
setColor(val) { |
||||
if (val) { |
||||
return "#2bc418"; |
||||
} else { |
||||
return "#b3bdbb"; |
||||
} |
||||
}, |
||||
// 多选框选中数据 |
||||
handleSelectionChange(selection) { |
||||
this.userMultipleSelection = selection |
||||
}, |
||||
toggleSelection(selection) { |
||||
if (selection && selection.length > 0) { |
||||
this.$nextTick(() => { |
||||
selection.forEach(item => { |
||||
let row = this.userList.find(k => k.userId === item.userId); |
||||
this.$refs.userTable.toggleRowSelection(row); |
||||
}) |
||||
}) |
||||
} else { |
||||
this.$nextTick(() => { |
||||
this.$refs.userTable.clearSelection(); |
||||
}); |
||||
} |
||||
}, |
||||
// 关闭标签 |
||||
handleClose(type, tag) { |
||||
let userObj = this.userMultipleSelection.find(item => item.userId === tag.id); |
||||
this.userMultipleSelection.splice(this.userMultipleSelection.indexOf(userObj), 1); |
||||
if (type === 'copy') { |
||||
this.copyUser = this.userMultipleSelection; |
||||
// 设置抄送人ID |
||||
if (this.copyUser && this.copyUser.length > 0) { |
||||
const val = this.copyUser.map(item => item.id); |
||||
this.taskForm.copyUserIds = val instanceof Array ? val.join(',') : val; |
||||
} else { |
||||
this.taskForm.copyUserIds = ''; |
||||
} |
||||
} else if (type === 'next') { |
||||
this.nextUser = this.userMultipleSelection; |
||||
// 设置抄送人ID |
||||
if (this.nextUser && this.nextUser.length > 0) { |
||||
const val = this.nextUser.map(item => item.id); |
||||
this.taskForm.nextUserIds = val instanceof Array ? val.join(',') : val; |
||||
} else { |
||||
this.taskForm.nextUserIds = ''; |
||||
} |
||||
} |
||||
}, |
||||
/** 流程变量赋值 */ |
||||
handleCheckChange(val) { |
||||
if (val instanceof Array) { |
||||
this.taskForm.values = { |
||||
"approval": val.join(',') |
||||
} |
||||
} else { |
||||
this.taskForm.values = { |
||||
"approval": val |
||||
} |
||||
} |
||||
}, |
||||
getProcessDetails(procInsId, taskId) { |
||||
const params = { procInsId: procInsId, taskId: taskId } |
||||
detailProcess(params).then(res => { |
||||
const data = res.data; |
||||
this.xmlData = data.bpmnXml; |
||||
this.processFormList = data.processFormList; |
||||
this.taskFormOpen = data.existTaskForm; |
||||
if (this.taskFormOpen) { |
||||
this.taskFormData = data.taskFormData; |
||||
} |
||||
this.historyProcNodeList = data.historyProcNodeList; |
||||
this.finishedInfo = data.flowViewer; |
||||
this.formOpen = true |
||||
this.$nextTick(() => { |
||||
this.processFormList.forEach((item, index) => { |
||||
if (item.disabled) { |
||||
this.$refs.vFormRef[index].disableForm() |
||||
} |
||||
}) |
||||
}) |
||||
}) |
||||
}, |
||||
onSelectCopyUsers() { |
||||
this.userMultipleSelection = this.copyUser; |
||||
this.onSelectUsers('添加抄送人', 'copy') |
||||
}, |
||||
onSelectNextUsers() { |
||||
this.userMultipleSelection = this.nextUser; |
||||
this.onSelectUsers('指定审批人', 'next') |
||||
}, |
||||
onSelectUsers(title, type) { |
||||
this.userData.title = title; |
||||
this.userData.type = type; |
||||
this.getTreeSelect(); |
||||
this.getList() |
||||
this.userData.open = true; |
||||
}, |
||||
/** 通过任务 */ |
||||
handleComplete() { |
||||
// 校验表单 |
||||
const taskFormRef = this.$refs.taskFormParser; |
||||
const isExistTaskForm = taskFormRef !== undefined; |
||||
// 若无任务表单,则 taskFormPromise 为 true,即不需要校验 |
||||
const taskFormPromise = !isExistTaskForm ? true : new Promise(async (resolve, reject) => { |
||||
taskFormRef.validateForm(valid => { |
||||
valid ? resolve() : reject() |
||||
}) |
||||
}); |
||||
const approvalPromise = new Promise((resolve, reject) => { |
||||
this.$refs['taskForm'].validate(valid => { |
||||
valid ? resolve() : reject() |
||||
}) |
||||
}); |
||||
Promise.all([taskFormPromise, approvalPromise]).then(async () => { |
||||
if (isExistTaskForm) { |
||||
this.taskForm.variables = await taskFormRef.getFormData(false) |
||||
} |
||||
complete(this.taskForm).then(response => { |
||||
this.$modal.msgSuccess(response.msg); |
||||
this.goBack(); |
||||
}); |
||||
}) |
||||
}, |
||||
/** 委派任务 */ |
||||
handleDelegate() { |
||||
this.$refs["taskForm"].validate(valid => { |
||||
if (valid) { |
||||
this.userData.type = 'delegate'; |
||||
this.userData.title = '委派任务' |
||||
this.userData.open = true; |
||||
this.getTreeSelect(); |
||||
} |
||||
}) |
||||
}, |
||||
/** 转办任务 */ |
||||
handleTransfer() { |
||||
this.$refs["taskForm"].validate(valid => { |
||||
if (valid) { |
||||
this.userData.type = 'transfer'; |
||||
this.userData.title = '转办任务'; |
||||
this.userData.open = true; |
||||
this.getTreeSelect(); |
||||
} |
||||
}) |
||||
}, |
||||
/** 拒绝任务 */ |
||||
handleReject() { |
||||
this.$refs["taskForm"].validate(valid => { |
||||
if (valid) { |
||||
const _this = this; |
||||
this.$modal.confirm('拒绝审批单流程会终止,是否继续?').then(function () { |
||||
return rejectTask(_this.taskForm); |
||||
}).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
this.goBack(); |
||||
}); |
||||
} |
||||
}); |
||||
}, |
||||
changeCurrentUser(val) { |
||||
this.currentUserId = val.userId |
||||
}, |
||||
/** 返回页面 */ |
||||
goBack() { |
||||
// 关闭当前标签页并返回上个页面 |
||||
this.$tab.closePage(this.$route) |
||||
this.$router.back() |
||||
}, |
||||
/** 接收子组件传的值 */ |
||||
getData(data) { |
||||
if (data) { |
||||
const variables = []; |
||||
data.fields.forEach(item => { |
||||
let variableData = {}; |
||||
variableData.label = item.__config__.label |
||||
// 表单值为多个选项时 |
||||
if (item.__config__.defaultValue instanceof Array) { |
||||
const array = []; |
||||
item.__config__.defaultValue.forEach(val => { |
||||
array.push(val) |
||||
}) |
||||
variableData.val = array; |
||||
} else { |
||||
variableData.val = item.__config__.defaultValue |
||||
} |
||||
variables.push(variableData) |
||||
}) |
||||
this.variables = variables; |
||||
} |
||||
}, |
||||
submitUserData() { |
||||
let type = this.userData.type; |
||||
if (type === 'copy' || type === 'next') { |
||||
if (!this.userMultipleSelection || this.userMultipleSelection.length <= 0) { |
||||
this.$modal.msgError("请选择用户"); |
||||
return false; |
||||
} |
||||
let userIds = this.userMultipleSelection.map(k => k.userId); |
||||
if (type === 'copy') { |
||||
// 设置抄送人ID信息 |
||||
this.copyUser = this.userMultipleSelection; |
||||
this.taskForm.copyUserIds = userIds instanceof Array ? userIds.join(',') : userIds; |
||||
} else if (type === 'next') { |
||||
// 设置下一级审批人ID信息 |
||||
this.nextUser = this.userMultipleSelection; |
||||
this.taskForm.nextUserIds = userIds instanceof Array ? userIds.join(',') : userIds; |
||||
} |
||||
this.userData.open = false; |
||||
} else { |
||||
if (!this.taskForm.comment) { |
||||
this.$modal.msgError("请输入审批意见"); |
||||
return false; |
||||
} |
||||
if (!this.currentUserId) { |
||||
this.$modal.msgError("请选择用户"); |
||||
return false; |
||||
} |
||||
this.taskForm.userId = this.currentUserId; |
||||
if (type === 'delegate') { |
||||
delegate(this.taskForm).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
this.goBack(); |
||||
}); |
||||
} |
||||
if (type === 'transfer') { |
||||
transfer(this.taskForm).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
this.goBack(); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
}, |
||||
/** 可退回任务列表 */ |
||||
handleReturn() { |
||||
this.$refs['taskForm'].validate(valid => { |
||||
if (valid) { |
||||
this.returnTitle = "退回流程"; |
||||
returnList(this.taskForm).then(res => { |
||||
this.returnTaskList = res.data; |
||||
this.taskForm.values = null; |
||||
this.returnOpen = true; |
||||
}) |
||||
} |
||||
}); |
||||
|
||||
}, |
||||
/** 提交退回任务 */ |
||||
submitReturn() { |
||||
this.$refs["taskForm"].validate(valid => { |
||||
if (valid) { |
||||
if (!this.taskForm.targetKey) { |
||||
this.$modal.msgError("请选择退回节点!"); |
||||
} |
||||
returnTask(this.taskForm).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
this.goBack() |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
<style lang="scss" scoped> |
||||
.clearfix:before, |
||||
.clearfix:after { |
||||
display: table; |
||||
content: ""; |
||||
} |
||||
|
||||
.clearfix:after { |
||||
clear: both |
||||
} |
||||
|
||||
.box-card { |
||||
width: 100%; |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
.el-tag+.el-tag { |
||||
margin-left: 10px; |
||||
} |
||||
|
||||
.el-row { |
||||
margin-bottom: 20px; |
||||
|
||||
&:last-child { |
||||
margin-bottom: 0; |
||||
} |
||||
} |
||||
|
||||
.el-col { |
||||
border-radius: 4px; |
||||
} |
||||
|
||||
.button-new-tag { |
||||
margin-left: 10px; |
||||
} |
||||
|
||||
.cu-submit { |
||||
margin-top: 15px; |
||||
text-align: center; |
||||
} |
||||
|
||||
.cu-content { |
||||
width: 80%; |
||||
margin: 15px auto; |
||||
} |
||||
</style> |
@ -0,0 +1,231 @@
|
||||
<template> |
||||
<div class="app-container"> |
||||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |
||||
<el-form-item label="提交时间"> |
||||
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" |
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" |
||||
:default-time="['00:00:00', '23:59:59']"></el-date-picker> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
|
||||
<el-row :gutter="10" class="mb8"> |
||||
<!-- <el-col :span="1.5">--> |
||||
<!-- <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"--> |
||||
<!-- @click="handleDelete">删除</el-button>--> |
||||
<!-- </el-col>--> |
||||
<!-- <el-col :span="1.5">--> |
||||
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" v-hasPermi="['workflow:process:ownExport']"--> |
||||
<!-- @click="handleExport">导出</el-button>--> |
||||
<!-- </el-col>--> |
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
||||
</el-row> |
||||
|
||||
<el-table v-loading="loading" :data="ownProcessList" @selection-change="handleSelectionChange"> |
||||
<!-- <el-table-column type="selection" width="55" align="center" />--> |
||||
<!-- <el-table-column label="流程编号" align="center" prop="procInsId" :show-overflow-tooltip="true" />--> |
||||
<!-- <el-table-column label="流程名称" align="center" prop="procDefName" :show-overflow-tooltip="true" />--> |
||||
<!-- <el-table-column label="流程类别" align="center" prop="category" :formatter="categoryFormat" />--> |
||||
<!-- <el-table-column label="流程版本" align="center" width="80px">--> |
||||
<!-- <template slot-scope="scope">--> |
||||
<!-- <el-tag size="medium">v{{ scope.row.procDefVersion }}</el-tag>--> |
||||
<!-- </template>--> |
||||
<!-- </el-table-column>--> |
||||
<!-- <el-table-column label="当前节点" align="center" prop="taskName" />--> |
||||
<el-table-column label="提交时间" align="center" prop="createTime" width="180" /> |
||||
<el-table-column label="报修状态" align="center" width="100"> |
||||
<template slot-scope="scope"> |
||||
<dict-tag :options="dict.type.wf_process_status" :value="scope.row.processStatus" /> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="耗时" align="center" prop="duration" width="180" /> |
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
||||
<template slot-scope="scope"> |
||||
<el-button type="text" size="mini" icon="el-icon-tickets" @click="handleFlowRecord(scope.row)" |
||||
v-hasPermi="['workflow:process:query']">详情</el-button> |
||||
<!-- <el-button type="text" size="mini" icon="el-icon-delete" @click="handleDelete(scope.row)"--> |
||||
<!-- v-if="scope.row.finishTime" v-hasPermi="['workflow:process:remove']">删除</el-button>--> |
||||
<!-- <el-button type="text" size="mini" icon="el-icon-circle-close" @click="handleStop(scope.row)"--> |
||||
<!-- v-hasPermi="['workflow:process:cancel']">取消</el-button>--> |
||||
<!-- <el-button type="text" size="mini" icon="el-icon-refresh-right" v-hasPermi="['workflow:process:start']"--> |
||||
<!-- @click="handleAgain(scope.row)">重新发起</el-button>--> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" |
||||
@pagination="getList" /> |
||||
|
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { listOwnProcess, stopProcess, delProcess } from '@/api/workflow/process'; |
||||
import { listAllCategory } from '@/api/workflow/category'; |
||||
export default { |
||||
name: "Own", |
||||
dicts: ['wf_process_status'], |
||||
components: { |
||||
}, |
||||
data() { |
||||
return { |
||||
// 遮罩层 |
||||
loading: true, |
||||
processLoading: true, |
||||
// 选中数组 |
||||
ids: [], |
||||
// 非单个禁用 |
||||
single: true, |
||||
// 非多个禁用 |
||||
multiple: true, |
||||
// 显示搜索条件 |
||||
showSearch: true, |
||||
// 总条数 |
||||
total: 0, |
||||
categoryOptions: [], |
||||
processTotal: 0, |
||||
// 我发起的流程列表数据 |
||||
ownProcessList: [], |
||||
// 弹出层标题 |
||||
title: "", |
||||
// 是否显示弹出层 |
||||
open: false, |
||||
src: "", |
||||
definitionList: [], |
||||
// 日期范围 |
||||
dateRange: [], |
||||
// 查询参数 |
||||
queryParams: { |
||||
pageNum: 1, |
||||
pageSize: 10, |
||||
processKey: undefined, |
||||
processName: undefined, |
||||
category: undefined, |
||||
cellphone: undefined |
||||
}, |
||||
// 表单参数 |
||||
form: {}, |
||||
// 表单校验 |
||||
rules: { |
||||
}, |
||||
}; |
||||
}, |
||||
created() { |
||||
this.getCategoryList(); |
||||
}, |
||||
beforeRouteEnter(to, from, next) { |
||||
next(vm => { |
||||
vm.getList() |
||||
}) |
||||
}, |
||||
methods: { |
||||
/** 查询流程分类列表 */ |
||||
getCategoryList() { |
||||
listAllCategory().then(response => this.categoryOptions = response.data) |
||||
}, |
||||
/** 查询流程定义列表 */ |
||||
getList() { |
||||
this.loading = true; |
||||
this.queryParams.cellphone = this.$route.query && this.$route.query.cellphone; |
||||
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
||||
this.ownProcessList = response.rows; |
||||
this.total = response.total; |
||||
this.loading = false; |
||||
}); |
||||
}, |
||||
// 取消按钮 |
||||
cancel() { |
||||
this.open = false; |
||||
this.reset(); |
||||
}, |
||||
// 表单重置 |
||||
reset() { |
||||
this.form = { |
||||
id: null, |
||||
name: null, |
||||
category: null, |
||||
key: null, |
||||
tenantId: null, |
||||
deployTime: null, |
||||
derivedFrom: null, |
||||
derivedFromRoot: null, |
||||
parentDeploymentId: null, |
||||
engineVersion: null |
||||
}; |
||||
this.resetForm("form"); |
||||
}, |
||||
/** 搜索按钮操作 */ |
||||
handleQuery() { |
||||
this.queryParams.pageNum = 1; |
||||
this.getList(); |
||||
}, |
||||
/** 重置按钮操作 */ |
||||
resetQuery() { |
||||
this.dateRange = []; |
||||
this.resetForm("queryForm"); |
||||
this.handleQuery(); |
||||
}, |
||||
// 多选框选中数据 |
||||
handleSelectionChange(selection) { |
||||
this.ids = selection.map(item => item.procInsId); |
||||
this.single = selection.length !== 1; |
||||
this.multiple = !selection.length; |
||||
}, |
||||
handleAgain(row) { |
||||
this.$router.push({ |
||||
path: '/workflow/process/start/' + row.deployId, |
||||
query: { |
||||
definitionId: row.procDefId, |
||||
procInsId: row.procInsId |
||||
} |
||||
}) |
||||
console.log(row); |
||||
}, |
||||
/** 取消流程申请 */ |
||||
handleStop(row) { |
||||
const params = { |
||||
procInsId: row.procInsId |
||||
} |
||||
stopProcess(params).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
this.getList(); |
||||
}); |
||||
}, |
||||
/** 流程流转记录 */ |
||||
handleFlowRecord(row) { |
||||
this.$router.push({ |
||||
path: '/bx/detail/' + row.procInsId, |
||||
query: { |
||||
processed: false |
||||
} |
||||
}) |
||||
}, |
||||
/** 删除按钮操作 */ |
||||
handleDelete(row) { |
||||
const ids = row.procInsId || this.ids; |
||||
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}).then(function () { |
||||
return delProcess(ids); |
||||
}).then(() => { |
||||
this.getList(); |
||||
this.$modal.msgSuccess("删除成功"); |
||||
}) |
||||
}, |
||||
/** 导出按钮操作 */ |
||||
handleExport() { |
||||
this.download('workflow/process/ownExport', { |
||||
...this.queryParams |
||||
}, `wf_own_process_${new Date().getTime()}.xlsx`) |
||||
}, |
||||
categoryFormat(row, column) { |
||||
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? ''; |
||||
} |
||||
} |
||||
}; |
||||
</script> |
@ -0,0 +1,91 @@
|
||||
<template> |
||||
<div class="app-container"> |
||||
<el-card class="box-card"> |
||||
<div slot="header" class="clearfix"> |
||||
<span>填写报修单</span> |
||||
</div> |
||||
<div class="form-conf" v-if="formOpen"> |
||||
<v-form-render :form-json="formModel" :form-data="formData" ref="vFormRef"></v-form-render> |
||||
<div class="cu-submit"> |
||||
<el-button type="primary" @click="submit">提交</el-button> |
||||
<el-button @click="reset">重置</el-button> |
||||
</div> |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { getProcessForm, startProcess } from '@/api/workflow/process' |
||||
|
||||
export default { |
||||
name: 'WorkStart', |
||||
data() { |
||||
return { |
||||
definitionId: null, |
||||
deployId: null, |
||||
procInsId: null, |
||||
formOpen: false, |
||||
formModel: {}, |
||||
formData: {}, |
||||
cellphone: null |
||||
} |
||||
}, |
||||
created() { |
||||
this.initData(); |
||||
}, |
||||
methods: { |
||||
initData() { |
||||
this.deployId = this.$route.params && this.$route.params.deployId; |
||||
this.definitionId = this.$route.query && this.$route.query.definitionId; |
||||
this.procInsId = this.$route.query && this.$route.query.procInsId; |
||||
this.cellphone = this.$route.query && this.$route.query.cellphone; |
||||
getProcessForm({ |
||||
definitionId: this.definitionId, |
||||
deployId: this.deployId, |
||||
procInsId: this.procInsId |
||||
}).then(response => { |
||||
const data = response.data; |
||||
this.formModel = data.formModel; |
||||
this.formData = data.formData || {}; |
||||
this.formOpen = true |
||||
this.$nextTick(() => { |
||||
this.$refs.vFormRef.setFormJson(this.formModel || { formConfig: {}, widgetList: [] }) |
||||
}) |
||||
}) |
||||
}, |
||||
submit() { |
||||
this.$refs.vFormRef.getFormData().then(formData => { |
||||
if (this.definitionId) { |
||||
// 启动流程并将表单数据加入流程变量 |
||||
startProcess(this.definitionId, this.cellphone, JSON.stringify(formData)).then(res => { |
||||
this.$modal.msgSuccess(res.msg); |
||||
window.history.go(-1); |
||||
// this.$tab.closeOpenPage({ |
||||
// path: '/work/own' |
||||
// }) |
||||
}) |
||||
} |
||||
}).catch(err => { |
||||
this.$modal.msgError(err); |
||||
}) |
||||
}, |
||||
reset() { |
||||
this.$refs.vFormRef.resetForm() |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.form-conf { |
||||
margin: 15px auto; |
||||
width: 80%; |
||||
/*padding: 15px;*/ |
||||
} |
||||
|
||||
.cu-submit { |
||||
margin-top: 15px; |
||||
text-align: center; |
||||
} |
||||
</style> |
Loading…
Reference in new issue