修改表单为外置表单

This commit is contained in:
jason
2021-10-28 00:51:57 +08:00
parent 436781507e
commit d16185f87d
27 changed files with 1328 additions and 183 deletions

View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function getStartForm(processKey) {
return request({
url: '/workflow/process/definition/getStartForm?processKey='+processKey,
method: 'get'
})
}

View File

@ -43,6 +43,14 @@ export function getLeavePage(query) {
})
}
export function createFormKeyLeave(data) {
return request({
url: '/oa/leave/form-key/create',
method: 'post',
data: data
})
}
// 导出请假申请 Excel
export function exportLeaveExcel(query) {
return request({

View File

@ -67,6 +67,14 @@ export function taskSteps(data) {
})
}
export function getTaskFormKey(data) {
return request({
url: '/workflow/task/formKey',
method: 'post',
data: data
})
}
export function processHistorySteps(id) {
return request({
url: '/workflow/task/process/history-steps?id='+id,

View File

@ -123,6 +123,76 @@ export const constantRoutes = [
meta: { title: '修改生成配置' }
}
]
},
{
path: '/flow',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'leave/apply',
component: (resolve) => require(['@/views/oa/leave/apply/index'], resolve),
name: '请假表单',
meta: { title: '请假表单', icon: 'form' }
}
]
},
{
path: '/flow',
component: Layout,
hidden: true,
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' }
}
]
}
]

View File

@ -0,0 +1,36 @@
<template>
<div class="app-container">
<el-row>
<el-button type="primary" v-on:click="leave">请假申请</el-button>
</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>

View File

@ -0,0 +1,93 @@
<template>
<div class="app-container">
<!-- 对话框(添加 / 修改) -->
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<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-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-form-item label="请假类型" prop="leaveType">
<el-select v-model="form.leaveType" placeholder="请选择">
<el-option
v-for="dict in leaveTypeDictData"
:key="parseInt(dict.value)"
:label="dict.label"
:value="parseInt(dict.value)"
/>
</el-select>
</el-form-item>
<el-form-item label="原因" prop="reason">
<el-col :span="10">
<el-input
type="textarea"
:rows="3"
v-model="form.reason"
placeholder="请输入原因" />
</el-col>
</el-form-item>
<el-form-item label="申请时间" prop="applyTime">
<el-date-picker clearable size="small" v-model="form.applyTime" type="date" value-format="timestamp" placeholder="选择申请时间" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm"> </el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { createFormKeyLeave } from "@/api/oa/leave"
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "ApplyLeave",
components: {
},
data() {
return {
// 表单参数
form: {},
// 表单校验
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)
},
leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE),
leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS)
};
},
created() {
},
methods: {
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
// if (this.form.id != null) {
// updateLeave(this.form).then(response => {
// this.msgSuccess("修改成功");
// });
// return;
// }
// 添加的提交
createFormKeyLeave(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'})
//}
})
});
});
}
}
};
</script>

View File

@ -0,0 +1,190 @@
<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: "HrApproveLeave",
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)
};
},
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.getForm(businessKey);
},
methods: {
/** 提交按钮 */
submitForm() {
this.$refs["taskForm"].validate(valid => {
if (!valid) {
return;
}
if (this.leaveApprove.approved == 1) {
this.leaveApprove.variables["hrApproved"] = true;
}
if (this.leaveApprove.approved == 0) {
this.leaveApprove.variables["hrApproved"] = 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

@ -0,0 +1,190 @@
<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

@ -0,0 +1,137 @@
<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

@ -28,9 +28,9 @@
<el-select v-model="queryParams.leaveType" placeholder="请选择请假类型">
<el-option
v-for="dict in leaveTypeDictData"
:key="parseInt(dict.value)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
:value="dict.value"
/>
</el-select>
</el-form-item>
@ -49,10 +49,6 @@
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['oa:leave:create']">新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -71,7 +67,7 @@
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="请假类型" align="center" prop="leaveType" />
<el-table-column label="请假类型" align="center" prop="leaveType" :formatter="leaveTypeFormat" />
<el-table-column label="原因" align="center" prop="reason" />
<el-table-column label="申请时间" align="center" prop="applyTime" width="180">
<template slot-scope="scope">
@ -102,9 +98,9 @@
<el-select v-model="form.leaveType" placeholder="请选择">
<el-option
v-for="dict in leaveTypeDictData"
:key="parseInt(dict.value)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
:value="dict.value"
/>
</el-select>
</el-form-item>
@ -142,12 +138,12 @@
</el-dialog>
<el-dialog :title="title" :visible.sync="dialogStepsVisible" width="600px" append-to-body>
<el-steps :active="handleTask.historyTask.length-1" finish-status="success" >
<el-step :title="item.stepName " :description="' 办理人:' + item.assignee " icon="el-icon-edit" v-for="(item) in handleTask.historyTask"></el-step>
<el-steps :active="stepActive" finish-status="success" >
<el-step :title="stepTitle(item)" :description="' 办理人:' + item.assignee " icon="el-icon-edit" v-for="(item) in handleTask.historyTask"></el-step>
</el-steps>
<br/>
<el-steps direction="vertical" :active="handleTask.historyTask.length-1">
<el-step :title="item.stepName" :description=" ' 意见:'+ item.comment" v-for="(item) in handleTask.historyTask"></el-step>
<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>
@ -199,10 +195,7 @@ export default {
// 表单参数
form: {},
handleTask: {
historyTask:[{
stepName:"步骤一"
}
],
historyTask:[],
taskVariable: "",
formObject: {}
},
@ -218,6 +211,9 @@ export default {
statusFormat(row, column) {
return getDictDataLabel(DICT_TYPE.OA_LEAVE_STATUS, row.status)
},
leaveTypeFormat(row, column) {
return getDictDataLabel(DICT_TYPE.OA_LEAVE_TYPE, row.leaveType)
},
leaveTypeDictData: getDictDatas(DICT_TYPE.OA_LEAVE_TYPE),
leaveStatusData: getDictDatas(DICT_TYPE.OA_LEAVE_STATUS)
};
@ -225,6 +221,40 @@ export default {
created() {
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;
}
}
},
methods: {
/** 查询列表 */
getList() {

View File

@ -0,0 +1,211 @@
<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>

View File

@ -47,7 +47,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.status == 1" @click="handleClaim(scope.row)">签收</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.status == 2" @click="handleLeaveApprove(scope.row)">办理</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.status == 2" @click="getTaskFormKey(scope.row)">办理</el-button>
</template>
</el-table-column>
</el-table>
@ -107,7 +107,7 @@
</template>
<script>
import { completeTask, taskSteps, deleteLeave, getLeave, getTodoTaskPage, claimTask } from "@/api/oa/todo";
import { completeTask, taskSteps, getTaskFormKey,deleteLeave, getLeave, getTodoTaskPage, claimTask } from "@/api/oa/todo";
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Todo",
@ -220,7 +220,26 @@ export default {
this.resetForm("queryForm");
this.handleQuery();
},
getTaskFormKey(row) {
const taskId = row.id;
const data = {
taskId : taskId
}
getTaskFormKey(data).then(response => {
const resp = response.data;
const path = resp.formKey;
const taskId = resp.id;
const businessKey = resp.businessKey;
const route = {
path: path,
query: {
businessKey: businessKey,
taskId:taskId
}
}
this.$router.replace(route);
});
},
handleLeaveApprove(row) {
this.reset();
const businessKey = row.businessKey;