Commit cc9a2199b1ab4090f0dc727b6858746b4b2eaa39

Authored by YunaiV
1 parent ec978c44

bpm 的 OA 请假的列表的接入

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveBaseVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java
@@ -13,36 +13,21 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -13,36 +13,21 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
13 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 13 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
14 */ 14 */
15 @Data 15 @Data
16 -public class OALeaveBaseVO { 16 +public class BpmOALeaveBaseVO {
17 17
18 - @ApiModelProperty(value = "流程id")  
19 - private String processInstanceId;  
20 -  
21 - @ApiModelProperty(value = "状态", required = true)  
22 - private Integer status;  
23 -  
24 - @ApiModelProperty(value = "申请人id", required = true)  
25 - private String userId;  
26 -  
27 - @ApiModelProperty(value = "开始时间", required = true) 18 + @ApiModelProperty(value = "请假的开始时间", required = true)
28 @NotNull(message = "开始时间不能为空") 19 @NotNull(message = "开始时间不能为空")
29 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) 20 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
30 private Date startTime; 21 private Date startTime;
31 -  
32 - @ApiModelProperty(value = "结束时间", required = true) 22 + @ApiModelProperty(value = "请假的结束时间", required = true)
33 @NotNull(message = "结束时间不能为空") 23 @NotNull(message = "结束时间不能为空")
34 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) 24 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
35 private Date endTime; 25 private Date endTime;
36 26
37 - @ApiModelProperty(value = "请假类型")  
38 - private String leaveType; 27 + @ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type 枚举")
  28 + private Integer type;
