Commit 54e7c10a06f4a704587ff96c1496b5029708522d

Authored by YunaiV
1 parent 991ce210

完成 bpm oa 请假的 create 和 detail 前端

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveCreateReqVO;
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreateReqVO;
4 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeavePageReqVO;
5 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveRespVO;
6 6 import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert;
... ... @@ -39,7 +39,7 @@ public class BpmOALeaveController {
39 39  
40 40 @PostMapping("/create")
41 41 @ApiOperation("创建请求申请")
42   - public CommonResult<Long> createLeave(@Valid @RequestBody OALeaveCreateReqVO createReqVO) {
  42 + public CommonResult<Long> createLeave(@Valid @RequestBody BpmOALeaveCreateReqVO createReqVO) {
43 43 return success(leaveService.createLeave(getLoginUserId(), createReqVO));
44 44 }
45 45  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveCreateReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java
... ... @@ -14,5 +14,5 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
14 14 @Data
15 15 @EqualsAndHashCode(callSuper = true)
16 16 @ToString(callSuper = true)
17   -public class OALeaveCreateReqVO extends BpmOALeaveBaseVO {
  17 +public class BpmOALeaveCreateReqVO extends BpmOALeaveBaseVO {
18 18 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/OALeaveConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.oa;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveCreateReqVO;
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreateReqVO;
4 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveRespVO;
5 5 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
... ... @@ -19,7 +19,7 @@ public interface OALeaveConvert {
19 19  
20 20 OALeaveConvert INSTANCE = Mappers.getMapper(OALeaveConvert.class);
21 21  
22   - OALeaveDO convert(OALeaveCreateReqVO bean);
  22 + OALeaveDO convert(BpmOALeaveCreateReqVO bean);
23 23  
24 24 OALeaveRespVO convert(OALeaveDO bean);
25 25  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java
... ... @@ -6,8 +6,6 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 7  
8 8 import javax.validation.Valid;
9   -import java.util.Collection;
10   -import java.util.List;
11 9  
12 10 /**
13 11 * 请假申请 Service 接口
... ... @@ -24,7 +22,7 @@ public interface BpmOALeaveService {
24 22 * @param createReqVO 创建信息
25 23 * @return 编号
26 24 */
27   - Long createLeave(Long userId, @Valid OALeaveCreateReqVO createReqVO);
  25 + Long createLeave(Long userId, @Valid BpmOALeaveCreateReqVO createReqVO);
28 26  
29 27 /**
30 28 * 删除请假申请
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/OALeaveServiceImpl.java
... ... @@ -44,7 +44,7 @@ public class OALeaveServiceImpl implements BpmOALeaveService {
44 44  
45 45 @Override
46 46 @Transactional(rollbackFor = Exception.class)
47   - public Long createLeave(Long userId, OALeaveCreateReqVO createReqVO) {
  47 + public Long createLeave(Long userId, BpmOALeaveCreateReqVO createReqVO) {
48 48 // TODO 芋道源码
49 49 // 校验是否超过请假天数的上限;
50 50 long day = DateUtil.betweenDay(createReqVO.getStartTime(), createReqVO.getEndTime(), false);
... ...
yudao-admin-ui/src/api/oa/leave.js
... ... @@ -3,7 +3,7 @@ import request from &#39;@/utils/request&#39;
3 3 // 创建请假申请
4 4 export function createLeave(data) {
5 5 return request({
6   - url: '/oa/leave/create',
  6 + url: '/bpm/oa/leave/create',
7 7 method: 'post',
8 8 data: data
9 9 })
... ... @@ -20,7 +20,7 @@ export function deleteLeave(id) {
20 20 // 获得请假申请
21 21 export function getLeave(id) {
22 22 return request({
23   - url: '/oa/leave/get?id=' + id,
  23 + url: '/bpm/oa/leave/get?id=' + id,
24 24 method: 'get'
25 25 })
26 26 }
... ... @@ -33,18 +33,3 @@ export function getLeavePage(query) {
33 33 params: query
34 34 })
35 35 }
36   -
37   -export function createFormKeyLeave(data) {
38   - return request({
39   - url: '/oa/leave/form-key/create',
40   - method: 'post',
41   - data: data
42   - })
43   -}
44   -
45   -export function getLeaveApplyMembers() {
46   - return request({
47   - url: '/oa/leave/getLeaveApplyMembers',
48   - method: 'get'
49   - })
50   -}
... ...
yudao-admin-ui/src/router/index.js
... ... @@ -123,16 +123,21 @@ export const constantRoutes = [
123 123 ]
124 124 },
125 125 {
126   - path: '/flow',
  126 + path: '/bpm',
127 127 component: Layout,
128 128 hidden: true,
129 129 redirect: 'noredirect',
130 130 children: [
131 131 {
132   - path: 'leave/apply',
  132 + path: 'oa/leave/create',
133 133 component: (resolve) => require(['@/views/bpm/oa/leave/create'], resolve),
134   - name: '请假表单-申请',
135   - meta: { title: '请假表单-申请', icon: 'form' }
  134 + name: '发起 OA 请假',
  135 + meta: { title: '发起 OA 请假', icon: 'form' }
  136 + }, {
  137 + path: 'oa/leave/detail',
  138 + component: (resolve) => require(['@/views/bpm/oa/leave/detail'], resolve),
  139 + name: '查看 OA 请假',
  140 + meta: { title: '查看 OA 请假', icon: 'view' }
136 141 }
137 142 ]
138 143 },
... ...
yudao-admin-ui/src/views/bpm/oa/leave/create.vue
... ... @@ -8,38 +8,26 @@
8 8 <el-form-item label="结束时间" prop="endTime">
9 9 <el-date-picker clearable size="small" v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
10 10 </el-form-item>
11   - <el-form-item label="请假类型" prop="leaveType">
12   - <el-select v-model="form.leaveType" placeholder="请选择">
13   - <el-option
14   - v-for="dict in leaveTypeDictData"
15   - :key="parseInt(dict.value)"
16   - :label="dict.label"
17   - :value="parseInt(dict.value)"
18   - />
  11 + <el-form-item label="请假类型" prop="type">
  12 + <el-select v-model="form.type" placeholder="请选择">
  13 + <el-option v-for="dict in typeDictData" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
19 14 </el-select>
20 15 </el-form-item>
21 16 <el-form-item label="原因" prop="reason">
22 17 <el-col :span="10">
23   - <el-input
24   - type="textarea"
25   - :rows="3"
26   - v-model="form.reason"
27   - placeholder="请输入原因" />
  18 + <el-input type="textarea" :rows="3" v-model="form.reason" placeholder="请输入原因" />
28 19 </el-col>
29 20 </el-form-item>
30   - <el-form-item label="申请时间" prop="applyTime">
31   - <el-date-picker clearable size="small" v-model="form.applyTime" type="date" value-format="timestamp" placeholder="选择申请时间" />
32   - </el-form-item>
33 21 <el-form-item>
34   - <el-button type="primary" @click="submitForm">确 定</el-button>
  22 + <el-button type="primary" @click="submitForm">提 交</el-button>
35 23 </el-form-item>
36 24 </el-form>
37 25 </div>
38 26 </template>
39 27  
40 28 <script>
41   -import { createFormKeyLeave} from "@/api/oa/leave"
42   -import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
  29 +import { createLeave} from "@/api/oa/leave"
  30 +import { getDictDatas, DICT_TYPE } from '@/utils/dict'
43 31 export default {
44 32 name: "LeaveCreate",
45 33 components: {
... ... @@ -48,31 +36,23 @@ export default {
48 36 return {
49 37 // 表单参数
50 38 form: {
51   - processKey: 'leave-update',
52   - taskVariables:{
53   - hr: "",
54   - pm: "",
55   - bm: ""
56   - }
  39 + startTime: undefined,
  40 + endTime: undefined,
  41 + type: undefined,
  42 + reason: undefined,
57 43 },
58 44 // 表单校验
59 45 rules: {
60 46 startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
61 47 endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
62   - applyTime: [{ required: true, message: "申请时间不能为空", trigger: "blur" }],
  48 + type: [{ required: true, message: "请假类型不能为空", trigger: "change" }],
  49 + reason: [{ required: true, message: "请假原因不能为空", trigger: "change" }],
63 50 },
64 51  
65   - statusFormat(row, column) {
66   - return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)
67   - },
68   - leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
69   - leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS)
  52 + typeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
70 53 };
71 54 },
72 55 created() {
73   - this.form.taskVariables.hr = this.$route.query.hr;
74   - this.form.taskVariables.pm = this.$route.query.pm;
75   - this.form.taskVariables.bm = this.$route.query.bm;
76 56 },
77 57 methods: {
78 58 /** 提交按钮 */
... ... @@ -83,13 +63,10 @@ export default {
83 63 }
84 64  
85 65 // 添加的提交
86   - createFormKeyLeave(this.form).then(response => {
87   - this.msgSuccess("新增成功");
88   - this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => {
89   - //if (this.isActive(this.$route)) {
90   - this.$router.push({path: '/oa/todo'})
91   - //}
92   - })
  66 + createLeave(this.form).then(response => {
  67 + this.msgSuccess("发起成功");
  68 + this.$store.dispatch("tagsView/delView", this.$route);
  69 + this.$router.push({ path: "/bpm/oa/leave"});
93 70 });
94 71 });
95 72 }
... ...
yudao-admin-ui/src/views/bpm/oa/leave/detail.vue 0 → 100644
  1 +<template>
  2 + <div class="app-container">
  3 + <!-- 对话框(添加 / 修改) -->
  4 + <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  5 + <el-form-item label="开始时间:" prop="startTime"> {{parseTime(form.startTime, '{y}-{m}-{d}')}} </el-form-item>
  6 + <el-form-item label="结束时间:" prop="endTime"> {{parseTime(form.endTime, '{y}-{m}-{d}')}} </el-form-item>
  7 + <el-form-item label="请假类型:" prop="type">{{ typeFormat(form) }}</el-form-item>
  8 + <el-form-item label="原因:" prop="reason"> {{ form.reason }}</el-form-item>
  9 + </el-form>
  10 + </div>
  11 +</template>
  12 +
  13 +<script>
  14 +import { getLeave} from "@/api/oa/leave"
  15 +import {getDictDatas, DICT_TYPE, getDictDataLabel} from '@/utils/dict'
  16 +export default {
  17 + name: "LeaveDetail",
  18 + components: {
  19 + },
  20 + data() {
  21 + return {
  22 + id: undefined, // 请假编号
  23 + // 表单参数
  24 + form: {
  25 + startTime: undefined,
  26 + endTime: undefined,
  27 + type: undefined,
  28 + reason: undefined,
  29 + },
  30 +
  31 + typeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
  32 + };
  33 + },
  34 + created() {
  35 + this.id = this.$route.query.id;
  36 + if (!this.id) {
  37 + this.$message.error('未传递 id 参数,无法查看 OA 请假信息');
  38 + return;
  39 + }
  40 + this.getDetail();
  41 + },
  42 + methods: {
  43 + /** 获得请假信息 */
  44 + getDetail() {
  45 + getLeave(this.id).then(response => {
  46 + this.form = response.data;
  47 + });
  48 + },
  49 + typeFormat(row) {
  50 + return getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, row.type)
  51 + }
  52 + }
  53 +};
  54 +</script>
... ...
yudao-admin-ui/src/views/bpm/oa/leave/index.vue
... ... @@ -30,7 +30,7 @@
30 30 <!-- 操作工具栏 -->
31 31 <el-row :gutter="10" class="mb8">
32 32 <el-col :span="1.5">
33   - <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
  33 + <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">发起请假</el-button>
34 34 </el-col>
35 35 <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
36 36 </el-row>
... ... @@ -58,7 +58,7 @@
58 58 </el-table-column>
59 59 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
60 60 <template slot-scope="scope">
61   - <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-view" @click="handleDetail(scope.row)">详情</el-button>
62 62 <el-button size="mini" type="text" icon="el-icon-edit" @click="handleProcessDetail(scope.row)">审批进度</el-button>
63 63 </template>
64 64 </el-table-column>
... ... @@ -67,58 +67,6 @@
67 67 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
68 68 @pagination="getList"/>
69 69  
70   - <!-- 对话框(添加 / 修改) -->
71   - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
72   - <el-form ref="form" :model="form" :rules="rules" label-width="80px">
73   - <el-form-item label="开始时间" prop="startTime">
74   - <el-date-picker clearable size="small" v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
75   - </el-form-item>
76   - <el-form-item label="结束时间" prop="endTime">
77   - <el-date-picker clearable size="small" v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
78   - </el-form-item>
79   - <el-form-item label="请假类型" prop="leaveType">
80   - <el-select v-model="form.leaveType" placeholder="请选择">
81   - <el-option
82   - v-for="dict in leaveTypeDictData"
83   - :key="dict.value"
84   - :label="dict.label"
85   - :value="dict.value"
86   - />
87   - </el-select>
88   - </el-form-item>
89   - <el-form-item label="原因" prop="reason">
90   - <el-input v-model="form.reason" placeholder="请输入原因" />
91   - </el-form-item>
92   - <el-form-item label="申请时间" prop="applyTime">
93   - <el-date-picker clearable size="small" v-model="form.applyTime" type="date" value-format="timestamp" placeholder="选择申请时间" />
94   - </el-form-item>
95   - </el-form>
96   - <div slot="footer" class="dialog-footer">
97   - <el-button type="primary" @click="submitForm">确 定</el-button>
98   - <el-button @click="cancel">取 消</el-button>
99   - </div>
100   - </el-dialog>
101   -
102   - <el-dialog :title="title" :visible.sync="dialogDetailVisible" width="500px" append-to-body>
103   - <el-form ref="form" :model="form" label-width="80px">
104   - <el-form-item label="状态" >
105   - {{ getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, form.status) }}
106   - </el-form-item>
107   - <el-form-item label="申请人id" >{{form.userId}}</el-form-item>
108   - <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item>
109   - <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item>
110   - <el-form-item label="请假类型" prop="leaveType">
111   - {{ getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, form.leaveType) }}
112   - </el-form-item>
113   - <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item>
114   - <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item>
115   - </el-form>
116   - <div slot="footer" class="dialog-footer">
117   - <el-button type="primary" @click="dialogDetailVisible = false">确 定</el-button>
118   - <el-button @click="dialogDetailVisible = false">取 消</el-button>
119   - </div>
120   - </el-dialog>
121   -
122 70 </div>
123 71 </template>
124 72  
... ... @@ -156,17 +104,9 @@ export default {
156 104 leaveType: null,
157 105 reason: null,
158 106 },
159   - // 表单参数
160   - form: {},
161   - // 表单校验
162   - rules: {
163   - startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
164   - endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
165   - },
  107 +
