Explorar o código

新增支持达梦数据库的工作流

tangbin hai 1 ano
pai
achega
ff478a6366
Modificáronse 85 ficheiros con 1353 adicións e 3708 borrados
  1. 8 0
      .eslintrc.js
  2. 0 0
      lib/vform/designer.style.css
  3. 0 0
      lib/vform/designer.umd.js
  4. 286 382
      package-lock.json
  5. 10 10
      package.json
  6. 5 22
      src/components/my-flowable/package/designer/ProcessDesigner.vue
  7. 0 1071
      src/components/my-flowable/package/designer/plugins/descriptor/activitiDescriptor.json
  8. 0 1087
      src/components/my-flowable/package/designer/plugins/descriptor/camundaDescriptor.json
  9. 0 77
      src/components/my-flowable/package/designer/plugins/extension-moddle/activiti/activitiExtension.js
  10. 0 10
      src/components/my-flowable/package/designer/plugins/extension-moddle/activiti/index.js
  11. 0 144
      src/components/my-flowable/package/designer/plugins/extension-moddle/camunda/extension.js
  12. 0 7
      src/components/my-flowable/package/designer/plugins/extension-moddle/camunda/index.js
  13. 18 18
      src/components/my-flowable/package/penal/PropertiesPanel.vue
  14. 13 13
      src/components/my-flowable/package/penal/form/ElementForm.vue
  15. 5 5
      src/components/my-flowable/package/penal/listeners/ElementListeners.vue
  16. 7 7
      src/components/my-flowable/package/penal/listeners/UserTaskListeners.vue
  17. 0 13
      src/components/my-flowable/package/penal/multi-instance/ElementMultiInstance.vue
  18. 3 3
      src/components/my-flowable/package/penal/properties/ElementProperties.vue
  19. 5 5
      src/components/my-flowable/package/penal/signal-message/SignalAndMessage.vue
  20. 3 2
      src/components/my-flowable/package/penal/task/ElementTask.vue
  21. 245 82
      src/components/my-flowable/package/penal/task/task-components/UserTask.vue
  22. 3 0
      src/components/my-flowable/package/theme/process-designer.scss
  23. 15 15
      src/components/my-process-running/src/my-process-running.vue
  24. 1 1
      src/components/my-process-running/src/my-task-delegate.vue
  25. 54 0
      src/components/my-process-running/src/select-dept.vue
  26. 67 0
      src/components/my-process-running/src/select-post.vue
  27. 1 2
      src/components/my-process-running/src/select-role.vue
  28. 1 1
      src/components/my-region-tree/src/my-region-tree.vue
  29. 11 11
      src/constants/config.ts
  30. 2 2
      src/hooks/useView.ts
  31. 2 2
      src/i18n/lang/en-US.ts
  32. 1 1
      src/i18n/lang/zh-CN.ts
  33. 5 4
      src/i18n/page/en-US.ts
  34. 6 4
      src/i18n/page/zh-CN.ts
  35. 6 6
      src/layout/header/expand.vue
  36. 1 2
      src/layout/setting/index.vue
  37. 1 1
      src/router/base.ts
  38. 4 0
      src/utils/router.ts
  39. 1 1
      src/views/devtools/baseclass-add-or-update.vue
  40. 1 1
      src/views/devtools/datasource-add-or-update.vue
  41. 1 1
      src/views/devtools/fieldtype-add-or-update.vue
  42. 2 2
      src/views/devtools/generator-code.vue
  43. 1 1
      src/views/devtools/generator-edittable.vue
  44. 1 1
      src/views/devtools/generator-import.vue
  45. 1 1
      src/views/devtools/generator-menu.vue
  46. 1 1
      src/views/devtools/param-update.vue
  47. 66 0
      src/views/devtools/project.vue
  48. 1 1
      src/views/devtools/template-add-or-update.vue
  49. 2 2
      src/views/devtools/template.vue
  50. 1 1
      src/views/flow/bpmform-add-or-update.vue
  51. 1 1
      src/views/flow/bpmform.vue
  52. 0 3
      src/views/flow/done.vue
  53. 62 21
      src/views/flow/form-select.vue
  54. 108 0
      src/views/flow/form/correction.vue
  55. 19 15
      src/views/flow/model.vue
  56. 0 3
      src/views/flow/my-send.vue
  57. 1 1
      src/views/flow/process-designer.vue
  58. 0 3
      src/views/flow/running.vue
  59. 0 3
      src/views/flow/start.vue
  60. 40 16
      src/views/flow/task-form.vue
  61. 0 2
      src/views/flow/todo.vue
  62. 1 1
      src/views/home.vue
  63. 1 1
      src/views/job/schedule-add-or-update.vue
  64. 3 4
      src/views/job/schedule.vue
  65. 3 3
      src/views/login.vue
  66. 0 211
      src/views/notice/notice-add-or-update.vue
  67. 0 68
      src/views/notice/notice-user-view.vue
  68. 0 78
      src/views/notice/notice-user.vue
  69. 0 76
      src/views/notice/notice-view.vue
  70. 0 85
      src/views/notice/notice.vue
  71. 2 2
      src/views/oss/oss-config.vue
  72. 36 10
      src/views/sys/dept-add-or-update.vue
  73. 1 1
      src/views/sys/dict-data-add-or-update.vue
  74. 1 1
      src/views/sys/dict-type-add-or-update.vue
  75. 1 1
      src/views/sys/menu-add-or-update.vue
  76. 1 1
      src/views/sys/online.vue
  77. 1 1
      src/views/sys/params-add-or-update.vue
  78. 1 1
      src/views/sys/post-add-or-update.vue
  79. 106 0
      src/views/sys/region-add-or-update.vue
  80. 92 0
      src/views/sys/region.vue
  81. 1 1
      src/views/sys/role-add-or-update.vue
  82. 1 1
      src/views/sys/user-add-or-update.vue
  83. 1 1
      src/views/sys/user-update-password.vue
  84. 0 68
      src/views/ureport/ureport.vue
  85. 1 1
      vite.config.ts

+ 8 - 0
.eslintrc.js

@@ -16,9 +16,17 @@ module.exports = {
       jsx: true
     }
   },
+
   rules: {
     "no-console": "off",
     "no-debugger": "off",
+    "@typescript-eslint/no-this-alias": [
+      "error",
+      {
+        allowDestructuring: false, // Disallow `const { props, state } = this`; true by default
+        allowedNames: ["that"] // Allow `const self = this`; `[]` by default
+      }
+    ],
     "@typescript-eslint/no-explicit-any": ["off"],
     "@typescript-eslint/no-var-requires": 0,
     "vue/multi-word-component-names": "off"

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
lib/vform/designer.style.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
lib/vform/designer.umd.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 286 - 382
package-lock.json


+ 10 - 10
package.json

@@ -1,6 +1,6 @@
 {
   "name": "security-enterprise-admin",
-  "version": "4.0.0",
+  "version": "4.1.0",
   "private": true,
   "scripts": {
     "dev": "vite",
@@ -19,16 +19,16 @@
     ]
   },
   "dependencies": {
-    "@element-plus/icons-vue": "2.0.6",
+    "@element-plus/icons-vue": "2.3.1",
     "@tinymce/tinymce-vue": "4.0.4",
     "@vueuse/core": "9.1.1",
     "@wangeditor/editor": "5.1.1",
     "@wangeditor/editor-for-vue": "^5.1.12",
-    "axios": "0.27.2",
+    "axios": "1.6.0",
     "classnames": "^2.3.1",
     "core-js": "^3.14.0",
     "echarts": "^5.2.2",
-    "element-plus": "2.3.9",
+    "element-plus": "2.4.4",
     "lodash": "^4.17.21",
     "mitt": "^2.1.0",
     "monaco-editor": "^0.25.2",
@@ -37,10 +37,10 @@
     "qs": "^6.10.1",
     "quill": "^1.3.7",
     "sortablejs": "^1.13.0",
-    "vue": "^3.2.37",
+    "vue": "^3.4.15",
     "vue-echarts": "^6.0.0",
     "vue-i18n": "9.1.9",
-    "vue-router": "4.0.11",
+    "vue-router": "4.2.5",
     "vxe-table": "4.0.23",
     "xe-utils": "3.3.0",
     "bpmn-js": "^8.10.0",
@@ -55,8 +55,8 @@
     "@types/qs": "^6.9.6",
     "@types/quill": "^2.0.8",
     "@types/sortablejs": "^1.10.6",
-    "@vitejs/plugin-vue": "4.2.3",
-    "@vue/compiler-sfc": "^3.2.37",
+    "@vitejs/plugin-vue": "4.6.2",
+    "@vue/compiler-sfc": "^3.4.15",
     "@typescript-eslint/eslint-plugin": "^5.23.0",
     "@typescript-eslint/parser": "^5.23.0",
     "@vue/eslint-config-prettier": "^7.0.0",
@@ -69,10 +69,10 @@
     "lint-staged": "^11.0.0",
     "prettier": "^2.6.2",
     "typescript": "^4.6.3",
-    "vite": "4.4.8",
+    "vite": "4.4.12",
     "vite-plugin-html": "^2.1.1",
     "vite-plugin-svg-icons": "2.0.1",
     "vite-tsconfig-paths": "3.4.0",
-    "vue-tsc": "1.8.8"
+    "vue-tsc": "1.8.27"
   }
 }

+ 5 - 22
src/components/my-flowable/package/designer/ProcessDesigner.vue

@@ -74,15 +74,9 @@ import customTranslate from "./plugins/translate/customTranslate";
 import translationsCN from "./plugins/translate/zh";
 // 模拟流转流程
 import tokenSimulation from "bpmn-js-token-simulation";
-// 标签解析构建器
-// import bpmnPropertiesProvider from "bpmn-js-properties-panel/lib/provider/bpmn";
 // 标签解析 Moddle
-import camundaModdleDescriptor from "./plugins/descriptor/camundaDescriptor.json";
-import activitiModdleDescriptor from "./plugins/descriptor/activitiDescriptor.json";
 import flowableModdleDescriptor from "./plugins/descriptor/flowableDescriptor.json";
 // 标签解析 Extension
-import camundaModdleExtension from "./plugins/extension-moddle/camunda";
-import activitiModdleExtension from "./plugins/extension-moddle/activiti";
 import flowableModdleExtension from "./plugins/extension-moddle/flowable";
 // 引入json转换与高亮
 // import X2JS from "x2js";
@@ -143,7 +137,7 @@ export default {
     },
     prefix: {
       type: String,
-      default: "camunda"
+      default: "flowable"
     },
     events: {
       type: Array,
@@ -214,15 +208,10 @@ export default {
       // if (this.prefix === "bpmn") {
       //   Modules.push(bpmnModdleExtension);
       // }
-      if (this.prefix === "camunda") {
-        Modules.push(camundaModdleExtension);
-      }
+
       if (this.prefix === "flowable") {
         Modules.push(flowableModdleExtension);
       }
-      if (this.prefix === "activiti") {
-        Modules.push(activitiModdleExtension);
-      }
 
       return Modules;
     },
@@ -241,15 +230,9 @@ export default {
       }
 
       // 根据需要的 "流程类型" 设置 对应的解析文件
-      if (this.prefix === "activiti") {
-        Extensions.activiti = activitiModdleDescriptor;
-      }
       if (this.prefix === "flowable") {
         Extensions.flowable = flowableModdleDescriptor;
       }
-      if (this.prefix === "camunda") {
-        Extensions.camunda = camundaModdleDescriptor;
-      }
 
       return Extensions;
     }