39 29
40 - @ApiModelProperty(value = "原因") 30 + @ApiModelProperty(value = "原因", required = true, example = "阅读芋道源码")
41 private String reason; 31 private String reason;
42 32
43 - @ApiModelProperty(value = "申请时间", required = true)  
44 - @NotNull(message = "申请时间不能为空")  
45 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
46 - private Date applyTime;  
47 -  
48 } 33 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveCreateReqVO.java
@@ -12,21 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -12,21 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
12 12
13 @ApiModel("请假申请创建 Request VO") 13 @ApiModel("请假申请创建 Request VO")
14 @Data 14 @Data
15 -public class OALeaveCreateReqVO {  
16 -  
17 - @ApiModelProperty(value = "请假的开始时间", required = true)  
18 - @NotNull(message = "开始时间不能为空")  
19 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
20 - private Date startTime;  
21 - @ApiModelProperty(value = "请假的结束时间", required = true)  
22 - @NotNull(message = "结束时间不能为空")  
23 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
24 - private Date endTime;  
25 -  
26 - @ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type")  
27 - private Integer type;  
28 -  
29 - @ApiModelProperty(value = "原因", required = true, example = "阅读芋道源码")  
30 - private String reason;  
31 - 15 +@EqualsAndHashCode(callSuper = true)
  16 +@ToString(callSuper = true)
  17 +public class OALeaveCreateReqVO extends BpmOALeaveBaseVO {
32 } 18 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveRespVO.java
@@ -2,14 +2,31 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; @@ -2,14 +2,31 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo;
2 2
3 import lombok.*; 3 import lombok.*;
4 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
  5 +import org.springframework.format.annotation.DateTimeFormat;
  6 +
  7 +import javax.validation.constraints.NotNull;
  8 +import java.util.Date;
  9 +
  10 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
5 11
6 @ApiModel("请假申请 Response VO") 12 @ApiModel("请假申请 Response VO")
7 @Data 13 @Data
8 @EqualsAndHashCode(callSuper = true) 14 @EqualsAndHashCode(callSuper = true)
9 @ToString(callSuper = true) 15 @ToString(callSuper = true)
10 -public class OALeaveRespVO extends OALeaveBaseVO { 16 +public class OALeaveRespVO extends BpmOALeaveBaseVO {
11 17
12 - @ApiModelProperty(value = "请假表单主键", required = true) 18 + @ApiModelProperty(value = "请假表单主键", required = true, example = "1024")
13 private Long id; 19 private Long id;
14 20
  21 + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 bpm_process_instance_result 枚举")
  22 + private Integer result;
  23 +
  24 + @ApiModelProperty(value = "申请时间", required = true)
  25 + @NotNull(message = "申请时间不能为空")
  26 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  27 + private Date createTime;
  28 +
  29 + @ApiModelProperty(value = "流程id")
  30 + private String processInstanceId;
  31 +
15 } 32 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java
@@ -18,7 +18,7 @@ public interface BpmOALeaveMapper extends BaseMapperX<OALeaveDO> { @@ -18,7 +18,7 @@ public interface BpmOALeaveMapper extends BaseMapperX<OALeaveDO> {
18 18
19 default PageResult<OALeaveDO> selectPage(Long userId, OALeavePageReqVO reqVO) { 19 default PageResult<OALeaveDO> selectPage(Long userId, OALeavePageReqVO reqVO) {
20 return selectPage(reqVO, new LambdaQueryWrapperX<OALeaveDO>() 20 return selectPage(reqVO, new LambdaQueryWrapperX<OALeaveDO>()
21 - .eqIfPresent(OALeaveDO::getId, userId) 21 + .eqIfPresent(OALeaveDO::getUserId, userId)
22 .eqIfPresent(OALeaveDO::getResult, reqVO.getResult()) 22 .eqIfPresent(OALeaveDO::getResult, reqVO.getResult())
23 .eqIfPresent(OALeaveDO::getType, reqVO.getType()) 23 .eqIfPresent(OALeaveDO::getType, reqVO.getType())
24 .likeIfPresent(OALeaveDO::getReason, reqVO.getReason()) 24 .likeIfPresent(OALeaveDO::getReason, reqVO.getReason())
yudao-admin-ui/src/api/oa/leave.js
@@ -9,15 +9,6 @@ export function createLeave(data) { @@ -9,15 +9,6 @@ export function createLeave(data) {
9 }) 9 })
10 } 10 }
11 11
12 -// 更新请假申请  
13 -export function updateLeave(data) {  
14 - return request({  
15 - url: '/oa/leave/update',  
16 - method: 'put',  
17 - data: data  
18 - })  
19 -}  
20 -  
21 // 删除请假申请 12 // 删除请假申请
22 export function deleteLeave(id) { 13 export function deleteLeave(id) {
23 return request({ 14 return request({
@@ -37,7 +28,7 @@ export function getLeave(id) { @@ -37,7 +28,7 @@ export function getLeave(id) {
37 // 获得请假申请分页 28 // 获得请假申请分页
38 export function getLeavePage(query) { 29 export function getLeavePage(query) {
39 return request({ 30 return request({
40 - url: '/oa/leave/page', 31 + url: '/bpm/oa/leave/page',
41 method: 'get', 32 method: 'get',
42 params: query 33 params: query
43 }) 34 })
@@ -57,13 +48,3 @@ export function getLeaveApplyMembers() { @@ -57,13 +48,3 @@ export function getLeaveApplyMembers() {
57 method: 'get' 48 method: 'get'
58 }) 49 })
59 } 50 }
60 -  
61 -// 导出请假申请 Excel  
62 -export function exportLeaveExcel(query) {  
63 - return request({  
64 - url: '/oa/leave/export-excel',  
65 - method: 'get',  
66 - params: query,  
67 - responseType: 'blob'  
68 - })  
69 -}  
yudao-admin-ui/src/router/index.js
@@ -130,27 +130,13 @@ export const constantRoutes = [ @@ -130,27 +130,13 @@ export const constantRoutes = [
130 children: [ 130 children: [
131 { 131 {
132 path: 'leave/apply', 132 path: 'leave/apply',
133 - component: (resolve) => require(['@/views/oa/leave/apply/index'], resolve), 133 + component: (resolve) => require(['@/views/bpm/oa/leave/create'], resolve),
134 name: '请假表单-申请', 134 name: '请假表单-申请',
135 meta: { title: '请假表单-申请', icon: 'form' } 135 meta: { title: '请假表单-申请', icon: 'form' }
136 } 136 }
137 ] 137 ]
138 }, 138 },
139 { 139 {
140 - path: '/flow',  
141 - component: Layout,  
142 - hidden: true,  
143 - redirect: 'noredirect',  
144 - children: [  
145 - {  
146 - path: 'leave/approve',  
147 - component: (resolve) => require(['@/views/oa/leave/approve/index'], resolve),  
148 - name: '请假表单-审批',  
149 - meta: { title: '请假表单-审批', icon: 'form' }  
150 - }  
151 - ]  
152 - },  
153 - {  
154 path: '/bpm', 140 path: '/bpm',
155 component: Layout, 141 component: Layout,
156 hidden: true, 142 hidden: true,
yudao-admin-ui/src/utils/dict.js
@@ -42,7 +42,7 @@ export const DICT_TYPE = { @@ -42,7 +42,7 @@ export const DICT_TYPE = {
42 BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result', 42 BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result',
43 BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script', 43 BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script',
44 OA_LEAVE_STATUS: 'flow_status', // todo 芋艿:可以删除 44 OA_LEAVE_STATUS: 'flow_status', // todo 芋艿:可以删除
45 - OA_LEAVE_TYPE: 'oa_leave_type' 45 + BPM_OA_LEAVE_TYPE: 'bpm_oa_leave_type'
46 } 46 }
47 47
48 /** 48 /**
yudao-admin-ui/src/views/oa/leave/apply/index.vue renamed to yudao-admin-ui/src/views/bpm/oa/leave/create.vue
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 import { createFormKeyLeave} from "@/api/oa/leave" 41 import { createFormKeyLeave} from "@/api/oa/leave"
42 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' 42 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
43 export default { 43 export default {
44 - name: "ApplyLeave", 44 + name: "LeaveCreate",
45 components: { 45 components: {
46 }, 46 },
47 data() { 47 data() {
@@ -65,7 +65,7 @@ export default { @@ -65,7 +65,7 @@ export default {
65 statusFormat(row, column) { 65 statusFormat(row, column) {
66 return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status) 66 return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)
67 }, 67 },
68 - leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE), 68 + leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
69 leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) 69 leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS)
70 }; 70 };
71 }, 71 },
yudao-admin-ui/src/views/oa/leave/index.vue renamed to yudao-admin-ui/src/views/bpm/oa/leave/index.vue
@@ -3,44 +3,24 @@ @@ -3,44 +3,24 @@
3 3
4 <!-- 搜索工作栏 --> 4 <!-- 搜索工作栏 -->
5 <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> 5 <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
6 - <el-form-item label="流程id" prop="processInstanceId">  
7 - <el-input v-model="queryParams.processInstanceId" placeholder="请输入流程id" clearable size="small" @keyup.enter.native="handleQuery"/>  
8 - </el-form-item>  
9 - <el-form-item label="状态" prop="status">  
10 - <el-select v-model="queryParams.status" placeholder="请选择状态">  
11 - <el-option  
12 - v-for="dict in leaveStatusData"  
13 - :key="parseInt(dict.value)"  
14 - :label="dict.label"  
15 - :value="parseInt(dict.value)"  
16 - /> 6 + <el-form-item label="请假类型" prop="type">
  7 + <el-select v-model="queryParams.type" placeholder="请选择请假类型" clearable>
  8 + <el-option v-for="dict in leaveTypeDictData" :key="dict.value" :label="dict.label" :value="dict.value" />
17 </el-select> 9 </el-select>
18 </el-form-item> 10 </el-form-item>
19 - <el-form-item label="开始时间">  
20 - <el-date-picker v-model="dateRangeStartTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"  
21 - type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />  
22 - </el-form-item>  
23 - <el-form-item label="结束时间">  
24 - <el-date-picker v-model="dateRangeEndTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" 11 + <el-form-item label="申请时间">
  12 + <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"
25 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> 13 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
26 </el-form-item> 14 </el-form-item>
27 - <el-form-item label="请假类型" prop="leaveType">  
28 - <el-select v-model="queryParams.leaveType" placeholder="请选择请假类型">  
29 - <el-option  
30 - v-for="dict in leaveTypeDictData"  
31 - :key="dict.value"  
32 - :label="dict.label"  
33 - :value="dict.value"  
34 - /> 15 + <el-form-item label="结果" prop="result">
  16 + <el-select v-model="queryParams.result" placeholder="请选择流结果" clearable size="small">
  17 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT)"
  18 + :key="dict.value" :label="dict.label" :value="dict.value"/>
35 </el-select> 19 </el-select>
36 </el-form-item> 20 </el-form-item>
37 <el-form-item label="原因" prop="reason"> 21 <el-form-item label="原因" prop="reason">
38 <el-input v-model="queryParams.reason" placeholder="请输入原因" clearable size="small" @keyup.enter.native="handleQuery"/> 22 <el-input v-model="queryParams.reason" placeholder="请输入原因" clearable size="small" @keyup.enter.native="handleQuery"/>
39 </el-form-item> 23 </el-form-item>
40 - <el-form-item label="申请时间">  
41 - <el-date-picker v-model="dateRangeApplyTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"  
42 - type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />  
43 - </el-form-item>  
44 <el-form-item> 24 <el-form-item>
45 <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> 25 <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
46 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> 26 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -57,9 +37,8 @@ @@ -57,9 +37,8 @@
57 37
58 <!-- 列表 --> 38 <!-- 列表 -->
59 <el-table v-loading="loading" :data="list"> 39 <el-table v-loading="loading" :data="list">
60 - <el-table-column label="请假表单主键" align="center" prop="id" />  
61 - <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />  
62 - <el-table-column label="申请人id" align="center" prop="userId" /> 40 + <el-table-column label="申请编号" align="center" prop="id" />
  41 + <el-table-column label="状态" align="center" prop="result" :formatter="resultFormat" />
63 <el-table-column label="开始时间" align="center" prop="startTime" width="180"> 42 <el-table-column label="开始时间" align="center" prop="startTime" width="180">
64 <template slot-scope="scope"> 43 <template slot-scope="scope">
65 <span>{{ parseTime(scope.row.startTime) }}</span> 44 <span>{{ parseTime(scope.row.startTime) }}</span>
@@ -70,17 +49,17 @@ @@ -70,17 +49,17 @@
70 <span>{{ parseTime(scope.row.endTime) }}</span> 49 <span>{{ parseTime(scope.row.endTime) }}</span>
71 </template> 50 </template>
72 </el-table-column> 51 </el-table-column>
73 - <el-table-column label="请假类型" align="center" prop="leaveType" :formatter="leaveTypeFormat" /> 52 + <el-table-column label="请假类型" align="center" prop="type" :formatter="typeFormat" />
74 <el-table-column label="原因" align="center" prop="reason" /> 53 <el-table-column label="原因" align="center" prop="reason" />
75 <el-table-column label="申请时间" align="center" prop="applyTime" width="180"> 54 <el-table-column label="申请时间" align="center" prop="applyTime" width="180">
76 <template slot-scope="scope"> 55 <template slot-scope="scope">
77 - <span>{{ parseTime(scope.row.applyTime) }}</span> 56 + <span>{{ parseTime(scope.row.createTime) }}</span>
78 </template> 57 </template>
79 </el-table-column> 58 </el-table-column>
80 <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 59 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
81 <template slot-scope="scope"> 60 <template slot-scope="scope">
82 - <el-button size="mini" type="text" icon="el-icon-edit" @click="handleStep(scope.row)">审批进度</el-button>  
83 <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)">详情</el-button> 61 <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)">详情</el-button>
  62 + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleProcessDetail(scope.row)">审批进度</el-button>
84 </template> 63 </template>
85 </el-table-column> 64 </el-table-column>
86 </el-table> 65 </el-table>
@@ -129,7 +108,7 @@ @@ -129,7 +108,7 @@
129 <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item> 108 <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item>
130 <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item> 109 <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item>
131 <el-form-item label="请假类型" prop="leaveType"> 110 <el-form-item label="请假类型" prop="leaveType">
132 - {{ getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, form.leaveType) }} 111 + {{ getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, form.leaveType) }}
133 </el-form-item> 112 </el-form-item>
134 <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item> 113 <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item>
135 <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item> 114 <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item>
@@ -140,27 +119,13 @@ @@ -140,27 +119,13 @@
140 </div> 119 </div>
141 </el-dialog> 120 </el-dialog>
142 121
143 - <el-dialog :title="title" :visible.sync="dialogStepsVisible" width="750px" append-to-body>  
144 - <el-steps :active="stepActive" finish-status="success" >  
145 - <el-step :title="stepTitle(item)" :description="stepAssignee(item.assignee)" icon="el-icon-edit" v-for="(item) in handleTask.historyTask"></el-step>  
146 - </el-steps>  
147 - <br/>  
148 - <div v-html="svgUrl"></div>  
149 - <el-steps direction="vertical" :active="stepActive">  
150 - <el-step :title="stepTitle(item)" :description="stepDes(item)" v-for="(item) in handleTask.historyTask"></el-step>  
151 - </el-steps>  
152 - <div slot="footer" class="dialog-footer">  
153 - <el-button type="primary" @click="dialogStepsVisible = false">确 定</el-button>  
154 - <el-button @click="dialogStepsVisible = false">取 消</el-button>  
155 - </div>  
156 - </el-dialog>  
157 </div> 122 </div>
158 </template> 123 </template>
159 124
160 <script> 125 <script>
161 -import { createLeave, updateLeave, getLeaveApplyMembers, getLeave, getLeavePage, exportLeaveExcel } from "@/api/oa/leave" 126 +import { createLeave, getLeaveApplyMembers, getLeave, getLeavePage} from "@/api/oa/leave"
162 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' 127 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
163 -import { processHistorySteps,getHighlightImg } from '@/api/oa/todo' 128 +
164 export default { 129 export default {
165 name: "Leave", 130 name: "Leave",
166 components: { 131 components: {
@@ -179,13 +144,8 @@ export default { @@ -179,13 +144,8 @@ export default {
179 title: "", 144 title: "",
180 // 是否显示弹出层 145 // 是否显示弹出层
181 open: false, 146 open: false,
182 - //进度弹出层  
183 - dialogDetailVisible: false,  
184 //审批进度弹出层 147 //审批进度弹出层
185 - dialogStepsVisible: false,  
186 - dateRangeStartTime: [],  
187 - dateRangeEndTime: [],  
188 - dateRangeApplyTime: [], 148 + dateRangeCreateTime: [],
189 // 查询参数 149 // 查询参数
190 queryParams: { 150 queryParams: {
191 pageNo: 1, 151 pageNo: 1,
@@ -198,88 +158,27 @@ export default { @@ -198,88 +158,27 @@ export default {
198 }, 158 },
199 // 表单参数 159 // 表单参数
200 form: {}, 160 form: {},
201 - svgUrl: "",  
202 - handleTask: {  
203 - historyTask:[],  
204 - taskVariable: "",  
205 - formObject: {}  
206 - },  
207 - steps:[{  
208 - stepName:"步骤一"  
209 - }],  
210 // 表单校验 161 // 表单校验
211 rules: { 162 rules: {
212 startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }], 163 startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
213 endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }], 164 endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
214 - applyTime: [{ required: true, message: "申请时间不能为空", trigger: "blur" }],  
215 - },  
216 - statusFormat(row, column) {  
217 - return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)  
218 }, 165 },
219 - leaveTypeFormat(row, column) {  
220 - return getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, row.leaveType)  
221 - },  
222 - leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE),  
223 - leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) 166 + leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
  167 + leaveResultData: getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT),
  168 +
  169 + dialogDetailVisible: false, // TODO 芋艿:后面挪到详情页
224 }; 170 };
225 }, 171 },
226 created() { 172 created() {
227 this.getList(); 173 this.getList();
228 }, 174 },
229 - computed: {  
230 - stepActive: function () {  
231 - let idx = 0;  
232 - for (let i = 0; i < this.handleTask.historyTask.length; i++) {  
233 - if (this.handleTask.historyTask[i].status === 1) {  
234 - idx = idx + 1;  
235 - } else {  
236 - break;  
237 - }  
238 - }  
239 - return idx;  
240 - },  
241 - stepTitle() {  
242 - return function (item) {  
243 - let name = item.stepName;  
244 - if (item.status === 1) {  
245 - name += '(已完成)'  
246 - }  
247 - if (item.status === 0) {  
248 - name += '(进行中)'  
249 - }  
250 - return name;  
251 - }  
252 - },  
253 - stepDes() {  
254 - return function (item) {  
255 - let desc = "";  
256 - if (item.status === 1) {  
257 - desc += "审批人:[" + item.assignee + "] 审批意见: [" + item.comment + "] 审批时间: " + this.parseTime(item.endTime);  
258 - }  
259 - return desc;  
260 - }  
261 - },  
262 - stepAssignee() {  
263 - return function (assignee) {  
264 - let desc = "";  
265 - if(assignee){  
266 - desc += "办理人:[" + assignee + "]";  
267 - }else{  
268 - desc += "办理人未签收";  
269 - }  
270 - return desc;  
271 - }  
272 - }  
273 - },  
274 methods: { 175 methods: {
275 /** 查询列表 */ 176 /** 查询列表 */
276 getList() { 177 getList() {
277 this.loading = true; 178 this.loading = true;
278 // 处理查询参数 179 // 处理查询参数
279 let params = {...this.queryParams}; 180 let params = {...this.queryParams};
280 - this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');  
281 - this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');  
282 - this.addBeginAndEndTime(params, this.dateRangeApplyTime, 'applyTime'); 181 + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
283 // 执行查询 182 // 执行查询
284 getLeavePage(params).then(response => { 183 getLeavePage(params).then(response => {
285 this.list = response.data.list; 184 this.list = response.data.list;
@@ -296,7 +195,6 @@ export default { @@ -296,7 +195,6 @@ export default {
296 reset() { 195 reset() {
297 this.form = { 196 this.form = {
298 id: undefined, 197 id: undefined,
299 - processInstanceId: undefined,  
300 status: undefined, 198 status: undefined,
301 userId: undefined, 199 userId: undefined,
302 startTime: undefined, 200 startTime: undefined,
@@ -316,7 +214,7 @@ export default { @@ -316,7 +214,7 @@ export default {
316 resetQuery() { 214 resetQuery() {
317 this.dateRangeStartTime = []; 215 this.dateRangeStartTime = [];
318 this.dateRangeEndTime = []; 216 this.dateRangeEndTime = [];
319 - this.dateRangeApplyTime = []; 217 + this.dateRangeCreateTime = [];
320 this.resetForm("queryForm"); 218 this.resetForm("queryForm");
321 this.handleQuery(); 219 this.handleQuery();
322 }, 220 },
@@ -344,21 +242,16 @@ export default { @@ -344,21 +242,16 @@ export default {
344 this.title = "请假详情"; 242 this.title = "请假详情";
345 }); 243 });
346 }, 244 },
  245 + /** 查看审批进度的操作 */
  246 + handleProcessDetail(row) {
  247 + this.$router.push({ path: "/bpm/process-instance/detail", query: { id: row.processInstanceId}});
  248 + },
347 /** 提交按钮 */ 249 /** 提交按钮 */
348 submitForm() { 250 submitForm() {
349 this.$refs["form"].validate(valid => { 251 this.$refs["form"].validate(valid => {
350 if (!valid) { 252 if (!valid) {
351 return; 253 return;
352 } 254 }
353 - // 修改的提交  
354 - if (this.form.id != null) {  
355 - updateLeave(this.form).then(response => {  
356 - this.msgSuccess("修改成功");  
357 - this.open = false;  
358 - this.getList();  
359 - });  
360 - return;  
361 - }  
362 // 添加的提交 255 // 添加的提交
363 createLeave(this.form).then(response => { 256 createLeave(this.form).then(response => {
364 this.msgSuccess("新增成功"); 257 this.msgSuccess("新增成功");
@@ -367,39 +260,12 @@ export default { @@ -367,39 +260,12 @@ export default {
367 }); 260 });
368 }); 261 });
369 }, 262 },
370 - /** 审批进度 */  
371 - handleStep(row) {  
372 - const that = this;  
373 - const id = row.processInstanceId;  
374 - processHistorySteps(id).then(response => {  
375 - this.handleTask.historyTask = response.data;  
376 - this.dialogStepsVisible = true  
377 - this.title = "审批进度";  
378 - getHighlightImg(row.processInstanceId).then(response => {  
379 - that.svgUrl = response  
380 - })  
381 - }); 263 + resultFormat(row, column) {
  264 + return getDictDataLabel(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, row.result)
  265 + },
  266 + typeFormat(row, column) {
  267 + return getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, row.type)
382 }, 268 },
383 - /** 导出按钮操作 */  
384 - handleExport() {  
385 - // 处理查询参数  
386 - let params = {...this.queryParams};  
387 - params.pageNo = undefined;  
388 - params.pageSize = undefined;  
389 - this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');  
390 - this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');  
391 - this.addBeginAndEndTime(params, this.dateRangeApplyTime, 'applyTime');  
392 - // 执行导出  
393 - this.$confirm('是否确认导出所有请假申请数据项?', "警告", {  
394 - confirmButtonText: "确定",  
395 - cancelButtonText: "取消",  
396 - type: "warning"  
397 - }).then(function() {  
398 - return exportLeaveExcel(params);  
399 - }).then(response => {  
400 - this.downloadExcel(response, '请假申请.xls');  
401 - })  
402 - }  
403 } 269 }
404 }; 270 };
405 </script> 271 </script>
yudao-admin-ui/src/views/oa/flow/index.vue deleted
1 -<template>  
2 - <div class="app-container">  
3 - <el-row>  
4 - <div>TODO @芋艿, 待办请假和 已办请假,感觉可以做成通用,不同的业务表单对应的待办任务和已办任务可以通用,或许可以想个更通用的名字 </div>  
5 - </el-row>  
6 - </div>  
7 -</template>  
8 -  
9 -<script>  
10 -import { getStartForm } from "@/api/oa/flow";  
11 -export default {  
12 - name: "Flow",  
13 - components: {  
14 - },  
15 - data() {  
16 - return {  
17 - // 表单参数  
18 - form: {},  
19 -  
20 - rules: {  
21 - }  
22 - };  
23 - },  
24 - created() {  
25 -  
26 - },  
27 - methods: {  
28 - // leave() {  
29 - // getStartForm('leave-formkey').then(response => {  
30 - // const route = response.data;  
31 - // this.$router.replace(route);  
32 - // });  
33 - // }  
34 - }  
35 -};  
36 -</script>  
yudao-admin-ui/src/views/oa/leave/approve/index.vue deleted
1 -<template>  
2 - <div class="app-container">  
3 - <el-tabs type="border-card">  
4 - <el-tab-pane label="任务处理">  
5 - <el-form ref="form" :model="form" label-width="80px">  
6 - <el-row :gutter="20">  
7 - <el-col :span="6"><el-form-item label="申请人" >{{form.userId}}</el-form-item></el-col>  
8 - <el-col :span="6">  
9 - <el-form-item label="请假类型" prop="leaveType">  
10 - {{ getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, form.leaveType) }}  
11 - </el-form-item>  
12 - </el-col>  
13 - <el-col :span="6"><el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item></el-col>  
14 - </el-row>  
15 - <el-row :gutter="20">  
16 - <el-col :span="6"><el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item></el-col>  
17 - <el-col :span="6"><el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item></el-col>  
18 - <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item>  
19 - </el-row>  
20 - </el-form>  
21 - <el-divider></el-divider>  
22 - <el-form ref="taskForm" :model="leaveApprove" :rules="rules" label-width="80px">  
23 - <el-form-item label="是否同意" prop="approved">  
24 - <el-select v-model="leaveApprove.approved" placeholder="是否同意" v-on:change="approveChange">  
25 - <el-option  
26 - v-for="dict in approvedData"  
27 - :key="parseInt(dict.value)"  
28 - :label="dict.label"  
29 - :value="parseInt(dict.value)"  
30 - />  
31 - </el-select>  
32 - </el-form-item>  
33 - <el-form-item label="处理意见" prop="comment">  
34 - <el-col :span="11">  
35 - <el-input  
36 - type="textarea"  
37 - :rows="3"  
38 - v-model="leaveApprove.comment">  
39 - </el-input>  
40 - </el-col>  
41 - </el-form-item>  
42 - <el-form-item>  
43 - <el-button type="primary" @click="submitForm">确 定</el-button>  
44 - </el-form-item>  
45 - </el-form>  
46 - </el-tab-pane>  
47 - <el-tab-pane label="历史跟踪">  
48 - <el-steps :active="stepActive" simple finish-status="success">  
49 - <el-step :title="stepTitle(item)" icon="el-icon-edit" v-for="(item) in handleTask.historyTask" ></el-step>  
50 - </el-steps>  
51 - <br/>  
52 - <el-steps direction="vertical" :active="stepActive" space="65px">  
53 - <el-step :title="stepTitle(item)" :description="stepDes(item)" v-for="(item) in handleTask.historyTask" ></el-step>  
54 - </el-steps>  
55 - </el-tab-pane>  
56 - <el-tab-pane label="流程图">  
57 - <div v-html="highlightSvgUrl"></div>  
58 - </el-tab-pane>  
59 - </el-tabs>  
60 -  
61 - </div>  
62 -</template>  
63 -  
64 -<script>  
65 -import { getLeave,getLeaveApplyMembers } from "@/api/oa/leave"  
66 -import { completeTask,taskSteps, getHighlightImg } from "@/api/oa/todo";  
67 -import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'  
68 -export default {  
69 - name: "ApproveLeave",  
70 - components: {  
71 - },  
72 - data() {  
73 - return {  
74 - // 表单参数  
75 - form: {},  
76 - // 表单校验  
77 - rules: {  
78 - comment: [{ required: true, message: "意见不能为空", trigger: "blur" }]  
79 - },  
80 - handleTask: {  
81 - historyTask:[]  
82 - },  
83 - leaveApprove: {  
84 - approved : 1,  
85 - variables: {  
86 - hr: "",  
87 - pm: "",  
88 - bm: ""  
89 - },  
90 - taskId: "",  
91 - processInstanceId: "",  
92 - comment: "同意"  
93 - },  
94 - approvedData: [  
95 - {  
96 - value: 1,  
97 - label: '同意'  
98 - },  
99 - {  
100 - value: 0,  
101 - label: '不同意'  
102 - }  
103 - ],  
104 - highlightSvgUrl: "",  
105 - statusFormat(row, column) {  
106 - return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)  
107 - },  
108 - leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE),  
109 - leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS)  
110 - };  
111 - },  
112 - computed:{  
113 - stepActive: function () {  
114 - let idx = 0;  
115 - for(let i=0; i<this.handleTask.historyTask.length; i++){  
116 - if(this.handleTask.historyTask[i].status === 1){  
117 - idx= idx+1;  
118 - }else{  
119 - break;  
120 - }  
121 - }  
122 - return idx;  
123 - },  
124 - stepTitle() {  
125 - return function (item) {  
126 - let name = item.stepName;  
127 - if (item.status === 1) {  
128 - name += '(已完成)'  
129 - }  
130 - if (item.status === 0) {  
131 - name += '(进行中)'  
132 - }  
133 - return name;  
134 - }  
135 - },  
136 - stepDes(){  
137 - return function (item) {  
138 - let desc = "";  
139 - if (item.status === 1) {  
140 - desc+="审批人:["+ item.assignee +"] 审批意见: [" + item.comment + "] 审批时间: " + this.parseTime(item.endTime);  
141 - }  
142 - return desc;  
143 - }  
144 - }  
145 - },  
146 - created() {  
147 - const businessKey = this.$route.query.businessKey;  
148 - const taskId = this.$route.query.taskId;  
149 - this.leaveApprove.taskId = taskId;  
150 - this.leaveApprove.processInstanceId = this.$route.query.processInstanceId;  
151 - this.getForm(businessKey);  
152 - this.getHighlightImg(this.leaveApprove.processInstanceId);  
153 - },  
154 - methods: {  
155 - getHighlightImg(processInstanceId){  
156 - getHighlightImg(processInstanceId).then(response => {  
157 - console.log(response)  
158 - this.highlightSvgUrl = response  
159 - })  
160 - },  
161 - /** 提交按钮 */  
162 - submitForm() {  
163 - this.$refs["taskForm"].validate(valid => {  
164 - if (!valid) {  
165 - return;  
166 - }  
167 - if (this.leaveApprove.approved == 1) {  
168 - this.leaveApprove.variables["approved"] = true;  
169 - }  
170 - if (this.leaveApprove.approved == 0) {  
171 - this.leaveApprove.variables["approved"] = false;  
172 - }  
173 - completeTask(this.leaveApprove).then(response => {  
174 -  
175 - this.msgSuccess("执行任务成功");  
176 - this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => {  
177 - //if (this.isActive(this.$route)) {  
178 - this.$router.push({path: '/oa/todo'})  
179 - //}  
180 - })  
181 - })  
182 - });  
183 - },  
184 - getForm(id){  
185 - getLeave(id).then(response => {  
186 - this.form = response.data;  
187 - });  
188 - const data = {  
189 - taskId : this.leaveApprove.taskId,  
190 - businessKey: id,  
191 - }  
192 - taskSteps(data).then(response => {  
193 - this.handleTask = response.data;  
194 - });  
195 -  
196 - getLeaveApplyMembers().then(response => {  
197 - this.leaveApprove.variables.hr = response.data.hr;  
198 - this.leaveApprove.variables.bm = response.data.bm;  
199 - this.leaveApprove.variables.pm = response.data.pm;  
200 - });  
201 - },  
202 - approveChange(){  
203 - if (this.leaveApprove.approved === 1) {  
204 - this.leaveApprove.comment = "同意"  
205 - }  
206 - if(this.leaveApprove.approved === 0){  
207 - this.leaveApprove.comment = "不同意"  
208 - }  
209 - }  
210 - }  
211 -};  
212 -</script>