mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	bpm 的 OA 请假的列表的接入
This commit is contained in:
		| @@ -13,36 +13,21 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | |||||||
| * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||||
| */ | */ | ||||||
| @Data | @Data | ||||||
| public class OALeaveBaseVO { | public class BpmOALeaveBaseVO { | ||||||
| 
 | 
 | ||||||
|     @ApiModelProperty(value = "流程id") |     @ApiModelProperty(value = "请假的开始时间", required = true) | ||||||
|     private String processInstanceId; |  | ||||||
| 
 |  | ||||||
|     @ApiModelProperty(value = "状态", required = true) |  | ||||||
|     private Integer status; |  | ||||||
| 
 |  | ||||||
|     @ApiModelProperty(value = "申请人id", required = true) |  | ||||||
|     private String userId; |  | ||||||
| 
 |  | ||||||
|     @ApiModelProperty(value = "开始时间", required = true) |  | ||||||
|     @NotNull(message = "开始时间不能为空") |     @NotNull(message = "开始时间不能为空") | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||||
|     private Date startTime; |     private Date startTime; | ||||||
| 
 |     @ApiModelProperty(value = "请假的结束时间", required = true) | ||||||
|     @ApiModelProperty(value = "结束时间", required = true) |  | ||||||
|     @NotNull(message = "结束时间不能为空") |     @NotNull(message = "结束时间不能为空") | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||||
|     private Date endTime; |     private Date endTime; | ||||||
| 
 | 
 | ||||||
|     @ApiModelProperty(value = "请假类型") |     @ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type 枚举") | ||||||
|     private String leaveType; |     private Integer type; | ||||||
| 
 | 
 | ||||||
|     @ApiModelProperty(value = "原因") |     @ApiModelProperty(value = "原因", required = true, example = "阅读芋道源码") | ||||||
|     private String reason; |     private String reason; | ||||||
| 
 | 
 | ||||||
|     @ApiModelProperty(value = "申请时间", required = true) |  | ||||||
|     @NotNull(message = "申请时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private Date applyTime; |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
| @@ -12,21 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | |||||||
|  |  | ||||||
| @ApiModel("请假申请创建 Request VO") | @ApiModel("请假申请创建 Request VO") | ||||||
| @Data | @Data | ||||||
| public class OALeaveCreateReqVO { | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @ToString(callSuper = true) | ||||||
|     @ApiModelProperty(value = "请假的开始时间", required = true) | public class OALeaveCreateReqVO extends BpmOALeaveBaseVO { | ||||||
|     @NotNull(message = "开始时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private Date startTime; |  | ||||||
|     @ApiModelProperty(value = "请假的结束时间", required = true) |  | ||||||
|     @NotNull(message = "结束时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private Date endTime; |  | ||||||
|  |  | ||||||
|     @ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type") |  | ||||||
|     private Integer type; |  | ||||||
|  |  | ||||||
|     @ApiModelProperty(value = "原因", required = true, example = "阅读芋道源码") |  | ||||||
|     private String reason; |  | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,14 +2,31 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; | |||||||
|  |  | ||||||
| import lombok.*; | import lombok.*; | ||||||
| import io.swagger.annotations.*; | import io.swagger.annotations.*; | ||||||
|  | import org.springframework.format.annotation.DateTimeFormat; | ||||||
|  |  | ||||||
|  | import javax.validation.constraints.NotNull; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||||
|  |  | ||||||
| @ApiModel("请假申请 Response VO") | @ApiModel("请假申请 Response VO") | ||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||||
| @ToString(callSuper = true) | @ToString(callSuper = true) | ||||||
| public class OALeaveRespVO extends OALeaveBaseVO { | public class OALeaveRespVO extends BpmOALeaveBaseVO { | ||||||
|  |  | ||||||
|     @ApiModelProperty(value = "请假表单主键", required = true) |     @ApiModelProperty(value = "请假表单主键", required = true, example = "1024") | ||||||
|     private Long id; |     private Long id; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 bpm_process_instance_result 枚举") | ||||||
|  |     private Integer result; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "申请时间", required = true) | ||||||
|  |     @NotNull(message = "申请时间不能为空") | ||||||
|  |     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||||
|  |     private Date createTime; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "流程id") | ||||||
|  |     private String processInstanceId; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ public interface BpmOALeaveMapper extends BaseMapperX<OALeaveDO> { | |||||||
|  |  | ||||||
|     default PageResult<OALeaveDO> selectPage(Long userId, OALeavePageReqVO reqVO) { |     default PageResult<OALeaveDO> selectPage(Long userId, OALeavePageReqVO reqVO) { | ||||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<OALeaveDO>() |         return selectPage(reqVO, new LambdaQueryWrapperX<OALeaveDO>() | ||||||
|                 .eqIfPresent(OALeaveDO::getId, userId) |                 .eqIfPresent(OALeaveDO::getUserId, userId) | ||||||
|                 .eqIfPresent(OALeaveDO::getResult, reqVO.getResult()) |                 .eqIfPresent(OALeaveDO::getResult, reqVO.getResult()) | ||||||
|                 .eqIfPresent(OALeaveDO::getType, reqVO.getType()) |                 .eqIfPresent(OALeaveDO::getType, reqVO.getType()) | ||||||
|                 .likeIfPresent(OALeaveDO::getReason, reqVO.getReason()) |                 .likeIfPresent(OALeaveDO::getReason, reqVO.getReason()) | ||||||
|   | |||||||
| @@ -9,15 +9,6 @@ export function createLeave(data) { | |||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
| // 更新请假申请 |  | ||||||
| export function updateLeave(data) { |  | ||||||
|   return request({ |  | ||||||
|     url: '/oa/leave/update', |  | ||||||
|     method: 'put', |  | ||||||
|     data: data |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // 删除请假申请 | // 删除请假申请 | ||||||
| export function deleteLeave(id) { | export function deleteLeave(id) { | ||||||
|   return request({ |   return request({ | ||||||
| @@ -37,7 +28,7 @@ export function getLeave(id) { | |||||||
| // 获得请假申请分页 | // 获得请假申请分页 | ||||||
| export function getLeavePage(query) { | export function getLeavePage(query) { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/oa/leave/page', |     url: '/bpm/oa/leave/page', | ||||||
|     method: 'get', |     method: 'get', | ||||||
|     params: query |     params: query | ||||||
|   }) |   }) | ||||||
| @@ -57,13 +48,3 @@ export function getLeaveApplyMembers() { | |||||||
|     method: 'get' |     method: 'get' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
| // 导出请假申请 Excel |  | ||||||
| export function exportLeaveExcel(query) { |  | ||||||
|   return request({ |  | ||||||
|     url: '/oa/leave/export-excel', |  | ||||||
|     method: 'get', |  | ||||||
|     params: query, |  | ||||||
|     responseType: 'blob' |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -130,26 +130,12 @@ export const constantRoutes = [ | |||||||
|     children: [ |     children: [ | ||||||
|       { |       { | ||||||
|         path: 'leave/apply', |         path: 'leave/apply', | ||||||
|         component: (resolve) => require(['@/views/oa/leave/apply/index'], resolve), |         component: (resolve) => require(['@/views/bpm/oa/leave/create'], resolve), | ||||||
|         name: '请假表单-申请', |         name: '请假表单-申请', | ||||||
|         meta: { title: '请假表单-申请', icon: 'form' } |         meta: { title: '请假表单-申请', icon: 'form' } | ||||||
|       } |       } | ||||||
|     ] |     ] | ||||||
|   }, |   }, | ||||||
|   { |  | ||||||
|     path: '/flow', |  | ||||||
|     component: Layout, |  | ||||||
|     hidden: true, |  | ||||||
|     redirect: 'noredirect', |  | ||||||
|     children: [ |  | ||||||
|       { |  | ||||||
|         path: 'leave/approve', |  | ||||||
|         component: (resolve) => require(['@/views/oa/leave/approve/index'], resolve), |  | ||||||
|         name: '请假表单-审批', |  | ||||||
|         meta: { title: '请假表单-审批', icon: 'form' } |  | ||||||
|       } |  | ||||||
|     ] |  | ||||||
|   }, |  | ||||||
|   { |   { | ||||||
|     path: '/bpm', |     path: '/bpm', | ||||||
|     component: Layout, |     component: Layout, | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ export const DICT_TYPE = { | |||||||
|   BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result', |   BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result', | ||||||
|   BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script', |   BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script', | ||||||
|   OA_LEAVE_STATUS: 'flow_status', // todo 芋艿:可以删除 |   OA_LEAVE_STATUS: 'flow_status', // todo 芋艿:可以删除 | ||||||
|   OA_LEAVE_TYPE: 'oa_leave_type' |   BPM_OA_LEAVE_TYPE: 'bpm_oa_leave_type' | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ | |||||||
| import { createFormKeyLeave} from "@/api/oa/leave" | import { createFormKeyLeave} from "@/api/oa/leave" | ||||||
| import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | ||||||
| export default { | export default { | ||||||
|   name: "ApplyLeave", |   name: "LeaveCreate", | ||||||
|   components: { |   components: { | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
| @@ -65,7 +65,7 @@ export default { | |||||||
|       statusFormat(row, column) { |       statusFormat(row, column) { | ||||||
|         return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status) |         return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status) | ||||||
|       }, |       }, | ||||||
|       leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE), |       leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE), | ||||||
|       leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) |       leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
| @@ -3,44 +3,24 @@ | |||||||
| 
 | 
 | ||||||
|     <!-- 搜索工作栏 --> |     <!-- 搜索工作栏 --> | ||||||
|     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> | ||||||
|       <el-form-item label="流程id" prop="processInstanceId"> |       <el-form-item label="请假类型" prop="type"> | ||||||
|         <el-input v-model="queryParams.processInstanceId" placeholder="请输入流程id" clearable size="small" @keyup.enter.native="handleQuery"/> |         <el-select v-model="queryParams.type" placeholder="请选择请假类型" clearable> | ||||||
|       </el-form-item> |           <el-option v-for="dict in leaveTypeDictData" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|       <el-form-item label="状态" prop="status"> |  | ||||||
|         <el-select v-model="queryParams.status" placeholder="请选择状态"> |  | ||||||
|           <el-option |  | ||||||
|             v-for="dict in leaveStatusData" |  | ||||||
|             :key="parseInt(dict.value)" |  | ||||||
|             :label="dict.label" |  | ||||||
|             :value="parseInt(dict.value)" |  | ||||||
|           /> |  | ||||||
|         </el-select> |         </el-select> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item label="开始时间"> |       <el-form-item label="申请时间"> | ||||||
|         <el-date-picker v-model="dateRangeStartTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" |         <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" | ||||||
|                         type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> |                         type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item label="结束时间"> |       <el-form-item label="结果" prop="result"> | ||||||
|         <el-date-picker v-model="dateRangeEndTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" |         <el-select v-model="queryParams.result" placeholder="请选择流结果" clearable size="small"> | ||||||
|                         type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> |           <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT)" | ||||||
|       </el-form-item> |                      :key="dict.value" :label="dict.label" :value="dict.value"/> | ||||||
|       <el-form-item label="请假类型" prop="leaveType"> |  | ||||||
|         <el-select v-model="queryParams.leaveType" placeholder="请选择请假类型"> |  | ||||||
|           <el-option |  | ||||||
|             v-for="dict in leaveTypeDictData" |  | ||||||
|             :key="dict.value" |  | ||||||
|             :label="dict.label" |  | ||||||
|             :value="dict.value" |  | ||||||
|           /> |  | ||||||
|         </el-select> |         </el-select> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item label="原因" prop="reason"> |       <el-form-item label="原因" prop="reason"> | ||||||
|         <el-input v-model="queryParams.reason" placeholder="请输入原因" clearable size="small" @keyup.enter.native="handleQuery"/> |         <el-input v-model="queryParams.reason" placeholder="请输入原因" clearable size="small" @keyup.enter.native="handleQuery"/> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item label="申请时间"> |  | ||||||
|         <el-date-picker v-model="dateRangeApplyTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" |  | ||||||
|                         type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> |  | ||||||
|       </el-form-item> |  | ||||||
|       <el-form-item> |       <el-form-item> | ||||||
|         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||||
| @@ -57,9 +37,8 @@ | |||||||
| 
 | 
 | ||||||
|     <!-- 列表 --> |     <!-- 列表 --> | ||||||
|     <el-table v-loading="loading" :data="list"> |     <el-table v-loading="loading" :data="list"> | ||||||
|       <el-table-column label="请假表单主键" align="center" prop="id" /> |       <el-table-column label="申请编号" align="center" prop="id" /> | ||||||
|       <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" /> |       <el-table-column label="状态" align="center" prop="result" :formatter="resultFormat" /> | ||||||
|       <el-table-column label="申请人id" align="center" prop="userId" /> |  | ||||||
|       <el-table-column label="开始时间" align="center" prop="startTime" width="180"> |       <el-table-column label="开始时间" align="center" prop="startTime" width="180"> | ||||||
|         <template slot-scope="scope"> |         <template slot-scope="scope"> | ||||||
|           <span>{{ parseTime(scope.row.startTime) }}</span> |           <span>{{ parseTime(scope.row.startTime) }}</span> | ||||||
| @@ -70,17 +49,17 @@ | |||||||
|           <span>{{ parseTime(scope.row.endTime) }}</span> |           <span>{{ parseTime(scope.row.endTime) }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="请假类型" align="center" prop="leaveType" :formatter="leaveTypeFormat" /> |       <el-table-column label="请假类型" align="center" prop="type" :formatter="typeFormat" /> | ||||||
|       <el-table-column label="原因" align="center" prop="reason" /> |       <el-table-column label="原因" align="center" prop="reason" /> | ||||||
|       <el-table-column label="申请时间" align="center" prop="applyTime" width="180"> |       <el-table-column label="申请时间" align="center" prop="applyTime" width="180"> | ||||||
|         <template slot-scope="scope"> |         <template slot-scope="scope"> | ||||||
|           <span>{{ parseTime(scope.row.applyTime) }}</span> |           <span>{{ parseTime(scope.row.createTime) }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|         <template slot-scope="scope"> |         <template slot-scope="scope"> | ||||||
|           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleStep(scope.row)">审批进度</el-button> |  | ||||||
|           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)">详情</el-button> |           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)">详情</el-button> | ||||||
|  |           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleProcessDetail(scope.row)">审批进度</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|     </el-table> |     </el-table> | ||||||
| @@ -129,7 +108,7 @@ | |||||||
|       <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item> |       <el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item> | ||||||
|       <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item> |       <el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item> | ||||||
|       <el-form-item label="请假类型" prop="leaveType"> |       <el-form-item label="请假类型" prop="leaveType"> | ||||||
|         {{ getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, form.leaveType) }} |         {{ getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, form.leaveType) }} | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item> |       <el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item> | ||||||
|       <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item> |       <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item> | ||||||
| @@ -140,27 +119,13 @@ | |||||||
|       </div> |       </div> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
| 
 | 
 | ||||||
|     <el-dialog :title="title" :visible.sync="dialogStepsVisible" width="750px" append-to-body> |  | ||||||
|       <el-steps :active="stepActive" finish-status="success" > |  | ||||||
|         <el-step :title="stepTitle(item)" :description="stepAssignee(item.assignee)" icon="el-icon-edit"  v-for="(item) in handleTask.historyTask"></el-step> |  | ||||||
|       </el-steps> |  | ||||||
|       <br/> |  | ||||||
|       <div v-html="svgUrl"></div> |  | ||||||
|       <el-steps direction="vertical" :active="stepActive"> |  | ||||||
|         <el-step :title="stepTitle(item)" :description="stepDes(item)" v-for="(item) in handleTask.historyTask"></el-step> |  | ||||||
|       </el-steps> |  | ||||||
|       <div slot="footer" class="dialog-footer"> |  | ||||||
|         <el-button type="primary" @click="dialogStepsVisible = false">确 定</el-button> |  | ||||||
|         <el-button @click="dialogStepsVisible = false">取 消</el-button> |  | ||||||
|       </div> |  | ||||||
|     </el-dialog> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import { createLeave, updateLeave, getLeaveApplyMembers, getLeave, getLeavePage, exportLeaveExcel } from "@/api/oa/leave" | import { createLeave, getLeaveApplyMembers, getLeave, getLeavePage} from "@/api/oa/leave" | ||||||
| import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | ||||||
| import { processHistorySteps,getHighlightImg } from '@/api/oa/todo' | 
 | ||||||
| export default { | export default { | ||||||
|   name: "Leave", |   name: "Leave", | ||||||
|   components: { |   components: { | ||||||
| @@ -179,13 +144,8 @@ export default { | |||||||
|       title: "", |       title: "", | ||||||
|       // 是否显示弹出层 |       // 是否显示弹出层 | ||||||
|       open: false, |       open: false, | ||||||
|       //进度弹出层 |  | ||||||
|       dialogDetailVisible: false, |  | ||||||
|       //审批进度弹出层 |       //审批进度弹出层 | ||||||
|       dialogStepsVisible: false, |       dateRangeCreateTime: [], | ||||||
|       dateRangeStartTime: [], |  | ||||||
|       dateRangeEndTime: [], |  | ||||||
|       dateRangeApplyTime: [], |  | ||||||
|       // 查询参数 |       // 查询参数 | ||||||
|       queryParams: { |       queryParams: { | ||||||
|         pageNo: 1, |         pageNo: 1, | ||||||
| @@ -198,88 +158,27 @@ export default { | |||||||
|       }, |       }, | ||||||
|       // 表单参数 |       // 表单参数 | ||||||
|       form: {}, |       form: {}, | ||||||
|       svgUrl: "", |  | ||||||
|       handleTask: { |  | ||||||
|         historyTask:[], |  | ||||||
|         taskVariable: "", |  | ||||||
|         formObject: {} |  | ||||||
|       }, |  | ||||||
|       steps:[{ |  | ||||||
|         stepName:"步骤一" |  | ||||||
|       }], |  | ||||||
|       // 表单校验 |       // 表单校验 | ||||||
|       rules: { |       rules: { | ||||||
|         startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }], |         startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }], | ||||||
|         endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }], |         endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }], | ||||||
|         applyTime: [{ required: true, message: "申请时间不能为空", trigger: "blur" }], |  | ||||||
|       }, |       }, | ||||||
|       statusFormat(row, column) { |       leaveTypeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE), | ||||||
|         return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status) |       leaveResultData: getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT), | ||||||
|       }, | 
 | ||||||
|       leaveTypeFormat(row, column) { |       dialogDetailVisible: false, // TODO 芋艿:后面挪到详情页 | ||||||
|         return getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, row.leaveType) |  | ||||||
|       }, |  | ||||||
|       leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE), |  | ||||||
|       leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) |  | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|     this.getList(); |     this.getList(); | ||||||
|   }, |   }, | ||||||
|   computed: { |  | ||||||
|     stepActive: function () { |  | ||||||
|       let idx = 0; |  | ||||||
|       for (let i = 0; i < this.handleTask.historyTask.length; i++) { |  | ||||||
|         if (this.handleTask.historyTask[i].status === 1) { |  | ||||||
|           idx = idx + 1; |  | ||||||
|         } else { |  | ||||||
|           break; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       return idx; |  | ||||||
|     }, |  | ||||||
|     stepTitle() { |  | ||||||
|       return function (item) { |  | ||||||
|         let name = item.stepName; |  | ||||||
|         if (item.status === 1) { |  | ||||||
|           name += '(已完成)' |  | ||||||
|         } |  | ||||||
|         if (item.status === 0) { |  | ||||||
|           name += '(进行中)' |  | ||||||
|         } |  | ||||||
|         return name; |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     stepDes() { |  | ||||||
|       return function (item) { |  | ||||||
|         let desc = ""; |  | ||||||
|         if (item.status === 1) { |  | ||||||
|           desc += "审批人:[" + item.assignee + "]    审批意见: [" + item.comment + "]   审批时间: " + this.parseTime(item.endTime); |  | ||||||
|         } |  | ||||||
|         return desc; |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     stepAssignee() { |  | ||||||
|       return function (assignee) { |  | ||||||
|         let desc = ""; |  | ||||||
|         if(assignee){ |  | ||||||
|           desc += "办理人:[" + assignee + "]"; |  | ||||||
|         }else{ |  | ||||||
|           desc += "办理人未签收"; |  | ||||||
|         } |  | ||||||
|         return desc; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   methods: { |   methods: { | ||||||
|     /** 查询列表 */ |     /** 查询列表 */ | ||||||
|     getList() { |     getList() { | ||||||
|       this.loading = true; |       this.loading = true; | ||||||
|       // 处理查询参数 |       // 处理查询参数 | ||||||
|       let params = {...this.queryParams}; |       let params = {...this.queryParams}; | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime'); |       this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime'); |  | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeApplyTime, 'applyTime'); |  | ||||||
|       // 执行查询 |       // 执行查询 | ||||||
|       getLeavePage(params).then(response => { |       getLeavePage(params).then(response => { | ||||||
|         this.list = response.data.list; |         this.list = response.data.list; | ||||||
| @@ -296,7 +195,6 @@ export default { | |||||||
|     reset() { |     reset() { | ||||||
|       this.form = { |       this.form = { | ||||||
|         id: undefined, |         id: undefined, | ||||||
|         processInstanceId: undefined, |  | ||||||
|         status: undefined, |         status: undefined, | ||||||
|         userId: undefined, |         userId: undefined, | ||||||
|         startTime: undefined, |         startTime: undefined, | ||||||
| @@ -316,7 +214,7 @@ export default { | |||||||
|     resetQuery() { |     resetQuery() { | ||||||
|       this.dateRangeStartTime = []; |       this.dateRangeStartTime = []; | ||||||
|       this.dateRangeEndTime = []; |       this.dateRangeEndTime = []; | ||||||
|       this.dateRangeApplyTime = []; |       this.dateRangeCreateTime = []; | ||||||
|       this.resetForm("queryForm"); |       this.resetForm("queryForm"); | ||||||
|       this.handleQuery(); |       this.handleQuery(); | ||||||
|     }, |     }, | ||||||
| @@ -344,21 +242,16 @@ export default { | |||||||
|         this.title = "请假详情"; |         this.title = "请假详情"; | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|  |     /** 查看审批进度的操作 */ | ||||||
|  |     handleProcessDetail(row) { | ||||||
|  |       this.$router.push({ path: "/bpm/process-instance/detail", query: { id: row.processInstanceId}}); | ||||||
|  |     }, | ||||||
|     /** 提交按钮 */ |     /** 提交按钮 */ | ||||||
|     submitForm() { |     submitForm() { | ||||||
|       this.$refs["form"].validate(valid => { |       this.$refs["form"].validate(valid => { | ||||||
|         if (!valid) { |         if (!valid) { | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|         // 修改的提交 |  | ||||||
|         if (this.form.id != null) { |  | ||||||
|           updateLeave(this.form).then(response => { |  | ||||||
|             this.msgSuccess("修改成功"); |  | ||||||
|             this.open = false; |  | ||||||
|             this.getList(); |  | ||||||
|           }); |  | ||||||
|           return; |  | ||||||
|         } |  | ||||||
|         // 添加的提交 |         // 添加的提交 | ||||||
|         createLeave(this.form).then(response => { |         createLeave(this.form).then(response => { | ||||||
|           this.msgSuccess("新增成功"); |           this.msgSuccess("新增成功"); | ||||||
| @@ -367,39 +260,12 @@ export default { | |||||||
|         }); |         }); | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|     /** 审批进度 */ |     resultFormat(row, column) { | ||||||
|     handleStep(row) { |       return getDictDataLabel(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, row.result) | ||||||
|       const that = this; |     }, | ||||||
|       const id = row.processInstanceId; |     typeFormat(row, column) { | ||||||
|       processHistorySteps(id).then(response => { |       return getDictDataLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, row.type) | ||||||
|         this.handleTask.historyTask = response.data; |  | ||||||
|         this.dialogStepsVisible = true |  | ||||||
|         this.title = "审批进度"; |  | ||||||
|         getHighlightImg(row.processInstanceId).then(response => { |  | ||||||
|           that.svgUrl = response |  | ||||||
|         }) |  | ||||||
|       }); |  | ||||||
|     }, |     }, | ||||||
|     /** 导出按钮操作 */ |  | ||||||
|     handleExport() { |  | ||||||
|       // 处理查询参数 |  | ||||||
|       let params = {...this.queryParams}; |  | ||||||
|       params.pageNo = undefined; |  | ||||||
|       params.pageSize = undefined; |  | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime'); |  | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime'); |  | ||||||
|       this.addBeginAndEndTime(params, this.dateRangeApplyTime, 'applyTime'); |  | ||||||
|       // 执行导出 |  | ||||||
|       this.$confirm('是否确认导出所有请假申请数据项?', "警告", { |  | ||||||
|           confirmButtonText: "确定", |  | ||||||
|           cancelButtonText: "取消", |  | ||||||
|           type: "warning" |  | ||||||
|         }).then(function() { |  | ||||||
|           return exportLeaveExcel(params); |  | ||||||
|         }).then(response => { |  | ||||||
|           this.downloadExcel(response, '请假申请.xls'); |  | ||||||
|         }) |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
| @@ -1,36 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <div class="app-container"> |  | ||||||
|     <el-row> |  | ||||||
|       <div>TODO @芋艿, 待办请假和 已办请假,感觉可以做成通用,不同的业务表单对应的待办任务和已办任务可以通用,或许可以想个更通用的名字 </div> |  | ||||||
|     </el-row> |  | ||||||
|   </div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import { getStartForm } from "@/api/oa/flow"; |  | ||||||
| export default { |  | ||||||
|   name: "Flow", |  | ||||||
|   components: { |  | ||||||
|   }, |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       // 表单参数 |  | ||||||
|       form: {}, |  | ||||||
|  |  | ||||||
|       rules: { |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|   created() { |  | ||||||
|  |  | ||||||
|   }, |  | ||||||
|   methods: { |  | ||||||
|     // leave() { |  | ||||||
|     //   getStartForm('leave-formkey').then(response => { |  | ||||||
|     //     const route = response.data; |  | ||||||
|     //     this.$router.replace(route); |  | ||||||
|     //   }); |  | ||||||
|     // } |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
| @@ -1,212 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <div class="app-container"> |  | ||||||
|     <el-tabs type="border-card"> |  | ||||||
|       <el-tab-pane label="任务处理"> |  | ||||||
|         <el-form ref="form" :model="form"  label-width="80px"> |  | ||||||
|           <el-row :gutter="20"> |  | ||||||
|             <el-col :span="6"><el-form-item label="申请人" >{{form.userId}}</el-form-item></el-col> |  | ||||||
|             <el-col :span="6"> |  | ||||||
|               <el-form-item label="请假类型" prop="leaveType"> |  | ||||||
|                 {{ getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, form.leaveType) }} |  | ||||||
|               </el-form-item> |  | ||||||
|             </el-col> |  | ||||||
|             <el-col :span="6"><el-form-item label="原因" prop="reason">{{form.reason}}</el-form-item></el-col> |  | ||||||
|           </el-row> |  | ||||||
|           <el-row :gutter="20"> |  | ||||||
|             <el-col :span="6"><el-form-item label="开始时间" >{{ parseTime(form.startTime) }}</el-form-item></el-col> |  | ||||||
|             <el-col :span="6"><el-form-item label="结束时间" prop="endTime">{{ parseTime(form.endTime) }}</el-form-item></el-col> |  | ||||||
|             <el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item> |  | ||||||
|           </el-row> |  | ||||||
|         </el-form> |  | ||||||
|         <el-divider></el-divider> |  | ||||||
|         <el-form ref="taskForm" :model="leaveApprove" :rules="rules"  label-width="80px"> |  | ||||||
|           <el-form-item label="是否同意" prop="approved"> |  | ||||||
|             <el-select v-model="leaveApprove.approved" placeholder="是否同意" v-on:change="approveChange"> |  | ||||||
|               <el-option |  | ||||||
|                 v-for="dict in approvedData" |  | ||||||
|                 :key="parseInt(dict.value)" |  | ||||||
|                 :label="dict.label" |  | ||||||
|                 :value="parseInt(dict.value)" |  | ||||||
|               /> |  | ||||||
|             </el-select> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="处理意见" prop="comment"> |  | ||||||
|             <el-col :span="11"> |  | ||||||
|               <el-input |  | ||||||
|                 type="textarea" |  | ||||||
|                 :rows="3" |  | ||||||
|                 v-model="leaveApprove.comment"> |  | ||||||
|               </el-input> |  | ||||||
|             </el-col> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item> |  | ||||||
|             <el-button type="primary" @click="submitForm">确 定</el-button> |  | ||||||
|           </el-form-item> |  | ||||||
|         </el-form> |  | ||||||
|       </el-tab-pane> |  | ||||||
|       <el-tab-pane label="历史跟踪"> |  | ||||||
|         <el-steps :active="stepActive" simple finish-status="success"> |  | ||||||
|           <el-step :title="stepTitle(item)" icon="el-icon-edit" v-for="(item) in handleTask.historyTask" ></el-step> |  | ||||||
|         </el-steps> |  | ||||||
|         <br/> |  | ||||||
|         <el-steps direction="vertical" :active="stepActive"  space="65px"> |  | ||||||
|           <el-step :title="stepTitle(item)" :description="stepDes(item)" v-for="(item) in handleTask.historyTask" ></el-step> |  | ||||||
|         </el-steps> |  | ||||||
|       </el-tab-pane> |  | ||||||
|       <el-tab-pane label="流程图"> |  | ||||||
|         <div v-html="highlightSvgUrl"></div> |  | ||||||
|       </el-tab-pane> |  | ||||||
|     </el-tabs> |  | ||||||
|  |  | ||||||
|   </div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import { getLeave,getLeaveApplyMembers } from "@/api/oa/leave" |  | ||||||
| import { completeTask,taskSteps, getHighlightImg } from "@/api/oa/todo"; |  | ||||||
| import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' |  | ||||||
| export default { |  | ||||||
|   name: "ApproveLeave", |  | ||||||
|   components: { |  | ||||||
|   }, |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       // 表单参数 |  | ||||||
|       form: {}, |  | ||||||
|       // 表单校验 |  | ||||||
|       rules: { |  | ||||||
|         comment: [{ required: true, message: "意见不能为空", trigger: "blur" }] |  | ||||||
|       }, |  | ||||||
|       handleTask: { |  | ||||||
|         historyTask:[] |  | ||||||
|       }, |  | ||||||
|       leaveApprove: { |  | ||||||
|         approved : 1, |  | ||||||
|         variables: { |  | ||||||
|           hr: "", |  | ||||||
|           pm: "", |  | ||||||
|           bm: "" |  | ||||||
|         }, |  | ||||||
|         taskId: "", |  | ||||||
|         processInstanceId: "", |  | ||||||
|         comment: "同意" |  | ||||||
|       }, |  | ||||||
|       approvedData: [ |  | ||||||
|         { |  | ||||||
|           value: 1, |  | ||||||
|           label: '同意' |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           value: 0, |  | ||||||
|           label: '不同意' |  | ||||||
|         } |  | ||||||
|       ], |  | ||||||
|       highlightSvgUrl: "", |  | ||||||
|       statusFormat(row, column) { |  | ||||||
|         return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status) |  | ||||||
|       }, |  | ||||||
|       leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE), |  | ||||||
|       leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS) |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|   computed:{ |  | ||||||
|      stepActive: function () { |  | ||||||
|          let idx = 0; |  | ||||||
|          for(let i=0; i<this.handleTask.historyTask.length; i++){ |  | ||||||
|            if(this.handleTask.historyTask[i].status === 1){ |  | ||||||
|              idx= idx+1; |  | ||||||
|            }else{ |  | ||||||
|              break; |  | ||||||
|            } |  | ||||||
|          } |  | ||||||
|          return idx; |  | ||||||
|      }, |  | ||||||
|     stepTitle() { |  | ||||||
|       return function (item) { |  | ||||||
|         let name = item.stepName; |  | ||||||
|         if (item.status === 1) { |  | ||||||
|           name += '(已完成)' |  | ||||||
|         } |  | ||||||
|         if (item.status === 0) { |  | ||||||
|           name += '(进行中)' |  | ||||||
|         } |  | ||||||
|         return name; |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     stepDes(){ |  | ||||||
|       return function (item) { |  | ||||||
|         let desc = ""; |  | ||||||
|         if (item.status === 1) { |  | ||||||
|           desc+="审批人:["+ item.assignee +"]    审批意见: [" + item.comment + "]   审批时间: " + this.parseTime(item.endTime); |  | ||||||
|         } |  | ||||||
|         return desc; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   created() { |  | ||||||
|     const businessKey = this.$route.query.businessKey; |  | ||||||
|     const taskId = this.$route.query.taskId; |  | ||||||
|     this.leaveApprove.taskId = taskId; |  | ||||||
|     this.leaveApprove.processInstanceId = this.$route.query.processInstanceId; |  | ||||||
|     this.getForm(businessKey); |  | ||||||
|     this.getHighlightImg(this.leaveApprove.processInstanceId); |  | ||||||
|   }, |  | ||||||
|   methods: { |  | ||||||
|     getHighlightImg(processInstanceId){ |  | ||||||
|       getHighlightImg(processInstanceId).then(response => { |  | ||||||
|         console.log(response) |  | ||||||
|         this.highlightSvgUrl = response |  | ||||||
|       }) |  | ||||||
|     }, |  | ||||||
|     /** 提交按钮 */ |  | ||||||
|     submitForm() { |  | ||||||
|       this.$refs["taskForm"].validate(valid => { |  | ||||||
|         if (!valid) { |  | ||||||
|           return; |  | ||||||
|         } |  | ||||||
|         if (this.leaveApprove.approved == 1) { |  | ||||||
|           this.leaveApprove.variables["approved"] = true; |  | ||||||
|         } |  | ||||||
|         if (this.leaveApprove.approved == 0) { |  | ||||||
|           this.leaveApprove.variables["approved"] = false; |  | ||||||
|         } |  | ||||||
|         completeTask(this.leaveApprove).then(response => { |  | ||||||
|  |  | ||||||
|           this.msgSuccess("执行任务成功"); |  | ||||||
|           this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => { |  | ||||||
|             //if (this.isActive(this.$route)) { |  | ||||||
|             this.$router.push({path: '/oa/todo'}) |  | ||||||
|             //} |  | ||||||
|           }) |  | ||||||
|         }) |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     getForm(id){ |  | ||||||
|       getLeave(id).then(response => { |  | ||||||
|         this.form = response.data; |  | ||||||
|       }); |  | ||||||
|       const data = { |  | ||||||
|         taskId : this.leaveApprove.taskId, |  | ||||||
|         businessKey: id, |  | ||||||
|       } |  | ||||||
|       taskSteps(data).then(response => { |  | ||||||
|         this.handleTask = response.data; |  | ||||||
|       }); |  | ||||||
|  |  | ||||||
|       getLeaveApplyMembers().then(response => { |  | ||||||
|         this.leaveApprove.variables.hr = response.data.hr; |  | ||||||
|         this.leaveApprove.variables.bm = response.data.bm; |  | ||||||
|         this.leaveApprove.variables.pm = response.data.pm; |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     approveChange(){ |  | ||||||
|       if (this.leaveApprove.approved === 1) { |  | ||||||
|         this.leaveApprove.comment = "同意" |  | ||||||
|       } |  | ||||||
|       if(this.leaveApprove.approved === 0){ |  | ||||||
|         this.leaveApprove.comment = "不同意" |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV