修改请假流程

This commit is contained in:
jason
2021-11-07 17:38:00 +08:00
parent d0a59f7ef1
commit b784bf3e12
25 changed files with 495 additions and 872 deletions

View File

@ -51,6 +51,13 @@ export function createFormKeyLeave(data) {
})
}
export function getLeaveApplyMembers() {
return request({
url: '/oa/leave/getLeaveApplyMembers',
method: 'get'
})
}
// 导出请假申请 Excel
export function exportLeaveExcel(query) {
return request({

View File

@ -133,8 +133,8 @@ export const constantRoutes = [
{
path: 'leave/apply',
component: (resolve) => require(['@/views/oa/leave/apply/index'], resolve),
name: '请假表单',
meta: { title: '请假表单', icon: 'form' }
name: '请假表单-申请',
meta: { title: '请假表单-申请', icon: 'form' }
}
]
},
@ -145,52 +145,10 @@ export const constantRoutes = [
redirect: 'noredirect',
children: [
{
path: 'leave/approve-leader',
component: (resolve) => require(['@/views/oa/leave/approve-leader/index'], resolve),
name: '请假表单-部门领导审批',
meta: { title: '请假表单-部门领导审批', icon: 'form' }
}
]
},
{
path: '/flow',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'leave/approve-hr',
component: (resolve) => require(['@/views/oa/leave/approve-hr/index'], resolve),
name: '请假表单-人事审批',
meta: { title: '请假表单-人事审批', icon: 'form' }
}
]
},
{
path: '/flow',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'leave/confirm',
component: (resolve) => require(['@/views/oa/leave/confirm/index'], resolve),
name: '请假表单-确认',
meta: { title: '请假表单-确认', icon: 'form' }
}
]
},
{
path: '/flow',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'leave/modify',
component: (resolve) => require(['@/views/oa/leave/modify/index'], resolve),
name: '请假表单-修改',
meta: { title: '请假表单-修改', icon: 'form' }
path: 'leave/approve',
component: (resolve) => require(['@/views/oa/leave/approve/index'], resolve),
name: '请假表单-审批',
meta: { title: '请假表单-审批', icon: 'form' }
}
]
}

View File

@ -31,7 +31,7 @@ export const DICT_TYPE = {
TOOL_CODEGEN_TEMPLATE_TYPE: 'tool_codegen_template_type',
OA_LEAVE_STATUS: 'oa_leave_status',
OA_LEAVE_STATUS: 'flow_status',
OA_LEAVE_TYPE: 'oa_leave_type'
}

View File

@ -1,7 +1,7 @@
<template>
<div class="app-container">
<el-row>
<el-button type="primary" v-on:click="leave">请假申请</el-button>
<div>TODO @芋艿, 待办请假和 已办请假感觉可以做成通用不同的业务表单对应的待办任务和已办任务可以通用或许可以想个更通用的名字 </div>
</el-row>
</div>
</template>
@ -25,12 +25,12 @@ export default {
},
methods: {
leave() {
getStartForm('leave-formkey').then(response => {
const route = response.data;
this.$router.replace(route);
});
}
// leave() {
// getStartForm('leave-formkey').then(response => {
// const route = response.data;
// this.$router.replace(route);
// });
// }
}
};
</script>

View File

@ -38,7 +38,7 @@
</template>
<script>
import { createFormKeyLeave } from "@/api/oa/leave"
import { createFormKeyLeave} from "@/api/oa/leave"
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "ApplyLeave",
@ -47,13 +47,21 @@ export default {
data() {
return {
// 表单参数
form: {},
form: {
processKey: 'leave-update',
taskVariables:{
hr: "",
pm: "",
bm: ""
}
},
// 表单校验
rules: {
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
applyTime: [{ required: true, message: "申请时间不能为空", trigger: "blur" }],
},
statusFormat(row, column) {
return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)
},
@ -62,6 +70,9 @@ export default {
};
},
created() {
this.form.taskVariables.hr = this.$route.query.hr;
this.form.taskVariables.pm = this.$route.query.pm;
this.form.taskVariables.bm = this.$route.query.bm;
},
methods: {
/** 提交按钮 */
@ -70,13 +81,7 @@ export default {
if (!valid) {
return;
}
// 修改的提交
// if (this.form.id != null) {
// updateLeave(this.form).then(response => {
// this.msgSuccess("修改成功");
// });
// return;
// }
// 添加的提交
createFormKeyLeave(this.form).then(response => {
this.msgSuccess("新增成功");

View File

@ -1,190 +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="流程图">流程图-TODO</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { getLeave } from "@/api/oa/leave"
import { completeTask,taskSteps } from "@/api/oa/todo";
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "ApproveLeaderLeave",
components: {
},
data() {
return {
// 表单参数
form: {},
// 表单校验
rules: {
comment: [{ required: true, message: "意见不能为空", trigger: "blur" }]
},
handleTask: {
historyTask:[]
},
leaveApprove: {
approved : 1,
variables: {},
taskId: "",
comment: "同意"
},
approvedData: [
{
value: 1,
label: '同意'
},
{
value: 0,
label: '不同意'
}
],
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)
};
},
created() {
const businessKey = this.$route.query.businessKey;
const taskId = this.$route.query.taskId;
this.leaveApprove.taskId = taskId;
this.getForm(businessKey);
},
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;
}
}
},
methods: {
/** 提交按钮 */
submitForm() {
this.$refs["taskForm"].validate(valid => {
if (!valid) {
return;
}
if (this.leaveApprove.approved == 1) {
this.leaveApprove.variables["deptLeaderApproved"] = true;
}
if (this.leaveApprove.approved == 0) {
this.leaveApprove.variables["deptLeaderApproved"] = 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;
});
},
approveChange(){
if (this.leaveApprove.approved === 1) {
this.leaveApprove.comment = "同意"
}
if(this.leaveApprove.approved === 0){
this.leaveApprove.comment = "不同意"
}
}
}
};
</script>

View File

@ -62,11 +62,11 @@
</template>
<script>
import { getLeave } from "@/api/oa/leave"
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: "HrApproveLeave",
name: "ApproveLeave",
components: {
},
data() {
@ -82,7 +82,11 @@ export default {
},
leaveApprove: {
approved : 1,
variables: {},
variables: {
hr: "",
pm: "",
bm: ""
},
taskId: "",
processInstanceId: "",
comment: "同意"
@ -161,12 +165,13 @@ export default {
return;
}
if (this.leaveApprove.approved == 1) {
this.leaveApprove.variables["hrApproved"] = true;
this.leaveApprove.variables["approved"] = true;
}
if (this.leaveApprove.approved == 0) {
this.leaveApprove.variables["hrApproved"] = false;
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)) {
@ -187,6 +192,12 @@ export default {
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) {

View File

@ -1,137 +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-row :gutter="20">
<el-col :span="6"><el-button type="primary" @click="submitForm"> </el-button></el-col>
</el-row>
</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="流程图">流程图-TODO</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { getLeave } from "@/api/oa/leave"
import { completeTask,taskSteps } from "@/api/oa/todo";
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "ConfirmLeave",
components: {
},
data() {
return {
// 表单参数
form: {},
// 表单校验
rules: {
},
handleTask: {
historyTask:[]
},
leaveApprove: {
variables: {},
taskId: "",
comment: ""
},
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)
};
},
created() {
const businessKey = this.$route.query.businessKey;
const taskId = this.$route.query.taskId;
this.leaveApprove.taskId = taskId;
this.getForm(businessKey);
},
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;
}
}
},
methods: {
/** 提交按钮 */
submitForm() {
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;
});
}
}
};
</script>

View File

@ -49,6 +49,9 @@
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -155,7 +158,7 @@
</template>
<script>
import { createLeave, updateLeave, deleteLeave, getLeave, getLeavePage, exportLeaveExcel } from "@/api/oa/leave"
import { createLeave, updateLeave, getLeaveApplyMembers, getLeave, getLeavePage, exportLeaveExcel } from "@/api/oa/leave"
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
import { processHistorySteps,getHighlightImg } from '@/api/oa/todo'
export default {
@ -319,9 +322,17 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加请假申请";
getLeaveApplyMembers().then(response => {
const route = {
path: '/flow/leave/apply',
query: {
hr: response.data.hr,
pm: response.data.pm,
bm : response.data.bm
}
}
this.$router.replace(route);
});
},
/** 详情按钮操作 */
handleDetail(row) {

View File

@ -1,211 +0,0 @@
<template>
<div class="app-container">
<el-tabs type="border-card">
<el-tab-pane label="任务处理">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col :span="15">
<el-form-item label="是否调整申请" prop="reApply">
<el-select v-model="reApplySelect" placeholder="是否调整申请" v-on:change="reApplyChange">
<el-option
v-for="dict in reApplyData"
:key="parseInt(dict.value)"
:label="dict.label"
:value="parseInt(dict.value)"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" v-show="modifyShow">
<el-col :span="8"><el-form-item label="申请人" >{{form.userId}}</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="申请时间" prop="applyTime">{{ parseTime(form.applyTime) }}</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" v-show="modifyShow">
<el-col :span="8">
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable size="small" v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable size="small" v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
</el-form-item>
</el-col>
</el-row>
<el-row v-show="modifyShow" >
<el-col :span="8">
<el-form-item label="请假类型" prop="leaveType">
<el-select v-model="form.leaveType" placeholder="请选择">
<el-option
v-for="dict in leaveTypeDictData"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="modifyShow">
<el-col :span="15">
<el-form-item label="原因" prop="reason">
<el-input
type="textarea"
:rows="3"
v-model="form.reason"
placeholder="请输入原因" />
</el-form-item>
</el-col>
</el-row>
<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="流程图">流程图-TODO</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { getLeave,updateLeave } from "@/api/oa/leave"
import { taskSteps } from "@/api/oa/todo"
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "HrApproveLeave",
components: {
},
data() {
return {
// 表单参数
form: {},
// 表单校验
rules: {
},
handleTask: {
historyTask:[]
},
modifyShow: true,
reApplySelect: 1,
reApplyData: [
{
value: 0,
label: '取消申请'
},
{
value: 1,
label: '继续申请'
}
],
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)
};
},
mounted() {
const businessKey = this.$route.query.businessKey;
const taskId = this.$route.query.taskId;
this.getForm(businessKey,taskId);
},
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;
}
}
},
methods: {
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
if (this.reApplySelect === 1) {
this.form.variables["reApply"] = true;
this.form.comment = '调整请假申请';
}
if (this.reApplySelect === 0) {
this.form.variables["reApply"] = false;
this.form.comment = '取消请假申请';
}
updateLeave(this.form).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, taskId){
getLeave(id).then(response => {
this.form = response.data;
this.form.taskId = taskId;
this.form.variables = {};
});
const data = {
taskId : taskId,
businessKey: id,
}
taskSteps(data).then(response => {
this.handleTask = response.data;
});
},
reApplyChange(){
if (this.reApplySelect === 1) {
this.modifyShow = true;
}
if (this.reApplySelect === 0) {
this.modifyShow = false;
}
}
}
};
</script>