166 108 leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
167 109 leaveResultData: getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT),
168   -
169   - dialogDetailVisible: false, // TODO 芋艿:后面挪到详情页
170 110 };
171 111 },
172 112 created() {
... ... @@ -186,25 +126,6 @@ export default {
186 126 this.loading = false;
187 127 });
188 128 },
189   - /** 取消按钮 */
190   - cancel() {
191   - this.open = false;
192   - this.reset();
193   - },
194   - /** 表单重置 */
195   - reset() {
196   - this.form = {
197   - id: undefined,
198   - status: undefined,
199   - userId: undefined,
200   - startTime: undefined,
201   - endTime: undefined,
202   - leaveType: undefined,
203   - reason: undefined,
204   - applyTime: undefined,
205   - };
206   - this.resetForm("form");
207   - },
208 129 /** 搜索按钮操作 */
209 130 handleQuery() {
210 131 this.queryParams.pageNo = 1;
... ... @@ -212,54 +133,22 @@ export default {
212 133 },
213 134 /** 重置按钮操作 */
214 135 resetQuery() {
215   - this.dateRangeStartTime = [];
216   - this.dateRangeEndTime = [];
217 136 this.dateRangeCreateTime = [];
218 137 this.resetForm("queryForm");
219 138 this.handleQuery();
220 139 },
221 140 /** 新增按钮操作 */
222 141 handleAdd() {
223   - getLeaveApplyMembers().then(response => {
224   - const route = {
225   - path: '/flow/leave/apply',
226   - query: {
227   - hr: response.data.hr,
228   - pm: response.data.pm,
229   - bm : response.data.bm
230   - }
231   - }
232   - this.$router.replace(route);
233   - });
  142 + this.$router.push({ path: "/bpm/oa/leave/create"});
234 143 },
235 144 /** 详情按钮操作 */
236 145 handleDetail(row) {
237   - this.reset();
238   - const id = row.id;
239   - getLeave(id).then(response => {
240   - this.form = response.data;
241   - this.dialogDetailVisible = true
242   - this.title = "请假详情";
243   - });
  146 + this.$router.push({ path: "/bpm/oa/leave/detail", query: { id: row.id}});
244 147 },
245 148 /** 查看审批进度的操作 */
246 149 handleProcessDetail(row) {
247 150 this.$router.push({ path: "/bpm/process-instance/detail", query: { id: row.processInstanceId}});
248 151 },
249   - /** 提交按钮 */
250   - submitForm() {
251   - this.$refs["form"].validate(valid => {
252   - if (!valid) {
253   - return;
254   - }
255   - // 添加的提交
256   - createLeave(this.form).then(response => {
257   - this.msgSuccess("新增成功");
258   - this.open = false;
259   - this.getList();
260   - });
261   - });
262   - },
263 152 resultFormat(row, column) {
264 153 return getDictDataLabel(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, row.result)
265 154 },
... ...