Browse Source

基础框架发布: 8.2.30

1) 支持 jxls 导出 excel

前端核心发布: 8.2.115
 1) 修改默认导出功能
main
wangshaoping 1 month ago
parent
commit
9b0b531d63
  1. 3
      README.adoc
  2. 2
      cips.frontend/package.json
  3. 2
      erm.frontend/package.json
  4. 6
      gradle.properties
  5. 2
      io.sc.engine.mv.frontend/package.json
  6. 2
      io.sc.engine.mv.frontend/src/views/config/binomial.vue
  7. 16
      io.sc.engine.mv.frontend/src/views/config/chiSquare.vue
  8. 2
      io.sc.engine.mv.frontend/src/views/config/cutOffPoint.vue
  9. 2
      io.sc.engine.mv.frontend/src/views/config/dataExtractor.vue
  10. 2
      io.sc.engine.mv.frontend/src/views/config/distribution.vue
  11. 2
      io.sc.engine.mv.frontend/src/views/config/executor.vue
  12. 2
      io.sc.engine.mv.frontend/src/views/config/model.vue
  13. 2
      io.sc.engine.mv.frontend/src/views/config/scale.vue
  14. 16
      io.sc.engine.mv.frontend/src/views/config/threshold.vue
  15. 2
      io.sc.engine.mv.frontend/src/views/result/Result.vue
  16. 2
      io.sc.engine.mv.frontend/src/views/sample/Sample.vue
  17. 2
      io.sc.engine.rule.frontend/package.json
  18. 2
      io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
  19. 2
      io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue
  20. 2
      io.sc.engine.rule.frontend/src/views/resources/designer/Addition.vue
  21. 2
      io.sc.engine.rule.frontend/src/views/resources/designer/Option.vue
  22. 2
      io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue
  23. 2
      io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
  24. 2
      io.sc.engine.rule.frontend/src/views/shared/TestcaseParameterGrid.vue
  25. 2
      io.sc.engine.rule.frontend/src/views/shared/Validator.vue
  26. 2
      io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue
  27. 2
      io.sc.engine.st.frontend/package.json
  28. 2
      io.sc.engine.st.frontend/src/views/DepFactor/DepFactor.vue
  29. 2
      io.sc.engine.st.frontend/src/views/DepFactor/DepFactorDefine.vue
  30. 2
      io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactor.vue
  31. 2
      io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactorDefine.vue
  32. 2
      io.sc.engine.st.frontend/src/views/Model/ModelDefine.vue
  33. 2
      io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactor.vue
  34. 2
      io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactorDefine.vue
  35. 2
      io.sc.engine.st.frontend/src/views/TestCase/TestCase.vue
  36. 2
      io.sc.platform.ai.frontend/package.json
  37. 2
      io.sc.platform.core.frontend/package.json
  38. 1
      io.sc.platform.core.frontend/src/platform/components/grid/ts/Init.ts
  39. 63
      io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts
  40. 89
      io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export2.ts
  41. 25
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/Main.vue
  42. 48
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue
  43. 3
      io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts
  44. 7
      io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts
  45. 2
      io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts
  46. 1
      io.sc.platform.core.frontend/src/platform/types/TagViewType.ts
  47. 10
      io.sc.platform.core.frontend/src/platform/views/Home.vue
  48. 4
      io.sc.platform.core.frontend/template-project/package.json
  49. 3
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties
  50. 3
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties
  51. 3
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties
  52. 2
      io.sc.platform.developer.doc/package.json
  53. 2
      io.sc.platform.developer.frontend/package.json
  54. 2
      io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue
  55. 2
      io.sc.platform.developer.frontend/src/views/plugin/Components.vue
  56. 2
      io.sc.platform.developer.frontend/src/views/plugin/Directories.vue
  57. 2
      io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue
  58. 2
      io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue
  59. 2
      io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue
  60. 2
      io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue
  61. 2
      io.sc.platform.developer.frontend/src/views/plugin/Liquibase.vue
  62. 2
      io.sc.platform.developer.frontend/src/views/plugin/Menus.vue
  63. 2
      io.sc.platform.developer.frontend/src/views/plugin/Messages.vue
  64. 2
      io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue
  65. 2
      io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue
  66. 2
      io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue
  67. 2
      io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue
  68. 2
      io.sc.platform.developer.frontend/src/views/plugin/Security.vue
  69. 2
      io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue
  70. 2
      io.sc.platform.developer.frontend/src/views/plugin/Ws.vue
  71. 2
      io.sc.platform.developer.frontend/src/views/springboot/Autoconfigure.vue
  72. 2
      io.sc.platform.developer.frontend/src/views/springboot/Bean.vue
  73. 2
      io.sc.platform.developer.frontend/src/views/springboot/Environment.vue
  74. 6
      io.sc.platform.developer.frontend/src/views/springboot/Mapping.vue
  75. BIN
      io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/jpa/entity/ProcessEntity.xlsx
  76. 2
      io.sc.platform.lcdp.frontend/package.json
  77. 4
      io.sc.platform.lcdp.frontend/src/components/index.ts
  78. 16
      io.sc.platform.lcdp.frontend/src/i18n/messages.json
  79. 18
      io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json
  80. 18
      io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json
  81. 4
      io.sc.platform.lcdp.frontend/src/menus/menus.json
  82. 10
      io.sc.platform.lcdp.frontend/src/routes/routes.json
  83. 58
      io.sc.platform.lcdp.frontend/src/views/export/ExportTemplate.vue
  84. 154
      io.sc.platform.lcdp.frontend/src/views/export/UniverTemplate.vue
  85. 74
      io.sc.platform.lcdp.frontend/src/views/jxls/AttachmentDialog.vue
  86. 126
      io.sc.platform.lcdp.frontend/src/views/jxls/Template.vue
  87. 10
      io.sc.platform.lcdp.frontend/src/views/theme/TagViewBar.vue
  88. 20
      io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue
  89. 18
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java
  90. 15
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExportExcelTemplateColumnController.java
  91. 22
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExportExcelTemplateController.java
  92. 136
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExportExcelTemplateColumnEntity.java
  93. 9
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/DataType.java
  94. 7
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExportExcelTemplateColumnRepository.java
  95. 8
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExportExcelTemplateRepository.java
  96. 9
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExportExcelTemplateColumnService.java
  97. 13
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExportExcelTemplateService.java
  98. 12
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExportExcelTemplateColumnServiceImpl.java
  99. 24
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExportExcelTemplateServiceImpl.java
  100. 82
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExportExcelTemplateColumnVo.java

3
README.adoc

@ -0,0 +1,3 @@
. 用户管理功能中,设置用户机构时,机构树直接展示已经选择的机构,新增“选入”、“选出”功能,用于修改机构
. 用户管理功能中,可修改设置用户所属默认机构,默认角色等
.

2
cips.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
erm.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

6
gradle.properties

@ -39,7 +39,7 @@ application_version=1.0.0
platform_group=io.sc platform_group=io.sc
platform_version=8.2.28 platform_version=8.2.28
platform_plugin_version=8.2.10 platform_plugin_version=8.2.10
platform_core_frontend_version=8.2.110 platform_core_frontend_version=8.2.115
########################################################### ###########################################################
# dependencies version # dependencies version
@ -71,9 +71,7 @@ jdbc_mysql_version=5.1.49
jdbc_oracle_version=19.23.0.0 jdbc_oracle_version=19.23.0.0
jib_version=3.3.2 jib_version=3.3.2
jjwt_version=0.9.1 jjwt_version=0.9.1
jxls_jexcel_version=1.0.7 jxls_version=2.14.0
jxls_poi_version=1.0.15
jxls_version=2.4.6
kotlin_stdlib_version=1.9.25 kotlin_stdlib_version=1.9.25
manifold_version=2025.1.24 manifold_version=2025.1.24
mybatis_version=3.5.14 mybatis_version=3.5.14

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

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
io.sc.engine.mv.frontend/src/views/config/binomial.vue

@ -10,7 +10,7 @@
:pageable="false" :pageable="false"
:sort-by="['significanceLevel']" :sort-by="['significanceLevel']"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view']"
:columns="[ :columns="[
{ width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') }, { width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ width: 100, name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') }, { width: 100, name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },

16
io.sc.engine.mv.frontend/src/views/config/chiSquare.vue

@ -13,21 +13,7 @@
group-by-field="dof" group-by-field="dof"
group-start-open="none" group-start-open="none"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="[ :toolbar-actions="['refresh', 'separator', 'expand', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view']"
'refresh',
'separator',
'expand',
'separator',
'add',
'edit',
'remove',
'separator',
'resetDefaultValues',
'separator',
'view',
'separator',
'export',
]"
:columns="[ :columns="[
{ width: 100, name: 'dof', label: $t('io.sc.engine.mv.config.chiSquare.grid.entity.dof') }, { width: 100, name: 'dof', label: $t('io.sc.engine.mv.config.chiSquare.grid.entity.dof') },
{ width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.chiSquare.grid.entity.significanceLevel') }, { width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.chiSquare.grid.entity.significanceLevel') },

2
io.sc.engine.mv.frontend/src/views/config/cutOffPoint.vue

@ -9,7 +9,7 @@
:data-url="Environment.apiContextPath('/api/mv/configure/cutOffPoint')" :data-url="Environment.apiContextPath('/api/mv/configure/cutOffPoint')"
:pageable="false" :pageable="false"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view']"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('io.sc.engine.mv.config.cutOffPoint.grid.entity.name') }, { width: '100%', name: 'name', label: $t('io.sc.engine.mv.config.cutOffPoint.grid.entity.name') },
{ width: 100, name: 'from', label: $t('io.sc.engine.mv.config.cutOffPoint.grid.entity.from') }, { width: 100, name: 'from', label: $t('io.sc.engine.mv.config.cutOffPoint.grid.entity.from') },

2
io.sc.engine.mv.frontend/src/views/config/dataExtractor.vue

