提交代码

dev_xds
姜玉琦 2023-09-10 13:50:28 +08:00
parent e3dc2d1153
commit 44196a636b
5 changed files with 216 additions and 105 deletions

View File

@ -132,15 +132,17 @@
@pagination="getList" @pagination="getList"
/> />
<detailDrawer ref="detailDrawer"></detailDrawer> <detailDrawer ref="detailDrawer"></detailDrawer>
<detailLeaveDrawer ref="detailLeaveDrawer"></detailLeaveDrawer>
</div> </div>
</template> </template>
<script> <script>
import { finishedList, getDeployment, delDeployment, addDeployment, updateDeployment, exportDeployment, revokeProcess } from "@/api/flowable/finished"; import { finishedList, getDeployment, delDeployment, addDeployment, updateDeployment, exportDeployment, revokeProcess } from "@/api/flowable/finished";
import {myFinishedFlowTaskList} from "@/api/flowable/businessKey"; import {myFinishedFlowTaskList} from "@/api/flowable/businessKey";
import detailDrawer from "../myProcess/detail/detailDrawer.vue"; import detailDrawer from "../myProcess/detail/detailDrawer.vue";
import detailLeaveDrawer from "../myProcess/detail/detailLeaveDrawer.vue";
export default { export default {
name: "Deploy", name: "Deploy",
components: { detailDrawer }, components: { detailDrawer, detailLeaveDrawer },
dicts: ["sys_process_category"], dicts: ["sys_process_category"],
data() { data() {
return { return {
@ -264,7 +266,12 @@ export default {
}, },
/** 流程流转记录 */ /** 流程流转记录 */
handleFlowRecord(row){ handleFlowRecord(row){
//
if(row.procDefKey=="flow_xmglzdl_qjspb"){
this.$refs.detailLeaveDrawer.show(row);
}else{
this.$refs.detailDrawer.show(row); this.$refs.detailDrawer.show(row);
}
// this.$router.push({ path: '/flowable/task/finished/detail/index', // this.$router.push({ path: '/flowable/task/finished/detail/index',
// query: { // query: {
// procInsId: row.procInsId, // procInsId: row.procInsId,

View File

@ -69,7 +69,7 @@
v-hasPermi="['system:deployment:add']" v-hasPermi="['system:deployment:add']"
>新增流程</el-button> >新增流程</el-button>
</el-col> </el-col>
<!-- <el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain plain
@ -79,7 +79,7 @@
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:deployment:remove']" v-hasPermi="['system:deployment:remove']"
>删除</el-button> >删除</el-button>
</el-col> --> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-tabs v-model="activeName" @tab-click="handleClick"> <el-tabs v-model="activeName" @tab-click="handleClick">
@ -213,7 +213,9 @@
/> />
</el-dialog> </el-dialog>
<initTaskDrawer ref="initTaskDrawer" :closeCallBack="getList"></initTaskDrawer> <initTaskDrawer ref="initTaskDrawer" :closeCallBack="getList"></initTaskDrawer>
<initLeaveTaskDrawer ref="initLeaveTaskDrawer" :closeCallBack="getList"></initLeaveTaskDrawer>
<detailDrawer ref="detailDrawer"></detailDrawer> <detailDrawer ref="detailDrawer"></detailDrawer>
<detailLeaveDrawer ref="detailLeaveDrawer"></detailLeaveDrawer>
</div> </div>
</template> </template>
@ -230,12 +232,16 @@ import { myProcessList,stopProcess } from "@/api/flowable/process";
import {allList,queryCount} from "@/api/flowable/businessKey"; import {allList,queryCount} from "@/api/flowable/businessKey";
import {myDefinitionList} from "@/api/flowable/definition"; import {myDefinitionList} from "@/api/flowable/definition";
import initTaskDrawer from "./initTaskDrawer.vue"; import initTaskDrawer from "./initTaskDrawer.vue";
import initLeaveTaskDrawer from './initLeaveTaskDrawer'
import detailDrawer from "./detail/detailDrawer.vue"; import detailDrawer from "./detail/detailDrawer.vue";
import detailLeaveDrawer from "./detail/detailLeaveDrawer.vue";
export default { export default {
name: "Deploy", name: "Deploy",
components: { components: {
initTaskDrawer, initTaskDrawer,
detailDrawer initLeaveTaskDrawer,
detailDrawer,
detailLeaveDrawer
}, },
dicts: ["sys_process_category"], dicts: ["sys_process_category"],
data() { data() {
@ -405,7 +411,11 @@ export default {
/** 发起流程申请 */ /** 发起流程申请 */
handleStartProcess(row){ handleStartProcess(row){
this.open = false; this.open = false;
if(row.flowKey=="flow_xmglzdl_qjspb"){
this.$refs.initLeaveTaskDrawer.show(row);
}else{
this.$refs.initTaskDrawer.show(row); this.$refs.initTaskDrawer.show(row);
}
// this.$router.push({ path: '/flowable/task/myProcess/send/index', // this.$router.push({ path: '/flowable/task/myProcess/send/index',
// query: { // query: {
// deployId: row.deploymentId, // deployId: row.deploymentId,
@ -418,18 +428,24 @@ export default {
const params = { const params = {
instanceId: row.procInsId instanceId: row.procInsId
} }
let that = this;
this.$modal.confirm('撤销流程会终止,是否继续?').then(function() { this.$modal.confirm('撤销流程会终止,是否继续?').then(function() {
this.loading = true; that.loading = true;
return stopProcess(params); return stopProcess(params);
}).then(res => { }).then(res => {
this.$modal.msgSuccess(res.msg); that.$modal.msgSuccess(res.msg);
this.loading=false; that.loading=false;
this.getList(); that.getList();
}); });
}, },
/** 流程流转记录 */ /** 流程流转记录 */
handleFlowRecord(row){ handleFlowRecord(row){
//
if(row.procDefKey=="flow_xmglzdl_qjspb"){
this.$refs.detailLeaveDrawer.show(row);
}else{
this.$refs.detailDrawer.show(row); this.$refs.detailDrawer.show(row);
}
// this.$router.push({ path: '/flowable/task/myProcess/detail/index', // this.$router.push({ path: '/flowable/task/myProcess/detail/index',
// query: { // query: {
// procInsId: row.procInsId, // procInsId: row.procInsId,

View File

@ -18,11 +18,17 @@
:rules="rules" :rules="rules"
v-loading="loading" v-loading="loading"
label-width="120px" label-width="120px"
style="padding-right: 35px" style="padding-right: 35px;"
> >
<div class="canvas" ref="flowCanvas"></div> <div class="canvas" ref="flowCanvas"></div>
<div class="maskLayer" /> <div class="maskLayer" />
<el-form-item label="所属项目" prop="businessKey"> <el-card class="box-card" style="margin-left:35px;">
<el-descriptions class="margin-top" :title="title" :column="2" size="medium" border>
<el-descriptions-item :span="2" prop="businessKey">
<template slot="label">
<i class="el-icon-map-location"></i>
所属项目<span class="cr"> *</span>
</template>
<el-select <el-select
v-model="form.businessKey" v-model="form.businessKey"
placeholder="请选择所属项目" placeholder="请选择所属项目"
@ -39,36 +45,78 @@
> >
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-descriptions-item>
<el-form-item label="发起单位"> <el-descriptions-item :span="2" label-class-name="my-label" :labelStyle="labelStyle">
<template slot="label">
<i class="el-icon-school"></i>
申请单位
</template>
{{ deptName }} {{ deptName }}
</el-form-item> </el-descriptions-item>
<el-form-item label="发起人"> <el-descriptions-item :span="2" label-class-name="my-label" :labelStyle="labelStyle">
{{ nickName }} <template slot="label">
</el-form-item> <i class="el-icon-collection-tag"></i>
<el-form-item label="审批事项"> 申请事项
</template>
{{ title }} {{ title }}
</el-form-item> </el-descriptions-item>
<el-form-item label="审批内容" prop="files" v-if="options.flowKey!='flow_xmglzdl_qjsp' && options.flowKey!='flow_aql_sxkj'"> <el-descriptions-item label-class-name="my-label" :labelStyle="labelStyle">
<FileUpload <template slot="label">
@input="fileInput" <i class="el-icon-user"></i>
:limit="9" 申请人
:fileType="['pdf', 'png', 'jpg', 'jpeg', 'doc', 'docx', 'xls', 'xlsx']" </template>
/> {{ nickName }}
</el-form-item> </el-descriptions-item>
<el-form-item label="申请说明" prop="remark" v-if="options.flowKey!='flow_xmglzdl_qjsp' && options.flowKey!='flow_aql_sxkj'"> <el-descriptions-item label-class-name="my-label" :labelStyle="labelStyle">
<template slot="label">
<i class="el-icon-s-flag"></i>
申请日期
</template>
{{ date }}
</el-descriptions-item>
<el-descriptions-item label-class-name="my-label" :labelStyle="labelStyle">
<template slot="label">
<i class="el-icon-time"></i>
请假日期<span class="cr"> *</span>
</template>
<el-date-picker
v-model="daterangeMarksTime"
style="width: 400px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="checkTime"
></el-date-picker>
</el-descriptions-item>
<el-descriptions-item label-class-name="my-label" :labelStyle="labelStyle">
<template slot="label">
<i class="el-icon-tickets"></i>
请假时间
</template>
{{times}}
</el-descriptions-item>
<el-descriptions-item :span="2" label-class-name="my-label" :labelStyle="labelStyle">
<template slot="label">
<i class="el-icon-chat-dot-square"></i>
请假事由<span class="cr"> *</span>
</template>
<el-input <el-input
type="textarea" type="textarea"
v-model="form.remark" v-model="form.remark"
placeholder="请输入申请说明" placeholder="请输入申请说明"
rows="5" rows="5"
max="1"
/> />
</el-form-item> </el-descriptions-item>
</el-form> </el-descriptions>
<div style="text-align: center"> <div style="text-align: center;margin-top: 30px;">
<el-button type="primary" @click="submitForm"></el-button> <el-button type="primary" @click="submitForm"></el-button>
<el-button @click="doCanel"> </el-button> <el-button @click="doCanel"> </el-button>
</div> </div>
</el-card>
</el-form>
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -102,18 +150,7 @@ export default {
remark: "", remark: "",
}, },
// //
rules: { rules: {},
businessKey: [{ required: true, message: "请选择所属项目", trigger: "blur" }],
files: [{ required: true, message: "请上传申请内容", trigger: "blur" }],
remark: [
{ required: false, message: "请输入申请说明", trigger: "blur" },
{
max: 500,
message: "申请说明最多输入500字",
trigger: "blur",
},
],
},
projectOptions: null, projectOptions: null,
deptName: null, deptName: null,
nickName: null, nickName: null,
@ -123,6 +160,10 @@ export default {
taskTitle: null, taskTitle: null,
taskOpen: false, taskOpen: false,
daterangeMarksTime: [], daterangeMarksTime: [],
//label
labelStyle: { width: "180px" },
times:"... ...",
date:null
}; };
}, },
computed: {}, computed: {},
@ -161,17 +202,20 @@ export default {
}, },
show(options) { show(options) {
this.options = options; this.options = options;
this.form={};
this.initMyProject(); this.initMyProject();
this.title = options.name; this.title = options.name;
this.deptName = store.getters.dept.deptName; this.deptName = store.getters.dept.deptName;
this.nickName = store.getters.name; this.nickName = store.getters.name;
const self = this; this.date = this.$dt(new Date()).format("YYYY-MM-DD");
this.form.date = this.$dt(new Date()).format("YYYY-MM-DD HH:mm");
this.onOpen = true; this.onOpen = true;
flowXmlAndNode({ deployId: options.deploymentId }).then((res) => { flowXmlAndNode({ deployId: options.deploymentId }).then((res) => {
this.initFlowImage(res.data.xmlData); this.initFlowImage(res.data.xmlData);
}); });
}, },
async initFlowImage(data) { async initFlowImage(data) {
const self = this;
try { try {
self.bpmnViewer = new BpmnViewer({ self.bpmnViewer = new BpmnViewer({
container: this.$refs.flowCanvas, container: this.$refs.flowCanvas,
@ -184,21 +228,17 @@ export default {
console.error(err.message, err.warnings); console.error(err.message, err.warnings);
} }
}, },
fileInput(files) { checkTime(val) {
let fileUrls = ""; let time = new Date(val[1]).getTime()-new Date(val[0]).getTime();
if (files.length > 0) { let hours = time/3600000;
fileUrls = ""; let day = (hours/24)+1;//1PS:2023-09-10 2023-09-112
files.forEach((item) => { if(hours%24>0) day++;
fileUrls += "," + item.url; this.form.day=day;
}); this.times="共 "+day+" 天"
fileUrls = fileUrls.substring(1);
}
this.form.files = fileUrls;
}, },
submitForm() { submitForm() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
this.loading = true;
// todo // todo
// getNextFlowNodeByStart({ // getNextFlowNodeByStart({
// deploymentId: this.options.deploymentId, // deploymentId: this.options.deploymentId,
@ -211,7 +251,26 @@ export default {
// } // }
// }); // });
// //
if(!this.form.businessKey){
this.$modal.msgWarning("请选择所属项目...");
return;
}
if (null != this.daterangeMarksTime && "" != this.daterangeMarksTime) {
this.form.beginDate = this.daterangeMarksTime[0];
this.form.endDate = this.daterangeMarksTime[1];
}else{
this.$modal.msgWarning("请选择请假日期...");
return;
}
if(!this.form.day){
this.$modal.msgWarning("请选择请假日期...");
return;
}
if(!this.form.remark){
this.$modal.msgWarning("请输入请假事由...");
return;
}
this.loading = true;
definitionStart(this.options.id, JSON.stringify(this.form)).then((res) => { definitionStart(this.options.id, JSON.stringify(this.form)).then((res) => {
this.$modal.msgSuccess(res.msg); this.$modal.msgSuccess(res.msg);
this.loading = false; this.loading = false;
@ -235,4 +294,8 @@ export default {
z-index: 9999; z-index: 9999;
top: 66px; top: 66px;
} }
.cr{
font-weight: 700;
color: red;
}
</style> </style>

View File

@ -96,9 +96,24 @@
rows="5" rows="5"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="驳回节点" prop="businessKey" v-if="returnTask">
<el-select
v-model="form.businessKey"
placeholder="请选择驳回节点"
style="width: 100%"
>
<el-option
v-for="(item, index) in returnTaskList"
:key="index"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item> -->
<div style="text-align: center"> <div style="text-align: center">
<el-button icon="el-icon-check" type="success" size="mini" @click="handlePass"></el-button> <el-button icon="el-icon-check" type="success" size="mini" @click="handlePass"></el-button>
<el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject"></el-button> <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject"></el-button>
</div> </div>
</el-form> </el-form>
</div> </div>
@ -111,7 +126,7 @@
import store from "@/store"; import store from "@/store";
import { flowXmlAndNode } from "@/api/flowable/definition"; import { flowXmlAndNode } from "@/api/flowable/definition";
import { CustomViewer as BpmnViewer } from "@/components/customBpmn"; import { CustomViewer as BpmnViewer } from "@/components/customBpmn";
import { complete, rejectTask } from "@/api/flowable/todo"; import { complete, rejectTask, returnList } from "@/api/flowable/todo";
import {findCommentByProcInsId,findFormDatasByProcInsId} from "@/api/flowable/businessKey"; import {findCommentByProcInsId,findFormDatasByProcInsId} from "@/api/flowable/businessKey";
export default { export default {
components: {}, components: {},
@ -148,7 +163,9 @@ export default {
showjd:false, showjd:false,
//label //label
labelStyle: { width: "180px" }, labelStyle: { width: "180px" },
initData:{} initData:{},
returnTaskList: [], // 退
returnTask:false
}; };
}, },
computed: {}, computed: {},
@ -161,14 +178,7 @@ export default {
handlePass() { handlePass() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
this.form.taskId = this.options.taskId; this.$confirm('是否确认审批通过当前流程申请?', '提示', {
this.form.taskName = this.options.taskName;
this.form.userId = store.getters.userId;
this.form.deployId = this.options.deployId;
this.form.procInsId = this.options.procInsId;
this.form.instanceId = this.options.procInsId;
this.form.executionId = this.options.procInsId;
this.$confirm('是否确认通过当前流程申请?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
@ -190,14 +200,7 @@ export default {
handleReject() { handleReject() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
this.form.taskId = this.options.taskId; this.$confirm('是否确认审批驳回当前流程申请?', '提示', {
this.form.taskName = this.options.taskName;
this.form.userId = store.getters.userId;
this.form.deployId = this.options.deployId;
this.form.procInsId = this.options.procInsId;
this.form.instanceId = this.options.procInsId;
this.form.executionId = this.options.procInsId;
this.$confirm('是否确认驳回当前流程申请?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
@ -215,6 +218,20 @@ export default {
} }
}); });
}, },
initReturnList(){
returnList(this.form).then(res => {
this.returnTaskList = res.data;
})
},
initFormDate(){
this.form.taskId = this.options.taskId;
this.form.taskName = this.options.taskName;
this.form.userId = store.getters.userId;
this.form.deployId = this.options.deployId;
this.form.procInsId = this.options.procInsId;
this.form.instanceId = this.options.procInsId;
this.form.executionId = this.options.procInsId;
},
setIcon(row) { setIcon(row) {
if (row.endTime) { if (row.endTime) {
if(row.commentResult=="驳回") if(row.commentResult=="驳回")
@ -257,6 +274,7 @@ export default {
this.onOpen = true; this.onOpen = true;
this.showjd = false; this.showjd = false;
this.form = {}; this.form = {};
this.initFormDate();
if(options.finishTime==null){ if(options.finishTime==null){
this.jdtitle="进行中"; this.jdtitle="进行中";
this.showjd=true; this.showjd=true;

View File

@ -87,6 +87,7 @@
@pagination="getList" @pagination="getList"
/> />
<approveDrawer ref="approveDrawer" :closeCallBack="getList"></approveDrawer> <approveDrawer ref="approveDrawer" :closeCallBack="getList"></approveDrawer>
<approveLeaveDrawer ref="approveLeaveDrawer" :closeCallBack="getList"></approveLeaveDrawer>
</div> </div>
</template> </template>
<script> <script>
@ -96,10 +97,11 @@ import {
} from "@/api/flowable/todo"; } from "@/api/flowable/todo";
import {myAwaitFlowTaskList} from "@/api/flowable/businessKey"; import {myAwaitFlowTaskList} from "@/api/flowable/businessKey";
import approveDrawer from "./detail/approveDrawer.vue"; import approveDrawer from "./detail/approveDrawer.vue";
import approveLeaveDrawer from "./detail/approveLeaveDrawer.vue";
export default { export default {
name: "Deploy", name: "Deploy",
components: {approveDrawer}, components: {approveDrawer,approveLeaveDrawer},
dicts: ["sys_process_category"], dicts: ["sys_process_category"],
data() { data() {
return { return {
@ -161,7 +163,12 @@ export default {
}, },
// //
handleProcess(row){ handleProcess(row){
//
if(row.procDefKey=="flow_xmglzdl_qjspb"){
this.$refs.approveLeaveDrawer.show(row);
}else{
this.$refs.approveDrawer.show(row); this.$refs.approveDrawer.show(row);
}
// this.$router.push({ path: '/flowable/task/todo/detail/index', // this.$router.push({ path: '/flowable/task/todo/detail/index',
// query: { // query: {
// procInsId: row.procInsId, // procInsId: row.procInsId,