Commit cc9a2199b1ab4090f0dc727b6858746b4b2eaa39
1 parent
ec978c44
bpm 的 OA 请假的列表的接入
Showing
11 changed files
with
67 additions
and
494 deletions
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> |