@ -33,8 +33,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 100, name: 'name', label: $t('name') }, { width: 100, name: 'name', label: $t('name') },

2
io.sc.engine.mv.frontend/src/views/config/distribution.vue

@ -13,7 +13,7 @@
group-by-field="modelName" group-by-field="modelName"
group-start-open="none" group-start-open="none"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'expand', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'expand', 'separator', 'add', 'edit', 'remove', 'separator', 'view']"
:columns="[ :columns="[
{ width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.distribution.grid.entity.modelId') }, { width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.distribution.grid.entity.modelId') },
{ width: '100%', name: 'modelName', label: $t('io.sc.engine.mv.config.distribution.grid.entity.modelName') }, { width: '100%', name: 'modelName', label: $t('io.sc.engine.mv.config.distribution.grid.entity.modelName') },

2
io.sc.engine.mv.frontend/src/views/config/executor.vue

@ -9,7 +9,7 @@
:pageable="false" :pageable="false"
:sort-by="['order']" :sort-by="['order']"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ width: 80, name: 'order', label: $t('order'), align: 'right' }, { width: 80, name: 'order', label: $t('order'), align: 'right' },
{ width: 280, name: 'nameI18nKey', label: $t('name'), sortable: false, format: Formater.i18n() }, { width: 280, name: 'nameI18nKey', label: $t('name'), sortable: false, format: Formater.i18n() },

2
io.sc.engine.mv.frontend/src/views/config/model.vue

@ -24,8 +24,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.model.grid.entity.modelId') }, { width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.model.grid.entity.modelId') },

2
io.sc.engine.mv.frontend/src/views/config/scale.vue

@ -11,7 +11,7 @@
:pageable="false" :pageable="false"
:sort-by="['order']" :sort-by="['order']"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view']"
:columns="[ :columns="[
{ width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.scale.grid.entity.modelId') }, { width: 150, name: 'modelId', label: $t('io.sc.engine.mv.config.scale.grid.entity.modelId') },
{ width: '100%', name: 'modelName', label: $t('io.sc.engine.mv.config.scale.grid.entity.modelName') }, { width: '100%', name: 'modelName', label: $t('io.sc.engine.mv.config.scale.grid.entity.modelName') },

16
io.sc.engine.mv.frontend/src/views/config/threshold.vue

@ -12,21 +12,7 @@
group-by-field="name" group-by-field="name"
group-start-open="none" group-start-open="none"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="[ :toolbar-actions="['refresh', 'separator', 'expand', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view']"
'refresh',
'separator',
'expand',
'separator',
'add',
'edit',
'remove',
'separator',
'resetDefaultValues',
'separator',
'view',
'separator',
'export',
]"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('io.sc.engine.mv.config.threshold.grid.entity.name') }, { width: '100%', name: 'name', label: $t('io.sc.engine.mv.config.threshold.grid.entity.name') },
{ width: 120, name: 'level', label: $t('io.sc.engine.mv.config.threshold.grid.entity.level'), align: 'right' }, { width: 120, name: 'level', label: $t('io.sc.engine.mv.config.threshold.grid.entity.level'), align: 'right' },

2
io.sc.engine.mv.frontend/src/views/result/Result.vue

@ -61,8 +61,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 150, name: 'validateDate', label: $t('io.sc.engine.mv.result.grid.entity.validateDate') }, { width: 150, name: 'validateDate', label: $t('io.sc.engine.mv.result.grid.entity.validateDate') },

2
io.sc.engine.mv.frontend/src/views/sample/Sample.vue

@ -47,8 +47,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 140, name: 'customId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customId') }, { width: 140, name: 'customId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customId') },

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

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue

@ -99,8 +99,6 @@
}, },
}, },
], ],
'separator',
'export',
]" ]"
:query-form-cols-num="6" :query-form-cols-num="6"
:query-form-fields="[ :query-form-fields="[

2
io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue

@ -63,8 +63,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ {

2
io.sc.engine.rule.frontend/src/views/resources/designer/Addition.vue

@ -44,8 +44,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ {

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

@ -44,8 +44,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 60, name: 'order', label: $t('order'), align: 'right', showIf: false }, { width: 60, name: 'order', label: $t('order'), align: 'right', showIf: false },

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

@ -163,8 +163,6 @@
...templateImportAndExportManager.getToolbarAction(), ...templateImportAndExportManager.getToolbarAction(),
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 300, name: 'name', label: $t('name') }, { width: 300, name: 'name', label: $t('name') },

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

@ -89,8 +89,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 80, name: 'enable', label: $t('isEnable'), align: 'center', sortable: false, format: Formater.enableTag() }, { width: 80, name: 'enable', label: $t('isEnable'), align: 'center', sortable: false, format: Formater.enableTag() },

2
io.sc.engine.rule.frontend/src/views/shared/TestcaseParameterGrid.vue

@ -57,8 +57,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('name'), sortable: false }, { width: '100%', name: 'name', label: $t('name'), sortable: false },

2
io.sc.engine.rule.frontend/src/views/shared/Validator.vue

@ -38,8 +38,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 60, name: 'order', label: $t('order'), sortable: false, align: 'right' }, { width: 60, name: 'order', label: $t('order'), sortable: false, align: 'right' },

2
io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue

@ -125,8 +125,6 @@
], ],
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 150, name: 'resourceCode', label: $t('code'), showIf: false }, { width: 150, name: 'resourceCode', label: $t('code'), showIf: false },

2
io.sc.engine.st.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
io.sc.engine.st.frontend/src/views/DepFactor/DepFactor.vue

@ -42,8 +42,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 60, name: 'year', label: t('year'), align: 'right' }, { width: 60, name: 'year', label: t('year'), align: 'right' },

2
io.sc.engine.st.frontend/src/views/DepFactor/DepFactorDefine.vue

@ -75,8 +75,6 @@
'remove', 'remove',
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('name') }, { width: '100%', name: 'name', label: $t('name') },

2
io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactor.vue

@ -42,8 +42,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 60, name: 'year', label: t('year'), align: 'right' }, { width: 60, name: 'year', label: t('year'), align: 'right' },

2
io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactorDefine.vue

@ -75,8 +75,6 @@
'remove', 'remove',
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('name') }, { width: '100%', name: 'name', label: $t('name') },

2
io.sc.engine.st.frontend/src/views/Model/ModelDefine.vue

@ -40,8 +40,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 200, name: 'name', label: $t('name') }, { width: 200, name: 'name', label: $t('name') },

2
io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactor.vue

@ -79,8 +79,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 60, name: 'year', label: t('year'), align: 'right' }, { width: 60, name: 'year', label: t('year'), align: 'right' },

2
io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactorDefine.vue

@ -38,8 +38,6 @@
}, },
'separator', 'separator',
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: '100%', name: 'name', label: $t('name') }, { width: '100%', name: 'name', label: $t('name') },

2
io.sc.engine.st.frontend/src/views/TestCase/TestCase.vue

