Browse Source

update

main
wangshaoping 11 months ago
parent
commit
cab681bc9e
  1. 2
      build.gradle
  2. 204
      erm.frontend/package.json
  3. 2
      erm.frontend/webpack.config.common.cjs
  4. 1
      erm.frontend/webpack.config.mf.cjs
  5. 2
      erm.frontend/webpack.env.build.cjs
  6. 4
      gradle.properties
  7. 204
      io.sc.engine.mv.frontend/package.json
  8. 44
      io.sc.engine.mv.frontend/src/components/index.ts
  9. 4
      io.sc.engine.mv.frontend/util-components-generator.cjs
  10. 2
      io.sc.engine.mv.frontend/webpack.config.common.cjs
  11. 1
      io.sc.engine.mv.frontend/webpack.config.mf.cjs
  12. 2
      io.sc.engine.mv.frontend/webpack.env.build.cjs
  13. 2
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/enums/ProcessorType.java
  14. 204
      io.sc.engine.rule.frontend/package.json
  15. 28
      io.sc.engine.rule.frontend/src/components/index.ts
  16. 39
      io.sc.engine.rule.frontend/src/i18n/messages.json
  17. 40
      io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json
  18. 40
      io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json
  19. 26
      io.sc.engine.rule.frontend/src/views/resources/Resources.vue
  20. 122
      io.sc.engine.rule.frontend/src/views/resources/designer/DesignerDialog.vue
  21. 18
      io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue
  22. 106
      io.sc.engine.rule.frontend/src/views/resources/designer/Option.vue
  23. 33
      io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue
  24. 495
      io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
  25. 171
      io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue
  26. 157
      io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue
  27. 10
      io.sc.engine.rule.frontend/src/views/resources/designer/Validator.vue
  28. 4
      io.sc.engine.rule.frontend/util-components-generator.cjs
  29. 2
      io.sc.engine.rule.frontend/webpack.config.common.cjs
  30. 1
      io.sc.engine.rule.frontend/webpack.config.mf.cjs
  31. 2
      io.sc.engine.rule.frontend/webpack.env.build.cjs
  32. 20
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java
  33. 13
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterProcessorWebController.java
  34. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterValidatorWebController.java
  35. 2
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterWebController.java
  36. 1
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ModelEntity.java
  37. 6
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterInOptionItemRepository.java
  38. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterProcessorRepository.java
  39. 10
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java
  40. 10
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterProcessorService.java
  41. 8
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java
  42. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterProcessorServiceImpl.java
  43. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/bean/ModelTestCaseParameterBuilder.java
  44. 14
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/controller/TestCaseParameterWebController.java
  45. 21
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/controller/TestCaseWebController.java
  46. 10
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/entity/ResourceTestCaseEntity.java
  47. 15
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/entity/TestCaseEntity.java
  48. 1
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/repository/TestCaseParameterRepository.java
  49. 6
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/repository/TestCaseRepository.java
  50. 12
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/TestCaseService.java
  51. 11
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java
  52. 6
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/wrapper/TestCaseParameterWrapper.java
  53. 11
      io.sc.engine.rule.server/src/main/resources/liquibase/RE_1.0.0_20220515__Rule Engine Database Schema DDL.xml
  54. 4
      io.sc.platform.core.frontend/template-project/package.json
  55. 2
      io.sc.platform.core.frontend/template-project/webpack.config.common.cjs
  56. 2
      io.sc.platform.core.frontend/webpack.config.common.cjs
  57. 2
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties
  58. 2
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties
  59. 2
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties
  60. 204
      io.sc.platform.developer.frontend/package.json
  61. 104
      io.sc.platform.developer.frontend/src/components/index.ts
  62. 4
      io.sc.platform.developer.frontend/util-components-generator.cjs
  63. 2
      io.sc.platform.developer.frontend/webpack.config.common.cjs
  64. 1
      io.sc.platform.developer.frontend/webpack.config.mf.cjs
  65. 2
      io.sc.platform.developer.frontend/webpack.env.build.cjs
  66. 2
      io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt
  67. 4
      io.sc.platform.gradle/templates/pgp/setup/gradle.properties
  68. 204
      io.sc.platform.lcdp.frontend/package.json
  69. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/404.html
  70. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/browserconfig.xml
  71. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/cmmn-draw.js
  72. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/cmmn-icons.js
  73. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.css
  74. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.html
  75. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.js
  76. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.css
  77. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.html
  78. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.js
  79. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/dmn-draw.js
  80. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/dmn-icons.js
  81. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/.gitignore
  82. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/Gruntfile.js
  83. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/Polyline.js
  84. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/bpmn-draw.js
  85. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/bpmn-icons.js
  86. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.css
  87. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.html
  88. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.js
  89. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/jquery.qtip.min.css
  90. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/jquery.qtip.min.js
  91. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/package.json
  92. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/display/raphael.min.js
  93. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/flowable-header-custom.js
  94. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/flowable-toolbar-custom-actions.js
  95. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-assignment-controller.js
  96. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js
  97. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js
  98. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js
  99. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-custom-controllers.js
  100. 0
      io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js

2
build.gradle

@ -636,7 +636,7 @@ subprojects {
frontendNpmInstall.dependsOn(frontendUpdatePackageJson) frontendNpmInstall.dependsOn(frontendUpdatePackageJson)
frontendNpmSync.dependsOn(frontendNpmInstall) frontendNpmSync.dependsOn(frontendNpmInstall)
frontendNpmBuild.dependsOn(frontendNpmSync) frontendNpmBuild.dependsOn(frontendNpmSync)
frontendNpmProd.dependsOn(frontendNpmInstall) frontendNpmProd.dependsOn(frontendNpmSync)
// //
// : -D // : -D

204
erm.frontend/package.json

@ -1,105 +1,103 @@
{ {
"name": "erm.frontend", "name": "erm.frontend",
"version": "8.1.28", "version": "8.1.29",
"description": "", "description": "",
"private": false, "private": false,
"keywords": [ "keywords": [],
"author": "",
], "license": "ISC",
"author": "", "scripts": {
"license": "ISC", "dev": "nodemon",
"scripts": { "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
"dev": "nodemon", "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
"serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
"build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", "sync": "platform sync",
"prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml"
"sync": "platform sync", },
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" "engines": {
}, "node": ">=18",
"engines": { "pnpm": ">=7"
"node": ">=18", },
"pnpm": ">=7" "publishConfig": {
}, "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
"publishConfig": { "access": "public"
"registry": "http://nexus.sc.io:8000/repository/npm-releases/", },
"access": "public" "devDependencies": {
}, "@babel/core": "7.23.7",
"devDependencies": { "@babel/preset-env": "7.23.7",
"@babel/core": "7.23.7", "@babel/preset-typescript": "7.23.3",
"@babel/preset-env": "7.23.7", "@babel/plugin-transform-class-properties": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/plugin-transform-object-rest-spread": "7.23.4",
"@babel/plugin-transform-class-properties": "7.23.3", "@quasar/app-webpack": "3.12.1",
"@babel/plugin-transform-object-rest-spread": "7.23.4", "@quasar/cli": "2.3.0",
"@quasar/app-webpack": "3.12.1", "@types/mockjs": "1.0.10",
"@quasar/cli": "2.3.0", "@types/node": "20.10.6",
"@types/mockjs": "1.0.10", "@typescript-eslint/eslint-plugin": "6.17.0",
"@types/node": "20.10.6", "@typescript-eslint/parser": "6.17.0",
"@typescript-eslint/eslint-plugin": "6.17.0", "@vue/compiler-sfc": "3.4.3",
"@typescript-eslint/parser": "6.17.0", "@webpack-cli/serve": "2.0.5",
"@vue/compiler-sfc": "3.4.3", "autoprefixer": "10.4.16",
"@webpack-cli/serve": "2.0.5", "babel-loader": "9.1.3",
"autoprefixer": "10.4.16", "clean-webpack-plugin": "4.0.0",
"babel-loader": "9.1.3", "copy-webpack-plugin": "11.0.0",
"clean-webpack-plugin": "4.0.0", "cross-env": "7.0.3",
"copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1",
"cross-env": "7.0.3", "eslint": "8.56.0",
"css-loader": "6.8.1", "eslint-config-prettier": "9.1.0",
"eslint": "8.56.0", "eslint-plugin-prettier": "5.1.2",
"eslint-config-prettier": "9.1.0", "eslint-plugin-vue": "9.19.2",
"eslint-plugin-prettier": "5.1.2", "eslint-webpack-plugin": "4.0.1",
"eslint-plugin-vue": "9.19.2", "html-webpack-plugin": "5.6.0",
"eslint-webpack-plugin": "4.0.1", "json5": "2.2.3",
"html-webpack-plugin": "5.6.0", "mini-css-extract-plugin": "2.7.6",
"json5": "2.2.3", "nodemon": "3.0.2",
"mini-css-extract-plugin": "2.7.6", "postcss": "8.4.32",
"nodemon": "3.0.2", "postcss-import": "16.0.0",
"postcss": "8.4.32", "postcss-loader": "7.3.4",
"postcss-import": "16.0.0", "postcss-preset-env": "9.3.0",
"postcss-loader": "7.3.4", "prettier": "3.1.1",
"postcss-preset-env": "9.3.0", "sass": "1.69.7",
"prettier": "3.1.1", "sass-loader": "13.3.3",
"sass": "1.69.7", "typescript": "5.3.3",
"sass-loader": "13.3.3", "vue-loader": "17.4.2",
"typescript": "5.3.3", "webpack": "5.89.0",
"vue-loader": "17.4.2", "webpack-bundle-analyzer": "4.10.1",
"webpack": "5.89.0", "webpack-cli": "5.1.4",
"webpack-bundle-analyzer": "4.10.1", "webpack-dev-server": "4.15.1",
"webpack-cli": "5.1.4", "webpack-merge": "5.10.0",
"webpack-dev-server": "4.15.1", "@vue/babel-plugin-jsx": "1.1.5"
"webpack-merge": "5.10.0", },
"@vue/babel-plugin-jsx": "1.1.5" "dependencies": {
}, "@quasar/extras": "1.16.9",
"dependencies": { "@vueuse/core": "10.7.1",
"@quasar/extras": "1.16.9", "axios": "1.6.3",
"@vueuse/core": "10.7.1", "dayjs": "1.11.10",
"axios": "1.6.3", "echarts": "5.4.3",
"dayjs": "1.11.10", "exceljs": "4.4.0",
"echarts": "5.4.3", "file-saver": "2.0.5",
"exceljs": "4.4.0", "luckyexcel": "1.0.1",
"file-saver": "2.0.5", "mockjs": "1.1.0",
"luckyexcel": "1.0.1", "pinia": "2.1.7",
"mockjs": "1.1.0", "platform-core": "8.1.152",
"pinia": "2.1.7", "quasar": "2.14.5",
"platform-core": "8.1.149", "tailwindcss": "3.4.0",
"quasar": "2.14.2", "vue": "3.4.3",
"tailwindcss": "3.4.0", "vue-dompurify-html": "5.0.1",
"vue": "3.4.3", "vue-i18n": "9.8.0",
"vue-dompurify-html": "5.0.1", "vue-router": "4.2.5",
"vue-i18n": "9.8.0", "@codemirror/autocomplete": "6.11.1",
"vue-router": "4.2.5", "@codemirror/commands": "6.3.3",
"@codemirror/autocomplete": "6.11.1", "@codemirror/lang-html": "6.4.7",
"@codemirror/commands": "6.3.3", "@codemirror/lang-java": "6.0.1",
"@codemirror/lang-html": "6.4.7", "@codemirror/lang-javascript": "6.2.1",
"@codemirror/lang-java": "6.0.1", "@codemirror/lang-json": "6.0.1",
"@codemirror/lang-javascript": "6.2.1", "@codemirror/lang-sql": "6.5.4",
"@codemirror/lang-json": "6.0.1", "@codemirror/lang-xml": "6.0.2",
"@codemirror/lang-sql": "6.5.4", "@codemirror/language": "6.10.0",
"@codemirror/lang-xml": "6.0.2", "@codemirror/search": "6.5.5",
"@codemirror/language": "6.10.0", "@codemirror/state": "6.4.0",
"@codemirror/search": "6.5.5", "@codemirror/view": "6.23.0",
"@codemirror/state": "6.4.0", "codemirror": "6.0.1",
"@codemirror/view": "6.23.0", "vue-codemirror6": "1.2.0"
"codemirror": "6.0.1", }
"vue-codemirror6": "1.2.0"
}
} }

2
erm.frontend/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

1
erm.frontend/webpack.config.mf.cjs

