You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
542 lines
16 KiB
Plaintext
542 lines
16 KiB
Plaintext
<template>
|
|
<el-row class="container-row">
|
|
<div v-for="(btn, idx) of toolBtns" :key="idx">
|
|
<div v-if="btn.No === 'Send'">
|
|
<div v-if="currNode && currNode.CondModel == 2" class="flex-center">
|
|
<el-button
|
|
size="medium"
|
|
:key="btn.No"
|
|
@click="btnOpen(btn)"
|
|
:disabled="btnDisabled"
|
|
:loading="sendLoading"
|
|
>
|
|
<i :class="iconMap.get(btn.No)"></i> {{ btn.Name }}
|
|
</el-button>
|
|
<el-select
|
|
v-if="toNodes.length!=0"
|
|
v-model="selectNode.No"
|
|
id="DDL_ToNode"
|
|
placeholder="请选择下一个处理节点"
|
|
v-show="toNodes.length !== 0"
|
|
style="margin: 3px 5px 0 10px"
|
|
@change="changeToNode"
|
|
>
|
|
<el-option
|
|
v-for="item in toNodes"
|
|
:key="item.No"
|
|
:label="item.Name"
|
|
:value="item.No"
|
|
>
|
|
</el-option>
|
|
</el-select>
|
|
</div>
|
|
<div v-else-if="currNode && currNode.CondModel == 3">
|
|
<div v-for="node in toNodes" :key="node.No">
|
|
<el-button
|
|
size="medium"
|
|
@click="btnOpen(btn, node, idx)"
|
|
:disabled="btnDisabled"
|
|
>
|
|
<i :class="iconMap.get(node.No)"></i> {{ node.Name }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
<div v-else>
|
|
<el-button
|
|
size="medium"
|
|
:key="btn.No"
|
|
@click="btnOpen(btn)"
|
|
:disabled="btnDisabled"
|
|
:loading="sendLoading"
|
|
>
|
|
<i :class="iconMap.get(btn.No)"></i> {{ btn.Name }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
<div v-else>
|
|
<el-button
|
|
size="medium"
|
|
:key="btn.No"
|
|
@click="btnOpen(btn, null)"
|
|
:disabled="btnDisabled"
|
|
>
|
|
<i :class="iconMap.get(btn.No)"></i> {{ btn.Name }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
<el-dialog
|
|
:title="title"
|
|
:visible.sync="dialogFormVisible"
|
|
:before-close="handleClose"
|
|
destroy-on-close
|
|
>
|
|
<SelectiveRecipient ref="selectiveRef" v-if="judgeOperation === 'sendAccepter'" :urlParams="params" @accepterSend="accepterSend"></SelectiveRecipient>
|
|
<div v-else-if="judgeOperation === 'ShowMsg'" v-html="SendMsg" style="height:400px;overflow-y: auto"></div>
|
|
<OpenDialog v-else :judgeOperation="judgeOperation" :params="params"></OpenDialog>
|
|
</el-dialog>
|
|
</el-row>
|
|
</template>
|
|
|
|
<script>
|
|
import OpenDialog from "@/wf/components/OpenDialog.vue";
|
|
import {GetPara} from "@/wf/api/Gener.js";
|
|
import SelectiveRecipient from "./selectiveRecipient.vue";
|
|
export default {
|
|
props: {
|
|
nodeID: { type: Number, default: 0 },
|
|
selectItems: {type:Array , default: () => []},
|
|
loadData:{type:Function,default:null}
|
|
},
|
|
provide: function () {
|
|
return {
|
|
toolBarInstance: this,
|
|
};
|
|
},
|
|
components: {
|
|
OpenDialog,
|
|
SelectiveRecipient
|
|
},
|
|
data() {
|
|
const iconMap = new Map([
|
|
["Return", "el-icon-circle-close"],
|
|
["Shift", "el-icon-sort"],
|
|
["Track", "el-icon-connection"],
|
|
["Search", "el-icon-search"],
|
|
["Send", "el-icon-s-promotion"],
|
|
]);
|
|
return {
|
|
params: {}, //传递的参数
|
|
webUser: {}, //用户信息
|
|
toolBtns: [], //按钮对象的集合
|
|
toNodes: [], //跳转到的节点
|
|
currNode: {}, //当前节点的信息
|
|
btnDisabled: false, //操作按钮禁用
|
|
sendLoading: false, //发送加载操作
|
|
selectNode: {}, //按钮旁的下拉框,发送时选择的节点
|
|
workcheckMsg:"", //审核意见
|
|
/***弹出窗页面的定义**/
|
|
title: "", //弹出窗的标题
|
|
dialogFormVisible: false, //是否显示弹出窗
|
|
judgeOperation: "", //弹出窗的类型
|
|
componentList: [],
|
|
currentView: "ch",
|
|
returnData: {}, //返回select数据
|
|
iconMap,
|
|
SendMsg:'',
|
|
};
|
|
},
|
|
created() {
|
|
this.webUser = this.$store.getters.getWebUser;
|
|
this.initToolBar();
|
|
this.params.FK_Node = this.nodeID;
|
|
if (this.toNodes != undefined && this.toNodes.length != 0)
|
|
this.selectNode = JSON.parse(JSON.stringify(this.toNodes[0]));
|
|
else this.toNodes = [];
|
|
},
|
|
|
|
methods: {
|
|
initToolBar: function () {
|
|
let handler = new this.HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_Batch");
|
|
handler.AddPara("FK_Node",this.nodeID);
|
|
let data = handler.DoMethodReturnString("BatchToolBar_Init");
|
|
if (data.indexOf("err@") != -1) {
|
|
this.$alert(data.replace("err@", ""), {
|
|
dangerouslyUseHTMLString: true,
|
|
});
|
|
return;
|
|
}
|
|
data = JSON.parse(data);
|
|
this.toolBtns = data['ToolBar'];
|
|
this.toNodes = data['ToNodes'];
|
|
if (this.toNodes != undefined)
|
|
this.toNodes.forEach((toNode) => {
|
|
toNode.text = toNode.Name;
|
|
});
|
|
this.currNode =data['WF_Node'][0];
|
|
this.params.FK_Flow = this.currNode.FK_Flow;
|
|
},
|
|
btnOpen: function (btn, toNode) {
|
|
if(this.selectItems.length==0){
|
|
this.$message({type:"error",message:'请选择需要批量发送的流程实例'});
|
|
return;
|
|
}
|
|
if(this.selectItems.length>0){
|
|
if(this.currNode.FWCSta === 1){
|
|
const workids= this.selectItems.map(item=>item.WorkID);
|
|
this.params.WorkIDs = workids.join(',');
|
|
this.params.WorkID = workids[0];
|
|
const batchCheckNoteModel = GetPara(this.currNode.AtPara,"BatchCheckNoteModel") || "0";
|
|
if(batchCheckNoteModel === "1"){
|
|
this.params.SelectItems =encodeURIComponent(JSON.stringify(this.selectItems));
|
|
}
|
|
}
|
|
|
|
}
|
|
switch (btn.No) {
|
|
case "Send": //发送
|
|
this.params.ToNode = this.selectNode.No;
|
|
if (this.currNode && this.currNode.CondModel == 3) {
|
|
this.selectNode = JSON.parse(JSON.stringify(toNode));
|
|
this.params.ToNode = this.selectNode.No;
|
|
}
|
|
this.SendFlow();
|
|
break;
|
|
case "DeleteFlow": //删除流程
|
|
this.DeleteFlow();
|
|
break;
|
|
case "EndFlow": //结束流程
|
|
this.StopFlow();
|
|
break;
|
|
case "Return": //结束流程
|
|
this.DialogOpen(btn);
|
|
break;
|
|
case "WorkCheckMsg"://如何审核意见
|
|
this.$prompt('请输入审核意见', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
inputType:'text',
|
|
inputValue: this.workcheckMsg
|
|
}).then(({ value }) => {
|
|
this.workcheckMsg = value;
|
|
this.params.CheckMsg = value;
|
|
})
|
|
break;
|
|
default:
|
|
//弹框
|
|
this.DialogOpen(btn);
|
|
break;
|
|
}
|
|
},
|
|
changeToNode(nextNodeNo) {
|
|
let params = this.$store.getters.getData;
|
|
const selectedNode = this.toNodes.filter(
|
|
(node) => node.No === nextNodeNo
|
|
);
|
|
if (selectedNode.length > 1 || selectedNode.length === 0) {
|
|
this.$message.error("下级节点id错误");
|
|
return;
|
|
}
|
|
this.selectNode = JSON.parse(JSON.stringify(selectedNode[0]));
|
|
params.ToNode = this.selectNode.No;
|
|
},
|
|
SendFlow: function () {
|
|
try{
|
|
this.Send();
|
|
}catch(e){
|
|
this.$message.error(e.toString());
|
|
}finally{
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
}
|
|
|
|
},
|
|
|
|
//弹出新页面窗体
|
|
DialogOpen: function (btn) {
|
|
//弹出框
|
|
this.title = btn.Name;
|
|
this.dialogFormVisible = true;
|
|
this.judgeOperation = btn.No;
|
|
},
|
|
|
|
//删除流程
|
|
DeleteFlow: function () {
|
|
this.$confirm("您确定要删除改流程数据吗, 是否继续?", "", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
}).then(() => {
|
|
let handler = new this.HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_Batch");
|
|
handler.AddPara("WorkIDs", this.workids.join(","));
|
|
let str = handler.DoMethodReturnString("Batch_Delete");
|
|
if (typeof str ==='string' && str.includes("err@")) {
|
|
this.$message({
|
|
type: "error",
|
|
message: "删除失败,请查看控制台,或者联系管理员",
|
|
});
|
|
} else {
|
|
this.$message({
|
|
type: "success",
|
|
message: str,
|
|
});
|
|
if(this.loadData)
|
|
this.loadData();
|
|
}
|
|
});
|
|
},
|
|
//结束流程
|
|
StopFlow: function () {
|
|
this.$confirm("您确定要结束该流程吗 ?", "", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
}).then(() => {
|
|
let handler = new this.HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_Batch");
|
|
handler.AddPara("WorkIDs", this.workids.join(","));
|
|
let data = handler.DoMethodReturnString("Batch_StopFlow");
|
|
if (data.indexOf("err@") != -1) {
|
|
this.$message({
|
|
type: "error",
|
|
message: "流程结束失败,请查看控制台,或者联系管理员",
|
|
});
|
|
console.log(data);
|
|
} else {
|
|
this.$message({
|
|
type: "success",
|
|
message: data,
|
|
});
|
|
if(this.loadData)
|
|
this.loadData();
|
|
}
|
|
});
|
|
},
|
|
Send: function () {
|
|
this.btnDisabled = true;
|
|
this.sendLoading = true;
|
|
if(this.currNode.FWCSta === 1){
|
|
const batchCheckNoteModel = GetPara(this.currNode.AtPara,"BatchCheckNoteModel") || "0";
|
|
if(batchCheckNoteModel == "0"){
|
|
this.$prompt('请输入审核意见', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
inputType:'text',
|
|
inputValue: this.workcheckMsg
|
|
}).then(({ value }) => {
|
|
this.workcheckMsg = value;
|
|
if(this.workcheckMsg!=""){
|
|
this.params.CheckMsg = value;
|
|
this.beforeSend();
|
|
return;
|
|
}
|
|
})
|
|
return ;
|
|
}
|
|
if(batchCheckNoteModel == "1"){
|
|
let msg="";
|
|
this.selectItems.forEach(item=>{
|
|
if(!item.CheckMsg)
|
|
msg+=item.WorkID+",";
|
|
})
|
|
if(msg != ""){
|
|
this.$message({
|
|
type: "error",
|
|
message: "请检查选择的流程实例是否都填写了审核意见",
|
|
});
|
|
return ;
|
|
}
|
|
this.beforeSend();
|
|
}
|
|
}
|
|
},
|
|
beforeSend(){
|
|
//选择节点
|
|
if (this.toNodes.length > 0) {
|
|
if (this.selectNode.IsSelectEmps == "1") {
|
|
//跳到选择接收人窗口
|
|
this.params.IsSend = false;
|
|
this.dialogFormVisible = true;
|
|
this.judgeOperation = "sendAccepter";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
return false;
|
|
}
|
|
if (this.selectNode.IsSelectEmps == "2") {
|
|
this.dialogFormVisible = true;
|
|
this.judgeOperation = "BySelfUrl";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
return false;
|
|
}
|
|
if (this.selectNode.IsSelectEmps == "3") {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "sendAccepterOfOrg";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
return false;
|
|
}
|
|
|
|
if (this.selectNode.IsSelectEmps == "4") {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "AccepterOfDept";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
return false;
|
|
}
|
|
}
|
|
this.execSend();
|
|
},
|
|
execSend() {
|
|
let handler = new this.HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_Batch");
|
|
handler.AddJson(this.params);
|
|
let data = handler.DoMethodReturnString("WorkCheckModelVue_Send"); //执行保存方法.
|
|
this.sendLoading = false;
|
|
if (data.indexOf("err@") == 0) {
|
|
//发送时发生错误
|
|
let reg = new RegExp("err@", "g");
|
|
data = data.replace(reg, "");
|
|
this.$alert(data);
|
|
this.btnDisabled = false;
|
|
return false;
|
|
}
|
|
|
|
if (data.indexOf("TurnUrl@") == 0) {
|
|
//发送成功时转到指定的URL
|
|
let url = data;
|
|
url = url.replace("TurnUrl@", "");
|
|
this.$router.push({ name: url });
|
|
return false;
|
|
}
|
|
if (data.indexOf("SelectNodeUrl@") == 0) {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "SelectNodeUrl";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
this.sendLoading = false;
|
|
return false;
|
|
}
|
|
|
|
if (data.indexOf("BySelfUrl@") == 0) {
|
|
//发送成功时转到自定义的URL
|
|
let url = data;
|
|
url = url.replace("BySelfUrl@", "");
|
|
this.$router.push({ name: url });
|
|
return false;
|
|
}
|
|
|
|
if (data.indexOf("url@") == 0) {
|
|
//发送成功时转到指定的URL
|
|
let params = data.split("&");
|
|
params.forEach((param) => {
|
|
if (param.indexOf("ToNode") != -1) {
|
|
let toNodeID = param.split("=")[1];
|
|
let params = this.$store.getters.getData;
|
|
params.ToNode = toNodeID;
|
|
this.$store.commit("setData", params);
|
|
}
|
|
});
|
|
|
|
if (data.indexOf("AccepterOfOrg") != -1) {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "sendAccepterOfOrg";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
return false;
|
|
}
|
|
|
|
if (data.indexOf("AccepterOfDept") != -1) {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "AccepterOfDept";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
return false;
|
|
}
|
|
|
|
if (
|
|
data.indexOf("Accepter") != 0 &&
|
|
data.indexOf("AccepterGener") == -1
|
|
) {
|
|
this.dialogFormVisible = true;
|
|
this.params.IsSend = false;
|
|
this.judgeOperation = "sendAccepter";
|
|
this.title = "选择接收人";
|
|
this.btnDisabled = false;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
this.OptSuc(data);
|
|
},
|
|
//发送 退回 移交等执行成功后转到 指定页面
|
|
OptSuc(msg) {
|
|
this.dialogFormVisible = false;
|
|
msg = msg.replace("@查看<img src='/WF/Img/Btn/PrintWorkRpt.gif' >", "");
|
|
|
|
msg = msg.replace(/@/g, "<br/>").replace(/null/g, "");
|
|
this.SendMsg = msg;
|
|
this.judgeOperation='ShowMsg';
|
|
this.dialogFormVisible = true;
|
|
/*this.$alert(msg, "发送成功", {
|
|
dangerouslyUseHTMLString: true,
|
|
});*/
|
|
/*this.$router.push({
|
|
name: "todolist",
|
|
});*/
|
|
this.loadData();
|
|
return;
|
|
},
|
|
accepterSend(){
|
|
this.dialogFormVisible = false;
|
|
if(['SelectNodeUrl','sendAccepterOfOrg','AccepterOfDept','sendAccepter'].includes(this.judgeOperation) ){
|
|
const todoEmps=this.$refs.selectiveRef.GetEmps();
|
|
if(todoEmps.length==0){
|
|
this.$message({
|
|
type: "error",
|
|
message: "请选择下一个节点接收的人员",
|
|
});
|
|
|
|
return;
|
|
}
|
|
this.params.ToEmps = todoEmps.join(",");
|
|
this.judgeOperation = "";
|
|
try{
|
|
this.execSend()
|
|
}catch(e){
|
|
this.$message({
|
|
type: "error",
|
|
message: e,
|
|
});
|
|
}
|
|
|
|
}
|
|
},
|
|
//关闭
|
|
handleClose() {
|
|
this.dialogFormVisible = false;
|
|
this.judgeOperation = "";
|
|
},
|
|
},
|
|
|
|
mounted() {
|
|
this.$Bus.$off("closeMsg");
|
|
this.$Bus.$on("closeMsg", (item) => {
|
|
this.dialogFormVisible = false;
|
|
if (item == "退回" || item == "回滚") {
|
|
this.loadData();
|
|
}
|
|
});
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
/deep/ .el-tabs__header{
|
|
margin: 0;
|
|
}
|
|
|
|
|
|
/deep/ .el-input__inner {
|
|
height: 36.5px;
|
|
line-height: 36.5px;
|
|
}
|
|
.container-row {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
/deep/ .el-button {
|
|
margin-left: 10px;
|
|
}
|
|
|
|
.flex-center {
|
|
display: flex;
|
|
align-items: center;
|
|
box-sizing: border-box;
|
|
}
|
|
</style> |