@ -33,8 +33,6 @@
}, },
}, },
'view', 'view',
'separator',
'export',
]" ]"
:columns="[ :columns="[
{ width: 160, name: 'name', label: $t('name') }, { width: 160, name: 'name', label: $t('name') },

2
io.sc.platform.ai.frontend/package.json

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
io.sc.platform.core.frontend/package.json

@ -1,6 +1,6 @@
{ {
"name": "platform-core", "name": "platform-core",
"version": "8.2.110", "version": "8.2.115",
"description": "前端核心包,用于快速构建前端的脚手架", "description": "前端核心包,用于快速构建前端的脚手架",
"//main": "库的主文件", "//main": "库的主文件",
"main": "dist/platform-core.js", "main": "dist/platform-core.js",

1
io.sc.platform.core.frontend/src/platform/components/grid/ts/Init.ts

@ -25,6 +25,7 @@ export class Init {
addDataUrl: { type: String, default: '' }, // 新增数据url addDataUrl: { type: String, default: '' }, // 新增数据url
editDataUrl: { type: String, default: '' }, // 修改数据url editDataUrl: { type: String, default: '' }, // 修改数据url
removeDataUrl: { type: String, default: '' }, // 删除数据url removeDataUrl: { type: String, default: '' }, // 删除数据url
exportDataUrl: { type: String, default: '' }, // 导出数据url
customFetch: { type: Function, default: undefined }, // 自定义获取数据函数,若表格内置的查询参数或方式(GET、POST)等不满足使用场景,可使用该函数自定义进行查询,只需返回的结果结构与内置查询一致即可。 customFetch: { type: Function, default: undefined }, // 自定义获取数据函数,若表格内置的查询参数或方式(GET、POST)等不满足使用场景,可使用该函数自定义进行查询,只需返回的结果结构与内置查询一致即可。
dense: { type: Boolean, default: undefined }, // 表格整体紧凑模式 dense: { type: Boolean, default: undefined }, // 表格整体紧凑模式
denseHeader: { type: Boolean, default: undefined }, // 表格列标题紧凑模式 denseHeader: { type: Boolean, default: undefined }, // 表格列标题紧凑模式

63
io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts

@ -1,5 +1,4 @@
import { $t, axios, NotifyManager, Tools } from '@/platform'; import { $t, axios, Downloader } from '@/platform';
import { exportFile } from 'quasar';
import { PropsType, TableType } from '../../index'; import { PropsType, TableType } from '../../index';
import { Button } from '../Button'; import { Button } from '../Button';
@ -15,37 +14,10 @@ export class Export extends Button {
} }
async click(args) { async click(args) {
this.showLoading(); const reqParams: any = { pageable: false };
let exportData = args.grid.getRows(); const urlSearchParams = this.tools?.criteriaFM.buildURLSearchParams(reqParams);
// 判断是否配置了 url, 以不分页形式请求后端获取全部数据一把导出。 const url = this.table?.url.exportDataUrl || this.table.url.dataUrl + '/exportExcel';
if (!Tools.isEmpty(args.grid.props.fetchDataUrl) || !Tools.isEmpty(args.grid.props.dataUrl)) { Downloader.get(url, { params: urlSearchParams });
const fetchResult = await this.getExportData();
if (fetchResult && fetchResult.length > 0) {
exportData = fetchResult;
}
}
const content = [args.grid.props.columns.map((col) => this.wrapCsvValue(col.label))]
.concat(
exportData.map((row) =>
args.grid.props.columns
.map((col) =>
this.wrapCsvValue(typeof col.field === 'function' ? col.field(row) : row[col.field === void 0 ? col.name : col.field], col.format, row),
)
.join(','),
),
)
.join('\r\n');
const status = exportFile('table-export.csv', content, {
encoding: 'utf-8',
mimeType: 'text/csv',
byteOrderMark: '\uFEFF', // 解决乱码问题
});
if (status !== true) {
NotifyManager.error($t('action.export.failed'));
}
this.hideLoading();
} }
getButtonConfig() { getButtonConfig() {
@ -59,31 +31,10 @@ export class Export extends Button {
} }
private async getExportData() { private async getExportData() {
let resultData = <any>[]; return null;
const reqParams: any = { pageable: false };
const urlSearchParams = this.tools?.criteriaFM.buildURLSearchParams(reqParams);
const resp = await axios.get(this.table?.url.fetchDataUrl || this.table.url.dataUrl, { params: urlSearchParams });
if (resp && resp.data) {
const responseData = resp.data;
if (Array.isArray(responseData)) {
resultData = responseData;
} else if (typeof responseData === 'object' && responseData.content) {
resultData = responseData.content;
}
}
return resultData;
} }
private wrapCsvValue(val, formatFn, row) { private wrapCsvValue(val, formatFn, row) {
let formatted = formatFn !== void 0 ? formatFn(val, row) : val; return null;
formatted = formatted === void 0 || formatted === null ? '' : String(formatted);
formatted = formatted.split('"').join('""');
/**
* Excel accepts \n and \r in strings, but some other CSV parsers do not
* Uncomment the next two lines to escape new lines
*/
// .split('\n').join('\\n')
// .split('\r').join('\\r')
return `"${formatted}"`;
} }
} }

89
io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export2.ts

@ -0,0 +1,89 @@
import { $t, axios, NotifyManager, Tools } from '@/platform';
import { exportFile } from 'quasar';
import { PropsType, TableType } from '../../index';
import { Button } from '../Button';
export class Export extends Button {
name = 'export';
constructor(props: PropsType, table: TableType) {
super(props, table);
this.click = this.click.bind(this);
this.getExportData = this.getExportData.bind(this);
this.wrapCsvValue = this.wrapCsvValue.bind(this);
this.getButtonConfig = this.getButtonConfig.bind(this);
}
async click(args) {
this.showLoading();
let exportData = args.grid.getRows();
// 判断是否配置了 url, 以不分页形式请求后端获取全部数据一把导出。
if (!Tools.isEmpty(args.grid.props.fetchDataUrl) || !Tools.isEmpty(args.grid.props.dataUrl)) {
const fetchResult = await this.getExportData();
if (fetchResult && fetchResult.length > 0) {
exportData = fetchResult;
}
}
const content = [args.grid.props.columns.map((col) => this.wrapCsvValue(col.label))]
.concat(
exportData.map((row) =>
args.grid.props.columns
.map((col) =>
this.wrapCsvValue(typeof col.field === 'function' ? col.field(row) : row[col.field === void 0 ? col.name : col.field], col.format, row),
)
.join(','),
),
)
.join('\r\n');
const status = exportFile('table-export.csv', content, {
encoding: 'utf-8',
mimeType: 'text/csv',
byteOrderMark: '\uFEFF', // 解决乱码问题
});
if (status !== true) {
NotifyManager.error($t('action.export.failed'));
}
this.hideLoading();
}
getButtonConfig() {
return {
name: this.name,
icon: 'file_download',
labelI18nKey: 'action.export',
label: $t('action.export'),
click: this.click,
};
}
private async getExportData() {
let resultData = <any>[];
const reqParams: any = { pageable: false };
const urlSearchParams = this.tools?.criteriaFM.buildURLSearchParams(reqParams);
const resp = await axios.get(this.table?.url.fetchDataUrl || this.table.url.dataUrl, { params: urlSearchParams });
if (resp && resp.data) {
const responseData = resp.data;
if (Array.isArray(responseData)) {
resultData = responseData;
} else if (typeof responseData === 'object' && responseData.content) {
resultData = responseData.content;
}
}
return resultData;
}
private wrapCsvValue(val, formatFn, row) {
let formatted = formatFn !== void 0 ? formatFn(val, row) : val;
formatted = formatted === void 0 || formatted === null ? '' : String(formatted);
formatted = formatted.split('"').join('""');
/**
* Excel accepts \n and \r in strings, but some other CSV parsers do not
* Uncomment the next two lines to escape new lines
*/
// .split('\n').join('\\n')
// .split('\r').join('\\r')
return `"${formatted}"`;
}
}

25
io.sc.platform.core.frontend/src/platform/layout/sub-layout/Main.vue

@ -22,7 +22,7 @@
> >
<w-v-expand-div fixed expand="main"> <w-v-expand-div fixed expand="main">
<router-view v-slot="{ Component }" class="full"> <router-view v-slot="{ Component }" class="full">
<keep-alive> <keep-alive :include="keepAliveTagViewComponentNames">
<suspense> <suspense>
<component :is="Component" :key="route.fullPath" /> <component :is="Component" :key="route.fullPath" />
</suspense> </suspense>
@ -148,10 +148,31 @@
</q-page> </q-page>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import SiderCollapser from './SiderCollapser.vue'; import SiderCollapser from './SiderCollapser.vue';
import MoreTagViewAction from './MoreTagViewAction.vue'; import MoreTagViewAction from './MoreTagViewAction.vue';
import { TagViewManager } from '@/platform/plugin/manager'; import { TagViewManager, RouterManager } from '@/platform/plugin/manager';
import type { TagViewType } from '@/platform/types';
const route = useRoute(); const route = useRoute();
const keepAliveTagViewComponentNames = computed(() => {
const tagViews: TagViewType[] = TagViewManager.getTagViews();
const result: string[] = [];
for (const tagView of tagViews) {
let componentName = tagView.componentPath;
const lastIndexOfBackslash = componentName.lastIndexOf('/');
if (lastIndexOfBackslash > -1) {
componentName = componentName.substring(lastIndexOfBackslash + 1);
}
const lastIndexOfDot = componentName.lastIndexOf('.');
if (lastIndexOfDot > -1) {
componentName = componentName.substring(0, lastIndexOfDot);
}
result.push(componentName);
}
return result;
});
</script> </script>

48
io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue

@ -142,9 +142,40 @@
<q-btn stretch flat no-caps stack> <q-btn stretch flat no-caps stack>
<div class="row items-center no-wrap"> <div class="row items-center no-wrap">
<q-icon left name="bi-person-circle" size="md" /> <q-icon left name="bi-person-circle" size="md" />
<div class="text-left"> <div class="text-left" style="max-width: 200px">
<div class="truncate flex-nowrap">{{ SessionManager.getSession().user.userName }}</div> <q-tooltip :delay="1000"><div style="width: 200px" v-html="userTooltip()"></div></q-tooltip>
<div v-if="gc.theme.topper.showDefaultRole" class="truncate text-xs">{{ SessionManager.getSession().user.defaultRoleName }}</div> <!--全部显示-->
<template v-if="gc.theme.topper.showLoginName && gc.theme.topper.showUserName && gc.theme.topper.showDefaultRole">
<div class="truncate flex-nowrap">{{ SessionManager.getSession().user.loginName + ' / ' + SessionManager.getSession().user.userName }}</div>
<div class="truncate text-xs">{{ SessionManager.getSession().user.defaultRoleName }}</div>
</template>
<!--显示登录名和用户名-->
<template v-else-if="gc.theme.topper.showLoginName && gc.theme.topper.showUserName">
<div class="truncate">{{ SessionManager.getSession().user.loginName }}</div>
<div class="truncate text-xs">{{ SessionManager.getSession().user.userName }}</div>
</template>
<!--显示登录名和默认角色-->
<template v-else-if="gc.theme.topper.showLoginName && gc.theme.topper.showDefaultRole">
<div class="truncate">{{ SessionManager.getSession().user.loginName }}</div>
<div class="truncate text-xs">{{ SessionManager.getSession().user.defaultRoleName }}</div>
</template>
<!--显示用户名和默认角色-->
<template v-else-if="gc.theme.topper.showUserName && gc.theme.topper.showDefaultRole">
<div class="truncate">{{ SessionManager.getSession().user.userName }}</div>
<div class="truncate text-xs">{{ SessionManager.getSession().user.defaultRoleName }}</div>
</template>
<!--显示登录名-->
<template v-else-if="gc.theme.topper.showLoginName">
<div class="truncate">{{ SessionManager.getSession().user.loginName }}</div>
</template>
<!--显示用户名-->
<template v-else-if="gc.theme.topper.showUserName">
<div class="truncate">{{ SessionManager.getSession().user.userName }}</div>
</template>
<!--显示默认角色-->
<template v-else-if="gc.theme.topper.showDefaultRole">
<div class="truncate">{{ SessionManager.getSession().user.defaultRoleName }}</div>
</template>
</div> </div>
</div> </div>
<q-menu> <q-menu>
@ -271,6 +302,13 @@ const unReadedAnnouncementsTotalCountRef = ref();
const router = useRouter(); const router = useRouter();
const userTooltip = () => {
let tip = t('loginName') + ' : ' + SessionManager.getSession().user.loginName + '<br/>';
tip += t('userName') + ' : ' + SessionManager.getSession().user.userName + '<br/>';
tip += t('defaultRoleName') + ' : ' + SessionManager.getSession().user.defaultRoleName;
return tip;
};
const fullScreen = () => { const fullScreen = () => {
if (quasar.fullscreen.isActive) { if (quasar.fullscreen.isActive) {
quasar.fullscreen.exit(); quasar.fullscreen.exit();
@ -376,7 +414,9 @@ const doLogout = () => {
window.location.href = Environment.getWebContextPath(); window.location.href = Environment.getWebContextPath();
} else { } else {
axios.post(Environment.apiContextPath(Environment.getConfigure().setting.logoutUrl)).then((response) => { axios.post(Environment.apiContextPath(Environment.getConfigure().setting.logoutUrl)).then((response) => {
window.location.href = response.data; // window.location.href ='';
// vue ,
window.location.replace(response.data);
}); });
} }
}; };

3
io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts

@ -170,6 +170,7 @@ class RouterManager {
path: cachedRoute['path'], path: cachedRoute['path'],
icon: cachedRoute['icon'], icon: cachedRoute['icon'],
component: cachedRoute['component'], component: cachedRoute['component'],
componentPath: cachedRoute['componentPath'],
redirect: cachedRoute['redirect'], redirect: cachedRoute['redirect'],
children: cachedRoute['children'], children: cachedRoute['children'],
}); });
@ -180,6 +181,7 @@ class RouterManager {
path: cachedRoute['path'], path: cachedRoute['path'],
icon: cachedRoute['icon'], icon: cachedRoute['icon'],
component: ComponentManager.getLocalComponent(cachedRoute['component']), component: ComponentManager.getLocalComponent(cachedRoute['component']),
componentPath: cachedRoute['componentPath'],
redirect: cachedRoute['redirect'], redirect: cachedRoute['redirect'],
children: cachedRoute['children'], children: cachedRoute['children'],
}); });
@ -190,6 +192,7 @@ class RouterManager {
path: cachedRoute['path'], path: cachedRoute['path'],
icon: cachedRoute['icon'], icon: cachedRoute['icon'],
component: ComponentManager.getRemoteComponent(cachedRoute['module'], cachedRoute['component']), component: ComponentManager.getRemoteComponent(cachedRoute['module'], cachedRoute['component']),
componentPath: cachedRoute['componentPath'],
redirect: cachedRoute['redirect'], redirect: cachedRoute['redirect'],
children: cachedRoute['children'], children: cachedRoute['children'],
}); });