@ -56,7 +56,6 @@ module.exports = {
'platform-core': { requiredVersion: deps['platform-core'], singleton: true }, 'platform-core': { requiredVersion: deps['platform-core'], singleton: true },
'quasar': { requiredVersion: deps['quasar'], singleton: true }, 'quasar': { requiredVersion: deps['quasar'], singleton: true },
'vue': { requiredVersion: deps['vue'], singleton: true }, 'vue': { requiredVersion: deps['vue'], singleton: true },
'vue-codemirror6': { requiredVersion: deps['vue-codemirror6'], singleton: true },
'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true },
'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true },
'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true },

2
erm.frontend/webpack.env.build.cjs

@ -38,7 +38,7 @@ module.exports = merge(common, mf, {
}, },
'codemirror':{ 'codemirror':{
name: 'codemirror', name: 'codemirror',
test: /[\\/]node_modules[\\/](codemirror|vue-codemirror6|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/, test: /[\\/]node_modules[\\/](codemirror|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/,
priority: 20, priority: 20,
chunks: 'all', chunks: 'all',
enforce: true enforce: true

4
gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform # platform
########################################################### ###########################################################
platform_group=io.sc platform_group=io.sc
platform_version=8.1.28 platform_version=8.1.29
platform_plugin_version=8.1.13 platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.149 platform_core_frontend_version=8.1.152
########################################################### ###########################################################
# dependencies version # dependencies version

204
io.sc.engine.mv.frontend/package.json

@ -1,105 +1,103 @@
{ {
"name": "io.sc.engine.mv.frontend", "name": "io.sc.engine.mv.frontend",
"version": "8.1.28", "version": "8.1.29",
"description": "", "description": "",
"private": false, "private": false,
"keywords": [ "keywords": [],
"author": "",
], "license": "ISC",
"author": "", "scripts": {
"license": "ISC", "dev": "nodemon",
"scripts": { "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
"dev": "nodemon", "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
"serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
"build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", "sync": "platform sync",
"prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml"
"sync": "platform sync", },
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" "engines": {
}, "node": ">=18",
"engines": { "pnpm": ">=7"
"node": ">=18", },
"pnpm": ">=7" "publishConfig": {
}, "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
"publishConfig": { "access": "public"
"registry": "http://nexus.sc.io:8000/repository/npm-releases/", },
"access": "public" "devDependencies": {
}, "@babel/core": "7.23.7",
"devDependencies": { "@babel/preset-env": "7.23.7",
"@babel/core": "7.23.7", "@babel/preset-typescript": "7.23.3",
"@babel/preset-env": "7.23.7", "@babel/plugin-transform-class-properties": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/plugin-transform-object-rest-spread": "7.23.4",
"@babel/plugin-transform-class-properties": "7.23.3", "@quasar/app-webpack": "3.12.1",
"@babel/plugin-transform-object-rest-spread": "7.23.4", "@quasar/cli": "2.3.0",
"@quasar/app-webpack": "3.12.1", "@types/mockjs": "1.0.10",
"@quasar/cli": "2.3.0", "@types/node": "20.10.6",
"@types/mockjs": "1.0.10", "@typescript-eslint/eslint-plugin": "6.17.0",
"@types/node": "20.10.6", "@typescript-eslint/parser": "6.17.0",
"@typescript-eslint/eslint-plugin": "6.17.0", "@vue/compiler-sfc": "3.4.3",
"@typescript-eslint/parser": "6.17.0", "@webpack-cli/serve": "2.0.5",
"@vue/compiler-sfc": "3.4.3", "autoprefixer": "10.4.16",
"@webpack-cli/serve": "2.0.5", "babel-loader": "9.1.3",
"autoprefixer": "10.4.16", "clean-webpack-plugin": "4.0.0",
"babel-loader": "9.1.3", "copy-webpack-plugin": "11.0.0",
"clean-webpack-plugin": "4.0.0", "cross-env": "7.0.3",
"copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1",
"cross-env": "7.0.3", "eslint": "8.56.0",
"css-loader": "6.8.1", "eslint-config-prettier": "9.1.0",
"eslint": "8.56.0", "eslint-plugin-prettier": "5.1.2",
"eslint-config-prettier": "9.1.0", "eslint-plugin-vue": "9.19.2",
"eslint-plugin-prettier": "5.1.2", "eslint-webpack-plugin": "4.0.1",
"eslint-plugin-vue": "9.19.2", "html-webpack-plugin": "5.6.0",
"eslint-webpack-plugin": "4.0.1", "json5": "2.2.3",
"html-webpack-plugin": "5.6.0", "mini-css-extract-plugin": "2.7.6",
"json5": "2.2.3", "nodemon": "3.0.2",
"mini-css-extract-plugin": "2.7.6", "postcss": "8.4.32",
"nodemon": "3.0.2", "postcss-import": "16.0.0",
"postcss": "8.4.32", "postcss-loader": "7.3.4",
"postcss-import": "16.0.0", "postcss-preset-env": "9.3.0",
"postcss-loader": "7.3.4", "prettier": "3.1.1",
"postcss-preset-env": "9.3.0", "sass": "1.69.7",
"prettier": "3.1.1", "sass-loader": "13.3.3",
"sass": "1.69.7", "typescript": "5.3.3",
"sass-loader": "13.3.3", "vue-loader": "17.4.2",
"typescript": "5.3.3", "webpack": "5.89.0",
"vue-loader": "17.4.2", "webpack-bundle-analyzer": "4.10.1",
"webpack": "5.89.0", "webpack-cli": "5.1.4",
"webpack-bundle-analyzer": "4.10.1", "webpack-dev-server": "4.15.1",
"webpack-cli": "5.1.4", "webpack-merge": "5.10.0",
"webpack-dev-server": "4.15.1", "@vue/babel-plugin-jsx": "1.1.5"
"webpack-merge": "5.10.0", },
"@vue/babel-plugin-jsx": "1.1.5" "dependencies": {
}, "@quasar/extras": "1.16.9",
"dependencies": { "@vueuse/core": "10.7.1",
"@quasar/extras": "1.16.9", "axios": "1.6.3",
"@vueuse/core": "10.7.1", "dayjs": "1.11.10",
"axios": "1.6.3", "echarts": "5.4.3",
"dayjs": "1.11.10", "exceljs": "4.4.0",
"echarts": "5.4.3", "file-saver": "2.0.5",
"exceljs": "4.4.0", "luckyexcel": "1.0.1",
"file-saver": "2.0.5", "mockjs": "1.1.0",
"luckyexcel": "1.0.1", "pinia": "2.1.7",
"mockjs": "1.1.0", "platform-core": "8.1.152",
"pinia": "2.1.7", "quasar": "2.14.5",
"platform-core": "8.1.149", "tailwindcss": "3.4.0",
"quasar": "2.14.2", "vue": "3.4.3",
"tailwindcss": "3.4.0", "vue-dompurify-html": "5.0.1",
"vue": "3.4.3", "vue-i18n": "9.8.0",
"vue-dompurify-html": "5.0.1", "vue-router": "4.2.5",
"vue-i18n": "9.8.0", "@codemirror/autocomplete": "6.11.1",
"vue-router": "4.2.5", "@codemirror/commands": "6.3.3",
"@codemirror/autocomplete": "6.11.1", "@codemirror/lang-html": "6.4.7",
"@codemirror/commands": "6.3.3", "@codemirror/lang-java": "6.0.1",
"@codemirror/lang-html": "6.4.7", "@codemirror/lang-javascript": "6.2.1",
"@codemirror/lang-java": "6.0.1", "@codemirror/lang-json": "6.0.1",
"@codemirror/lang-javascript": "6.2.1", "@codemirror/lang-sql": "6.5.4",
"@codemirror/lang-json": "6.0.1", "@codemirror/lang-xml": "6.0.2",
"@codemirror/lang-sql": "6.5.4", "@codemirror/language": "6.10.0",
"@codemirror/lang-xml": "6.0.2", "@codemirror/search": "6.5.5",
"@codemirror/language": "6.10.0", "@codemirror/state": "6.4.0",
"@codemirror/search": "6.5.5", "@codemirror/view": "6.23.0",
"@codemirror/state": "6.4.0", "codemirror": "6.0.1",
"@codemirror/view": "6.23.0", "vue-codemirror6": "1.2.0"
"codemirror": "6.0.1", }
"vue-codemirror6": "1.2.0"
}
} }

44
io.sc.engine.mv.frontend/src/components/index.ts

@ -2,30 +2,30 @@
* , * ,
*/ */
import result from '@/views/result/Result.vue'; import component_engine_mv_result from '@/views/result/Result.vue';
import sample from '@/views/sample/Sample.vue'; import component_engine_mv_sample from '@/views/sample/Sample.vue';
import cutOffPoint from '@/views/config/cutOffPoint.vue'; import component_engine_mv_config_cutOffPoint from '@/views/config/cutOffPoint.vue';
import threshold from '@/views/config/threshold.vue'; import component_engine_mv_config_threshold from '@/views/config/threshold.vue';
import binomial from '@/views/config/binomial.vue'; import component_engine_mv_config_binomial from '@/views/config/binomial.vue';
import chiSquare from '@/views/config/chiSquare.vue'; import component_engine_mv_config_chiSquare from '@/views/config/chiSquare.vue';
import model from '@/views/config/model.vue'; import component_engine_mv_config_model from '@/views/config/model.vue';
import distribution from '@/views/config/distribution.vue'; import component_engine_mv_config_distribution from '@/views/config/distribution.vue';
import scale from '@/views/config/scale.vue'; import component_engine_mv_config_scale from '@/views/config/scale.vue';
import dataExtractor from '@/views/config/dataExtractor.vue'; import component_engine_mv_config_dataExtractor from '@/views/config/dataExtractor.vue';
import executor from '@/views/config/executor.vue'; import component_engine_mv_config_executor from '@/views/config/executor.vue';
const localComponents = { const localComponents = {
'component.engine.mv.result': result, 'component.engine.mv.result': component_engine_mv_result,
'component.engine.mv.sample': sample, 'component.engine.mv.sample': component_engine_mv_sample,
'component.engine.mv.config.cutOffPoint': cutOffPoint, 'component.engine.mv.config.cutOffPoint': component_engine_mv_config_cutOffPoint,
'component.engine.mv.config.threshold': threshold, 'component.engine.mv.config.threshold': component_engine_mv_config_threshold,
'component.engine.mv.config.binomial': binomial, 'component.engine.mv.config.binomial': component_engine_mv_config_binomial,
'component.engine.mv.config.chiSquare': chiSquare, 'component.engine.mv.config.chiSquare': component_engine_mv_config_chiSquare,
'component.engine.mv.config.model': model, 'component.engine.mv.config.model': component_engine_mv_config_model,
'component.engine.mv.config.distribution': distribution, 'component.engine.mv.config.distribution': component_engine_mv_config_distribution,
'component.engine.mv.config.scale': scale, 'component.engine.mv.config.scale': component_engine_mv_config_scale,
'component.engine.mv.config.dataExtractor': dataExtractor, 'component.engine.mv.config.dataExtractor': component_engine_mv_config_dataExtractor,
'component.engine.mv.config.executor': executor, 'component.engine.mv.config.executor': component_engine_mv_config_executor,
}; };
export default localComponents; export default localComponents;

4
io.sc.engine.mv.frontend/util-components-generator.cjs

@ -13,7 +13,7 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n'; content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n'; content +=' */\n\n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath; const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`; content +=`import ${componentName} from '${componentPath}';\n`;
} }
@ -21,7 +21,7 @@ for(const route of routesJson){
content +='\n'; content +='\n';
content +='const localComponents = { \n'; content +='const localComponents = { \n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`; content +=`'${route.component}': ${componentName},\n`;
} }
content +='}\n\n'; content +='}\n\n';

2
io.sc.engine.mv.frontend/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

1
io.sc.engine.mv.frontend/webpack.config.mf.cjs

@ -56,7 +56,6 @@ module.exports = {
'platform-core': { requiredVersion: deps['platform-core'], singleton: true }, 'platform-core': { requiredVersion: deps['platform-core'], singleton: true },
'quasar': { requiredVersion: deps['quasar'], singleton: true }, 'quasar': { requiredVersion: deps['quasar'], singleton: true },
'vue': { requiredVersion: deps['vue'], singleton: true }, 'vue': { requiredVersion: deps['vue'], singleton: true },
'vue-codemirror6': { requiredVersion: deps['vue-codemirror6'], singleton: true },
'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true },
'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true },
'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true },

2
io.sc.engine.mv.frontend/webpack.env.build.cjs

@ -38,7 +38,7 @@ module.exports = merge(common, mf, {
}, },
'codemirror':{ 'codemirror':{
name: 'codemirror', name: 'codemirror',
test: /[\\/]node_modules[\\/](codemirror|vue-codemirror6|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/, test: /[\\/]node_modules[\\/](codemirror|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/,
priority: 20, priority: 20,
chunks: 'all', chunks: 'all',
enforce: true enforce: true

2
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/enums/ProcessorType.java

@ -2,8 +2,6 @@ package io.sc.engine.rule.core.enums;
/** /**
* 处理器类型 * 处理器类型
* @author wangshaoping
*
*/ */
public enum ProcessorType { public enum ProcessorType {
EMPTY, //空操作 EMPTY, //空操作

204
io.sc.engine.rule.frontend/package.json

@ -1,105 +1,103 @@
{ {
"name": "io.sc.engine.rule.frontend", "name": "io.sc.engine.rule.frontend",
"version": "8.1.28", "version": "8.1.29",
"description": "", "description": "",
"private": false, "private": false,
"keywords": [ "keywords": [],
"author": "",
], "license": "ISC",
"author": "", "scripts": {
"license": "ISC", "dev": "nodemon",
"scripts": { "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
"dev": "nodemon", "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
"serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
"build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", "sync": "platform sync",
"prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml"
"sync": "platform sync", },
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" "engines": {
}, "node": ">=18",
"engines": { "pnpm": ">=7"
"node": ">=18", },
"pnpm": ">=7" "publishConfig": {
}, "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
"publishConfig": { "access": "public"
"registry": "http://nexus.sc.io:8000/repository/npm-releases/", },
"access": "public" "devDependencies": {
}, "@babel/core": "7.23.7",
"devDependencies": { "@babel/preset-env": "7.23.7",
"@babel/core": "7.23.7", "@babel/preset-typescript": "7.23.3",
"@babel/preset-env": "7.23.7", "@babel/plugin-transform-class-properties": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/plugin-transform-object-rest-spread": "7.23.4",
"@babel/plugin-transform-class-properties": "7.23.3", "@quasar/app-webpack": "3.12.1",
"@babel/plugin-transform-object-rest-spread": "7.23.4", "@quasar/cli": "2.3.0",
"@quasar/app-webpack": "3.12.1", "@types/mockjs": "1.0.10",
"@quasar/cli": "2.3.0", "@types/node": "20.10.6",
"@types/mockjs": "1.0.10", "@typescript-eslint/eslint-plugin": "6.17.0",
"@types/node": "20.10.6", "@typescript-eslint/parser": "6.17.0",
"@typescript-eslint/eslint-plugin": "6.17.0", "@vue/compiler-sfc": "3.4.3",
"@typescript-eslint/parser": "6.17.0", "@webpack-cli/serve": "2.0.5",
"@vue/compiler-sfc": "3.4.3", "autoprefixer": "10.4.16",
"@webpack-cli/serve": "2.0.5", "babel-loader": "9.1.3",
"autoprefixer": "10.4.16", "clean-webpack-plugin": "4.0.0",
"babel-loader": "9.1.3", "copy-webpack-plugin": "11.0.0",
"clean-webpack-plugin": "4.0.0", "cross-env": "7.0.3",
"copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1",
"cross-env": "7.0.3", "eslint": "8.56.0",
"css-loader": "6.8.1", "eslint-config-prettier": "9.1.0",
"eslint": "8.56.0", "eslint-plugin-prettier": "5.1.2",
"eslint-config-prettier": "9.1.0", "eslint-plugin-vue": "9.19.2",
"eslint-plugin-prettier": "5.1.2", "eslint-webpack-plugin": "4.0.1",
"eslint-plugin-vue": "9.19.2", "html-webpack-plugin": "5.6.0",
"eslint-webpack-plugin": "4.0.1", "json5": "2.2.3",
"html-webpack-plugin": "5.6.0", "mini-css-extract-plugin": "2.7.6",
"json5": "2.2.3", "nodemon": "3.0.2",
"mini-css-extract-plugin": "2.7.6", "postcss": "8.4.32",
"nodemon": "3.0.2", "postcss-import": "16.0.0",
"postcss": "8.4.32", "postcss-loader": "7.3.4",
"postcss-import": "16.0.0", "postcss-preset-env": "9.3.0",
"postcss-loader": "7.3.4", "prettier": "3.1.1",
"postcss-preset-env": "9.3.0", "sass": "1.69.7",
"prettier": "3.1.1", "sass-loader": "13.3.3",
"sass": "1.69.7", "typescript": "5.3.3",
"sass-loader": "13.3.3", "vue-loader": "17.4.2",
"typescript": "5.3.3", "webpack": "5.89.0",
"vue-loader": "17.4.2", "webpack-bundle-analyzer": "4.10.1",
"webpack": "5.89.0", "webpack-cli": "5.1.4",
"webpack-bundle-analyzer": "4.10.1", "webpack-dev-server": "4.15.1",
"webpack-cli": "5.1.4", "webpack-merge": "5.10.0",
"webpack-dev-server": "4.15.1", "@vue/babel-plugin-jsx": "1.1.5"
"webpack-merge": "5.10.0", },
"@vue/babel-plugin-jsx": "1.1.5" "dependencies": {
}, "@quasar/extras": "1.16.9",
"dependencies": { "@vueuse/core": "10.7.1",
"@quasar/extras": "1.16.9", "axios": "1.6.3",
"@vueuse/core": "10.7.1", "dayjs": "1.11.10",
"axios": "1.6.3", "echarts": "5.4.3",
"dayjs": "1.11.10", "exceljs": "4.4.0",
"echarts": "5.4.3", "file-saver": "2.0.5",
"exceljs": "4.4.0", "luckyexcel": "1.0.1",
"file-saver": "2.0.5", "mockjs": "1.1.0",
"luckyexcel": "1.0.1", "pinia": "2.1.7",
"mockjs": "1.1.0", "platform-core": "8.1.152",
"pinia": "2.1.7", "quasar": "2.14.5",
"platform-core": "8.1.149", "tailwindcss": "3.4.0",
"quasar": "2.14.2", "vue": "3.4.3",
"tailwindcss": "3.4.0", "vue-dompurify-html": "5.0.1",
"vue": "3.4.3", "vue-i18n": "9.8.0",
"vue-dompurify-html": "5.0.1", "vue-router": "4.2.5",
"vue-i18n": "9.8.0", "@codemirror/autocomplete": "6.11.1",
"vue-router": "4.2.5", "@codemirror/commands": "6.3.3",
"@codemirror/autocomplete": "6.11.1", "@codemirror/lang-html": "6.4.7",
"@codemirror/commands": "6.3.3", "@codemirror/lang-java": "6.0.1",
"@codemirror/lang-html": "6.4.7", "@codemirror/lang-javascript": "6.2.1",
"@codemirror/lang-java": "6.0.1", "@codemirror/lang-json": "6.0.1",
"@codemirror/lang-javascript": "6.2.1", "@codemirror/lang-sql": "6.5.4",
"@codemirror/lang-json": "6.0.1", "@codemirror/lang-xml": "6.0.2",
"@codemirror/lang-sql": "6.5.4", "@codemirror/language": "6.10.0",
"@codemirror/lang-xml": "6.0.2", "@codemirror/search": "6.5.5",
"@codemirror/language": "6.10.0", "@codemirror/state": "6.4.0",
"@codemirror/search": "6.5.5", "@codemirror/view": "6.23.0",
"@codemirror/state": "6.4.0", "codemirror": "6.0.1",
"@codemirror/view": "6.23.0", "vue-codemirror6": "1.2.0"
"codemirror": "6.0.1", }
"vue-codemirror6": "1.2.0"
}
} }

28
io.sc.engine.rule.frontend/src/components/index.ts

@ -2,22 +2,22 @@
* , * ,
*/ */
import resources from '@/views/resources/Resources.vue'; import component_engine_rule_resources from '@/views/resources/Resources.vue';
import authorization from '@/views/authorization/Authorization.vue'; import component_engine_rule_authorization from '@/views/authorization/Authorization.vue';
import workflow from '@/views/workflow/Workflow.vue'; import component_engine_rule_workflow from '@/views/workflow/Workflow.vue';
import dictionary from '@/views/dictionary/Dictionary.vue'; import component_engine_rule_dictionary from '@/views/dictionary/Dictionary.vue';
import lib from '@/views/lib/Lib.vue'; import component_engine_rule_lib from '@/views/lib/Lib.vue';
import testcase from '@/views/testcase/Testcase.vue'; import component_engine_rule_testcase from '@/views/testcase/Testcase.vue';
import migration from '@/views/migration/Migration.vue'; import component_engine_rule_migration from '@/views/migration/Migration.vue';
const localComponents = { const localComponents = {
'component.engine.rule.resources': resources, 'component.engine.rule.resources': component_engine_rule_resources,
'component.engine.rule.authorization': authorization, 'component.engine.rule.authorization': component_engine_rule_authorization,
'component.engine.rule.workflow': workflow, 'component.engine.rule.workflow': component_engine_rule_workflow,
'component.engine.rule.dictionary': dictionary, 'component.engine.rule.dictionary': component_engine_rule_dictionary,
'component.engine.rule.lib': lib, 'component.engine.rule.lib': component_engine_rule_lib,
'component.engine.rule.testcase': testcase, 'component.engine.rule.testcase': component_engine_rule_testcase,
'component.engine.rule.migration': migration, 'component.engine.rule.migration': component_engine_rule_migration,
}; };
export default localComponents; export default localComponents;

39
io.sc.engine.rule.frontend/src/i18n/messages.json

@ -67,4 +67,43 @@
"re.resources.designer.validator.grid.title": "Validator", "re.resources.designer.validator.grid.title": "Validator",
"re.resources.designer.validator.grid.entity.content": "Content", "re.resources.designer.validator.grid.entity.content": "Content",
"re.resources.designer.validator.grid.entity.tip": "Error Tip", "re.resources.designer.validator.grid.entity.tip": "Error Tip",
"re.resources.designer.option.grid.title": "Options",
"re.resources.designer.option.grid.entity.inputValue": "Input Value",
"re.resources.designer.option.grid.entity.value": "Value",
"re.resources.designer.option.grid.entity.title": "Title",
"re.resources.designer.processor.grid.title": "Processor",
"re.resources.designer.processor.grid.entity.content": "Content",
"re.resources.designer.processor.grid.entity.optionCode": "Option",
"re.resources.designer.processor.grid.entity.arithmetic": "Arithmetic",
"re.resources.designer.processor.grid.entity.ternaryCondition": "Ternary Condition",
"re.resources.designer.processor.grid.entity.ternaryTrue": "Ternary True",
"re.resources.designer.processor.grid.entity.ternaryFalse": "Ternary False",
"re.resources.designer.processor.grid.entity.when": "When Expression",
"re.resources.designer.processor.grid.entity.then": "Then Expression",
"re.resources.designer.processor.grid.entity.isWhenThenShorted": "Shorted",
"re.resources.designer.processor.grid.entity.numberRangeVar": "Number Range",
"re.resources.designer.processor.grid.entity.numberRange": "Number Range",
"re.resources.designer.processor.grid.entity.conditionRangeVar": "Condition Range",
"re.resources.designer.processor.grid.entity.conditionRange": "Condition Range",
"re.resources.designer.processor.grid.entity.decisionTable2C": "Simple Decision Table",
"re.resources.designer.processor.grid.entity.decisionTable": "Decision Table",
"re.resources.designer.processor.grid.entity.groovyScript": "Groovy Script",
"re.resources.designer.processor.grid.entity.sqlDatasourceName": "Datasource Name",
"re.resources.designer.processor.grid.entity.sql": "SQL",
"re.resources.designer.processor.grid.entity.sqlParameterValues": "Parameter Values",
"re.resources.designer.processor.grid.entity.sqlFieldMapping": "Field Mapping",
"re.resources.designer.processor.grid.entity.rule": "Rule",
"re.resources.designer.processor.grid.entity.singleRule": "Single Rule",
"re.resources.designer.testCase.grid.title": "Test Case List",
"re.resources.designer.testCase.grid.entity.testResult": "Result",
"re.resources.designer.testCase.grid.entity.lastTestDate": "Test Date",
"re.resources.designer.testCaseParameter.grid.title": "Test Case Parameter List",
"re.resources.designer.testCaseParameter.grid.entity.inputValue": "Input Value",
"re.resources.designer.testCaseParameter.grid.entity.expectValue": "Expect Value",
"re.resources.designer.testCaseParameter.grid.entity.resultValue": "Result Value",
"re.resources.designer.testCaseParameter.grid.entity.skipCheck": "Skip Check",
} }

40
io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json

@ -67,4 +67,44 @@
"re.resources.designer.validator.grid.title": "驗證器", "re.resources.designer.validator.grid.title": "驗證器",
"re.resources.designer.validator.grid.entity.content": "內容", "re.resources.designer.validator.grid.entity.content": "內容",
"re.resources.designer.validator.grid.entity.tip": "錯誤提示", "re.resources.designer.validator.grid.entity.tip": "錯誤提示",
"re.resources.designer.option.grid.title": "選項",
"re.resources.designer.option.grid.entity.inputValue": "輸入值",
"re.resources.designer.option.grid.entity.value": "計算值",
"re.resources.designer.option.grid.entity.title": "顯示文本",
"re.resources.designer.processor.grid.title": "處理器",
"re.resources.designer.processor.grid.entity.content": "內容",
"re.resources.designer.processor.grid.entity.optionCode": "選項",
"re.resources.designer.processor.grid.entity.arithmetic": "算數表達式",
"re.resources.designer.processor.grid.entity.ternaryCondition": "條件",
"re.resources.designer.processor.grid.entity.ternaryTrue": "條件滿足時",
"re.resources.designer.processor.grid.entity.ternaryFalse": "條件不滿足時",
"re.resources.designer.processor.grid.entity.when": "When 表達式",
"re.resources.designer.processor.grid.entity.then": "Then 表達式",
"re.resources.designer.processor.grid.entity.isWhenThenShorted": "短路操作",
"re.resources.designer.processor.grid.entity.numberRangeVar": "數值分段",
"re.resources.designer.processor.grid.entity.numberRange": "數值分段",
"re.resources.designer.processor.grid.entity.conditionRangeVar": "條件分段",
"re.resources.designer.processor.grid.entity.conditionRange": "條件分段",
"re.resources.designer.processor.grid.entity.decisionTable2C": "簡單決策表",
"re.resources.designer.processor.grid.entity.decisionTable": "決策表",
"re.resources.designer.processor.grid.entity.groovyScript": "腳本代碼",
"re.resources.designer.processor.grid.entity.sqlDatasourceName": "數據源名稱",
"re.resources.designer.processor.grid.entity.sql": "SQL 語句",
"re.resources.designer.processor.grid.entity.sqlParameterValues": "參數測試值",
"re.resources.designer.processor.grid.entity.sqlFieldMapping": "查詢結果字段映射",
"re.resources.designer.processor.grid.entity.rule": "規則",
"re.resources.designer.processor.grid.entity.singleRule": "單規則",
"re.resources.designer.testCase.grid.title": "測試用例列表",
"re.resources.designer.testCase.grid.entity.testResult": "測試結果",
"re.resources.designer.testCase.grid.entity.lastTestDate": "測試日期",
"re.resources.designer.testCaseParameter.grid.title": "測試用例參數列表",
"re.resources.designer.testCaseParameter.grid.entity.inputValue": "輸入值",
"re.resources.designer.testCaseParameter.grid.entity.expectValue": "期望值",
"re.resources.designer.testCaseParameter.grid.entity.resultValue": "結果值",
"re.resources.designer.testCaseParameter.grid.entity.skipCheck": "跳過檢查",
"re.resources.designer.testCaseParameter.grid.entity.testResult": "測試結果",
} }

40
io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json

@ -68,4 +68,44 @@
"re.resources.designer.validator.grid.entity.content": "内容", "re.resources.designer.validator.grid.entity.content": "内容",
"re.resources.designer.validator.grid.entity.tip": "错误提示", "re.resources.designer.validator.grid.entity.tip": "错误提示",
"re.resources.designer.option.grid.title": "选项",
"re.resources.designer.option.grid.entity.inputValue": "输入值",
"re.resources.designer.option.grid.entity.value": "计算值",
"re.resources.designer.option.grid.entity.title": "显示文本",
"re.resources.designer.processor.grid.title": "处理器",
"re.resources.designer.processor.grid.entity.content": "内容",
"re.resources.designer.processor.grid.entity.optionCode": "选项",
"re.resources.designer.processor.grid.entity.arithmetic": "算数表达式",
"re.resources.designer.processor.grid.entity.ternaryCondition": "条件",
"re.resources.designer.processor.grid.entity.ternaryTrue": "条件满足时",
"re.resources.designer.processor.grid.entity.ternaryFalse": "条件不满足时",
"re.resources.designer.processor.grid.entity.when": "When 表达式",
"re.resources.designer.processor.grid.entity.then": "Then 表达式",
"re.resources.designer.processor.grid.entity.isWhenThenShorted": "短路操作",
"re.resources.designer.processor.grid.entity.numberRangeVar": "数值分段",
"re.resources.designer.processor.grid.entity.numberRange": "数值分段",
"re.resources.designer.processor.grid.entity.conditionRangeVar": "条件分段",
"re.resources.designer.processor.grid.entity.conditionRange": "条件分段",
"re.resources.designer.processor.grid.entity.decisionTable2C": "简单决策表",
"re.resources.designer.processor.grid.entity.decisionTable": "决策表",
"re.resources.designer.processor.grid.entity.groovyScript": "脚本代码",
"re.resources.designer.processor.grid.entity.sqlDatasourceName": "数据源名称",
"re.resources.designer.processor.grid.entity.sql": "SQL 语句",
"re.resources.designer.processor.grid.entity.sqlParameterValues": "参数测试值",
"re.resources.designer.processor.grid.entity.sqlFieldMapping": "查询结果字段映射",
"re.resources.designer.processor.grid.entity.rule": "规则",
"re.resources.designer.processor.grid.entity.singleRule": "单规则",
"re.resources.designer.testCase.grid.title": "测试用例列表",
"re.resources.designer.testCase.grid.entity.testResult": "测试结果",
"re.resources.designer.testCase.grid.entity.lastTestDate": "测试日期",
"re.resources.designer.testCaseParameter.grid.title": "测试用例参数列表",
"re.resources.designer.testCaseParameter.grid.entity.inputValue": "输入值",
"re.resources.designer.testCaseParameter.grid.entity.expectValue": "期望值",
"re.resources.designer.testCaseParameter.grid.entity.resultValue": "结果值",
"re.resources.designer.testCaseParameter.grid.entity.skipCheck": "跳过检查",
"re.resources.designer.testCaseParameter.grid.entity.testResult": "测试结果",
} }

26
io.sc.engine.rule.frontend/src/views/resources/Resources.vue

@ -216,7 +216,7 @@
{ {
width: 200, width: 200,
name: 'attachmentHtml', name: 'attachmentHtml',
label: $t('re.resources.grid.entity.attachmentHtml'), label: $t('attachment'),
format: (value) => { format: (value) => {
return value; return value;
}, },
@ -230,20 +230,20 @@
form: { form: {
colsNum: 1, colsNum: 1,
fields: [ fields: [
{ name: 'type', label: $t('re.resources.grid.entity.type'), type: 'text', hidden: true }, { name: 'type', label: $t('type'), type: 'text', hidden: true },
{ name: 'status', label: $t('re.resources.grid.entity.status'), type: 'text', hidden: true }, { name: 'status', label: $t('status'), type: 'text', hidden: true },
{ name: 'version', label: $t('re.resources.grid.entity.version'), type: 'number', hidden: true }, { name: 'version', label: $t('version'), type: 'number', hidden: true },
{ {
name: 'code', name: 'code',
label: $t('re.resources.grid.entity.code'), label: $t('code'),
type: 'text', type: 'text',
showIf: (arg) => { showIf: (arg) => {
const type = arg.form.getFieldValue('type'); const type = arg.form.getFieldValue('type');
return type === 'MODEL' || type === 'SCORE_CARD'; return type === 'MODEL' || type === 'SCORE_CARD';
}, },
}, },
{ name: 'name', label: $t('re.resources.grid.entity.name'), type: 'text', required: true }, { name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('re.resources.grid.entity.description'), type: 'text' }, { name: 'description', label: $t('description'), type: 'text' },
{ {
name: 'imports', name: 'imports',
label: $t('re.resources.grid.entity.imports'), label: $t('re.resources.grid.entity.imports'),
@ -262,16 +262,16 @@
columnNum: 1, columnNum: 1,
fields: [ fields: [
{ name: 'id', label: $t('id') }, { name: 'id', label: $t('id') },
{ name: 'name', label: $t('re.resources.grid.entity.name') }, { name: 'name', label: $t('name') },
{ name: 'type', label: $t('re.resources.grid.entity.type'), format: Formater.none() }, { name: 'type', label: $t('type'), format: Formater.none() },
{ name: 'code', label: $t('re.resources.grid.entity.code') }, { name: 'code', label: $t('code') },
{ name: 'version', label: $t('re.resources.grid.entity.version') }, { name: 'version', label: $t('version') },
{ name: 'status', label: $t('re.resources.grid.entity.status'), format: Formater.none() }, { name: 'status', label: $t('status'), format: Formater.none() },
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') }, { name: 'taskName', label: $t('re.resources.grid.entity.taskName') },
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') }, { name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') },
{ {
name: 'attachmentHtml', name: 'attachmentHtml',
label: $t('re.resources.grid.entity.attachmentHtml'), label: $t('attachment'),
format: (value) => { format: (value) => {
return value; return value;
}, },

122
io.sc.engine.rule.frontend/src/views/resources/designer/DesignerDialog.vue

@ -3,9 +3,9 @@
ref="dialogRef" ref="dialogRef"
:title=" :title="
$t('re.resources.designer.dialog.title', { $t('re.resources.designer.dialog.title', {
name: resourceRef?.name, name: currentSelectedResourceRef?.name,
status: Formater.enum(Enums.DeployStatus)(resourceRef?.status), status: Formater.enum(Enums.DeployStatus)(currentSelectedResourceRef?.status),
version: resourceRef?.version, version: currentSelectedResourceRef?.version,
}) })
" "
:can-maximize="false" :can-maximize="false"
@ -14,26 +14,27 @@
<q-splitter v-model="verticalSplitterRef" unit="px" separator-style="width: 3px"> <q-splitter v-model="verticalSplitterRef" unit="px" separator-style="width: 3px">
<template #before> <template #before>
<Model <Model
:resource="resourceRef" :resource="currentSelectedResourceRef"
@row-click=" @row-click="
(evt, row, index) => { (evt, row, index) => {
modelRef = row; currentSelectedModelRef = row;
if (row.parent) { if (row.parent) {
statusReactive.parameterAndTestcaseTab = 'parameter'; statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true; statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false; statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
} else { } else {
statusReactive.parameterAndTestcaseTab = 'parameter'; statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true; statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = true; statusReactive.isShowTestCase = true;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
testCaseGridRef?.refresh();
} }
parameterGridRef?.refresh(); parameterGridRef?.refresh();
} }
@ -43,10 +44,10 @@
statusReactive.parameterAndTestcaseTab = 'parameter'; statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = false; statusReactive.isShowParameter = false;
statusReactive.isShowTestCase = false; statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
} }
" "
></Model> ></Model>
@ -56,78 +57,106 @@
<div> <div>
<q-splitter v-model="horizontalSplitterRef" unit="px" separator-style="height: 3px" horizontal> <q-splitter v-model="horizontalSplitterRef" unit="px" separator-style="height: 3px" horizontal>
<template #before> <template #before>
<q-tabs v-model="statusReactive.parameterAndTestcaseTab" no-caps inline-label align="left"> <q-tabs
v-model="statusReactive.parameterAndTestcaseTab"
no-caps
inline-label
align="left"
@update:model-value="
(value) => {
if (value === 'testcase') {
horizontalSplitterRef = 300;
} else {
horizontalSplitterRef = 500;
}
}
"
>
<q-tab v-if="statusReactive.isShowParameter" name="parameter" icon="bi-p-square" :label="$t('re.resources.designer.parameter.tab.title')" /> <q-tab v-if="statusReactive.isShowParameter" name="parameter" icon="bi-p-square" :label="$t('re.resources.designer.parameter.tab.title')" />
<q-tab v-if="statusReactive.isShowTestCase" name="testcase" icon="bi-receipt" :label="$t('re.resources.designer.testcase.tab.title')" /> <q-tab v-if="statusReactive.isShowTestCase" name="testcase" icon="bi-receipt" :label="$t('re.resources.designer.testcase.tab.title')" />
</q-tabs> </q-tabs>
<q-tab-panels v-model="statusReactive.parameterAndTestcaseTab" animated> <q-tab-panels v-model="statusReactive.parameterAndTestcaseTab" animated>
<q-tab-panel v-if="statusReactive.isShowParameter" name="parameter" class="px-0"> <q-tab-panel v-if="statusReactive.isShowParameter" name="parameter" class="px-0">
<Parameter <Parameter
:model="modelRef" ref="parameterGridRef"
:model="currentSelectedModelRef"
@row-click=" @row-click="
(evt, row, index) => { (evt, row, index) => {
parameterRef = row; currentSelectedParameterRef = row;
if (row.type === 'IN') { if (row.type === 'IN') {
statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = true; statusReactive.isShowValidator = true;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
validatorGridRef?.refresh();
} else if (row.type === 'IN_OPTION') { } else if (row.type === 'IN_OPTION') {
statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = true; statusReactive.isShowOption = true;
statusReactive.isShowTestCaseParameter = false;
optionGridRef?.refresh();
} else if (row.type == 'OUT' || row.type == 'INTERMEDIATE' || row.type == 'RULE_RESULT' || row.type == 'SINGLE_RULE_RESULT') { } else if (row.type == 'OUT' || row.type == 'INTERMEDIATE' || row.type == 'RULE_RESULT' || row.type == 'SINGLE_RULE_RESULT') {
statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = true; statusReactive.isShowProcessor = true;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
processorGridRef?.refresh();
} else { } else {
statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
} }
// parameterGridRef?.refresh();
} }
" "
@before-request-data=" @before-request-data="
() => { () => {
statusReactive.parameterAndTestcaseTab = 'parameter';
statusReactive.isShowParameter = true;
statusReactive.isShowTestCase = false;
statusReactive.validatorAndProcessorAndOptionTab = 'validator';
statusReactive.isShowValidator = false; statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false; statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false; statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
} }
" "
></Parameter> ></Parameter>
</q-tab-panel> </q-tab-panel>
<q-tab-panel v-if="statusReactive.isShowTestCase" name="testcase"> testCase</q-tab-panel> <q-tab-panel v-if="statusReactive.isShowTestCase" name="testcase" class="px-0">
<TestCase
ref="testCaseGridRef"
:model="currentSelectedModelRef"
@row-click="
(evt, row, index) => {
currentSelectedTestCaseRef = row;
statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = true;
testCaseParameterGridRef?.refresh();
}
"
@before-request-data="
() => {
statusReactive.isShowValidator = false;
statusReactive.isShowProcessor = false;
statusReactive.isShowOption = false;
statusReactive.isShowTestCaseParameter = false;
}
"
></TestCase>
</q-tab-panel>
</q-tab-panels> </q-tab-panels>
</template> </template>
<template #after> <template #after>
<div v-if="statusReactive.isShowValidator"> <div v-if="statusReactive.isShowValidator">
<Validator :parameter="parameterRef"></Validator> <Validator ref="validatorGridRef" :parameter="currentSelectedParameterRef"></Validator>
</div> </div>
<div v-if="statusReactive.isShowProcessor"> <div v-if="statusReactive.isShowProcessor">
<Processor :parameter="parameterRef"></Processor> <Processor ref="processorGridRef" :parameter="currentSelectedParameterRef"></Processor>
</div> </div>
<div v-if="statusReactive.isShowOption"> <div v-if="statusReactive.isShowOption">
<Option :parameter="parameterRef"></Option> <Option ref="optionGridRef" :parameter="currentSelectedParameterRef"></Option>
</div>
<div v-if="statusReactive.isShowTestCaseParameter">
<TestCaseParameter ref="testCaseParameterGridRef" :test-case="currentSelectedTestCaseRef"></TestCaseParameter>
</div> </div>
</template> </template>
</q-splitter> </q-splitter>
@ -141,7 +170,8 @@ import { ref, nextTick, reactive } from 'vue';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core'; import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core';
import Model from './Model.vue'; import Model from './Model.vue';
import Parameter from './Parameter.vue'; import Parameter from './Parameter.vue';
import Testcase from './Testcase.vue'; import TestCase from './TestCase.vue';
import TestCaseParameter from './TestCaseParameter.vue';
import Validator from './Validator.vue'; import Validator from './Validator.vue';
import Processor from './Processor.vue'; import Processor from './Processor.vue';
import Option from './Option.vue'; import Option from './Option.vue';
@ -155,24 +185,32 @@ const props = defineProps({
}); });
const dialogRef = ref(); const dialogRef = ref();
const resourceRef = ref();
const modelRef = ref({});
const parameterRef = ref({});
const horizontalSplitterRef = ref(500); const horizontalSplitterRef = ref(500);
const verticalSplitterRef = ref(400); const verticalSplitterRef = ref(400);
const currentSelectedResourceRef = ref();
const currentSelectedModelRef = ref({});
const currentSelectedParameterRef = ref({});
const currentSelectedTestCaseRef = ref({});
const parameterGridRef = ref(); const parameterGridRef = ref();
const validatorGridRef = ref();
const processorGridRef = ref();
const optionGridRef = ref();
const testCaseGridRef = ref();
const testCaseParameterGridRef = ref();
const statusReactive = reactive({ const statusReactive = reactive({
parameterAndTestcaseTab: 'parameter', parameterAndTestcaseTab: 'parameter',
isShowParameter: false, isShowParameter: false,
isShowTestCase: false, isShowTestCase: false,
validatorAndProcessorAndOptionTab: 'validator',
isShowValidator: false, isShowValidator: false,
isShowProcessor: false, isShowProcessor: false,
isShowOption: false, isShowOption: false,
isShowTestCaseParameter: false,
}); });
const open = (resource) => { const open = (resource) => {
resourceRef.value = resource; currentSelectedResourceRef.value = resource;
dialogRef.value.show(); dialogRef.value.show();
}; };

18
io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue

@ -125,7 +125,23 @@
:viewer="{ :viewer="{
panel: { panel: {
columnNum: 1, columnNum: 1,
fields: [], fields: [
{ name: 'order', label: $t('order') },
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'enable', label: $t('enable') },
{ name: 'category', label: $t('category'), format: Formater.none() },
{ name: 'executeMode', label: $t('re.resources.designer.model.grid.entity.executeMode'), format: Formater.none() },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
}, },
}" }"
@row-click=" @row-click="

106
io.sc.engine.rule.frontend/src/views/resources/designer/Option.vue

@ -1,6 +1,108 @@
<template> <template>
<div>option</div> <w-grid
ref="gridRef"
:height="200"
:title="$t('re.resources.designer.option.grid.title')"
dense-body
class="px-1"
hide-bottom
:config-button="false"
selection="multiple"
:checkbox-selection="false"
:tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/option/findByParameterId?parameterId=' + parameter.id)"
:data-url="Environment.apiContextPath('/api/re/model/parameter/option')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 60, name: 'order', label: $t('order'), sortable: false, align: 'right' },
{ width: 100, name: 'inputValue', label: $t('re.resources.designer.option.grid.entity.inputValue'), sortable: false },
{ width: 100, name: 'value', label: $t('re.resources.designer.option.grid.entity.value'), sortable: false },
{ width: 400, name: 'title', label: $t('re.resources.designer.option.grid.entity.title'), sortable: false },
{ width: '100%', name: 'description', label: $t('description'), sortable: false },
]"
:editor="{
dialog: {
width: '600px',
height: '400px',
},
form: {
colsNum: 1,
fields: [
{ name: 'parameter', label: 'parameter', type: 'text', defaultValue: parameter.id, hidden: true },
{ name: 'id', label: $t('id'), type: 'text', hidden: true },
{
name: 'inputValue',
label: $t('re.resources.designer.option.grid.entity.inputValue'),
type: 'text',
},
{
name: 'value',
label: $t('re.resources.designer.option.grid.entity.value'),
type: 'text',
},
{
name: 'title',
label: $t('re.resources.designer.option.grid.entity.title'),
type: 'text',
},
{
name: 'description',
label: $t('description'),
type: 'text',
},
{ name: 'order', label: $t('order'), type: 'number', hidden: false },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'order', label: $t('order') },
{ name: 'inputValue', label: $t('re.resources.designer.option.grid.entity.inputValue') },
{ name: 'value', label: $t('re.resources.designer.option.grid.entity.value') },
{ name: 'title', label: $t('re.resources.designer.option.grid.entity.title') },
{ name: 'description', label: $t('description') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
></w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref, onMounted } from 'vue';
import { Environment, Formater } from 'platform-core';
const props = defineProps({
fetchDataUrl: { type: String, default: '' },
dataUrl: { type: String, default: '' },
parameter: { type: Object, default: undefined },
});
const emit = defineEmits<{
(e: 'rowClick', evt: Event, row: any, index: number): void;
(e: 'beforeRequestData', requestParams: URLSearchParams | any, callback: any): void;
}>();
const gridRef = ref();
const refresh = () => {
gridRef.value.refresh();
};
onMounted(() => {
gridRef.value.refresh();
});
defineExpose({
refresh,
});
</script> </script>

33
io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue

@ -10,7 +10,7 @@
selection="multiple" selection="multiple"
:checkbox-selection="false" :checkbox-selection="false"
:tree="false" :tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/findParameterByModelId?modelId=' + model.id)" :fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/findByModelId?modelId=' + model.id)"
:data-url="Environment.apiContextPath('/api/re/model/parameter')" :data-url="Environment.apiContextPath('/api/re/model/parameter')"
:pageable="false" :pageable="false"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
@ -302,7 +302,30 @@
:viewer="{ :viewer="{
panel: { panel: {
columnNum: 1, columnNum: 1,
fields: [], fields: [
{ name: 'order', label: $t('order') },
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'type', label: $t('type') },
{ name: 'valueType', label: $t('re.resources.designer.parameter.grid.entity.valueType') },
{ name: 'valueTypeVersion', label: $t('re.resources.designer.parameter.grid.entity.valueTypeVersion') },
{ name: 'valueScale', label: $t('re.resources.designer.parameter.grid.entity.valueScale') },
{ name: 'valueRoundingMode', label: $t('re.resources.designer.parameter.grid.entity.valueRoundingMode') },
{ name: 'valueTypeIsList', label: $t('re.resources.designer.parameter.grid.entity.valueTypeIsList') },
{ name: 'defaultValue', label: $t('defaultValue') },
{ name: 'libCode', label: $t('re.resources.designer.parameter.grid.entity.libCode') },
{ name: 'libVersion', label: $t('re.resources.designer.parameter.grid.entity.libVersion') },
{ name: 'indicatorCode', label: $t('re.resources.designer.parameter.grid.entity.indicatorCode') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
}, },
}" }"
@row-click=" @row-click="
@ -318,7 +341,7 @@
></w-grid> ></w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { onMounted, ref } from 'vue';
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core';
const props = defineProps({ const props = defineProps({
@ -356,4 +379,8 @@ if (response && response.data) {
ValueTypeList.push({ value: item.key, label: item.value }); ValueTypeList.push({ value: item.key, label: item.value });
} }
} }
onMounted(() => {
gridRef.value.refresh();
});
</script> </script>

495
io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue

@ -1,6 +1,497 @@
<template> <template>
<div>processor</div> <w-grid
ref="gridRef"
:height="200"
:title="$t('re.resources.designer.processor.grid.title')"
dense-body
class="px-1"
hide-bottom
:config-button="false"
selection="multiple"
:checkbox-selection="false"
:tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/processor/findByParameterId?parameterId=' + parameter.id)"
:data-url="Environment.apiContextPath('/api/re/model/parameter/processor')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
[
{
extend: 'add',
click: undefined,
},
{
extend: 'add',
name: 'optionValue',
label: Formater.enum(Enums.ProcessorType)('OPTION_VALUE'),
icon: 'bi-card-list',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'OPTION_VALUE');
},
},
{
extend: 'add',
name: 'arithmetic',
label: Formater.enum(Enums.ProcessorType)('ARITHMETIC'),
icon: 'bi-calculator',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'ARITHMETIC');
},
},
{
extend: 'add',
name: 'ternary',
label: Formater.enum(Enums.ProcessorType)('TERNARY'),
icon: 'bi-question',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'TERNARY');
},
},
{
extend: 'add',
name: 'whenThen',
label: Formater.enum(Enums.ProcessorType)('WHEN_THEN'),
icon: 'bi-sliders',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'WHEN_THEN');
},
},
{
extend: 'add',
name: 'numberRange',
label: Formater.enum(Enums.ProcessorType)('NUMBER_RANGE'),
icon: 'bi-justify',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'NUMBER_RANGE');
},
},
{
extend: 'add',
name: 'conditionRange',
label: Formater.enum(Enums.ProcessorType)('CONDITION_RANGE'),
icon: 'bi-rainbow',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'CONDITION_RANGE');
},
},
{
extend: 'add',
name: 'decisionTable2c',
label: Formater.enum(Enums.ProcessorType)('DECISION_TABLE_2C'),
icon: 'bi-grid-3x2',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'DECISION_TABLE_2C');
},
},
{
extend: 'add',
name: 'decisionTable',
label: Formater.enum(Enums.ProcessorType)('DECISION_TABLE'),
icon: 'bi-grid-3x3',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'DECISION_TABLE');
},
},
{
extend: 'add',
name: 'decisionTree',
label: Formater.enum(Enums.ProcessorType)('DECISION_TREE'),
icon: 'bi-tree',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'DECISION_TREE');
},
},
{
extend: 'add',
name: 'executionFlow',
label: Formater.enum(Enums.ProcessorType)('EXECUTION_FLOW'),
icon: 'bi-bounding-box-circles',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'EXECUTION_FLOW');
},
},
{
extend: 'add',
name: 'pmml',
label: Formater.enum(Enums.ProcessorType)('PMML'),
icon: 'bi-filetype-xml',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'PMML');
},
},
{
extend: 'add',
name: 'groovyScript',
label: Formater.enum(Enums.ProcessorType)('GROOVY_SCRIPT'),
icon: 'bi-code',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'GROOVY_SCRIPT');
},
},
{
extend: 'add',
name: 'sql',
label: Formater.enum(Enums.ProcessorType)('SQL'),
icon: 'bi-filetype-sql',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'SQL');
},
},
{
extend: 'add',
name: 'rule',
label: Formater.enum(Enums.ProcessorType)('RULE'),
icon: 'bi-shadows',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'RULE');
},
},
{
extend: 'add',
name: 'singleRule',
label: Formater.enum(Enums.ProcessorType)('SINGLE_RULE'),
icon: 'bi-noise-reduction',
enableIf: (arg) => {
return parameter.type !== 'RULE_RESULT' && parameter.type !== 'SINGLE_RULE_RESULT';
},
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'SINGLE_RULE');
},
},
],
'edit',
'remove',
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ width: 60, name: 'order', label: $t('order'), sortable: false, align: 'right' },
{ width: 100, name: 'type', label: $t('type'), sortable: false, format: Formater.enum(Enums.ProcessorType) },
{ width: 100, name: 'enable', label: $t('isEnable'), sortable: false },
{
width: '100%',
name: 'content',
label: $t('re.resources.designer.processor.grid.entity.content'),
sortable: false,
format: (value, row) => {
const type = row.type;
return '';
},
},
]"
:editor="{
dialog: {
width: '600px',
height: '400px',
},
form: {
colsNum: 1,
fields: [
{ name: 'parameter', label: 'parameter', type: 'text', defaultValue: parameter.id, hidden: true },
{ name: 'id', label: $t('id'), type: 'text', hidden: true },
{ name: 'order', label: $t('order'), type: 'number', hidden: true },
{ name: 'type', label: $t('type'), type: 'text', hidden: true },
{ name: 'description', label: $t('description'), type: 'text' },
{ name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true },
{
name: 'optionCode',
label: $t('re.resources.designer.processor.grid.entity.optionCode'),
type: 'select',
options: [],
showIf: (arg) => {
return 'OPTION_VALUE' === arg.form.getFieldValue('type');
},
},
{
name: 'arithmetic',
label: $t('re.resources.designer.processor.grid.entity.arithmetic'),
type: 'code-mirror',
showIf: (arg) => {
return 'ARITHMETIC' === arg.form.getFieldValue('type');
},
},
{
name: 'ternaryCondition',
label: $t('re.resources.designer.processor.grid.entity.ternaryCondition'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
name: 'ternaryTrue',
label: $t('re.resources.designer.processor.grid.entity.ternaryTrue'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
name: 'ternaryFalse',
label: $t('re.resources.designer.processor.grid.entity.ternaryFalse'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
name: 'when',
label: $t('re.resources.designer.processor.grid.entity.when'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'WHEN_THEN' === arg.form.getFieldValue('type');
},
},
{
name: 'then',
label: $t('re.resources.designer.processor.grid.entity.then'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'WHEN_THEN' === arg.form.getFieldValue('type');
},
},
{
name: 'isWhenThenShorted',
label: $t('re.resources.designer.processor.grid.entity.isWhenThenShorted'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'WHEN_THEN' === arg.form.getFieldValue('type');
},
},
{
name: 'numberRange',
label: $t('re.resources.designer.processor.grid.entity.numberRange'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'NUMBER_RANGE' === arg.form.getFieldValue('type');
},
},
{
name: 'conditionRange',
label: $t('re.resources.designer.processor.grid.entity.conditionRange'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'CONDITION_RANGE' === arg.form.getFieldValue('type');
},
},
{
name: 'decisionTable2C',
label: $t('re.resources.designer.processor.grid.entity.decisionTable2C'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'DECISION_TABLE_2C' === arg.form.getFieldValue('type');
},
},
{
name: 'decisionTable',
label: $t('re.resources.designer.processor.grid.entity.decisionTable'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'DECISION_TABLE' === arg.form.getFieldValue('type');
},
},
{
name: 'decisionTree',
label: $t('re.resources.designer.processor.grid.entity.decisionTree'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'DECISION_TREE' === arg.form.getFieldValue('type');
},
},
{
name: 'executionFlow',
label: $t('re.resources.designer.processor.grid.entity.executionFlow'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'EXECUTION_FLOW' === arg.form.getFieldValue('type');
},
},
{
name: 'pmml',
label: $t('re.resources.designer.processor.grid.entity.pmml'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'PMML' === arg.form.getFieldValue('type');
},
},
{
name: 'groovyScript',
label: $t('re.resources.designer.processor.grid.entity.groovyScript'),
type: 'code-mirror',
rows: 1,
showIf: (arg) => {
return 'GROOVY_SCRIPT' === arg.form.getFieldValue('type');
},
},
{
name: 'sqlDatasourceName',
label: $t('re.resources.designer.processor.grid.entity.sqlDatasourceName'),
type: 'select',
rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
{
name: 'sql',
label: $t('re.resources.designer.processor.grid.entity.sql'),
type: 'select',
rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
{
name: 'sqlParameterValues',
label: $t('re.resources.designer.processor.grid.entity.sqlParameterValues'),
type: 'select',
rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
{
name: 'sqlFieldMapping',
label: $t('re.resources.designer.processor.grid.entity.sqlFieldMapping'),
type: 'select',
rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t(''), primaryKey: true },
{ name: 'parameter', label: $t('') },
{ name: 'description', label: $t('') },
{ name: 'order', label: $t('') },
{ name: 'enable', label: $t('') },
{ name: 'type', label: $t('') },
{ name: 'optionCode', label: $t('re.resources.designer.processor.grid.entity.optionCode') },
{ name: 'arithmetic', label: $t('re.resources.designer.processor.grid.entity.arithmetic') },
{ name: 'ternaryCondition', label: $t('re.resources.designer.processor.grid.entity.ternaryCondition') },
{ name: 'ternaryTrue', label: $t('re.resources.designer.processor.grid.entity.ternaryTrue') },
{ name: 'ternaryFalse', label: $t('re.resources.designer.processor.grid.entity.ternaryFalse') },
{ name: 'when', label: $t('re.resources.designer.processor.grid.entity.when') },
{ name: 'then', label: $t('re.resources.designer.processor.grid.entity.then') },
{ name: 'isWhenThenShorted', label: $t('re.resources.designer.processor.grid.entity.isWhenThenShorted') },
{ name: 'rule', label: $t('re.resources.designer.processor.grid.entity.rule') },
{ name: 'singleRule', label: $t('re.resources.designer.processor.grid.entity.singleRule') },
{ name: 'numberRange', label: $t('re.resources.designer.processor.grid.entity.numberRange') },
{ name: 'conditionRange', label: $t('re.resources.designer.processor.grid.entity.conditionRange') },
{ name: 'decisionTable2C', label: $t('re.resources.designer.processor.grid.entity.decisionTable2C') },
{ name: 'decisionTable', label: $t('re.resources.designer.processor.grid.entity.decisionTable') },
{ name: 'groovyScript', label: $t('re.resources.designer.processor.grid.entity.groovyScript') },
{ name: 'sqlDatasourceName', label: $t('re.resources.designer.processor.grid.entity.sqlDatasourceName') },
{ name: 'sql', label: $t('re.resources.designer.processor.grid.entity.sql') },
{ name: 'sqlParameterValues', label: $t('re.resources.designer.processor.grid.entity.sqlParameterValues') },
{ name: 'sqlFieldMapping', label: $t('re.resources.designer.processor.grid.entity.sqlFieldMapping') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
></w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref, onMounted } from 'vue';
import { Environment, Formater, EnumTools, Options } from 'platform-core';
const props = defineProps({
fetchDataUrl: { type: String, default: '' },
dataUrl: { type: String, default: '' },
parameter: { type: Object, default: undefined },
});
const emit = defineEmits<{
(e: 'rowClick', evt: Event, row: any, index: number): void;
(e: 'beforeRequestData', requestParams: URLSearchParams | any, callback: any): void;
}>();
const gridRef = ref();
const refresh = () => {
gridRef.value.refresh();
};
onMounted(() => {
gridRef.value.refresh();
});
defineExpose({
refresh,
});
const Enums = await EnumTools.fetch(['io.sc.engine.rule.core.enums.ProcessorType']);
</script> </script>

171
io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue

@ -0,0 +1,171 @@
<template>
<w-grid
ref="gridRef"
:height="200"
:title="$t('re.resources.designer.testCase.grid.title')"
dense-body
class="px-1"
hide-bottom
:config-button="false"
selection="multiple"
:checkbox-selection="false"
:tree="true"
:tree-icon="
(row) => {
if (row.category === 'M') {
return { name: 'folder', color: 'amber' };
} else {
return { name: 'bi-p-circle' };
}
}
"
:fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + testCase.id)"
:data-url="Environment.apiContextPath('/api/re/testCaseParameter')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
'expand',
'separator',
{
extend: 'edit',
},
'separator',
{
name: 'execute',
label: $t('execute'),
icon: 'bi-caret-right',
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ width: 300, name: 'name', label: $t('name') },
{ width: 100, name: 'parameterType', label: $t('type'), format: Formater.enum(Enums.ParameterType) },
{
width: 100,
name: 'valueType',
label: $t('re.resources.designer.parameter.grid.entity.valueType'),
format: (value) => {
return ValueTypeMap[value];
},
},
{ width: 100, name: 'defaultValue', label: $t('defaultValue') },
{ width: 100, name: 'inputValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.inputValue') },
{ width: 100, name: 'expectValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.expectValue') },
{ width: 100, name: 'resultValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue') },
{ width: 100, name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck') },
{ width: 100, name: 'testResult', label: $t('re.resources.designer.testCaseParameter.grid.entity.testResult'), format: passOrNotFormater },
]"
:editor="{
dialog: {
width: '600px',
height: '550px',
},
form: {
colsNum: 1,
fields: [
{ name: 'testCaseId', label: $t(''), type: 'text', defaultValue: testCase.id },
{ name: 'parent', label: $t(''), type: 'text' },
{ name: 'id', label: $t(''), type: 'text' },
{ name: 'category', label: $t('') },
{ name: 'code', label: $t('') },
{ name: 'name', label: $t('') },
{ name: 'skipCheck', label: $t('') },
{ name: 'source', label: $t('') },
{ name: 'type', label: $t('') },
{ name: 'parameterType', label: $t('') },
{ name: 'scoreCardVarType', label: $t('') },
{ name: 'valueType', label: $t('') },
{ name: 'defaultValue', label: $t('') },
{ name: 'inputValue', label: $t('') },
{ name: 'expectValue', label: $t('') },
{ name: 'resultValue', label: $t('') },
{ name: 'testResult', label: $t('') },
{ name: 'order', label: $t('') },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
@row-click="
(evt, row, index) => {
emit('rowClick', evt, row, index);
}
"
@before-request-data="
() => {
emit('beforeRequestData');
}
"
></w-grid>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core';
const props = defineProps({
testCase: { type: Object, default: undefined },
});
const emit = defineEmits<{
(e: 'rowClick', evt: Event, row: any, index: number): void;
(e: 'beforeRequestData', requestParams: URLSearchParams | any, callback: any): void;
}>();
const gridRef = ref();
const refresh = () => {
gridRef.value.refresh();
};
defineExpose({
refresh,
});
const Enums = await EnumTools.fetch(['io.sc.engine.rule.core.enums.ParameterType']);
let ValueTypeMap = {};
const response = await axios.get(Environment.apiContextPath('/api/re/dictionary/getAllDictionaryMap'));
if (response && response.data) {
ValueTypeMap = {};
for (const item of response.data) {
ValueTypeMap[item.key] = item.value;
}
}
const passOrNotFormater = (value) => {
if (Tools.isUndefinedOrNull(value)) {
return '';
}
if (value === 'PASSED') {
return {
componentType: 'QIcon',
attrs: { name: 'bi-check-circle', size: '20px', color: 'green' },
};
} else if (value === 'UN_PASSED') {
return {
componentType: 'QIcon',
attrs: { name: 'bi-x-circle', size: '20px', color: 'red' },
};
} else if (value === 'ERROR') {
return {
componentType: 'QIcon',
attrs: { name: 'bi-x-circle', size: '20px', color: 'red' },
};
}
};
</script>

157
io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue

@ -1,7 +1,160 @@
<template> <template>
<div>test case</div> <w-grid
ref="gridRef"
:height="200"
:title="$t('re.resources.designer.testCase.grid.title')"
dense-body
class="px-1"
hide-bottom
:config-button="false"
selection="multiple"
:checkbox-selection="false"
:tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/testCase/findByOwnerId?ownerId=' + model.resource)"
:data-url="Environment.apiContextPath('/api/re/testCase')"
:pageable="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
'add',
'clone',
{
extend: 'clone',
name: 'deepClone',
label: $t('deepClone'),
icon: 'bi-copy',
click: (arg) => {},
},
'edit',
'remove',
'separator',
{
name: 'execute',
label: $t('execute'),
icon: 'bi-caret-right',
},
{
name: 'executeAll',
label: $t('executeAll'),
icon: 'bi-caret-right-fill',
},
'view',
'separator',
'export',
]"
:columns="[
{ width: 50, name: 'order', label: $t('order'), hidden: true },
{ width: 100, name: 'id', label: $t('id'), hidden: true },
{
width: 100,
name: 'testResult',
label: $t('re.resources.designer.testCase.grid.entity.testResult'),
align: 'center',
format: (value, row) => {
if (row.testResult) {
if (row.testResult === 'PASSED') {
return {};
} else {
return {};
}
}
return '';
},
},
{ width: 120, name: 'lastTestDate', label: $t('re.resources.designer.testCase.grid.entity.lastTestDate') },
{ width: 400, name: 'name', label: $t('name') },
{ width: '100%', name: 'description', label: $t('description') },
]"
:editor="{
dialog: {
width: '600px',
height: '250px',
},
form: {
colsNum: 1,
fields: [
{ name: 'order', label: $t('order'), type: 'text', hidden: true },
{ name: 'id', label: $t('id'), type: 'text', hidden: true },
{ name: 'ownerType', label: $t('ownerType'), type: 'text', defaultValue: 'MODEL', hidden: true },
{ name: 'owner', label: $t('owner'), type: 'text', defaultValue: model.resource, hidden: true },
{ name: 'ownerId', label: $t('ownerId'), type: 'text', defaultValue: model.resource, hidden: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'text' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'order', label: $t('order') },
{ name: 'id', label: $t('id') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
@row-click="
(evt, row, index) => {
emit('rowClick', evt, row, index);
}
"
@before-request-data="
() => {
emit('beforeRequestData');
}
"
></w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { onMounted, ref } from 'vue';
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core';
const props = defineProps({
model: { type: Object, default: undefined },
});
const emit = defineEmits<{
(e: 'rowClick', evt: Event, row: any, index: number): void;
(e: 'beforeRequestData', requestParams: URLSearchParams | any, callback: any): void;
}>();
const gridRef = ref();
const refresh = () => {
gridRef.value.refresh();
};
defineExpose({
refresh,
});
const Enums = await EnumTools.fetch([
'io.sc.platform.core.enums.RoundingMode',
'io.sc.engine.rule.core.enums.ParameterType',
'io.sc.engine.rule.core.enums.DeployStatus',
]);
let ValueTypeMap = {};
const ValueTypeList = [];
const response = await axios.get(Environment.apiContextPath('/api/re/dictionary/getAllDictionaryMap'));
if (response && response.data) {
ValueTypeMap = {};
ValueTypeList.splice(0, ValueTypeList.length);
for (const item of response.data) {
ValueTypeMap[item.key] = item.value;
ValueTypeList.push({ value: item.key, label: item.value });
}
}
onMounted(() => {
gridRef.value.refresh();
});
</script> </script>

10
io.sc.engine.rule.frontend/src/views/resources/designer/Validator.vue

@ -10,7 +10,7 @@
selection="multiple" selection="multiple"
:checkbox-selection="false" :checkbox-selection="false"
:tree="false" :tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/validator/findValidatorByParameterId?parameterId=' + parameter.id)" :fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/validator/findByParameterId?parameterId=' + parameter.id)"
:data-url="Environment.apiContextPath('/api/re/model/parameter/validator')" :data-url="Environment.apiContextPath('/api/re/model/parameter/validator')"
:pageable="false" :pageable="false"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
@ -149,9 +149,9 @@
></w-grid> ></w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref, onMounted } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; import { Environment, EnumTools, Formater, Tools } from 'platform-core';
const props = defineProps({ const props = defineProps({
fetchDataUrl: { type: String, default: '' }, fetchDataUrl: { type: String, default: '' },
@ -205,6 +205,10 @@ const refresh = () => {
gridRef.value.refresh(); gridRef.value.refresh();
}; };
onMounted(() => {
gridRef.value.refresh();
});
defineExpose({ defineExpose({
refresh, refresh,
}); });

4
io.sc.engine.rule.frontend/util-components-generator.cjs

@ -13,7 +13,7 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n'; content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n'; content +=' */\n\n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath; const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`; content +=`import ${componentName} from '${componentPath}';\n`;
} }
@ -21,7 +21,7 @@ for(const route of routesJson){
content +='\n'; content +='\n';
content +='const localComponents = { \n'; content +='const localComponents = { \n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`; content +=`'${route.component}': ${componentName},\n`;
} }
content +='}\n\n'; content +='}\n\n';

2
io.sc.engine.rule.frontend/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

1
io.sc.engine.rule.frontend/webpack.config.mf.cjs

@ -56,7 +56,6 @@ module.exports = {
'platform-core': { requiredVersion: deps['platform-core'], singleton: true }, 'platform-core': { requiredVersion: deps['platform-core'], singleton: true },
'quasar': { requiredVersion: deps['quasar'], singleton: true }, 'quasar': { requiredVersion: deps['quasar'], singleton: true },
'vue': { requiredVersion: deps['vue'], singleton: true }, 'vue': { requiredVersion: deps['vue'], singleton: true },
'vue-codemirror6': { requiredVersion: deps['vue-codemirror6'], singleton: true },
'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true },
'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true },
'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true },

2
io.sc.engine.rule.frontend/webpack.env.build.cjs

@ -38,7 +38,7 @@ module.exports = merge(common, mf, {
}, },
'codemirror':{ 'codemirror':{
name: 'codemirror', name: 'codemirror',
test: /[\\/]node_modules[\\/](codemirror|vue-codemirror6|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/, test: /[\\/]node_modules[\\/](codemirror|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/,
priority: 20, priority: 20,
chunks: 'all', chunks: 'all',
enforce: true enforce: true

20
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java

@ -4,15 +4,31 @@ import io.sc.engine.rule.server.model.entity.ParameterInOptionItemEntity;
import io.sc.engine.rule.server.model.repository.ParameterInOptionItemRepository; import io.sc.engine.rule.server.model.repository.ParameterInOptionItemRepository;
import io.sc.engine.rule.server.model.service.ParameterInOptionItemService; import io.sc.engine.rule.server.model.service.ParameterInOptionItemService;
import io.sc.engine.rule.server.model.vo.ParameterInOptionItemVo; import io.sc.engine.rule.server.model.vo.ParameterInOptionItemVo;
import io.sc.engine.rule.server.model.vo.ParameterValidatorVo;
import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Collections;
import java.util.List;
/** /**
* 模型参数选项 Controller * 模型参数选项 Controller
*/ */
@Controller @Controller
@RequestMapping("/api/re/model/parameter/item") @RequestMapping("/api/re/model/parameter/option")
public class ParameterInOptionItemWebController extends RestCrudController<ParameterInOptionItemVo,ParameterInOptionItemEntity,String,ParameterInOptionItemRepository,ParameterInOptionItemService> { public class ParameterInOptionItemWebController extends RestCrudController<ParameterInOptionItemVo,ParameterInOptionItemEntity,String,ParameterInOptionItemRepository,ParameterInOptionItemService> {
@GetMapping("findByParameterId")
@ResponseBody
public List<ParameterValidatorVo> findByParameterId(@RequestParam(name="parameterId",required = false)String parameterId) throws Exception {
if(!StringUtils.hasText(parameterId)){
return Collections.emptyList();
}
return EntityVoUtil.toVo(service.findByParameterId(parameterId));
}
} }

13
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterProcessorWebController.java

@ -9,9 +9,11 @@ import io.sc.engine.rule.server.model.service.ParameterService;
import io.sc.engine.rule.server.model.support.processor.SqlQueryRequest; import io.sc.engine.rule.server.model.support.processor.SqlQueryRequest;
import io.sc.engine.rule.server.model.support.processor.SqlQueryResult; import io.sc.engine.rule.server.model.support.processor.SqlQueryResult;
import io.sc.engine.rule.server.model.vo.ParameterProcessorVo; import io.sc.engine.rule.server.model.vo.ParameterProcessorVo;
import io.sc.engine.rule.server.model.vo.ParameterValidatorVo;
import io.sc.engine.rule.server.util.CodeAndNameMapping; import io.sc.engine.rule.server.util.CodeAndNameMapping;
import io.sc.engine.rule.server.util.VariableCodeAndNameReplacer; import io.sc.engine.rule.server.util.VariableCodeAndNameReplacer;
import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -21,6 +23,8 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.util.Collections;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -31,6 +35,15 @@ import java.util.Map;
public class ParameterProcessorWebController extends RestCrudController<ParameterProcessorVo,ParameterProcessorEntity,String,ParameterProcessorRepository,ParameterProcessorService> { public class ParameterProcessorWebController extends RestCrudController<ParameterProcessorVo,ParameterProcessorEntity,String,ParameterProcessorRepository,ParameterProcessorService> {
@Autowired private ParameterService parameterService; @Autowired private ParameterService parameterService;
@GetMapping("findByParameterId")
@ResponseBody
public List<ParameterProcessorVo> findByParameterId(@RequestParam(name="parameterId",required = false)String parameterId) throws Exception {
if(!StringUtils.hasText(parameterId)){
return Collections.emptyList();
}
return EntityVoUtil.toVo(service.findByParameterId(parameterId));
}
//决策树========================================================================================================== //决策树==========================================================================================================
@RequestMapping(value="editDecisionTreeById/{processorId}",method=RequestMethod.GET) @RequestMapping(value="editDecisionTreeById/{processorId}",method=RequestMethod.GET)
public ModelAndView editDecisionTreeById(@PathVariable(name="processorId")String processorId) throws Exception{ public ModelAndView editDecisionTreeById(@PathVariable(name="processorId")String processorId) throws Exception{

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterValidatorWebController.java

@ -27,9 +27,9 @@ import java.util.List;
@Controller @Controller
@RequestMapping("/api/re/model/parameter/validator") @RequestMapping("/api/re/model/parameter/validator")
public class ParameterValidatorWebController extends RestCrudController<ParameterValidatorVo,ParameterValidatorEntity,String,ParameterValidatorRepository,ParameterValidatorService> { public class ParameterValidatorWebController extends RestCrudController<ParameterValidatorVo,ParameterValidatorEntity,String,ParameterValidatorRepository,ParameterValidatorService> {
@GetMapping("findValidatorByParameterId") @GetMapping("findByParameterId")
@ResponseBody @ResponseBody
public List<ParameterValidatorVo> findValidatorByParameterId(@RequestParam(name="parameterId",required = false)String parameterId) throws Exception { public List<ParameterValidatorVo> findByParameterId(@RequestParam(name="parameterId",required = false)String parameterId) throws Exception {
if(!StringUtils.hasText(parameterId)){ if(!StringUtils.hasText(parameterId)){
return Collections.emptyList(); return Collections.emptyList();
} }

2
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterWebController.java

@ -31,7 +31,7 @@ import java.util.Locale;
public class ParameterWebController extends RestCrudController<ParameterVo,ParameterEntity,String,ParameterRepository,ParameterService> { public class ParameterWebController extends RestCrudController<ParameterVo,ParameterEntity,String,ParameterRepository,ParameterService> {
private static final Logger log =LoggerFactory.getLogger(ParameterWebController.class); private static final Logger log =LoggerFactory.getLogger(ParameterWebController.class);
@GetMapping("findParameterByModelId") @GetMapping("findByModelId")
@ResponseBody @ResponseBody
public List<ParameterVo> findParameterByModelId(@RequestParam(name="modelId",required = false)String modelId) throws Exception { public List<ParameterVo> findParameterByModelId(@RequestParam(name="modelId",required = false)String modelId) throws Exception {
if(!StringUtils.hasText(modelId)){ if(!StringUtils.hasText(modelId)){

1
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ModelEntity.java

@ -98,6 +98,7 @@ public class ModelEntity extends AuditorEntity<ModelVo> implements DeepClone, Id
vo.setCategory(this.getCategory()); vo.setCategory(this.getCategory());
vo.setExecuteMode(this.getExecuteMode()); vo.setExecuteMode(this.getExecuteMode());
vo.setParent(this.getParent()==null?null:this.getParent().getId()); vo.setParent(this.getParent()==null?null:this.getParent().getId());
vo.setResource(this.getResource()==null?null:this.getResource().getId());
return vo; return vo;
} }

6
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterInOptionItemRepository.java

@ -1,11 +1,17 @@
package io.sc.engine.rule.server.model.repository; package io.sc.engine.rule.server.model.repository;
import io.sc.engine.rule.server.model.entity.ParameterValidatorEntity;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import io.sc.engine.rule.server.model.entity.ParameterInOptionItemEntity; import io.sc.engine.rule.server.model.entity.ParameterInOptionItemEntity;
import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.repository.DaoRepository;
import java.util.List;
public interface ParameterInOptionItemRepository extends DaoRepository<ParameterInOptionItemEntity,String>{ public interface ParameterInOptionItemRepository extends DaoRepository<ParameterInOptionItemEntity,String>{
@Query("select max(e.order)+1 from ParameterInOptionItemEntity e where e.parameter.id=:parameterId") @Query("select max(e.order)+1 from ParameterInOptionItemEntity e where e.parameter.id=:parameterId")
public Integer getNextOrder(@Param("parameterId") String parameterId); public Integer getNextOrder(@Param("parameterId") String parameterId);
@Query("select e from ParameterInOptionItemEntity e where e.parameter.id=:parameterId order by e.order")
public List<ParameterInOptionItemEntity> findByParameterId(@Param("parameterId") String parameterId);
} }

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterProcessorRepository.java

@ -3,6 +3,7 @@ package io.sc.engine.rule.server.model.repository;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import io.sc.engine.rule.server.model.entity.ParameterValidatorEntity;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import io.sc.engine.rule.server.model.entity.ParameterProcessorEntity; import io.sc.engine.rule.server.model.entity.ParameterProcessorEntity;
@ -24,6 +25,9 @@ import io.sc.engine.rule.server.model.entity.processor.WhenThenParameterProcesso
import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.repository.DaoRepository;
public interface ParameterProcessorRepository extends DaoRepository<ParameterProcessorEntity,String>{ public interface ParameterProcessorRepository extends DaoRepository<ParameterProcessorEntity,String>{
@Query("select e from ParameterProcessorEntity e where e.parameter.id=:parameterId order by e.order")
public List<ParameterProcessorEntity> findByParameterId(@Param("parameterId") String parameterId);
@Query("select max(e.order)+1 from ParameterProcessorEntity e where e.parameter.id=:parameterId") @Query("select max(e.order)+1 from ParameterProcessorEntity e where e.parameter.id=:parameterId")
public Integer getNextOrder(@Param("parameterId") String parameterId); public Integer getNextOrder(@Param("parameterId") String parameterId);

10
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java

@ -4,9 +4,17 @@ import io.sc.engine.rule.server.model.entity.ParameterInOptionItemEntity;
import io.sc.engine.rule.server.model.repository.ParameterInOptionItemRepository; import io.sc.engine.rule.server.model.repository.ParameterInOptionItemRepository;
import io.sc.platform.orm.service.DaoService; import io.sc.platform.orm.service.DaoService;
import java.util.List;
/** /**
* 输入参数选项服务接口 * 输入参数选项服务接口
*/ */
public interface ParameterInOptionItemService extends DaoService<ParameterInOptionItemEntity, String, ParameterInOptionItemRepository>{ public interface ParameterInOptionItemService extends DaoService<ParameterInOptionItemEntity, String, ParameterInOptionItemRepository>{
/**
* 通过参数ID查找选项
* @param parameterId 参数ID
* @return 选项列表
* @throws Exception 违例
*/
public List<ParameterInOptionItemEntity> findByParameterId(String parameterId) throws Exception;
} }

10
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterProcessorService.java

@ -1,8 +1,10 @@
package io.sc.engine.rule.server.model.service; package io.sc.engine.rule.server.model.service;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.List;
import io.sc.engine.rule.server.model.entity.ParameterProcessorEntity; import io.sc.engine.rule.server.model.entity.ParameterProcessorEntity;
import io.sc.engine.rule.server.model.entity.ParameterValidatorEntity;
import io.sc.engine.rule.server.model.repository.ParameterProcessorRepository; import io.sc.engine.rule.server.model.repository.ParameterProcessorRepository;
import io.sc.engine.rule.server.model.support.processor.SqlQueryRequest; import io.sc.engine.rule.server.model.support.processor.SqlQueryRequest;
import io.sc.engine.rule.server.model.support.processor.SqlQueryResult; import io.sc.engine.rule.server.model.support.processor.SqlQueryResult;
@ -12,6 +14,14 @@ import io.sc.platform.orm.service.DaoService;
* 模型参数处理器服务接口 * 模型参数处理器服务接口
*/ */
public interface ParameterProcessorService extends DaoService<ParameterProcessorEntity, String, ParameterProcessorRepository>{ public interface ParameterProcessorService extends DaoService<ParameterProcessorEntity, String, ParameterProcessorRepository>{
/**
* 通过参数ID查找参数处理器
* @param parameterId 参数ID
* @return 参数处理器列表
* @throws Exception 违例
*/
public List<ParameterProcessorEntity> findByParameterId(String parameterId) throws Exception;
public void importFromCsv(String parameterId,String csvContent, String splitChar) throws Exception; public void importFromCsv(String parameterId,String csvContent, String splitChar) throws Exception;
public SqlQueryResult executeSql(SqlQueryRequest request); public SqlQueryResult executeSql(SqlQueryRequest request);
public void generateImage(String parameterProcessorId,OutputStream outputStream,String format) throws Exception; public void generateImage(String parameterProcessorId,OutputStream outputStream,String format) throws Exception;

8
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java

@ -6,8 +6,16 @@ import io.sc.engine.rule.server.model.service.ParameterInOptionItemService;
import io.sc.platform.orm.service.impl.DaoServiceImpl; import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
@Service("reInputParameterOptionService") @Service("reInputParameterOptionService")
public class ParameterInOptionItemServiceImpl extends DaoServiceImpl<ParameterInOptionItemEntity, String, ParameterInOptionItemRepository> implements ParameterInOptionItemService{ public class ParameterInOptionItemServiceImpl extends DaoServiceImpl<ParameterInOptionItemEntity, String, ParameterInOptionItemRepository> implements ParameterInOptionItemService{
@Override
public List<ParameterInOptionItemEntity> findByParameterId(String parameterId) throws Exception {
return repository.findByParameterId(parameterId);
}
@Override @Override
public ParameterInOptionItemEntity add(ParameterInOptionItemEntity entity) throws Exception { public ParameterInOptionItemEntity add(ParameterInOptionItemEntity entity) throws Exception {
Integer nextOrder =repository.getNextOrder(entity.getParameter().getId()); Integer nextOrder =repository.getNextOrder(entity.getParameter().getId());

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterProcessorServiceImpl.java

@ -50,6 +50,10 @@ public class ParameterProcessorServiceImpl
@Autowired private ParameterService parameterService; @Autowired private ParameterService parameterService;
@Autowired private JdbcTemplate jdbcTemplate; @Autowired private JdbcTemplate jdbcTemplate;
@Override
public List<ParameterProcessorEntity> findByParameterId(String parameterId) throws Exception {
return repository.findByParameterId(parameterId);
}
@Override @Override
public ParameterProcessorEntity add(ParameterProcessorEntity entity) throws Exception { public ParameterProcessorEntity add(ParameterProcessorEntity entity) throws Exception {

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/bean/ModelTestCaseParameterBuilder.java

@ -45,7 +45,7 @@ public class ModelTestCaseParameterBuilder implements TestCaseParameterBuilder{
if(tree!=null && modelEntity!=null) { if(tree!=null && modelEntity!=null) {
//添加模型 //添加模型
TestCaseParameterWrapper modelNode =modelEntity.toTestCaseParameterWrapper(); TestCaseParameterWrapper modelNode =modelEntity.toTestCaseParameterWrapper();
modelNode.setParent(parentNode); modelNode.setParent(parentNode==null?null:parentNode.getId());
tree.add(modelNode); tree.add(modelNode);
//添加模型包含的子模型 //添加模型包含的子模型
List<ModelEntity> children =modelEntity.getChildren(); List<ModelEntity> children =modelEntity.getChildren();
@ -59,7 +59,7 @@ public class ModelTestCaseParameterBuilder implements TestCaseParameterBuilder{
if(parameters!=null && parameters.size()>0) { if(parameters!=null && parameters.size()>0) {
for(ParameterEntity parameter : parameters) { for(ParameterEntity parameter : parameters) {
TestCaseParameterWrapper wrapper =parameter.toTestCaseParameterWrapper(); TestCaseParameterWrapper wrapper =parameter.toTestCaseParameterWrapper();
wrapper.setParent(modelNode); wrapper.setParent(modelNode==null?null:modelNode.getId());
tree.add(wrapper); tree.add(wrapper);
/* /*
if(ParameterType.INDICATOR.equals(parameter.getType())){ if(ParameterType.INDICATOR.equals(parameter.getType())){

14
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/controller/TestCaseParameterWebController.java

@ -1,5 +1,6 @@
package io.sc.engine.rule.server.testcase.controller; package io.sc.engine.rule.server.testcase.controller;
import io.sc.engine.rule.server.model.vo.ParameterValidatorVo;
import io.sc.engine.rule.server.testcase.entity.TestCaseEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseEntity;
import io.sc.engine.rule.server.testcase.entity.TestCaseParameterEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseParameterEntity;
import io.sc.engine.rule.server.testcase.repository.TestCaseParameterRepository; import io.sc.engine.rule.server.testcase.repository.TestCaseParameterRepository;
@ -7,7 +8,9 @@ import io.sc.engine.rule.server.testcase.service.TestCaseParameterService;
import io.sc.engine.rule.server.testcase.vo.TestCaseParameterVo; import io.sc.engine.rule.server.testcase.vo.TestCaseParameterVo;
import io.sc.engine.rule.server.testcase.wrapper.TestCaseParameterWrapper; import io.sc.engine.rule.server.testcase.wrapper.TestCaseParameterWrapper;
import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -20,14 +23,13 @@ import java.util.List;
@Controller @Controller
@RequestMapping("/api/re/testCaseParameter") @RequestMapping("/api/re/testCaseParameter")
public class TestCaseParameterWebController extends RestCrudController<TestCaseParameterVo,TestCaseParameterEntity,String,TestCaseParameterRepository,TestCaseParameterService> { public class TestCaseParameterWebController extends RestCrudController<TestCaseParameterVo,TestCaseParameterEntity,String,TestCaseParameterRepository,TestCaseParameterService> {
@RequestMapping(value="isc/fetchData", method=RequestMethod.GET) @GetMapping("findByTestCase")
@ResponseBody @ResponseBody
public List<TestCaseParameterWrapper> fetchData(HttpServletRequest request,HttpServletResponse response, TestCaseParameterEntity queryExampleEntity) throws Exception { public List<TestCaseParameterWrapper> findByTestCase(@RequestParam(name="testCaseId",required = false)String testCaseId) throws Exception {
TestCaseEntity testCase =queryExampleEntity.getTestCase(); if(!StringUtils.hasText(testCaseId)){
if(testCase!=null) { return Collections.emptyList();
return service.buildTestCaseParameterWrappers(testCase.getId());
} }
return Collections.emptyList(); return service.buildTestCaseParameterWrappers(testCaseId);
} }
@RequestMapping(value="isc/updateData", method=RequestMethod.POST) @RequestMapping(value="isc/updateData", method=RequestMethod.POST)

21
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/controller/TestCaseWebController.java

@ -1,26 +1,37 @@
package io.sc.engine.rule.server.testcase.controller; package io.sc.engine.rule.server.testcase.controller;
import io.sc.engine.rule.server.model.vo.ParameterVo;
import io.sc.engine.rule.server.testcase.entity.TestCaseEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseEntity;
import io.sc.engine.rule.server.testcase.repository.TestCaseRepository; import io.sc.engine.rule.server.testcase.repository.TestCaseRepository;
import io.sc.engine.rule.server.testcase.service.TestCaseService; import io.sc.engine.rule.server.testcase.service.TestCaseService;
import io.sc.engine.rule.server.testcase.vo.TestCaseVo; import io.sc.engine.rule.server.testcase.vo.TestCaseVo;
import io.sc.engine.rule.server.testcase.wrapper.TestCaseWrapper; import io.sc.engine.rule.server.testcase.wrapper.TestCaseWrapper;
import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.orm.service.support.QueryResult; import io.sc.platform.orm.service.support.QueryResult;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.List;
@Controller @Controller
@RequestMapping("/re/testCase") @RequestMapping("/api/re/testCase")
public class TestCaseWebController extends RestCrudController<TestCaseVo,TestCaseEntity,String,TestCaseRepository,TestCaseService> { public class TestCaseWebController extends RestCrudController<TestCaseVo,TestCaseEntity,String,TestCaseRepository,TestCaseService> {
@RequestMapping(value="findByOwnerId", method=RequestMethod.GET)
@ResponseBody
public Page<TestCaseVo> findByOwnerId(@RequestParam(name="ownerId",required = false)String ownerId, QueryParameter queryParameter) throws Exception {
if(!StringUtils.hasText(ownerId)){
return QueryResult.emptyPage();
}
return EntityVoUtil.toVo(service.findByOwnerId(ownerId,queryParameter));
}
@RequestMapping(value="isc/fetchAll", method=RequestMethod.GET) @RequestMapping(value="isc/fetchAll", method=RequestMethod.GET)
@ResponseBody @ResponseBody
public Page<TestCaseWrapper> fetchAll(HttpServletRequest request,HttpServletResponse response,TestCaseEntity queryExampleEntity) throws Exception{ public Page<TestCaseWrapper> fetchAll(HttpServletRequest request,HttpServletResponse response,TestCaseEntity queryExampleEntity) throws Exception{

10
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/entity/ResourceTestCaseEntity.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.enums.TestCaseOwnerType; import io.sc.engine.rule.core.enums.TestCaseOwnerType;
import io.sc.engine.rule.server.resource.entity.ResourceEntity; import io.sc.engine.rule.server.resource.entity.ResourceEntity;
import io.sc.engine.rule.server.testcase.vo.ResourceTestCaseVo; import io.sc.engine.rule.server.testcase.vo.ResourceTestCaseVo;
import io.sc.engine.rule.server.testcase.vo.TestCaseVo;
import io.sc.platform.orm.DeepClone; import io.sc.platform.orm.DeepClone;
import io.sc.platform.orm.IdClearable; import io.sc.platform.orm.IdClearable;
@ -23,6 +24,15 @@ public class ResourceTestCaseEntity extends TestCaseEntity implements DeepClone,
@JoinColumn(name="OWNER_ID_") @JoinColumn(name="OWNER_ID_")
protected ResourceEntity owner; protected ResourceEntity owner;
@Override
public void toVo(TestCaseVo vo) {
if(vo!=null && vo instanceof ResourceTestCaseVo){
super.toVo(vo);
ResourceTestCaseVo resourceTestCaseVo =(ResourceTestCaseVo)vo;
resourceTestCaseVo.setOwner(this.getOwner()==null?null:this.getOwner().getId());
}
}
@Override @Override
public ResourceTestCaseVo toVo() { public ResourceTestCaseVo toVo() {
ResourceTestCaseVo vo =new ResourceTestCaseVo(); ResourceTestCaseVo vo =new ResourceTestCaseVo();

15
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/entity/TestCaseEntity.java

@ -77,6 +77,21 @@ public class TestCaseEntity extends AuditorEntity<TestCaseVo> implements DeepClo
@OneToMany(mappedBy="testCase",cascade= {CascadeType.PERSIST}) @OneToMany(mappedBy="testCase",cascade= {CascadeType.PERSIST})
protected List<TestCaseParameterEntity> parameters =new ArrayList<TestCaseParameterEntity>(); protected List<TestCaseParameterEntity> parameters =new ArrayList<TestCaseParameterEntity>();
@Override
public void toVo(TestCaseVo vo) {
if(vo!=null) {
super.toVo(vo);
vo.setOwnerType(this.getOwnerType());
vo.setOwnerId(this.getOwnerId());
vo.setId(this.getId());
vo.setName(this.getName());
vo.setDescription(this.getDescription());
vo.setOrder(this.getOrder());
vo.setLastTestDate(this.getLastTestDate());
vo.setTestResult(this.getTestResult());
}
}
@Override @Override
public TestCaseVo toVo() { public TestCaseVo toVo() {
TestCaseVo vo =new TestCaseVo(); TestCaseVo vo =new TestCaseVo();

1
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/repository/TestCaseParameterRepository.java

@ -2,6 +2,7 @@ package io.sc.engine.rule.server.testcase.repository;
import java.util.List; import java.util.List;
import io.sc.engine.rule.server.model.entity.ParameterValidatorEntity;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import io.sc.engine.rule.server.testcase.entity.TestCaseParameterEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseParameterEntity;

6
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/repository/TestCaseRepository.java

@ -1,7 +1,13 @@
package io.sc.engine.rule.server.testcase.repository; package io.sc.engine.rule.server.testcase.repository;
import io.sc.engine.rule.server.model.entity.ParameterEntity;
import io.sc.engine.rule.server.testcase.entity.TestCaseEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseEntity;
import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface TestCaseRepository extends DaoRepository<TestCaseEntity,String>{ public interface TestCaseRepository extends DaoRepository<TestCaseEntity,String>{

12
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/TestCaseService.java

@ -1,5 +1,6 @@
package io.sc.engine.rule.server.testcase.service; package io.sc.engine.rule.server.testcase.service;
import io.sc.engine.rule.server.model.entity.ParameterEntity;
import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryParameter;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import io.sc.engine.rule.server.testcase.entity.TestCaseEntity; import io.sc.engine.rule.server.testcase.entity.TestCaseEntity;
@ -7,7 +8,18 @@ import io.sc.engine.rule.server.testcase.repository.TestCaseRepository;
import io.sc.engine.rule.server.testcase.wrapper.TestCaseWrapper; import io.sc.engine.rule.server.testcase.wrapper.TestCaseWrapper;
import io.sc.platform.orm.service.DaoService; import io.sc.platform.orm.service.DaoService;
import java.util.List;
public interface TestCaseService extends DaoService<TestCaseEntity, String, TestCaseRepository>{ public interface TestCaseService extends DaoService<TestCaseEntity, String, TestCaseRepository>{
/**
* 通过所有者ID查找测试用例
* @param ownerId 所有者ID
* @param queryParameter 查询参数
* @return 测试用例列表
* @throws Exception 违例
*/
public Page<TestCaseEntity> findByOwnerId(String ownerId,QueryParameter queryParameter) throws Exception;
/** /**
* 深度克隆测试用例实体 * 深度克隆测试用例实体
* @param testCaseId 试用例实体ID * @param testCaseId 试用例实体ID

11
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java

@ -9,6 +9,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import io.sc.platform.orm.service.support.CriteriaBuilder;
import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryParameter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -63,6 +64,16 @@ public class TestCaseServiceImpl extends DaoServiceImpl<TestCaseEntity, String,
@Autowired private LibTestCaseRepository libTestCaseRepository; @Autowired private LibTestCaseRepository libTestCaseRepository;
@Autowired private JdbcTemplate jdbcTemplate; @Autowired private JdbcTemplate jdbcTemplate;
@Override
public Page<TestCaseEntity> findByOwnerId(String ownerId,QueryParameter queryParameter) throws Exception {
CriteriaBuilder<TestCaseEntity> cb =new CriteriaBuilder();
queryParameter.addCriteria(cb.and(
cb.equals("ownerId",ownerId)
));
//queryParameter.addCriterias(new CriteriaBuilder().equals("ownerId",ownerId).getCriteria());
return this.query(queryParameter);
}
@Override @Override
public TestCaseEntity add(TestCaseEntity entity) throws Exception { public TestCaseEntity add(TestCaseEntity entity) throws Exception {
Integer nextOrder =1; Integer nextOrder =1;

6
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/wrapper/TestCaseParameterWrapper.java

@ -14,7 +14,7 @@ import io.sc.engine.rule.server.testcase.entity.TestCaseParameterEntity;
*/ */
public class TestCaseParameterWrapper extends TestCaseParameter{ public class TestCaseParameterWrapper extends TestCaseParameter{
private String testCaseId; //测试用例ID private String testCaseId; //测试用例ID
private TestCaseParameterWrapper parent; //父 private String parent; //父ID
private String category; //分类(M:模型;P:参数) private String category; //分类(M:模型;P:参数)
private String name; //参数名称 private String name; //参数名称
private ParameterType parameterType; //参数类型(当测试的是模型时) private ParameterType parameterType; //参数类型(当测试的是模型时)
@ -45,11 +45,11 @@ public class TestCaseParameterWrapper extends TestCaseParameter{
return entity; return entity;
} }
public TestCaseParameterWrapper getParent() { public String getParent() {
return parent; return parent;
} }
public void setParent(TestCaseParameterWrapper parent) { public void setParent(String parent) {
this.parent = parent; this.parent = parent;
} }

11
io.sc.engine.rule.server/src/main/resources/liquibase/RE_1.0.0_20220515__Rule Engine Database Schema DDL.xml

@ -589,6 +589,9 @@
<!-- 测试用例表 --> <!-- 测试用例表 -->
<createTable tableName="RE_TEST_CASE" remarks="测试用例表"> <createTable tableName="RE_TEST_CASE" remarks="测试用例表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID_">
<constraints primaryKey="true"/>
</column>
<column name="OWNER_TYPE_" type="NVARCHAR(20)" remarks="归属者类型"/> <column name="OWNER_TYPE_" type="NVARCHAR(20)" remarks="归属者类型"/>
<column name="OWNER_ID_" type="NVARCHAR(36)" remarks="归属者ID"> <column name="OWNER_ID_" type="NVARCHAR(36)" remarks="归属者ID">
<constraints nullable="false"/> <constraints nullable="false"/>
@ -596,10 +599,6 @@
<column name="OWNER_CODE_" type="NVARCHAR(255)" remarks="归属者代码"/> <column name="OWNER_CODE_" type="NVARCHAR(255)" remarks="归属者代码"/>
<column name="OWNER_NAME_" type="NVARCHAR(255)" remarks="归属者名称"/> <column name="OWNER_NAME_" type="NVARCHAR(255)" remarks="归属者名称"/>
<column name="OWNER_VERSION_" type="INTEGER" remarks="归属者版本"/> <column name="OWNER_VERSION_" type="INTEGER" remarks="归属者版本"/>
<column name="ID_" type="NVARCHAR(36)" remarks="ID_">
<constraints primaryKey="true"/>
</column>
<column name="NAME_" type="NVARCHAR(255)" remarks="名称"/> <column name="NAME_" type="NVARCHAR(255)" remarks="名称"/>
<column name="DESCRIPTION_" type="NVARCHAR(255)" remarks="描述"/> <column name="DESCRIPTION_" type="NVARCHAR(255)" remarks="描述"/>
<column name="ORDER_" type="INTEGER" remarks="排序"/> <column name="ORDER_" type="INTEGER" remarks="排序"/>
@ -631,8 +630,8 @@
<column name="CODE_" type="NVARCHAR(255)" remarks="引用的参数代码"/> <column name="CODE_" type="NVARCHAR(255)" remarks="引用的参数代码"/>
<column name="IS_SKIP_CHECK_" type="SMALLINT" remarks="是否跳过检查"/> <column name="IS_SKIP_CHECK_" type="SMALLINT" remarks="是否跳过检查"/>
<column name="INPUT_VALUE_" type="CLOB" remarks="输入值"/> <column name="INPUT_VALUE_" type="CLOB" remarks="输入值"/>
<column name="EXPECT_VALUE" type="CLOB" remarks="期望值"/> <column name="EXPECT_VALUE_" type="CLOB" remarks="期望值"/>
<column name="RESULT_VALUE" type="CLOB" remarks="结果值"/> <column name="RESULT_VALUE_" type="CLOB" remarks="结果值"/>
<column name="TEST_RESULT_" type="CLOB" remarks="测试结果"/> <column name="TEST_RESULT_" type="CLOB" remarks="测试结果"/>
<!-- 审计字段 --> <!-- 审计字段 -->

4
io.sc.platform.core.frontend/template-project/package.json

@ -1,6 +1,6 @@
{ {
"name": "platform-core", "name": "platform-core",
"version": "8.1.149", "version": "8.1.152",
"description": "前端核心包,用于快速构建前端的脚手架", "description": "前端核心包,用于快速构建前端的脚手架",
"private": false, "private": false,
"keywords": [], "keywords": [],
@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.149", "platform-core": "8.1.152",
"quasar": "2.14.5", "quasar": "2.14.5",
"tailwindcss": "3.4.0", "tailwindcss": "3.4.0",
"vue": "3.4.3", "vue": "3.4.3",

2
io.sc.platform.core.frontend/template-project/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

2
io.sc.platform.core.frontend/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

2
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties

@ -204,3 +204,5 @@ isMinValueInclude=Is Minimum Value Include
maxValue=Maximum Value maxValue=Maximum Value
isMaxValueInclude=Is Maximum Value Include isMaxValueInclude=Is Maximum Value Include
RegExp=Regular Expression RegExp=Regular Expression
execute=Execute
executeAll=Execute All

2
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties

@ -204,3 +204,5 @@ isMinValueInclude=\u662F\u5426\u5305\u542B\u6700\u5C0F\u503C
maxValue=\u6700\u5927\u503C maxValue=\u6700\u5927\u503C
isMaxValueInclude=\u662F\u5426\u5305\u542B\u6700\u5927\u503C isMaxValueInclude=\u662F\u5426\u5305\u542B\u6700\u5927\u503C
RegExp=\u6B63\u5247\u8868\u9054\u5F0F RegExp=\u6B63\u5247\u8868\u9054\u5F0F
execute=\u57F7\u884C
executeAll=\u57F7\u884C\u6240\u6709

2
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties

@ -204,3 +204,5 @@ isMinValueInclude=\u662F\u5426\u5305\u542B\u6700\u5C0F\u503C
maxValue=\u6700\u5927\u503C maxValue=\u6700\u5927\u503C
isMaxValueInclude=\u662F\u5426\u5305\u542B\u6700\u5927\u503C isMaxValueInclude=\u662F\u5426\u5305\u542B\u6700\u5927\u503C
RegExp=\u6B63\u5219\u8868\u8FBE\u5F0F RegExp=\u6B63\u5219\u8868\u8FBE\u5F0F
execute=\u6267\u884C
executeAll=\u6267\u884C\u6240\u6709

204
io.sc.platform.developer.frontend/package.json

@ -1,105 +1,103 @@
{ {
"name": "io.sc.platform.developer.frontend", "name": "io.sc.platform.developer.frontend",
"version": "8.1.28", "version": "8.1.29",
"description": "", "description": "",
"private": false, "private": false,
"keywords": [ "keywords": [],
"author": "",
], "license": "ISC",
"author": "", "scripts": {
"license": "ISC", "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml",
"scripts": { "dev": "nodemon",
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
"dev": "nodemon", "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
"serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
"build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", "sync": "platform sync"
"prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", },
"sync": "platform sync" "engines": {
}, "node": ">=18",
"engines": { "pnpm": ">=7"
"node": ">=18", },
"pnpm": ">=7" "publishConfig": {
}, "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
"publishConfig": { "access": "public"
"registry": "http://nexus.sc.io:8000/repository/npm-releases/", },
"access": "public" "devDependencies": {
}, "@babel/core": "7.23.7",
"devDependencies": { "@babel/preset-env": "7.23.7",
"@babel/core": "7.23.7", "@babel/preset-typescript": "7.23.3",
"@babel/preset-env": "7.23.7", "@babel/plugin-transform-class-properties": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/plugin-transform-object-rest-spread": "7.23.4",
"@babel/plugin-transform-class-properties": "7.23.3", "@quasar/app-webpack": "3.12.1",
"@babel/plugin-transform-object-rest-spread": "7.23.4", "@quasar/cli": "2.3.0",
"@quasar/app-webpack": "3.12.1", "@types/mockjs": "1.0.10",
"@quasar/cli": "2.3.0", "@types/node": "20.10.6",
"@types/mockjs": "1.0.10", "@typescript-eslint/eslint-plugin": "6.17.0",
"@types/node": "20.10.6", "@typescript-eslint/parser": "6.17.0",
"@typescript-eslint/eslint-plugin": "6.17.0", "@vue/compiler-sfc": "3.4.3",
"@typescript-eslint/parser": "6.17.0", "@webpack-cli/serve": "2.0.5",
"@vue/compiler-sfc": "3.4.3", "autoprefixer": "10.4.16",
"@webpack-cli/serve": "2.0.5", "babel-loader": "9.1.3",
"autoprefixer": "10.4.16", "clean-webpack-plugin": "4.0.0",
"babel-loader": "9.1.3", "copy-webpack-plugin": "11.0.0",
"clean-webpack-plugin": "4.0.0", "cross-env": "7.0.3",
"copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1",
"cross-env": "7.0.3", "eslint": "8.56.0",
"css-loader": "6.8.1", "eslint-config-prettier": "9.1.0",
"eslint": "8.56.0", "eslint-plugin-prettier": "5.1.2",
"eslint-config-prettier": "9.1.0", "eslint-plugin-vue": "9.19.2",
"eslint-plugin-prettier": "5.1.2", "eslint-webpack-plugin": "4.0.1",
"eslint-plugin-vue": "9.19.2", "html-webpack-plugin": "5.6.0",
"eslint-webpack-plugin": "4.0.1", "json5": "2.2.3",
"html-webpack-plugin": "5.6.0", "mini-css-extract-plugin": "2.7.6",
"json5": "2.2.3", "nodemon": "3.0.2",
"mini-css-extract-plugin": "2.7.6", "postcss": "8.4.32",
"nodemon": "3.0.2", "postcss-import": "16.0.0",
"postcss": "8.4.32", "postcss-loader": "7.3.4",
"postcss-import": "16.0.0", "postcss-preset-env": "9.3.0",
"postcss-loader": "7.3.4", "prettier": "3.1.1",
"postcss-preset-env": "9.3.0", "sass": "1.69.7",
"prettier": "3.1.1", "sass-loader": "13.3.3",
"sass": "1.69.7", "typescript": "5.3.3",
"sass-loader": "13.3.3", "vue-loader": "17.4.2",
"typescript": "5.3.3", "webpack": "5.89.0",
"vue-loader": "17.4.2", "webpack-bundle-analyzer": "4.10.1",
"webpack": "5.89.0", "webpack-cli": "5.1.4",
"webpack-bundle-analyzer": "4.10.1", "webpack-dev-server": "4.15.1",
"webpack-cli": "5.1.4", "webpack-merge": "5.10.0",
"webpack-dev-server": "4.15.1", "@vue/babel-plugin-jsx": "1.1.5"
"webpack-merge": "5.10.0", },
"@vue/babel-plugin-jsx": "1.1.5" "dependencies": {
}, "@quasar/extras": "1.16.9",
"dependencies": { "@vueuse/core": "10.7.1",
"@quasar/extras": "1.16.9", "axios": "1.6.3",
"@vueuse/core": "10.7.1", "dayjs": "1.11.10",
"axios": "1.6.3", "echarts": "5.4.3",
"dayjs": "1.11.10", "exceljs": "4.4.0",
"echarts": "5.4.3", "file-saver": "2.0.5",
"exceljs": "4.4.0", "luckyexcel": "1.0.1",
"file-saver": "2.0.5", "mockjs": "1.1.0",
"luckyexcel": "1.0.1", "pinia": "2.1.7",
"mockjs": "1.1.0", "platform-core": "8.1.152",
"pinia": "2.1.7", "quasar": "2.14.5",
"platform-core": "8.1.149", "tailwindcss": "3.4.0",
"quasar": "2.14.2", "vue": "3.4.3",
"tailwindcss": "3.4.0", "vue-dompurify-html": "5.0.1",
"vue": "3.4.3", "vue-i18n": "9.8.0",
"vue-dompurify-html": "5.0.1", "vue-router": "4.2.5",
"vue-i18n": "9.8.0", "@codemirror/autocomplete": "6.11.1",
"vue-router": "4.2.5", "@codemirror/commands": "6.3.3",
"@codemirror/autocomplete": "6.11.1", "@codemirror/lang-html": "6.4.7",
"@codemirror/commands": "6.3.3", "@codemirror/lang-java": "6.0.1",
"@codemirror/lang-html": "6.4.7", "@codemirror/lang-javascript": "6.2.1",
"@codemirror/lang-java": "6.0.1", "@codemirror/lang-json": "6.0.1",
"@codemirror/lang-javascript": "6.2.1", "@codemirror/lang-sql": "6.5.4",
"@codemirror/lang-json": "6.0.1", "@codemirror/lang-xml": "6.0.2",
"@codemirror/lang-sql": "6.5.4", "@codemirror/language": "6.10.0",
"@codemirror/lang-xml": "6.0.2", "@codemirror/search": "6.5.5",
"@codemirror/language": "6.10.0", "@codemirror/state": "6.4.0",
"@codemirror/search": "6.5.5", "@codemirror/view": "6.23.0",
"@codemirror/state": "6.4.0", "codemirror": "6.0.1",
"@codemirror/view": "6.23.0", "vue-codemirror6": "1.2.0"
"codemirror": "6.0.1", }
"vue-codemirror6": "1.2.0"
}
} }

104
io.sc.platform.developer.frontend/src/components/index.ts

@ -2,60 +2,60 @@
* , * ,
*/ */
import Help from '@/views/Help.vue'; import component_developer_Help from '@/views/Help.vue';
import Autoconfigure from '@/views/springboot/Autoconfigure.vue'; import component_developer_springboot_Autoconfigure from '@/views/springboot/Autoconfigure.vue';
import Bean from '@/views/springboot/Bean.vue'; import component_developer_springboot_Bean from '@/views/springboot/Bean.vue';
import Environment from '@/views/springboot/Environment.vue'; import component_developer_springboot_Environment from '@/views/springboot/Environment.vue';
import Mapping from '@/views/springboot/Mapping.vue'; import component_developer_springboot_Mapping from '@/views/springboot/Mapping.vue';
import ApplicationProperties from '@/views/plugin/ApplicationProperties.vue'; import component_developer_plugin_ApplicationProperties from '@/views/plugin/ApplicationProperties.vue';
import Components from '@/views/plugin/Components.vue'; import component_developer_plugin_Components from '@/views/plugin/Components.vue';
import Directories from '@/views/plugin/Directories.vue'; import component_developer_plugin_Directories from '@/views/plugin/Directories.vue';
import FrontendModule from '@/views/plugin/FrontendModule.vue'; import component_developer_plugin_FrontendModule from '@/views/plugin/FrontendModule.vue';
import FrontendRoutes from '@/views/plugin/FrontendRoutes.vue'; import component_developer_plugin_FrontendRoutes from '@/views/plugin/FrontendRoutes.vue';
import Initializer from '@/views/plugin/Initializer.vue'; import component_developer_plugin_Initializer from '@/views/plugin/Initializer.vue';
import JsonSerializers from '@/views/plugin/JsonSerializers.vue'; import component_developer_plugin_JsonSerializers from '@/views/plugin/JsonSerializers.vue';
import Menus from '@/views/plugin/Menus.vue'; import component_developer_plugin_Menus from '@/views/plugin/Menus.vue';
import Messages from '@/views/plugin/Messages.vue'; import component_developer_plugin_Messages from '@/views/plugin/Messages.vue';
import P6spy from '@/views/plugin/P6spy.vue'; import component_developer_plugin_P6spy from '@/views/plugin/P6spy.vue';
import Parameters from '@/views/plugin/Parameters.vue'; import component_developer_plugin_Parameters from '@/views/plugin/Parameters.vue';
import Repositories from '@/views/plugin/Repositories.vue'; import component_developer_plugin_Repositories from '@/views/plugin/Repositories.vue';
import Liquibase from '@/views/plugin/Liquibase.vue'; import component_developer_plugin_Liquibase from '@/views/plugin/Liquibase.vue';
import RestartProperties from '@/views/plugin/RestartProperties.vue'; import component_developer_plugin_RestartProperties from '@/views/plugin/RestartProperties.vue';
import Security from '@/views/plugin/Security.vue'; import component_developer_plugin_Security from '@/views/plugin/Security.vue';
import Ws from '@/views/plugin/Ws.vue'; import component_developer_plugin_Ws from '@/views/plugin/Ws.vue';
import Swagger from '@/views/plugin/Swagger.vue'; import component_developer_plugin_Swagger from '@/views/plugin/Swagger.vue';
import SystemProperties from '@/views/plugin/SystemProperties.vue'; import component_developer_plugin_SystemProperties from '@/views/plugin/SystemProperties.vue';
import importLiquibase from '@/views/backend/ImportLiquibase.vue'; import component_developer_backend_importLiquibase from '@/views/backend/ImportLiquibase.vue';
import exportLiquibase from '@/views/backend/ExportLiquibase.vue'; import component_developer_backend_exportLiquibase from '@/views/backend/ExportLiquibase.vue';
import Icons from '@/views/frontend/Icons.vue'; import component_developer_frontend_Icons from '@/views/frontend/Icons.vue';
const localComponents = { const localComponents = {
'component.developer.Help': Help, 'component.developer.Help': component_developer_Help,
'component.developer.springboot.Autoconfigure': Autoconfigure, 'component.developer.springboot.Autoconfigure': component_developer_springboot_Autoconfigure,
'component.developer.springboot.Bean': Bean, 'component.developer.springboot.Bean': component_developer_springboot_Bean,
'component.developer.springboot.Environment': Environment, 'component.developer.springboot.Environment': component_developer_springboot_Environment,
'component.developer.springboot.Mapping': Mapping, 'component.developer.springboot.Mapping': component_developer_springboot_Mapping,
'component.developer.plugin.ApplicationProperties': ApplicationProperties, 'component.developer.plugin.ApplicationProperties': component_developer_plugin_ApplicationProperties,
'component.developer.plugin.Components': Components, 'component.developer.plugin.Components': component_developer_plugin_Components,
'component.developer.plugin.Directories': Directories, 'component.developer.plugin.Directories': component_developer_plugin_Directories,
'component.developer.plugin.FrontendModule': FrontendModule, 'component.developer.plugin.FrontendModule': component_developer_plugin_FrontendModule,
'component.developer.plugin.FrontendRoutes': FrontendRoutes, 'component.developer.plugin.FrontendRoutes': component_developer_plugin_FrontendRoutes,
'component.developer.plugin.Initializer': Initializer, 'component.developer.plugin.Initializer': component_developer_plugin_Initializer,
'component.developer.plugin.JsonSerializers': JsonSerializers, 'component.developer.plugin.JsonSerializers': component_developer_plugin_JsonSerializers,
'component.developer.plugin.Menus': Menus, 'component.developer.plugin.Menus': component_developer_plugin_Menus,
'component.developer.plugin.Messages': Messages, 'component.developer.plugin.Messages': component_developer_plugin_Messages,
'component.developer.plugin.P6spy': P6spy, 'component.developer.plugin.P6spy': component_developer_plugin_P6spy,
'component.developer.plugin.Parameters': Parameters, 'component.developer.plugin.Parameters': component_developer_plugin_Parameters,
'component.developer.plugin.Repositories': Repositories, 'component.developer.plugin.Repositories': component_developer_plugin_Repositories,
'component.developer.plugin.Liquibase': Liquibase, 'component.developer.plugin.Liquibase': component_developer_plugin_Liquibase,
'component.developer.plugin.RestartProperties': RestartProperties, 'component.developer.plugin.RestartProperties': component_developer_plugin_RestartProperties,
'component.developer.plugin.Security': Security, 'component.developer.plugin.Security': component_developer_plugin_Security,
'component.developer.plugin.Ws': Ws, 'component.developer.plugin.Ws': component_developer_plugin_Ws,
'component.developer.plugin.Swagger': Swagger, 'component.developer.plugin.Swagger': component_developer_plugin_Swagger,
'component.developer.plugin.SystemProperties': SystemProperties, 'component.developer.plugin.SystemProperties': component_developer_plugin_SystemProperties,
'component.developer.backend.importLiquibase': importLiquibase, 'component.developer.backend.importLiquibase': component_developer_backend_importLiquibase,
'component.developer.backend.exportLiquibase': exportLiquibase, 'component.developer.backend.exportLiquibase': component_developer_backend_exportLiquibase,
'component.developer.frontend.Icons': Icons, 'component.developer.frontend.Icons': component_developer_frontend_Icons,
}; };
export default localComponents; export default localComponents;

4
io.sc.platform.developer.frontend/util-components-generator.cjs

@ -13,7 +13,7 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n'; content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n'; content +=' */\n\n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath; const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`; content +=`import ${componentName} from '${componentPath}';\n`;
} }
@ -21,7 +21,7 @@ for(const route of routesJson){
content +='\n'; content +='\n';
content +='const localComponents = { \n'; content +='const localComponents = { \n';
for(const route of routesJson){ for(const route of routesJson){
const componentName =route.component.substring(route.component.lastIndexOf('.')+1); const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`; content +=`'${route.component}': ${componentName},\n`;
} }
content +='}\n\n'; content +='}\n\n';

2
io.sc.platform.developer.frontend/webpack.config.common.cjs

@ -123,7 +123,7 @@ module.exports = {
toType: 'dir', toType: 'dir',
filter: async (resourcePath) => { filter: async (resourcePath) => {
// 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了 // 不复制 index.html 因为 index.html 已经由 HtmlWebpackPlugin 插件生成了
if (resourcePath.endsWith('index.html') || resourcePath.endsWith('.DS_Store')) { if (resourcePath.endsWith('/public/index.html') || resourcePath.endsWith('.DS_Store')) {
return false; return false;
} }
return true; return true;

1
io.sc.platform.developer.frontend/webpack.config.mf.cjs

@ -56,7 +56,6 @@ module.exports = {
'platform-core': { requiredVersion: deps['platform-core'], singleton: true }, 'platform-core': { requiredVersion: deps['platform-core'], singleton: true },
'quasar': { requiredVersion: deps['quasar'], singleton: true }, 'quasar': { requiredVersion: deps['quasar'], singleton: true },
'vue': { requiredVersion: deps['vue'], singleton: true }, 'vue': { requiredVersion: deps['vue'], singleton: true },
'vue-codemirror6': { requiredVersion: deps['vue-codemirror6'], singleton: true },
'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true },
'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true },
'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true },

2
io.sc.platform.developer.frontend/webpack.env.build.cjs

@ -38,7 +38,7 @@ module.exports = merge(common, mf, {
}, },
'codemirror':{ 'codemirror':{
name: 'codemirror', name: 'codemirror',
test: /[\\/]node_modules[\\/](codemirror|vue-codemirror6|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/, test: /[\\/]node_modules[\\/](codemirror|@codemirror[\\/]autocomplete|@codemirror[\\/]commands|@codemirror[\\/]lang-html|@codemirror[\\/]lang-java|@codemirror[\\/]lang-javascript|@codemirror[\\/]lang-json|@codemirror[\\/]lang-sql|@codemirror[\\/]lang-xml|@codemirror[\\/]language|@codemirror[\\/]search|@codemirror[\\/]state|@codemirror[\\/]view)[\\/]/,
priority: 20, priority: 20,
chunks: 'all', chunks: 'all',
enforce: true enforce: true

2
io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt

@ -636,7 +636,7 @@ subprojects {
frontendNpmInstall.dependsOn(frontendUpdatePackageJson) frontendNpmInstall.dependsOn(frontendUpdatePackageJson)
frontendNpmSync.dependsOn(frontendNpmInstall) frontendNpmSync.dependsOn(frontendNpmInstall)
frontendNpmBuild.dependsOn(frontendNpmSync) frontendNpmBuild.dependsOn(frontendNpmSync)
frontendNpmProd.dependsOn(frontendNpmInstall) frontendNpmProd.dependsOn(frontendNpmSync)
// 资源处理前进行前端模块的构建 // 资源处理前进行前端模块的构建
// 设置方式: 通过命令行 -D 传入目标环境参数 // 设置方式: 通过命令行 -D 传入目标环境参数

4
io.sc.platform.gradle/templates/pgp/setup/gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform # platform
########################################################### ###########################################################
platform_group=io.sc platform_group=io.sc
platform_version=8.1.28 platform_version=8.1.29
platform_plugin_version=8.1.13 platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.149 platform_core_frontend_version=8.1.152
########################################################### ###########################################################
# dependencies version # dependencies version

204
io.sc.platform.lcdp.frontend/package.json

@ -1,105 +1,103 @@
{ {
"name": "io.sc.platform.lcdp.frontend", "name": "io.sc.platform.lcdp.frontend",
"version": "8.1.28", "version": "8.1.29",
"description": "", "description": "",
"private": false, "private": false,
"keywords": [ "keywords": [],
"author": "",
], "license": "ISC",
"author": "", "scripts": {
"license": "ISC", "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml",
"scripts": { "dev": "nodemon",
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
"dev": "nodemon", "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
"serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
"build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", "sync": "platform sync"
"prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", },
"sync": "platform sync" "engines": {
}, "node": ">=18",
"engines": { "pnpm": ">=7"
"node": ">=18", },
"pnpm": ">=7" "publishConfig": {
}, "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
"publishConfig": { "access": "public"
"registry": "http://nexus.sc.io:8000/repository/npm-releases/", },
"access": "public" "devDependencies": {
}, "@babel/core": "7.23.7",
"devDependencies": { "@babel/preset-env": "7.23.7",
"@babel/core": "7.23.7", "@babel/preset-typescript": "7.23.3",
"@babel/preset-env": "7.23.7", "@babel/plugin-transform-class-properties": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/plugin-transform-object-rest-spread": "7.23.4",
"@babel/plugin-transform-class-properties": "7.23.3", "@quasar/app-webpack": "3.12.1",
"@babel/plugin-transform-object-rest-spread": "7.23.4", "@quasar/cli": "2.3.0",
"@quasar/app-webpack": "3.12.1", "@types/mockjs": "1.0.10",
"@quasar/cli": "2.3.0", "@types/node": "20.10.6",
"@types/mockjs": "1.0.10", "@typescript-eslint/eslint-plugin": "6.17.0",
"@types/node": "20.10.6", "@typescript-eslint/parser": "6.17.0",
"@typescript-eslint/eslint-plugin": "6.17.0", "@vue/compiler-sfc": "3.4.3",
"@typescript-eslint/parser": "6.17.0", "@webpack-cli/serve": "2.0.5",
"@vue/compiler-sfc": "3.4.3", "autoprefixer": "10.4.16",
"@webpack-cli/serve": "2.0.5", "babel-loader": "9.1.3",
"autoprefixer": "10.4.16", "clean-webpack-plugin": "4.0.0",
"babel-loader": "9.1.3", "copy-webpack-plugin": "11.0.0",
"clean-webpack-plugin": "4.0.0", "cross-env": "7.0.3",
"copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1",
"cross-env": "7.0.3", "eslint": "8.56.0",
"css-loader": "6.8.1", "eslint-config-prettier": "9.1.0",
"eslint": "8.56.0", "eslint-plugin-prettier": "5.1.2",
"eslint-config-prettier": "9.1.0", "eslint-plugin-vue": "9.19.2",
"eslint-plugin-prettier": "5.1.2", "eslint-webpack-plugin": "4.0.1",
"eslint-plugin-vue": "9.19.2", "html-webpack-plugin": "5.6.0",
"eslint-webpack-plugin": "4.0.1", "json5": "2.2.3",
"html-webpack-plugin": "5.6.0", "mini-css-extract-plugin": "2.7.6",
"json5": "2.2.3", "nodemon": "3.0.2",
"mini-css-extract-plugin": "2.7.6", "postcss": "8.4.32",
"nodemon": "3.0.2", "postcss-import": "16.0.0",
"postcss": "8.4.32", "postcss-loader": "7.3.4",
"postcss-import": "16.0.0", "postcss-preset-env": "9.3.0",
"postcss-loader": "7.3.4", "prettier": "3.1.1",
"postcss-preset-env": "9.3.0", "sass": "1.69.7",
"prettier": "3.1.1", "sass-loader": "13.3.3",
"sass": "1.69.7", "typescript": "5.3.3",
"sass-loader": "13.3.3", "vue-loader": "17.4.2",
"typescript": "5.3.3", "webpack": "5.89.0",
"vue-loader": "17.4.2", "webpack-bundle-analyzer": "4.10.1",
"webpack": "5.89.0", "webpack-cli": "5.1.4",
"webpack-bundle-analyzer": "4.10.1", "webpack-dev-server": "4.15.1",
"webpack-cli": "5.1.4", "webpack-merge": "5.10.0",
"webpack-dev-server": "4.15.1", "@vue/babel-plugin-jsx": "1.1.5"
"webpack-merge": "5.10.0", },
"@vue/babel-plugin-jsx": "1.1.5" "dependencies": {
}, "@codemirror/autocomplete": "6.11.1",
"dependencies": { "@codemirror/commands": "6.3.3",
"@codemirror/autocomplete": "6.11.1", "@codemirror/lang-html": "6.4.7",
"@codemirror/commands": "6.3.3", "@codemirror/lang-java": "6.0.1",
"@codemirror/lang-html": "6.4.7", "@codemirror/lang-javascript": "6.2.1",
"@codemirror/lang-java": "6.0.1", "@codemirror/lang-json": "6.0.1",
"@codemirror/lang-javascript": "6.2.1", "@codemirror/lang-sql": "6.5.4",
"@codemirror/lang-json": "6.0.1", "@codemirror/lang-xml": "6.0.2",
"@codemirror/lang-sql": "6.5.4", "@codemirror/language": "6.10.0",
"@codemirror/lang-xml": "6.0.2", "@codemirror/search": "6.5.5",
"@codemirror/language": "6.10.0", "@codemirror/state": "6.4.0",
"@codemirror/search": "6.5.5", "@codemirror/view": "6.23.0",
"@codemirror/state": "6.4.0", "@quasar/extras": "1.16.9",
"@codemirror/view": "6.23.0", "@vueuse/core": "10.7.1",
"@quasar/extras": "1.16.9", "axios": "1.6.3",
"@vueuse/core": "10.7.1", "codemirror": "6.0.1",
"axios": "1.6.3", "dayjs": "1.11.10",
"codemirror": "6.0.1", "echarts": "5.4.3",
"dayjs": "1.11.10", "exceljs": "4.4.0",
"echarts": "5.4.3", "file-saver": "2.0.5",
"exceljs": "4.4.0", "luckyexcel": "1.0.1",
"file-saver": "2.0.5", "mockjs": "1.1.0",
"luckyexcel": "1.0.1", "pinia": "2.1.7",
"mockjs": "1.1.0", "platform-core": "8.1.152",
"pinia": "2.1.7", "quasar": "2.14.5",
"platform-core": "8.1.149", "tailwindcss": "3.4.0",
"quasar": "2.14.2", "vue": "3.4.3",
"tailwindcss": "3.4.0", "vue-dompurify-html": "5.0.1",
"vue": "3.4.3", "vue-i18n": "9.8.0",
"vue-dompurify-html": "5.0.1", "vue-router": "4.2.5",
"vue-i18n": "9.8.0", "vue-codemirror6": "1.2.0"
"vue-router": "4.2.5", }
"vue-codemirror6": "1.2.0"
}
} }

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/404.html → io.sc.platform.lcdp.frontend/public/flowable/modeler/404.html

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/browserconfig.xml → io.sc.platform.lcdp.frontend/public/flowable/modeler/browserconfig.xml

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-cmmn/cmmn-draw.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/cmmn-draw.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-cmmn/cmmn-icons.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/cmmn-icons.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-cmmn/displaymodel.css → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.css

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-cmmn/displaymodel.html → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.html

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-cmmn/displaymodel.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-cmmn/displaymodel.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-dmn/displaymodel.css → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.css

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-dmn/displaymodel.html → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.html

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-dmn/displaymodel.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/displaymodel.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-dmn/dmn-draw.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/dmn-draw.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display-dmn/dmn-icons.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display-dmn/dmn-icons.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/.gitignore → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/.gitignore

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/Gruntfile.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/Gruntfile.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/Polyline.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/Polyline.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/bpmn-draw.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/bpmn-draw.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/bpmn-icons.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/bpmn-icons.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/displaymodel.css → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.css

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/displaymodel.html → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.html

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/displaymodel.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/displaymodel.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/jquery.qtip.min.css → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/jquery.qtip.min.css

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/jquery.qtip.min.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/jquery.qtip.min.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/package.json → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/package.json

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/display/raphael.min.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/display/raphael.min.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/flowable-header-custom.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/flowable-header-custom.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/flowable-toolbar-custom-actions.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/flowable-toolbar-custom-actions.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-assignment-controller.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-assignment-controller.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-custom-controllers.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-custom-controllers.js

0
io.sc.platform.lcdp.frontend/public/io.sc.platform.lcdp.frontend/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js → io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save