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 13 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
14 14 */
15 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 19 @NotNull(message = "开始时间不能为空")
29 20 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
30 21 private Date startTime;
31   -
32   - @ApiModelProperty(value = "结束时间", required = true)
  22 + @ApiModelProperty(value = "请假的结束时间", required = true)
33 23 @NotNull(message = "结束时间不能为空")
34 24 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
35 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 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 12  
13 13 @ApiModel("请假申请创建 Request VO")
14 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 2  
3 3 import lombok.*;
4 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 12 @ApiModel("请假申请 Response VO")
7 13 @Data
8 14 @EqualsAndHashCode(callSuper = true)
9 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 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 18  
19 19 default PageResult<OALeaveDO> selectPage(Long userId, OALeavePageReqVO reqVO) {
20 20 return selectPage(reqVO, new LambdaQueryWrapperX<OALeaveDO>()
21   - .eqIfPresent(OALeaveDO::getId, userId)
  21 + .eqIfPresent(OALeaveDO::getUserId, userId)
22 22 .eqIfPresent(OALeaveDO::getResult, reqVO.getResult())
23 23 .eqIfPresent(OALeaveDO::getType, reqVO.getType())
24 24 .likeIfPresent(OALeaveDO::getReason, reqVO.getReason())
... ...
yudao-admin-ui/src/api/oa/leave.js
... ... @@ -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 13 export function deleteLeave(id) {
23 14 return request({
... ... @@ -37,7 +28,7 @@ export function getLeave(id) {
37 28 // 获得请假申请分页
38 29 export function getLeavePage(query) {
39 30 return request({
40   - url: '/oa/leave/page',
  31 + url: '/bpm/oa/leave/page',
41 32 method: 'get',
42 33 params: query
43 34 })
... ... @@ -57,13 +48,3 @@ export function getLeaveApplyMembers() {
57 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 130 children: [
131 131 {
132 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 134 name: '请假表单-申请',
135 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 140 path: '/bpm',
155 141 component: Layout,
156 142 hidden: true,
... ...
yudao-admin-ui/src/utils/dict.js
... ... @@ -42,7 +42,7 @@ export const DICT_TYPE = {
42 42 BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result',
43 43 BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script',
44 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 41 import { createFormKeyLeave} from "@/api/oa/leave"
42 42 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
43 43 export default {
44   - name: "ApplyLeave",
  44 + name: "LeaveCreate",
45 45 components: {
46 46 },
47 47 data() {
... ... @@ -65,7 +65,7 @@ export default {
65 65 statusFormat(row, column) {
66 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 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 3  
4 4 <!-- 搜索工作栏 -->
5 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 9 </el-select>
18 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 13 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
26 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 19 </el-select>
36 20 </el-form-item>
37 21 <el-form-item label="原因" prop="reason">
38 22 <el-input v-model="queryParams.reason" placeholder="请输入原因" clearable size="small" @keyup.enter.native="handleQuery"/>
39 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 24 <el-form-item>
45 25 <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
46 26 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
... ... @@ -57,9 +37,8 @@
57 37  
58 38 <!-- 列表 -->
59 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 42 <el-table-column label="开始时间" align="center" prop="startTime" width="180">
64 43 <template slot-scope="scope">
65 44 <span>{{ parseTime(scope.row.startTime) }}</span>
... ... @@ -70,17 +49,17 @@
70 49 <span>{{ parseTime(scope.row.endTime) }}</span>
71 50 </template>
72 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 53 <el-table-column label="原因" align="center" prop="reason" />
75 54 <el-table-column label="申请时间" align="center" prop="applyTime" width="180">
76 55 <template slot-scope="scope">
77   - <span>{{ parseTime(scope.row.applyTime) }}</span>
  56 + <span>{{ parseTime(scope.row.createTime) }}</span>
78 57 </template>
79 58 </el-table-column>
80 59 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
81 60 <template slot-scope="scope">
82   - <el-button size="mini" type="text" icon="el-icon-edit" @click="handleStep(scope.row)">审批进度</el-button>
83 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 63 </template>
85 64 </el-table-column>
86 65 </el-table>
... ... @@ -129,7 +108,7 @@
129 108 <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item>
130 109 <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item>
131 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 112 </el-form-item>
134 113 <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item>
135 114 <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item>
... ... @@ -140,27 +119,13 @@
140 119 </div>
141 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 122 </div>
158 123 </template>
159 124  
160 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 127 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
163   -import { processHistorySteps,getHighlightImg } from '@/api/oa/todo'
  128 +
164 129 export default {
165 130 name: "Leave",
166 131 components: {
... ... @@ -179,13 +144,8 @@ export default {
179 144 title: "",
180 145 // 是否显示弹出层
181 146 open: false,
182   - //进度弹出层
183   - dialogDetailVisible: false,
184 147 //审批进度弹出层
185   - dialogStepsVisible: false,
186   - dateRangeStartTime: [],
187   - dateRangeEndTime: [],
188   - dateRangeApplyTime: [],
  148 + dateRangeCreateTime: [],
189 149 // 查询参数
190 150 queryParams: {
191 151 pageNo: 1,
... ... @@ -198,88 +158,27 @@ export default {
198 158 },
199 159 // 表单参数
200 160 form: {},
201   - svgUrl: "",
202   - handleTask: {
203   - historyTask:[],
204   - taskVariable: "",
205   - formObject: {}
206   - },
207   - steps:[{
208   - stepName:"步骤一"
209   - }],
210 161 // 表单校验
211 162 rules: {
212 163 startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
213 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 172 created() {
227 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 175 methods: {
275 176 /** 查询列表 */
276 177 getList() {
277 178 this.loading = true;
278 179 // 处理查询参数
279 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 183 getLeavePage(params).then(response => {
285 184 this.list = response.data.list;
... ... @@ -296,7 +195,6 @@ export default {
296 195 reset() {
297 196 this.form = {
298 197 id: undefined,
299   - processInstanceId: undefined,
300 198 status: undefined,
301 199 userId: undefined,
302 200 startTime: undefined,
... ... @@ -316,7 +214,7 @@ export default {
316 214 resetQuery() {
317 215 this.dateRangeStartTime = [];
318 216 this.dateRangeEndTime = [];
319   - this.dateRangeApplyTime = [];
  217 + this.dateRangeCreateTime = [];
320 218 this.resetForm("queryForm");
321 219 this.handleQuery();
322 220 },
... ... @@ -344,21 +242,16 @@ export default {
344 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 250 submitForm() {
349 251 this.$refs["form"].validate(valid => {
350 252 if (!valid) {
351 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 256 createLeave(this.form).then(response => {
364 257 this.msgSuccess("新增成功");
... ... @@ -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 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>