7
io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts

@ -64,6 +64,7 @@ class TagViewManager {
let menuId: string; let menuId: string;
let menuTitleI18nKey: string; let menuTitleI18nKey: string;
let menuIcon: string; let menuIcon: string;
let componentPath: string;
// 是否需要添加 TagView // 是否需要添加 TagView
let needToAdd = true; let needToAdd = true;
@ -72,6 +73,10 @@ class TagViewManager {
menuId = menu.id; menuId = menu.id;
menuTitleI18nKey = menu.titleI18nKey; menuTitleI18nKey = menu.titleI18nKey;
menuIcon = menu.icon; menuIcon = menu.icon;
const route = RouterManager.getRouteByName(menu.routeName) as FrontEndRouteType;
if (route) {
componentPath = route.componentPath;
}
for (const tagView of TagViewManager.#tagViewsAndBreadcrumbs.tagViews) { for (const tagView of TagViewManager.#tagViewsAndBreadcrumbs.tagViews) {
if (tagView.menuId === menuId) { if (tagView.menuId === menuId) {
needToAdd = false; needToAdd = false;
@ -84,6 +89,7 @@ class TagViewManager {
menuId = route.name; menuId = route.name;
menuTitleI18nKey = route.name; menuTitleI18nKey = route.name;
menuIcon = route.icon; menuIcon = route.icon;
componentPath = route.componentPath;
for (const tagView of TagViewManager.#tagViewsAndBreadcrumbs.tagViews) { for (const tagView of TagViewManager.#tagViewsAndBreadcrumbs.tagViews) {
if (tagView.menuId === menuId) { if (tagView.menuId === menuId) {
needToAdd = false; needToAdd = false;
@ -104,6 +110,7 @@ class TagViewManager {
routePath: to.path, routePath: to.path,
routeQuery: to.query, routeQuery: to.query,
params: to.params, params: to.params,
componentPath: componentPath,
}); });
} }
// 设置选中的 TagView // 设置选中的 TagView

2
io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts

@ -119,6 +119,8 @@ export type ConfigureType = {
titleColor: string; // 标题颜色 titleColor: string; // 标题颜色
actions: Map<string, object>; // 动作按钮 Map(key:动作名称,value:按钮配置) actions: Map<string, object>; // 动作按钮 Map(key:动作名称,value:按钮配置)
notifierInterval: number; // 通知器轮询时间间隔(单位:秒) notifierInterval: number; // 通知器轮询时间间隔(单位:秒)
showLoginName: boolean; // 是否显示用户登录名
showUserName: boolean; // 是否显示用户名
showDefaultRole: boolean; //是否显示用户默认角色 showDefaultRole: boolean; //是否显示用户默认角色
}; };

1
io.sc.platform.core.frontend/src/platform/types/TagViewType.ts

@ -6,4 +6,5 @@ export type TagViewType = {
routePath: string; routePath: string;
routeQuery: Map<string, string>; routeQuery: Map<string, string>;
params: Map<string, string>; params: Map<string, string>;
componentPath: string;
}; };

10
io.sc.platform.core.frontend/src/platform/views/Home.vue

@ -31,6 +31,7 @@ import MyDoneTask from './home/MyDoneTask.vue';
import MyFinishedTask from './home/MyFinishedTask.vue'; import MyFinishedTask from './home/MyFinishedTask.vue';
import MyMessage from './home/MyMessage.vue'; import MyMessage from './home/MyMessage.vue';
import MyAnnouncement from './home/MyAnnouncement.vue'; import MyAnnouncement from './home/MyAnnouncement.vue';
import { onActivated } from 'vue';
const myShortcutMenuRef = ref(); const myShortcutMenuRef = ref();
const myTaskRef = ref(); const myTaskRef = ref();
@ -39,6 +40,15 @@ const myFinishedTaskRef = ref();
const myMessageRef = ref(); const myMessageRef = ref();
const myAnnouncementRef = ref(); const myAnnouncementRef = ref();
onActivated(() => {
myShortcutMenuRef?.value.refresh();
myTaskRef?.value.refresh();
myDoneTaskRef?.value.refresh();
myFinishedTaskRef?.value.refresh();
myMessageRef?.value.refresh();
myAnnouncementRef?.value.refresh();
});
const afterMyTaskRefresh = () => { const afterMyTaskRefresh = () => {
myDoneTaskRef?.value?.refresh(); myDoneTaskRef?.value?.refresh();
myFinishedTaskRef?.value?.refresh(); myFinishedTaskRef?.value?.refresh();

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

@ -1,6 +1,6 @@
{ {
"name": "platform-core", "name": "platform-core",
"version": "8.2.110", "version": "8.2.115",
"description": "前端核心包,用于快速构建前端的脚手架", "description": "前端核心包,用于快速构建前端的脚手架",
"private": false, "private": false,
"keywords": [], "keywords": [],
@ -111,7 +111,7 @@
"mockjs": "1.1.0", "mockjs": "1.1.0",
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

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

@ -265,4 +265,5 @@ before=Before
send=Send send=Send
required=Required required=Required
settings=Settings settings=Settings
reply=Reply reply=Reply
defaultRoleName=Default Role Name

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

@ -265,4 +265,5 @@ before=\u4EE5\u524D
send=\u767C\u9001 send=\u767C\u9001
required=\u5FC5\u9700 required=\u5FC5\u9700
settings=\u8A2D\u7F6E settings=\u8A2D\u7F6E
reply=\u56DE\u5FA9 reply=\u56DE\u5FA9
defaultRoleName=\u9ED8\u8A8D\u89D2\u8272\u540D\u7A31

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

@ -265,4 +265,5 @@ before=\u4EE5\u524D
send=\u53D1\u9001 send=\u53D1\u9001
required=\u5FC5\u9700 required=\u5FC5\u9700
settings=\u8BBE\u7F6E settings=\u8BBE\u7F6E
reply=\u56DE\u590D reply=\u56DE\u590D
defaultRoleName=\u9ED8\u8BA4\u89D2\u8272\u540D\u79F0

2
io.sc.platform.developer.doc/package.json

@ -28,7 +28,7 @@
"vuepress": "2.0.0-rc.15" "vuepress": "2.0.0-rc.15"
}, },
"dependencies": { "dependencies": {
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"vue": "3.5.13", "vue": "3.5.13",
"vue-i18n": "11.0.1" "vue-i18n": "11.0.1"

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

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

2
io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.applicationProperties')" :title="$t('menu.developer.plugin.applicationProperties')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/applicationProperties')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/applicationProperties')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Components.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.components')" :title="$t('menu.developer.plugin.components')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/components')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/components')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Directories.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.directories')" :title="$t('menu.developer.plugin.directories')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/directories')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/directories')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.frontendModule')" :title="$t('menu.developer.plugin.frontendModule')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/frontendModule')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/frontendModule')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.frontendModule')" :title="$t('menu.developer.plugin.frontendModule')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/frontendRoute')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/frontendRoute')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.initializer')" :title="$t('menu.developer.plugin.initializer')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/initializer')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/initializer')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.jsonSerializers')" :title="$t('menu.developer.plugin.jsonSerializers')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/jsonSerializers')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/jsonSerializers')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Liquibase.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.initializer')" :title="$t('menu.developer.plugin.initializer')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/liquibase')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/liquibase')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Menus.vue

@ -19,7 +19,7 @@
} }
" "
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ {
width: 400, width: 400,

2
io.sc.platform.developer.frontend/src/views/plugin/Messages.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.messages')" :title="$t('menu.developer.plugin.messages')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/messages')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/messages')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.p6spy')" :title="$t('menu.developer.plugin.p6spy')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/p6spy')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/p6spy')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue

