2024-03-05 17:10:53 +08:00
|
|
|
<template>
|
2024-03-07 14:51:01 +08:00
|
|
|
<div :class="prefixCls" :style="{ width: `${props.width}px` }">
|
2024-03-11 16:55:44 +08:00
|
|
|
<a-tabs v-model:activeKey="configActiveName">
|
2024-03-12 16:41:21 +08:00
|
|
|
<a-tab-pane :tab="data.wfNodeName" key="1">
|
2024-03-13 16:53:01 +08:00
|
|
|
<start-event-option ref="startRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
2024-03-11 16:55:44 +08:00
|
|
|
:class="data.currentWfNode.type=='bpmn:StartEvent' ? '' : 'hidden'"></start-event-option>
|
2024-03-13 16:53:01 +08:00
|
|
|
<user-task-option ref="taskRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
2024-03-12 16:41:21 +08:00
|
|
|
:class="data.currentWfNode.type=='bpmn:Task' ? '' : 'hidden'">
|
2024-03-11 16:55:44 +08:00
|
|
|
</user-task-option>
|
2024-03-13 16:53:01 +08:00
|
|
|
<end-event-option ref="endRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
2024-03-11 16:55:44 +08:00
|
|
|
:class="data.currentWfNode.type=='bpmn:EndEvent' ? '' : 'hidden'"></end-event-option>
|
2024-03-13 16:53:01 +08:00
|
|
|
<subprocess-option ref="subprocessRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
2024-03-11 16:55:44 +08:00
|
|
|
:class="data.currentWfNode.type=='bpmn:SubProcess' ? '' : 'hidden'"></subprocess-option>
|
2024-03-07 14:51:01 +08:00
|
|
|
</a-tab-pane>
|
2024-03-11 16:55:44 +08:00
|
|
|
<a-tab-pane tab="流程属性" key="2">
|
2024-03-12 16:41:21 +08:00
|
|
|
<shcemeinfo-config ref="shcemeinfoRef" :disabled="true" :schemeInfo="detailInfo.schemeInfo"></shcemeinfo-config>
|
2024-03-07 14:51:01 +08:00
|
|
|
</a-tab-pane>
|
2024-03-11 16:55:44 +08:00
|
|
|
<a-tab-pane key="3" tab="发起权限" force-render>
|
|
|
|
|
<auth-config ref="authRef"></auth-config>
|
2024-03-09 16:45:47 +08:00
|
|
|
</a-tab-pane>
|
2024-03-11 16:55:44 +08:00
|
|
|
|
2024-03-07 14:51:01 +08:00
|
|
|
</a-tabs>
|
2024-03-05 17:10:53 +08:00
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<script lang="ts" setup>
|
2024-03-11 16:55:44 +08:00
|
|
|
import { h, reactive, onMounted, defineProps, computed, defineEmits, provide, watch, ref, inject } from 'vue';
|
2024-03-05 17:10:53 +08:00
|
|
|
import { SaveOutlined, ZoomOutOutlined, ZoomInOutlined, RotateLeftOutlined, RotateRightOutlined, ClearOutlined } from '@ant-design/icons-vue';
|
|
|
|
|
import { Tabs } from 'ant-design-vue';
|
2024-03-07 14:51:01 +08:00
|
|
|
import { PageWrapper } from '@/components/Page';
|
|
|
|
|
import { useDesign } from '@/hooks/web/useDesign';
|
2024-03-12 16:41:21 +08:00
|
|
|
import { lr_AESEncrypt } from '../utils.ts'
|
2024-03-07 14:51:01 +08:00
|
|
|
const { prefixCls } = useDesign('process-property');
|
2024-03-12 16:41:21 +08:00
|
|
|
import { useMessage } from '@/hooks/web/useMessage';
|
|
|
|
|
const { createConfirm, createMessage } = useMessage();
|
|
|
|
|
import { getDetail } from '@/api/sys/WFSchemeInfo'
|
|
|
|
|
|
2024-03-05 17:10:53 +08:00
|
|
|
// 流程属性
|
2024-03-07 14:51:01 +08:00
|
|
|
import shcemeinfoConfig from './shcemeInfo/index.vue'
|
|
|
|
|
// 发起权限
|
|
|
|
|
import authConfig from './auth/index.vue'
|
2024-03-05 17:10:53 +08:00
|
|
|
// 开始节点
|
2024-03-11 16:55:44 +08:00
|
|
|
import StartEventOption from './startEvent/index.vue'
|
2024-03-07 14:51:01 +08:00
|
|
|
// 审核节点
|
|
|
|
|
import userTaskOption from './userTask/index.vue'
|
2024-03-05 17:10:53 +08:00
|
|
|
// 结束节点
|
2024-03-09 16:45:47 +08:00
|
|
|
import endEventOption from './endEvent/index.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 网关和
|
2024-03-05 17:10:53 +08:00
|
|
|
import gatewayAndOption from './config/gatewayAnd.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 网关包容
|
2024-03-05 17:10:53 +08:00
|
|
|
import gatewayInclusiveOption from './config/gatewayInclusive.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 网关Xor
|
2024-03-05 17:10:53 +08:00
|
|
|
import gatewayXorOption from './config/gatewayXor.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 脚本任务
|
2024-03-05 17:10:53 +08:00
|
|
|
import scriptTaskOption from './config/scriptTask.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 子流程
|
2024-03-09 16:45:47 +08:00
|
|
|
import subprocessOption from './subprocess/index.vue'
|
2024-03-08 11:31:55 +08:00
|
|
|
// 线
|
2024-03-05 17:10:53 +08:00
|
|
|
import mylineOption from './config/myline.vue'
|
|
|
|
|
/**
|
|
|
|
|
* 侧边栏
|
|
|
|
|
* @Author MiyueFE
|
|
|
|
|
* @Home https://github.com/miyuesc
|
|
|
|
|
* @Date 2021年3月31日18:57:51
|
|
|
|
|
*/
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
bpmnModeler: Object,
|
|
|
|
|
prefix: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: "camunda"
|
|
|
|
|
},
|
|
|
|
|
width: {
|
|
|
|
|
type: Number,
|
2024-03-07 14:51:01 +08:00
|
|
|
default: 520
|
2024-03-05 17:10:53 +08:00
|
|
|
},
|
2024-03-12 16:41:21 +08:00
|
|
|
element: Object,
|
|
|
|
|
schemeCode: String,
|
2024-03-05 17:10:53 +08:00
|
|
|
})
|
2024-03-13 16:53:01 +08:00
|
|
|
|
2024-03-12 16:41:21 +08:00
|
|
|
const startRef = ref < any > ()
|
|
|
|
|
const shcemeinfoRef = ref < any > ()
|
|
|
|
|
const authRef = ref < any > ()
|
|
|
|
|
const taskRef = ref < any > ()
|
|
|
|
|
const endRef = ref < any > ()
|
|
|
|
|
const subprocessRef = ref < any > ()
|
2024-03-11 16:55:44 +08:00
|
|
|
const configActiveName = ref('2')
|
2024-03-05 17:10:53 +08:00
|
|
|
const data = reactive({
|
|
|
|
|
currentWfNode: undefined,
|
2024-03-13 16:53:01 +08:00
|
|
|
wfNodeName: "",
|
2024-03-05 17:10:53 +08:00
|
|
|
})
|
2024-03-07 14:51:01 +08:00
|
|
|
watch(
|
|
|
|
|
() => props.element,
|
|
|
|
|
(newVal, oldVal) => {
|
2024-03-11 16:55:44 +08:00
|
|
|
var typeName = newVal.type.replace('bpmn:', '')
|
|
|
|
|
if (newVal.type == "bpmn:Process") {
|
|
|
|
|
data.currentWfNode = {
|
|
|
|
|
type: newVal.type
|
|
|
|
|
}
|
|
|
|
|
configActiveName.value = '2'
|
|
|
|
|
} else {
|
|
|
|
|
data.currentWfNode = newVal
|
|
|
|
|
configActiveName.value = '1'
|
|
|
|
|
switch (typeName) {
|
|
|
|
|
case 'StartEvent':
|
|
|
|
|
data.wfNodeName = "开始节点"
|
|
|
|
|
data.currentWfNode = {
|
|
|
|
|
id: newVal.id,
|
|
|
|
|
type: newVal.type
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'EndEvent':
|
|
|
|
|
data.wfNodeName = "结束节点"
|
|
|
|
|
data.currentWfNode = {
|
|
|
|
|
id: newVal.id,
|
|
|
|
|
type: newVal.type
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'Task':
|
|
|
|
|
data.wfNodeName = "审核节点"
|
|
|
|
|
data.currentWfNode = {
|
|
|
|
|
id: newVal.id,
|
|
|
|
|
type: newVal.type
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'SubProcess':
|
|
|
|
|
data.wfNodeName = "子流程"
|
|
|
|
|
data.currentWfNode = {
|
|
|
|
|
id: newVal.id,
|
|
|
|
|
type: newVal.type
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-07 14:51:01 +08:00
|
|
|
}
|
|
|
|
|
)
|
2024-03-12 16:41:21 +08:00
|
|
|
const detailInfo = reactive({
|
|
|
|
|
schemeInfo: {},
|
|
|
|
|
startInfor: {},
|
|
|
|
|
endInfo: {},
|
|
|
|
|
authInfo: {},
|
|
|
|
|
subprocessInfo: {},
|
|
|
|
|
taskInfo: {},
|
|
|
|
|
})
|
|
|
|
|
async function getDetailInfo() {
|
|
|
|
|
let data = await getDetail({ code: props.schemeCode })
|
|
|
|
|
let scheme = JSON.parse(data.scheme.content);
|
|
|
|
|
let baseinfo = {
|
|
|
|
|
id: data.schemeinfo.id,
|
|
|
|
|
code: data.schemeinfo.code,
|
|
|
|
|
name: data.schemeinfo.name,
|
|
|
|
|
category: data.schemeinfo.category,
|
|
|
|
|
enabledMark: data.schemeinfo.enabledMark,
|
|
|
|
|
mark: data.schemeinfo.mark,
|
|
|
|
|
isInApp: data.schemeinfo.isInApp,
|
|
|
|
|
description: data.schemeinfo.description,
|
|
|
|
|
icon: data.schemeinfo.icon,
|
|
|
|
|
color: data.schemeinfo.color,
|
|
|
|
|
schemeId: data.schemeinfo.schemeId,
|
|
|
|
|
|
|
|
|
|
undoType: scheme.undoType,
|
|
|
|
|
undoDbCode: scheme.undoDbCode,
|
|
|
|
|
undoDbSQL: scheme.undoDbSQL,
|
|
|
|
|
undoIOCName: scheme.undoIOCName,
|
|
|
|
|
undoUrl: scheme.undoUrl,
|
2024-03-11 16:55:44 +08:00
|
|
|
|
2024-03-12 16:41:21 +08:00
|
|
|
deleteType: scheme.deleteType,
|
|
|
|
|
deleteDbCode: scheme.deleteDbCode,
|
|
|
|
|
deleteDbSQL: scheme.deleteDbSQL,
|
|
|
|
|
deleteIOCName: scheme.deleteIOCName,
|
|
|
|
|
deleteUrl: scheme.deleteUrl,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deleteDraftType: scheme.deleteDraftType,
|
|
|
|
|
deleteDraftDbCode: scheme.deleteDraftDbCode,
|
|
|
|
|
deleteDraftDbSQL: scheme.deleteDraftDbSQL,
|
|
|
|
|
deleteDraftIOCName: scheme.deleteDraftIOCName,
|
|
|
|
|
deleteDraftUrl: scheme.deleteDraftUrl
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let wfData = scheme.wfData
|
|
|
|
|
let auth = {
|
|
|
|
|
authType: data.schemeinfo.authType,
|
|
|
|
|
authData: data.schemeAuthList.map(t => {
|
|
|
|
|
return {
|
|
|
|
|
id: t.objId,
|
|
|
|
|
name: t.objName,
|
|
|
|
|
type: t.objType
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
shcemeinfoRef.value.setForm(baseinfo)
|
|
|
|
|
authRef.value.setForm(auth)
|
|
|
|
|
}
|
2024-03-11 16:55:44 +08:00
|
|
|
|
|
|
|
|
function scriptTaskNodeInit(node) {
|
|
|
|
|
node.executeType = '1'
|
|
|
|
|
node.sqlDb = ''
|
|
|
|
|
node.sqlStr = ''
|
|
|
|
|
node.sqlStrRevoke = ''
|
|
|
|
|
node.apiUrl = ''
|
|
|
|
|
node.apiUrlRevoke = ''
|
|
|
|
|
node.ioc = ''
|
|
|
|
|
node.iocRevoke = ''
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
function mylineNodeInit(node) {
|
|
|
|
|
const wfdata = this.handleGetWFData();
|
|
|
|
|
const fromNode = wfdata.find(t => t.id == node.from)
|
|
|
|
|
node.lineConditions = ''
|
|
|
|
|
if (fromNode.type == 'userTask') {
|
|
|
|
|
if (fromNode.btnlist.findIndex(t => t.code == 'agree' && !t.hidden) != -1) {
|
|
|
|
|
node.lineConditions = 'agree' // 流转条件
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-12 16:41:21 +08:00
|
|
|
async function validatePanel() {
|
|
|
|
|
let res = await shcemeinfoRef.value.validateForm();
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
async function getPanel() {
|
2024-03-11 16:55:44 +08:00
|
|
|
// 1.获取流程配置基础属性
|
2024-03-12 16:41:21 +08:00
|
|
|
let baseinfo = await shcemeinfoRef.value.getForm();
|
2024-03-11 16:55:44 +08:00
|
|
|
// 2.获取流程权限信息
|
2024-03-12 16:41:21 +08:00
|
|
|
let auth = await authRef.value.getForm();
|
|
|
|
|
if (startRef.value == undefined) {
|
|
|
|
|
return createMessage.warn('请设置开始节点');
|
|
|
|
|
}
|
|
|
|
|
if (endRef.value == undefined) {
|
|
|
|
|
return createMessage.warn('请设置结束节点');
|
|
|
|
|
}
|
|
|
|
|
let startFrom = await startRef.value.getForm();
|
|
|
|
|
let endFrom = await endRef.value.getForm();
|
|
|
|
|
if (endFrom.id == '') {
|
|
|
|
|
return createMessage.warn('请设置结束节点');
|
|
|
|
|
}
|
2024-03-11 16:55:44 +08:00
|
|
|
let wfData = []
|
|
|
|
|
wfData.push(startFrom)
|
|
|
|
|
wfData.push(endFrom)
|
2024-03-12 16:41:21 +08:00
|
|
|
let taskFrom = await !(taskRef.value) ? {} : taskRef.value.getForm();
|
|
|
|
|
let subprocessFrom = await !(subprocessRef.value) ? {} : subprocessRef.value.getForm();
|
2024-03-13 16:53:01 +08:00
|
|
|
if (subprocessFrom != undefined) {
|
2024-03-12 16:41:21 +08:00
|
|
|
wfData.push(subprocessFrom)
|
|
|
|
|
}
|
2024-03-13 16:53:01 +08:00
|
|
|
if (subprocessFrom != undefined) {
|
2024-03-12 16:41:21 +08:00
|
|
|
wfData.push(taskFrom)
|
|
|
|
|
}
|
2024-03-11 16:55:44 +08:00
|
|
|
// 3.流程节点信息
|
|
|
|
|
wfData.forEach(node => {
|
|
|
|
|
if (node.type == 'myline' && !node.isInit) {
|
|
|
|
|
node.isInit = true
|
|
|
|
|
node.lineConditions = ''
|
|
|
|
|
const fromNode = this.wfData.find(t => t.id == node.from)
|
|
|
|
|
if (fromNode.type == 'userTask') {
|
|
|
|
|
if (fromNode.btnlist.findIndex(t => t.code == 'agree' && !t.hidden) != -1) {
|
|
|
|
|
node.lineConditions = 'agree' // 流转条件
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let scheme = {
|
|
|
|
|
wfData: wfData,
|
|
|
|
|
|
|
|
|
|
undoType: baseinfo.undoType,
|
|
|
|
|
undoDbCode: baseinfo.undoDbCode,
|
|
|
|
|
undoDbSQL: baseinfo.undoDbSQL,
|
|
|
|
|
undoIOCName: baseinfo.undoIOCName,
|
|
|
|
|
undoUrl: baseinfo.undoUrl,
|
|
|
|
|
|
|
|
|
|
deleteType: baseinfo.deleteType,
|
|
|
|
|
deleteDbCode: baseinfo.deleteDbCode,
|
|
|
|
|
deleteDbSQL: baseinfo.deleteDbSQL,
|
|
|
|
|
deleteIOCName: baseinfo.deleteIOCName,
|
|
|
|
|
deleteUrl: baseinfo.deleteUrl,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deleteDraftType: baseinfo.deleteDraftType,
|
|
|
|
|
deleteDraftDbCode: baseinfo.deleteDraftDbCode,
|
|
|
|
|
deleteDraftDbSQL: baseinfo.deleteDraftDbSQL,
|
|
|
|
|
deleteDraftIOCName: baseinfo.deleteDraftIOCName,
|
|
|
|
|
deleteDraftUrl: baseinfo.deleteDraftUrl,
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
let dto = {
|
|
|
|
|
schemeinfo: {
|
2024-03-13 16:53:01 +08:00
|
|
|
id: baseinfo.id,
|
2024-03-12 16:41:21 +08:00
|
|
|
code: baseinfo.code,
|
|
|
|
|
name: baseinfo.name,
|
|
|
|
|
category: baseinfo.category,
|
|
|
|
|
enabledMark: baseinfo.enabledMark,
|
|
|
|
|
mark: baseinfo.mark,
|
|
|
|
|
isInApp: baseinfo.isInApp,
|
|
|
|
|
authType: auth.authType,
|
|
|
|
|
description: baseinfo.description,
|
|
|
|
|
icon: baseinfo.icon,
|
|
|
|
|
color: baseinfo.color,
|
|
|
|
|
schemeId: baseinfo.schemeId,
|
2024-03-11 16:55:44 +08:00
|
|
|
},
|
2024-03-12 16:41:21 +08:00
|
|
|
schemeAuthList: auth.authType == 1 ? [] : auth.authData.map(t => {
|
2024-03-11 16:55:44 +08:00
|
|
|
return {
|
2024-03-12 16:41:21 +08:00
|
|
|
objId: t.id,
|
|
|
|
|
objName: t.name,
|
|
|
|
|
objType: t.type
|
2024-03-11 16:55:44 +08:00
|
|
|
};
|
|
|
|
|
}),
|
|
|
|
|
scheme: {
|
2024-03-12 16:41:21 +08:00
|
|
|
content: lr_AESEncrypt(JSON.stringify(scheme), "learun")
|
2024-03-11 16:55:44 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log(dto)
|
|
|
|
|
return dto
|
|
|
|
|
}
|
|
|
|
|
defineExpose({
|
2024-03-12 16:41:21 +08:00
|
|
|
getPanel,
|
|
|
|
|
validatePanel
|
|
|
|
|
})
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
if (props.schemeCode) {
|
|
|
|
|
getDetailInfo()
|
|
|
|
|
}
|
2024-03-11 16:55:44 +08:00
|
|
|
})
|
2024-03-05 17:10:53 +08:00
|
|
|
|
2024-03-07 14:51:01 +08:00
|
|
|
</script>
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
@prefix-cls: ~'@{namespace}-process-property';
|
|
|
|
|
|
|
|
|
|
.@{prefix-cls} {
|
|
|
|
|
background-color: @component-background;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .ant-tabs {
|
|
|
|
|
height: 100%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .ant-tabs-content-holder {
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
}
|
2024-03-12 16:41:21 +08:00
|
|
|
|
|
|
|
|
.hidden {
|
2024-03-11 16:55:44 +08:00
|
|
|
display: none;
|
|
|
|
|
}
|
2024-03-07 14:51:01 +08:00
|
|
|
</style>
|