diff --git a/src/api/sys/WFDelegate.ts b/src/api/sys/WFDelegate.ts
new file mode 100644
index 0000000..6111cc5
--- /dev/null
+++ b/src/api/sys/WFDelegate.ts
@@ -0,0 +1,16 @@
+// WFDelegate 流程模版基本信息
+import { defHttp } from '@/utils/http/axios';
+import {DetailParams} from './model/wfSchemeInfoModel'
+
+ enum Api {
+ // 创建流程
+ LoadMyUserList = '/api/WFDelegate/LoadMyUserList',
+
+}
+
+/**
+ * @description: getLoadMyUserList
+ */
+ export function getLoadMyUserList(params?: DetailParams) {
+ return defHttp.get({ url: Api.LoadMyUserList, params });
+}
\ No newline at end of file
diff --git a/src/api/sys/WFProcess.ts b/src/api/sys/WFProcess.ts
new file mode 100644
index 0000000..82dc14b
--- /dev/null
+++ b/src/api/sys/WFProcess.ts
@@ -0,0 +1,34 @@
+
+// WFProcess 流程模版基本信息
+import { defHttp } from '@/utils/http/axios';
+import {CreateParams} from './model/WFProcessModel'
+
+ enum Api {
+ // 创建流程
+ Create = '/api/WFProcess/Create',
+ SaveDraft='/api/WFProcess/SaveDraft'
+
+}
+
+/**
+ * @description: 创建流程
+ */
+export function create( params?:CreateParams) {
+ return defHttp.post(
+ {
+ url: Api.Create,
+ params,
+ },
+ );
+}
+/**
+ * @description: 保存草稿
+ */
+ export function saveDraft( params?:CreateParams) {
+ return defHttp.post(
+ {
+ url: Api.SaveDraft,
+ params,
+ },
+ );
+}
\ No newline at end of file
diff --git a/src/api/sys/WFSchemeInfo.ts b/src/api/sys/WFSchemeInfo.ts
index 882995d..5b56b7e 100644
--- a/src/api/sys/WFSchemeInfo.ts
+++ b/src/api/sys/WFSchemeInfo.ts
@@ -14,6 +14,8 @@ import {SchemeListParams,GetSchemeModel,AddParams,
// 流程模板详细信息
LoadHistoryPage= '/api/WFScheme/LoadPage',
UpdateScheme='/api/WFSchemeInfo/UpdateScheme',
+ // 获取自定义流程列表(流程发起页)
+ GetInfoList='/api/WFSchemeInfo/GetInfoList'
}
/**
@@ -59,3 +61,10 @@ export function updateScheme(params:SchemeParams){
return defHttp.post({ url: Api.UpdateScheme + "?id=" + params.id +"&schemeId="+params.schemeId});
}
+/**
+ * @description: getInfoList 获取流程自定义列表
+ */
+ export function getInfoList(params) {
+ return defHttp.get({ url: Api.GetInfoList, params });
+}
+
diff --git a/src/api/sys/model/WFProcessModel.ts b/src/api/sys/model/WFProcessModel.ts
new file mode 100644
index 0000000..144629d
--- /dev/null
+++ b/src/api/sys/model/WFProcessModel.ts
@@ -0,0 +1,21 @@
+/**
+ * @description: 创建流程参数
+ */
+ export interface CreateParams {
+ processId: string,
+ schemeCode: string,
+ title: string,
+ userId: string,
+ toUserId: string,
+ nextUsers: {
+ additionalProp1: string,
+ additionalProp2: string,
+ additionalProp3: string
+ },
+ des: string,
+ code: string,
+ name: string,
+ stampImg: string,
+ stampPassWord: string,
+ nextId: string
+}
\ No newline at end of file
diff --git a/src/components/ProcessDesigner/package/penal/PropertiesPanel.vue b/src/components/ProcessDesigner/package/penal/PropertiesPanel.vue
index b9729f0..a48cbcd 100644
--- a/src/components/ProcessDesigner/package/penal/PropertiesPanel.vue
+++ b/src/components/ProcessDesigner/package/penal/PropertiesPanel.vue
@@ -2,22 +2,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -55,10 +72,12 @@
import userTaskOption from './userTask/index.vue'
// 结束节点
import endEventOption from './endEvent/index.vue'
- // 网关和
- import gatewayAndOption from './config/gatewayAnd.vue'
+ // 并行网关
+ import parallelGatewayOption from './parallelGateway/index.vue'
// 排他网关
import exclusiveGatewayOption from './exclusiveGateway/index.vue'
+ // 包容网关
+ import inclusiveGatewayOption from './inclusiveGateway/index.vue'
// 网关Xor
import gatewayXorOption from './config/gatewayXor.vue'
// 脚本任务
@@ -96,13 +115,15 @@
const taskRef = ref < any > ()
const endRef = ref < any > ()
const subprocessRef = ref < any > ()
- const exclusiveGatewayRef = ref < any > ()
+ const exclusiveGatewayRef = ref < any > ()
+ const parallelGatewayRef = ref < any > ()
+ const inclusiveGatewayRef = ref < any > ()
const configActiveName = ref('2')
const data = reactive({
currentWfNode: undefined,
wfNodeName: "",
- wfData:[],
- flowRef:{}
+ wfData: [],
+ flowRef: {}
})
watch(
() => props.element,
@@ -153,6 +174,20 @@
type: newVal.type
}
break;
+ case 'ParallelGateway':
+ data.wfNodeName = "并行网关"
+ data.currentWfNode = {
+ id: newVal.id,
+ type: newVal.type
+ }
+ break;
+ case 'InclusiveGateway':
+ data.wfNodeName = "包含网关"
+ data.currentWfNode = {
+ id: newVal.id,
+ type: newVal.type
+ }
+ break;
case 'SequenceFlow':
data.wfNodeName = "线条"
data.currentWfNode = {
@@ -160,9 +195,9 @@
type: newVal.type
}
// 获取线条两头的节点id
- data.flowRef={
- from:newVal.businessObject.sourceRef.id,
- to:newVal.businessObject.targetRef.id,
+ data.flowRef = {
+ from: newVal.businessObject.sourceRef.id,
+ to: newVal.businessObject.targetRef.id,
}
// 获取排他网关和审核节点的数据,为选择流转条件使用
getWfData()
@@ -279,8 +314,8 @@
}
}
});
- data.wfData = wfData
-
+ data.wfData = wfData
+
}
async function validatePanel() {
let res = await shcemeinfoRef.value.validateForm();
@@ -320,6 +355,16 @@
if (gatewayInclusiveFrom != undefined) {
wfData.push(gatewayInclusiveFrom)
}
+ // 并排网关
+ let parallelGatewayFrom = await !(parallelGatewayRef.value) ? {} : parallelGatewayRef.value.getForm();
+ if (parallelGatewayFrom != undefined) {
+ wfData.push(parallelGatewayFrom)
+ }
+ // 包含网关
+ let inclusiveGatewayFrom = await !(inclusiveGatewayRef.value) ? {} : inclusiveGatewayRef.value.getForm();
+ if (inclusiveGatewayFrom != undefined) {
+ wfData.push(inclusiveGatewayFrom)
+ }
// 3.流程节点信息
wfData.forEach(node => {
if (node.type == 'myline' && !node.isInit) {
diff --git a/src/components/ProcessDesigner/package/penal/config/gatewayAnd.vue b/src/components/ProcessDesigner/package/penal/config/gatewayAnd.vue
deleted file mode 100644
index 80a70ed..0000000
--- a/src/components/ProcessDesigner/package/penal/config/gatewayAnd.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/ProcessDesigner/package/penal/exclusiveGateway/index.vue b/src/components/ProcessDesigner/package/penal/exclusiveGateway/index.vue
index e7702e6..a87f402 100644
--- a/src/components/ProcessDesigner/package/penal/exclusiveGateway/index.vue
+++ b/src/components/ProcessDesigner/package/penal/exclusiveGateway/index.vue
@@ -41,6 +41,7 @@
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/components/ProcessDesigner/package/penal/inclusiveGateway/index.vue b/src/components/ProcessDesigner/package/penal/inclusiveGateway/index.vue
new file mode 100644
index 0000000..618042a
--- /dev/null
+++ b/src/components/ProcessDesigner/package/penal/inclusiveGateway/index.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+ 公式
+ sql语句
+
+ 清空
+
+
+
+
+
+ {{ text }}
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/ProcessDesigner/package/penal/parallelGateway/index.vue b/src/components/ProcessDesigner/package/penal/parallelGateway/index.vue
new file mode 100644
index 0000000..355b56e
--- /dev/null
+++ b/src/components/ProcessDesigner/package/penal/parallelGateway/index.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/ProcessDesigner/package/penal/startEvent/index.vue b/src/components/ProcessDesigner/package/penal/startEvent/index.vue
index 94fedaf..26c5dbd 100644
--- a/src/components/ProcessDesigner/package/penal/startEvent/index.vue
+++ b/src/components/ProcessDesigner/package/penal/startEvent/index.vue
@@ -218,6 +218,14 @@
node.value.authFields = node.value.authFields.filter(item => item.field !== key);
}
function getForm() {
+ if(node.value.messageType != ""){
+ if(node.value.messageType.length > 1){
+ node.value.messageType = node.value.messageType.join(',')
+
+ }else{
+ node.value.messageType = node.value.messageType[0]
+ }
+ }
return node.value
}
defineExpose({
diff --git a/src/components/ProcessDesigner/package/penal/userTask/index.vue b/src/components/ProcessDesigner/package/penal/userTask/index.vue
index d9e5040..13208cc 100644
--- a/src/components/ProcessDesigner/package/penal/userTask/index.vue
+++ b/src/components/ProcessDesigner/package/penal/userTask/index.vue
@@ -334,7 +334,6 @@
let wfData = scheme.wfData
wfData.forEach(element => {
if (element.id == node.value.id) {
- console.log(node)
node.value = element
}
});
@@ -420,6 +419,11 @@
}
function getForm() {
if (node.value.id != '') {
+ if (node.value.overtimeMessageType.length > 1) {
+ node.value.overtimeMessageType = node.value.overtimeMessageType.join(',')
+ } else {
+ node.value.overtimeMessageType = node.value.overtimeMessageType[0]
+ }
return node.value
}
}
diff --git a/src/components/ProcessViewer/index.vue b/src/components/ProcessViewer/index.vue
new file mode 100644
index 0000000..e7fe146
--- /dev/null
+++ b/src/components/ProcessViewer/index.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/locales/lang/zh-CN/routes/demo.json b/src/locales/lang/zh-CN/routes/demo.json
index e6ef77e..6421486 100644
--- a/src/locales/lang/zh-CN/routes/demo.json
+++ b/src/locales/lang/zh-CN/routes/demo.json
@@ -178,6 +178,7 @@
"vxeTable": "VxeTable"
},
"workflow":{
- "scheme_preview":"流程模板设计"
+ "scheme_preview":"流程模板设计",
+ "create_preview":"流程发起"
}
}
diff --git a/src/router/routes/modules/dashboard.ts b/src/router/routes/modules/dashboard.ts
index 3dc2716..febd17e 100644
--- a/src/router/routes/modules/dashboard.ts
+++ b/src/router/routes/modules/dashboard.ts
@@ -25,7 +25,7 @@ const dashboard: AppRouteModule = {
},
{
path: 'scheme_preview/:id',
- name: 'AccountDetail',
+ name: 'SchemePreview',
meta: {
hideMenu: true,
title: t('routes.demo.workflow.scheme_preview'),
@@ -35,6 +35,18 @@ const dashboard: AppRouteModule = {
},
component: () => import('@/views/demo/workflow/scheme/preview.vue'),
},
+ {
+ path: 'create_preview/:id',
+ name: 'CreatePreview',
+ meta: {
+ hideMenu: true,
+ title: t('routes.demo.workflow.create_preview'),
+ ignoreKeepAlive: true,
+ showMenu: false,
+ currentActiveMenu: '/workflow/create',
+ },
+ component: () => import('@/views/demo/workflow/create/preview.vue'),
+ },
],
};
diff --git a/src/utils/uuid.ts b/src/utils/uuid.ts
index 548bcf3..934b9f0 100644
--- a/src/utils/uuid.ts
+++ b/src/utils/uuid.ts
@@ -2,7 +2,21 @@ const hexList: string[] = [];
for (let i = 0; i <= 15; i++) {
hexList[i] = i.toString(16);
}
-
+export function buildGUID(): string {
+ let guid = '';
+ for (let i = 1; i <= 36; i++) {
+ if (i === 9 || i === 14 || i === 19 || i === 24) {
+ guid += '-';
+ } else if (i === 15) {
+ guid += 4;
+ } else if (i === 20) {
+ guid += hexList[(Math.random() * 4) | 8];
+ } else {
+ guid += hexList[(Math.random() * 16) | 0];
+ }
+ }
+ return guid;
+}
export function buildUUID(): string {
let uuid = '';
for (let i = 1; i <= 36; i++) {
diff --git a/src/views/demo/workflow/create/index.vue b/src/views/demo/workflow/create/index.vue
index 503810e..2ebde91 100644
--- a/src/views/demo/workflow/create/index.vue
+++ b/src/views/demo/workflow/create/index.vue
@@ -1,3 +1,105 @@
- 流程发起
-
\ No newline at end of file
+
+
+
{{item.category}}【{{item.data.length}}】
+
+
+
+
+
+
+
+
+ {{ itemchild.name }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/demo/workflow/create/preview.vue b/src/views/demo/workflow/create/preview.vue
new file mode 100644
index 0000000..65c998c
--- /dev/null
+++ b/src/views/demo/workflow/create/preview.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/demo/workflow/scheme/HistoryDrawer.vue b/src/views/demo/workflow/scheme/HistoryDrawer.vue
index e516d7e..443550e 100644
--- a/src/views/demo/workflow/scheme/HistoryDrawer.vue
+++ b/src/views/demo/workflow/scheme/HistoryDrawer.vue
@@ -18,7 +18,7 @@