考勤bar图显示bug以及五大申请流程开完完成
This commit is contained in:
@@ -64,6 +64,7 @@ export default {
|
|||||||
this.chart.dispose();
|
this.chart.dispose();
|
||||||
this.chart = null;
|
this.chart = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
initChart() {
|
initChart() {
|
||||||
this.chart = echarts.init(this.$el, 'macarons');
|
this.chart = echarts.init(this.$el, 'macarons');
|
||||||
@@ -73,37 +74,41 @@ export default {
|
|||||||
updateData(projectList) {
|
updateData(projectList) {
|
||||||
this.colors = projectList.map((item) => item.color);
|
this.colors = projectList.map((item) => item.color);
|
||||||
this.laborCosts = projectList.map((item) => item.laborCost);
|
this.laborCosts = projectList.map((item) => item.laborCost);
|
||||||
this.projectNames = projectList.map((item) => item.projectName.replace(/(.{5})/g, '$1\n'));
|
this.projectNames = projectList.map((item) => item.projectName.replace(/(.{5})/g, '$1\n')); // 保持换行格式
|
||||||
},
|
},
|
||||||
setOption() {
|
setOption() {
|
||||||
this.chart.setOption({
|
this.chart.setOption({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {type: 'shadow'},
|
axisPointer: { type: 'shadow' },
|
||||||
|
formatter: (params) => { // 自定义 tooltip 格式
|
||||||
|
const { dataIndex } = params[0]; // 获取鼠标悬停的索引
|
||||||
|
const projectName = this.projectNames[dataIndex]; // 获取对应的项目名称
|
||||||
|
const laborCost = this.laborCosts[dataIndex]; // 获取对应的人工成本
|
||||||
|
return `${projectName}<br/>人工成本: ${laborCost} 人天`; // 显示项目名称和人工成本
|
||||||
|
},
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
top: 10,
|
top: 10,
|
||||||
left: '2%',
|
left: '2%',
|
||||||
right: '8%', // 增加右边距以适应标签
|
right: '8%',
|
||||||
bottom: '3%',
|
bottom: '3%',
|
||||||
containLabel: true,
|
containLabel: true,
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
max: 'dataMax',
|
max: 'dataMax',
|
||||||
name: '人天', // 设置横坐标名称
|
name: '人天',
|
||||||
nameLocation: 'middle', // 横坐标名称的位置
|
nameLocation: 'middle',
|
||||||
nameGap: 25, // 横坐标名称与轴线的距离
|
nameGap: 25,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: this.projectNames,
|
data: this.projectNames,
|
||||||
inverse: true,
|
inverse: true,
|
||||||
animationDuration: 300,
|
|
||||||
animationDurationUpdate: 300,
|
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
rotate: 45, // 设置标签旋转角度,正值表示顺时针旋转
|
rotate: 45, // 设置标签旋转角度
|
||||||
interval: 0, // 强制显示所有标签
|
interval: 0, // 强制显示所有标签
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -130,5 +135,6 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
329
ruoyi-ui/src/views/oa/apply/absence/index.vue
Normal file
329
ruoyi-ui/src/views/oa/apply/absence/index.vue
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="流程分类" prop="category">
|
||||||
|
<el-select v-model="queryParams.category" clearable placeholder="请选择" size="small">
|
||||||
|
<el-option
|
||||||
|
v-for="item in categoryOptions"
|
||||||
|
:key="item.categoryId"
|
||||||
|
:label="item.categoryName"
|
||||||
|
:value="item.code">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>-->
|
||||||
|
<el-form-item label="提交时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dateRange"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<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-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="btnLoading"
|
||||||
|
@click="handleStart"
|
||||||
|
>发起请假
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ownProcessList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center"/>
|
||||||
|
<!-- <el-table-column label="流程编号" align="center" prop="procInsId" :show-overflow-tooltip="true"/>-->
|
||||||
|
<el-table-column label="请假事由" align="left" prop="procVars" :show-overflow-tooltip="true"/>
|
||||||
|
<!-- <el-table-column label="流程类别" align="center" prop="category" :formatter="categoryFormat" />-->
|
||||||
|
<el-table-column label="当前节点" width="150" align="center" prop="taskName"/>
|
||||||
|
<el-table-column label="提交时间" align="center" prop="createTime" width="160"/>
|
||||||
|
<el-table-column label="当前状态" align="center" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.wf_process_status" :value="scope.row.processStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="耗时" align="center" prop="duration" width="130"/>
|
||||||
|
<el-table-column label="操作" align="center" width="240" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-tickets"
|
||||||
|
@click="handleFlowRecord(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:query']"
|
||||||
|
>详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-if="scope.row.finishTime"
|
||||||
|
v-hasPermi="['workflow:process:remove']"
|
||||||
|
>删除
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-circle-close"
|
||||||
|
@click="handleStop(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:cancel']"
|
||||||
|
>取消
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh-right"
|
||||||
|
v-hasPermi="['workflow:process:start']"
|
||||||
|
@click="handleAgain(scope.row)"
|
||||||
|
>重新发起
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listOwnProcess, stopProcess, delProcess, listProcess} from '@/api/workflow/process';
|
||||||
|
import {listAllCategory} from '@/api/workflow/category';
|
||||||
|
import {detailProcess} from '@/api/workflow/process'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Own",
|
||||||
|
dicts: ['wf_process_status'],
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
processLoading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
categoryOptions: [],
|
||||||
|
processTotal: 0,
|
||||||
|
// 我发起的流程列表数据
|
||||||
|
ownProcessList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
process: {},
|
||||||
|
src: "",
|
||||||
|
definitionList: [],
|
||||||
|
// 日期范围
|
||||||
|
dateRange: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
processKey: undefined,
|
||||||
|
processName: undefined,
|
||||||
|
category: "absence"
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {},
|
||||||
|
btnLoading:true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCategoryList();
|
||||||
|
},
|
||||||
|
beforeRouteEnter(to, from, next) {
|
||||||
|
next(vm => {
|
||||||
|
vm.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
handleStart() {
|
||||||
|
const row = this.process
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deploymentId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.definitionId,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 查询流程分类列表 */
|
||||||
|
getCategoryList() {
|
||||||
|
listAllCategory().then(response => this.categoryOptions = response.data)
|
||||||
|
},
|
||||||
|
/** 查询流程定义列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.btnLoading = true;
|
||||||
|
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||||
|
listProcess(this.queryParams).then(response => {
|
||||||
|
this.process = response.rows[response.rows.length - 1];
|
||||||
|
this.btnLoading = false;
|
||||||
|
})
|
||||||
|
this.ownProcessList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**流程标题搜索**/
|
||||||
|
searchList(list, str) {
|
||||||
|
let arr = [];
|
||||||
|
list.forEach((item) => {
|
||||||
|
if (item.procVars.description.indexOf(str) > -1) {
|
||||||
|
arr.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
|
||||||
|
//对象数组排序(文本类)
|
||||||
|
/* compare(propertyName, order) {
|
||||||
|
return function (object1, object2) {
|
||||||
|
var value1 = object1[propertyName];
|
||||||
|
var value2 = object2[propertyName];
|
||||||
|
if (order == 0) {
|
||||||
|
if (value2 < value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 > value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (order == 1) {
|
||||||
|
if (value2 > value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 < value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},*/
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
name: null,
|
||||||
|
category: null,
|
||||||
|
key: null,
|
||||||
|
tenantId: null,
|
||||||
|
deployTime: null,
|
||||||
|
derivedFrom: null,
|
||||||
|
derivedFromRoot: null,
|
||||||
|
parentDeploymentId: null,
|
||||||
|
engineVersion: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.dateRange = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.procInsId);
|
||||||
|
this.single = selection.length !== 1;
|
||||||
|
this.multiple = !selection.length;
|
||||||
|
},
|
||||||
|
handleAgain(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deployId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.procDefId,
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// console.log(row);
|
||||||
|
},
|
||||||
|
/** 取消流程申请 */
|
||||||
|
handleStop(row) {
|
||||||
|
const params = {
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
stopProcess(params).then(res => {
|
||||||
|
this.$modal.msgSuccess(res.msg);
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 流程流转记录 */
|
||||||
|
handleFlowRecord(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/detail/' + row.procInsId,
|
||||||
|
query: {
|
||||||
|
processed: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.procInsId || this.ids;
|
||||||
|
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(function () {
|
||||||
|
return delProcess(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('workflow/process/ownExport', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `wf_own_process_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
categoryFormat(row, column) {
|
||||||
|
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
329
ruoyi-ui/src/views/oa/apply/entertain/index.vue
Normal file
329
ruoyi-ui/src/views/oa/apply/entertain/index.vue
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="流程分类" prop="category">
|
||||||
|
<el-select v-model="queryParams.category" clearable placeholder="请选择" size="small">
|
||||||
|
<el-option
|
||||||
|
v-for="item in categoryOptions"
|
||||||
|
:key="item.categoryId"
|
||||||
|
:label="item.categoryName"
|
||||||
|
:value="item.code">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>-->
|
||||||
|
<el-form-item label="提交时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dateRange"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<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-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="btnLoading"
|
||||||
|
@click="handleStart"
|
||||||
|
>发起招待申请
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ownProcessList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center"/>
|
||||||
|
<!-- <el-table-column label="流程编号" align="center" prop="procInsId" :show-overflow-tooltip="true"/>-->
|
||||||
|
<el-table-column label="招待事由" align="left" prop="procVars" :show-overflow-tooltip="true"/>
|
||||||
|
<!-- <el-table-column label="流程类别" align="center" prop="category" :formatter="categoryFormat" />-->
|
||||||
|
<el-table-column label="当前节点" width="150" align="center" prop="taskName"/>
|
||||||
|
<el-table-column label="提交时间" align="center" prop="createTime" width="160"/>
|
||||||
|
<el-table-column label="当前状态" align="center" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.wf_process_status" :value="scope.row.processStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="耗时" align="center" prop="duration" width="130"/>
|
||||||
|
<el-table-column label="操作" align="center" width="240" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-tickets"
|
||||||
|
@click="handleFlowRecord(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:query']"
|
||||||
|
>详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-if="scope.row.finishTime"
|
||||||
|
v-hasPermi="['workflow:process:remove']"
|
||||||
|
>删除
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-circle-close"
|
||||||
|
@click="handleStop(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:cancel']"
|
||||||
|
>取消
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh-right"
|
||||||
|
v-hasPermi="['workflow:process:start']"
|
||||||
|
@click="handleAgain(scope.row)"
|
||||||
|
>重新发起
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listOwnProcess, stopProcess, delProcess, listProcess} from '@/api/workflow/process';
|
||||||
|
import {listAllCategory} from '@/api/workflow/category';
|
||||||
|
import {detailProcess} from '@/api/workflow/process'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Own",
|
||||||
|
dicts: ['wf_process_status'],
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
processLoading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
categoryOptions: [],
|
||||||
|
processTotal: 0,
|
||||||
|
// 我发起的流程列表数据
|
||||||
|
ownProcessList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
process: {},
|
||||||
|
src: "",
|
||||||
|
definitionList: [],
|
||||||
|
// 日期范围
|
||||||
|
dateRange: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
processKey: undefined,
|
||||||
|
processName: undefined,
|
||||||
|
category: "entertain"
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {},
|
||||||
|
btnLoading:true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCategoryList();
|
||||||
|
},
|
||||||
|
beforeRouteEnter(to, from, next) {
|
||||||
|
next(vm => {
|
||||||
|
vm.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
handleStart() {
|
||||||
|
const row = this.process
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deploymentId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.definitionId,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 查询流程分类列表 */
|
||||||
|
getCategoryList() {
|
||||||
|
listAllCategory().then(response => this.categoryOptions = response.data)
|
||||||
|
},
|
||||||
|
/** 查询流程定义列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.btnLoading = true;
|
||||||
|
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||||
|
listProcess(this.queryParams).then(response => {
|
||||||
|
this.process = response.rows[response.rows.length - 1];
|
||||||
|
this.btnLoading = false;
|
||||||
|
})
|
||||||
|
this.ownProcessList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**流程标题搜索**/
|
||||||
|
searchList(list, str) {
|
||||||
|
let arr = [];
|
||||||
|
list.forEach((item) => {
|
||||||
|
if (item.procVars.description.indexOf(str) > -1) {
|
||||||
|
arr.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
|
||||||
|
//对象数组排序(文本类)
|
||||||
|
/* compare(propertyName, order) {
|
||||||
|
return function (object1, object2) {
|
||||||
|
var value1 = object1[propertyName];
|
||||||
|
var value2 = object2[propertyName];
|
||||||
|
if (order == 0) {
|
||||||
|
if (value2 < value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 > value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (order == 1) {
|
||||||
|
if (value2 > value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 < value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},*/
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
name: null,
|
||||||
|
category: null,
|
||||||
|
key: null,
|
||||||
|
tenantId: null,
|
||||||
|
deployTime: null,
|
||||||
|
derivedFrom: null,
|
||||||
|
derivedFromRoot: null,
|
||||||
|
parentDeploymentId: null,
|
||||||
|
engineVersion: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.dateRange = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.procInsId);
|
||||||
|
this.single = selection.length !== 1;
|
||||||
|
this.multiple = !selection.length;
|
||||||
|
},
|
||||||
|
handleAgain(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deployId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.procDefId,
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// console.log(row);
|
||||||
|
},
|
||||||
|
/** 取消流程申请 */
|
||||||
|
handleStop(row) {
|
||||||
|
const params = {
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
stopProcess(params).then(res => {
|
||||||
|
this.$modal.msgSuccess(res.msg);
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 流程流转记录 */
|
||||||
|
handleFlowRecord(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/detail/' + row.procInsId,
|
||||||
|
query: {
|
||||||
|
processed: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.procInsId || this.ids;
|
||||||
|
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(function () {
|
||||||
|
return delProcess(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('workflow/process/ownExport', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `wf_own_process_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
categoryFormat(row, column) {
|
||||||
|
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
329
ruoyi-ui/src/views/oa/apply/other/index.vue
Normal file
329
ruoyi-ui/src/views/oa/apply/other/index.vue
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="流程分类" prop="category">
|
||||||
|
<el-select v-model="queryParams.category" clearable placeholder="请选择" size="small">
|
||||||
|
<el-option
|
||||||
|
v-for="item in categoryOptions"
|
||||||
|
:key="item.categoryId"
|
||||||
|
:label="item.categoryName"
|
||||||
|
:value="item.code">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>-->
|
||||||
|
<el-form-item label="提交时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dateRange"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<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-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="btnLoading"
|
||||||
|
@click="handleStart"
|
||||||
|
>发起申请
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ownProcessList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center"/>
|
||||||
|
<!-- <el-table-column label="流程编号" align="center" prop="procInsId" :show-overflow-tooltip="true"/>-->
|
||||||
|
<el-table-column label="申请事由" align="left" prop="procVars" :show-overflow-tooltip="true"/>
|
||||||
|
<!-- <el-table-column label="流程类别" align="center" prop="category" :formatter="categoryFormat" />-->
|
||||||
|
<el-table-column label="当前节点" width="150" align="center" prop="taskName"/>
|
||||||
|
<el-table-column label="提交时间" align="center" prop="createTime" width="160"/>
|
||||||
|
<el-table-column label="当前状态" align="center" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.wf_process_status" :value="scope.row.processStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="耗时" align="center" prop="duration" width="130"/>
|
||||||
|
<el-table-column label="操作" align="center" width="240" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-tickets"
|
||||||
|
@click="handleFlowRecord(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:query']"
|
||||||
|
>详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-if="scope.row.finishTime"
|
||||||
|
v-hasPermi="['workflow:process:remove']"
|
||||||
|
>删除
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-circle-close"
|
||||||
|
@click="handleStop(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:cancel']"
|
||||||
|
>取消
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh-right"
|
||||||
|
v-hasPermi="['workflow:process:start']"
|
||||||
|
@click="handleAgain(scope.row)"
|
||||||
|
>重新发起
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listOwnProcess, stopProcess, delProcess, listProcess} from '@/api/workflow/process';
|
||||||
|
import {listAllCategory} from '@/api/workflow/category';
|
||||||
|
import {detailProcess} from '@/api/workflow/process'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Own",
|
||||||
|
dicts: ['wf_process_status'],
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
processLoading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
categoryOptions: [],
|
||||||
|
processTotal: 0,
|
||||||
|
// 我发起的流程列表数据
|
||||||
|
ownProcessList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
process: {},
|
||||||
|
src: "",
|
||||||
|
definitionList: [],
|
||||||
|
// 日期范围
|
||||||
|
dateRange: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
processKey: undefined,
|
||||||
|
processName: undefined,
|
||||||
|
category: "other"
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {},
|
||||||
|
btnLoading:true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCategoryList();
|
||||||
|
},
|
||||||
|
beforeRouteEnter(to, from, next) {
|
||||||
|
next(vm => {
|
||||||
|
vm.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
handleStart() {
|
||||||
|
const row = this.process
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deploymentId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.definitionId,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 查询流程分类列表 */
|
||||||
|
getCategoryList() {
|
||||||
|
listAllCategory().then(response => this.categoryOptions = response.data)
|
||||||
|
},
|
||||||
|
/** 查询流程定义列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.btnLoading = true;
|
||||||
|
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||||
|
listProcess(this.queryParams).then(response => {
|
||||||
|
this.process = response.rows[response.rows.length - 1];
|
||||||
|
this.btnLoading = false;
|
||||||
|
})
|
||||||
|
this.ownProcessList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**流程标题搜索**/
|
||||||
|
searchList(list, str) {
|
||||||
|
let arr = [];
|
||||||
|
list.forEach((item) => {
|
||||||
|
if (item.procVars.description.indexOf(str) > -1) {
|
||||||
|
arr.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
|
||||||
|
//对象数组排序(文本类)
|
||||||
|
/* compare(propertyName, order) {
|
||||||
|
return function (object1, object2) {
|
||||||
|
var value1 = object1[propertyName];
|
||||||
|
var value2 = object2[propertyName];
|
||||||
|
if (order == 0) {
|
||||||
|
if (value2 < value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 > value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (order == 1) {
|
||||||
|
if (value2 > value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 < value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},*/
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
name: null,
|
||||||
|
category: null,
|
||||||
|
key: null,
|
||||||
|
tenantId: null,
|
||||||
|
deployTime: null,
|
||||||
|
derivedFrom: null,
|
||||||
|
derivedFromRoot: null,
|
||||||
|
parentDeploymentId: null,
|
||||||
|
engineVersion: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.dateRange = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.procInsId);
|
||||||
|
this.single = selection.length !== 1;
|
||||||
|
this.multiple = !selection.length;
|
||||||
|
},
|
||||||
|
handleAgain(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deployId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.procDefId,
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// console.log(row);
|
||||||
|
},
|
||||||
|
/** 取消流程申请 */
|
||||||
|
handleStop(row) {
|
||||||
|
const params = {
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
stopProcess(params).then(res => {
|
||||||
|
this.$modal.msgSuccess(res.msg);
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 流程流转记录 */
|
||||||
|
handleFlowRecord(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/detail/' + row.procInsId,
|
||||||
|
query: {
|
||||||
|
processed: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.procInsId || this.ids;
|
||||||
|
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(function () {
|
||||||
|
return delProcess(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('workflow/process/ownExport', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `wf_own_process_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
categoryFormat(row, column) {
|
||||||
|
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
329
ruoyi-ui/src/views/oa/apply/seal/index.vue
Normal file
329
ruoyi-ui/src/views/oa/apply/seal/index.vue
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="流程分类" prop="category">
|
||||||
|
<el-select v-model="queryParams.category" clearable placeholder="请选择" size="small">
|
||||||
|
<el-option
|
||||||
|
v-for="item in categoryOptions"
|
||||||
|
:key="item.categoryId"
|
||||||
|
:label="item.categoryName"
|
||||||
|
:value="item.code">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>-->
|
||||||
|
<el-form-item label="提交时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dateRange"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<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-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="btnLoading"
|
||||||
|
@click="handleStart"
|
||||||
|
>发起用印申请
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ownProcessList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center"/>
|
||||||
|
<!-- <el-table-column label="流程编号" align="center" prop="procInsId" :show-overflow-tooltip="true"/>-->
|
||||||
|
<el-table-column label="用印事由" align="left" prop="procVars" :show-overflow-tooltip="true"/>
|
||||||
|
<!-- <el-table-column label="流程类别" align="center" prop="category" :formatter="categoryFormat" />-->
|
||||||
|
<el-table-column label="当前节点" width="150" align="center" prop="taskName"/>
|
||||||
|
<el-table-column label="提交时间" align="center" prop="createTime" width="160"/>
|
||||||
|
<el-table-column label="当前状态" align="center" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.wf_process_status" :value="scope.row.processStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="耗时" align="center" prop="duration" width="130"/>
|
||||||
|
<el-table-column label="操作" align="center" width="240" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-tickets"
|
||||||
|
@click="handleFlowRecord(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:query']"
|
||||||
|
>详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-if="scope.row.finishTime"
|
||||||
|
v-hasPermi="['workflow:process:remove']"
|
||||||
|
>删除
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-circle-close"
|
||||||
|
@click="handleStop(scope.row)"
|
||||||
|
v-hasPermi="['workflow:process:cancel']"
|
||||||
|
>取消
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh-right"
|
||||||
|
v-hasPermi="['workflow:process:start']"
|
||||||
|
@click="handleAgain(scope.row)"
|
||||||
|
>重新发起
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listOwnProcess, stopProcess, delProcess, listProcess} from '@/api/workflow/process';
|
||||||
|
import {listAllCategory} from '@/api/workflow/category';
|
||||||
|
import {detailProcess} from '@/api/workflow/process'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Own",
|
||||||
|
dicts: ['wf_process_status'],
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
processLoading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
categoryOptions: [],
|
||||||
|
processTotal: 0,
|
||||||
|
// 我发起的流程列表数据
|
||||||
|
ownProcessList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
process: {},
|
||||||
|
src: "",
|
||||||
|
definitionList: [],
|
||||||
|
// 日期范围
|
||||||
|
dateRange: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
processKey: undefined,
|
||||||
|
processName: undefined,
|
||||||
|
category: "seal"
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {},
|
||||||
|
btnLoading:true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCategoryList();
|
||||||
|
},
|
||||||
|
beforeRouteEnter(to, from, next) {
|
||||||
|
next(vm => {
|
||||||
|
vm.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
handleStart() {
|
||||||
|
const row = this.process
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deploymentId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.definitionId,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 查询流程分类列表 */
|
||||||
|
getCategoryList() {
|
||||||
|
listAllCategory().then(response => this.categoryOptions = response.data)
|
||||||
|
},
|
||||||
|
/** 查询流程定义列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.btnLoading = true;
|
||||||
|
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||||
|
listProcess(this.queryParams).then(response => {
|
||||||
|
this.process = response.rows[response.rows.length - 1];
|
||||||
|
this.btnLoading = false;
|
||||||
|
})
|
||||||
|
this.ownProcessList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**流程标题搜索**/
|
||||||
|
searchList(list, str) {
|
||||||
|
let arr = [];
|
||||||
|
list.forEach((item) => {
|
||||||
|
if (item.procVars.description.indexOf(str) > -1) {
|
||||||
|
arr.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
|
||||||
|
//对象数组排序(文本类)
|
||||||
|
/* compare(propertyName, order) {
|
||||||
|
return function (object1, object2) {
|
||||||
|
var value1 = object1[propertyName];
|
||||||
|
var value2 = object2[propertyName];
|
||||||
|
if (order == 0) {
|
||||||
|
if (value2 < value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 > value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (order == 1) {
|
||||||
|
if (value2 > value1) {
|
||||||
|
return -1;
|
||||||
|
} else if (value2 < value1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},*/
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
name: null,
|
||||||
|
category: null,
|
||||||
|
key: null,
|
||||||
|
tenantId: null,
|
||||||
|
deployTime: null,
|
||||||
|
derivedFrom: null,
|
||||||
|
derivedFromRoot: null,
|
||||||
|
parentDeploymentId: null,
|
||||||
|
engineVersion: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.dateRange = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.procInsId);
|
||||||
|
this.single = selection.length !== 1;
|
||||||
|
this.multiple = !selection.length;
|
||||||
|
},
|
||||||
|
handleAgain(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/start/' + row.deployId,
|
||||||
|
query: {
|
||||||
|
definitionId: row.procDefId,
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// console.log(row);
|
||||||
|
},
|
||||||
|
/** 取消流程申请 */
|
||||||
|
handleStop(row) {
|
||||||
|
const params = {
|
||||||
|
procInsId: row.procInsId
|
||||||
|
}
|
||||||
|
stopProcess(params).then(res => {
|
||||||
|
this.$modal.msgSuccess(res.msg);
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 流程流转记录 */
|
||||||
|
handleFlowRecord(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/workflow/process/detail/' + row.procInsId,
|
||||||
|
query: {
|
||||||
|
processed: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.procInsId || this.ids;
|
||||||
|
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(function () {
|
||||||
|
return delProcess(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('workflow/process/ownExport', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `wf_own_process_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
categoryFormat(row, column) {
|
||||||
|
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -161,7 +161,8 @@
|
|||||||
<el-button @click="calcWork"
|
<el-button @click="calcWork"
|
||||||
element-loading-text="正在计算,请稍等"
|
element-loading-text="正在计算,请稍等"
|
||||||
v-loading.fullscreen.lock="fullscreenLoading"
|
v-loading.fullscreen.lock="fullscreenLoading"
|
||||||
>计算</el-button>
|
>计算
|
||||||
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
@@ -231,7 +232,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 月度工作情况表格 -->
|
<!-- 月度工作情况表格 -->
|
||||||
<h2>{{ date.getMonth()+1 }} 月度工作签到情况</h2>
|
<h2>{{ date.getMonth() + 1 }} 月度工作签到情况</h2>
|
||||||
|
|
||||||
|
|
||||||
<el-descriptions class="margin-top" title="报告详情" :column="3" :size="size" border>
|
<el-descriptions class="margin-top" title="报告详情" :column="3" :size="size" border>
|
||||||
@@ -389,7 +390,7 @@ export default {
|
|||||||
calcResultAttendances: [],
|
calcResultAttendances: [],
|
||||||
calcResultProject: {},
|
calcResultProject: {},
|
||||||
projects: [],
|
projects: [],
|
||||||
fullscreenLoading:false,
|
fullscreenLoading: false,
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -470,7 +471,7 @@ export default {
|
|||||||
projectId: 0,
|
projectId: 0,
|
||||||
userId: this.selectUser.userId,
|
userId: this.selectUser.userId,
|
||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
addOaAttendance(this.form).then(res => {
|
addOaAttendance(this.form).then(res => {
|
||||||
this.getList()
|
this.getList()
|
||||||
@@ -481,7 +482,7 @@ export default {
|
|||||||
this.form = {
|
this.form = {
|
||||||
projectId: 0,
|
projectId: 0,
|
||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
// 集体赋予状态
|
// 集体赋予状态
|
||||||
addBatchOaAttendance(this.form).then(res => {
|
addBatchOaAttendance(this.form).then(res => {
|
||||||
@@ -496,7 +497,7 @@ export default {
|
|||||||
projectId: 1,
|
projectId: 1,
|
||||||
userId: this.selectUser.userId,
|
userId: this.selectUser.userId,
|
||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
addOaAttendance(this.form).then(res => {
|
addOaAttendance(this.form).then(res => {
|
||||||
this.getList()
|
this.getList()
|
||||||
@@ -507,7 +508,7 @@ export default {
|
|||||||
this.form = {
|
this.form = {
|
||||||
projectId: 1,
|
projectId: 1,
|
||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
// 集体赋予状态
|
// 集体赋予状态
|
||||||
addBatchOaAttendance(this.form).then(res => {
|
addBatchOaAttendance(this.form).then(res => {
|
||||||
@@ -609,7 +610,7 @@ export default {
|
|||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined,
|
dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined,
|
||||||
hour: this.timeFlag === 1 ? this.form.hour : undefined,
|
hour: this.timeFlag === 1 ? this.form.hour : undefined,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
addOaAttendance(this.form).then(res => {
|
addOaAttendance(this.form).then(res => {
|
||||||
this.selectUser = this.selectArrayIndex >= this.userList.length - 1 ? this.selectUser : this.userList[this.selectArrayIndex + 1]
|
this.selectUser = this.selectArrayIndex >= this.userList.length - 1 ? this.selectUser : this.userList[this.selectArrayIndex + 1]
|
||||||
@@ -624,7 +625,7 @@ export default {
|
|||||||
attendanceDay: this.selectIndex,
|
attendanceDay: this.selectIndex,
|
||||||
dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined,
|
dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined,
|
||||||
hour: this.timeFlag === 1 ? this.form.hour : undefined,
|
hour: this.timeFlag === 1 ? this.form.hour : undefined,
|
||||||
selectTime:this.queryParams.selectTime
|
selectTime: this.queryParams.selectTime
|
||||||
}
|
}
|
||||||
// 集体赋予状态
|
// 集体赋予状态
|
||||||
addBatchOaAttendance(this.form).then(res => {
|
addBatchOaAttendance(this.form).then(res => {
|
||||||
|
|||||||
@@ -18,6 +18,28 @@
|
|||||||
<el-form-item label="审批意见" prop="comment">
|
<el-form-item label="审批意见" prop="comment">
|
||||||
<el-input type="textarea" :rows="5" v-model="taskForm.comment" placeholder="请输入 审批意见" />
|
<el-input type="textarea" :rows="5" v-model="taskForm.comment" placeholder="请输入 审批意见" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="抄送人" prop="copyUserIds">
|
||||||
|
<el-tag
|
||||||
|
:key="index"
|
||||||
|
v-for="(item, index) in copyUser"
|
||||||
|
closable
|
||||||
|
:disable-transitions="false"
|
||||||
|
@close="handleClose('copy', item)">
|
||||||
|
{{ item.nickName }}
|
||||||
|
</el-tag>
|
||||||
|
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle @click="onSelectCopyUsers" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="指定审批人" prop="copyUserIds">
|
||||||
|
<el-tag
|
||||||
|
:key="index"
|
||||||
|
v-for="(item, index) in nextUser"
|
||||||
|
closable
|
||||||
|
:disable-transitions="false"
|
||||||
|
@close="handleClose('next', item)">
|
||||||
|
{{ item.nickName }}
|
||||||
|
</el-tag>
|
||||||
|
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle @click="onSelectNextUsers" />
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -251,13 +273,7 @@
|
|||||||
/>
|
/>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
||||||
|
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,34 @@
|
|||||||
<el-col :span="20" :offset="2">
|
<el-col :span="20" :offset="2">
|
||||||
<el-form ref="taskForm" :model="taskForm" :rules="rules" label-width="120px">
|
<el-form ref="taskForm" :model="taskForm" :rules="rules" label-width="120px">
|
||||||
<el-form-item label="审批意见" prop="comment">
|
<el-form-item label="审批意见" prop="comment">
|
||||||
<el-input type="textarea" :rows="5" v-model="taskForm.comment" placeholder="请输入 审批意见" />
|
<el-input type="textarea" :rows="5" v-model="taskForm.comment" placeholder="请输入 审批意见"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="抄送人" prop="copyUserIds">
|
||||||
|
<el-tag
|
||||||
|
:key="index"
|
||||||
|
v-for="(item, index) in copyUser"
|
||||||
|
closable
|
||||||
|
:disable-transitions="false"
|
||||||
|
@close="handleClose('copy', item)">
|
||||||
|
{{ item.nickName }}
|
||||||
|
</el-tag>
|
||||||
|
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle @click="onSelectCopyUsers" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="指定审批人" prop="copyUserIds">
|
||||||
|
<el-tag
|
||||||
|
:key="index"
|
||||||
|
v-for="(item, index) in nextUser"
|
||||||
|
closable
|
||||||
|
:disable-transitions="false"
|
||||||
|
@close="handleClose('next', item)">
|
||||||
|
{{ item.nickName }}
|
||||||
|
</el-tag>
|
||||||
|
<el-button class="button-new-tag" type="primary" icon="el-icon-plus" size="mini" circle @click="onSelectNextUsers" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="10" type="flex" justify="center" >
|
<el-row :gutter="10" type="flex" justify="center">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button icon="el-icon-circle-check" type="success" @click="handleComplete">通过</el-button>
|
<el-button icon="el-icon-circle-check" type="success" @click="handleComplete">通过</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -42,44 +64,47 @@
|
|||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
||||||
<el-tab-pane label="表单信息" name="form">
|
<el-tab-pane label="表单信息" name="form">
|
||||||
<div v-loading="loading">
|
<div v-loading="loading">
|
||||||
<el-card class="box-card" shadow="never" v-for="(formInfo, index) in processFormList" :key="index">
|
<el-card class="box-card" shadow="never" v-for="(formInfo, index) in processFormList" :key="index">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>{{ formInfo.title }}</span>
|
<span>{{ formInfo.title }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!--流程处理表单模块-->
|
<!--流程处理表单模块-->
|
||||||
<el-col :span="20" :offset="2">
|
<el-col :span="20" :offset="2">
|
||||||
<parser :form-conf="formInfo" v-if="formType===''"/>
|
<claim-detail :form="form" :detailList="detailList" v-if="formType ==='claim'"></claim-detail>
|
||||||
<claim-detail :form="form" :detailList="detailList" v-if="formType ==='claim'"></claim-detail>
|
<parser :form-conf="formInfo" v-else/>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane >
|
</el-tab-pane>
|
||||||
|
|
||||||
<el-tab-pane label="流转记录" name="record">
|
<el-tab-pane label="流转记录" name="record">
|
||||||
|
|
||||||
<div class="title-record">流程标题:{{processTitleValue}}</div>
|
<div class="title-record">流程标题:{{ processTitleValue }}</div>
|
||||||
|
|
||||||
<el-card class="box-card" shadow="never">
|
<el-card class="box-card" shadow="never">
|
||||||
<el-col :span="20" :offset="2">
|
<el-col :span="20" :offset="2">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<el-timeline>
|
<el-timeline>
|
||||||
<el-timeline-item v-for="(item,index) in historyProcNodeList" :key="index" :icon="setIcon(item.endTime)" :color="setColor(item.endTime)">
|
<el-timeline-item v-for="(item,index) in historyProcNodeList" :key="index" :icon="setIcon(item.endTime)"
|
||||||
|
:color="setColor(item.endTime)">
|
||||||
<p style="font-weight: 700">{{ item.activityName }}</p>
|
<p style="font-weight: 700">{{ item.activityName }}</p>
|
||||||
<el-card v-if="item.activityType === 'startEvent'" class="box-card" shadow="hover">
|
<el-card v-if="item.activityType === 'startEvent'" class="box-card" shadow="hover">
|
||||||
{{ item.assigneeName }} 在 {{ item.createTime }} 发起流程
|
{{ item.assigneeName }} 在 {{ item.createTime }} 发起流程
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card v-if="item.activityType === 'userTask'" class="box-card" shadow="hover">
|
<el-card v-if="item.activityType === 'userTask'" class="box-card" shadow="hover">
|
||||||
<el-descriptions :column="5" :labelStyle="{'font-weight': 'bold'}">
|
<el-descriptions :column="5" :labelStyle="{'font-weight': 'bold'}">
|
||||||
<el-descriptions-item label="实际办理">{{ item.assigneeName || '-'}}</el-descriptions-item>
|
<el-descriptions-item label="实际办理">{{ item.assigneeName || '-' }}</el-descriptions-item>
|
||||||
<!-- <el-descriptions-item label="候选办理">{{ item.candidate || '-'}}</el-descriptions-item>-->
|
<!-- <el-descriptions-item label="候选办理">{{ item.candidate || '-'}}</el-descriptions-item>-->
|
||||||
<el-descriptions-item label="接收时间">{{ item.createTime || '-'}}</el-descriptions-item>
|
<el-descriptions-item label="接收时间">{{ item.createTime || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="办结时间">{{ item.endTime || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="办结时间">{{ item.endTime || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="耗时">{{ item.duration || '-'}}</el-descriptions-item>
|
<el-descriptions-item label="耗时">{{ item.duration || '-' }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<div v-if="item.commentList && item.commentList.length > 0">
|
<div v-if="item.commentList && item.commentList.length > 0">
|
||||||
<el-divider content-position="left">
|
<el-divider content-position="left">
|
||||||
<el-tag :type="approveTypeTag(item.commentList[0].type)" size="mini">{{ commentType(item.commentList[0].type) }}</el-tag>
|
<el-tag :type="approveTypeTag(item.commentList[0].type)" size="mini">
|
||||||
|
{{ commentType(item.commentList[0].type) }}
|
||||||
|
</el-tag>
|
||||||
<el-tag type="info" effect="plain" size="mini">{{ item.commentList[0].time }}</el-tag>
|
<el-tag type="info" effect="plain" size="mini">{{ item.commentList[0].time }}</el-tag>
|
||||||
</el-divider>
|
</el-divider>
|
||||||
<span>{{ item.commentList[0].fullMessage }}</span>
|
<span>{{ item.commentList[0].fullMessage }}</span>
|
||||||
@@ -108,14 +133,15 @@
|
|||||||
|
|
||||||
<!--退回流程-->
|
<!--退回流程-->
|
||||||
<el-dialog :title="returnTitle" :visible.sync="returnOpen" width="40%" append-to-body>
|
<el-dialog :title="returnTitle" :visible.sync="returnOpen" width="40%" append-to-body>
|
||||||
<el-form ref="taskForm" :model="taskForm" label-width="80px" >
|
<el-form ref="taskForm" :model="taskForm" label-width="80px">
|
||||||
<el-form-item label="退回节点" prop="targetKey">
|
<el-form-item label="退回节点" prop="targetKey">
|
||||||
<el-radio-group v-model="taskForm.targetKey">
|
<el-radio-group v-model="taskForm.targetKey">
|
||||||
<el-radio-button
|
<el-radio-button
|
||||||
v-for="item in returnTaskList"
|
v-for="item in returnTaskList"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:label="item.id"
|
:label="item.id"
|
||||||
>{{item.name}}</el-radio-button>
|
>{{ item.name }}
|
||||||
|
</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -134,7 +160,8 @@
|
|||||||
<span>部门列表</span>
|
<span>部门列表</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search"/>
|
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small"
|
||||||
|
prefix-icon="el-icon-search"/>
|
||||||
<el-tree
|
<el-tree
|
||||||
:data="deptOptions"
|
:data="deptOptions"
|
||||||
:props="deptProps"
|
:props="deptProps"
|
||||||
@@ -156,15 +183,15 @@
|
|||||||
highlight-current-row
|
highlight-current-row
|
||||||
@current-change="changeCurrentUser"
|
@current-change="changeCurrentUser"
|
||||||
@selection-change="handleSelectionChange">
|
@selection-change="handleSelectionChange">
|
||||||
<el-table-column v-if="userData.type === 'copy' || userData.type === 'next'" width="55" type="selection" />
|
<el-table-column v-if="userData.type === 'copy' || userData.type === 'next'" width="55" type="selection"/>
|
||||||
<el-table-column v-else width="30">
|
<el-table-column v-else width="30">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-radio :label="scope.row.userId" v-model="currentUserId">{{''}}</el-radio>
|
<el-radio :label="scope.row.userId" v-model="currentUserId">{{ '' }}</el-radio>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="用户名" align="center" prop="nickName" />
|
<el-table-column label="用户名" align="center" prop="nickName"/>
|
||||||
<el-table-column label="手机" align="center" prop="phonenumber" />
|
<el-table-column label="手机" align="center" prop="phonenumber"/>
|
||||||
<el-table-column label="部门" align="center" prop="dept.deptName" />
|
<el-table-column label="部门" align="center" prop="dept.deptName"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
:total="total"
|
:total="total"
|
||||||
@@ -183,10 +210,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { detailProcess } from '@/api/workflow/process'
|
import {detailProcess} from '@/api/workflow/process'
|
||||||
import Parser from '@/utils/generator/parser'
|
import Parser from '@/utils/generator/parser'
|
||||||
import { complete, delegate, transfer, rejectTask, returnList, returnTask } from '@/api/workflow/task'
|
import {complete, delegate, transfer, rejectTask, returnList, returnTask} from '@/api/workflow/task'
|
||||||
import { selectUser, deptTreeSelect } from '@/api/system/user'
|
import {selectUser, deptTreeSelect} from '@/api/system/user'
|
||||||
import ProcessViewer from '@/components/ProcessViewer'
|
import ProcessViewer from '@/components/ProcessViewer'
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
@@ -206,26 +233,40 @@ export default {
|
|||||||
commentType() {
|
commentType() {
|
||||||
return val => {
|
return val => {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case '1': return '通过'
|
case '1':
|
||||||
case '2': return '退回'
|
return '通过'
|
||||||
case '3': return '驳回'
|
case '2':
|
||||||
case '4': return '委派'
|
return '退回'
|
||||||
case '5': return '转办'
|
case '3':
|
||||||
case '6': return '终止'
|
return '驳回'
|
||||||
case '7': return '撤回'
|
case '4':
|
||||||
|
return '委派'
|
||||||
|
case '5':
|
||||||
|
return '转办'
|
||||||
|
case '6':
|
||||||
|
return '终止'
|
||||||
|
case '7':
|
||||||
|
return '撤回'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
approveTypeTag() {
|
approveTypeTag() {
|
||||||
return val => {
|
return val => {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case '1': return 'success'
|
case '1':
|
||||||
case '2': return 'warning'
|
return 'success'
|
||||||
case '3': return 'danger'
|
case '2':
|
||||||
case '4': return 'primary'
|
return 'warning'
|
||||||
case '5': return 'success'
|
case '3':
|
||||||
case '6': return 'danger'
|
return 'danger'
|
||||||
case '7': return 'info'
|
case '4':
|
||||||
|
return 'primary'
|
||||||
|
case '5':
|
||||||
|
return 'success'
|
||||||
|
case '6':
|
||||||
|
return 'danger'
|
||||||
|
case '7':
|
||||||
|
return 'info'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,16 +304,16 @@ export default {
|
|||||||
total: 0,
|
total: 0,
|
||||||
// 遮罩层
|
// 遮罩层
|
||||||
loading: true,
|
loading: true,
|
||||||
taskForm:{
|
taskForm: {
|
||||||
comment:"", // 意见内容
|
comment: "", // 意见内容
|
||||||
procInsId: "", // 流程实例编号
|
procInsId: "", // 流程实例编号
|
||||||
taskId: "" ,// 流程任务编号
|
taskId: "",// 流程任务编号
|
||||||
copyUserIds: "", // 抄送人Id
|
copyUserIds: "", // 抄送人Id
|
||||||
vars: "",
|
vars: "",
|
||||||
targetKey:""
|
targetKey: ""
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
comment: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
|
comment: [{required: true, message: '请输入审批意见', trigger: 'blur'}],
|
||||||
},
|
},
|
||||||
currentUserId: null,
|
currentUserId: null,
|
||||||
variables: [], // 流程变量数据
|
variables: [], // 流程变量数据
|
||||||
@@ -297,9 +338,9 @@ export default {
|
|||||||
userMultipleSelection: [],
|
userMultipleSelection: [],
|
||||||
userDialogTitle: '',
|
userDialogTitle: '',
|
||||||
userOpen: false,
|
userOpen: false,
|
||||||
formType:"",
|
formType: "",
|
||||||
form:{},
|
form: {},
|
||||||
detailList:[]
|
detailList: []
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -307,16 +348,16 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initData() {
|
initData() {
|
||||||
this.loading=true
|
this.loading = true
|
||||||
this.taskForm.procInsId = this.$route.params && this.$route.params.procInsId;
|
this.taskForm.procInsId = this.$route.params && this.$route.params.procInsId;
|
||||||
this.taskForm.taskId = this.$route.query && this.$route.query.taskId;
|
this.taskForm.taskId = this.$route.query && this.$route.query.taskId;
|
||||||
this.formType = this.$route.query.category;
|
this.formType = this.$route.query.category;
|
||||||
this.processed = this.$route.query && eval(this.$route.query.processed || false);
|
this.processed = this.$route.query && eval(this.$route.query.processed || false);
|
||||||
if (this.$route.query.category==='claim'){
|
if (this.$route.query.category === 'claim') {
|
||||||
getOaClaimByProcInsId(this.$route.params.procInsId).then(res=>{
|
getOaClaimByProcInsId(this.$route.params.procInsId).then(res => {
|
||||||
this.form = res.data
|
this.form = res.data
|
||||||
this.detailList = res.data.detailList
|
this.detailList = res.data.detailList
|
||||||
this.loading=false
|
this.loading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 流程任务重获取变量表单
|
// 流程任务重获取变量表单
|
||||||
@@ -369,7 +410,7 @@ export default {
|
|||||||
},
|
},
|
||||||
toggleSelection(selection) {
|
toggleSelection(selection) {
|
||||||
if (selection && selection.length > 0) {
|
if (selection && selection.length > 0) {
|
||||||
this.$nextTick(()=> {
|
this.$nextTick(() => {
|
||||||
selection.forEach(item => {
|
selection.forEach(item => {
|
||||||
let row = this.userList.find(k => k.userId === item.userId);
|
let row = this.userList.find(k => k.userId === item.userId);
|
||||||
this.$refs.userTable.toggleRowSelection(row);
|
this.$refs.userTable.toggleRowSelection(row);
|
||||||
@@ -421,6 +462,7 @@ export default {
|
|||||||
getProcessDetails(procInsId, taskId) {
|
getProcessDetails(procInsId, taskId) {
|
||||||
const params = {procInsId: procInsId, taskId: taskId}
|
const params = {procInsId: procInsId, taskId: taskId}
|
||||||
detailProcess(params).then(res => {
|
detailProcess(params).then(res => {
|
||||||
|
console.log(res.data)
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
this.xmlData = data.bpmnXml;
|
this.xmlData = data.bpmnXml;
|
||||||
this.processFormList = data.processFormList;
|
this.processFormList = data.processFormList;
|
||||||
@@ -432,6 +474,7 @@ export default {
|
|||||||
this.finishedInfo = data.flowViewer;
|
this.finishedInfo = data.flowViewer;
|
||||||
this.formOpen = true
|
this.formOpen = true
|
||||||
this.processTitleValue = data.processFormList[0].fields[0].__config__.defaultValue;
|
this.processTitleValue = data.processFormList[0].fields[0].__config__.defaultValue;
|
||||||
|
this.loading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onSelectCopyUsers() {
|
onSelectCopyUsers() {
|
||||||
@@ -488,7 +531,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
/** 转办任务 */
|
/** 转办任务 */
|
||||||
handleTransfer(){
|
handleTransfer() {
|
||||||
this.$refs["taskForm"].validate(valid => {
|
this.$refs["taskForm"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.userData.type = 'transfer';
|
this.userData.type = 'transfer';
|
||||||
@@ -503,7 +546,7 @@ export default {
|
|||||||
this.$refs["taskForm"].validate(valid => {
|
this.$refs["taskForm"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const _this = this;
|
const _this = this;
|
||||||
this.$modal.confirm('拒绝审批单流程会终止,是否继续?').then(function() {
|
this.$modal.confirm('拒绝审批单流程会终止,是否继续?').then(function () {
|
||||||
return rejectTask(_this.taskForm);
|
return rejectTask(_this.taskForm);
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
this.$modal.msgSuccess(res.msg);
|
this.$modal.msgSuccess(res.msg);
|
||||||
@@ -623,6 +666,7 @@ export default {
|
|||||||
display: table;
|
display: table;
|
||||||
content: "";
|
content: "";
|
||||||
}
|
}
|
||||||
|
|
||||||
.clearfix:after {
|
.clearfix:after {
|
||||||
clear: both
|
clear: both
|
||||||
}
|
}
|
||||||
@@ -638,10 +682,12 @@ export default {
|
|||||||
|
|
||||||
.el-row {
|
.el-row {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-col {
|
.el-col {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
@@ -649,7 +695,12 @@ export default {
|
|||||||
.button-new-tag {
|
.button-new-tag {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
.title-record{font-size: 16px; padding: 10px 0; color: #1ab394}
|
|
||||||
|
.title-record {
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 10px 0;
|
||||||
|
color: #1ab394
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -205,7 +205,6 @@ export default {
|
|||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||||
// console.log(5555,response.rows)
|
|
||||||
this.ownProcessList = response.rows;
|
this.ownProcessList = response.rows;
|
||||||
this.total = response.total;
|
this.total = response.total;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
|||||||
@@ -77,12 +77,16 @@ export default {
|
|||||||
// 启动流程并将表单数据加入流程变量
|
// 启动流程并将表单数据加入流程变量
|
||||||
startProcess(this.definitionId, JSON.stringify(data.valData)).then(res => {
|
startProcess(this.definitionId, JSON.stringify(data.valData)).then(res => {
|
||||||
this.$modal.msgSuccess(res.msg);
|
this.$modal.msgSuccess(res.msg);
|
||||||
this.$tab.closeOpenPage({
|
this.goBack()
|
||||||
path: '/work/own'
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
/** 返回页面 */
|
||||||
|
goBack() {
|
||||||
|
// 关闭当前标签页并返回上个页面
|
||||||
|
this.$tab.closePage(this.$route)
|
||||||
|
this.$router.back()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user