@@ -335,7 +318,7 @@ export default {
      */
     async downloadProcess(type, name) {
       try {
-        const _this = this;
+        const that = this;
         // 按需要类型创建文件并下载
         if (type === "xml" || type === "bpmn") {
           const { err, xml } = await this.bpmnModeler.saveXML();
@@ -343,7 +326,7 @@ export default {
           if (err) {
             console.error(`[Process Designer Warn ]: ${err.message || err}`);
           }
-          let { href, filename } = _this.setEncoded(type, name, xml);
+          let { href, filename } = that.setEncoded(type, name, xml);
           downloadFunc(href, filename);
         } else {
           const { err, svg } = await this.bpmnModeler.saveSVG();
@@ -351,7 +334,7 @@ export default {
           if (err) {
             return console.error(err);
           }
-          let { href, filename } = _this.setEncoded(type, name, svg);
+          let { href, filename } = that.setEncoded(type, name, svg);
           downloadFunc(href, filename);
         }
       } catch (e) {

+ 0 - 1071
src/components/my-flowable/package/designer/plugins/descriptor/activitiDescriptor.json

@@ -1,1071 +0,0 @@
-{
-  "name": "Activiti",
-  "uri": "http://activiti.org/bpmn",
-  "prefix": "activiti",
-  "xml": {
-    "tagAlias": "lowerCase"
-  },
-  "associations": [],
-  "types": [
-    {
-      "name": "Definitions",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Definitions"
-      ],
-      "properties": [
-        {
-          "name": "diagramRelationId",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InOutBinding",
-      "superClass": [
-        "Element"
-      ],
-      "isAbstract": true,
-      "properties": [
-        {
-          "name": "source",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "sourceExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "target",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "businessKey",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "local",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "variables",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "In",
-      "superClass": [
-        "InOutBinding"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:CallActivity"
-        ]
-      }
-    },
-    {
-      "name": "Out",
-      "superClass": [
-        "InOutBinding"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:CallActivity"
-        ]
-      }
-    },
-    {
-      "name": "AsyncCapable",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Activity",
-        "bpmn:Gateway",
-        "bpmn:Event"
-      ],
-      "properties": [
-        {
-          "name": "async",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "asyncBefore",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "asyncAfter",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "exclusive",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": true
-        }
-      ]
-    },
-    {
-      "name": "JobPriorized",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process",
-        "activiti:AsyncCapable"
-      ],
-      "properties": [
-        {
-          "name": "jobPriority",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "SignalEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:SignalEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "async",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        }
-      ]
-    },
-    {
-      "name": "ErrorEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ErrorEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "errorCodeVariable",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "errorMessageVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Error",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Error"
-      ],
-      "properties": [
-        {
-          "name": "activiti:errorMessage",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "PotentialStarter",
-      "superClass": [
-        "Element"
-      ],
-      "properties": [
-        {
-          "name": "resourceAssignmentExpression",
-          "type": "bpmn:ResourceAssignmentExpression"
-        }
-      ]
-    },
-    {
-      "name": "FormSupported",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:StartEvent",
-        "bpmn:UserTask"
-      ],
-      "properties": [
-        {
-          "name": "formHandlerClass",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "formKey",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "TemplateSupported",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process",
-        "bpmn:FlowElement"
-      ],
-      "properties": [
-        {
-          "name": "modelerTemplate",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Initiator",
-      "isAbstract": true,
-      "extends": [ "bpmn:StartEvent" ],
-      "properties": [
-        {
-          "name": "initiator",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ScriptTask",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ScriptTask"
-      ],
-      "properties": [
-        {
-          "name": "resultVariable",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Process",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process"
-      ],
-      "properties": [
-        {
-          "name": "candidateStarterGroups",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateStarterUsers",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "versionTag",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "historyTimeToLive",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "isStartableInTasklist",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": true
-        },
-        {
-          "name":"executionListener",
-          "isAbstract": true,
-          "type":"Expression"
-        }
-      ]
-    },
-    {
-      "name": "EscalationEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:EscalationEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "escalationCodeVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "FormalExpression",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:FormalExpression"
-      ],
-      "properties": [
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "multiinstance_type",
-      "superClass":[
-        "Element"
-      ]
-    },
-    {
-      "name": "multiinstance_condition",
-      "superClass":[
-        "Element"
-      ]
-    },
-    {
-      "name": "Assignable",
-      "extends": [ "bpmn:UserTask" ],
-      "properties": [
-        {
-          "name": "assignee",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateUsers",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateGroups",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "dueDate",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "followUpDate",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "priority",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "multiinstance_condition",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "CallActivity",
-      "extends": [ "bpmn:CallActivity" ],
-      "properties": [
-        {
-          "name": "calledElementBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "calledElementVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "calledElementVersionTag",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "calledElementTenantId",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseRef",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "caseVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseTenantId",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableMappingClass",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableMappingDelegateExpression",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ServiceTaskLike",
-      "extends": [
-        "bpmn:ServiceTask",
-        "bpmn:BusinessRuleTask",
-        "bpmn:SendTask",
-        "bpmn:MessageEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resultVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "DmnCapable",
-      "extends": [
-        "bpmn:BusinessRuleTask"
-      ],
-      "properties": [
-        {
-          "name": "decisionRef",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "decisionRefBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "decisionRefVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "mapDecisionResult",
-          "isAttr": true,
-          "type": "String",
-          "default": "resultList"
-        },
-        {
-          "name": "decisionRefTenantId",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ExternalCapable",
-      "extends": [
-        "activiti:ServiceTaskLike"
-      ],
-      "properties": [
-        {
-          "name": "type",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "topic",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "TaskPriorized",
-      "extends": [
-        "bpmn:Process",
-        "activiti:ExternalCapable"
-      ],
-      "properties": [
-        {
-          "name": "taskPriority",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Properties",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [ "*" ]
-      },
-      "properties": [
-        {
-          "name": "values",
-          "type": "Property",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Property",
-      "superClass": [
-        "Element"
-      ],
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "value",
-          "type": "String",
-          "isAttr": true
-        }
-      ]
-    },
-    {
-      "name": "Connector",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [
-          "activiti:ServiceTaskLike"
-        ]
-      },
-      "properties": [
-        {
-          "name": "inputOutput",
-          "type": "InputOutput"
-        },
-        {
-          "name": "connectorId",
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InputOutput",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:FlowNode",
-          "activiti:Connector"
-        ]
-      },
-      "properties": [
-        {
-          "name": "inputOutput",
-          "type": "InputOutput"
-        },
-        {
-          "name": "connectorId",
-          "type": "String"
-        },
-        {
-          "name": "inputParameters",
-          "isMany": true,
-          "type": "InputParameter"
-        },
-        {
-          "name": "outputParameters",
-          "isMany": true,
-          "type": "OutputParameter"
-        }
-      ]
-    },
-    {
-      "name": "InputOutputParameter",
-      "properties": [
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        },
-        {
-          "name": "definition",
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "InputOutputParameterDefinition",
-      "isAbstract": true
-    },
-    {
-      "name": "List",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "items",
-          "isMany": true,
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "Map",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "entries",
-          "isMany": true,
-          "type": "Entry"
-        }
-      ]
-    },
-    {
-      "name": "Entry",
-      "properties": [
-        {
-          "name": "key",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        },
-        {
-          "name": "definition",
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "Value",
-      "superClass": [
-        "InputOutputParameterDefinition"
-      ],
-      "properties": [
-        {
-          "name": "id",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Script",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "scriptFormat",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Field",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "activiti:ServiceTaskLike",
-          "activiti:ExecutionListener",
-          "activiti:TaskListener"
-        ]
-      },
-      "properties": [
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "expression",
-          "type": "String"
-        },
-        {
-          "name": "stringValue",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "string",
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InputParameter",
-      "superClass": [ "InputOutputParameter" ]
-    },
-    {
-      "name": "OutputParameter",
-      "superClass": [ "InputOutputParameter" ]
-    },
-    {
-      "name": "Collectable",
-      "isAbstract": true,
-      "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ],
-      "superClass": [ "activiti:AsyncCapable" ],
-      "properties": [
-        {
-          "name": "collection",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "elementVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "FailedJobRetryTimeCycle",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "activiti:AsyncCapable",
-          "bpmn:MultiInstanceLoopCharacteristics"
-        ]
-      },
-      "properties": [
-        {
-          "name": "body",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ExecutionListener",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:Task",
-          "bpmn:ServiceTask",
-          "bpmn:UserTask",
-          "bpmn:BusinessRuleTask",
-          "bpmn:ScriptTask",
-          "bpmn:ReceiveTask",
-          "bpmn:ManualTask",
-          "bpmn:ExclusiveGateway",
-          "bpmn:SequenceFlow",
-          "bpmn:ParallelGateway",
-          "bpmn:InclusiveGateway",
-          "bpmn:EventBasedGateway",
-          "bpmn:StartEvent",
-          "bpmn:IntermediateCatchEvent",
-          "bpmn:IntermediateThrowEvent",
-          "bpmn:EndEvent",
-          "bpmn:BoundaryEvent",
-          "bpmn:CallActivity",
-          "bpmn:SubProcess",
-          "bpmn:Process"
-        ]
-      },
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "event",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "script",
-          "type": "Script"
-        },
-        {
-          "name": "fields",
-          "type": "Field",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "TaskListener",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:UserTask"
-        ]
-      },
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "event",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "script",
-          "type": "Script"
-        },
-        {
-          "name": "fields",
-          "type": "Field",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "FormProperty",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:StartEvent",
-          "bpmn:UserTask"
-        ]
-      },
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "type",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "required",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "readable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "writable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "variable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "expression",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "datePattern",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "default",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "values",
-          "type": "Value",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "FormProperty",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "label",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "type",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "datePattern",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "defaultValue",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "properties",
-          "type": "Properties"
-        },
-        {
-          "name": "validation",
-          "type": "Validation"
-        },
-        {
-          "name": "values",
-          "type": "Value",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Validation",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "constraints",
-          "type": "Constraint",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Constraint",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "config",
-          "type": "String",
-          "isAttr": true
-        }
-      ]
-    },
-    {
-      "name": "ConditionalEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ConditionalEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "variableName",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableEvent",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    }
-  ],
-  "emumerations": [ ]
-}

+ 0 - 1087
src/components/my-flowable/package/designer/plugins/descriptor/camundaDescriptor.json

@@ -1,1087 +0,0 @@
-{
-  "name": "Camunda",
-  "uri": "http://camunda.org/schema/1.0/bpmn",
-  "prefix": "camunda",
-  "xml": {
-    "tagAlias": "lowerCase"
-  },
-  "associations": [],
-  "types": [
-    {
-      "name": "Definitions",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Definitions"
-      ],
-      "properties": [
-        {
-          "name": "diagramRelationId",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InOutBinding",
-      "superClass": [
-        "Element"
-      ],
-      "isAbstract": true,
-      "properties": [
-        {
-          "name": "source",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "sourceExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "target",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "businessKey",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "local",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "variables",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "In",
-      "superClass": [
-        "InOutBinding"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:CallActivity",
-          "bpmn:SignalEventDefinition"
-        ]
-      }
-    },
-    {
-      "name": "Out",
-      "superClass": [
-        "InOutBinding"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:CallActivity"
-        ]
-      }
-    },
-    {
-      "name": "AsyncCapable",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Activity",
-        "bpmn:Gateway",
-        "bpmn:Event"
-      ],
-      "properties": [
-        {
-          "name": "async",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "asyncBefore",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "asyncAfter",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        },
-        {
-          "name": "exclusive",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": true
-        }
-      ]
-    },
-    {
-      "name": "JobPriorized",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process",
-        "camunda:AsyncCapable"
-      ],
-      "properties": [
-        {
-          "name": "jobPriority",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "SignalEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:SignalEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "async",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": false
-        }
-      ]
-    },
-    {
-      "name": "ErrorEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ErrorEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "errorCodeVariable",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "errorMessageVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Error",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Error"
-      ],
-      "properties": [
-        {
-          "name": "camunda:errorMessage",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "PotentialStarter",
-      "superClass": [
-        "Element"
-      ],
-      "properties": [
-        {
-          "name": "resourceAssignmentExpression",
-          "type": "bpmn:ResourceAssignmentExpression"
-        }
-      ]
-    },
-    {
-      "name": "FormSupported",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:StartEvent",
-        "bpmn:UserTask"
-      ],
-      "properties": [
-        {
-          "name": "formHandlerClass",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "formKey",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "TemplateSupported",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process",
-        "bpmn:FlowElement"
-      ],
-      "properties": [
-        {
-          "name": "modelerTemplate",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "modelerTemplateVersion",
-          "isAttr": true,
-          "type": "Integer"
-        }
-      ]
-    },
-    {
-      "name": "Initiator",
-      "isAbstract": true,
-      "extends": [ "bpmn:StartEvent" ],
-      "properties": [
-        {
-          "name": "initiator",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ScriptTask",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ScriptTask"
-      ],
-      "properties": [
-        {
-          "name": "resultVariable",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Process",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:Process"
-      ],
-      "properties": [
-        {
-          "name": "candidateStarterGroups",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateStarterUsers",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "versionTag",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "historyTimeToLive",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "isStartableInTasklist",
-          "isAttr": true,
-          "type": "Boolean",
-          "default": true
-        }
-      ]
-    },
-    {
-      "name": "EscalationEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:EscalationEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "escalationCodeVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "FormalExpression",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:FormalExpression"
-      ],
-      "properties": [
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Assignable",
-      "extends": [ "bpmn:UserTask" ],
-      "properties": [
-        {
-          "name": "assignee",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateUsers",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateGroups",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "dueDate",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "followUpDate",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "priority",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "CallActivity",
-      "extends": [ "bpmn:CallActivity" ],
-      "properties": [
-        {
-          "name": "calledElementBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "calledElementVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "calledElementVersionTag",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "calledElementTenantId",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseRef",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "caseVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "caseTenantId",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableMappingClass",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableMappingDelegateExpression",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ServiceTaskLike",
-      "extends": [
-        "bpmn:ServiceTask",
-        "bpmn:BusinessRuleTask",
-        "bpmn:SendTask",
-        "bpmn:MessageEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resultVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "DmnCapable",
-      "extends": [
-        "bpmn:BusinessRuleTask"
-      ],
-      "properties": [
-        {
-          "name": "decisionRef",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "decisionRefBinding",
-          "isAttr": true,
-          "type": "String",
-          "default": "latest"
-        },
-        {
-          "name": "decisionRefVersion",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "mapDecisionResult",
-          "isAttr": true,
-          "type": "String",
-          "default": "resultList"
-        },
-        {
-          "name": "decisionRefTenantId",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ExternalCapable",
-      "extends": [
-        "camunda:ServiceTaskLike"
-      ],
-      "properties": [
-        {
-          "name": "type",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "topic",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "TaskPriorized",
-      "extends": [
-        "bpmn:Process",
-        "camunda:ExternalCapable"
-      ],
-      "properties": [
-        {
-          "name": "taskPriority",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Properties",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [ "*" ]
-      },
-      "properties": [
-        {
-          "name": "values",
-          "type": "Property",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Property",
-      "superClass": [
-        "Element"
-      ],
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "value",
-          "type": "String",
-          "isAttr": true
-        }
-      ]
-    },
-    {
-      "name": "Connector",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [
-          "camunda:ServiceTaskLike"
-        ]
-      },
-      "properties": [
-        {
-          "name": "inputOutput",
-          "type": "InputOutput"
-        },
-        {
-          "name": "connectorId",
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InputOutput",
-      "superClass": [
-        "Element"
-      ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:FlowNode",
-          "camunda:Connector"
-        ]
-      },
-      "properties": [
-        {
-          "name": "inputOutput",
-          "type": "InputOutput"
-        },
-        {
-          "name": "connectorId",
-          "type": "String"
-        },
-        {
-          "name": "inputParameters",
-          "isMany": true,
-          "type": "InputParameter"
-        },
-        {
-          "name": "outputParameters",
-          "isMany": true,
-          "type": "OutputParameter"
-        }
-      ]
-    },
-    {
-      "name": "InputOutputParameter",
-      "properties": [
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        },
-        {
-          "name": "definition",
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "InputOutputParameterDefinition",
-      "isAbstract": true
-    },
-    {
-      "name": "List",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "items",
-          "isMany": true,
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "Map",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "entries",
-          "isMany": true,
-          "type": "Entry"
-        }
-      ]
-    },
-    {
-      "name": "Entry",
-      "properties": [
-        {
-          "name": "key",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        },
-        {
-          "name": "definition",
-          "type": "InputOutputParameterDefinition"
-        }
-      ]
-    },
-    {
-      "name": "Value",
-      "superClass": [
-        "InputOutputParameterDefinition"
-      ],
-      "properties": [
-        {
-          "name": "id",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Script",
-      "superClass": [ "InputOutputParameterDefinition" ],
-      "properties": [
-        {
-          "name": "scriptFormat",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "resource",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "value",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "Field",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "camunda:ServiceTaskLike",
-          "camunda:ExecutionListener",
-          "camunda:TaskListener"
-        ]
-      },
-      "properties": [
-        {
-          "name": "name",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "expression",
-          "type": "String"
-        },
-        {
-          "name": "stringValue",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "string",
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "InputParameter",
-      "superClass": [ "InputOutputParameter" ]
-    },
-    {
-      "name": "OutputParameter",
-      "superClass": [ "InputOutputParameter" ]
-    },
-    {
-      "name": "Collectable",
-      "isAbstract": true,
-      "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ],
-      "superClass": [ "camunda:AsyncCapable" ],
-      "properties": [
-        {
-          "name": "collection",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "elementVariable",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "FailedJobRetryTimeCycle",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "camunda:AsyncCapable",
-          "bpmn:MultiInstanceLoopCharacteristics"
-        ]
-      },
-      "properties": [
-        {
-          "name": "body",
-          "isBody": true,
-          "type": "String"
-        }
-      ]
-    },
-    {
-      "name": "ExecutionListener",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:Task",
-          "bpmn:ServiceTask",
-          "bpmn:UserTask",
-          "bpmn:BusinessRuleTask",
-          "bpmn:ScriptTask",
-          "bpmn:ReceiveTask",
-          "bpmn:ManualTask",
-          "bpmn:ExclusiveGateway",
-          "bpmn:SequenceFlow",
-          "bpmn:ParallelGateway",
-          "bpmn:InclusiveGateway",
-          "bpmn:EventBasedGateway",
-          "bpmn:StartEvent",
-          "bpmn:IntermediateCatchEvent",
-          "bpmn:IntermediateThrowEvent",
-          "bpmn:EndEvent",
-          "bpmn:BoundaryEvent",
-          "bpmn:CallActivity",
-          "bpmn:SubProcess",
-          "bpmn:Process"
-        ]
-      },
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "event",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "script",
-          "type": "Script"
-        },
-        {
-          "name": "fields",
-          "type": "Field",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "TaskListener",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:UserTask"
-        ]
-      },
-      "properties": [
-        {
-          "name": "expression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "class",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "delegateExpression",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "event",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "script",
-          "type": "Script"
-        },
-        {
-          "name": "fields",
-          "type": "Field",
-          "isMany": true
-        },
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "eventDefinitions",
-          "type": "bpmn:TimerEventDefinition",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "FormProperty",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:StartEvent",
-          "bpmn:UserTask"
-        ]
-      },
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "type",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "required",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "readable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "writable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "variable",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "expression",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "datePattern",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "default",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "values",
-          "type": "Value",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "FormData",
-      "superClass": [ "Element" ],
-      "meta": {
-        "allowedIn": [
-          "bpmn:StartEvent",
-          "bpmn:UserTask"
-        ]
-      },
-      "properties": [
-        {
-          "name": "fields",
-          "type": "FormField",
-          "isMany": true
-        },
-        {
-          "name": "businessKey",
-          "type": "String",
-          "isAttr": true
-        }
-      ]
-    },
-    {
-      "name": "FormField",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "id",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "label",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "type",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "datePattern",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "defaultValue",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "properties",
-          "type": "Properties"
-        },
-        {
-          "name": "validation",
-          "type": "Validation"
-        },
-        {
-          "name": "values",
-          "type": "Value",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Validation",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "constraints",
-          "type": "Constraint",
-          "isMany": true
-        }
-      ]
-    },
-    {
-      "name": "Constraint",
-      "superClass": [ "Element" ],
-      "properties": [
-        {
-          "name": "name",
-          "type": "String",
-          "isAttr": true
-        },
-        {
-          "name": "config",
-          "type": "String",
-          "isAttr": true
-        }
-      ]
-    },
-    {
-      "name": "ConditionalEventDefinition",
-      "isAbstract": true,
-      "extends": [
-        "bpmn:ConditionalEventDefinition"
-      ],
-      "properties": [
-        {
-          "name": "variableName",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "variableEvents",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    }
-  ],
-  "emumerations": [ ]
-}

+ 0 - 77
src/components/my-flowable/package/designer/plugins/extension-moddle/activiti/activitiExtension.js

@@ -1,77 +0,0 @@
-"use strict";
-
-import { some } from "@/components/my-flowable/utils/min-dash.js";
-
-var ALLOWED_TYPES = {
-  FailedJobRetryTimeCycle: [
-    "bpmn:StartEvent",
-    "bpmn:BoundaryEvent",
-    "bpmn:IntermediateCatchEvent",
-    "bpmn:Activity"
-  ],
-  Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"],
-  Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"]
-};
-
-function is(element, type) {
-  return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
-}
-
-function exists(element) {
-  return element && element.length;
-}
-
-function includesType(collection, type) {
-  return (
-    exists(collection) &&
-    some(collection, function (element) {
-      return is(element, type);
-    })
-  );
-}
-
-function anyType(element, types) {
-  return some(types, function (type) {
-    return is(element, type);
-  });
-}
-
-function isAllowed(propName, propDescriptor, newElement) {
-  var name = propDescriptor.name;
-  var types = ALLOWED_TYPES[name.replace(/activiti:/, "")];
-
-  return name === propName && anyType(newElement, types);
-}
-
-export default function ActivitiModdleExtension(eventBus) {
-  eventBus.on(
-    "property.clone",
-    function (context) {
-      var newElement = context.newElement;
-      var propDescriptor = context.propertyDescriptor;
-
-      this.canCloneProperty(newElement, propDescriptor);
-    },
-    this
-  );
-}
-
-ActivitiModdleExtension.$inject = ["eventBus"];
-
-ActivitiModdleExtension.prototype.canCloneProperty = function (newElement, propDescriptor) {
-  if (isAllowed("activiti:FailedJobRetryTimeCycle", propDescriptor, newElement)) {
-    return (
-      includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") ||
-      includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") ||
-      is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics")
-    );
-  }
-
-  if (isAllowed("activiti:Connector", propDescriptor, newElement)) {
-    return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
-  }
-
-  if (isAllowed("activiti:Field", propDescriptor, newElement)) {
-    return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
-  }
-};

+ 0 - 10
src/components/my-flowable/package/designer/plugins/extension-moddle/activiti/index.js

@@ -1,10 +0,0 @@
-/*
- * @author igdianov
- * address https://github.com/igdianov/activiti-bpmn-moddle
- * */
-
-import ActivitiModdleExtension from './activitiExtension.js'
-export default {
-  __init__: ['ActivitiModdleExtension'],
-  ActivitiModdleExtension: ['type', ActivitiModdleExtension]
-};

+ 0 - 144
src/components/my-flowable/package/designer/plugins/extension-moddle/camunda/extension.js

@@ -1,144 +0,0 @@
-"use strict";
-
-import { some, isObject, isFunction } from "@/components/my-flowable/utils/min-dash.js";
-
-var WILDCARD = "*";
-
-export default function CamundaModdleExtension(eventBus) {
-  var self = this;
-
-  eventBus.on("moddleCopy.canCopyProperty", function (context) {
-    var property = context.property;
-    var parent = context.parent;
-
-    return self.canCopyProperty(property, parent);
-  });
-}
-
-CamundaModdleExtension.$inject = ["eventBus"];
-
-/**
- * Check wether to disallow copying property.
- */
-CamundaModdleExtension.prototype.canCopyProperty = function (property, parent) {
-  // (1) check wether property is allowed in parent
-  if (isObject(property) && !isAllowedInParent(property, parent)) {
-    return false;
-  }
-
-  // (2) check more complex scenarios
-
-  if (is(property, "camunda:InputOutput") && !this.canHostInputOutput(parent)) {
-    return false;
-  }
-
-  if (isAny(property, ["camunda:Connector", "camunda:Field"]) && !this.canHostConnector(parent)) {
-    return false;
-  }
-
-  if (is(property, "camunda:In") && !this.canHostIn(parent)) {
-    return false;
-  }
-};
-
-CamundaModdleExtension.prototype.canHostInputOutput = function (parent) {
-  // allowed in camunda:Connector
-  var connector = getParent(parent, "camunda:Connector");
-
-  if (connector) {
-    return true;
-  }
-
-  // special rules inside bpmn:FlowNode
-  var flowNode = getParent(parent, "bpmn:FlowNode");
-
-  if (!flowNode) {
-    return false;
-  }
-
-  if (isAny(flowNode, ["bpmn:StartEvent", "bpmn:Gateway", "bpmn:BoundaryEvent"])) {
-    return false;
-  }
-
-  if (is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent")) {
-    return false;
-  }
-
-  return true;
-};
-
-CamundaModdleExtension.prototype.canHostConnector = function (parent) {
-  var serviceTaskLike = getParent(parent, "camunda:ServiceTaskLike");
-
-  if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) {
-    // only allow on throw and end events
-    return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
-  }
-
-  return true;
-};
-
-CamundaModdleExtension.prototype.canHostIn = function (parent) {
-  var callActivity = getParent(parent, "bpmn:CallActivity");
-
-  if (callActivity) {
-    return true;
-  }
-
-  var signalEventDefinition = getParent(parent, "bpmn:SignalEventDefinition");
-
-  if (signalEventDefinition) {
-    // only allow on throw and end events
-    return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
-  }
-
-  return true;
-};
-
-// helpers //////////
-
-function is(element, type) {
-  return element && isFunction(element.$instanceOf) && element.$instanceOf(type);
-}
-
-function isAny(element, types) {
-  return some(types, function (t) {
-    return is(element, t);
-  });
-}
-
-function getParent(element, type) {
-  if (!type) {
-    return element.$parent;
-  }
-
-  if (is(element, type)) {
-    return element;
-  }
-
-  if (!element.$parent) {
-    return;
-  }
-
-  return getParent(element.$parent, type);
-}
-
-function isAllowedInParent(property, parent) {
-  // (1) find property descriptor
-  var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type);
-
-  var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn;
-
-  if (!allowedIn || isWildcard(allowedIn)) {
-    return true;
-  }
-
-  // (2) check wether property has parent of allowed type
-  return some(allowedIn, function (type) {
-    return getParent(parent, type);
-  });
-}
-
-function isWildcard(allowedIn) {
-  return allowedIn.indexOf(WILDCARD) !== -1;
-}

+ 0 - 7
src/components/my-flowable/package/designer/plugins/extension-moddle/camunda/index.js

@@ -1,7 +0,0 @@
-'use strict';
-
-import CamundaModdleExtension from './extension.js';
-export default {
-  __init__: ['CamundaModdleExtension'],
-  CamundaModdleExtension: ['type', CamundaModdleExtension]
-};

+ 18 - 18
src/components/my-flowable/package/penal/PropertiesPanel.vue

@@ -39,16 +39,16 @@
             <el-icon><checked /></el-icon>审核者
           </div>
         </template>
-        <element-task :id="elementId" :key="elementId" :type="elementType" />
-      </el-collapse-item>
-      <el-collapse-item name="multiInstance" v-if="elementType.indexOf('Task') !== -1" key="multiInstance">
-        <template #title>
-          <div class="panel-tab__title">
-            <el-icon><help-filled /></el-icon>会签配置
-          </div>
-        </template>
-        <element-multi-instance :business-object="elementBusinessObject" :type="elementType" />
+        <element-task :id="elementId" :key="elementId" :business-object="elementBusinessObject" :type="elementType" />
       </el-collapse-item>
+      <!--      <el-collapse-item name="multiInstance" v-if="elementType.indexOf('Task') !== -1" key="multiInstance">-->
+      <!--        <template #title>-->
+      <!--          <div class="panel-tab__title">-->
+      <!--            <el-icon><help-filled /></el-icon>会签配置-->
+      <!--          </div>-->
+      <!--        </template>-->
+      <!--        <element-multi-instance :business-object="elementBusinessObject" :type="elementType" />-->
+      <!--      </el-collapse-item>-->
       <el-collapse-item name="listeners" key="listeners">
         <template #title>
           <div class="panel-tab__title">
@@ -73,14 +73,14 @@
         </template>
         <element-properties :id="elementId" :type="elementType" />
       </el-collapse-item>
-      <el-collapse-item name="other" key="other">
-        <template #title>
-          <div class="panel-tab__title">
-            <el-icon><promotion /></el-icon>其他
-          </div>
-        </template>
-        <element-other-config :id="elementId" />
-      </el-collapse-item>
+      <!--      <el-collapse-item name="other" key="other">-->
+      <!--        <template #title>-->
+      <!--          <div class="panel-tab__title">-->
+      <!--            <el-icon><promotion /></el-icon>其他-->
+      <!--          </div>-->
+      <!--        </template>-->
+      <!--        <element-other-config :id="elementId" />-->
+      <!--      </el-collapse-item>-->
     </el-collapse>
   </div>
 </template>
@@ -113,7 +113,7 @@ export default {
     FlowCondition,
     ElementMultiInstance,
     ElementTask,
-    ElementOtherConfig,
+    // ElementOtherConfig,
     ElementBaseInfo
   },
   componentName: "MyPropertiesPanel",

+ 13 - 13
src/components/my-flowable/package/penal/form/ElementForm.vue

@@ -17,11 +17,11 @@
       <el-divider
         ><el-icon><coin /></el-icon> 表单字段</el-divider
       >
-      <el-table :data="fieldList" max-height="240" border fit>
+      <el-table :data="fieldList" max-height="240" border fit show-overflow-tooltip>
         <el-table-column label="序号" type="index" width="50px" />
-        <el-table-column label="字段名称" prop="label" min-width="80px" show-overflow-tooltip />
-        <el-table-column label="字段类型" prop="type" min-width="80px" :formatter="(row) => fieldType[row.type] || row.type" show-overflow-tooltip />
-        <el-table-column label="默认值" prop="defaultValue" min-width="80px" show-overflow-tooltip />
+        <el-table-column label="字段名称" prop="label" min-width="80px" />
+        <el-table-column label="字段类型" prop="type" min-width="80px" :formatter="(row) => fieldType[row.type] || row.type" />
+        <el-table-column label="默认值" prop="defaultValue" min-width="80px" />
         <el-table-column label="操作" width="90px">
           <template v-slot="{ row, $index }">
             <el-button link type="" @click="openFieldForm(row, $index)">编辑</el-button>
@@ -69,10 +69,10 @@
           >
           <el-button type="primary" @click="openFieldOptionForm(null, -1, 'enum')">添加枚举值</el-button>
         </p>
-        <el-table key="enum-table" :data="fieldEnumList" max-height="240" border fit>
+        <el-table key="enum-table" :data="fieldEnumList" show-overflow-tooltip max-height="240" border fit>
           <el-table-column label="序号" width="50px" type="index" />
-          <el-table-column label="枚举值编号" prop="id" min-width="100px" show-overflow-tooltip />
-          <el-table-column label="枚举值名称" prop="name" min-width="100px" show-overflow-tooltip />
+          <el-table-column label="枚举值编号" prop="id" min-width="100px" />
+          <el-table-column label="枚举值名称" prop="name" min-width="100px" />
           <el-table-column label="操作" width="90px">
             <template v-slot="{ row, $index }">
               <el-button link type="" @click="openFieldOptionForm(row, $index, 'enum')">编辑</el-button>
@@ -91,10 +91,10 @@
         >
         <el-button type="primary" @click="openFieldOptionForm(null, -1, 'constraint')">添加约束</el-button>
       </p>
-      <el-table key="validation-table" :data="fieldConstraintsList" max-height="240" border fit>
+      <el-table key="validation-table" :data="fieldConstraintsList" show-overflow-tooltip max-height="240" border fit>
         <el-table-column label="序号" width="50px" type="index" />
-        <el-table-column label="约束名称" prop="name" min-width="100px" show-overflow-tooltip />
-        <el-table-column label="约束配置" prop="config" min-width="100px" show-overflow-tooltip />
+        <el-table-column label="约束名称" prop="name" min-width="100px" />
+        <el-table-column label="约束配置" prop="config" min-width="100px" />
         <el-table-column label="操作" width="90px">
           <template v-slot="{ row, $index }">
             <el-button link type="" @click="openFieldOptionForm(row, $index, 'constraint')">编辑</el-button>
@@ -112,10 +112,10 @@
         >
         <el-button type="primary" @click="openFieldOptionForm(null, -1, 'property')">添加属性</el-button>
       </p>
-      <el-table key="property-table" :data="fieldPropertiesList" max-height="240" border fit>
+      <el-table key="property-table" :data="fieldPropertiesList" max-height="240" border fit show-overflow-tooltip>
         <el-table-column label="序号" width="50px" type="index" />
-        <el-table-column label="属性编号" prop="id" min-width="100px" show-overflow-tooltip />
-        <el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip />
+        <el-table-column label="属性编号" prop="id" min-width="100px" />
+        <el-table-column label="属性值" prop="value" min-width="100px" />
         <el-table-column label="操作" width="90px">
           <template v-slot="{ row, $index }">
             <el-button link type="" @click="openFieldOptionForm(row, $index, 'property')">编辑</el-button>

+ 5 - 5
src/components/my-flowable/package/penal/listeners/ElementListeners.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="panel-tab__content">
-    <el-table :data="elementListenersList" border>
+    <el-table :data="elementListenersList" border show-overflow-tooltip>
       <el-table-column label="序号" width="50px" type="index" />
       <el-table-column label="事件类型" min-width="100px" prop="event" />
-      <el-table-column label="监听器类型" min-width="100px" show-overflow-tooltip :formatter="(row) => listenerTypeObject[row.listenerType]" />
+      <el-table-column label="监听器类型" min-width="100px" :formatter="(row) => listenerTypeObject[row.listenerType]" />
       <el-table-column label="操作" width="90px">
         <template v-slot="{ row, $index }">
           <el-button link type="" @click="openListenerForm(row, $index)">编辑</el-button>
@@ -64,11 +64,11 @@
         >
         <el-button type="primary" @click="openListenerFieldForm(null)">添加字段</el-button>
       </p>
-      <el-table :data="fieldsListOfListener" max-height="240" border fit style="flex: none">
+      <el-table :data="fieldsListOfListener" max-height="240" border fit show-overflow-tooltip style="flex: none">
         <el-table-column label="序号" width="50px" type="index" />
         <el-table-column label="字段名称" min-width="100px" prop="name" />
-        <el-table-column label="字段类型" min-width="80px" show-overflow-tooltip :formatter="(row) => fieldTypeObject[row.fieldType]" />
-        <el-table-column label="字段值/表达式" min-width="100px" show-overflow-tooltip :formatter="(row) => row.string || row.expression" />
+        <el-table-column label="字段类型" min-width="80px" :formatter="(row) => fieldTypeObject[row.fieldType]" />
+        <el-table-column label="字段值/表达式" min-width="100px" :formatter="(row) => row.string || row.expression" />
         <el-table-column label="操作" width="100px">
           <template v-slot="{ row, $index }">
             <el-button link type="" @click="openListenerFieldForm(row, $index)">编辑</el-button>

+ 7 - 7
src/components/my-flowable/package/penal/listeners/UserTaskListeners.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="panel-tab__content">
-    <el-table :data="elementListenersList" border>
+    <el-table :data="elementListenersList" border show-overflow-tooltip>
       <el-table-column label="序号" width="50px" type="index" />
-      <el-table-column label="事件类型" min-width="80px" show-overflow-tooltip :formatter="(row) => listenerEventTypeObject[row.event]" />
-      <el-table-column label="事件id" min-width="80px" prop="id" show-overflow-tooltip />
-      <el-table-column label="监听器类型" min-width="80px" show-overflow-tooltip :formatter="(row) => listenerTypeObject[row.listenerType]" />
+      <el-table-column label="事件类型" min-width="80px" :formatter="(row) => listenerEventTypeObject[row.event]" />
+      <el-table-column label="事件id" min-width="80px" prop="id" />
+      <el-table-column label="监听器类型" min-width="80px" :formatter="(row) => listenerTypeObject[row.listenerType]" />
       <el-table-column label="操作" width="90px">
         <template v-slot="{ row, $index }">
           <el-button link type="" @click="openListenerForm(row, $index)">编辑</el-button>
@@ -104,11 +104,11 @@
         >
         <el-button type="primary" @click="openListenerFieldForm(null)">添加字段</el-button>
       </p>
-      <el-table :data="fieldsListOfListener" max-height="240" border fit style="flex: none">
+      <el-table :data="fieldsListOfListener" max-height="240" border fit show-overflow-tooltip style="flex: none">
         <el-table-column label="序号" width="50px" type="index" />
         <el-table-column label="字段名称" min-width="100px" prop="name" />
-        <el-table-column label="字段类型" min-width="80px" show-overflow-tooltip :formatter="(row) => fieldTypeObject[row.fieldType]" />
-        <el-table-column label="字段值/表达式" min-width="100px" show-overflow-tooltip :formatter="(row) => row.string || row.expression" />
+        <el-table-column label="字段类型" min-width="80px" :formatter="(row) => fieldTypeObject[row.fieldType]" />
+        <el-table-column label="字段值/表达式" min-width="100px" :formatter="(row) => row.string || row.expression" />
         <el-table-column label="操作" width="100px">
           <template v-slot="{ row, $index }">
             <el-button link type="" @click="openListenerFieldForm(row, $index)">编辑</el-button>

+ 0 - 13
src/components/my-flowable/package/penal/multi-instance/ElementMultiInstance.vue

@@ -24,19 +24,6 @@
         <el-form-item label="完成条件" key="completionCondition">
           <el-input v-model="loopInstanceForm.completionCondition" clearable @change="updateLoopCondition" />
         </el-form-item>
-        <!--        <el-form-item label="异步状态" key="async">-->
-        <!--          <el-checkbox v-model="loopInstanceForm.asyncBefore" label="异步前" @change="updateLoopAsync('asyncBefore')" />-->
-        <!--          <el-checkbox v-model="loopInstanceForm.asyncAfter" label="异步后" @change="updateLoopAsync('asyncAfter')" />-->
-        <!--          <el-checkbox-->
-        <!--            v-model="loopInstanceForm.exclusive"-->
-        <!--            v-if="loopInstanceForm.asyncAfter || loopInstanceForm.asyncBefore"-->
-        <!--            label="排除"-->
-        <!--            @change="updateLoopAsync('exclusive')"-->
-        <!--          />-->
-        <!--        </el-form-item>-->
-        <!--        <el-form-item label="重试周期" prop="timeCycle" v-if="loopInstanceForm.asyncAfter || loopInstanceForm.asyncBefore" key="timeCycle">-->
-        <!--          <el-input v-model="loopInstanceForm.timeCycle" clearable @change="updateLoopTimeCycle" />-->
-        <!--        </el-form-item>-->
       </template>
     </el-form>
   </div>

+ 3 - 3
src/components/my-flowable/package/penal/properties/ElementProperties.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="panel-tab__content">
-    <el-table :data="elementPropertyList" max-height="240" border fit>
+    <el-table :data="elementPropertyList" max-height="240" border fit show-overflow-tooltip>
       <el-table-column label="序号" width="50px" type="index" />
-      <el-table-column label="属性名" prop="name" min-width="100px" show-overflow-tooltip />
-      <el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip />
+      <el-table-column label="属性名" prop="name" min-width="100px" />
+      <el-table-column label="属性值" prop="value" min-width="100px" />
       <el-table-column label="操作" width="90px">
         <template v-slot="{ row, $index }">
           <el-button link type="" @click="openAttributesForm(row, $index)">编辑</el-button>

+ 5 - 5
src/components/my-flowable/package/penal/signal-message/SignalAndMessage.vue

@@ -6,10 +6,10 @@
       >
       <el-button type="primary" @click="openModel('message')">创建新消息</el-button>
     </div>
-    <el-table :data="messageList" border>
+    <el-table :data="messageList" border show-overflow-tooltip>
       <el-table-column type="index" label="序号" width="60px" />
-      <el-table-column label="消息ID" prop="id" max-width="300px" show-overflow-tooltip />
-      <el-table-column label="消息名称" prop="name" max-width="300px" show-overflow-tooltip />
+      <el-table-column label="消息ID" prop="id" max-width="300px" />
+      <el-table-column label="消息名称" prop="name" max-width="300px" />
     </el-table>
     <div class="panel-tab__content--title" style="padding-top: 8px; margin-top: 8px; border-top: 1px solid #eeeeee">
       <span
@@ -19,8 +19,8 @@
     </div>
     <el-table :data="signalList" border>
       <el-table-column type="index" label="序号" width="60px" />
-      <el-table-column label="信号ID" prop="id" max-width="300px" show-overflow-tooltip />
-      <el-table-column label="信号名称" prop="name" max-width="300px" show-overflow-tooltip />
+      <el-table-column label="信号ID" prop="id" max-width="300px" />
+      <el-table-column label="信号名称" prop="name" max-width="300px" />
     </el-table>
 
     <el-dialog v-model="modelVisible" :title="modelConfig.title" :close-on-click-modal="false" width="400px" append-to-body destroy-on-close>

+ 3 - 2
src/components/my-flowable/package/penal/task/ElementTask.vue

@@ -6,7 +6,7 @@
       <!--        <el-checkbox v-model="taskConfigForm.asyncAfter" label="异步后" @change="changeTaskAsync" />-->
       <!--        <el-checkbox v-model="taskConfigForm.exclusive" v-if="taskConfigForm.asyncAfter || taskConfigForm.asyncBefore" label="排除" @change="changeTaskAsync" />-->
       <!--      </el-form-item>-->
-      <component :is="witchTaskComponent" v-bind="$props" />
+      <component :is="witchTaskComponent" v-bind="$props" :business-object="businessObject" />
     </el-form>
   </div>
 </template>
@@ -21,7 +21,8 @@ export default {
   components: { UserTask, ScriptTask, ReceiveTask },
   props: {
     id: String,
-    type: String
+    type: String,
+    businessObject: Object
   },
   data() {
     return {

+ 245 - 82
src/components/my-flowable/package/penal/task/task-components/UserTask.vue

@@ -1,41 +1,80 @@
 <template>
   <div>
-    <el-form-item label="用户类型">
-      <el-select v-model="userTaskForm.type">
-        <el-option label="指定人" :value="0" />
-        <el-option label="候选用户" :value="1" />
-        <el-option label="候选角色" :value="2" />
-      </el-select>
-    </el-form-item>
-    <el-form-item label="处理用户" v-if="userTaskForm.type === 0">
+    <el-radio-group v-model="userTaskForm.type" @change="updateDataType">
+      <el-radio label="candidateUsers">用户</el-radio>
+      <el-radio label="candidateRole">角色</el-radio>
+      <el-radio label="candidatePost">岗位</el-radio>
+      <el-radio label="candidateDept">部门</el-radio>
+      <el-radio label="startUserId">发起人</el-radio>
+      <el-radio label="assignee">指定人</el-radio>
+      <el-radio label="deptLeader">部门领导</el-radio>
+      <el-radio label="variable">变量</el-radio>
+      <!--      <el-radio label="superDeptLeader">上级部门领导</el-radio>-->
+    </el-radio-group>
+    <el-form-item label="选择用户" v-if="userTaskForm.type === 'assignee'">
       <el-input v-model="userTaskForm.assigneeName">
         <template #append>
           <el-button :icon="Search()" @click="userSelect" type="danger" />
         </template>
       </el-input>
     </el-form-item>
-    <el-form-item label="候选用户" v-if="userTaskForm.type === 1">
+    <el-form-item label="选择用户" v-if="userTaskForm.type === 'candidateUsers'">
       <el-input v-model="userTaskForm.candidateUsersName">
         <template #append>
           <el-button :icon="Search()" @click="userGroupSelect" type="danger" />
         </template>
       </el-input>
     </el-form-item>
-    <el-form-item label="候选角色" v-if="userTaskForm.type === 2">
+    <el-form-item label="选择角色" v-if="userTaskForm.type === 'candidateRole'">
       <el-input v-model="userTaskForm.candidateGroupsName">
         <template #append>
           <el-button :icon="Search()" @click="roleGroupSelect" type="danger" />
         </template>
       </el-input>
     </el-form-item>
-    <!--    <el-form-item label="候选分组" v-if="userTaskForm.type === 2">-->
-    <!--      <el-select v-model="userTaskForm.candidateGroups" multiple collapse-tags @change="updateElementTask('candidateGroups')">-->
-    <!--        <el-option v-for="gk in mockData" :key="'ass-' + gk" :label="`分组${gk}`" :value="`group${gk}`" />-->
-    <!--      </el-select>-->
-    <!--    </el-form-item>-->
-
+    <el-form-item label="选择岗位" v-if="userTaskForm.type === 'candidatePost'">
+      <el-input v-model="userTaskForm.candidateGroupsName">
+        <template #append>
+          <el-button :icon="Search()" @click="postGroupSelect" type="danger" />
+        </template>
+      </el-input>
+    </el-form-item>
+    <el-form-item label="选择部门" v-if="userTaskForm.type === 'candidateDept'">
+      <el-input v-model="userTaskForm.candidateGroupsName">
+        <template #append>
+          <el-button :icon="Search()" @click="deptGroupSelect" type="danger" />
+        </template>
+      </el-input>
+    </el-form-item>
+    <el-form-item label="变量" v-if="userTaskForm.type === 'variable'">
+      <el-input v-model="userTaskForm.variable" @blur="updateVariable"> </el-input>
+    </el-form-item>
     <select-user v-if="visibleSelect" ref="selectUserRef"></select-user>
     <select-role v-if="visibleRole" ref="selectRoleRef"></select-role>
+    <select-post v-if="visiblePost" ref="selectPostRef"></select-post>
+    <select-dept v-if="visibleDept" ref="selectDeptRef"></select-dept>
+
+    <el-form-item label="多人会签" v-if="userTaskForm.type === 'candidateUsers' || userTaskForm.type === 'candidatePost' || userTaskForm.type === 'candidateRole' || userTaskForm.type === 'candidateDept'">
+      <el-select v-model="loopCharacteristics" @change="changeMultiInstance">
+        <el-option label="非会签" value="" />
+        <el-option label="并行会签" value="ParallelMultiInstance" />
+        <el-option label="串行会签" value="SequentialMultiInstance" />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="完成条件" v-if="loopCharacteristics">
+      <el-slider
+        v-model="multiCompleted"
+        @change="updateLoopCondition"
+        :min="1"
+        :max="100"
+        show-input
+        :format-tooltip="
+          (val) => {
+            return val + '%';
+          }
+        "
+      />
+    </el-form-item>
   </div>
 </template>
 
@@ -43,23 +82,33 @@
 import { Search } from "@element-plus/icons-vue";
 import SelectUser from "@/components/my-process-running/src/select-user.vue";
 import SelectRole from "@/components/my-process-running/src/select-role.vue";
-import baseService from "@/service/baseService";
+import SelectPost from "@/components/my-process-running/src/select-post.vue";
+import SelectDept from "@/components/my-process-running/src/select-dept.vue";
 import { nextTick } from "vue";
+import lodash from "lodash";
 export default {
   name: "UserTask",
   props: {
     id: String,
-    type: String
+    type: String,
+    businessObject: Object
   },
   components: {
     SelectUser,
-    SelectRole
+    SelectRole,
+    SelectPost,
+    SelectDept
   },
   data() {
     return {
       visibleSelect: false,
       visibleRole: false,
+      visiblePost: false,
+      visibleDept: false,
       userQuery: {},
+      loopCharacteristics: "",
+      multiInstance: "",
+      multiCompleted: 100,
       defaultTaskForm: {
         assignee: "",
         candidateUsers: [],
@@ -69,7 +118,8 @@ export default {
         priority: ""
       },
       userTaskForm: {
-        type: 0
+        type: "assignee",
+        variable: ""
       }
     };
   },
@@ -80,54 +130,149 @@ export default {
         this.bpmnElement = window.bpmnInstances.bpmnElement;
         this.$nextTick(() => this.resetTaskForm());
       }
+    },
+    businessObject: {
+      immediate: true,
+      handler(val) {
+        this.bpmnElement = window.bpmnInstances.bpmnElement;
+        this.getElementLoop(val);
+      }
     }
   },
   methods: {
+    getElementLoop(businessObject) {
+      if (!businessObject.loopCharacteristics) {
+        return;
+      }
+
+      const completionCondition = lodash.get(businessObject.loopCharacteristics, "completionCondition.body", "");
+      if (completionCondition) {
+        const rateMatch = completionCondition.match(/\d+\.\d+/g);
+        if (rateMatch) {
+          this.multiCompleted = lodash.round(lodash.multiply(100, rateMatch[0]));
+        } else {
+          this.multiCompleted = 100;
+        }
+      }
+
+      if (businessObject.loopCharacteristics.isSequential) {
+        this.loopCharacteristics = "SequentialMultiInstance";
+      } else {
+        this.loopCharacteristics = "ParallelMultiInstance";
+      }
+
+      this.multiLoopInstance = window.bpmnInstances.bpmnElement.businessObject.loopCharacteristics;
+    },
     Search() {
       return Search;
     },
+    changeMultiInstance() {
+      console.log("loopCharacteristics00------====", this.loopCharacteristics);
+      if (!this.loopCharacteristics) {
+        window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { loopCharacteristics: null });
+        return;
+      }
+
+      const completionCondition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: "${nrOfCompletedInstances/nrOfInstances >= 1 }" });
+
+      if (this.loopCharacteristics === "ParallelMultiInstance") {
+        this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", {
+          completionCondition: completionCondition,
+          collection: "${multiInstanceHandler.getList(execution)}",
+          elementVariable: "assignee"
+        });
+      } else {
+        this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", {
+          isSequential: true,
+          completionCondition: completionCondition,
+          collection: "${multiInstanceHandler.getList(execution)}",
+          elementVariable: "assignee"
+        });
+      }
+
+      window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
+        loopCharacteristics: this.multiLoopInstance
+      });
+
+      const taskAttr = Object.create(null);
+      taskAttr["assignee"] = "${assignee}";
+      window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
+    },
+    updateLoopCondition() {
+      const completionCondition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: "${nrOfCompletedInstances/nrOfInstances >= " + lodash.multiply(this.multiCompleted, 0.01) + " }" });
+      window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement, this.multiLoopInstance, {
+        completionCondition
+      });
+    },
     userSelect() {
       this.visibleSelect = true;
       nextTick(() => {
-        this.$refs.selectUserRef.init(this.setUserInfo, false);
+        this.$refs.selectUserRef.init((userInfo) => {
+          this.userTaskForm.assigneeName = userInfo.realName;
+          this.userTaskForm.assignee = userInfo.id;
+          this.updateAssignee("assignee");
+        }, false);
       });
     },
-    setUserInfo(userInfo) {
-      this.userTaskForm.assigneeName = userInfo.realName;
-      this.userTaskForm.assignee = userInfo.id;
-      this.updateAssignee("assignee");
-    },
     userGroupSelect() {
       this.visibleSelect = true;
       nextTick(() => {
-        this.$refs.selectUserRef.init(this.setUserGroupInfo, true);
+        this.$refs.selectUserRef.init((users) => {
+          const candidateUsersName = [];
+          this.userTaskForm.candidateUsers = [];
+          for (const user of users) {
+            candidateUsersName.push(user.realName);
+            this.userTaskForm.candidateUsers.push(user.id);
+          }
+          this.userTaskForm.candidateUsersName = candidateUsersName.join(",");
+          this.updateCandidateUsers("candidateUsers");
+        }, true);
       });
     },
-    setUserGroupInfo(users) {
-      const candidateUsersName = [];
-      this.userTaskForm.candidateUsers = [];
-      for (const user of users) {
-        candidateUsersName.push(user.realName);
-        this.userTaskForm.candidateUsers.push(user.id);
-      }
-      this.userTaskForm.candidateUsersName = candidateUsersName.join(",");
-      this.updateCandidateUsers("candidateUsers");
-    },
     roleGroupSelect() {
       this.visibleRole = true;
       nextTick(() => {
-        this.$refs.selectRoleRef.init(this.setRoleGroupInfo);
+        this.$refs.selectRoleRef.init((roles) => {
+          const candidateGroupsName = [];
+          this.userTaskForm.candidateGroups = [];
+          for (const role of roles) {
+            candidateGroupsName.push(role.name);
+            this.userTaskForm.candidateGroups.push(role.id);
+          }
+          this.userTaskForm.candidateGroupsName = candidateGroupsName.join(",");
+          this.updateCandidateRole("candidateGroups");
+        });
       });
     },
-    setRoleGroupInfo(roles) {
-      const candidateGroupsName = [];
-      this.userTaskForm.candidateGroups = [];
-      for (const role of roles) {
-        candidateGroupsName.push(role.name);
-        this.userTaskForm.candidateGroups.push(role.id);
-      }
-      this.userTaskForm.candidateGroupsName = candidateGroupsName.join(",");
-      this.updateCandidateRole("candidateGroups");
+    postGroupSelect() {
+      this.visiblePost = true;
+      nextTick(() => {
+        this.$refs.selectPostRef.init((posts) => {
+          const candidateGroupsName = [];
+          this.userTaskForm.candidateGroups = [];
+          for (const post of posts) {
+            candidateGroupsName.push(post.postName);
+            this.userTaskForm.candidateGroups.push(post.id);
+          }
+          this.userTaskForm.candidateGroupsName = candidateGroupsName.join(",");
+          this.updateCandidateRole("candidateGroups");
+        });
+      });
+    },
+    deptGroupSelect() {
+      this.visibleDept = true;
+      nextTick(() => {
+        this.$refs.selectDeptRef.init((depts) => {
+          const candidateGroupsName = [];
+          this.userTaskForm.candidateGroups = [];
+          for (const dept of depts) {
+            candidateGroupsName.push(dept.name);
+            this.userTaskForm.candidateGroups.push(dept.id);
+          }
+          this.userTaskForm.candidateGroupsName = candidateGroupsName.join(",");
+          this.updateCandidateRole("candidateGroups");
+        });
+      });
     },
     cancelHandle() {
       console.log(22);
@@ -135,61 +280,58 @@ export default {
     submitHandle() {
       console.log(22);
     },
-    async getUserName(ids) {
-      const { data } = await baseService.post("/flow/sys/user/list", ids);
-      return data.join(",");
-    },
-    async getRoleName(ids) {
-      const { data } = await baseService.post("/flow/sys/role/list", ids);
-      return data.join(",");
-    },
     async resetTaskForm() {
       const assignee = this.bpmnElement?.businessObject["assignee"];
       const candidateUsers = this.bpmnElement?.businessObject["candidateUsers"];
       const candidateGroups = this.bpmnElement?.businessObject["candidateGroups"];
 
+      const dataType = this.bpmnElement?.businessObject.$attrs["flowable:dataType"];
+      const text = this.bpmnElement?.businessObject.$attrs["flowable:text"];
+
       this.userTaskForm["assignee"] = "";
       this.userTaskForm["candidateUsers"] = [];
       this.userTaskForm["candidateGroups"] = [];
 
-      if (assignee) {
-        this.userTaskForm["assignee"] = assignee;
-        this.userTaskForm.assigneeName = await this.getUserName([assignee]);
+      this.userTaskForm.type = dataType;
 
+      if (dataType === "assignee") {
+        this.userTaskForm.assignee = assignee;
+        this.userTaskForm.assigneeName = text;
         return;
       }
 
-      if (candidateUsers) {
-        this.userTaskForm["candidateUsers"] = candidateUsers.split(",");
-        this.userTaskForm.candidateUsersName = await this.getUserName(candidateUsers.split(","));
-
-        this.userTaskForm.type = 1;
-
+      if (dataType === "variable") {
+        this.userTaskForm.variable = assignee;
         return;
       }
 
-      if (candidateGroups) {
-        this.userTaskForm["candidateGroups"] = candidateGroups.split(",");
-        this.userTaskForm.candidateGroupsName = await this.getRoleName(candidateGroups.split(","));
+      if (dataType === "candidateUsers") {
+        this.userTaskForm.candidateUsers = candidateUsers?.split(",") || null;
+        this.userTaskForm.candidateUsersName = text;
 
-        this.userTaskForm.type = 2;
+        return;
       }
 
-      // for (let key in this.defaultTaskForm) {
-      //   let value;
-      //   if (key === "candidateUsers" || key === "candidateGroups") {
-      //     value = this.bpmnElement?.businessObject[key] ? this.bpmnElement.businessObject[key].split(",") : [];
-      //   } else {
-      //     value = this.bpmnElement?.businessObject[key] || this.defaultTaskForm[key];
-      //   }
-      //   this.userTaskForm[key] = value;
-      // }
+      if (dataType === "candidateRole" || dataType === "candidatePost" || dataType === "candidateDept") {
+        this.userTaskForm.candidateGroups = candidateGroups?.split(",") || null;
+        this.userTaskForm.candidateGroupsName = text;
+      }
     },
     updateAssignee(key) {
       const taskAttr = Object.create(null);
       taskAttr["candidateUsers"] = null;
       taskAttr["candidateGroups"] = null;
       taskAttr[key] = this.userTaskForm[key] || null;
+      taskAttr["flowable:dataType"] = "assignee";
+      taskAttr["flowable:text"] = this.userTaskForm["assigneeName"] || null;
+
+      window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
+    },
+    updateVariable() {
+      const taskAttr = Object.create(null);
+      taskAttr["candidateUsers"] = null;
+      taskAttr["candidateGroups"] = null;
+      taskAttr["assignee"] = this.userTaskForm.variable;
 
       window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
     },
@@ -198,6 +340,7 @@ export default {
       taskAttr["assignee"] = null;
       taskAttr["candidateGroups"] = null;
       taskAttr[key] = this.userTaskForm[key] && this.userTaskForm[key].length ? this.userTaskForm[key].join(",") : null;
+      taskAttr["flowable:text"] = this.userTaskForm["candidateUsersName"] || null;
 
       window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
     },
@@ -206,16 +349,36 @@ export default {
       taskAttr["assignee"] = null;
       taskAttr["candidateUsers"] = null;
       taskAttr[key] = this.userTaskForm[key] && this.userTaskForm[key].length ? this.userTaskForm[key].join(",") : null;
+      taskAttr["flowable:text"] = this.userTaskForm["candidateGroupsName"] || null;
 
       window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
     },
-    updateElementTask(key) {
+    updateDataType() {
+      const type = this.userTaskForm.type;
       const taskAttr = Object.create(null);
-      if (key === "candidateUsers" || key === "candidateGroups") {
-        taskAttr[key] = this.userTaskForm[key] && this.userTaskForm[key].length ? this.userTaskForm[key].join(",") : null;
-      } else {
-        taskAttr[key] = this.userTaskForm[key] || null;
+      taskAttr["candidateUsers"] = null;
+      taskAttr["candidateGroups"] = null;
+      taskAttr["assignee"] = null;
+      taskAttr["flowable:text"] = null;
+
+      if (type === "deptLeader" || type === "superDeptLeader") {
+        this.userTaskForm.assigneeName = null;
+        taskAttr["loopCharacteristics"] = null;
+        this.loopCharacteristics = "";
+      } else if (type === "startUserId") {
+        taskAttr["assignee"] = "${startUserId}";
+        taskAttr["loopCharacteristics"] = null;
+        this.loopCharacteristics = "";
+      } else if (type === "variable") {
+        taskAttr["assignee"] = this.userTaskForm.variable;
+        taskAttr["loopCharacteristics"] = null;
+        this.loopCharacteristics = "";
+      } else if (type === "assignee") {
+        taskAttr["loopCharacteristics"] = null;
+        this.loopCharacteristics = "";
       }
+
+      taskAttr["flowable:dataType"] = type;
       window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
     }
   },

+ 3 - 0
src/components/my-flowable/package/theme/process-designer.scss

@@ -102,6 +102,9 @@
     }
   }
 }
+.djs-popup-header{
+  display: none;
+}
 
 //侧边栏配置
 .djs-palette.open {

+ 15 - 15
src/components/my-process-running/src/my-process-running.vue

@@ -3,8 +3,8 @@
     <el-button type="primary" @click="completeTask()">{{ $t("process.completeTask") }}</el-button>
     <el-button type="warning" @click="rejectTask()">{{ $t("process.rejectTask") }}</el-button>
     <el-button type="info" @click="delegateTask()">{{ $t("process.entrustTask") }}</el-button>
-    <my-task-delegate v-if="myTaskDelegateVisible" ref="myTaskDelegateRef"></my-task-delegate>
-    <my-task-handle v-if="myTaskHandleVisible" ref="myTaskHandleRef"></my-task-handle>
+    <my-task-delegate v-if="renTaskDelegateVisible" ref="renTaskDelegateRef"></my-task-delegate>
+    <my-task-handle v-if="renTaskHandleVisible" ref="renTaskHandleRef"></my-task-handle>
   </div>
 </template>
 
@@ -15,35 +15,35 @@ import MyTaskHandle from "./my-task-handle.vue";
 import { useRoute } from "vue-router";
 const route = useRoute();
 
-const myTaskDelegateVisible = ref(false);
-const myTaskHandleVisible = ref(false);
-const myTaskDelegateRef = ref();
-const myTaskHandleRef = ref();
+const renTaskDelegateVisible = ref(false);
+const renTaskHandleVisible = ref(false);
+const renTaskDelegateRef = ref();
+const renTaskHandleRef = ref();
 const dataForm = reactive({
   taskId: route.query.taskId
 });
 
 const completeTask = () => {
-  myTaskHandleVisible.value = true;
+  renTaskHandleVisible.value = true;
   nextTick(() => {
-    myTaskHandleRef.value.dataForm.taskId = dataForm.taskId;
-    myTaskHandleRef.value.init("complete");
+    renTaskHandleRef.value.dataForm.taskId = dataForm.taskId;
+    renTaskHandleRef.value.init("complete");
   });
 };
 
 const rejectTask = () => {
-  myTaskHandleVisible.value = true;
+  renTaskHandleVisible.value = true;
   nextTick(() => {
-    myTaskHandleRef.value.dataForm.taskId = dataForm.taskId;
-    myTaskHandleRef.value.init("reject");
+    renTaskHandleRef.value.dataForm.taskId = dataForm.taskId;
+    renTaskHandleRef.value.init("reject");
   });
 };
 
 const delegateTask = () => {
-  myTaskDelegateVisible.value = true;
+  renTaskDelegateVisible.value = true;
   nextTick(() => {
-    myTaskDelegateRef.value.dataForm.taskId = dataForm.taskId;
-    myTaskDelegateRef.value.init();
+    renTaskDelegateRef.value.dataForm.taskId = dataForm.taskId;
+    renTaskDelegateRef.value.init();
   });
 };
 </script>

+ 1 - 1
src/components/my-process-running/src/my-task-delegate.vue

@@ -73,7 +73,7 @@ const delegateTask = () => {
     .post("/flow/common/delegate", task, {
       "content-type": "application/x-www-form-urlencoded"
     })
-    .then((res) => {
+    .then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 54 - 0
src/components/my-process-running/src/select-dept.vue

@@ -0,0 +1,54 @@
+<template>
+  <el-dialog v-model="state.visibleSelect" :width="600" :modal="false" title="选择部门" :close-on-click-modal="false" :close-on-press-escape="false">
+    <div class="mod-sys__dept">
+      <el-table v-loading="state.dataListLoading" :data="state.dataList" row-key="id" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%">
+        <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
+        <el-table-column prop="name" label="部门名称" sortable="custom" header-align="center"></el-table-column>
+        <el-table-column prop="createDate" :label="t('createDate')" sortable="custom" header-align="center" align="center"></el-table-column>
+      </el-table>
+      <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
+    </div>
+    <template v-slot:footer>
+      <el-button @click="cancelHandle()">{{ t("cancel") }}</el-button>
+      <el-button type="primary" @click="commitHandle()">{{ t("confirm") }}</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script lang="ts" setup>
+import useView from "@/hooks/useView";
+import { reactive, toRefs, nextTick, ref } from "vue";
+import { useI18n } from "vue-i18n";
+const { t } = useI18n();
+const view = reactive({
+  visibleSelect: false,
+  getDataListURL: "/sys/dept/list"
+});
+
+const callback = ref();
+
+const state = reactive({ ...useView(view), ...toRefs(view) });
+
+const init = (callback2: (e: any) => any) => {
+  state.visibleSelect = true;
+  callback.value = callback2;
+  nextTick(() => {
+    state.getDataList();
+  });
+};
+
+const cancelHandle = () => {
+  state.visibleSelect = false;
+};
+
+const commitHandle = () => {
+  if (callback.value) {
+    callback.value(state.dataListSelections);
+  }
+  state.visibleSelect = false;
+};
+
+defineExpose({
+  init
+});
+</script>

+ 67 - 0
src/components/my-process-running/src/select-post.vue

@@ -0,0 +1,67 @@
+<template>
+  <el-dialog v-model="state.visibleSelect" width="60%" :modal="false" title="选择岗位" :close-on-click-modal="false" :close-on-press-escape="false">
+    <div class="mod-sys__post">
+      <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
+        <el-form-item>
+          <el-input v-model="state.dataForm.postName" placeholder="岗位名称"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="state.getDataList()">{{ t("query") }}</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%">
+        <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
+        <el-table-column prop="postCode" label="岗位编码" sortable="custom" header-align="center" align="center"></el-table-column>
+        <el-table-column prop="postName" label="岗位名称" sortable="custom" header-align="center" align="center"></el-table-column>
+        <el-table-column prop="createDate" :label="t('createDate')" sortable="custom" header-align="center" align="center"></el-table-column>
+      </el-table>
+      <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
+    </div>
+    <template v-slot:footer>
+      <el-button @click="cancelHandle()">{{ t("cancel") }}</el-button>
+      <el-button type="primary" @click="commitHandle()">{{ t("confirm") }}</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script lang="ts" setup>
+import useView from "@/hooks/useView";
+import { reactive, toRefs, nextTick, ref } from "vue";
+import { useI18n } from "vue-i18n";
+const { t } = useI18n();
+const view = reactive({
+  visibleSelect: false,
+  getDataListURL: "/sys/post/page",
+  getDataListIsPage: true,
+  dataForm: {
+    postName: ""
+  }
+});
+
+const callback = ref();
+
+const state = reactive({ ...useView(view), ...toRefs(view) });
+
+const init = (callback2: (e: any) => any) => {
+  state.visibleSelect = true;
+  callback.value = callback2;
+  nextTick(() => {
+    state.getDataList();
+  });
+};
+
+const cancelHandle = () => {
+  state.visibleSelect = false;
+};
+
+const commitHandle = () => {
+  if (callback.value) {
+    callback.value(state.dataListSelections);
+  }
+  state.visibleSelect = false;
+};
+
+defineExpose({
+  init
+});
+</script>

+ 1 - 2
src/components/my-process-running/src/select-role.vue

@@ -27,8 +27,7 @@
 <script lang="ts" setup>
 import useView from "@/hooks/useView";
 import { reactive, toRefs, nextTick, ref } from "vue";
-import { useI18n } from "vue-i18n";
-const { t } = useI18n();
+
 const view = reactive({
   visibleSelect: false,
   getDataListURL: "/sys/role/page",

+ 1 - 1
src/components/my-region-tree/src/my-region-tree.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="region">
+  <div class="my-region">
     <el-input v-model="showName" :placeholder="placeholder" @click="treeDialog">
       <template v-slot:append>
         <el-button icon="search" @click="treeDialog"></el-button>

+ 11 - 11
src/constants/config.ts

@@ -2,15 +2,15 @@
  * 主题设置默认值
  */
 export const themeSetting = {
-  "sidebar": "dark",
-  "topHeader": "primary",
-  "themeColor": "#0BB2D4",
-  "navLayout": "left",
-  "contentFull": true,
-  "logoAuto": false,
-  "colorIcon": true,
-  "sidebarUniOpened": true,
-  "openTabsPage": true,
-  "tabStyle": "card",
-  "sidebarCollapse": false
+  sidebar: "dark",
+  topHeader: "primary",
+  themeColor: "#17B3A3",
+  navLayout: "left",
+  contentFull: true,
+  logoAuto: false,
+  colorIcon: false,
+  sidebarUniOpened: true,
+  openTabsPage: true,
+  tabStyle: "default",
+  sidebarCollapse: false
 };

+ 2 - 2
src/hooks/useView.ts

@@ -144,7 +144,7 @@ const useView = (props: IViewHooksOptions | IObject): IViewHooks => {
     },
     // 删除
     deleteHandle(id?: string): Promise<any> {
-      return new Promise((resolve, reject) => {
+      return new Promise((resolve) => {
         if (
           state.deleteIsBatch &&
           !id &&
@@ -176,7 +176,7 @@ const useView = (props: IViewHooksOptions | IObject): IViewHooks => {
                     : {}
                   : {}
               )
-              .then((res) => {
+              .then(() => {
                 ElMessage.success({
                   message: t("prompt.success"),
                   duration: 500,

+ 2 - 2
src/i18n/lang/en-US.ts

@@ -2,8 +2,8 @@ export default {
   ui: {
     app: {
       //产品信息
-      name: "WJP",
-      productName: "WJP SECURITY",
+      name: "Wjp",
+      productName: "WJP PROJECT",
       productNameMini: "WJP",
       copyright: "scjydz.com"
     },

+ 1 - 1
src/i18n/lang/zh-CN.ts

@@ -3,7 +3,7 @@ export default {
     app: {
       //产品信息
       name: "佳缘科技",
-      productName: "佳缘科技管理系统",
+      productName: "管理系统",
       productNameMini: "佳缘",
       copyright: "scjydz.com"
     },

+ 5 - 4
src/i18n/page/en-US.ts

@@ -77,7 +77,7 @@ t.login.copyright = "Wjp";
 t.home = {};
 t.home.sysInfo = {};
 t.home.sysInfo.name = "System Name";
-t.home.sysInfo.nameVal = "wjp-security";
+t.home.sysInfo.nameVal = "wjp-project";
 t.home.sysInfo.version = "Version Information";
 t.home.sysInfo.versionVal = app.version;
 t.home.sysInfo.osName = "Operating System";
@@ -243,7 +243,7 @@ t.oss.qiniuSecretKeyTips = "Seven Cow SecretKey";
 t.oss.qiniuBucketName = "Space Name";
 t.oss.qiniuBucketNameTips = "Seven cattle storage space name";
 t.oss.aliyunDomain = "Domain Name";
-t.oss.aliyunDomainTips = "Alibaba Cloud bound domain name, such as: http://cdn.scjydz.com";
+t.oss.aliyunDomainTips = "Alibaba Cloud bound domain name, such as: https://www.scjydz.com";
 t.oss.aliyunPrefix = "Path Prefix";
 t.oss.aliyunPrefixTips = "Do not set default to empty";
 t.oss.aliyunEndPoint = "EndPoint";
@@ -279,9 +279,9 @@ t.oss.qcloudRegionHongkong = "HongKong";
 t.oss.qcloudRegionToronto = "Toronto";
 t.oss.qcloudRegionFrankfurt = "Frankfurt";
 t.oss.localDomain = "Domain Name";
-t.oss.localDomainTips = "Binded domain name, eg http://cdn.scjydz.com";
+t.oss.localDomainTips = "Binded domain name, eg https://www.scjydz.com";
 t.oss.fastdfsDomain = "Domain Name";
-t.oss.fastdfsDomainTips = "Binded domain name, eg http://cdn.scjydz.com";
+t.oss.fastdfsDomainTips = "Binded domain name, eg https://www.scjydz.com";
 t.oss.localPrefix = "Path Prefix";
 t.oss.localPrefixTips = "Do not set default to empty";
 t.oss.localPath = "Storage Directory";
@@ -290,6 +290,7 @@ t.oss.localPathTips = "eg: D:/upload";
 t.dept = {};
 t.dept.name = "Name";
 t.dept.parentName = "Superior";
+t.dept.leaderName = "Leader";
 t.dept.sort = "Sort";
 t.dept.parentNameDefault = "Top Department";
 

+ 6 - 4
src/i18n/page/zh-CN.ts

@@ -70,12 +70,13 @@ t.login.title = "登录";
 t.login.username = "用户名";
 t.login.password = "密码";
 t.login.captcha = "验证码";
+t.login.demo = "在线演示";
 t.login.copyright = "佳缘科技";
 
 t.home = {};
 t.home.sysInfo = {};
 t.home.sysInfo.name = "系统名称";
-t.home.sysInfo.nameVal = "wjp-security";
+t.home.sysInfo.nameVal = "wjp-project";
 t.home.sysInfo.version = "版本信息";
 t.home.sysInfo.versionVal = app.version;
 t.home.sysInfo.osName = "操作系统";
@@ -239,7 +240,7 @@ t.oss.qiniuSecretKeyTips = "七牛SecretKey";
 t.oss.qiniuBucketName = "空间名";
 t.oss.qiniuBucketNameTips = "七牛存储空间名";
 t.oss.aliyunDomain = "域名";
-t.oss.aliyunDomainTips = "阿里云绑定的域名,如:http://cdn.scjydz.com";
+t.oss.aliyunDomainTips = "阿里云绑定的域名,如:https://www.scjydz.com";
 t.oss.aliyunPrefix = "路径前缀";
 t.oss.aliyunPrefixTips = "不设置默认为空";
 t.oss.aliyunEndPoint = "EndPoint";
@@ -275,9 +276,9 @@ t.oss.qcloudRegionHongkong = "香港";
 t.oss.qcloudRegionToronto = "多伦多";
 t.oss.qcloudRegionFrankfurt = "法兰克福";
 t.oss.localDomain = "域名";
-t.oss.localDomainTips = "绑定的域名,如:http://cdn.scjydz.com";
+t.oss.localDomainTips = "绑定的域名,如:https://www.scjydz.com";
 t.oss.fastdfsDomain = "域名";
-t.oss.fastdfsDomainTips = "绑定的域名,如:http://cdn.scjydz.com";
+t.oss.fastdfsDomainTips = "绑定的域名,如:https://www.scjydz.com";
 t.oss.localPrefix = "路径前缀";
 t.oss.localPrefixTips = "不设置默认为空";
 t.oss.localPath = "存储目录";
@@ -286,6 +287,7 @@ t.oss.localPathTips = "如:D:/upload";
 t.dept = {};
 t.dept.name = "名称";
 t.dept.parentName = "上级部门";
+t.dept.leaderName = "负责人";
 t.dept.sort = "排序";
 t.dept.parentNameDefault = "一级部门";
 

+ 6 - 6
src/layout/header/expand.vue

@@ -41,7 +41,7 @@ export default defineComponent({
       () => store.state.appIsLogin,
       (vl) => {
         if (vl) {
-          getUnReadMessageCount();
+          // getUnReadMessageCount();
           ws();
         }
       }
@@ -137,11 +137,11 @@ export default defineComponent({
         <svg-icon :name="isFullscreen ? 'tuichuquanping' : 'fullscreen2'"></svg-icon>
       </span>
     </div>
-    <div v-if="messagePermission">
-      <el-badge :value="messageCount > 0 ? messageCount : ''" type="danger" :max="99" @click="onClickMessage">
-        <el-icon class="icon"><bell /></el-icon>
-      </el-badge>
-    </div>
+<!--    <div v-if="messagePermission">-->
+<!--      <el-badge :value="messageCount > 0 ? messageCount : ''" type="danger" :max="99" @click="onClickMessage">-->
+<!--        <el-icon class="icon"><bell /></el-icon>-->
+<!--      </el-badge>-->
+<!--    </div>-->
 <!--    <div>-->
 <!--      <lang></lang>-->
 <!--    </div>-->

+ 1 - 2
src/layout/setting/index.vue

@@ -38,7 +38,6 @@ export default defineComponent({
 });
 </script>
 
-<!--
 <template>
   <div @click="onOpenSettingThemeWindow">
     <span class="rr-header-right-items-icon">
@@ -61,4 +60,4 @@ export default defineComponent({
       </div>
     </el-drawer>
   </div>
-</template> -->
+</template>

+ 1 - 1
src/router/base.ts

@@ -11,7 +11,7 @@ const routes: Array<RouteRecordRaw> = [
   {
     path: "/",
     component: Layout,
-    redirect: "/notice/notice-user",
+    redirect: "/home",
     meta: { title: "ui.router.pageWorkbench", icon: "icon-desktop" },
     children: [
       {

+ 4 - 0
src/utils/router.ts

@@ -38,6 +38,8 @@ export const mergeServerRoute = (
       matched: [...matched, { path, title: x.name }],
       ...meta
     };
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    // @ts-ignore
     r.redirect =
       x.redirect ||
       (isNotMatchComponent ? { path: "/error", query: { to: 404 }, replace: true } : "");
@@ -50,6 +52,8 @@ export const mergeServerRoute = (
         sysRouteMap,
         getValueByKeys(r.meta, "matched", [])
       );
+      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+      // @ts-ignore
       r.children = childrenRoutes[0];
       routeToMeta = { ...routeToMeta, ...childrenRoutes[1] };
     }

+ 1 - 1
src/views/devtools/baseclass-add-or-update.vue

@@ -71,7 +71,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/devtools/baseclass", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/devtools/baseclass", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/devtools/datasource-add-or-update.vue

@@ -91,7 +91,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/devtools/datasource", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/devtools/datasource", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/devtools/fieldtype-add-or-update.vue

@@ -67,7 +67,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/devtools/fieldtype", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/devtools/fieldtype", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 2 - 2
src/views/devtools/generator-code.vue

@@ -149,7 +149,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.put("/devtools/table", dataForm).then((res) => {
+    baseService.put("/devtools/table", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,
@@ -168,7 +168,7 @@ const generatorCodeHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.post("/devtools/generator", dataForm).then((res) => {
+    baseService.post("/devtools/generator", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/devtools/generator-edittable.vue

@@ -167,7 +167,7 @@ const getDictList = () => {
 
 // 修改
 const updateHandle = () => {
-  baseService.put("/devtools/table/field/" + tableId.value, tableData.value).then((res) => {
+  baseService.put("/devtools/table/field/" + tableId.value, tableData.value).then(() => {
     ElMessage.success({
       message: t("prompt.success"),
       duration: 500,

+ 1 - 1
src/views/devtools/generator-import.vue

@@ -87,7 +87,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/devtools/datasource/table", dataForm.tableInfo).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/devtools/datasource/table", dataForm.tableInfo).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/devtools/generator-menu.vue

@@ -108,7 +108,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.post("/devtools/menu", dataForm).then((res) => {
+    baseService.post("/devtools/menu", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/devtools/param-update.vue

@@ -78,7 +78,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.post("/devtools/param", dataForm).then((res) => {
+    baseService.post("/devtools/param", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 66 - 0
src/views/devtools/project.vue

@@ -0,0 +1,66 @@
+<template>
+  <div>
+    <el-space style="justify-content: space-between; width: 100%; border-bottom: 1px solid #ebeef5; margin-top: -10px; margin-bottom: 15px; padding-bottom: 10px">
+      <span>项目名和包名修改</span>
+    </el-space>
+  </div>
+  <div style="width: 600px">
+    <el-form :model="dataForm" :rules="rules" ref="dataFormRef" label-width="120px">
+      <el-form-item label="原项目路径" prop="projectPath">
+        <el-input v-model="dataForm.projectPath" placeholder="待修改的项目所在路径"></el-input>
+      </el-form-item>
+      <el-form-item label="原项目名称" prop="projectName">
+        <el-input v-model="dataForm.projectName" placeholder="待修改的项目名称"></el-input>
+      </el-form-item>
+      <el-form-item label="新项目名称" prop="newProjectName">
+        <el-input v-model="dataForm.newProjectName" placeholder="新项目名称"></el-input>
+      </el-form-item>
+      <el-form-item label="新项目包名" prop="newProjectPackage">
+        <el-input v-model="dataForm.newProjectPackage" placeholder="新项目包名"></el-input>
+      </el-form-item>
+      <el-form-item label="新项目标识" prop="newProjectCode">
+        <el-input v-model="dataForm.newProjectCode" placeholder="用于替换wjp标识"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="dataFormSubmitHandle()">生成新项目</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script lang="ts" setup>
+import { reactive, ref } from "vue";
+import { getToken } from "@/utils/cache";
+import app from "@/constants/app";
+import qs from "qs";
+
+const dataFormRef = ref();
+const dataForm = reactive({
+  projectPath: "D:\\code\\wjp-project",
+  projectName: "wjp-project",
+  newProjectName: "test-project",
+  newProjectPackage: "com.wjp",
+  newProjectCode: "wjp"
+});
+
+const rules = ref({
+  projectPath: [{ required: true, message: "必填项不能为空", trigger: "blur" }],
+  projectName: [{ required: true, message: "必填项不能为空", trigger: "blur" }],
+  newProjectName: [{ required: true, message: "必填项不能为空", trigger: "blur" }],
+  newProjectPackage: [{ required: true, message: "必填项不能为空", trigger: "blur" }],
+  newProjectCode: [{ required: true, message: "必填项不能为空", trigger: "blur" }]
+});
+
+// 表单提交
+const dataFormSubmitHandle = () => {
+  dataFormRef.value.validate((valid: boolean) => {
+    if (!valid) {
+      return false;
+    }
+
+    location.href = `${app.api}/devtools/project?${qs.stringify({
+      ...dataForm,
+      token: getToken()
+    })}`;
+  });
+};
+</script>

+ 1 - 1
src/views/devtools/template-add-or-update.vue

@@ -95,7 +95,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/devtools/template", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/devtools/template", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 2 - 2
src/views/devtools/template.vue

@@ -74,7 +74,7 @@ const enabledHandle = (id?: string) => {
       duration: 500
     });
   }
-  baseService.put("/devtools/template/enabled", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then((res) => {
+  baseService.put("/devtools/template/enabled", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then(() => {
     ElMessage.success({
       message: t("prompt.success"),
       duration: 500,
@@ -93,7 +93,7 @@ const disabledHandle = (id?: string) => {
       duration: 500
     });
   }
-  baseService.put("/devtools/template/disabled", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then((res) => {
+  baseService.put("/devtools/template/disabled", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then(() => {
     ElMessage({
       message: t("prompt.success"),
       type: "success",

+ 1 - 1
src/views/flow/bpmform-add-or-update.vue

@@ -87,7 +87,7 @@ const dataFormSubmitHandle = () => {
         }
       });
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/flow/bpmform", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/flow/bpmform", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/flow/bpmform.vue

@@ -96,7 +96,7 @@ const saveData = (json?: string) => {
     content: json
   };
 
-  baseService.put("/flow/bpmform", dataForm).then((res) => {
+  baseService.put("/flow/bpmform", dataForm).then(() => {
     ElMessage.success({
       message: t("prompt.success"),
       duration: 500,

+ 0 - 3
src/views/flow/done.vue

@@ -33,9 +33,6 @@
 import useView from "@/hooks/useView";
 import { reactive, toRefs } from "vue";
 import { IObject } from "@/types/interface";
-import { useI18n } from "vue-i18n";
-
-const { t } = useI18n();
 
 const view = reactive({
   getDataListURL: "/flow/common/done/page",

+ 62 - 21
src/views/flow/form-select.vue

@@ -1,26 +1,41 @@
 <template>
   <el-dialog v-model="state.visibleSelect" width="50%" :modal="false" title="选择流程表单" :close-on-click-modal="false" :close-on-press-escape="false">
     <div class="mod-form__select">
-      <el-form :inline="true" :model="dataForm" @keyup.enter="state.getDataList()">
+      <el-form>
         <el-form-item>
-          <el-input v-model="dataForm.name" placeholder="名称"></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
+          <el-radio-group v-model="dataForm.formType">
+            <el-radio-button label="0">流程表单</el-radio-button>
+            <el-radio-button label="1">自定义表单</el-radio-button>
+          </el-radio-group>
         </el-form-item>
       </el-form>
-      <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%" size="small">
-        <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
-        <el-table-column prop="id" label="id" header-align="center" align="center"></el-table-column>
-        <el-table-column prop="name" label="名称" header-align="center" align="center"></el-table-column>
-        <el-table-column prop="remark" label="备注" header-align="center" align="center"></el-table-column>
-        <el-table-column prop="createDate" label="创建时间" header-align="center" align="center"></el-table-column>
-      </el-table>
-      <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
+      <div v-if="dataForm.formType === '0'">
+        <el-form :inline="true" :model="dataForm" @keyup.enter="state.getDataList()">
+          <el-form-item>
+            <el-input v-model="dataForm.name" placeholder="名称"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="state.getDataList()">{{ t("query") }}</el-button>
+          </el-form-item>
+        </el-form>
+        <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%" size="small">
+          <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
+          <el-table-column prop="id" label="id" header-align="center" align="center"></el-table-column>
+          <el-table-column prop="name" label="名称" header-align="center" align="center"></el-table-column>
+          <el-table-column prop="remark" label="备注" header-align="center" align="center"></el-table-column>
+          <el-table-column prop="createDate" label="创建时间" header-align="center" align="center"></el-table-column>
+        </el-table>
+        <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
+      </div>
+      <div v-else>
+        <el-form-item label="表单地址:">
+          <el-input v-model="dataForm.formId" placeholder="如:/src/views/flow/form/correction.vue"></el-input>
+        </el-form-item>
+      </div>
     </div>
     <template v-slot:footer>
-      <el-button @click="cancelHandle()">{{ $t("cancel") }}</el-button>
-      <el-button type="primary" @click="commitHandle()">{{ $t("confirm") }}</el-button>
+      <el-button @click="cancelHandle()">{{ t("cancel") }}</el-button>
+      <el-button type="primary" @click="commitHandle()">{{ t("confirm") }}</el-button>
     </template>
   </el-dialog>
 </template>
@@ -38,13 +53,23 @@ const view = reactive({
 });
 
 const dataForm = reactive({
-  name: ""
+  name: "",
+  formType: "0",
+  formId: ""
 });
 const callback = ref();
 
 const state = reactive({ ...useView(view), ...toRefs(view) });
 
-const init = (callback2: (e: any) => any) => {
+const init = (callback2: (e: any) => any, metaInfo: any) => {
+  if (metaInfo) {
+    dataForm.formType = metaInfo.formType;
+    dataForm.formId = metaInfo.formId;
+    if (!dataForm.formType) {
+      dataForm.formType = "0";
+    }
+  }
+
   state.visibleSelect = true;
   callback.value = callback2;
   nextTick(() => {
@@ -58,11 +83,27 @@ const cancelHandle = () => {
 
 const commitHandle = () => {
   if (callback.value) {
-    if (state.dataListSelections?.length !== 1) {
-      ElMessage.error(t("user.selecterror"));
-      return;
+    if (dataForm.formType == "0") {
+      // 流程表单
+      if (state.dataListSelections?.length !== 1) {
+        ElMessage.error(t("user.selecterror"));
+        return;
+      } else {
+        const postData = { ...state.dataListSelections[0] };
+        postData.type = dataForm.formType;
+        callback.value(postData);
+      }
     } else {
-      callback.value(state.dataListSelections[0]);
+      if (!dataForm.formId) {
+        ElMessage.error("表单地址不存在");
+        return;
+      }
+      // 自定义表单
+      const postData = {
+        type: dataForm.formType,
+        id: dataForm.formId
+      };
+      callback.value(postData);
     }
   }
   state.visibleSelect = false;

+ 108 - 0
src/views/flow/form/correction.vue

@@ -0,0 +1,108 @@
+<template>
+  <el-form :model="dataForm" :rules="rules" ref="dataFormRef" :disabled="disabled" label-width="100px">
+    <el-form-item :label="$t('correction.post')" prop="applyPost">
+      <el-input v-model="dataForm.applyPost"></el-input>
+    </el-form-item>
+    <el-row :gutter="40">
+      <el-col :span="12">
+        <el-form-item :label="$t('correction.entryDate')" prop="entryDate">
+          <el-date-picker v-model="dataForm.entryDate" value-format="YYYY-MM-DD" style="width: 100%"></el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item :label="$t('correction.correctionDate')" prop="correctionDate">
+          <el-date-picker v-model="dataForm.correctionDate" value-format="YYYY-MM-DD" style="width: 100%"></el-date-picker>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-form-item :label="$t('correction.workContent')" prop="workContent">
+      <el-input type="textarea" v-model="dataForm.workContent"></el-input>
+    </el-form-item>
+    <el-form-item :label="$t('correction.achievement')" prop="achievement">
+      <el-input type="textarea" v-model="dataForm.achievement"></el-input>
+    </el-form-item>
+  </el-form>
+</template>
+<script lang="ts" setup>
+import baseService from "@/service/baseService";
+import { onMounted, reactive, ref, toRefs } from "vue";
+import { useI18n } from "vue-i18n";
+import useView from "@/hooks/useView";
+import { ElMessage } from "element-plus";
+const { t } = useI18n();
+
+const props = defineProps({
+  instanceId: {
+    type: String,
+    required: false
+  },
+  disabled: {
+    type: Boolean,
+    default: false
+  }
+});
+
+const dataFormRef = ref();
+const dataForm = reactive({
+  id: "",
+  applyPost: "",
+  entryDate: "",
+  correctionDate: "",
+  workContent: "",
+  achievement: "",
+  processDefinitionId: ""
+});
+
+const view = reactive({
+  createdIsNeed: false
+});
+
+const state = reactive({ ...useView(view), ...toRefs(view) });
+
+const rules = ref({
+  applyPost: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  entryDate: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  correctionDate: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  workContent: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  achievement: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  createTime: [{ required: true, message: t("validate.required"), trigger: "blur" }]
+});
+
+onMounted(() => {
+  if (props.instanceId) {
+    getInfo();
+  }
+});
+
+const getInfo = () => {
+  baseService.get("/flow/form/correction/" + props.instanceId).then((res) => {
+    Object.assign(dataForm, res.data);
+  });
+};
+
+// 提交表单
+// definitionId: 流程定义ID
+const submitForm = (definitionId: string) => {
+  dataFormRef.value.validate((valid: boolean) => {
+    if (!valid) {
+      return false;
+    }
+    // 设置流程定义ID
+    dataForm.processDefinitionId = definitionId;
+    baseService.post("/flow/form/correction/start", dataForm).then(() => {
+      ElMessage.success({
+        message: t("prompt.success"),
+        duration: 500,
+        onClose: () => {
+          state.closeCurrentTab();
+        }
+      });
+    });
+  });
+};
+
+// 需要暴露出去,给其他组件调用(方法名只能为: submitForm)
+defineExpose({
+  submitForm
+});
+</script>

+ 19 - 15
src/views/flow/model.vue

@@ -2,26 +2,29 @@
   <div class="mod__model">
     <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
       <el-form-item>
-        <el-input v-model="state.dataForm.name" :placeholder="$t('model.name')"></el-input>
+        <el-input v-model="state.dataForm.name" :placeholder="t('model.name')"></el-input>
       </el-form-item>
       <el-form-item>
-        <el-input v-model="state.dataForm.modelKey" :placeholder="$t('model.key')"></el-input>
+        <el-input v-model="state.dataForm.modelKey" :placeholder="t('model.key')"></el-input>
       </el-form-item>
       <el-form-item>
-        <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
+        <el-button @click="state.getDataList()">{{ t("query") }}</el-button>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" plain @click="addModel()">新建流程</el-button>
       </el-form-item>
     </el-form>
-    <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%">
+    <el-table v-loading="state.dataListLoading" :data="state.dataList" show-overflow-tooltip border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%">
       <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
-      <el-table-column prop="name" label="流程名称" show-overflow-tooltip header-align="center" align="center"></el-table-column>
-      <el-table-column prop="key" label="流程Key" show-overflow-tooltip header-align="center" align="center"></el-table-column>
-      <el-table-column prop="key" label="流程表单" show-overflow-tooltip header-align="center" align="center">
+      <el-table-column prop="name" label="流程名称" header-align="center" align="center"></el-table-column>
+      <el-table-column prop="key" label="流程Key" header-align="center" align="center"></el-table-column>
+      <el-table-column prop="key" label="流程表单" header-align="center" align="center">
         <template v-slot="scope">
-          <el-button type="primary" link v-if="scope.row.metaInfo" @click="formPreview(scope.row.metaInfo.formId)"> {{ scope.row.metaInfo.formName }} </el-button>
-          <el-tag type="warning" v-else> 未配置 </el-tag>
+          <el-tag v-if="scope.row.metaInfo">
+            <span v-if="scope.row.metaInfo.formType === '1'">{{ scope.row.metaInfo.formId }}</span>
+            <span v-else @click="formPreview(scope.row.metaInfo.formId)">{{ scope.row.metaInfo.formName }} </span>
+          </el-tag>
+          <el-tag type="danger" v-else> 未配置 </el-tag>
         </template>
       </el-table-column>
       <el-table-column prop="deploymentId" label="发布状态" header-align="center" align="center" width="130">
@@ -33,11 +36,11 @@
           <el-tag type="warning" v-else>未发布</el-tag>
         </template>
       </el-table-column>
-      <el-table-column prop="created" :label="$t('model.createTime')" header-align="center" align="center" width="170"></el-table-column>
-      <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="214">
+      <el-table-column prop="created" :label="t('model.createTime')" header-align="center" align="center" width="170"></el-table-column>
+      <el-table-column :label="t('handle')" fixed="right" header-align="center" align="center" width="214">
         <template v-slot="scope">
-          <el-button type="primary" link @click="addModel(scope.row.id)">{{ $t("model.design") }}</el-button>
-          <el-button type="primary" link @click="addForm(scope.row.id)">表单</el-button>
+          <el-button type="primary" link @click="addModel(scope.row.id)">{{ t("model.design") }}</el-button>
+          <el-button type="primary" link @click="addForm(scope.row.id, scope.row.metaInfo)">表单</el-button>
           <el-button type="primary" link @click="deployHandle(scope.row.id)">发布</el-button>
           <el-dropdown @command="(command: string) => handleCommand(command, scope.row)">
             <el-button type="primary" class="el-dropdown-link" link>
@@ -112,18 +115,19 @@ const addModel = (id?: string) => {
 
 const formSelectRef = ref();
 const formVisible = ref(false);
-const addForm = (id?: string) => {
+const addForm = (id: string, metaInfo: any) => {
   modelId.value = id;
   formVisible.value = true;
 
   nextTick(() => {
-    formSelectRef.value.init(saveForm);
+    formSelectRef.value.init(saveForm, metaInfo);
   });
 };
 
 const saveForm = (form: IObject) => {
   const data = {
     id: modelId.value,
+    formType: form.type,
     formId: form.id,
     formName: form.name
   };

+ 0 - 3
src/views/flow/my-send.vue

@@ -34,9 +34,6 @@
 import useView from "@/hooks/useView";
 import { reactive, toRefs } from "vue";
 import { IObject } from "@/types/interface";
-import { useI18n } from "vue-i18n";
-
-const { t } = useI18n();
 
 const view = reactive({
   getDataListURL: "/flow/common/my/page",

+ 1 - 1
src/views/flow/process-designer.vue

@@ -114,7 +114,7 @@ export default {
         .post("/flow/model", data, {
           "content-type": "application/x-www-form-urlencoded"
         })
-        .then((res) => {
+        .then(() => {
           ElMessage.success({
             message: "操作成功",
             duration: 500,

+ 0 - 3
src/views/flow/running.vue

@@ -34,9 +34,6 @@
 import useView from "@/hooks/useView";
 import { reactive, toRefs } from "vue";
 import { IObject } from "@/types/interface";
-import { useI18n } from "vue-i18n";
-
-const { t } = useI18n();
 
 const view = reactive({
   getDataListURL: "/flow/running/page",

+ 0 - 3
src/views/flow/start.vue

@@ -34,9 +34,6 @@
 <script lang="ts" setup>
 import useView from "@/hooks/useView";
 import { reactive, toRefs } from "vue";
-import qs from "qs";
-import { getToken } from "@/utils/cache";
-import app from "@/constants/app";
 import { IObject } from "@/types/interface";
 import { registerDynamicToRouterAndNext } from "@/router";
 

+ 40 - 16
src/views/flow/task-form.vue

@@ -3,19 +3,20 @@
     <el-tabs v-model="activeName" class="demo-tabs">
       <el-tab-pane label="表单信息" name="form">
         <v-form-render v-if="formVisible" :formJson="formJson" :formData="formData" ref="dataFormRef"></v-form-render>
+        <component v-if="customComponent" :is="customComponent" ref="customRef" :instance-id="dataForm.processInstanceId" :disabled="state.fieldDisabled"></component>
         <el-row :gutter="640" v-if="!state.fieldDisabled">
           <el-col :span="4" :offset="1">
-            <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t("process.createInstance") }}</el-button>
+            <el-button type="primary" @click="dataFormSubmitHandle()">{{ t("process.createInstance") }}</el-button>
           </el-col>
         </el-row>
         <el-row style="margin: 20px 0 0 80px" v-if="state.runningHandleVisible">
           <el-col>
-            <my-process-running v-if="state.runningHandleVisible" ref="myProcessRunning"></my-process-running>
+            <my-process-running v-if="state.runningHandleVisible" ref="renProcessRunning"></my-process-running>
           </el-col>
         </el-row>
       </el-tab-pane>
       <el-tab-pane v-if="state.processDetailVisible" label="流转记录" name="detail">
-        <my-process-detail ref="myProcessDetail"></my-process-detail>
+        <my-process-detail ref="renProcessDetail"></my-process-detail>
       </el-tab-pane>
       <el-tab-pane v-if="state.processDetailVisible" label="流程图" name="image">
         <img :src="getDiagramImage()" class="image" />
@@ -26,7 +27,7 @@
 
 <script lang="ts" setup>
 import baseService from "@/service/baseService";
-import { nextTick, onMounted, reactive, ref, toRefs } from "vue";
+import { defineAsyncComponent, nextTick, onMounted, reactive, ref, shallowRef, toRefs } from "vue";
 import { useRoute } from "vue-router";
 import { useI18n } from "vue-i18n";
 import { ElMessage } from "element-plus";
@@ -34,10 +35,12 @@ import useView from "@/hooks/useView";
 import qs from "qs";
 import { getToken } from "@/utils/cache";
 import app from "@/constants/app";
+import { getSysRouteMap } from "@/router";
 const { t } = useI18n();
 
 const activeName = ref("form");
 const dataFormRef = ref();
+const customRef = ref();
 const dataForm = reactive({
   id: "",
   //必传
@@ -61,6 +64,9 @@ onMounted(() => {
   init();
 });
 
+// 自定义表单组件
+const customComponent = shallowRef();
+
 const init = () => {
   const route = useRoute();
   const showType = route.query.showType;
@@ -89,6 +95,7 @@ const init = () => {
 const formVisible = ref(false);
 const formJson = ref();
 const formData = ref();
+const formType = ref();
 
 // 获取表单信息
 const getFormData = async (instanceId: string) => {
@@ -99,32 +106,49 @@ const getFormData = async (instanceId: string) => {
 
 const getForm = async () => {
   const { data } = await baseService.get(`/flow/common/form/${dataForm.processDefinitionId}`);
-
-  await getFormData(dataForm.processInstanceId);
-  formJson.value = JSON.parse(data);
-  formVisible.value = true;
-
-  await nextTick(() => {
-    if (state.fieldDisabled) {
-      dataFormRef.value.disableForm();
-    }
-  });
+  formType.value = data.formType;
+  // 自定义流程表单
+  if (data.formType === "1") {
+    // 异步加载表单组件
+    const sysRouteMap = getSysRouteMap();
+    customComponent.value = defineAsyncComponent(sysRouteMap[data.formId]);
+  } else {
+    await getFormData(dataForm.processInstanceId);
+    formJson.value = JSON.parse(data.formContent);
+    formVisible.value = true;
+
+    await nextTick(() => {
+      if (state.fieldDisabled) {
+        dataFormRef.value.disableForm();
+      }
+    });
+  }
 };
 
 const getDiagramImage = () => {
   const params = qs.stringify({
     token: getToken(),
-    processInstanceId: dataForm.processInstanceId
+    processInstanceId: dataForm.processInstanceId,
+    _t: new Date().getTime()
   });
   return `${app.api}/flow/common/diagram/image?${params}`;
 };
 
 // 启动流程
 const dataFormSubmitHandle = () => {
+  // 自定义流程表单
+  if (formType.value === "1") {
+    // 提交表单
+    customRef.value.submitForm(dataForm.processDefinitionId);
+
+    return;
+  }
+
+  // 其他情况
   dataFormRef.value
     .getFormData()
     .then((formData: any) => {
-      baseService.post("/flow/common/start/instance/" + dataForm.processDefinitionId, formData).then((res) => {
+      baseService.post("/flow/common/start/instance/" + dataForm.processDefinitionId, formData).then(() => {
         ElMessage.success({
           message: t("prompt.success"),
           duration: 500,

+ 0 - 2
src/views/flow/todo.vue

@@ -28,9 +28,7 @@
 import useView from "@/hooks/useView";
 import { reactive, ref, toRefs } from "vue";
 import { IObject } from "@/types/interface";
-import { useI18n } from "vue-i18n";
 
-const { t } = useI18n();
 const processInstanceId = ref("");
 
 const view = reactive({

+ 1 - 1
src/views/home.vue

@@ -128,7 +128,7 @@ const getSysInfo = () => {
     if (res.code !== 0) {
       return ElMessage.error(res.msg);
     }
-    Object.assign(sysInfo, res.data)
+    Object.assign(sysInfo, res.data);
   });
 };
 </script>

+ 1 - 1
src/views/job/schedule-add-or-update.vue

@@ -85,7 +85,7 @@ const dataFormSubmitHandle = () => {
       return false;
     }
     const fn = !dataForm.id ? baseService.post("/sys/schedule", dataForm) : baseService.put("/sys/schedule", dataForm);
-    fn.then((res) => {
+    fn.then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 3 - 4
src/views/job/schedule.vue

@@ -66,7 +66,6 @@ import Log from "./schedule-log.vue";
 import { useI18n } from "vue-i18n";
 import { ElMessage, ElMessageBox } from "element-plus";
 const { t } = useI18n();
-const emit = defineEmits(["refreshDataList"]);
 
 const logRef = ref();
 
@@ -97,7 +96,7 @@ const pauseHandle = (id?: string) => {
     type: "warning"
   })
     .then(() => {
-      baseService.put("/sys/schedule/pause", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then((res) => {
+      baseService.put("/sys/schedule/pause", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then(() => {
         ElMessage.success({
           message: t("prompt.success"),
           duration: 500,
@@ -127,7 +126,7 @@ const resumeHandle = (id?: string) => {
     type: "warning"
   })
     .then(() => {
-      baseService.put("/sys/schedule/resume", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then((res) => {
+      baseService.put("/sys/schedule/resume", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then(() => {
         ElMessage.success({
           message: t("prompt.success"),
           duration: 500,
@@ -157,7 +156,7 @@ const runHandle = (id?: string) => {
     type: "warning"
   })
     .then(() => {
-      baseService.put("/sys/schedule/run", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then((res) => {
+      baseService.put("/sys/schedule/run", id ? [id] : state.dataListSelections && state.dataListSelections.map((item: IObject) => item.id)).then(() => {
         ElMessage.success({
           message: t("prompt.success"),
           duration: 500,

+ 3 - 3
src/views/login.vue

@@ -82,13 +82,13 @@ const formRef = ref();
 
 const rules = ref({
   username: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  password: [{ required: true, message: t("validate.required"), trigger: "blur" }]
-  // captcha: [{ required: true, message: t("validate.required"), trigger: "blur" }]
+  password: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  captcha: [{ required: true, message: t("validate.required"), trigger: "blur" }]
 });
 
 const getCaptchaUrl = () => {
   login.uuid = getUuid();
-  // state.captchaUrl = `${app.api}/captcha?uuid=${login.uuid}`;
+  state.captchaUrl = `${app.api}/captcha?uuid=${login.uuid}`;
 };
 
 const onRefreshCode = () => {

+ 0 - 211
src/views/notice/notice-add-or-update.vue

@@ -1,211 +0,0 @@
-<template>
-  <el-dialog v-model="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
-    <el-form :model="dataForm" :rules="rules" ref="dataFormRef" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
-      <el-form-item :label="$t('notice.type')" prop="noticeType">
-        <my-radio-group v-model="dataForm.noticeType" dict-type="notice_type"></my-radio-group>
-      </el-form-item>
-      <el-form-item :label="$t('notice.title')" prop="title">
-        <el-input v-model="dataForm.title" :placeholder="$t('notice.title')"></el-input>
-      </el-form-item>
-      <el-form-item prop="content" :label="$t('notice.content')">
-        <!-- 富文本编辑器, 容器 -->
-        <div id="J_quillEditor" style="height: 280px; width: 100%"></div>
-        <!-- 自定义上传图片功能 (使用element upload组件) -->
-        <el-upload :action="uploadUrl" :show-file-list="false" :before-upload="uploadBeforeUploadHandle" :on-success="uploadSuccessHandle" style="display: none">
-          <el-button ref="uploadBtn" type="primary" size="small">{{ $t("upload.button") }}</el-button>
-        </el-upload>
-      </el-form-item>
-      <el-form-item :label="$t('notice.receiverType')" prop="">
-        <el-radio-group v-model="dataForm.receiverType">
-          <el-radio :label="0">{{ $t("notice.receiverType0") }}</el-radio>
-          <el-radio :label="1">{{ $t("notice.receiverType1") }}</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item v-show="dataForm.receiverType == 1" :label="$t('notice.selectDept')">
-        <el-tree :data="deptList" :props="{ label: 'name', children: 'children' }" node-key="id" ref="deptListTree" accordion show-checkbox> </el-tree>
-      </el-form-item>
-    </el-form>
-    <template v-slot:footer>
-      <el-button @click="visible = false">{{ $t("cancel") }}</el-button>
-      <el-button type="danger" @click="dataFormSubmitHandle(0)">{{ $t("notice.draft") }}</el-button>
-      <el-button type="primary" @click="dataFormSubmitHandle(1)">{{ $t("notice.release") }}</el-button>
-    </template>
-  </el-dialog>
-</template>
-
-<script lang="ts" setup>
-import { nextTick, reactive, ref } from "vue";
-import "quill/dist/quill.snow.css";
-import Quill from "quill";
-import { IObject } from "@/types/interface";
-import app from "@/constants/app";
-import { getToken } from "@/utils/cache";
-import baseService from "@/service/baseService";
-import { useI18n } from "vue-i18n";
-import { ElMessage } from "element-plus";
-const { t } = useI18n();
-const emit = defineEmits(["refreshDataList"]);
-
-const visible = ref(false);
-const quillEditor = ref();
-const quillEditorToolbarOptions = [["bold", "italic", "underline", "strike"], ["image"], [{ list: "ordered" }, { list: "bullet" }], [{ size: ["small", false, "large", "huge"] }], [{ color: [] }, { background: [] }], ["clean"]];
-const uploadUrl = ref();
-const deptList = ref([]);
-const deptListTree = ref();
-const uploadBtn = ref();
-const dataFormRef = ref();
-
-const dataForm = reactive({
-  id: "",
-  noticeType: 0,
-  title: "",
-  content: "",
-  receiverType: 0,
-  receiverTypeIds: "",
-  receiverTypeList: [],
-  status: 0,
-  senderName: "",
-  senderDate: "",
-  creator: 0,
-  createDate: ""
-});
-
-const validateContent = (rule: IObject, value: string, callback: (e?: Error) => any) => {
-  if (quillEditor.value && quillEditor.value.getLength() <= 1) {
-    return callback(new Error(t("validate.required")));
-  }
-  callback();
-};
-
-const rules = ref({
-  noticeType: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  title: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  content: [
-    { required: true, message: t("validate.required"), trigger: "blur" },
-    { validator: validateContent, trigger: "blur" }
-  ],
-  receiverType: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  receiverTypeIds: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  status: [{ required: true, message: t("validate.required"), trigger: "blur" }],
-  senderName: [{ required: true, message: t("validate.required"), trigger: "blur" }]
-});
-
-const init = (id: number) => {
-  visible.value = true;
-  dataForm.id = "";
-
-  nextTick(() => {
-    if (quillEditor.value) {
-      quillEditor.value.deleteText(0, quillEditor.value.getLength());
-    } else {
-      quillEditorHandle();
-    }
-
-    // 重置表单数据
-    if (dataFormRef.value) {
-      dataFormRef.value.resetFields();
-    }
-
-    Promise.all([getDeptList()]).then(() => {
-      if (id) {
-        getInfo(id);
-      }
-    });
-  });
-};
-
-// 富文本编辑器
-const quillEditorHandle = () => {
-  quillEditor.value = new Quill("#J_quillEditor", {
-    modules: {
-      toolbar: quillEditorToolbarOptions
-    },
-    theme: "snow"
-  });
-  // 自定义上传图片功能 (使用element upload组件)
-  uploadUrl.value = `${app.api}/sys/oss/upload?token=${getToken()}`;
-  quillEditor.value.getModule("toolbar").addHandler("image", () => {
-    uploadBtn.value.$el.click();
-  });
-  // 监听内容变化,动态赋值
-  quillEditor.value.on("text-change", () => {
-    if (quillEditor.value) {
-      dataForm.content = quillEditor.value.root.innerHTML;
-    }
-  });
-};
-
-// 上传图片之前
-const uploadBeforeUploadHandle = (file: IObject) => {
-  if (file.type !== "image/jpg" && file.type !== "image/jpeg" && file.type !== "image/png" && file.type !== "image/gif") {
-    ElMessage.error(t("upload.tip", { format: "jpg、png、gif" }));
-    return false;
-  }
-};
-
-// 上传图片成功
-const uploadSuccessHandle = (res: IObject) => {
-  if (res.code !== 0) {
-    return ElMessage.error(res.msg);
-  }
-  if (quillEditor.value) {
-    const selection = quillEditor.value.getSelection();
-    if (selection) {
-      quillEditor.value.insertEmbed(selection.index, "image", res.data.src);
-    }
-  }
-};
-
-// 获取部门列表
-const getDeptList = () => {
-  return baseService.get("/sys/dept/list").then((res) => {
-    deptList.value = res.data;
-  });
-};
-
-// 获取信息
-const getInfo = (id: number) => {
-  baseService.get(`/sys/notice/${id}`).then((res) => {
-    Object.assign(dataForm, res.data);
-    if (quillEditor.value) {
-      quillEditor.value.root.innerHTML = dataForm.content;
-    }
-
-    // 接受者为部门
-    if (dataForm.receiverType === 1) {
-      deptListTree.value.setCheckedKeys(res.data.receiverTypeIds.split(","));
-    }
-  });
-};
-
-// 表单提交
-const dataFormSubmitHandle = (status: number) => {
-  dataFormRef.value.validate((valid: boolean) => {
-    if (!valid) {
-      return false;
-    }
-    // 接受者为部门
-    if (dataForm.receiverType === 1) {
-      dataForm.receiverTypeIds = deptListTree.value.getCheckedKeys().join(",");
-      dataForm.receiverTypeList = deptListTree.value.getCheckedKeys();
-    } else {
-      dataForm.receiverTypeIds = "";
-    }
-    dataForm.status = status;
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/notice", dataForm).then((res) => {
-      ElMessage.success({
-        message: t("prompt.success"),
-        duration: 500,
-        onClose: () => {
-          visible.value = false;
-          emit("refreshDataList");
-        }
-      });
-    });
-  });
-};
-
-defineExpose({
-  init
-});
-</script>

+ 0 - 68
src/views/notice/notice-user-view.vue

@@ -1,68 +0,0 @@
-<template>
-  <div style="text-align: center; font-size: 28px">{{ dataForm.title }}</div>
-  <el-divider></el-divider>
-  <div v-html="dataForm.content"></div>
-  <div>
-    <hr size="1" color="#ddd" style="margin: 30px 0 10px 0" />
-    <span>
-      <el-icon style="color: #e6444a"><user-solid /></el-icon> {{ $t("notice.senderName") }}:{{ dataForm.senderName }}
-    </span>
-    <el-divider direction="vertical"></el-divider>
-    <span>
-      <el-icon style="color: #e6444a"><time /></el-icon> {{ $t("notice.senderDate") }}:{{ dataForm.senderDate }}
-    </span>
-    <el-divider direction="vertical" style="margin: 0px; padding: 0px"></el-divider>
-    <span>
-      <el-icon style="color: #e6a23c"><s-order /></el-icon>
-      {{ $t("notice.type") }}:
-      {{ state.getDictLabel("notice_type", dataForm.noticeType) }}
-    </span>
-    <hr size="1" color="#ddd" style="margin: 10px 0 30px 0" />
-  </div>
-  <div style="text-align: center">
-    <el-button type="danger" @click="state.closeCurrentTab()">{{ $t("notice.close") }}</el-button>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import useView from "@/hooks/useView";
-import { onMounted, reactive, toRefs } from "vue";
-import baseService from "@/service/baseService";
-import { useRoute } from "vue-router";
-const route = useRoute();
-
-const dataForm = reactive({
-  id: "",
-  noticeType: 0,
-  senderDate: "",
-  senderName: "",
-  content: "",
-  title: ""
-});
-
-const view = reactive({
-  getDataListURL: "/sys/notice/user/page",
-  createdIsNeed: false,
-  activatedIsNeed: false,
-  getDataListIsPage: true
-});
-
-const state = reactive({ ...useView(view), ...toRefs(view) });
-
-onMounted(() => {
-  dataForm.id = route.query.id as string;
-  dataForm.content = "";
-  dataForm.senderDate = "";
-  dataForm.senderName = "";
-  dataForm.title = "";
-  getInfo();
-  state.query();
-});
-
-// 获取信息
-const getInfo = () => {
-  baseService.get(`/sys/notice/${dataForm.id}`).then((res) => {
-    Object.assign(dataForm, res.data);
-  });
-};
-</script>

+ 0 - 78
src/views/notice/notice-user.vue

@@ -1,78 +0,0 @@
-<template>
-  <div class="mod-demo__sysnoticeuser">
-    <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
-      <el-form-item>
-        <my-select v-model="state.dataForm.noticeType" dict-type="notice_type" :placeholder="$t('notice.type')"></my-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
-      <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
-      <el-table-column prop="title" :label="$t('notice.title')" header-align="center" align="center"></el-table-column>
-      <el-table-column prop="noticeType" :label="$t('notice.type')" header-align="center" align="center" width="150">
-        <template v-slot="scope">
-          {{ state.getDictLabel("notice_type", scope.row.noticeType) }}
-        </template>
-      </el-table-column>
-      <el-table-column prop="senderName" :label="$t('notice.senderName')" header-align="center" align="center" width="150"></el-table-column>
-      <el-table-column prop="senderDate" :label="$t('notice.senderDate')" header-align="center" align="center" width="170"></el-table-column>
-      <el-table-column prop="readStatus" :label="$t('notice.readStatus')" header-align="center" align="center" width="130">
-        <template v-slot="scope">
-          <el-tag v-if="scope.row.readStatus === 0" type="danger">{{ $t("notice.readStatus0") }}</el-tag>
-          <el-tag v-else type="success">{{ $t("notice.readStatus1") }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
-        <template v-slot="scope">
-          <el-button type="primary" link @click="viewHandle(scope.row)">{{ $t("notice.view") }}</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import useView from "@/hooks/useView";
-import { reactive, toRefs } from "vue";
-import { IObject } from "@/types/interface";
-import baseService from "@/service/baseService";
-import { registerDynamicToRouterAndNext } from "@/router";
-import { useI18n } from "vue-i18n";
-const { t } = useI18n();
-
-const view = reactive({
-  getDataListURL: "/sys/notice/mynotice/page",
-  getDataListIsPage: true,
-  dataForm: {
-    noticeType: ""
-  }
-});
-
-const state = reactive({ ...useView(view), ...toRefs(view) });
-
-const viewHandle = (row: IObject) => {
-  // 路由参数
-  const routeParams = {
-    path: "/notice/notice-user-view",
-    query: {
-      id: row.id,
-      _mt: t("notice.view2")
-    }
-  };
-
-  // 如果未读,则标记为已读
-  if (row.readStatus === 0) {
-    updateReadStatus(row.id);
-  }
-
-  // 动态路由
-  registerDynamicToRouterAndNext(routeParams);
-};
-
-const updateReadStatus = (noticeId: string) => {
-  baseService.put("/sys/notice/mynotice/read/" + noticeId).then((res) => {});
-};
-</script>

+ 0 - 76
src/views/notice/notice-view.vue

@@ -1,76 +0,0 @@
-<template>
-  <div style="text-align: center; font-size: 28px">{{ dataForm.title }}</div>
-  <el-divider></el-divider>
-  <div v-html="dataForm.content"></div>
-  <div>
-    <hr size="1" color="#ddd" style="margin: 30px 0 10px 0" />
-    <span><i class="el-icon-user-solid" style="color: #e6444a"></i> {{ $t("notice.senderName") }}:{{ dataForm.senderName }}</span>
-    <el-divider direction="vertical"></el-divider>
-    <span><i class="el-icon-time" style="color: #e6444a"></i> {{ $t("notice.senderDate") }}:{{ dataForm.senderDate }}</span>
-    <el-divider direction="vertical" style="margin: 0px; padding: 0px"></el-divider>
-    <span>
-      <i class="el-icon-s-order" style="color: #e6a23c"></i> {{ $t("notice.type") }}:
-      {{ state.getDictLabel("notice_type", dataForm.noticeType) }}
-    </span>
-    <hr size="1" color="#ddd" style="margin: 10px 0 30px 0" />
-  </div>
-  <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
-    <el-table-column prop="receiverName" :label="$t('notice.receiverName')" header-align="center" align="center"></el-table-column>
-    <el-table-column prop="readStatus" :label="$t('notice.readStatus')" header-align="center" align="center">
-      <template v-slot="scope">
-        <el-tag v-if="scope.row.readStatus === 0" type="danger">{{ $t("notice.readStatus0") }}</el-tag>
-        <el-tag v-else type="success">{{ $t("notice.readStatus1") }}</el-tag>
-      </template>
-    </el-table-column>
-    <el-table-column prop="readDate" :label="$t('notice.readDate')" header-align="center" align="center"></el-table-column>
-  </el-table>
-  <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
-  <el-divider></el-divider>
-  <div style="text-align: center">
-    <el-button type="danger" @click="state.closeCurrentTab()">{{ $t("notice.close") }}</el-button>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import useView from "@/hooks/useView";
-import { onMounted, reactive, toRefs } from "vue";
-import baseService from "@/service/baseService";
-import { useRoute } from "vue-router";
-const route = useRoute();
-
-const dataForm = reactive({
-  id: "",
-  noticeType: 0,
-  senderDate: "",
-  senderName: "",
-  content: "",
-  title: ""
-});
-
-const view = reactive({
-  getDataListURL: "/sys/notice/user/page",
-  createdIsNeed: false,
-  activatedIsNeed: false,
-  getDataListIsPage: true
-});
-
-const state = reactive({ ...useView(view), ...toRefs(view) });
-
-onMounted(() => {
-  dataForm.id = route.query.id as string;
-  state.dataList = [];
-  dataForm.content = "";
-  dataForm.senderDate = "";
-  dataForm.senderName = "";
-  dataForm.title = "";
-  getInfo();
-  state.query();
-});
-
-// 获取信息
-const getInfo = () => {
-  baseService.get(`/sys/notice/${dataForm.id}`).then((res) => {
-    Object.assign(dataForm, res.data);
-  });
-};
-</script>

+ 0 - 85
src/views/notice/notice.vue

@@ -1,85 +0,0 @@
-<template>
-  <div class="mod-demo__sysnotice">
-    <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
-      <el-form-item>
-        <my-select v-model="state.dataForm.noticeType" dict-type="notice_type" :placeholder="$t('notice.type')"></my-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" @click="addOrUpdateHandle()">{{ $t("add") }}</el-button>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="danger" @click="state.deleteHandle()">{{ $t("deleteBatch") }}</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
-      <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
-      <el-table-column prop="title" :label="$t('notice.title')" header-align="center" align="center"></el-table-column>
-      <el-table-column prop="noticeType" :label="$t('notice.type')" header-align="center" align="center" width="150">
-        <template v-slot="scope">
-          {{ state.getDictLabel("notice_type", scope.row.noticeType) }}
-        </template>
-      </el-table-column>
-      <el-table-column prop="senderName" :label="$t('notice.senderName')" header-align="center" align="center" width="150"></el-table-column>
-      <el-table-column prop="senderDate" :label="$t('notice.senderDate')" header-align="center" align="center" width="170"></el-table-column>
-      <el-table-column prop="status" :label="$t('notice.status')" header-align="center" align="center" width="130">
-        <template v-slot="scope">
-          <el-tag v-if="scope.row.status === 0" type="danger">{{ $t("notice.status0") }}</el-tag>
-          <el-tag v-else type="success">{{ $t("notice.status1") }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
-        <template v-slot="scope">
-          <el-button v-if="scope.row.status === 0" type="primary" link @click="addOrUpdateHandle(scope.row.id)">{{ $t("update") }}</el-button>
-          <el-button v-if="scope.row.status === 1" type="primary" link @click="viewHandle(scope.row)">{{ $t("notice.view") }}</el-button>
-          <el-button type="primary" link @click="state.deleteHandle(scope.row.id)">{{ $t("delete") }}</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
-    <!-- 弹窗, 新增 / 修改 -->
-    <add-or-update ref="addOrUpdateRef" @refreshDataList="state.getDataList"></add-or-update>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import useView from "@/hooks/useView";
-import { reactive, ref, toRefs } from "vue";
-import AddOrUpdate from "./notice-add-or-update.vue";
-import { IObject } from "@/types/interface";
-import { registerDynamicToRouterAndNext } from "@/router";
-import { useI18n } from "vue-i18n";
-const { t } = useI18n();
-
-const view = reactive({
-  getDataListURL: "/sys/notice/page",
-  getDataListIsPage: true,
-  deleteURL: "/sys/notice",
-  deleteIsBatch: true,
-  dataForm: {
-    noticeType: ""
-  }
-});
-
-const state = reactive({ ...useView(view), ...toRefs(view) });
-
-const viewHandle = (row: IObject) => {
-  // 路由参数
-  const routeParams = {
-    path: "/notice/notice-view",
-    query: {
-      id: row.id,
-      _mt: t("notice.view1")
-    }
-  };
-  // 动态路由
-  registerDynamicToRouterAndNext(routeParams);
-};
-
-const addOrUpdateRef = ref();
-const addOrUpdateHandle = (id?: number) => {
-  addOrUpdateRef.value.init(id);
-};
-</script>

+ 2 - 2
src/views/oss/oss-config.vue

@@ -124,7 +124,7 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive, ref, watch } from "vue";
+import { reactive, ref } from "vue";
 import baseService from "@/service/baseService";
 import { useI18n } from "vue-i18n";
 import { ElMessage } from "element-plus";
@@ -214,7 +214,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.post("/sys/oss", dataForm).then((res) => {
+    baseService.post("/sys/oss", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 36 - 10
src/views/sys/dept-add-or-update.vue

@@ -1,13 +1,13 @@
 <template>
-  <el-dialog v-model="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
+  <el-dialog v-model="visible" :title="!dataForm.id ? t('add') : t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
     <el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" label-width="120px">
-      <el-form-item prop="name" :label="$t('dept.name')">
-        <el-input v-model="dataForm.name" :placeholder="$t('dept.name')"></el-input>
+      <el-form-item prop="name" :label="t('dept.name')">
+        <el-input v-model="dataForm.name" :placeholder="t('dept.name')"></el-input>
       </el-form-item>
-      <el-form-item prop="parentName" :label="$t('dept.parentName')" class="dept-list">
+      <el-form-item prop="parentName" :label="t('dept.parentName')" class="dept-list">
         <el-popover :width="400" ref="deptListPopover" placement="bottom-start" trigger="click" popper-class="popover-pop">
           <template v-slot:reference>
-            <el-input v-model="dataForm.parentName" :readonly="true" :placeholder="$t('dept.parentName')">
+            <el-input v-model="dataForm.parentName" :readonly="true" :placeholder="t('dept.parentName')">
               <template v-slot:suffix>
                 <el-icon v-if="user.superAdmin === 1 && dataForm.pid !== '0'" @click.stop="deptListTreeSetDefaultHandle()" class="el-input__icon"><circle-close /></el-icon>
               </template> </el-input
@@ -15,31 +15,43 @@
           <div class="popover-pop-body"><el-tree :data="deptList" :props="{ label: 'name', children: 'children' }" node-key="id" ref="deptListTree" :highlight-current="true" :expand-on-click-node="false" accordion @current-change="deptListTreeCurrentChangeHandle"> </el-tree></div>
         </el-popover>
       </el-form-item>
-      <el-form-item prop="sort" :label="$t('dept.sort')">
-        <el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('dept.sort')"></el-input-number>
+      <el-form-item prop="leaderName" :label="t('dept.leaderName')">
+        <el-input v-model="dataForm.leaderName" class="input-with-select" clearable @clear="dataForm.leaderId = ''">
+          <template v-slot:append>
+            <el-button icon="search" @click="selectUserInfo()"></el-button>
+          </template>
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="sort" :label="t('dept.sort')">
+        <el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="t('dept.sort')"></el-input-number>
       </el-form-item>
     </el-form>
     <template v-slot:footer>
-      <el-button @click="visible = false">{{ $t("cancel") }}</el-button>
-      <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t("confirm") }}</el-button>
+      <el-button @click="visible = false">{{ t("cancel") }}</el-button>
+      <el-button type="primary" @click="dataFormSubmitHandle()">{{ t("confirm") }}</el-button>
     </template>
   </el-dialog>
+
+  <select-user v-if="selectUserVisible" ref="selectUserRef"></select-user>
 </template>
 
 <script lang="ts" setup>
-import { computed, reactive, ref } from "vue";
+import { computed, nextTick, reactive, ref } from "vue";
 import baseService from "@/service/baseService";
 import { IObject } from "@/types/interface";
 import { useAppStore } from "@/store";
 import { useI18n } from "vue-i18n";
 import { ElMessage } from "element-plus";
+import SelectUser from "@/components/my-process-running/src/select-user.vue";
 
 const store = useAppStore();
 const { t } = useI18n();
 
 const emit = defineEmits(["refreshDataList"]);
 const visible = ref(false);
+const selectUserVisible = ref(false);
 const dataFormRef = ref();
+const selectUserRef = ref();
 const deptList = ref([]);
 const deptListPopover = ref();
 const deptListTree = ref();
@@ -48,6 +60,8 @@ const dataForm = reactive({
   id: "",
   name: "",
   pid: "",
+  leaderId: "",
+  leaderName: "",
   parentName: "",
   sort: 0
 });
@@ -87,6 +101,18 @@ const getDeptList = () => {
   });
 };
 
+const selectUserInfo = () => {
+  selectUserVisible.value = true;
+  nextTick(() => {
+    selectUserRef.value.init(setUserInfo);
+  });
+};
+
+const setUserInfo = (userInfo: IObject) => {
+  dataForm.leaderId = userInfo.id;
+  dataForm.leaderName = userInfo.realName;
+};
+
 // 获取信息
 const getInfo = (id: number) => {
   baseService.get(`/sys/dept/${id}`).then((res) => {

+ 1 - 1
src/views/sys/dict-data-add-or-update.vue

@@ -74,7 +74,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/dict/data", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/dict/data", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/dict-type-add-or-update.vue

@@ -73,7 +73,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/dict/type", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/dict/type", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/menu-add-or-update.vue

@@ -178,7 +178,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/menu", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/menu", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/online.vue

@@ -52,7 +52,7 @@ const logoutHandle = (id: string) => {
     type: "warning"
   })
     .then(() => {
-      baseService.post("/sys/online/logout?id=" + id).then((res) => {
+      baseService.post("/sys/online/logout?id=" + id).then(() => {
         ElMessage.success({
           message: t("prompt.success"),
           duration: 500,

+ 1 - 1
src/views/sys/params-add-or-update.vue

@@ -68,7 +68,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/params", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/params", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/post-add-or-update.vue

@@ -74,7 +74,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/post", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/post", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 106 - 0
src/views/sys/region-add-or-update.vue

@@ -0,0 +1,106 @@
+<template>
+  <el-dialog v-model="visible" :title="insert ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
+    <el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" label-width="120px">
+      <el-form-item prop="parentName" label="上级区域">
+        <my-region-tree ref="regionListTree" v-model="dataForm.pid" placeholder="选择区域" v-model:parent-name="dataForm.parentName"></my-region-tree>
+      </el-form-item>
+      <el-form-item prop="name" :label="$t('region.name')">
+        <el-input v-model="dataForm.name" :placeholder="$t('region.name')"></el-input>
+      </el-form-item>
+      <el-form-item prop="id" :label="$t('region.id')">
+        <el-input v-model="dataForm.id" :disabled="!insert" :placeholder="$t('region.id')"></el-input>
+      </el-form-item>
+      <el-form-item prop="sort" :label="$t('region.sort')">
+        <el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('region.sort')"></el-input-number>
+      </el-form-item>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="visible = false">{{ $t("cancel") }}</el-button>
+      <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t("confirm") }}</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script lang="ts" setup>
+import { reactive, ref } from "vue";
+import baseService from "@/service/baseService";
+import { useI18n } from "vue-i18n";
+import { ElMessage } from "element-plus";
+const { t } = useI18n();
+const emit = defineEmits(["refreshDataList"]);
+
+const visible = ref(false);
+const insert = ref(true);
+const dataFormRef = ref();
+
+const dataForm = reactive({
+  id: "",
+  name: "",
+  pid: "0",
+  parentName: "",
+  sort: 0
+});
+
+const rules = ref({
+  id: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  name: [{ required: true, message: t("validate.required"), trigger: "blur" }],
+  sort: [{ required: true, message: t("validate.required"), trigger: "blur" }]
+});
+
+const init = (id?: string) => {
+  insert.value = true;
+  visible.value = true;
+  dataForm.pid = "0";
+
+  if (id) {
+    insert.value = false;
+    getInfo(id);
+  } else {
+    // 重置表单数据
+    if (dataFormRef.value) {
+      dataFormRef.value.resetFields();
+    }
+  }
+};
+
+// 获取信息
+const getInfo = (id: string) => {
+  baseService.get(`/sys/region/${id}`).then((res) => {
+    Object.assign(dataForm, res.data);
+  });
+};
+
+// 表单提交
+const dataFormSubmitHandle = () => {
+  dataFormRef.value.validate((valid: boolean) => {
+    if (!valid) {
+      return false;
+    }
+    (insert.value ? baseService.post : baseService.put)("/sys/region", dataForm).then(() => {
+      ElMessage.success({
+        message: t("prompt.success"),
+        duration: 500,
+        onClose: () => {
+          visible.value = false;
+          emit("refreshDataList", dataForm);
+        }
+      });
+    });
+  });
+};
+
+defineExpose({
+  init
+});
+</script>
+
+<style lang="less">
+.mod-sys__region {
+  .region-list {
+    .el-input__inner,
+    .el-input__suffix {
+      cursor: pointer;
+    }
+  }
+}
+</style>

+ 92 - 0
src/views/sys/region.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="mod-sys__region">
+    <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
+      <el-form-item>
+        <el-button v-if="state.hasPermission('sys:region:save')" type="primary" @click="addOrUpdateHandle()">{{ $t("add") }}</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table ref="elTableRef" v-loading="state.dataListLoading" :data="state.dataList" row-key="id" border lazy :load="load" style="width: 100%" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+      <el-table-column prop="name" :label="$t('region.name')" header-align="center" min-width="180">
+        <template v-slot="scope">
+          {{ scope.row.name }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="id" :label="$t('region.id')" header-align="center" min-width="180">
+        <template v-slot="scope">
+          {{ scope.row.id }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="treeLevel" :label="$t('region.type')" header-align="center" min-width="150">
+        <template v-slot="scope">
+          <span v-if="scope.row.treeLevel === 1">{{ $t("region.province") }}</span>
+          <span v-else-if="scope.row.treeLevel === 2">{{ $t("region.city") }}</span>
+          <span v-else>{{ $t("region.county") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="sort" :label="$t('region.sort')" header-align="center" align="center" min-width="150"></el-table-column>
+      <el-table-column prop="updateDate" :label="$t('region.updateDate')" header-align="center" align="center" min-width="150"></el-table-column>
+      <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
+        <template v-slot="scope">
+          <el-button v-if="state.hasPermission('sys:region:update')" type="primary" link @click="addOrUpdateHandle(scope.row.id)">{{ $t("update") }}</el-button>
+          <el-button v-if="state.hasPermission('sys:region:delete')" type="primary" link @click="deleteRow(scope.row)">{{ $t("delete") }}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 弹窗, 新增 / 修改 -->
+    <add-or-update ref="addOrUpdateRef" @refreshDataList="refreshData"></add-or-update>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import useView from "@/hooks/useView";
+import { reactive, ref, toRefs } from "vue";
+import AddOrUpdate from "./region-add-or-update.vue";
+import baseService from "@/service/baseService";
+import { IObject, IFunction } from "@/types/interface";
+
+const elTableRef = ref();
+
+const view = reactive({
+  getDataListURL: "/sys/region/list",
+  deleteURL: "/sys/region",
+  nodeMaps: new Map()
+});
+
+const state = reactive({ ...useView(view), ...toRefs(view) });
+
+const load = (tree: IObject, treeNode: IObject, resolve: IFunction) => {
+  state.nodeMaps.set(tree.id, { tree, treeNode, resolve });
+  baseService.get(`/sys/region/list?pid=${tree.id}`).then((res) => {
+    resolve(res.data);
+  });
+};
+
+const deleteRow = (row: IObject) => {
+  const { id, pid } = row;
+  state.deleteHandle(id).then(() => {
+    elTableRef.value.store.states.lazyTreeNodeMap["pid"] = [];
+
+    const { tree, treeNode, resolve } = state.nodeMaps.get(pid) || {};
+    if (tree) {
+      load(tree, treeNode, resolve);
+    } else {
+      state.getDataList();
+    }
+  });
+};
+
+const refreshData = (row: IObject) => {
+  const { pid } = row;
+  const { tree, treeNode, resolve } = state.nodeMaps.get(pid) || {};
+  if (tree) {
+    load(tree, treeNode, resolve);
+  } else {
+    state.getDataList();
+  }
+};
+
+const addOrUpdateRef = ref();
+const addOrUpdateHandle = (id?: string) => {
+  addOrUpdateRef.value.init(id);
+};
+</script>

+ 1 - 1
src/views/sys/role-add-or-update.vue

@@ -113,7 +113,7 @@ const dataFormSubmitHandle = () => {
     }
     dataForm.menuIdList = [...menuListTree.value.getHalfCheckedKeys(), ...menuListTree.value.getCheckedKeys()];
     dataForm.deptIdList = deptListTree.value.getCheckedKeys();
-    (!dataForm.id ? baseService.post : baseService.put)("/sys/role", dataForm).then((res) => {
+    (!dataForm.id ? baseService.post : baseService.put)("/sys/role", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/user-add-or-update.vue

@@ -164,7 +164,7 @@ const dataFormSubmitHandle = () => {
     (!dataForm.id ? baseService.post : baseService.put)("/sys/user", {
       ...dataForm,
       roleIdList: [...dataForm.roleIdList]
-    }).then((res) => {
+    }).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 1 - 1
src/views/sys/user-update-password.vue

@@ -61,7 +61,7 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
-    baseService.put("/sys/user/password", dataForm).then((res) => {
+    baseService.put("/sys/user/password", dataForm).then(() => {
       ElMessage.success({
         message: t("prompt.success"),
         duration: 500,

+ 0 - 68
src/views/ureport/ureport.vue

@@ -1,68 +0,0 @@
-<template>
-  <div class="mod-ureport__model">
-    <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
-      <el-form-item>
-        <el-input v-model="state.dataForm.fileName" :placeholder="$t('fileName')" clearable></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="danger" @click="state.deleteHandle()">{{ $t("deleteBatch") }}</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" @sort-change="state.dataListSortChangeHandle" style="width: 100%">
-      <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
-      <el-table-column prop="fileName" :label="$t('fileName')" header-align="center" align="center"></el-table-column>
-      <el-table-column prop="createDate" :label="$t('createDate')" header-align="center" align="center"></el-table-column>
-      <el-table-column prop="updateDate" :label="$t('updateDate')" header-align="center" align="center"></el-table-column>
-      <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="180">
-        <template v-slot="scope">
-          <el-button type="primary" link @click="onDesigner(scope.row)">{{ $t("design") }}</el-button>
-          <el-button type="primary" link @click="onPreview(scope.row)">{{ $t("preview") }}</el-button>
-          <el-button type="primary" link @click="state.deleteHandle(scope.row.id)">{{ $t("delete") }}</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import useView from "@/hooks/useView";
-import { reactive, toRefs } from "vue";
-import app from "@/constants/app";
-import { IObject } from "@/types/interface";
-import { registerDynamicToRouterAndNext } from "@/router";
-
-const view = reactive({
-  getDataListURL: "/sys/ureport/page",
-  getDataListIsPage: true,
-  deleteURL: "/sys/ureport",
-  deleteIsBatch: true,
-  dataForm: {
-    fileName: ""
-  }
-});
-
-const state = reactive({ ...useView(view), ...toRefs(view) });
-
-const onPreview = (row: IObject) => {
-  registerDynamicToRouterAndNext({
-    path: "/iframe",
-    query: {
-      url: `${app.api}/ureport/preview?_u=wjp-${row.fileName}`,
-      _mt: "preview-" + row.fileName
-    }
-  });
-};
-const onDesigner = (row: IObject) => {
-  registerDynamicToRouterAndNext({
-    path: "/iframe",
-    query: {
-      url: `${app.api}/ureport/designer?_u=wjp-${row.fileName}`,
-      _mt: "designer-" + row.fileName
-    }
-  });
-};
-</script>

+ 1 - 1
vite.config.ts

@@ -63,7 +63,7 @@ export default (config: UserConfig): UserConfigExport => {
       }
     },
     server: {
-      open: true, // 自动启动浏览器
+      open: false, // 自动启动浏览器
       host: "0.0.0.0", // localhost
       port: 8001, // 端口号
       https: false,

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio