mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-26 01:01:52 +08:00
bpm 的 OA 请假的列表的接入
This commit is contained in:
parent
ec978c4441
commit
cc9a2199b1
@ -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>
|
|
Loading…
Reference in New Issue
Block a user