diff --git "a/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-bpmn.jpg" "b/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-bpmn.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..2a61f60f869b28dce151f0964a1aaad8c0b333cd Binary files /dev/null and "b/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-bpmn.jpg" differ diff --git "a/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-simple.jpg" "b/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-simple.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..9ef2c9e293b2eb91f0e0b19c63bdbda263f3254b Binary files /dev/null and "b/.image/\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241\345\231\250-simple.jpg" differ diff --git a/README.md b/README.md index a7a0a9420d577db28c3f15cd5fb9b9836ec05de4..6ca2dbf96d105abb931e9556e9b37f62d36113fa 100644 --- a/README.md +++ b/README.md @@ -120,18 +120,22 @@ ### 工作流程 -| | 功能 | 描述 | -|-----|-------|----------------------------------------| -| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 | -| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | -| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | -| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | -| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 | -| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 | -| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | +| | 功能 | 描述 | +|----|-------|-----------------------------------------| +| 🚀 | 流程模型 | 配置工作流的流程模型,支持 BPMN 和仿钉钉/飞书设计器 | +| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | +| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | +| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | +| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转派、委派、退回、加减签等操作 | +| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,支持流程预测,展示未来审批人信息 | +| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | ![功能图](/.image/common/bpm-feature.png) +| BPMN 设计器 | 钉钉/飞书设计器 | +|------------------------------|--------------------------------| +| ![](/.image/工作流设计器-bpmn.jpg) | ![](/.image/工作流设计器-simple.jpg) | + ### 支付系统 | | 功能 | 描述 | diff --git a/package.json b/package.json index a4775dca8a342691f0db8c74cf2ecc17cbd601f8..e2fe75f92224c1097d64cc838e7776fc1ab1390f 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "pinia-plugin-persistedstate": "^3.2.1", "qrcode": "^1.5.3", "qs": "^6.12.0", + "sortablejs": "^1.15.3", "steady-xml": "^0.1.0", "url": "^0.11.3", "video.js": "^7.21.5", @@ -95,7 +96,7 @@ "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^3.1.0", "autoprefixer": "^10.4.17", - "bpmn-js": "8.9.0", + "bpmn-js": "8.10.0", "bpmn-js-properties-panel": "0.46.0", "consola": "^3.2.3", "eslint": "^8.57.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4d1a821895f45930abd37caf8cb53b83d9a37e4..fff5b427ed2ea8f3c529d901d60b4a89cc84c7c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 2.3.1(vue@3.5.12(typescript@5.3.3)) '@form-create/designer': specifier: ^3.2.6 - version: 3.2.7(vue@3.5.12(typescript@5.3.3)) + version: 3.2.8(vue@3.5.12(typescript@5.3.3)) '@form-create/element-ui': specifier: ^3.2.11 - version: 3.2.11(vue@3.5.12(typescript@5.3.3)) + version: 3.2.13(vue@3.5.12(typescript@5.3.3)) '@iconify/iconify': specifier: ^3.1.1 version: 3.1.1 @@ -125,6 +125,9 @@ importers: qs: specifier: ^6.12.0 version: 6.12.1 + sortablejs: + specifier: ^1.15.3 + version: 1.15.3 steady-xml: specifier: ^0.1.0 version: 0.1.0 @@ -214,11 +217,11 @@ importers: specifier: ^10.4.17 version: 10.4.19(postcss@8.4.38) bpmn-js: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 bpmn-js-properties-panel: specifier: 0.46.0 - version: 0.46.0(bpmn-js@8.9.0) + version: 0.46.0(bpmn-js@8.10.0) consola: specifier: ^3.2.3 version: 3.2.3 @@ -296,7 +299,7 @@ importers: version: 0.8.0(rollup@4.17.1) unplugin-vue-components: specifier: ^0.25.2 - version: 0.25.2(@babel/parser@7.25.8)(rollup@4.17.1)(vue@3.5.12(typescript@5.3.3)) + version: 0.25.2(@babel/parser@7.26.2)(rollup@4.17.1)(vue@3.5.12(typescript@5.3.3)) vite: specifier: 5.1.4 version: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) @@ -451,16 +454,16 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': @@ -484,8 +487,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.25.8': - resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.25.8.tgz} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.26.2.tgz} engines: {node: '>=6.0.0'} hasBin: true @@ -961,8 +964,8 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.8': - resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.25.8.tgz} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.26.0.tgz} engines: {node: '>=6.9.0'} '@bpmn-io/diagram-js-ui@0.2.3': @@ -1070,7 +1073,7 @@ packages: postcss-selector-parser: ^6.0.13 '@ctrl/tinycolor@3.6.1': - resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz} + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} '@dual-bundle/import-meta-resolve@4.0.0': @@ -1238,13 +1241,13 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@floating-ui/core@1.6.1': - resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==, tarball: https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.1.tgz} + resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} '@floating-ui/dom@1.6.4': - resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==, tarball: https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.4.tgz} + resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==} '@floating-ui/utils@0.2.2': - resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==, tarball: https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.2.tgz} + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} '@form-create/component-elm-checkbox@3.2.8': resolution: {integrity: sha512-ol/SyzzeDueUTd87MPnYydOe7Sc6cL8S/Uhv5QmWofMY1TuuBet9DPb65JjyS6Lk51/cl3TabvtJj93EAxL6KA==, tarball: https://registry.npmmirror.com/@form-create/component-elm-checkbox/-/component-elm-checkbox-3.2.8.tgz} @@ -1264,8 +1267,8 @@ packages: '@form-create/component-elm-tree@3.2.9': resolution: {integrity: sha512-5NG4YeFZ5jzN9Aa0JFuFD8OGKXBqSHSN0KRgxxUgdhzRg8hcRq/JODuN7yYMa7YrBP0ecTKyel8Q4ufR5Ct8iw==, tarball: https://registry.npmmirror.com/@form-create/component-elm-tree/-/component-elm-tree-3.2.9.tgz} - '@form-create/component-elm-upload@3.2.9': - resolution: {integrity: sha512-PdYlUCRs7x/zQjkDkTX9q3116ysKUPZ4R4OwzhSc430JPLSVUCx/CqlhenbAnqZFEj5khwnvppbYSzrTTaDa4A==, tarball: https://registry.npmmirror.com/@form-create/component-elm-upload/-/component-elm-upload-3.2.9.tgz} + '@form-create/component-elm-upload@3.2.13': + resolution: {integrity: sha512-qngh1Hzb/Oo51gbh3LDiMmUnDaa2+k7sXS4GEZujoDuKCctBjG60y3pi214CmOqBq9PiynM8knf6yQKqpjlRqA==, tarball: https://registry.npmmirror.com/@form-create/component-elm-upload/-/component-elm-upload-3.2.13.tgz} '@form-create/component-subform@3.1.34': resolution: {integrity: sha512-OJcFH/7MTHx7JLEjDK/weS27qfuFWAI+OK+gXTJ2jIt9aZkGWF/EWkjetiJLt5a0KMw4Z15wOS2XCY9pVK9vlA==, tarball: https://registry.npmmirror.com/@form-create/component-subform/-/component-subform-3.1.34.tgz} @@ -1273,18 +1276,18 @@ packages: '@form-create/component-wangeditor@3.1.20': resolution: {integrity: sha512-lAjpltmYfr3a2AeXasCehGsZNL/1WB6vWqqV9TIsJ4pleTr0/D/oPwEYQjfv+gG+NoB2Sa25SRGhtlnephjyhg==, tarball: https://registry.npmmirror.com/@form-create/component-wangeditor/-/component-wangeditor-3.1.20.tgz} - '@form-create/core@3.2.11': - resolution: {integrity: sha512-xcaAxFSpAaVRWSpZ3ikrr89OmGidtN1y2YC7mQcQ/Hs7KvdbipH2I27JF5qm98+S7gs/e3Z9jrscngmSwsLw7g==, tarball: https://registry.npmmirror.com/@form-create/core/-/core-3.2.11.tgz} + '@form-create/core@3.2.13': + resolution: {integrity: sha512-HVLfZ5gf9DRO74OJTw3bt/GwFXhyBWvMmrOG9WkRTEQEMIeGOWudH843iaYp2ljgJN6jrn3RcCfONC9nzAmk8g==, tarball: https://registry.npmmirror.com/@form-create/core/-/core-3.2.13.tgz} peerDependencies: vue: ^3.1.0 - '@form-create/designer@3.2.7': - resolution: {integrity: sha512-jLpX51yXt2SOmsGOiDey5wq6K6gQLfd7CcGtW6zH2tDQTJd4ddS/QstVKmei6ddIwA9GWuk3JWnktGLk4ry2sg==, tarball: https://registry.npmmirror.com/@form-create/designer/-/designer-3.2.7.tgz} + '@form-create/designer@3.2.8': + resolution: {integrity: sha512-SgrGiWOFaQTARAmysepHDtFyRi97rERrlkv1joz+DCOAzZME3RKRTXVqA7ALzJ2jI3psiCosGAK4rPSLh6EvgA==, tarball: https://registry.npmmirror.com/@form-create/designer/-/designer-3.2.8.tgz} peerDependencies: vue: ^3.1.5 - '@form-create/element-ui@3.2.11': - resolution: {integrity: sha512-cJpKuu5zGNJK5TlsXTLqfc972aAVYk4q2ljn0ERfxM89oRl+2tkatOVr2vPYqGj/Z4Ufpr1R/ZP+RGGl2jVIHQ==, tarball: https://registry.npmmirror.com/@form-create/element-ui/-/element-ui-3.2.11.tgz} + '@form-create/element-ui@3.2.13': + resolution: {integrity: sha512-b/ilL9/huwQhXhGM3irzKTqlF7n69ld/CPiLQzuzSEUFC4VqBNFcy8kpCQ9/j4+VvuEPCvro1ax3v4V7Mxol9g==, tarball: https://registry.npmmirror.com/@form-create/element-ui/-/element-ui-3.2.13.tgz} peerDependencies: vue: ^3.1.0 @@ -1437,7 +1440,7 @@ packages: resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==} '@rollup/plugin-virtual@3.0.2': - resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==, tarball: https://registry.npmmirror.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz} + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1615,7 +1618,7 @@ packages: os: [win32] '@swc/core@1.7.26': - resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==, tarball: https://registry.npmmirror.com/@swc/core/-/core-1.7.26.tgz} + resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1624,10 +1627,10 @@ packages: optional: true '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, tarball: https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz} + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==, tarball: https://registry.npmmirror.com/@swc/types/-/types-0.1.12.tgz} + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} '@sxzz/popperjs-es@2.11.7': resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==, tarball: https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz} @@ -1781,7 +1784,7 @@ packages: resolution: {integrity: sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ==, tarball: https://registry.npmmirror.com/@types/video.js/-/video.js-7.3.58.tgz} '@types/web-bluetooth@0.0.16': - resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz} + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -2127,19 +2130,19 @@ packages: resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} '@vueuse/core@9.13.0': - resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz} + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} '@vueuse/metadata@10.9.0': resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} '@vueuse/metadata@9.13.0': - resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz} + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} '@vueuse/shared@10.9.0': resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} '@vueuse/shared@9.13.0': - resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz} + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} '@wangeditor/basic-modules@1.1.7': resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==} @@ -2347,7 +2350,7 @@ packages: engines: {node: '>=8'} async-validator@4.2.5: - resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz} + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} @@ -2432,11 +2435,11 @@ packages: bpmn-js-token-simulation@0.10.0: resolution: {integrity: sha512-QuZQ/KVXKt9Vl+XENyOBoTW2Aw+uKjuBlKdCJL6El7AyM7DkJ5bZkSYURshId1SkBDdYg2mJ1flSmsrhGuSfwg==} - bpmn-js@8.9.0: - resolution: {integrity: sha512-cthSxiJUpEHspiUKiL0YA8/mRCYngNKwALWieLKPtFo42n+vWTFgmxnASNRwhxpPEbSXjYuTah1lZ0lSyLWPpw==} + bpmn-js@8.10.0: + resolution: {integrity: sha512-NozeOi01qL0ZdVq8+5hWZcikyEvgrP1yzCBqlhSufJdHFsnEMBCwn2bJJ0B/6JgX+IBwy1sk/Uw+Ds8rQ8vfrw==, tarball: https://registry.npmmirror.com/bpmn-js/-/bpmn-js-8.10.0.tgz} bpmn-moddle@7.1.3: - resolution: {integrity: sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==} + resolution: {integrity: sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==, tarball: https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz} brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2733,7 +2736,7 @@ packages: engines: {node: '>= 6'} css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, tarball: https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -2968,7 +2971,7 @@ packages: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} diagram-js-direct-editing@1.8.0: - resolution: {integrity: sha512-B4Xj+PJfgBjbPEzT3uZQEkZI5xHFB0Izc+7BhDFuHidzrEMzQKZrFGdA3PqfWhReHf3dp+iB6Tt11G9eGNjKMw==} + resolution: {integrity: sha512-B4Xj+PJfgBjbPEzT3uZQEkZI5xHFB0Izc+7BhDFuHidzrEMzQKZrFGdA3PqfWhReHf3dp+iB6Tt11G9eGNjKMw==, tarball: https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-1.8.0.tgz} peerDependencies: diagram-js: '*' @@ -2976,10 +2979,10 @@ packages: resolution: {integrity: sha512-LF9BiwjbOPpZd0ez5VSlYRbdbEA59YQX43bWvNDp1rLMv0xwZ5yIg4oaYDK82nIQ0kH1tjvoQRpNevMTCgQVyw==} diagram-js@7.9.0: - resolution: {integrity: sha512-o1yUtX5TXV1pmpevP55gxU/AEG6nCidOXGs/HLuxNXG0zMZ3jQta7kMqRxTK93rNw/XuHmP1eMOwdvdJ2RP5qA==} + resolution: {integrity: sha512-o1yUtX5TXV1pmpevP55gxU/AEG6nCidOXGs/HLuxNXG0zMZ3jQta7kMqRxTK93rNw/XuHmP1eMOwdvdJ2RP5qA==, tarball: https://registry.npmmirror.com/diagram-js/-/diagram-js-7.9.0.tgz} didi@5.2.1: - resolution: {integrity: sha512-IKNnajUlD4lWMy/Q9Emkk7H1qnzREgY4UyE3IhmOi/9IKua0JYtYldk928bOdt1yNxN8EiOy1sqtSozEYsmjCg==} + resolution: {integrity: sha512-IKNnajUlD4lWMy/Q9Emkk7H1qnzREgY4UyE3IhmOi/9IKua0JYtYldk928bOdt1yNxN8EiOy1sqtSozEYsmjCg==, tarball: https://registry.npmmirror.com/didi/-/didi-5.2.1.tgz} didi@9.0.2: resolution: {integrity: sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==} @@ -3075,7 +3078,7 @@ packages: resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==} element-plus@2.8.4: - resolution: {integrity: sha512-ZlVAdUOoJliv4kW3ntWnnSHMT+u/Os7mXJjk2xzOlqNeHaI2/ozlF+R58ZCEak8ZnDi6+5A2viWEYRsq64IuiA==, tarball: https://registry.npmmirror.com/element-plus/-/element-plus-2.8.4.tgz} + resolution: {integrity: sha512-ZlVAdUOoJliv4kW3ntWnnSHMT+u/Os7mXJjk2xzOlqNeHaI2/ozlF+R58ZCEak8ZnDi6+5A2viWEYRsq64IuiA==} peerDependencies: vue: ^3.2.0 @@ -3160,7 +3163,7 @@ packages: engines: {node: '>=6'} escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz} + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -4019,7 +4022,7 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} lodash-unified@1.0.3: - resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==, tarball: https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz} + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} peerDependencies: '@types/lodash-es': '*' lodash: '*' @@ -4158,7 +4161,7 @@ packages: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==, tarball: https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz} + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} @@ -4207,7 +4210,7 @@ packages: engines: {node: '>=12'} min-dash@3.8.1: - resolution: {integrity: sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==} + resolution: {integrity: sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==, tarball: https://registry.npmmirror.com/min-dash/-/min-dash-3.8.1.tgz} min-dash@4.2.1: resolution: {integrity: sha512-to+unsToePnm7cUeR9TrMzFlETHd/UXmU+ELTRfWZj5XGT41KF6X3L233o3E/GdEs3sk2Tbw/lOLD1avmWkg8A==} @@ -4260,10 +4263,10 @@ packages: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} moddle-xml@9.0.6: - resolution: {integrity: sha512-tl0reHpsY/aKlLGhXeFlQWlYAQHFxTkFqC8tq8jXRYpQSnLVw13T6swMaourLd7EXqHdWsc+5ggsB+fEep6xZQ==} + resolution: {integrity: sha512-tl0reHpsY/aKlLGhXeFlQWlYAQHFxTkFqC8tq8jXRYpQSnLVw13T6swMaourLd7EXqHdWsc+5ggsB+fEep6xZQ==, tarball: https://registry.npmmirror.com/moddle-xml/-/moddle-xml-9.0.6.tgz} moddle@5.0.4: - resolution: {integrity: sha512-Kjb+hjuzO+YlojNGxEUXvdhLYTHTtAABDlDcJTtTcn5MbJF9Zkv4I1Fyvp3Ypmfgg1EfHDZ3PsCQTuML9JD6wg==} + resolution: {integrity: sha512-Kjb+hjuzO+YlojNGxEUXvdhLYTHTtAABDlDcJTtTcn5MbJF9Zkv4I1Fyvp3Ypmfgg1EfHDZ3PsCQTuML9JD6wg==, tarball: https://registry.npmmirror.com/moddle/-/moddle-5.0.4.tgz} mpd-parser@0.22.1: resolution: {integrity: sha512-fwBebvpyPUU8bOzvhX0VQZgSohncbgYwUyJJoTSNpmy7ccD2ryiCvM7oRkn/xQH5cv73/xU7rJSNCLjdGFor0Q==} @@ -4329,7 +4332,7 @@ packages: engines: {node: '>=0.10.0'} normalize-wheel-es@1.2.0: - resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==, tarball: https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz} + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -4364,7 +4367,7 @@ packages: engines: {node: '>= 0.4'} object-refs@0.3.0: - resolution: {integrity: sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ==} + resolution: {integrity: sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ==, tarball: https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz} object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} @@ -4491,8 +4494,8 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -4852,7 +4855,7 @@ packages: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} saxen@8.1.2: - resolution: {integrity: sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw==} + resolution: {integrity: sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw==, tarball: https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz} scroll-into-view-if-needed@2.2.31: resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} @@ -4956,6 +4959,9 @@ packages: sortablejs@1.14.0: resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} + sortablejs@1.15.3: + resolution: {integrity: sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -4980,7 +4986,7 @@ packages: engines: {node: '>=0.10.0'} source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} split-string@3.1.0: @@ -5167,7 +5173,7 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} tiny-svg@2.2.4: - resolution: {integrity: sha512-NOi39lBknf4UdDEahNkbEAJnzhu1ZcN2j75IS2vLRmIhsfxdZpTChfLKBcN1ShplVmPIXJAIafk6YY5/Aa80lQ==} + resolution: {integrity: sha512-NOi39lBknf4UdDEahNkbEAJnzhu1ZcN2j75IS2vLRmIhsfxdZpTChfLKBcN1ShplVmPIXJAIafk6YY5/Aa80lQ==, tarball: https://registry.npmmirror.com/tiny-svg/-/tiny-svg-2.2.4.tgz} tiny-svg@3.0.1: resolution: {integrity: sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==} @@ -5376,7 +5382,7 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==, tarball: https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz} + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true vary@1.1.2: @@ -5426,7 +5432,7 @@ packages: vite: '>=2.0.0' vite-plugin-top-level-await@1.4.4: - resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==, tarball: https://registry.npmmirror.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.4.tgz} + resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} peerDependencies: vite: '>=2.8' @@ -5812,11 +5818,11 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.25.7': {} + '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.23.5': {} @@ -5845,9 +5851,9 @@ snapshots: dependencies: '@babel/types': 7.24.0 - '@babel/parser@7.25.8': + '@babel/parser@7.26.2': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.26.0 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)': dependencies: @@ -6418,11 +6424,10 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - '@babel/types@7.25.8': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@bpmn-io/diagram-js-ui@0.2.3': dependencies: @@ -6702,7 +6707,7 @@ snapshots: dependencies: '@form-create/utils': 3.2.0 - '@form-create/component-elm-upload@3.2.9': + '@form-create/component-elm-upload@3.2.13': dependencies: '@form-create/utils': 3.2.0 @@ -6712,15 +6717,15 @@ snapshots: dependencies: wangeditor: 4.7.15 - '@form-create/core@3.2.11(vue@3.5.12(typescript@5.3.3))': + '@form-create/core@3.2.13(vue@3.5.12(typescript@5.3.3))': dependencies: '@form-create/utils': 3.2.0 vue: 3.5.12(typescript@5.3.3) - '@form-create/designer@3.2.7(vue@3.5.12(typescript@5.3.3))': + '@form-create/designer@3.2.8(vue@3.5.12(typescript@5.3.3))': dependencies: '@form-create/component-wangeditor': 3.1.20 - '@form-create/element-ui': 3.2.11(vue@3.5.12(typescript@5.3.3)) + '@form-create/element-ui': 3.2.13(vue@3.5.12(typescript@5.3.3)) '@form-create/utils': 3.2.0 codemirror: 6.65.7 element-plus: 2.8.4(vue@3.5.12(typescript@5.3.3)) @@ -6729,7 +6734,7 @@ snapshots: transitivePeerDependencies: - '@vue/composition-api' - '@form-create/element-ui@3.2.11(vue@3.5.12(typescript@5.3.3))': + '@form-create/element-ui@3.2.13(vue@3.5.12(typescript@5.3.3))': dependencies: '@form-create/component-elm-checkbox': 3.2.8 '@form-create/component-elm-frame': 3.2.0 @@ -6737,9 +6742,9 @@ snapshots: '@form-create/component-elm-radio': 3.2.8 '@form-create/component-elm-select': 3.2.0 '@form-create/component-elm-tree': 3.2.9 - '@form-create/component-elm-upload': 3.2.9 + '@form-create/component-elm-upload': 3.2.13 '@form-create/component-subform': 3.1.34 - '@form-create/core': 3.2.11(vue@3.5.12(typescript@5.3.3)) + '@form-create/core': 3.2.13(vue@3.5.12(typescript@5.3.3)) '@form-create/utils': 3.2.0 vue: 3.5.12(typescript@5.3.3) @@ -7674,7 +7679,7 @@ snapshots: '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.25.8 + '@babel/parser': 7.26.2 '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 @@ -7704,7 +7709,7 @@ snapshots: '@vue/compiler-sfc@3.5.12': dependencies: - '@babel/parser': 7.25.8 + '@babel/parser': 7.26.2 '@vue/compiler-core': 3.5.12 '@vue/compiler-dom': 3.5.12 '@vue/compiler-ssr': 3.5.12 @@ -8109,11 +8114,11 @@ snapshots: boolbase@1.0.0: {} - bpmn-js-properties-panel@0.46.0(bpmn-js@8.9.0): + bpmn-js-properties-panel@0.46.0(bpmn-js@8.10.0): dependencies: '@bpmn-io/element-templates-validator': 0.2.0 '@bpmn-io/extract-process-variables': 0.4.5 - bpmn-js: 8.9.0 + bpmn-js: 8.10.0 ids: 1.0.5 inherits: 2.0.4 lodash: 4.17.21 @@ -8128,7 +8133,7 @@ snapshots: min-dom: 0.2.0 svg.js: 2.7.1 - bpmn-js@8.9.0: + bpmn-js@8.10.0: dependencies: bpmn-moddle: 7.1.3 css.escape: 1.5.1 @@ -10377,7 +10382,7 @@ snapshots: picocolors@1.0.0: {} - picocolors@1.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -10463,7 +10468,7 @@ snapshots: postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 posthtml-parser@0.2.1: @@ -10862,6 +10867,8 @@ snapshots: sortablejs@1.14.0: {} + sortablejs@1.15.3: {} + source-map-js@1.2.0: {} source-map-js@1.2.1: {} @@ -11328,7 +11335,7 @@ snapshots: transitivePeerDependencies: - rollup - unplugin-vue-components@0.25.2(@babel/parser@7.25.8)(rollup@4.17.1)(vue@3.5.12(typescript@5.3.3)): + unplugin-vue-components@0.25.2(@babel/parser@7.26.2)(rollup@4.17.1)(vue@3.5.12(typescript@5.3.3)): dependencies: '@antfu/utils': 0.7.7 '@rollup/pluginutils': 5.1.0(rollup@4.17.1) @@ -11342,7 +11349,7 @@ snapshots: unplugin: 1.10.1 vue: 3.5.12(typescript@5.3.3) optionalDependencies: - '@babel/parser': 7.25.8 + '@babel/parser': 7.26.2 transitivePeerDependencies: - rollup - supports-color diff --git a/src/api/bpm/activity/index.ts b/src/api/bpm/activity/index.ts deleted file mode 100644 index 870d0d6cdb0902d82a801b4b3e82996cc7914faa..0000000000000000000000000000000000000000 --- a/src/api/bpm/activity/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import request from '@/config/axios' - -export const getActivityList = async (params) => { - return await request.get({ - url: '/bpm/activity/list', - params - }) -} diff --git a/src/api/bpm/category/index.ts b/src/api/bpm/category/index.ts index d1e109cb9c125c8a8b0c28665c88a5878ab6a7b3..1854f31c7b1ae7d1abf01796efa11af4dadeb9bc 100644 --- a/src/api/bpm/category/index.ts +++ b/src/api/bpm/category/index.ts @@ -36,6 +36,16 @@ export const CategoryApi = { return await request.put({ url: `/bpm/category/update`, data }) }, + // 批量修改流程分类的排序 + updateCategorySortBatch: async (ids: number[]) => { + return await request.put({ + url: `/bpm/category/update-sort-batch`, + params: { + ids: ids.join(',') + } + }) + }, + // 删除流程分类 deleteCategory: async (id: number) => { return await request.delete({ url: `/bpm/category/delete?id=` + id }) diff --git a/src/api/bpm/model/index.ts b/src/api/bpm/model/index.ts index 46728637576e2f8e58826c337a1f853988d6f466..0c499dbad90e3226f5285265eb1865710a1c70eb 100644 --- a/src/api/bpm/model/index.ts +++ b/src/api/bpm/model/index.ts @@ -26,8 +26,8 @@ export type ModelVO = { bpmnXml: string } -export const getModelPage = async (params) => { - return await request.get({ url: '/bpm/model/page', params }) +export const getModelList = async (name: string | undefined) => { + return await request.get({ url: '/bpm/model/list', params: { name } }) } export const getModel = async (id: string) => { @@ -38,6 +38,16 @@ export const updateModel = async (data: ModelVO) => { return await request.put({ url: '/bpm/model/update', data: data }) } +// 批量修改流程分类的排序 +export const updateModelSortBatch = async (ids: number[]) => { + return await request.put({ + url: `/bpm/model/update-sort-batch`, + params: { + ids: ids.join(',') + } + }) +} + export const updateModelBpmn = async (data: ModelVO) => { return await request.put({ url: '/bpm/model/update-bpmn', data: data }) } diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts index 3d6330a8ab8731620ad8d4696160fe5527c59280..f97270f93f55b54ec857c7e460bc442b9bcde32f 100644 --- a/src/api/bpm/processInstance/index.ts +++ b/src/api/bpm/processInstance/index.ts @@ -1,6 +1,6 @@ import request from '@/config/axios' import { ProcessDefinitionVO } from '@/api/bpm/model' -import { NodeType } from '@/components/SimpleProcessDesignerV2/src/consts' +import { NodeType, CandidateStrategy } from '@/components/SimpleProcessDesignerV2/src/consts' export type Task = { id: string name: string @@ -24,30 +24,30 @@ export type ProcessInstanceVO = { // 用户信息 export type User = { - id: number, - nickname: string, + id: number + nickname: string avatar: string } // 审批任务信息 export type ApprovalTaskInfo = { - id: number, - ownerUser: User, - assigneeUser: User, - status: number, + id: number + ownerUser: User + assigneeUser: User + status: number reason: string - } // 审批节点信息 export type ApprovalNodeInfo = { - id : number + id: number name: string nodeType: NodeType + candidateStrategy?: CandidateStrategy status: number startTime?: Date endTime?: Date - candidateUserList?: User[] + candidateUsers?: User[] tasks: ApprovalTaskInfo[] } @@ -88,12 +88,16 @@ export const getProcessInstanceCopyPage = async (params: any) => { } // 获取审批详情 -export const getApprovalDetail = async (processInstanceId?:string, processDefinitionId?:string) => { - const param = processInstanceId ? '?processInstanceId='+ processInstanceId : '?processDefinitionId='+ processDefinitionId - return await request.get({ url: 'bpm/process-instance/get-approval-detail'+ param }) +export const getApprovalDetail = async (params: any) => { + return await request.get({ url: 'bpm/process-instance/get-approval-detail' , params }) } // 获取表单字段权限 export const getFormFieldsPermission = async (params: any) => { return await request.get({ url: '/bpm/process-instance/get-form-fields-permission', params }) } + +// 获取流程实例的 BPMN 模型视图 +export const getProcessInstanceBpmnModelView = async (id: string) => { + return await request.get({ url: '/bpm/process-instance/get-bpmn-model-view?id=' + id }) +} diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts index d32b2e14ce6a499f249dd09ebdf6a688653a255d..d4c10380f372325b2a96ae6568ffa8e032875a87 100644 --- a/src/api/bpm/task/index.ts +++ b/src/api/bpm/task/index.ts @@ -9,10 +9,10 @@ export enum TaskStatusEnum { */ NOT_START = -1, - /** + /** * 待审批 */ - WAIT = 0, + WAIT = 0, /** * 审批中 */ @@ -26,7 +26,7 @@ export enum TaskStatusEnum { * 审批不通过 */ REJECT = 3, - + /** * 已取消 */ @@ -35,19 +35,10 @@ export enum TaskStatusEnum { * 已退回 */ RETURN = 5, - /** - * 委派中 - */ - DELEGATE = 6, /** * 审批通过中 */ - APPROVING = 7, - -} - -export type TaskVO = { - id: number + APPROVING = 7 } export const getTaskTodoPage = async (params: any) => { @@ -76,12 +67,12 @@ export const getTaskListByProcessInstanceId = async (processInstanceId: string) }) } -// 获取所有可回退的节点 +// 获取所有可退回的节点 export const getTaskListByReturn = async (id: string) => { return await request.get({ url: '/bpm/task/list-by-return', params: { id } }) } -// 回退 +// 退回 export const returnTask = async (data: any) => { return await request.put({ url: '/bpm/task/return', data }) } @@ -106,6 +97,16 @@ export const signDeleteTask = async (data: any) => { return await request.delete({ url: '/bpm/task/delete-sign', data }) } +// 抄送 +export const copyTask = async (data: any) => { + return await request.put({ url: '/bpm/task/copy', data }) +} + +// 获取我的待办任务 +export const myTodoTask = async (processInstanceId: string) => { + return await request.get({ url: '/bpm/task/my-todo?processInstanceId=' + processInstanceId }) +} + // 获取减签任务列表 export const getChildrenTaskList = async (id: string) => { return await request.get({ url: '/bpm/task/list-by-parent-task-id?parentTaskId=' + id }) diff --git a/src/api/mall/trade/delivery/pickUpStore/index.ts b/src/api/mall/trade/delivery/pickUpStore/index.ts index c3175021834d9ee3532827a44d874b99c9f2fc9a..ea6c852ba715240a15c383ce5b9b81aa5521a40e 100644 --- a/src/api/mall/trade/delivery/pickUpStore/index.ts +++ b/src/api/mall/trade/delivery/pickUpStore/index.ts @@ -13,10 +13,11 @@ export interface DeliveryPickUpStoreVO { latitude: number longitude: number status: number + verifyUserIds: number[] // 绑定用户编号组数 } // 查询自提门店列表 -export const getDeliveryPickUpStorePage = async (params) => { +export const getDeliveryPickUpStorePage = async (params: any) => { return await request.get({ url: '/trade/delivery/pick-up-store/page', params }) } @@ -26,8 +27,8 @@ export const getDeliveryPickUpStore = async (id: number) => { } // 查询自提门店精简列表 -export const getListAllSimple = async (): Promise => { - return await request.get({ url: '/trade/delivery/pick-up-store/list-all-simple' }) +export const getSimpleDeliveryPickUpStoreList = async (): Promise => { + return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' }) } // 新增自提门店 @@ -44,3 +45,8 @@ export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => export const deleteDeliveryPickUpStore = async (id: number) => { return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id }) } + +// 绑定自提店员 +export const bindStoreStaffId = async (data: any) => { + return await request.post({ url: '/trade/delivery/pick-up-store/bind', data }) +} diff --git a/src/api/pay/app/index.ts b/src/api/pay/app/index.ts index b1a2d0dd39988718ebbe39ce2ea9679924c5535e..d6fa83cf9216f2993a9d7720a3082130327bb9c2 100644 --- a/src/api/pay/app/index.ts +++ b/src/api/pay/app/index.ts @@ -8,6 +8,7 @@ export interface AppVO { remark: string payNotifyUrl: string refundNotifyUrl: string + transferNotifyUrl: string merchantId: number merchantName: string createTime: Date @@ -19,6 +20,7 @@ export interface AppPageReqVO extends PageParam { remark?: string payNotifyUrl?: string refundNotifyUrl?: string + transferNotifyUrl?: string merchantName?: string createTime?: Date[] } diff --git a/src/assets/svgs/bpm/add-user.svg b/src/assets/svgs/bpm/add-user.svg new file mode 100644 index 0000000000000000000000000000000000000000..bc7bdbffb7f9058d971aecc46d07fbdfd65d99be --- /dev/null +++ b/src/assets/svgs/bpm/add-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/audit2.svg b/src/assets/svgs/bpm/approve.svg similarity index 100% rename from src/assets/svgs/bpm/audit2.svg rename to src/assets/svgs/bpm/approve.svg diff --git a/src/assets/svgs/bpm/auditor.svg b/src/assets/svgs/bpm/auditor.svg new file mode 100644 index 0000000000000000000000000000000000000000..66d2c2c0b5677f941828845466f7cc199c188b15 --- /dev/null +++ b/src/assets/svgs/bpm/auditor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/cancel.svg b/src/assets/svgs/bpm/cancel.svg new file mode 100644 index 0000000000000000000000000000000000000000..ab9b1553b5278966c247bf718442d633fdae9208 --- /dev/null +++ b/src/assets/svgs/bpm/cancel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/condition.svg b/src/assets/svgs/bpm/condition.svg new file mode 100644 index 0000000000000000000000000000000000000000..41ea85ddeb933ceb60f22d1804c2ed3b7d327196 --- /dev/null +++ b/src/assets/svgs/bpm/condition.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/copy.svg b/src/assets/svgs/bpm/copy.svg new file mode 100644 index 0000000000000000000000000000000000000000..8ff3bba6abb567c5fe823bb48226b33ab28361a4 --- /dev/null +++ b/src/assets/svgs/bpm/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/finish.svg b/src/assets/svgs/bpm/finish.svg new file mode 100644 index 0000000000000000000000000000000000000000..674c6df6822db8759ad1765e706a172e96d5da85 --- /dev/null +++ b/src/assets/svgs/bpm/finish.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/parallel.svg b/src/assets/svgs/bpm/parallel.svg new file mode 100644 index 0000000000000000000000000000000000000000..ba0ac675b4fd7e0b5e65425276043f5b6dc448af --- /dev/null +++ b/src/assets/svgs/bpm/parallel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/audit3.svg b/src/assets/svgs/bpm/reject.svg similarity index 100% rename from src/assets/svgs/bpm/audit3.svg rename to src/assets/svgs/bpm/reject.svg diff --git a/src/assets/svgs/bpm/audit1.svg b/src/assets/svgs/bpm/running.svg similarity index 100% rename from src/assets/svgs/bpm/audit1.svg rename to src/assets/svgs/bpm/running.svg diff --git a/src/assets/svgs/bpm/simple-process-bg.svg b/src/assets/svgs/bpm/simple-process-bg.svg new file mode 100644 index 0000000000000000000000000000000000000000..eb23ab5aee68d387819427e298bc678d9366dd09 --- /dev/null +++ b/src/assets/svgs/bpm/simple-process-bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svgs/bpm/starter.svg b/src/assets/svgs/bpm/starter.svg new file mode 100644 index 0000000000000000000000000000000000000000..c12c7129944616264b9f9b6a5fd6e0e5424beb24 --- /dev/null +++ b/src/assets/svgs/bpm/starter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/FormCreate/src/components/useApiSelect.tsx b/src/components/FormCreate/src/components/useApiSelect.tsx index 29cd3027a4eaba271dd08bddc82d7c644c2f45b3..8ff95fb0d6d9f94d30254a5e34db188b7f10978f 100644 --- a/src/components/FormCreate/src/components/useApiSelect.tsx +++ b/src/components/FormCreate/src/components/useApiSelect.tsx @@ -185,7 +185,6 @@ export const useApiSelect = (option: ApiSelectProps) => { ) } - debugger return ( { return rule }) } + +/** + * 解析表单组件的 field, title 等字段(递归,如果组件包含子组件) + * + * @param rule 组件的生成规则 https://www.form-create.com/v3/guide/rule + * @param fields 解析后表单组件字段 + * @param parentTitle 如果是子表单,子表单的标题,默认为空 + */ +export const parseFormFields = ( + rule: Record, + fields: Array> = [], + parentTitle: string = '' +) => { + const { type, field, $required, title: tempTitle, children } = rule + if (field && tempTitle) { + let title = tempTitle + if (parentTitle) { + title = `${parentTitle}.${tempTitle}` + } + let required = false + if ($required) { + required = true + } + fields.push({ + field, + title, + type, + required + }) + // TODO 子表单 需要处理子表单字段 + // if (type === 'group' && rule.props?.rule && Array.isArray(rule.props.rule)) { + // // 解析子表单的字段 + // rule.props.rule.forEach((item) => { + // parseFields(item, fieldsPermission, title) + // }) + // } + } + if (children && Array.isArray(children)) { + children.forEach((rule) => { + parseFormFields(rule, fields) + }) + } +} diff --git a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue index 629031b835d675b3e637e4cef349a7fa6a4a75fd..853a0aa64818ff006e56f849d8e285bfad9790b3 100644 --- a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue +++ b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue @@ -1,11 +1,12 @@
-
其它条件不满足进入此分支(该分支不可编辑和删除)
+
未满足其它条件时,将进入此分支(该分支不可编辑和删除)
- + + + + + + + + + + + + + + + { + let label = '部门负责人来源' + if (configForm.value.candidateStrategy == CandidateStrategy.MULTI_LEVEL_DEPT_LEADER) { + label = label + '(指定部门向上)' + } else { + label = label + '(发起人部门向上)' + } + return label +}) // 抽屉配置 const { settingVisible, closeDrawer, openDrawer } = useDrawer() // 当前节点 @@ -230,9 +291,16 @@ const { nodeName, showInput, clickIcon, blurEvent } = useNodeName(NodeType.COPY_ // 激活的 Tab 标签页 const activeTabName = ref('user') // 表单字段权限配置 -const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission( - FieldPermissionType.READ -) +const { formType, fieldsPermissionConfig, formFieldOptions, getNodeConfigFormFields } = + useFormFieldsPermission(FieldPermissionType.READ) +// 表单内用户字段选项, 必须是必填和用户选择器 +const userFieldOnFormOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'UserSelect') +}) +// 表单内部门字段选项, 必须是必填和部门选择器 +const deptFieldOnFormOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'DeptSelect') +}) // 抄送人表单配置 const formRef = ref() // 表单 Ref // 表单校验规则 @@ -243,6 +311,8 @@ const formRules = reactive({ deptIds: [{ required: true, message: '部门不能为空', trigger: 'change' }], userGroups: [{ required: true, message: '用户组不能为空', trigger: 'change' }], postIds: [{ required: true, message: '岗位不能为空', trigger: 'change' }], + formUser: [{ required: true, message: '表单内用户字段不能为空', trigger: 'change' }], + formDept: [{ required: true, message: '表单内部门字段不能为空', trigger: 'change' }], expression: [{ required: true, message: '流程表达式不能为空', trigger: 'blur' }] }) @@ -260,11 +330,7 @@ const { const configForm = tempConfigForm as Ref // 抄送人策略, 去掉发起人自选 和 发起人自己 const copyUserStrategies = computed(() => { - return CANDIDATE_STRATEGY.filter( - (item) => - item.value !== CandidateStrategy.START_USER_SELECT && - item.value !== CandidateStrategy.START_USER - ) + return CANDIDATE_STRATEGY.filter((item) => item.value !== CandidateStrategy.START_USER) }) // 改变抄送人设置策略 const changeCandidateStrategy = () => { @@ -274,6 +340,7 @@ const changeCandidateStrategy = () => { configForm.value.postIds = [] configForm.value.userGroups = [] configForm.value.deptLevel = 1 + configForm.value.formUser = '' } // 保存配置 const saveConfig = async () => { diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue index 5bf64b4a2acfa5d06cc79f8c86b792be728661f5..e43a351e18e09126a06692f27ba585f25f80088a 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue @@ -119,7 +119,6 @@ const saveConfig = async () => { currentNode.value.fieldsPermission = fieldsPermissionConfig.value // 设置发起人的按钮权限 currentNode.value.buttonsSetting = START_USER_BUTTON_SETTING - console.log('currentNode.value.buttonsSetting==>', currentNode.value.buttonsSetting) settingVisible.value = false return true } diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue index 969cf48bc7df03b7a1b3907a6eba4f0bdc72ceb9..a088b6d0b3dc8741a2ce378289ceb8c167bca16e 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue @@ -56,7 +56,6 @@ - - - - - - - + + + + + + + + + + + + + + + + - + {{ item.label }} @@ -481,6 +499,8 @@ const deptLevelLabel = computed(() => { let label = '部门负责人来源' if (configForm.value.candidateStrategy == CandidateStrategy.MULTI_LEVEL_DEPT_LEADER) { label = label + '(指定部门向上)' + } else if (configForm.value.candidateStrategy == CandidateStrategy.FORM_DEPT_LEADER) { + label = label + '(表单内部门向上)' } else { label = label + '(发起人部门向上)' } @@ -495,9 +515,16 @@ const { nodeName, showInput, clickIcon, blurEvent } = useNodeName(NodeType.USER_ // 激活的 Tab 标签页 const activeTabName = ref('user') // 表单字段权限设置 -const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission( - FieldPermissionType.READ -) +const { formType, fieldsPermissionConfig, formFieldOptions, getNodeConfigFormFields } = + useFormFieldsPermission(FieldPermissionType.READ) +// 表单内用户字段选项, 必须是必填和用户选择器 +const userFieldOnFormOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'UserSelect') +}) +// 表单内部门字段选项, 必须是必填和部门选择器 +const deptFieldOnFormOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'DeptSelect') +}) // 操作按钮设置 const { buttonsSetting, btnDisplayNameEdit, changeBtnDisplayName, btnDisplayNameBlurEvent } = useButtonsSetting() @@ -511,6 +538,8 @@ const formRules = reactive({ roleIds: [{ required: true, message: '角色不能为空', trigger: 'change' }], deptIds: [{ required: true, message: '部门不能为空', trigger: 'change' }], userGroups: [{ required: true, message: '用户组不能为空', trigger: 'change' }], + formUser: [{ required: true, message: '表单内用户字段不能为空', trigger: 'change' }], + formDept: [{ required: true, message: '表单内部门字段不能为空', trigger: 'change' }], postIds: [{ required: true, message: '岗位不能为空', trigger: 'change' }], expression: [{ required: true, message: '流程表达式不能为空', trigger: 'blur' }], approveMethod: [{ required: true, message: '多人审批方式不能为空', trigger: 'change' }], @@ -537,8 +566,7 @@ const { getShowText } = useNodeForm(NodeType.USER_TASK_NODE) const configForm = tempConfigForm as Ref -// 不允许多人审批 -const notAllowedMultiApprovers = ref(false) + // 改变审批人设置策略 const changeCandidateStrategy = () => { configForm.value.userIds = [] @@ -547,30 +575,11 @@ const changeCandidateStrategy = () => { configForm.value.postIds = [] configForm.value.userGroups = [] configForm.value.deptLevel = 1 + configForm.value.formUser = '' + configForm.value.formDept = '' configForm.value.approveMethod = ApproveMethodType.SEQUENTIAL_APPROVE - if ( - configForm.value.candidateStrategy === CandidateStrategy.START_USER || - configForm.value.candidateStrategy === CandidateStrategy.USER - ) { - notAllowedMultiApprovers.value = true - } else { - notAllowedMultiApprovers.value = false - } -} -// 改变审批候选人 -const changedCandidateUsers = () => { - if ( - configForm.value.userIds && - configForm.value.userIds?.length <= 1 && - configForm.value.candidateStrategy === CandidateStrategy.USER - ) { - configForm.value.approveMethod = ApproveMethodType.RANDOM_SELECT_ONE_APPROVE - configForm.value.rejectHandlerType = RejectHandlerType.FINISH_PROCESS - notAllowedMultiApprovers.value = true - } else { - notAllowedMultiApprovers.value = false - } } + // 审批方式改变 const approveMethodChanged = () => { configForm.value.rejectHandlerType = RejectHandlerType.FINISH_PROCESS @@ -579,7 +588,7 @@ const approveMethodChanged = () => { } formRef.value.clearValidate('approveRatio') } -// 审批拒绝 可回退的节点 +// 审批拒绝 可退回的节点 const returnTaskList = ref([]) // 审批人超时未处理设置 const { @@ -666,11 +675,6 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => { configForm.value.candidateStrategy = node.candidateStrategy! // 解析候选人参数 parseCandidateParam(node.candidateStrategy!, node?.candidateParam) - if (configForm.value.userIds && configForm.value.userIds.length > 1) { - notAllowedMultiApprovers.value = true - } else { - notAllowedMultiApprovers.value = false - } // 2.2 设置审批方式 configForm.value.approveMethod = node.approveMethod! if (node.approveMethod == ApproveMethodType.APPROVE_BY_RATIO) { diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue index 14a85a295e273115ad44a6cdb5dc02b1b07518d8..8b97ee5bf966ff1aec2b337f7fc81566b52f7554 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue @@ -1,11 +1,17 @@ diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue index 385a81ff0646c834d577d124cf505e912f3d1979..adeae77b2f789c900ab0ffb3788267dbcce3bc51 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue @@ -1,7 +1,17 @@ @@ -87,6 +110,7 @@ import NodeHandler from '../NodeHandler.vue' import ProcessNodeTree from '../ProcessNodeTree.vue' import { SimpleFlowNode, NodeType, NODE_DEFAULT_TEXT } from '../consts' import { getDefaultConditionNodeName } from '../utils' +import { useTaskStatusClass } from '../node' import { generateUUID } from '@/utils' import ConditionNodeConfig from '../nodes-config/ConditionNodeConfig.vue' const { proxy } = getCurrentInstance() as any @@ -94,10 +118,6 @@ defineOptions({ name: 'ExclusiveNode' }) const props = defineProps({ - // parentNode : { - // type: Object as () => SimpleFlowNode, - // required: true - // }, flowNode: { type: Object as () => SimpleFlowNode, required: true @@ -113,10 +133,9 @@ const emits = defineEmits<{ nodeType: number ] }>() - +// 是否只读 +const readonly = inject('readonly') const currentNode = ref(props.flowNode) -// const conditionNodes = computed(() => currentNode.value.conditionNodes); - watch( () => props.flowNode, (newValue) => { @@ -139,6 +158,9 @@ const clickEvent = (index: number) => { } const conditionNodeConfig = (nodeId: string) => { + if (readonly) { + return + } const conditionNode = proxy.$refs[nodeId][0] conditionNode.open() } @@ -193,7 +215,7 @@ const recursiveFindParentNode = ( node: SimpleFlowNode, nodeType: number ) => { - if (!node || node.type === NodeType.START_EVENT_NODE) { + if (!node || node.type === NodeType.START_USER_NODE) { return } if (node.type === nodeType) { diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue new file mode 100644 index 0000000000000000000000000000000000000000..f1445d83da7191727cc87bd80757a6e2e1384ce8 --- /dev/null +++ b/src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue index 3cdd8f8fe5555969e1d315072f37c71825e7b001..7aa67933bf5d44437a408ef446214633091f9c44 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue @@ -1,7 +1,16 @@ @@ -82,8 +83,8 @@ import NodeHandler from '../NodeHandler.vue' import ProcessNodeTree from '../ProcessNodeTree.vue' import { SimpleFlowNode, NodeType, NODE_DEFAULT_TEXT } from '../consts' +import { useTaskStatusClass } from '../node' import { generateUUID } from '@/utils' - const { proxy } = getCurrentInstance() as any defineOptions({ name: 'ParallelNode' @@ -106,6 +107,8 @@ const emits = defineEmits<{ }>() const currentNode = ref(props.flowNode) +// 是否只读 +const readonly = inject('readonly') watch( () => props.flowNode, @@ -169,7 +172,7 @@ const recursiveFindParentNode = ( node: SimpleFlowNode, nodeType: number ) => { - if (!node || node.type === NodeType.START_EVENT_NODE) { + if (!node || node.type === NodeType.START_USER_NODE) { return } if (node.type === nodeType) { diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue index 5111678161302e6a1cbf55818d215dbf942fea1c..89a57d04536e20551070d8aac8634254f58c72be 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue @@ -1,7 +1,13 @@ diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue index c817cbe27e7b3ecd70c2245edb43c825b739fbcc..761a67438f8265357c712b930b42923363f5137f 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue @@ -1,11 +1,17 @@ diff --git a/src/components/SimpleProcessDesignerV2/src/utils.ts b/src/components/SimpleProcessDesignerV2/src/utils.ts index 854d70324cf73343a42bc83999d0a32321226c12..8e715b44f7873fc2d3374abc8ca1d1776601be6c 100644 --- a/src/components/SimpleProcessDesignerV2/src/utils.ts +++ b/src/components/SimpleProcessDesignerV2/src/utils.ts @@ -8,6 +8,14 @@ export const getDefaultConditionNodeName = (index: number, defaultFlow: boolean return '条件' + (index + 1) } +// 获取包容分支条件节点默认的名称 +export const getDefaultInclusiveConditionNodeName = (index: number, defaultFlow: boolean | undefined): string => { + if (defaultFlow) { + return '其它情况' + } + return '包容条件' + (index + 1) +} + export const convertTimeUnit = (strTimeUnit: string) => { if (strTimeUnit === 'M') { return TimeUnitType.MINUTE diff --git a/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss b/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss index fd2ab0edfa89afea44888f334a74bcdd377092d3..516756e2fad008bb5e450c1c65ac311d51377cad 100644 --- a/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss +++ b/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss @@ -1,512 +1,3 @@ -.simple-flow-canvas { - position: absolute; - inset: 0; - z-index: 1; - overflow: auto; - background-color: #fafafa; - user-select: none; - - .simple-flow-container { - position: relative; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - - .top-area-container { - position: sticky; - inset: 0; - display: flex; - width: 100%; - height: 42px; - z-index: 1; - // padding: 4px 0; - background-color: #fff; - justify-content: flex-end; - align-items: center; - - .top-actions { - display: flex; - margin: 4px; - margin-right: 8px; - align-items: center; - - .canvas-control { - font-size: 16px; - - .control-scale-group { - display: inline-flex; - align-items: center; - margin-right: 8px; - - .control-scale-button { - display: inline-flex; - width: 28px; - height: 28px; - padding: 2px; - text-align: center; - cursor: pointer; - justify-content: center; - align-items: center; - } - - .control-scale-label { - margin: 0 4px; - font-size: 14px; - } - } - } - } - } - - .scale-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 16px; - background-color: #fafafa; - transform-origin: 50% 0 0; - transform: scale(1); - transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); - - // 节点容器 定义节点宽度 - .node-container { - width: 200px; - } - // 节点 - .node-box { - position: relative; - display: flex; - min-height: 70px; - padding: 5px 10px 8px; - cursor: pointer; - background-color: #fff; - flex-direction: column; - border: 2px solid transparent; - // border-color: #0089ff; - border-radius: 8px; - // border-color: #0089ff; - box-shadow: 0 1px 4px 0 rgba(10, 30, 65, 0.16); - transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); - - &:hover { - border-color: #0089ff; - .node-toolbar { - opacity: 1; - } - - .branch-node-move { - display: flex; - } - } - - // 普通节点标题 - .node-title-container { - display: flex; - padding: 4px; - cursor: pointer; - border-radius: 4px 4px 0 0; - align-items: center; - - .node-title-icon { - display: flex; - align-items: center; - - &.user-task { - color: #ff943e; - } - &.copy-task { - color: #3296fa; - } - &.start-user { - color: #676565; - } - } - - .node-title { - margin-left: 4px; - font-size: 14px; - font-weight: 600; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #1f1f1f; - line-height: 18px; - &:hover { - border-bottom: 1px dashed #f60; - } - } - } - - // 条件节点标题 - .branch-node-title-container { - display: flex; - padding: 4px 0; - cursor: pointer; - border-radius: 4px 4px 0 0; - align-items: center; - justify-content: space-between; - - .input-max-width { - max-width: 115px !important; - } - - .branch-title { - font-size: 13px; - font-weight: 600; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #f60; - &:hover { - border-bottom: 1px dashed #000; - } - } - - .branch-priority { - min-width: 50px; - font-size: 13px; - } - } - - .node-content { - display: flex; - min-height: 32px; - padding: 4px 8px; - margin-top: 4px; - line-height: 32px; - justify-content: space-between; - align-items: center; - color: #111f2c; - background: rgba(0, 0, 0, 0.03); - border-radius: 4px; - - .node-text { - display: -webkit-box; - overflow: hidden; - font-size: 14px; - line-height: 24px; - text-overflow: ellipsis; - word-break: break-all; - -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ - -webkit-box-orient: vertical; - } - } - - //条件节点内容 - .branch-node-content { - display: flex; - min-height: 32px; - padding: 4px 8px; - margin-top: 4px; - line-height: 32px; - align-items: center; - color: #111f2c; - border-radius: 4px; - - .branch-node-text { - overflow: hidden; - font-size: 14px; - line-height: 24px; - text-overflow: ellipsis; - word-break: break-all; - -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ - -webkit-box-orient: vertical; - } - } - - // 节点操作 :删除 - .node-toolbar { - opacity: 0; - position: absolute; - top: -20px; - right: 0px; - display: flex; - - .toolbar-icon { - text-align: center; - vertical-align: middle; - } - } - - // 条件节点左右移动 - .branch-node-move { - position: absolute; - width: 10px; - cursor: pointer; - display: none; - align-items: center; - height: 100%; - justify-content: center; - } - - .move-node-left { - left: -2px; - top: 0px; - background: rgba(126, 134, 142, 0.08); - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; - } - - .move-node-right { - right: -2px; - top: 0px; - background: rgba(126, 134, 142, 0.08); - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - } - - .node-config-error { - border-color: #ff5219 !important; - } - // 普通节点包装 - .node-wrapper { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - // 节点连线处理 - .node-handler-wrapper { - position: relative; - display: flex; - height: 70px; - align-items: center; - user-select: none; - justify-content: center; - flex-direction: column; - - &::before { - position: absolute; - top: 0; - right: 0; - left: 0; - // bottom: 5px; - bottom: 0px; - z-index: 0; - width: 2px; - height: 100%; - // height: calc(100% - 5px); - margin: auto; - background-color: #dedede; - content: ''; - } - - .node-handler { - .add-icon { - position: relative; - top: -5px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - width: 25px; - height: 25px; - color: #fff; - background-color: #0089ff; - border-radius: 50%; - - &:hover { - transform: scale(1.1); - } - } - } - - .node-handler-arrow { - position: absolute; - bottom: 0; - left: 50%; - display: flex; - transform: translateX(-50%); - } - } - - // 条件节点包装 - .branch-node-wrapper { - position: relative; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 16px; - - .branch-node-container { - position: relative; - display: flex; - - &::before { - position: absolute; - height: 100%; - width: 4px; - background-color: #fafafa; - content: ''; - left: 50%; - transform: translate(-50%); - } - - .branch-node-add { - position: absolute; - top: -18px; - left: 50%; - z-index: 1; - height: 36px; - padding: 0 10px; - font-size: 12px; - line-height: 36px; - color: #222; - cursor: pointer; - background: #fff; - border: 2px solid #dedede; - border-radius: 18px; - transform: translateX(-50%); - transform-origin: center center; - transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); - } - - .branch-node-item { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - min-width: 280px; - padding: 40px 40px 0; - background: transparent; - border-top: 2px solid #dedede; - border-bottom: 2px solid #dedede; - - &::before { - position: absolute; - width: 2px; - height: 100%; - margin: auto; - inset: 0; - background-color: #dedede; - content: ''; - } - } - // 覆盖条件节点第一个节点左上角的线 - .branch-line-first-top { - position: absolute; - top: -5px; - left: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点第一个节点左下角的线 - .branch-line-first-bottom { - position: absolute; - bottom: -5px; - left: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点最后一个节点右上角的线 - .branch-line-last-top { - position: absolute; - top: -5px; - right: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点最后一个节点右下角的线 - .branch-line-last-bottom { - position: absolute; - right: -1px; - bottom: -5px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - } - } - - .node-fixed-name { - display: inline-block; - width: auto; - padding: 0 4px; - overflow: hidden; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - } - // 开始节点包装 - .start-node-wrapper { - position: relative; - margin-top: 16px; - - .start-node-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - - .start-node-box { - display: flex; - justify-content: center; - align-items: center; - width: 90px; - height: 36px; - padding: 3px 4px; - color: #212121; - cursor: pointer; - // background: #2c2c2c; - background: #fafafa; - border-radius: 30px; - box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); - box-sizing: border-box; - } - } - } - - // 结束节点包装 - .end-node-wrapper { - margin-bottom: 16px; - - .end-node-box { - display: flex; - justify-content: center; - align-items: center; - width: 80px; - height: 36px; - color: #212121; - // background: #6e6e6e; - background: #fafafa; - border-radius: 30px; - box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); - box-sizing: border-box; - } - } - - // 可编辑的 title 输入框 - .editable-title-input { - height: 20px; - max-width: 145px; - line-height: 20px; - font-size: 12px; - margin-left: 4px; - border: 1px solid #d9d9d9; - border-radius: 4px; - transition: all 0.3s; - - &:focus { - border-color: #40a9ff; - outline: 0; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - } - } - } - } -} - // 配置节点头部 .config-header { display: flex; @@ -626,16 +117,17 @@ cursor: pointer; .handler-item { - margin-right: 8px; + display: flex; + flex-direction: column; + align-items: center; } .handler-item-icon { - width: 80px; - height: 80px; + width: 60px; + height: 60px; background: #fff; border: 1px solid #e2e2e2; border-radius: 50%; - transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); user-select: none; text-align: center; @@ -645,8 +137,8 @@ } .icon-size { - font-size: 35px; - line-height: 80px; + font-size: 25px; + line-height: 60px; } } @@ -658,13 +150,557 @@ } .condition { - color: #15bc83; + color: #67c23a; + } + + .parallel { + color: #626aef; + } + + .inclusive { + color: #345da2; } .handler-item-text { margin-top: 4px; width: 80px; text-align: center; + font-size: 13px; + } +} +// Simple 流程模型样式 +.simple-process-model-container { + height: 100%; + padding-top: 32px; + background-color: #fafafa; + .simple-process-model { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + transform-origin: 50% 0 0; + overflow: auto; + transform: scale(1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + background: url(@/assets/svgs/bpm/simple-process-bg.svg) 0 0 repeat; + // 节点容器 定义节点宽度 + .node-container { + width: 200px; + } + // 节点 + .node-box { + position: relative; + display: flex; + min-height: 70px; + padding: 5px 10px 8px; + cursor: pointer; + background-color: #fff; + flex-direction: column; + border: 2px solid transparent; + border-radius: 8px; + box-shadow: 0 1px 4px 0 rgb(10 30 65 / 16%); + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + + &.status-pass { + background-color: #a9da90; + border-color: #67c23a; + } + + &.status-pass:hover { + border-color: #67c23a; + } + + &.status-running { + background-color: #e7f0fe; + border-color: #5a9cf8; + } + + &.status-running:hover { + border-color: #5a9cf8; + } + + &.status-reject { + background-color: #f6e5e5; + border-color: #e47470; + } + + &.status-reject:hover { + border-color: #e47470; + } + + &:hover { + border-color: #0089ff; + + .node-toolbar { + opacity: 1; + } + + .branch-node-move { + display: flex; + } + } + + // 普通节点标题 + .node-title-container { + display: flex; + padding: 4px; + cursor: pointer; + border-radius: 4px 4px 0 0; + align-items: center; + + .node-title-icon { + display: flex; + align-items: center; + + &.user-task { + color: #ff943e; + } + + &.copy-task { + color: #3296fa; + } + + &.start-user { + color: #676565; + } + } + + .node-title { + margin-left: 4px; + overflow: hidden; + font-size: 14px; + font-weight: 600; + line-height: 18px; + color: #1f1f1f; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + border-bottom: 1px dashed #f60; + } + } + } + + // 条件节点标题 + .branch-node-title-container { + display: flex; + padding: 4px 0; + cursor: pointer; + border-radius: 4px 4px 0 0; + align-items: center; + justify-content: space-between; + + .input-max-width { + max-width: 115px !important; + } + + .branch-title { + overflow: hidden; + font-size: 13px; + font-weight: 600; + color: #f60; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + border-bottom: 1px dashed #000; + } + } + + .branch-priority { + min-width: 50px; + font-size: 12px; + } + } + + .node-content { + display: flex; + min-height: 32px; + padding: 4px 8px; + margin-top: 4px; + line-height: 32px; + justify-content: space-between; + align-items: center; + color: #111f2c; + background: rgb(0 0 0 / 3%); + border-radius: 4px; + + .node-text { + display: -webkit-box; + overflow: hidden; + font-size: 14px; + line-height: 24px; + text-overflow: ellipsis; + word-break: break-all; + -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ + -webkit-box-orient: vertical; + } + } + + //条件节点内容 + .branch-node-content { + display: flex; + min-height: 32px; + padding: 4px 0; + margin-top: 4px; + line-height: 32px; + align-items: center; + color: #111f2c; + border-radius: 4px; + + .branch-node-text { + overflow: hidden; + font-size: 12px; + line-height: 24px; + text-overflow: ellipsis; + word-break: break-all; + -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ + -webkit-box-orient: vertical; + } + } + + // 节点操作 :删除 + .node-toolbar { + position: absolute; + top: -20px; + right: 0; + display: flex; + opacity: 0; + + .toolbar-icon { + text-align: center; + vertical-align: middle; + } + } + + // 条件节点左右移动 + .branch-node-move { + position: absolute; + display: none; + width: 10px; + height: 100%; + cursor: pointer; + align-items: center; + justify-content: center; + } + + .move-node-left { + top: 0; + left: -2px; + background: rgb(126 134 142 / 8%); + border-bottom-left-radius: 8px; + border-top-left-radius: 8px; + } + + .move-node-right { + top: 0; + right: -2px; + background: rgb(126 134 142 / 8%); + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + } + } + + .node-config-error { + border-color: #ff5219 !important; + } + // 普通节点包装 + .node-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + // 节点连线处理 + .node-handler-wrapper { + position: relative; + display: flex; + height: 70px; + align-items: center; + user-select: none; + justify-content: center; + flex-direction: column; + + &::before { + position: absolute; + top: 0; + z-index: 0; + width: 2px; + height: 100%; + margin: auto; + background-color: #dedede; + content: ''; + } + + .node-handler { + .add-icon { + position: relative; + top: -5px; + display: flex; + width: 25px; + height: 25px; + color: #fff; + cursor: pointer; + background-color: #0089ff; + border-radius: 50%; + align-items: center; + justify-content: center; + + &:hover { + transform: scale(1.1); + } + } + } + + .node-handler-arrow { + position: absolute; + bottom: 0; + left: 50%; + display: flex; + transform: translateX(-50%); + } + } + + // 条件节点包装 + .branch-node-wrapper { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 16px; + + .branch-node-container { + position: relative; + display: flex; + + &::before { + position: absolute; + left: 50%; + width: 4px; + height: 100%; + background-color: #fafafa; + content: ''; + transform: translate(-50%); + } + + .branch-node-add { + position: absolute; + top: -18px; + left: 50%; + z-index: 1; + height: 36px; + padding: 0 10px; + font-size: 12px; + line-height: 36px; + border: 2px solid #dedede; + border-radius: 18px; + transform: translateX(-50%); + transform-origin: center center; + } + + .branch-node-readonly { + position: absolute; + top: -18px; + left: 50%; + z-index: 1; + display: flex; + width: 36px; + height: 36px; + background-color: #fff; + border: 2px solid #dedede; + border-radius: 50%; + transform: translateX(-50%); + align-items: center; + justify-content: center; + transform-origin: center center; + + &.status-pass { + background-color: #e9f4e2; + border-color: #6bb63c; + } + + &.status-pass:hover { + border-color: #6bb63c; + } + + .icon-size { + font-size: 22px; + &.condition { + color: #67c23a; + } + &.parallel { + color: #626aef; + } + &.inclusive { + color: #345da2; + } + } + } + + .branch-node-item { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + min-width: 280px; + padding: 40px 40px 0; + background: transparent; + border-top: 2px solid #dedede; + border-bottom: 2px solid #dedede; + + &::before { + position: absolute; + width: 2px; + height: 100%; + margin: auto; + inset: 0; + background-color: #dedede; + content: ''; + } + } + // 覆盖条件节点第一个节点左上角的线 + .branch-line-first-top { + position: absolute; + top: -5px; + left: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点第一个节点左下角的线 + .branch-line-first-bottom { + position: absolute; + bottom: -5px; + left: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点最后一个节点右上角的线 + .branch-line-last-top { + position: absolute; + top: -5px; + right: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点最后一个节点右下角的线 + .branch-line-last-bottom { + position: absolute; + right: -1px; + bottom: -5px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + } + } + + .node-fixed-name { + display: inline-block; + width: auto; + padding: 0 4px; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + } + // 开始节点包装 + .start-node-wrapper { + position: relative; + margin-top: 16px; + + .start-node-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .start-node-box { + display: flex; + justify-content: center; + align-items: center; + width: 90px; + height: 36px; + padding: 3px 4px; + color: #212121; + cursor: pointer; + background: #fafafa; + border-radius: 30px; + box-shadow: 0 1px 5px 0 rgb(10 30 65 / 8%); + box-sizing: border-box; + } + } + } + + // 结束节点包装 + .end-node-wrapper { + margin-bottom: 16px; + + .end-node-box { + display: flex; + width: 80px; + height: 36px; + color: #212121; + border: 2px solid #fafafa; + border-radius: 30px; + box-shadow: 0 1px 5px 0 rgb(10 30 65 / 8%); + box-sizing: border-box; + justify-content: center; + align-items: center; + + &.status-pass { + background-color: #a9da90; + border-color: #6bb63c; + } + + &.status-pass:hover { + border-color: #6bb63c; + } + + &.status-reject { + background-color: #f6e5e5; + border-color: #e47470; + } + + &.status-reject:hover { + border-color: #e47470; + } + + &.status-cancel { + background-color: #eaeaeb; + border-color: #919398; + } + + &.status-cancel:hover { + border-color: #919398; + } + } + } + + // 可编辑的 title 输入框 + .editable-title-input { + height: 20px; + max-width: 145px; + margin-left: 4px; + font-size: 12px; + line-height: 20px; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; + + &:focus { + border-color: #40a9ff; + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); + } + } } } diff --git a/src/components/UserSelectForm/index.vue b/src/components/UserSelectForm/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..801489b66bf4de9ec0fead3fa073ac5733ee6807 --- /dev/null +++ b/src/components/UserSelectForm/index.vue @@ -0,0 +1,152 @@ + + + + diff --git a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue index 485b97958ea02f5df4ba8a702ce173eff8a6a380..34a54c8ce4420bd3fb44b24095172cd91b80ec32 100644 --- a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue +++ b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue @@ -1,664 +1,379 @@ - +/** unmount:销毁 */ +onBeforeUnmount(() => { + clearViewer() +}) + diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json index 4ea632a01160101e1e4ffb0c3231a6a27fd59ffe..d1ca4a439d42a74bf9b6374498bf955b8c3320e8 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json @@ -1211,6 +1211,76 @@ "isAttr": true } ] + }, + { + "name": "AssignStartUserHandlerType", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:StartEvent", "bpmn:UserTask"] + }, + "properties": [ + { + "name": "value", + "type": "Integer", + "isBody": true + } + ] + }, + { + "name": "RejectHandlerType", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "value", + "type": "Integer", + "isBody": true + } + ] + }, + { + "name": "RejectReturnTaskId", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "value", + "type": "String", + "isBody": true + } + ] + }, + { + "name": "AssignEmptyHandlerType", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "value", + "type": "Integer", + "isBody": true + } + ] + }, + { + "name": "AssignEmptyUserIds", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "value", + "type": "String", + "isBody": true + } + ] } ], "emumerations": [] diff --git a/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue b/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue index 86a1cf7457fa152ac3d5da6bbcce181b2f8c9018..96e8b0807d5a0f47e47203b4ef7fcf918ed172f6 100644 --- a/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue +++ b/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue @@ -1,5 +1,5 @@ diff --git a/src/components/bpmnProcessDesigner/package/penal/custom-config/ElementCustomConfig.vue b/src/components/bpmnProcessDesigner/package/penal/custom-config/ElementCustomConfig.vue new file mode 100644 index 0000000000000000000000000000000000000000..e5497b083c4c86808dc924498699ec35879e0b61 --- /dev/null +++ b/src/components/bpmnProcessDesigner/package/penal/custom-config/ElementCustomConfig.vue @@ -0,0 +1,283 @@ + + + + diff --git a/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue b/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue index 33f0bc096aa7308c77a1eaa51006d0d616cc97b9..3bb7d660749eb810759b0e65437f126990559e73 100644 --- a/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue +++ b/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue @@ -268,9 +268,9 @@ const bpmnInstances = () => (window as any)?.bpmnInstances const resetFormList = () => { bpmnELement.value = bpmnInstances().bpmnElement formKey.value = bpmnELement.value.businessObject.formKey - if (formKey.value?.length > 0) { - formKey.value = parseInt(formKey.value) - } + // if (formKey.value?.length > 0) { + // formKey.value = parseInt(formKey.value) + // } // 获取元素扩展属性 或者 创建扩展属性 elExtensionElements.value = bpmnELement.value.businessObject.get('extensionElements') || diff --git a/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue b/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue index 494b3d972ce396e703ec4d58c47dea9fdd27af54..016cdf6c6a27340ce8afbfac39bb5785eb20ce15 100644 --- a/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue +++ b/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue @@ -80,7 +80,7 @@ const resetAttributesList = () => { otherExtensionList.value = [] // 其他扩展配置 bpmnElementProperties.value = // bpmnElement.value.businessObject?.extensionElements?.filter((ex) => { - bpmnElement.value.businessObject?.extensionElements?.values.filter((ex) => { + bpmnElement.value.businessObject?.extensionElements?.values?.filter((ex) => { if (ex.$type !== `${prefix}:Properties`) { otherExtensionList.value.push(ex) } diff --git a/src/components/bpmnProcessDesigner/package/theme/index.scss b/src/components/bpmnProcessDesigner/package/theme/index.scss index 0c77cfa277b6c1c791a16578a15ee594e35d3632..240476027942c65fa8027874ca6b5437ed6e10ce 100644 --- a/src/components/bpmnProcessDesigner/package/theme/index.scss +++ b/src/components/bpmnProcessDesigner/package/theme/index.scss @@ -1,2 +1,117 @@ @use './process-designer.scss'; @use './process-panel.scss'; + +$success-color: #4eb819; +$primary-color: #409EFF; +$danger-color: #F56C6C; +$cancel-color: #909399; + +.process-viewer { + position: relative; + border: 1px solid #EFEFEF; + background: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+') repeat!important; + + .success-arrow { + fill: $success-color; + stroke: $success-color; + } + + .success-conditional { + fill: white; + stroke: $success-color; + } + + .success.djs-connection { + .djs-visual path { + stroke: $success-color!important; + //marker-end: url(#sequenceflow-end-white-success)!important; + } + } + + .success.djs-connection.condition-expression { + .djs-visual path { + //marker-start: url(#conditional-flow-marker-white-success)!important; + } + } + + .success.djs-shape { + .djs-visual rect { + stroke: $success-color!important; + fill: $success-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $success-color!important; + } + + .djs-visual path:nth-child(2) { + stroke: $success-color!important; + fill: $success-color!important; + } + + .djs-visual circle { + stroke: $success-color!important; + fill: $success-color!important; + fill-opacity: 0.15!important; + } + } + + .primary.djs-shape { + .djs-visual rect { + stroke: $primary-color!important; + fill: $primary-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $primary-color!important; + } + + .djs-visual circle { + stroke: $primary-color!important; + fill: $primary-color!important; + fill-opacity: 0.15!important; + } + } + + .danger.djs-shape { + .djs-visual rect { + stroke: $danger-color!important; + fill: $danger-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $danger-color!important; + } + + .djs-visual circle { + stroke: $danger-color!important; + fill: $danger-color!important; + fill-opacity: 0.15!important; + } + } + + .cancel.djs-shape { + .djs-visual rect { + stroke: $cancel-color!important; + fill: $cancel-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $cancel-color!important; + } + + .djs-visual circle { + stroke: $cancel-color!important; + fill: $cancel-color!important; + fill-opacity: 0.15!important; + } + } +} + +.process-viewer .djs-tooltip-container, .process-viewer .djs-overlay-container, .process-viewer .djs-palette { + display: none; +} diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index d37ffc6947024964a953ff634d1e151d0e4e7595..f0ce322ee04125f10f2c5c9dd2ba1cf306fafc8c 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -267,9 +267,9 @@ const remainingRouter: AppRouteRecordRaw[] = [ } }, { - path: 'manager/simple/workflow/model/edit', - component: () => import('@/views/bpm/simpleWorkflow/index.vue'), - name: 'SimpleWorkflowDesignEditor', + path: 'manager/simple/model', + component: () => import('@/views/bpm/simple/SimpleModelDesign.vue'), + name: 'SimpleModelDesign', meta: { noCache: true, hidden: true, @@ -292,7 +292,6 @@ const remainingRouter: AppRouteRecordRaw[] = [ }, { path: 'process-instance/detail', - // component: () => import('@/views/bpm/processInstance/detail/index_new.vue'), // TODO 芋艿:新审批界面,已适配 simple 模式,未来会适配 bpmn 模式 component: () => import('@/views/bpm/processInstance/detail/index.vue'), name: 'BpmProcessInstanceDetail', meta: { diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 874f5da0395743897dd9b93ad9524dd345829404..692a45fb71a0ca922c06ce342c7c473b3ceb14e2 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -449,3 +449,11 @@ export const BpmModelFormType = { NORMAL: 10, // 流程表单 CUSTOM: 20 // 业务表单 } + +export const BpmProcessInstanceStatus = { + NOT_START: -1, // 未开始 + RUNNING: 1, // 审批中 + APPROVE: 2, // 审批通过 + REJECT: 3, // 审批不通过 + CANCEL: 4 // 已取消 +} diff --git a/src/utils/formCreate.ts b/src/utils/formCreate.ts index 850df8cb6fd999537b48c4d9074393ea876ee929..a93d9cdd27da3223b53885b87d0802c5e162b01d 100644 --- a/src/utils/formCreate.ts +++ b/src/utils/formCreate.ts @@ -44,6 +44,7 @@ export const setConfAndFields2 = ( value?: object ) => { if (isRef(detailPreview)) { + // @ts-ignore detailPreview = detailPreview.value } // @ts-ignore diff --git a/src/views/bpm/category/CategoryForm.vue b/src/views/bpm/category/CategoryForm.vue index 0d5abe7d6ef8a6206ad619f93738f75b4109bbc2..9c24b3ef1b1432c36825bbf167ef1ac5dbaeefd6 100644 --- a/src/views/bpm/category/CategoryForm.vue +++ b/src/views/bpm/category/CategoryForm.vue @@ -42,6 +42,7 @@ + + + diff --git a/src/views/bpm/model/ModelForm.vue b/src/views/bpm/model/ModelForm.vue index d9c4c03263f4ef4a344da27cb3d2b28dcfffa2f7..16d3c1d6c51b2c520e2dfb0d144d06764caeaaa9 100644 --- a/src/views/bpm/model/ModelForm.vue +++ b/src/views/bpm/model/ModelForm.vue @@ -155,6 +155,7 @@ + + diff --git a/src/views/bpm/model/index_old.vue b/src/views/bpm/model/index_old.vue new file mode 100644 index 0000000000000000000000000000000000000000..9cb6420690a596dc96753335f1908be293a9eb81 --- /dev/null +++ b/src/views/bpm/model/index_old.vue @@ -0,0 +1,404 @@ + + + diff --git a/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue b/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..610963e1638b42f22731217b95de96b1ff0bcdcb --- /dev/null +++ b/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue @@ -0,0 +1,259 @@ + + + + diff --git a/src/views/bpm/processInstance/create/index.vue b/src/views/bpm/processInstance/create/index.vue index cc588881d9a1e192ab5e7ed12655bfbc08e5e33b..284cbdb7da8cc5440d770c8a149fd5ff1a564007 100644 --- a/src/views/bpm/processInstance/create/index.vue +++ b/src/views/bpm/processInstance/create/index.vue @@ -1,133 +1,115 @@ + + + + + + diff --git a/src/views/bpm/processInstance/create/index_old.vue b/src/views/bpm/processInstance/create/index_old.vue new file mode 100644 index 0000000000000000000000000000000000000000..83e1ff46f8fff76d07f63aae1b7ffd879394c287 --- /dev/null +++ b/src/views/bpm/processInstance/create/index_old.vue @@ -0,0 +1,267 @@ + + diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue b/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue index 8912593a073214ab96e853b16f04749b6abd212d..781263d2cbb8a5e787de5c19e6f4e0f65605c858 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue @@ -1,54 +1,61 @@ - diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue index 34ba2bbeb0d136aac10f2678e803aaf131b703f4..b92be7e42ab97860934f367ef2d36a46f215aded 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue @@ -1,18 +1,17 @@ diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue index f82e80031090c8b6d94dcc71c4a667e5f5342c1c..8690e58f440a420a19e0e2baaa0893ac1bf3ae7b 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue @@ -1,85 +1,50 @@ diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue index afb778c4c96cd9a8a7db7fa931bf4833d62b7488..56b466a971a176e20d7909dc3ee0bb04f7af9da3 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue @@ -3,155 +3,189 @@ -
-
{{ activity.name }}
-
- -
-
-
- - - - {{ task.assigneeUser.nickname.substring(0, 1) }} - - - - {{ task.ownerUser.nickname.substring(0, 1) }} - - -
- -
-
-
- -
- {{ task.assigneeUser.nickname }} -
-
- {{ task.ownerUser.nickname }} -
- - -
-
+ +
+ +
+
{{ activity.name }}
+ +
+ {{ getApprovalNodeTime(activity) }} +
+
+ +
+ + + + + + +
-
-
- - - - {{ user.nickname.substring(0, 1) }} - + + + {{ user.nickname.substring(0, 1) }} + + {{ user.nickname }} +
+
+
+ +
+
+ +
+ +
- -
-
-
- -
- {{ user.nickname }} +
-
+ +
+ 审批意见:{{ task.reason }} +
+
-
- -
- {{ getApprovalNodeTime(activity) }} -
- - -
- {{ activity.opinion }} + + + {{ user.nickname.substring(0, 1) }} + + {{ user.nickname }} + + +
+ +
-
- {{ formatDate(activity.createTime) }} -
-->
+ + + diff --git a/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue deleted file mode 100644 index 178b1b971fc5335f95a14edaad29671855cf159e..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue deleted file mode 100644 index a13916976d5a3dd7e50cd73d5bae8b8779eb3803..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue +++ /dev/null @@ -1,90 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue deleted file mode 100644 index 9e4998c1ba39387651a8bd2b8836826be6dba3dd..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue +++ /dev/null @@ -1,99 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue deleted file mode 100644 index fc6d6b2cf83a16aa29a747215b88df9cfe030197..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue deleted file mode 100644 index 648e86b5772709a4de46800875487584ec9f425d..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue +++ /dev/null @@ -1,106 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue deleted file mode 100644 index c1012ac96ec0ecd903fd926d18765c50680ddbc2..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue index aa6ad5fea68cf0b1c1808feb95f6804b121e417f..0461a20278edf080c5a636cb6a201614a0a1f598 100644 --- a/src/views/bpm/processInstance/detail/index.vue +++ b/src/views/bpm/processInstance/detail/index.vue @@ -1,222 +1,167 @@ + + diff --git a/src/views/bpm/processInstance/detail/index_new.vue b/src/views/bpm/processInstance/detail/index_new.vue deleted file mode 100644 index b2035a19586ed589defac3ec92042ee1b30f85bf..0000000000000000000000000000000000000000 --- a/src/views/bpm/processInstance/detail/index_new.vue +++ /dev/null @@ -1,318 +0,0 @@ - - - - diff --git a/src/views/bpm/processInstance/index.vue b/src/views/bpm/processInstance/index.vue index 4b72e3955e362c4dc2fa64ea000b43f18b1bea90..48dfb58c25dce768215a9bc86aa7b5f7a090795b 100644 --- a/src/views/bpm/processInstance/index.vue +++ b/src/views/bpm/processInstance/index.vue @@ -10,7 +10,7 @@ :inline="true" label-width="68px" > - + - - + + + 搜索 - + + + + - - - - - - - - - - 搜索 - 重置 - - 发起流程 + + + + + + 高级筛选 + + + + + + + + + + + + + + + + + + + @@ -95,6 +129,8 @@ min-width="100" fixed="left" /> + +