diff --git a/package.json b/package.json index ba5400092e5c2fb36634b3ed6896532a14bc99b6..98cbf78ee0c0987404644065f54f44e18745d77e 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..e9256407adc5b98115f5348eaa7fe6b59841aa14 100644 --- a/src/api/bpm/processInstance/index.ts +++ b/src/api/bpm/processInstance/index.ts @@ -24,30 +24,29 @@ 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 status: number startTime?: Date endTime?: Date - candidateUserList?: User[] + candidateUsers?: User[] tasks: ApprovalTaskInfo[] } @@ -88,12 +87,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/audit4.svg b/src/assets/svgs/bpm/audit4.svg new file mode 100644 index 0000000000000000000000000000000000000000..ab9b1553b5278966c247bf718442d633fdae9208 --- /dev/null +++ b/src/assets/svgs/bpm/audit4.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/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/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/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 @@
-
其它条件不满足进入此分支(该分支不可编辑和删除)
+
未满足其它条件时,将进入此分支(该分支不可编辑和删除)
// 抄送人策略, 去掉发起人自选 和 发起人自己 const copyUserStrategies = computed(() => { return CANDIDATE_STRATEGY.filter( - (item) => - item.value !== CandidateStrategy.START_USER_SELECT && - item.value !== CandidateStrategy.START_USER + (item) => item.value !== CandidateStrategy.START_USER ) }) // 改变抄送人设置策略 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..899d70452e8f8c947218f79af3dfa40576a2571f 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue @@ -134,13 +134,7 @@ prop="userIds" span="24" > - + - + {{ item.label }} @@ -537,8 +524,7 @@ const { getShowText } = useNodeForm(NodeType.USER_TASK_NODE) const configForm = tempConfigForm as Ref -// 不允许多人审批 -const notAllowedMultiApprovers = ref(false) + // 改变审批人设置策略 const changeCandidateStrategy = () => { configForm.value.userIds = [] @@ -548,29 +534,8 @@ const changeCandidateStrategy = () => { configForm.value.userGroups = [] configForm.value.deptLevel = 1 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 +544,7 @@ const approveMethodChanged = () => { } formRef.value.clearValidate('approveRatio') } -// 审批拒绝 可回退的节点 +// 审批拒绝 可退回的节点 const returnTaskList = ref([]) // 审批人超时未处理设置 const { @@ -666,11 +631,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..2ba2a7ffc66f1de2de869c466ffdd605f39c5204 --- /dev/null +++ b/src/components/UserSelectForm/index.vue @@ -0,0 +1,115 @@ + + 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/theme/index.scss b/src/components/bpmnProcessDesigner/package/theme/index.scss index 2e60fad47a6984a1c46fa0574f78b2f006122300..b1a5d980ffcd56c5e780f9705d2b8b599ea24c67 100644 --- a/src/components/bpmnProcessDesigner/package/theme/index.scss +++ b/src/components/bpmnProcessDesigner/package/theme/index.scss @@ -1,2 +1,117 @@ @import './process-designer.scss'; @import './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/definition/index.vue b/src/views/bpm/definition/index.vue index 1e7794b36f199baaac5ab87022393ebc386d4f93..55da993df35f6f9797c0f2d0e2b087318ce50851 100644 --- a/src/views/bpm/definition/index.vue +++ b/src/views/bpm/definition/index.vue @@ -70,13 +70,7 @@ - + @@ -118,7 +112,7 @@ const formDetailPreview = ref({ rule: [], option: {} }) -const handleFormDetail = async (row) => { +const handleFormDetail = async (row: any) => { if (row.formType == 10) { // 设置表单 setConfAndFields2(formDetailPreview, row.formConf, row.formFields) @@ -133,13 +127,13 @@ const handleFormDetail = async (row) => { /** 流程图的详情按钮操作 */ const bpmnDetailVisible = ref(false) -const bpmnXml = ref(null) -const bpmnControlForm = ref({ - prefix: 'flowable' -}) -const handleBpmnDetail = async (row) => { - bpmnXml.value = (await DefinitionApi.getProcessDefinition(row.id))?.bpmnXml +const bpmnXml = ref('') +const handleBpmnDetail = async (row: any) => { + // 设置可见 + bpmnXml.value = '' bpmnDetailVisible.value = true + // 加载 BPMN XML + bpmnXml.value = (await DefinitionApi.getProcessDefinition(row.id))?.bpmnXml } /** 初始化 **/ diff --git a/src/views/bpm/form/editor/index.vue b/src/views/bpm/form/editor/index.vue index 0e82923a2d44c50c0d8131da357601c878ab8704..12945e0f7daab07cba0dd96bed7bff8c403ba1be 100644 --- a/src/views/bpm/form/editor/index.vue +++ b/src/views/bpm/form/editor/index.vue @@ -64,7 +64,11 @@ const designerConfig = ref({ switchType: [], // 是否可以切换组件类型,或者可以相互切换的字段 autoActive: true, // 是否自动选中拖入的组件 useTemplate: false, // 是否生成vue2语法的模板组件 - formOptions: {}, // 定义表单配置默认值 + formOptions: { + form: { + labelWidth: '100px' // 设置默认的 label 宽度为 100px + } + }, // 定义表单配置默认值 fieldReadonly: false, // 配置field是否可以编辑 hiddenDragMenu: false, // 隐藏拖拽操作按钮 hiddenDragBtn: false, // 隐藏拖拽按钮 diff --git a/src/views/bpm/model/CategoryDraggableModel.vue b/src/views/bpm/model/CategoryDraggableModel.vue new file mode 100644 index 0000000000000000000000000000000000000000..35465935e9566a4c8e84b3981ca3e0e7ef5a284d --- /dev/null +++ b/src/views/bpm/model/CategoryDraggableModel.vue @@ -0,0 +1,532 @@ + + + + + + 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..70aad87395c6606efc6daa8bd36e93eca0ce7294 --- /dev/null +++ b/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue @@ -0,0 +1,258 @@ + + + + diff --git a/src/views/bpm/processInstance/create/index.vue b/src/views/bpm/processInstance/create/index.vue index cc588881d9a1e192ab5e7ed12655bfbc08e5e33b..92d68bf13782a10c25720ab8e62d4a9585925ae0 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..7d0b95934e7e54dad3b9e720fed436cfb6b6a38e 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue @@ -1,50 +1,44 @@ 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..f3b7439bb2e7a260b1053c50ecc7d96701324b10 100644 --- a/src/views/bpm/processInstance/index.vue +++ b/src/views/bpm/processInstance/index.vue @@ -222,7 +222,6 @@ const handleCreate = async (row?: ProcessInstanceVO) => { const processDefinitionDetail = await DefinitionApi.getProcessDefinition( row.processDefinitionId ) - debugger if (processDefinitionDetail.formType === 20) { message.error('重新发起流程失败,原因:该流程使用业务表单,不支持重新发起') return diff --git a/src/views/bpm/simpleWorkflow/index.vue b/src/views/bpm/simple/SimpleModelDesign.vue similarity index 50% rename from src/views/bpm/simpleWorkflow/index.vue rename to src/views/bpm/simple/SimpleModelDesign.vue index 691cf2e576239020758d016f97d9945b14a3c385..1740e03f48f5c828eaa3d0451ef071cfdcaaed48 100644 --- a/src/views/bpm/simpleWorkflow/index.vue +++ b/src/views/bpm/simple/SimpleModelDesign.vue @@ -1,13 +1,19 @@ diff --git a/src/views/bpm/task/copy/index.vue b/src/views/bpm/task/copy/index.vue index 045e2074660be02de3679eceef4a013394362007..f32a52a5de8b62570a63350f0b5d4fc993dfe471 100644 --- a/src/views/bpm/task/copy/index.vue +++ b/src/views/bpm/task/copy/index.vue @@ -45,7 +45,12 @@ - + - - + + + + + 重置 - + 核销 + + 连接扫描枪 + + + 断开扫描枪 + @@ -216,18 +227,20 @@ import { DeliveryTypeEnum } from '@/utils/constants' import { TradeOrderSummaryRespVO } from '@/api/mall/trade/order' import { DeliveryPickUpStoreVO } from '@/api/mall/trade/delivery/pickUpStore' import OrderPickUpForm from '@/views/mall/trade/order/form/OrderPickUpForm.vue' +import { ref, onMounted } from 'vue' +import { useUserStore } from '@/store/modules/user' +const message = useMessage() // 消息弹窗 + +const port = ref('') +const ports = ref([]) +const reader = ref('') defineOptions({ name: 'PickUpOrder' }) -// 列表的加载中 -const loading = ref(true) -// 列表的总页数 -const total = ref(2) -// 列表的数据 -const list = ref([]) -// 搜索的表单 -const queryFormRef = ref() -// 初始表单参数 +const loading = ref(true) // 列表的加载中 +const total = ref(2) // 列表的总页数 +const list = ref([]) // 列表的数据 +const queryFormRef = ref() // 搜索的表单 const INIT_QUERY_PARAMS = { // 页数 pageNo: 1, @@ -238,14 +251,15 @@ const INIT_QUERY_PARAMS = { // 配送方式 deliveryType: DeliveryTypeEnum.PICK_UP.type, // 自提门店 - pickUpStoreId: undefined -} -// 表单搜索 -const queryParams = ref({ ...INIT_QUERY_PARAMS }) -// 订单搜索类型 queryParam -const queryType = reactive({ queryParam: 'no' }) -// 订单统计数据 -const summary = ref() + pickUpStoreId: -1 +} // 初始表单参数 + +const queryParams = ref({ ...INIT_QUERY_PARAMS }) // 表单搜索 +const queryType = reactive({ queryParam: 'no' }) // 订单搜索类型 queryParam +const summary = ref() // 订单统计数据 + +const serialPort = ref(false) // 是否连接扫码枪 +const isUse = ref(true) // 是否可核销 // 订单聚合搜索 select 类型配置(动态搜索) const dynamicSearchList = ref([ @@ -294,13 +308,21 @@ const handleQuery = async () => { const resetQuery = () => { queryFormRef.value?.resetFields() queryParams.value = { ...INIT_QUERY_PARAMS } + if (pickUpStoreList.value.length > 0) { + queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id + } handleQuery() } /** 自提门店精简列表 */ const pickUpStoreList = ref([]) const getPickUpStoreList = async () => { - pickUpStoreList.value = await PickUpStoreApi.getListAllSimple() + pickUpStoreList.value = await PickUpStoreApi.getSimpleDeliveryPickUpStoreList() + // 移除自己无法核销的门店 + const userId = useUserStore().getUser.id + pickUpStoreList.value = pickUpStoreList.value.filter((item) => + item.verifyUserIds?.includes(userId) + ) } /** 显示核销表单 */ @@ -309,10 +331,96 @@ const handlePickup = () => { pickUpForm.value.open() } +/** 连接扫码枪 */ +const connectToSerialPort = async () => { + try { + // 判断浏览器支持串口通信 + if ( + 'serial' in navigator && + navigator.serial != null && + typeof navigator.serial === 'object' && + 'requestPort' in navigator.serial + ) { + // 提示用户选择一个串口 + port.value = await navigator.serial.requestPort() + } else { + message.error('浏览器不支持扫码枪连接,请更换浏览器重试') + return + } + + // 获取用户之前授予该网站访问权限的所有串口。 + ports.value = await navigator.serial.getPorts() + + // console.log(port.value, ports.value); + // console.log(port.value) + // 等待串口打开 + await port.value.open({ baudRate: 9600, dataBits: 8, stopBits: 2 }) + + // console.log(typeof port.value); + message.success('成功连接扫码枪') + serialPort.value = true + // readData(port.value); + readData() + } catch (error) { + // 处理连接串口出错的情况 + console.log('Error connecting to serial port:', error) + } +} + +/** 监听扫码枪输入 */ +const readData = async () => { + reader.value = port.value.readable.getReader() + let data = '' //扫码数据 + // 监听来自串口的数据 + while (true) { + const { value, done } = await reader.value.read() + if (done) { + // 允许稍后关闭串口 + reader.value.releaseLock() + break + } + // 获取发送的数据 + const serialData = new TextDecoder().decode(value) + data = `${data}${serialData}` + if (serialData.includes('\r')) { + //读取结束 + let codeData = data.replace('\r', '') + data = '' //清空下次读取不会叠加 + console.log(`二维码数据:${codeData}`) + //处理拿到数据逻辑 + pickUpForm.value.open(codeData) + } + } +} + +/** 断开扫码枪 */ +const cutPort = async () => { + if (port.value !== '') { + await reader.value.cancel() + await port.value.close() + port.value = '' + console.log('断开扫码枪连接') + message.success('已成功断开扫码枪连接') + serialPort.value = false + } else { + message.warning('请先连接或打开扫码枪') + } +} + /** 初始化 **/ -onMounted(() => { - getList() - getPickUpStoreList() +onMounted(async () => { + await getPickUpStoreList() + if (pickUpStoreList.value.length === 0) { + message.error('当前登录人没绑定任何自提点') + loading.value = false + isUse.value = true + return + } + + // 查询 + queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id + isUse.value = false + await getList() })