@ -13,7 +13,7 @@
} }
} }
" "
:toolbar-actions="['refresh', 'separator', 'expand', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'expand', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/parameters')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/parameters')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.repositories')" :title="$t('menu.developer.plugin.repositories')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/repositories')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/repositories')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.restartProperties')" :title="$t('menu.developer.plugin.restartProperties')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/restartProperties')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/restartProperties')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Security.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.security')" :title="$t('menu.developer.plugin.security')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/security')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/security')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.systemProperties')" :title="$t('menu.developer.plugin.systemProperties')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/systemProperties')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/systemProperties')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/plugin/Ws.vue

@ -1,7 +1,7 @@
<template> <template>
<w-grid <w-grid
:title="$t('menu.developer.plugin.ws')" :title="$t('menu.developer.plugin.ws')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/ws')" :fetch-data-url="Environment.apiContextPath('/api/developer/plugins/ws')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="false" :pageable="false"

2
io.sc.platform.developer.frontend/src/views/springboot/Autoconfigure.vue

@ -4,7 +4,7 @@
:checkbox-selection="false" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/autoConfiguration')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/autoConfiguration')"
:pageable="true" :pageable="true"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ width: 100, name: 'context', label: $t('category') }, { width: 100, name: 'context', label: $t('category') },
{ width: 400, name: 'name', label: $t('name') }, { width: 400, name: 'name', label: $t('name') },

2
io.sc.platform.developer.frontend/src/views/springboot/Bean.vue

@ -4,7 +4,7 @@
:checkbox-selection="false" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/beans')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/beans')"
:pageable="false" :pageable="false"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ width: 500, name: 'name', label: $t('name') }, { width: 500, name: 'name', label: $t('name') },
{ width: 400, name: 'type', label: $t('className'), format: Formater.simpleClassName() }, { width: 400, name: 'type', label: $t('className'), format: Formater.simpleClassName() },

2
io.sc.platform.developer.frontend/src/views/springboot/Environment.vue

@ -4,7 +4,7 @@
:checkbox-selection="false" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/environment')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/environment')"
:pageable="false" :pageable="false"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ width: 200, name: 'propertySourceName', label: $t('category') }, { width: 200, name: 'propertySourceName', label: $t('category') },
{ width: 400, name: 'propertyName', label: $t('name') }, { width: 400, name: 'propertyName', label: $t('name') },

6
io.sc.platform.developer.frontend/src/views/springboot/Mapping.vue

@ -12,7 +12,7 @@
:checkbox-selection="false" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/dispatcherServletMappingDescriptions')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/dispatcherServletMappingDescriptions')"
:pageable="false" :pageable="false"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:columns="[ :columns="[
{ {
width: 100, width: 100,
@ -63,7 +63,7 @@
<q-tab-panel name="servletFilters" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> <q-tab-panel name="servletFilters" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<w-grid <w-grid
:title="$t('menu.developer.springboot.bean')" :title="$t('menu.developer.springboot.bean')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']" :toolbar-actions="['refresh', 'separator', 'view']"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/filterRegistrationMappingDescriptions')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/filterRegistrationMappingDescriptions')"
:checkbox-selection="false" :checkbox-selection="false"
:pageable="true" :pageable="true"
@ -90,7 +90,7 @@
:checkbox-selection="false" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/servletRegistrationMappingDescriptions')" :fetch-data-url="Environment.apiContextPath('/api/developer/springboot/mappings/servletRegistrationMappingDescriptions')"
:pageable="true" :pageable="true"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'view', 'separator']"
:columns="[ :columns="[
{ width: 300, name: 'name', label: $t('name') }, { width: 300, name: 'name', label: $t('name') },
{ width: '100%', name: 'patterns', label: $t('pattern') }, { width: '100%', name: 'patterns', label: $t('pattern') },

BIN
io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/jpa/entity/ProcessEntity.xlsx

Binary file not shown.

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

@ -112,7 +112,7 @@
"node-sql-parser": "5.3.6", "node-sql-parser": "5.3.6",
"pinia": "2.3.0", "pinia": "2.3.0",
"pinia-undo": "0.2.4", "pinia-undo": "0.2.4",
"platform-core": "8.2.110", "platform-core": "8.2.115",
"quasar": "2.17.6", "quasar": "2.17.6",
"sort-array": "5.0.0", "sort-array": "5.0.0",
"svg-path-commander": "2.1.7", "svg-path-commander": "2.1.7",

4
io.sc.platform.lcdp.frontend/src/components/index.ts

@ -9,7 +9,7 @@ import component_lcdp_form_page from '@/views/form/Page.vue';
import component_lcdp_excel_report from '@/views/excelTemplate/ExcelReport.vue'; import component_lcdp_excel_report from '@/views/excelTemplate/ExcelReport.vue';
import component_lcdp_formConfig from '@/views/form/FormConfig.vue'; import component_lcdp_formConfig from '@/views/form/FormConfig.vue';
import component_lcdp_excel_template from '@/views/excelTemplate/TemplateGrid.vue'; import component_lcdp_excel_template from '@/views/excelTemplate/TemplateGrid.vue';
import component_lcdp_export_excel_template from '@/views/export/ExportTemplate.vue'; import component_lcdp_jxls_template from '@/views/jxls/Template.vue';
const localComponents = { const localComponents = {
'component.lcdp.Frontend': component_lcdp_Frontend, 'component.lcdp.Frontend': component_lcdp_Frontend,
@ -19,7 +19,7 @@ const localComponents = {
'component.lcdp.excel.report': component_lcdp_excel_report, 'component.lcdp.excel.report': component_lcdp_excel_report,
'component.lcdp.formConfig': component_lcdp_formConfig, 'component.lcdp.formConfig': component_lcdp_formConfig,
'component.lcdp.excel.template': component_lcdp_excel_template, 'component.lcdp.excel.template': component_lcdp_excel_template,
'component.lcdp.export.excel.template': component_lcdp_export_excel_template, 'component.lcdp.jxls.template': component_lcdp_jxls_template,
}; };
export default localComponents; export default localComponents;

16
io.sc.platform.lcdp.frontend/src/i18n/messages.json

@ -5,7 +5,7 @@
"menu.lcdp.bpm": "Bussiness Process Manager", "menu.lcdp.bpm": "Bussiness Process Manager",
"menu.lcdp.form": "Form", "menu.lcdp.form": "Form",
"menu.lcdp.excel.template": "Excel Template", "menu.lcdp.excel.template": "Excel Template",
"menu.lcdp.export.excel.template": "Data Export Template(Excel)", "menu.lcdp.jxls.template": "JXLS Template(Excel)",
"theme.action.setDefaultTheme": "Set As Default", "theme.action.setDefaultTheme": "Set As Default",
"theme.action.setDefaultTheme.confirm": "Would you like to set \"{themeName}\" as default theme?", "theme.action.setDefaultTheme.confirm": "Would you like to set \"{themeName}\" as default theme?",
@ -68,6 +68,10 @@
"theme.topper.actions.notifier.yes": "Notifier(enabled)", "theme.topper.actions.notifier.yes": "Notifier(enabled)",
"theme.topper.actions.notifier.no": "Notifier(disabled)", "theme.topper.actions.notifier.no": "Notifier(disabled)",
"theme.topper.notifierInterval": "Notifier Interval", "theme.topper.notifierInterval": "Notifier Interval",
"theme.topper.showLoginName.yes": "Show login name",
"theme.topper.showLoginName.no": "Not show login name",
"theme.topper.showUserName.yes": "Show user name",
"theme.topper.showUserName.no": "Not show user name",
"theme.topper.showDefaultRole.yes": "Show default role", "theme.topper.showDefaultRole.yes": "Show default role",
"theme.topper.showDefaultRole.no": "Not show default role", "theme.topper.showDefaultRole.no": "Not show default role",
@ -245,5 +249,13 @@
"lcdp.bpm.tools.action.cleanRuntimeData": "Clean Runtime Data", "lcdp.bpm.tools.action.cleanRuntimeData": "Clean Runtime Data",
"lcdp.bpm.tools.action.cleanRuntimeData.tip": "Are you sure to clean the runtime data?", "lcdp.bpm.tools.action.cleanRuntimeData.tip": "Are you sure to clean the runtime data?",
"lcdp.bpm.tools.action.cleanHistoryData": "Clean History Data", "lcdp.bpm.tools.action.cleanHistoryData": "Clean History Data",
"lcdp.bpm.tools.action.cleanHistoryData.tip": "Are you sure to clean the history data?" "lcdp.bpm.tools.action.cleanHistoryData.tip": "Are you sure to clean the history data?",
"lcdp.jxls.template.grid.title": "Templates",
"lcdp.jxls.template.grid.action.updateAttachment": "Update Attachment",
"lcdp.jxls.template.grid.action.downloadAttachment": "Download Attachment",
"lcdp.jxls.template.grid.action.removeAttachment": "Remove Attachment",
"lcdp.jxls.template.grid.action.removeAttachment.confirm": "Are you sure to remove attachment?",
"lcdp.jxls.template.grid.entity.jpaEntityClass": "JPA Entity Class Name",
"lcdp.jxls.template.grid.entity.hasAttachment": "Has Attachment"
} }

18
io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json

@ -5,7 +5,7 @@
"menu.lcdp.bpm": "流程管理", "menu.lcdp.bpm": "流程管理",
"menu.lcdp.form": "表单管理", "menu.lcdp.form": "表单管理",
"menu.lcdp.excel.template": "报表模板管理(Excel)", "menu.lcdp.excel.template": "报表模板管理(Excel)",
"menu.lcdp.export.excel.template": "數據導出模版管理(Excel)", "menu.lcdp.jxls.template": "JXLS模版管理(Excel)",
"theme.action.setDefaultTheme": "設置為默認主題", "theme.action.setDefaultTheme": "設置為默認主題",
"theme.action.setDefaultTheme.confirm": "您確定要將 \"{themeName}\" 設置為默認主題嗎?", "theme.action.setDefaultTheme.confirm": "您確定要將 \"{themeName}\" 設置為默認主題嗎?",
@ -68,6 +68,12 @@
"theme.topper.actions.notifier.yes": "通知 (启用)", "theme.topper.actions.notifier.yes": "通知 (启用)",
"theme.topper.actions.notifier.no": "通知 (禁用)", "theme.topper.actions.notifier.no": "通知 (禁用)",
"theme.topper.notifierInterval": "通知輪詢間隔", "theme.topper.notifierInterval": "通知輪詢間隔",
"theme.topper.showLoginName.yes": "顯示用戶登錄名",
"theme.topper.showLoginName.no": "不顯示用戶登錄名",
"theme.topper.showUserName.yes": "顯示用戶名",
"theme.topper.showUserName.no": "不顯示用戶名",
"theme.topper.showDefaultRole.yes": "顯示默認角色",
"theme.topper.showDefaultRole.no": "不顯示默認角色",
"theme.sider": "邊欄", "theme.sider": "邊欄",
"theme.sider.position": "位置", "theme.sider.position": "位置",
@ -243,5 +249,13 @@
"lcdp.bpm.tools.action.cleanRuntimeData": "清除運行時數據", "lcdp.bpm.tools.action.cleanRuntimeData": "清除運行時數據",
"lcdp.bpm.tools.action.cleanRuntimeData.tip": "您確定要清除清楚運行時數據嗎?", "lcdp.bpm.tools.action.cleanRuntimeData.tip": "您確定要清除清楚運行時數據嗎?",
"lcdp.bpm.tools.action.cleanHistoryData": "清除歷史數據", "lcdp.bpm.tools.action.cleanHistoryData": "清除歷史數據",
"lcdp.bpm.tools.action.cleanHistoryData.tip": "您確定要清除歷史數據嗎?" "lcdp.bpm.tools.action.cleanHistoryData.tip": "您確定要清除歷史數據嗎?",
"lcdp.jxls.template.grid.title": "JXLS 模版列表",
"lcdp.jxls.template.grid.action.updateAttachment": "上傳模版",
"lcdp.jxls.template.grid.action.downloadAttachment": "下載模版",
"lcdp.jxls.template.grid.action.removeAttachment": "刪除模版",
"lcdp.jxls.template.grid.action.removeAttachment.confirm": "您確定要刪除模版嗎?",
"lcdp.jxls.template.grid.entity.jpaEntityClass": "JPA實體類名稱",
"lcdp.jxls.template.grid.entity.hasAttachment": "是否有附件"
} }

18
io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json

@ -5,7 +5,7 @@
"menu.lcdp.bpm": "流程管理", "menu.lcdp.bpm": "流程管理",
"menu.lcdp.form": "表单管理", "menu.lcdp.form": "表单管理",
"menu.lcdp.excel.template": "报表模板管理(Excel)", "menu.lcdp.excel.template": "报表模板管理(Excel)",
"menu.lcdp.export.excel.template": "数据导出模版管理(Excel)", "menu.lcdp.jxls.template": "JXLS模版管理(Excel)",
"theme.action.setDefaultTheme": "设置为默认主题", "theme.action.setDefaultTheme": "设置为默认主题",
"theme.action.setDefaultTheme.confirm": "您确定要将 \"{themeName}\" 设置为默认主题吗?", "theme.action.setDefaultTheme.confirm": "您确定要将 \"{themeName}\" 设置为默认主题吗?",
@ -68,6 +68,12 @@
"theme.topper.actions.notifier.yes": "通知 (启用)", "theme.topper.actions.notifier.yes": "通知 (启用)",
"theme.topper.actions.notifier.no": "通知 (禁用)", "theme.topper.actions.notifier.no": "通知 (禁用)",
"theme.topper.notifierInterval": "通知轮询间隔", "theme.topper.notifierInterval": "通知轮询间隔",
"theme.topper.showLoginName.yes": "显示用户登录名",
"theme.topper.showLoginName.no": "不显示用户登录名",
"theme.topper.showUserName.yes": "显示用户名",
"theme.topper.showUserName.no": "不显示用户名",
"theme.topper.showDefaultRole.yes": "显示默认角色",
"theme.topper.showDefaultRole.no": "不显示默认角色",
"theme.sider": "边栏", "theme.sider": "边栏",
"theme.sider.position": "位置", "theme.sider.position": "位置",
@ -243,5 +249,13 @@
"lcdp.bpm.tools.action.cleanRuntimeData": "清除运行时数据", "lcdp.bpm.tools.action.cleanRuntimeData": "清除运行时数据",
"lcdp.bpm.tools.action.cleanRuntimeData.tip": "您确定要清除运行时数据吗?", "lcdp.bpm.tools.action.cleanRuntimeData.tip": "您确定要清除运行时数据吗?",
"lcdp.bpm.tools.action.cleanHistoryData": "清除历史数据", "lcdp.bpm.tools.action.cleanHistoryData": "清除历史数据",
"lcdp.bpm.tools.action.cleanHistoryData.tip": "您确定要清除历史数据吗?" "lcdp.bpm.tools.action.cleanHistoryData.tip": "您确定要清除历史数据吗?",
"lcdp.jxls.template.grid.title": "JXLS 模版列表",
"lcdp.jxls.template.grid.action.updateAttachment": "上传模版",
"lcdp.jxls.template.grid.action.downloadAttachment": "下载模版",
"lcdp.jxls.template.grid.action.removeAttachment": "删除模版",
"lcdp.jxls.template.grid.action.removeAttachment.confirm": "您确定要删除模版吗?",
"lcdp.jxls.template.grid.entity.jpaEntityClass": "JPA实体类名称",
"lcdp.jxls.template.grid.entity.hasAttachment": "是否有附件"
} }

4
io.sc.platform.lcdp.frontend/src/menus/menus.json

@ -53,6 +53,6 @@
{"type":"ROUTE", "order":600, "parentId":"menu.lcdp", "id":"menu.lcdp.form", "titleI18nKey":"menu.lcdp.form", "icon":"widgets", "routeName":"route.lcdp.form"}, {"type":"ROUTE", "order":600, "parentId":"menu.lcdp", "id":"menu.lcdp.form", "titleI18nKey":"menu.lcdp.form", "icon":"widgets", "routeName":"route.lcdp.form"},
/* /(Excel)*/ /* /(Excel)*/
{"type":"ROUTE", "order":700, "parentId":"menu.lcdp", "id":"menu.lcdp.excel.template", "titleI18nKey":"menu.lcdp.excel.template", "icon":"view_list", "routeName":"route.lcdp.excel.template"}, {"type":"ROUTE", "order":700, "parentId":"menu.lcdp", "id":"menu.lcdp.excel.template", "titleI18nKey":"menu.lcdp.excel.template", "icon":"view_list", "routeName":"route.lcdp.excel.template"},
/* /(Excel)*/ /* /JXLS(Excel)*/
{"type":"ROUTE", "order":800, "parentId":"menu.lcdp", "id":"menu.lcdp.export.excel.template", "titleI18nKey":"menu.lcdp.export.excel.template", "icon":"view_list", "routeName":"route.lcdp.export.excel.template"} {"type":"ROUTE", "order":800, "parentId":"menu.lcdp", "id":"menu.lcdp.jxls.template", "titleI18nKey":"menu.lcdp.jxls.template", "icon":"bi-filetype-xlsx", "routeName":"route.lcdp.jxls.template"}
] ]

10
io.sc.platform.lcdp.frontend/src/routes/routes.json

@ -85,12 +85,12 @@
}, },
{ {
"parent": "/", "parent": "/",
"name": "route.lcdp.export.excel.template", "name": "route.lcdp.jxls.template",
"path": "lcdp/export/excel/template", "path": "lcdp/jxls/template",
"component": "component.lcdp.export.excel.template", "component": "component.lcdp.jxls.template",
"componentPath": "@/views/export/ExportTemplate.vue", "componentPath": "@/views/jxls/Template.vue",
"meta": { "meta": {
"permissions": ["/example/**/*"] "permissions": ["/views/jxls/**/*"]
}, },
"children": [] "children": []
} }

58
io.sc.platform.lcdp.frontend/src/views/export/ExportTemplate.vue

@ -1,58 +0,0 @@
<template>
<w-splitter :model-value="50" separator-style="height: 1px;" class="w-full" style="height: 100%">
<template #before>
<w-grid
ref="gridRef"
:title="$t('system.org.grid.title')"
:config-button="true"
db-click-operation="edit"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/exportexcel/template')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 120, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') },
]"
:editor="{
dialog: {
width: '600px',
},
form: {
colsNum: 1,
fields: [
{ name: 'code', label: $t('code'), type: 'w-text', requiredIf: true },
{ name: 'name', label: $t('name'), type: 'w-text', requiredIf: true },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ 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="(args: any) => {}"
></w-grid>
</template>
<template #after> </template>
</w-splitter>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { Environment, eventBus, Formater } from 'platform-core';
const gridRef = ref();
</script>

154
io.sc.platform.lcdp.frontend/src/views/export/UniverTemplate.vue

@ -1,154 +0,0 @@
<template>
<w-splitter :model-value="50" horizontal separator-style="height: 1px;" class="w-full" style="height: 100%">
<template #before>
<w-grid
ref="treeGridRef"
:title="$t('system.org.grid.title')"
:config-button="true"
db-click-operation="edit"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/exportexcel/template')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 120, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') },
]"
:editor="{
dialog: {
width: '600px',
},
form: {
colsNum: 1,
fields: [
{ name: 'code', label: $t('code'), type: 'w-text', requiredIf: true },
{ name: 'name', label: $t('name'), type: 'w-text', requiredIf: true },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ 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="
(args) => {
refreshRelationshipComponents(args.row.id);
}
"
></w-grid>
</template>
<template #after>
<div class="row no-wrap items-center py-1">
<q-btn icon="bi-floppy2" :label="$t('save')" outline no-caps> </q-btn>
</div>
<div ref="divRef" class="border border-gray-200" style="height: calc(100% - 48px)"></div>
</template>
</w-splitter>
</template>
<script setup lang="ts">
import '@univerjs/design/lib/index.css';
import '@univerjs/ui/lib/index.css';
import '@univerjs/docs-ui/lib/index.css';
import '@univerjs/sheets-ui/lib/index.css';
//import '@univerjs/sheets-formula/lib/index.css';
//
import { ref, onMounted } from 'vue';
import { Environment, eventBus, Formater } from 'platform-core';
import { LocaleType, Tools, Univer, UniverInstanceType } from '@univerjs/core';
import { defaultTheme } from '@univerjs/design';
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula';
import { UniverRenderEnginePlugin } from '@univerjs/engine-render';
import { UniverUIPlugin } from '@univerjs/ui';
import { UniverDocsPlugin } from '@univerjs/docs';
import { UniverDocsUIPlugin } from '@univerjs/docs-ui';
import { UniverSheetsPlugin } from '@univerjs/sheets';
import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula';
import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui';
import Design_en_US from '@univerjs/design/locale/en-US';
import UI_en_US from '@univerjs/ui/locale/en-US';
import DocsUI_en_US from '@univerjs/docs-ui/locale/en-US';
import Sheets_en_US from '@univerjs/sheets/locale/en-US';
import SheetsUI_en_US from '@univerjs/sheets-ui/locale/en-US';
import SheetsFormula_en_US from '@univerjs/sheets-formula/locale/en-US';
import Design_zh_CN from '@univerjs/design/locale/zh-CN';
import UI_zh_CN from '@univerjs/ui/locale/zh-CN';
import DocsUI_zh_CN from '@univerjs/docs-ui/locale/zh-CN';
import Sheets_zh_CN from '@univerjs/sheets/locale/zh-CN';
import SheetsUI_zh_CN from '@univerjs/sheets-ui/locale/zh-CN';
import SheetsFormula_zh_CN from '@univerjs/sheets-formula/locale/zh-CN';
import Design_zh_TW from '@univerjs/design/locale/zh-TW';
import UI_zh_TW from '@univerjs/ui/locale/zh-TW';
import DocsUI_zh_TW from '@univerjs/docs-ui/locale/zh-TW';
import Sheets_zh_TW from '@univerjs/sheets/locale/zh-TW';
import SheetsUI_zh_TW from '@univerjs/sheets-ui/locale/zh-TW';
import SheetsFormula_zh_TW from '@univerjs/sheets-formula/locale/zh-TW';
import type { IWorkbookData } from '@univerjs/core';
const divRef = ref();
const treeGridRef = ref();
onMounted(() => {
const univer = new Univer({
theme: defaultTheme,
locale: LocaleType.ZH_CN,
locales: {
[LocaleType.EN_US]: Tools.deepMerge(Sheets_en_US, DocsUI_en_US, SheetsUI_en_US, SheetsFormula_en_US, UI_en_US, Design_en_US),
[LocaleType.ZH_CN]: Tools.deepMerge(Sheets_zh_CN, DocsUI_zh_CN, SheetsUI_zh_CN, SheetsFormula_zh_CN, UI_zh_CN, Design_zh_CN),
[LocaleType.ZH_TW]: Tools.deepMerge(Sheets_zh_TW, DocsUI_zh_TW, SheetsUI_zh_TW, SheetsFormula_zh_TW, UI_zh_TW, Design_zh_TW),
},
});
/**
* 语言改变事件
*/
eventBus.on('onLocaleChanged', (locale) => {
if (locale === 'en') {
univer.setLocale(LocaleType.EN_US);
} else if (locale === 'zh_CN') {
univer.setLocale(LocaleType.ZH_CN);
} else if (locale === 'tw_CN') {
univer.setLocale(LocaleType.ZH_TW);
}
});
univer.registerPlugin(UniverRenderEnginePlugin);
univer.registerPlugin(UniverFormulaEnginePlugin);
univer.registerPlugin(UniverUIPlugin, {
container: divRef.value,
});
univer.registerPlugin(UniverDocsPlugin);
univer.registerPlugin(UniverDocsUIPlugin);
univer.registerPlugin(UniverSheetsPlugin);
univer.registerPlugin(UniverSheetsUIPlugin);
univer.registerPlugin(UniverSheetsFormulaPlugin);
univer.createUnit(UniverInstanceType.UNIVER_SHEET, {});
});
</script>

74
io.sc.platform.lcdp.frontend/src/views/jxls/AttachmentDialog.vue

@ -0,0 +1,74 @@
<template>
<w-dialog ref="dialogRef" :title="$t('re.resources.dialog.import.title')" width="600px" :can-maximize="false">
<q-form action="post">
<div class="row py-1">
<div class="col-1"></div>
<div class="col-10">
<q-file ref="fileRef" v-model="modelValue.file" :label="$t('file.single.tip')" dense outlined clearable counter accept=".xlsx">
<template #prepend>
<q-icon name="cloud_upload" />
</template>
</q-file>
</div>
<div class="col-1"></div>
</div>
<div class="row py-1">
<div class="col-1"></div>
<div class="col-10 row justify-center q-gutter-md py-2">
<q-btn icon="bi-database-up" :label="$t('import')" color="primary" @click="importData"></q-btn>
</div>
<div class="col-1"></div>
</div>
</q-form>
</w-dialog>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue';
import { axios, Environment } from 'platform-core';
const emit = defineEmits<{
(e: 'afterUploaded', evt: Event): void;
}>();
const dialogRef = ref();
const modelValue = reactive({
file: undefined,
});
const fileRef = ref();
const idRef = ref();
const importData = () => {
axios
.post(
Environment.apiContextPath('/api/lcdp/jxls/template/updateAttachment/' + idRef.value),
{
file: fileRef.value.nativeEl.files[0],
},
{
loading: true,
headers: {
'Content-Type': 'multipart/form-data',
},
},
)
.then(() => {
close();
emit('afterUploaded');
});
};
const open = (id) => {
idRef.value = id;
modelValue.file = undefined;
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
defineExpose({
open,
close,
});
</script>

126
io.sc.platform.lcdp.frontend/src/views/jxls/Template.vue

@ -0,0 +1,126 @@
<template>
<div style="height: 100%">
<w-grid
ref="gridRef"
:title="$t('lcdp.jxls.template.grid.title')"
:config-button="true"
db-click-operation="edit"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/lcdp/jxls/template')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'updateAttachment',
label: $t('lcdp.jxls.template.grid.action.updateAttachment'),
icon: 'file_upload',
enableIf: (args: any) => {
return args.selected;
},
click: (args: any) => {
attachmentDialogRef.open(args.selected.id);
},
},
{
name: 'downloadAttachment',
icon: 'file_upload',
label: $t('lcdp.jxls.template.grid.action.downloadAttachment'),
enableIf: (args: any) => {
return args.selected;
},
click: (args: any) => {
Downloader.post(Environment.apiContextPath('/api/lcdp/jxls/template/downloadAttachment/' + args.selected.id), { loading: true });
},
},
{
name: 'removeAttachment',
icon: 'file_upload',
label: $t('lcdp.jxls.template.grid.action.removeAttachment'),
enableIf: (args: any) => {
return args.selected;
},
click: (args: any) => {
DialogManager.confirm($t('lcdp.jxls.template.grid.action.removeAttachment.confirm'), () => {
axios.post(Environment.apiContextPath('/api/lcdp/jxls/template/removeAttachment/' + args.selected.id)).then(() => {
gridRef.refresh();
});
});
},
},
{
name: 'download',
icon: 'file_upload',
label: $t('download'),
enableIf: (args: any) => {
return args.selected;
},
click: (args: any) => {
Downloader.post(Environment.apiContextPath('/api/system/user/export'), { loading: true });
},
},
'separator',
'view',
]"
:columns="[
{ width: 150, name: 'code', label: $t('code') },
{ width: 250, name: 'name', label: $t('name') },
{ width: 350, name: 'jpaEntityClass', label: $t('lcdp.jxls.template.grid.entity.jpaEntityClass') },
{ width: '100%', name: 'description', label: $t('description') },
{ width: 100, name: 'hasAttachment', label: $t('lcdp.jxls.template.grid.entity.hasAttachment'), format: Formater.yesNo() },
]"
:editor="{
dialog: {
width: '600px',
},
form: {
colsNum: 1,
fields: [
{ name: 'code', label: $t('code'), type: 'w-text', requiredIf: true },
{ name: 'name', label: $t('name'), type: 'w-text', requiredIf: true },
{ name: 'jpaEntityClass', label: $t('lcdp.jxls.template.grid.entity.jpaEntityClass'), type: 'w-text' },
{ name: 'description', label: $t('description'), type: 'w-textarea' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'jpaEntityClass', label: $t('lcdp.jxls.template.grid.entity.jpaEntityClass') },
{ 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>
<AttachmentDialog ref="attachmentDialogRef" @after-uploaded="afterUploaded"></AttachmentDialog>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, eventBus, DialogManager, Formater, Downloader } from 'platform-core';
import AttachmentDialog from './AttachmentDialog.vue';
const gridRef = ref();
const attachmentDialogRef = ref();
const afterUploaded = () => {
gridRef.value.refresh();
};
</script>

10
io.sc.platform.lcdp.frontend/src/views/theme/TagViewBar.vue

@ -84,5 +84,15 @@
></w-color-input> ></w-color-input>
</div> </div>
</div> </div>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-10">
<q-toggle
v-model="$gc.theme.tagViewBar['tabPanelKeepAlive']"
:label="$gc.theme.tagViewBar['tabPanelKeepAlive'] ? $t('theme.tagViewBar.tabPanelKeepAlive.yes') : $t('theme.tagViewBar.tabPanelKeepAlive.no')"
:color="$gc.theme.dark ? 'white' : 'primary'"
class="p-1"
/>
</div>
</div>
</template> </template>
<script setup lang="ts"></script> <script setup lang="ts"></script>

20
io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue

@ -93,6 +93,26 @@
/> />
</div> </div>
</div> </div>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-10">
<q-toggle
v-model="$gc.theme.topper['showLoginName']"
:label="$gc.theme.topper['showLoginName'] ? $t('theme.topper.showLoginName.yes') : $t('theme.topper.showLoginName.no')"
class="p-1"
:color="$gc.theme.dark ? 'white' : 'primary'"
/>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-10">
<q-toggle
v-model="$gc.theme.topper['showUserName']"
:label="$gc.theme.topper['showUserName'] ? $t('theme.topper.showUserName.yes') : $t('theme.topper.showUserName.no')"
class="p-1"
:color="$gc.theme.dark ? 'white' : 'primary'"
/>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-10"> <div class="col-lg-4 col-md-6 col-sm-8 col-xs-10">
<q-toggle <q-toggle

18
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java

@ -14,6 +14,8 @@ public class Topper {
private String titleColor ="white"; // 标题颜色 private String titleColor ="white"; // 标题颜色
private Map<String,TopperAction> actions =new HashMap<>(); // 顶部动作按钮 private Map<String,TopperAction> actions =new HashMap<>(); // 顶部动作按钮
private long notifierInterval=5*60; // 顶部通知器轮询间隔(单位:秒) private long notifierInterval=5*60; // 顶部通知器轮询间隔(单位:秒)
private boolean showLoginName =true; // 是否显示用户登录名
private boolean showUserName =true; // 是否显示用户名
private boolean showDefaultRole =true; // 是否显示用户默认角色 private boolean showDefaultRole =true; // 是否显示用户默认角色
public Topper(){ public Topper(){
@ -102,6 +104,22 @@ public class Topper {
this.notifierInterval = notifierInterval; this.notifierInterval = notifierInterval;
} }
public boolean isShowLoginName() {
return showLoginName;
}
public void setShowLoginName(boolean showLoginName) {
this.showLoginName = showLoginName;
}
public boolean isShowUserName() {
return showUserName;
}
public void setShowUserName(boolean showUserName) {
this.showUserName = showUserName;
}
public boolean isShowDefaultRole() { public boolean isShowDefaultRole() {
return showDefaultRole; return showDefaultRole;
} }

15
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExportExcelTemplateColumnController.java

@ -1,15 +0,0 @@
package io.sc.platform.lcdp.excel.template.controller;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateColumnEntity;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateColumnRepository;
import io.sc.platform.lcdp.excel.template.service.ExportExcelTemplateColumnService;
import io.sc.platform.lcdp.excel.template.vo.ExportExcelTemplateColumnVo;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/exportexcel/column")
public class ExportExcelTemplateColumnController extends RestCrudController<ExportExcelTemplateColumnVo, ExportExcelTemplateColumnEntity,String, ExportExcelTemplateColumnRepository, ExportExcelTemplateColumnService> {
}

22
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExportExcelTemplateController.java

@ -1,22 +0,0 @@
package io.sc.platform.lcdp.excel.template.controller;
import io.sc.platform.core.response.ResponseWrapper;
import io.sc.platform.core.response.SuccessResponseWrapper;
import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateEntity;
import io.sc.platform.lcdp.excel.template.repository.ExcelTemplateRepository;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateRepository;
import io.sc.platform.lcdp.excel.template.service.ExcelTemplateService;
import io.sc.platform.lcdp.excel.template.service.ExportExcelTemplateService;
import io.sc.platform.lcdp.excel.template.vo.ExcelTemplateVo;
import io.sc.platform.lcdp.excel.template.vo.ExportExcelTemplateVo;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/exportexcel/template")
public class ExportExcelTemplateController extends RestCrudController<ExportExcelTemplateVo, ExportExcelTemplateEntity,String, ExportExcelTemplateRepository, ExportExcelTemplateService> {
}

136
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExportExcelTemplateColumnEntity.java

@ -1,136 +0,0 @@
package io.sc.platform.lcdp.excel.template.entity;
import io.sc.platform.lcdp.excel.template.enums.DataType;
import io.sc.platform.lcdp.excel.template.vo.ExportExcelTemplateColumnVo;
import io.sc.platform.lcdp.excel.template.vo.ExportExcelTemplateVo;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
/**
* 导出 Excel 模版实体
*/
@Entity
@Table(name="LCDP_EXPORT_TEMPLATE_COLUMN")
public class ExportExcelTemplateColumnEntity extends CorporationAuditorEntity<ExportExcelTemplateColumnVo> {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
//字段代码
@Column(name="CODE_",nullable=false,length=255)
@Size(min=1,max=255)
private String code;
//字段名称
@Column(name="NAME_", length=255)
@Size(min=1,max=255)
private String name;
//字段描述
@Column(name="DESCRIPTION_", length=255)
@Size(min=1,max=255)
private String description;
//排序
@Column(name="ORDER_")
private Integer order;
//字段值类型
@Column(name="VALUE_TYPE_", length=255)
private String valueType;
//字段值公式
@Column(name="VALUE_FORMULA")
private String valueFormula;
//所属模版
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="TEMPLATE_ID_")
protected ExportExcelTemplateEntity template;
@Override
public ExportExcelTemplateColumnVo toVo() {
ExportExcelTemplateColumnVo vo = new ExportExcelTemplateColumnVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setCode(this.getCode());
vo.setName(this.getName());
vo.setDescription(this.getDescription());
vo.setOrder(this.getOrder());
vo.setValueType(this.getValueType());
vo.setValueFormula(this.getValueFormula());
vo.setTemplate(this.getTemplate().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String getValueType() {
return valueType;
}
public void setValueType(String valueType) {
this.valueType = valueType;
}
public String getValueFormula() {
return valueFormula;
}
public void setValueFormula(String valueFormula) {
this.valueFormula = valueFormula;
}
public ExportExcelTemplateEntity getTemplate() {
return template;
}
public void setTemplate(ExportExcelTemplateEntity template) {
this.template = template;
}
}

9
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/DataType.java

@ -1,9 +0,0 @@
package io.sc.platform.lcdp.excel.template.enums;
/**
* 导出数据类型
*/
public enum DataType {
JPA_ENTITY, // JPA 实体
SQL_RESULT_SET; // SQL 记录集
}

7
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExportExcelTemplateColumnRepository.java

@ -1,7 +0,0 @@
package io.sc.platform.lcdp.excel.template.repository;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateColumnEntity;
import io.sc.platform.orm.repository.DaoRepository;
public interface ExportExcelTemplateColumnRepository extends DaoRepository<ExportExcelTemplateColumnEntity, String> {
}

8
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExportExcelTemplateRepository.java

@ -1,8 +0,0 @@
package io.sc.platform.lcdp.excel.template.repository;
import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateEntity;
import io.sc.platform.orm.repository.DaoRepository;
public interface ExportExcelTemplateRepository extends DaoRepository<ExportExcelTemplateEntity, String> {
}

9
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExportExcelTemplateColumnService.java

@ -1,9 +0,0 @@
package io.sc.platform.lcdp.excel.template.service;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateColumnEntity;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateColumnRepository;
import io.sc.platform.orm.service.DaoService;
public interface ExportExcelTemplateColumnService extends DaoService<ExportExcelTemplateColumnEntity, String, ExportExcelTemplateColumnRepository> {
}

13
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExportExcelTemplateService.java

@ -1,13 +0,0 @@
package io.sc.platform.lcdp.excel.template.service;
import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateEntity;
import io.sc.platform.lcdp.excel.template.repository.ExcelTemplateRepository;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateRepository;
import io.sc.platform.orm.service.DaoService;
import java.util.Map;
public interface ExportExcelTemplateService extends DaoService<ExportExcelTemplateEntity, String, ExportExcelTemplateRepository> {
}

12
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExportExcelTemplateColumnServiceImpl.java

@ -1,12 +0,0 @@
package io.sc.platform.lcdp.excel.template.service.impl;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateColumnEntity;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateColumnRepository;
import io.sc.platform.lcdp.excel.template.service.ExportExcelTemplateColumnService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.stereotype.Service;
@Service("io.sc.platform.lcdp.excel.template.service.impl.ExportExcelTemplateColumnServiceImpl")
public class ExportExcelTemplateColumnServiceImpl extends DaoServiceImpl<ExportExcelTemplateColumnEntity, String, ExportExcelTemplateColumnRepository> implements ExportExcelTemplateColumnService {
}

24
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExportExcelTemplateServiceImpl.java

@ -1,24 +0,0 @@
package io.sc.platform.lcdp.excel.template.service.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.sc.platform.lcdp.excel.template.entity.ExcelParams;
import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate;
import io.sc.platform.lcdp.excel.template.entity.ExportExcelTemplateEntity;
import io.sc.platform.lcdp.excel.template.repository.ExcelParamsRepository;
import io.sc.platform.lcdp.excel.template.repository.ExcelTemplateRepository;
import io.sc.platform.lcdp.excel.template.repository.ExportExcelTemplateRepository;
import io.sc.platform.lcdp.excel.template.service.ExcelTemplateService;
import io.sc.platform.lcdp.excel.template.service.ExportExcelTemplateService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service("io.sc.platform.lcdp.excel.template.service.impl.ExportExcelTemplateServiceImpl")
public class ExportExcelTemplateServiceImpl extends DaoServiceImpl<ExportExcelTemplateEntity, String, ExportExcelTemplateRepository> implements ExportExcelTemplateService {
}

82
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExportExcelTemplateColumnVo.java

@ -1,82 +0,0 @@
package io.sc.platform.lcdp.excel.template.vo;
import io.sc.platform.lcdp.excel.template.enums.DataType;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
/**
* 导出 Excel 模版 Vo
*/
public class ExportExcelTemplateColumnVo extends CorporationAuditorVo {
private String id;
private String code;//模版代码
private String name;//模版名称
private String description;//模版描述
private Integer order;//排序
private String valueType;//值类型
private String valueFormula;//值公式
private String template;//模版ID
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String getValueType() {
return valueType;
}
public void setValueType(String valueType) {
this.valueType = valueType;
}
public String getValueFormula() {
return valueFormula;
}
public void setValueFormula(String valueFormula) {
this.valueFormula = valueFormula;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
}

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

Loading…
Cancel
Save