From beb4b6276e645bfcbebe8ddbc109ab381639d3a2 Mon Sep 17 00:00:00 2001 From: wangshaoping Date: Mon, 15 Apr 2024 18:54:54 +0800 Subject: [PATCH] update --- build.gradle | 7 +- erm.frontend/package.json | 4 +- gradle.properties | 9 +- io.sc.engine.mv.frontend/package.json | 4 +- io.sc.engine.mv.frontend/src/menus/menus.json | 2 +- .../src/views/config/binomial.vue | 2 +- .../src/views/config/chiSquare.vue | 2 +- .../src/views/config/cutOffPoint.vue | 2 +- .../src/views/config/dataExtractor.vue | 2 +- .../src/views/config/distribution.vue | 2 +- .../src/views/config/executor.vue | 1 + .../src/views/config/model.vue | 2 +- .../src/views/config/scale.vue | 2 +- .../src/views/config/threshold.vue | 2 +- .../src/views/result/Result.vue | 2 +- .../src/views/result/ResultDetailDialog.vue | 24 +- .../src/views/sample/Sample.vue | 8 +- io.sc.engine.rule.frontend/package.json | 4 +- .../src/i18n/messages_zh_CN.json | 31 +- .../src/views/dictionary/dictionary.vue | 7 +- .../src/views/lib/IndicatorGrid.vue | 4 +- .../src/views/lib/Lib.vue | 34 ++- .../src/views/lib/LibGrid.vue | 6 +- .../src/views/lib/ProcessorGrid.vue | 4 +- .../src/views/lib/TestCase.vue | 140 +++++++++ .../src/views/lib/TestCaseParameter.vue | 192 ++++++++++++ .../src/views/lib/ValidatorGrid.vue | 4 +- .../src/views/migration/Migration.vue | 7 +- .../src/views/resources/Resources.vue | 19 +- .../resources/designer/TestCaseParameter.vue | 2 +- .../src/views/resources/designer/Testcase.vue | 3 +- .../src/views/testcase/Testcase.vue | 283 +++++++++++++++++- .../src/views/workflow/Workflow.vue | 223 +++++++++++++- .../controller/ResourceWebController.java | 3 +- io.sc.platform.core.frontend/package.json | 3 +- .../components/workflow/WWorkflowAction.vue | 9 +- .../src/platform/i18n/messages.json | 1 + .../src/platform/i18n/messages_tw_CN.json | 1 + .../src/platform/i18n/messages_zh_CN.json | 1 + .../src/platform/index.ts | 4 +- .../src/platform/plugin/axios.ts | 141 +++++---- .../src/platform/plugin/index.ts | 2 +- .../src/platform/utils/Downloader.ts | 37 +++ .../src/platform/utils/index.ts | 1 + .../src/views/FormElements.vue | 54 ++-- .../template-project/package.json | 4 +- .../src/views/FormElements.vue | 21 +- .../package.json | 4 +- .../templates/pgp/setup/gradle.properties | 10 +- io.sc.platform.lcdp.frontend/package.json | 4 +- .../src/views/Frontend.vue | 8 +- io.sc.platform.mvc.frontend/package.json | 4 +- .../platform/mvc/plugins/item/Parameter.java | 2 +- .../platform/mvc/support/FileDownloader.java | 11 +- io.sc.platform.poi/build.gradle | 8 + io.sc.platform.poi/gradle.properties | 0 io.sc.platform.security.frontend/package.json | 4 +- .../META-INF/platform/plugins/messages.json | 3 +- .../META-INF/platform/plugins/parameters.json | 8 +- .../security/i18n/parameter.properties | 3 + .../security/i18n/parameter_tw_CN.properties | 3 + .../security/i18n/parameter_zh_CN.properties | 3 + .../system/api/parameter/ParameterVo.java | 31 ++ io.sc.platform.system.frontend/package.json | 4 +- .../src/i18n/messages.json | 4 - .../src/i18n/messages_tw_CN.json | 4 - .../src/i18n/messages_zh_CN.json | 4 - .../datasource/ConnectionPropertiesDialog.vue | 1 - .../src/views/datasource/Datasource.vue | 1 - .../src/views/monitor/Log.vue | 23 +- .../src/views/parameter/Parameter.vue | 88 +++++- .../src/views/shared/SelectMenuTreeGrid.vue | 1 + .../src/views/shared/SelectOrgTreeGrid.vue | 1 + .../src/views/shared/SelectRoleDialog.vue | 2 +- .../src/views/shared/SelectUserDialog.vue | 2 +- .../system/ds/jpa/entity/DsEntity.java | 3 +- .../system/i18n/jpa/entity/I18nEntity.java | 2 +- .../initializer/ParameterInitializer.java | 46 +-- .../system/menu/jpa/entity/MenuEntity.java | 3 +- .../controller/LogViewerWebController.java | 4 +- .../controller/ParameterWebController.java | 35 ++- .../parameter/jpa/entity/ParameterEntity.java | 101 ++++++- .../parameter/service/ParameterService.java | 1 + .../service/impl/ParameterServiceImpl.java | 59 +++- .../user/service/impl/UserServiceImpl.java | 7 +- .../META-INF/platform/plugins/messages.json | 3 +- .../platform/system/i18n/parameter.properties | 3 + .../system/i18n/parameter_tw_CN.properties | 3 + .../system/i18n/parameter_zh_CN.properties | 3 + ...0_20220606__System Database Schema DDL.xml | 5 +- io.sc.standard.frontend/package.json | 4 +- settings.gradle | 15 +- 92 files changed, 1551 insertions(+), 309 deletions(-) create mode 100644 io.sc.engine.rule.frontend/src/views/lib/TestCase.vue create mode 100644 io.sc.engine.rule.frontend/src/views/lib/TestCaseParameter.vue create mode 100644 io.sc.platform.core.frontend/src/platform/utils/Downloader.ts create mode 100644 io.sc.platform.poi/build.gradle create mode 100644 io.sc.platform.poi/gradle.properties create mode 100644 io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/parameter.properties create mode 100644 io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/parameter_tw_CN.properties create mode 100644 io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/parameter_zh_CN.properties create mode 100644 io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter.properties create mode 100644 io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_tw_CN.properties create mode 100644 io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_zh_CN.properties diff --git a/build.gradle b/build.gradle index c9d03814..93ea8d1d 100644 --- a/build.gradle +++ b/build.gradle @@ -52,7 +52,6 @@ subprojects { exclude group: "org.apache.logging.log4j", module: "log4j-to-slf4j" exclude group: "org.slf4j", module: "slf4j-jdk14" exclude group: "org.slf4j", module: "slf4j-nop" - //exclude group: "com.oracle.database.jdbc", module: "ojdbc8" } dependencyManagement { @@ -100,7 +99,6 @@ subprojects { compileTestJava.options.encoding ="${java_encoding}" tasks.withType(JavaCompile) { - //options.compilerArgs += ["-Xdoclint:none", "-Xlint:none", "-nowarn"] options.compilerArgs += ["-Xlint:deprecation","-Xlint:unchecked"] } @@ -184,7 +182,6 @@ subprojects { sources { include '*.adoc' } - //outputDir = file("$buildDir/resources/main/help/" + project.name) outputDir = file("dist/help/" + project.name) resources { from(sourceDir) { @@ -235,8 +232,6 @@ subprojects { doLast{ //打包时移除 jrebel 相关的文件 delete "$buildDir/resources/main/rebel.xml" - // - } } @@ -269,7 +264,7 @@ subprojects { *----------------------------------------------------------------*/ task jrebelIdea() {} tasks.jrebelIdea.doLast { - if(file('package.json').exists()){ + if(isFrontendProject(file('.'))) { File resourcesFile = file('java-src/main/resources') if (resourcesFile != null && resourcesFile.exists()) { File rebelFile = file('java-src/main/resources/rebel.xml') diff --git a/erm.frontend/package.json b/erm.frontend/package.json index 5b4ab9af..befbac32 100644 --- a/erm.frontend/package.json +++ b/erm.frontend/package.json @@ -1,6 +1,6 @@ { "name": "erm.frontend", - "version": "8.1.30", + "version": "8.1.33", "description": "", "private": false, "keywords": [], @@ -78,7 +78,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.160", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/gradle.properties b/gradle.properties index 1348bef2..96eb5b5f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.1.30 +platform_version=8.1.33 platform_plugin_version=8.1.13 -platform_core_frontend_version=8.1.160 +platform_core_frontend_version=8.1.169 ########################################################### # dependencies version @@ -62,13 +62,13 @@ jxls_jexcel_version=1.0.7 jxls_poi_version=1.0.15 jxls_version=2.4.6 mybatis_version=3.5.10 +ooxml_schemas_version=4.1.2 opencsv_version=5.7.1 oshi_version=6.4.2 p6spy_version=3.9.1 pinyin4j_version=2.5.1 -poi_ooxml_version=3.17 +poi_version=5.2.5 schemacrawler_version=16.19.11 -#schemacrawler_version=14.21.02 spring_boot_version=2.7.18 spring_cloud_alibaba_version=2021.0.4.0 spring_cloud_context_version=3.1.4 @@ -78,6 +78,7 @@ spring_statemachine_version=3.2.1 webjars_locator_weblogic_version=0.10 zip4j_version=2.11.5 + ########################################################### # asciidoc deploy directory,the path must end with '/' ########################################################### diff --git a/io.sc.engine.mv.frontend/package.json b/io.sc.engine.mv.frontend/package.json index 39abd105..087c18fb 100644 --- a/io.sc.engine.mv.frontend/package.json +++ b/io.sc.engine.mv.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.mv.frontend", - "version": "8.1.30", + "version": "8.1.33", "description": "", "private": false, "keywords": [], @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.160", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/io.sc.engine.mv.frontend/src/menus/menus.json b/io.sc.engine.mv.frontend/src/menus/menus.json index 3dd2148a..2e1567e3 100644 --- a/io.sc.engine.mv.frontend/src/menus/menus.json +++ b/io.sc.engine.mv.frontend/src/menus/menus.json @@ -18,7 +18,7 @@ [ /*模型验证*/ - {"type":"GROUP", "order":10000, "id":"menu.engine.mv", "titleI18nKey":"menu.engine.mv", "icon":"bi-bag-check"}, + {"type":"GROUP", "order":11000, "id":"menu.engine.mv", "titleI18nKey":"menu.engine.mv", "icon":"bi-bag-check"}, /*模型验证/验证结果查看*/ {"type":"ROUTE", "order":100, "parentId":"menu.engine.mv", "id":"menu.engine.mv.result", "titleI18nKey":"menu.engine.mv.result", "icon":"bi-display", "routeName":"route.engine.mv.result"}, /*模型验证/样本数据查看*/ diff --git a/io.sc.engine.mv.frontend/src/views/config/binomial.vue b/io.sc.engine.mv.frontend/src/views/config/binomial.vue index 5c130cf0..7664e958 100644 --- a/io.sc.engine.mv.frontend/src/views/config/binomial.vue +++ b/io.sc.engine.mv.frontend/src/views/config/binomial.vue @@ -1,6 +1,7 @@ diff --git a/io.sc.engine.rule.frontend/src/views/lib/TestCaseParameter.vue b/io.sc.engine.rule.frontend/src/views/lib/TestCaseParameter.vue new file mode 100644 index 00000000..dbf32171 --- /dev/null +++ b/io.sc.engine.rule.frontend/src/views/lib/TestCaseParameter.vue @@ -0,0 +1,192 @@ + + diff --git a/io.sc.engine.rule.frontend/src/views/lib/ValidatorGrid.vue b/io.sc.engine.rule.frontend/src/views/lib/ValidatorGrid.vue index 73a83747..88152b5e 100644 --- a/io.sc.engine.rule.frontend/src/views/lib/ValidatorGrid.vue +++ b/io.sc.engine.rule.frontend/src/views/lib/ValidatorGrid.vue @@ -202,11 +202,11 @@ const ValueTypeAndValidatorTypeMapping = { }; const refresh = () => { - gridRef.value.refresh(); + gridRef?.value?.refresh(); }; onMounted(() => { - gridRef.value.refresh(); + gridRef?.value?.refresh(); }); defineExpose({ diff --git a/io.sc.engine.rule.frontend/src/views/migration/Migration.vue b/io.sc.engine.rule.frontend/src/views/migration/Migration.vue index 1733c453..08bba5ac 100644 --- a/io.sc.engine.rule.frontend/src/views/migration/Migration.vue +++ b/io.sc.engine.rule.frontend/src/views/migration/Migration.vue @@ -62,8 +62,7 @@ :label="$t('re.migration.export.action')" @click=" () => { - let url = Environment.apiContextPath('/api/re/migration/export'); - downloadIframeRef.src = url; + Downloader.get(Environment.apiContextPath('/api/re/migration/export')); } " > @@ -133,15 +132,13 @@
- diff --git a/io.sc.engine.rule.frontend/src/views/resources/Resources.vue b/io.sc.engine.rule.frontend/src/views/resources/Resources.vue index f73b221a..f80732c8 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/Resources.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/Resources.vue @@ -212,15 +212,22 @@ return arg.selected; }, click: (arg) => { - //axios.get(Environment.apiContextPath('/api/re/resource/export/' + arg.selected.id)); - let url = Environment.apiContextPath('/api/re/resource/export/' + arg.selected.id); - downloadIframe.src = url; + Downloader.get(Environment.apiContextPath('/api/re/resource/export/' + arg.selected.id)); }, }, ]" :columns="[ { width: '100%', name: 'name', label: $t('name') }, - { width: 80, name: 'type', label: $t('type'), format: Formater.enum(Enums.ResourceType) }, + { + width: 80, + name: 'type', + label: $t('type'), + format: (value, row) => { + if (value !== 'FOLDER') { + return Formater.enum(Enums.ResourceType)(value); + } + }, + }, { width: 100, name: 'code', label: $t('code') }, { width: 60, name: 'version', label: $t('version') }, { width: 60, name: 'status', label: $t('status'), format: Formater.enum(Enums.DeployStatus) }, @@ -315,12 +322,11 @@ - + diff --git a/io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue b/io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue index ef47bdb5..f195a362 100644 --- a/io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue +++ b/io.sc.engine.rule.frontend/src/views/workflow/Workflow.vue @@ -1,4 +1,223 @@ - + diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourceWebController.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourceWebController.java index 3e9e58b6..6c990500 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourceWebController.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/controller/ResourceWebController.java @@ -18,7 +18,9 @@ import io.sc.engine.rule.server.resource.entity.ResourceEntity; import io.sc.engine.rule.server.resource.repository.ResourceRepository; import io.sc.engine.rule.server.resource.service.ResourceService; import io.sc.engine.rule.server.resource.vo.ResourceVo; +import io.sc.platform.core.util.FileUtil; import io.sc.platform.core.util.ObjectMapper4Json; +import io.sc.platform.core.util.StringUtil; import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.support.FileDownloader; import org.slf4j.Logger; @@ -230,7 +232,6 @@ public class ResourceWebController extends RestCrudController { } // 提交按钮 - buttons.push({ title: t('submit') }); + if (props.defaultSubmitButton) { + buttons.push({ title: t('submit'), transientVariables: { variableName: 'submit', variableValue: '' } }); + } // 添加默认按钮(右边) if (props.defaultActionButtonsPlacement === 'right') { @@ -105,7 +110,7 @@ const buildButtons = (gobacks) => { }; const buttonClick = (action) => { - emit('beforeSubmit', (value) => { + emit('beforeSubmit', action, (value) => { if (value) { DialogManager.confirm(t('lcdp.bpm.completeTask.action.tip', { action: action.title }), () => { currentActionRef.value = action; diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages.json b/io.sc.platform.core.frontend/src/platform/i18n/messages.json index 7756ef78..a307dd2a 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages.json @@ -10,6 +10,7 @@ "504": "Gateway Timeout(504) !", "505": "HTTP Version Not Supported(505) !", "NetworkError": "Network Error !", + "ERR_BAD_RESPONSE":"Server Response Error !", "about": "About", "cancel": "Cancel", "changeRole": "Change Role", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json index 23e84d37..67a3cd04 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json @@ -10,6 +10,7 @@ "504": "网关超时(504) !", "505": "不支持的 HTTP 版本(505) !", "NetworkError": "网络异常!", + "ERR_BAD_RESPONSE":"服務器響應錯誤!", "about": "關於", "cancel": "取消", "changeRole": "切換角色", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json index e3ca98b7..38c75aa7 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json @@ -10,6 +10,7 @@ "504": "网关超时(504) !", "505": "不支持的 HTTP 版本(505) !", "NetworkError": "网络异常!", + "ERR_BAD_RESPONSE":"服务器响应错误!", "about": "关于", "cancel": "取消", "changeRole": "切换角色", diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts index 20f699e0..d56f0c79 100644 --- a/io.sc.platform.core.frontend/src/platform/index.ts +++ b/io.sc.platform.core.frontend/src/platform/index.ts @@ -18,6 +18,7 @@ import '@quasar/extras/material-symbols-outlined/material-symbols-outlined.css'; //import '@quasar/extras/material-symbols-sharp/material-symbols-sharp.css'; import '@quasar/extras/eva-icons/eva-icons.css'; import '@quasar/extras/fontawesome-v6/fontawesome-v6.css'; +import '@maxgraph/core/css/common.css'; //import './css/tailwind.css'; export default { @@ -62,7 +63,7 @@ export { PConst } from './PConst'; /** * 导出插件 */ -export { axios } from './plugin'; +export { axios, blobAxios } from './plugin'; export { eventBus } from './plugin'; export { i18n } from './plugin'; export { usePlatformStore } from './plugin'; @@ -88,6 +89,7 @@ export { TagViewManager } from './plugin'; * 导出工具 */ export { DictionaryTools } from './utils'; +export { Downloader } from './utils'; export { EnumTools } from './utils'; export { DateTools } from './utils'; export { JavascriptLoader } from './utils'; diff --git a/io.sc.platform.core.frontend/src/platform/plugin/axios.ts b/io.sc.platform.core.frontend/src/platform/plugin/axios.ts index cd707ab1..4c0c3a8b 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/axios.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/axios.ts @@ -4,84 +4,105 @@ import { i18n } from './i18n'; import { PConst } from '@/platform/PConst'; import { Environment } from '@/platform/plugin/environment'; import { NotifyManager } from './manager'; +import { Tools } from '@/platform/utils'; const ignoredUrls: string[] = [PConst.API_I18N_MESSAGES_URL, PConst.API_APP_CONFIGURE_URL]; const gc = Environment.getConfigure(); -const axios = Axios.create({ - baseURL: gc.axios?.baseURL || '', - timeout: gc.axios?.timeout || 1000 * 60, -}); - // 请求拦截器 -axios.interceptors.request.use( - (config: any) => { - config.headers.locale = gc.setting.i18n.locale; - // 忽略无需认证的请求 URL - for (const url of ignoredUrls) { - if (config.url.includes(url)) { - return config; - } - } - // 对于需要认证的请求 URL 添加 basic 认证 - const result = config; - if (gc.axios?.basicAuth?.enable) { - result.headers.Authorization = 'Basic ' + window.btoa(gc.axios.basicAuth.username + ':' + gc.axios.basicAuth.password); +const requestInterceptor = (config: any) => { + config.headers.locale = gc.setting.i18n.locale; + // 忽略无需认证的请求 URL + for (const url of ignoredUrls) { + if (config.url.includes(url)) { + return config; } - return result; - }, - (error: any) => { - return Promise.reject(error); - }, -); + } + // 对于需要认证的请求 URL 添加 basic 认证 + const result = config; + if (gc.axios?.basicAuth?.enable) { + result.headers.Authorization = 'Basic ' + window.btoa(gc.axios.basicAuth.username + ':' + gc.axios.basicAuth.password); + } + return result; +}; + +// 请求错误拦截器 +const requestErrorInterceptor = (error: any) => { + return Promise.reject(error); +}; // 响应拦截器 -axios.interceptors.response.use( - (response: any) => { - // 请求成功, 进入该方法说明 response 的状态码为 2xx - return response.data; - }, - (error: any) => { - // 请求失败, 进入该方法说明 response 的状态码不为 2xx - if (error.code === 'ECONNABORTED' || error.message.indexOf('timeout') !== -1 || error.message === 'Network Error') { - // 发生网络错误 - const $t = i18n.global.t; - NotifyManager.error($t('NetworkError')); +const responseInterceptor = (response: any) => { + // 请求成功, 进入该方法说明 response 的状态码为 2xx + return response.data; +}; + +// 响应错误拦截器 +const responseErrorInterceptor = (error: any) => { + // 请求失败, 进入该方法说明 response 的状态码不为 2xx + if (error.code === 'ECONNABORTED' || error.message.indexOf('timeout') !== -1 || error.message === 'Network Error') { + // 发生网络错误 + const $t = i18n.global.t; + NotifyManager.error($t('NetworkError')); + return Promise.reject({ + code: 'NetworkError', + errorMessageI18nKey: 'NetworkError', + errorMessage: error.message, + exception: 'NetworkError', + stackTrace: error.stack, + data: null, + }); + } else { + // 服务器端错误 + const response = error?.response; + const status = response?.status; + const data = response?.data; + //下载错误 + if (error.request.responseType === 'blob') { + NotifyManager.error(i18n.global.t(error?.code)); + return Promise.reject(error); + } + //其他错误 + if (status === 500) { + NotifyManager.error(i18n.global.t(data?.errorMessageI18nKey)); + return Promise.reject(response.data); + } else { + NotifyManager.error(i18n.global.t(status)); return Promise.reject({ - code: 'NetworkError', - errorMessageI18nKey: 'NetworkError', + code: status, + errorMessageI18nKey: status, errorMessage: error.message, - exception: 'NetworkError', + exception: error.code, stackTrace: error.stack, data: null, }); - } else { - // 服务器端错误 - const response = error?.response; - const status = response?.status; - const data = response?.data; - if (status === 500) { - NotifyManager.error(i18n.global.t(data?.errorMessageI18nKey)); - return Promise.reject(response.data); - } else { - NotifyManager.error(i18n.global.t(status)); - return Promise.reject({ - code: status, - errorMessageI18nKey: status, - errorMessage: error.message, - exception: error.code, - stackTrace: error.stack, - data: null, - }); - } } - }, -); + } +}; + +// 普通 axios +const axios = Axios.create({ + baseURL: gc.axios?.baseURL || '', + timeout: gc.axios?.timeout || 1000 * 60, +}); +axios.interceptors.request.use(requestInterceptor, requestErrorInterceptor); +axios.interceptors.response.use(responseInterceptor, responseErrorInterceptor); + +// 下载二进制 axios +const blobAxios = Axios.create({ + baseURL: gc.axios?.baseURL || '', + timeout: gc.axios?.timeout || 1000 * 60, +}); +blobAxios.interceptors.request.use(requestInterceptor, requestErrorInterceptor); +blobAxios.interceptors.response.use((response: any) => { + return response; +}, responseErrorInterceptor); export default { install: (app: App) => { app.config.globalProperties.$axios = axios; + app.config.globalProperties.$blobAxios = blobAxios; }, }; -export { axios }; +export { axios, blobAxios }; diff --git a/io.sc.platform.core.frontend/src/platform/plugin/index.ts b/io.sc.platform.core.frontend/src/platform/plugin/index.ts index a3abb2e7..80a82b3c 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/index.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/index.ts @@ -15,7 +15,7 @@ export default { }, }; -export { axios } from './axios'; +export { axios, blobAxios } from './axios'; export { eventBus } from './quasar'; export { i18n } from './i18n'; export { usePlatformStore } from './pinia'; diff --git a/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts b/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts new file mode 100644 index 00000000..efa60f36 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts @@ -0,0 +1,37 @@ +import { blobAxios } from '@/platform'; + +class Downloader { + public static get(url: string, data: any) { + blobAxios.get(url, data, { responseType: 'blob' }).then((response) => { + Downloader.download(response); + }); + } + + public static post(url: string, data: any) { + blobAxios.post(url, data, { responseType: 'blob' }).then((response) => { + Downloader.download(response); + }); + } + + private static download(response) { + if (response) { + const { data, headers } = response; + let fileName = headers['content-disposition-url-encode'].match(/filename=(.*)/)[1]; + fileName = decodeURIComponent(fileName || 'download'); + // 如果下载的内容是 json 字符串, 返回的 data 是一个 js Object, 需要转换成 json 字符串 + const _data = data instanceof Object ? JSON.stringify(data, null, ' ') : data; + const blob = new Blob([_data], { type: headers['content-type'] }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = decodeURI(fileName); + a.style.display = 'none'; + document.body.appendChild(a); + a.click(); + a.parentNode.removeChild(a); + window.URL.revokeObjectURL(url); + } + } +} + +export { Downloader }; diff --git a/io.sc.platform.core.frontend/src/platform/utils/index.ts b/io.sc.platform.core.frontend/src/platform/utils/index.ts index 8732fb73..acedd28e 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/index.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/index.ts @@ -1,5 +1,6 @@ export { DateTools } from './DateTools'; export { DictionaryTools } from './DictionaryTools'; +export { Downloader } from './Downloader'; export { EnumTools } from './EnumTools'; export { JavascriptLoader } from './JavascriptLoader'; export { QuasarTools } from './QuasarTools'; diff --git a/io.sc.platform.core.frontend/src/views/FormElements.vue b/io.sc.platform.core.frontend/src/views/FormElements.vue index cac76618..da8dd2d0 100644 --- a/io.sc.platform.core.frontend/src/views/FormElements.vue +++ b/io.sc.platform.core.frontend/src/views/FormElements.vue @@ -1,39 +1,25 @@ diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json index 4f09aacb..26ad6df9 100644 --- a/io.sc.platform.core.frontend/template-project/package.json +++ b/io.sc.platform.core.frontend/template-project/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.1.164", + "version": "8.1.169", "description": "前端核心包,用于快速构建前端的脚手架", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.164", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/io.sc.platform.core.frontend/template-project/src/views/FormElements.vue b/io.sc.platform.core.frontend/template-project/src/views/FormElements.vue index cac76618..7c1f6d80 100644 --- a/io.sc.platform.core.frontend/template-project/src/views/FormElements.vue +++ b/io.sc.platform.core.frontend/template-project/src/views/FormElements.vue @@ -18,7 +18,24 @@ { name: 'enable', label: $t('isEnable'), type: 'select' }, ]" :toolbar-configure="{ noIcon: false }" - :toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator']" + :toolbar-actions="[ + 'query', + 'refresh', + 'separator', + 'add', + 'clone', + 'edit', + 'remove', + 'separator', + { + name: 'download', + label: $t('download'), + click: () => { + //Downloader.get(Environment.apiContextPath('/api/re/resource/export/10e2a868-caaf-423d-a135-23f530f11696')); + Downloader.get(Environment.apiContextPath('/api/monitor/logger/downloadLogFile?fileName=log.log')); + }, + }, + ]" :columns="[ { width: 150, name: 'loginName', label: $t('loginName') }, { width: '100%', name: 'userName', label: $t('userName') }, @@ -35,5 +52,5 @@ diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json index e179c959..652607a4 100644 --- a/io.sc.platform.developer.frontend/package.json +++ b/io.sc.platform.developer.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.developer.frontend", - "version": "8.1.30", + "version": "8.1.33", "description": "", "private": false, "keywords": [], @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.160", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/io.sc.platform.gradle/templates/pgp/setup/gradle.properties b/io.sc.platform.gradle/templates/pgp/setup/gradle.properties index 1348bef2..7882fe71 100644 --- a/io.sc.platform.gradle/templates/pgp/setup/gradle.properties +++ b/io.sc.platform.gradle/templates/pgp/setup/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.1.30 +platform_version=8.1.33 platform_plugin_version=8.1.13 -platform_core_frontend_version=8.1.160 +platform_core_frontend_version=8.1.169 ########################################################### # dependencies version @@ -62,13 +62,14 @@ jxls_jexcel_version=1.0.7 jxls_poi_version=1.0.15 jxls_version=2.4.6 mybatis_version=3.5.10 +ooxml_schemas_version=4.1.2 opencsv_version=5.7.1 oshi_version=6.4.2 p6spy_version=3.9.1 pinyin4j_version=2.5.1 -poi_ooxml_version=3.17 -schemacrawler_version=16.19.11 +poi_version=5.2.5 #schemacrawler_version=14.21.02 +schemacrawler_version=16.19.11 spring_boot_version=2.7.18 spring_cloud_alibaba_version=2021.0.4.0 spring_cloud_context_version=3.1.4 @@ -78,6 +79,7 @@ spring_statemachine_version=3.2.1 webjars_locator_weblogic_version=0.10 zip4j_version=2.11.5 + ########################################################### # asciidoc deploy directory,the path must end with '/' ########################################################### diff --git a/io.sc.platform.lcdp.frontend/package.json b/io.sc.platform.lcdp.frontend/package.json index b5b72954..17966b3a 100644 --- a/io.sc.platform.lcdp.frontend/package.json +++ b/io.sc.platform.lcdp.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.lcdp.frontend", - "version": "8.1.30", + "version": "8.1.33", "description": "", "private": false, "keywords": [], @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.160", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/io.sc.platform.lcdp.frontend/src/views/Frontend.vue b/io.sc.platform.lcdp.frontend/src/views/Frontend.vue index bbc8ab0e..3caf1029 100644 --- a/io.sc.platform.lcdp.frontend/src/views/Frontend.vue +++ b/io.sc.platform.lcdp.frontend/src/views/Frontend.vue @@ -9,19 +9,15 @@
-
- -
diff --git a/io.sc.platform.system.frontend/src/views/shared/SelectMenuTreeGrid.vue b/io.sc.platform.system.frontend/src/views/shared/SelectMenuTreeGrid.vue index bb4e87f4..e8c519c1 100644 --- a/io.sc.platform.system.frontend/src/views/shared/SelectMenuTreeGrid.vue +++ b/io.sc.platform.system.frontend/src/views/shared/SelectMenuTreeGrid.vue @@ -2,6 +2,7 @@ -
+
-
+
{ +public class DsEntity extends CorporationAuditorEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -43,6 +43,7 @@ public abstract class DsEntity extends CorporationAuditorEntity { @Size(max=255) private String description; + @Override public void toVo(DsVo vo){ if(vo!=null){ super.toVo(vo); diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java index 4115ad0d..18134fcd 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java @@ -55,7 +55,7 @@ public class I18nEntity extends CorporationAuditorEntity { super.toVo(vo); vo.setId(this.getId()); vo.setCode(this.getCode()); - vo.setLang(this.getLang().toString()); + vo.setLang(this.getLang()==null?null:this.getLang().toString()); vo.setMessage(this.getMessage()); return vo; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java index b7146919..2d9c1938 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java @@ -12,7 +12,6 @@ import java.util.UUID; public class ParameterInitializer implements ApplicationInitializer { private Boolean isInitialized =null; - private JdbcTemplate jdbcTemplate; private ParameterService parameterService; @Override @@ -22,7 +21,6 @@ public class ParameterInitializer implements ApplicationInitializer { @Override public void init(ApplicationContext applicationContext) { - this.jdbcTemplate =applicationContext.getBean(JdbcTemplate.class); this.parameterService =applicationContext.getBean(ParameterService.class); } @@ -41,44 +39,10 @@ public class ParameterInitializer implements ApplicationInitializer { @Override public void execute() throws ApplicationInitializerExecuteException { - String systemId =UUID.randomUUID().toString(); - new InsertIntoSqlBuilder().table("SYS_PARAMETER") - .field("ID_", systemId) - .field("CODE_","parameter.system") - .field("VALUE_",null) - .field("PARENT_ID_",null) - .field("DATA_COME_FROM_","INPUT") - .field("CREATOR_","admin") - .field("CREATE_DATE_",new Date()) - .field("LAST_MODIFIER_","admin") - .field("LAST_MODIFYDATE_",new Date()) - .field("CORP_CODE_","_PRIMARY_") - .insert(jdbcTemplate); - - new InsertIntoSqlBuilder().table("SYS_PARAMETER") - .field("ID_", UUID.randomUUID().toString()) - .field("CODE_","parameter.system.homePage") - .field("VALUE_","/home") - .field("PARENT_ID_",systemId) - .field("DATA_COME_FROM_","INPUT") - .field("CREATOR_","admin") - .field("CREATE_DATE_",new Date()) - .field("LAST_MODIFIER_","admin") - .field("LAST_MODIFYDATE_",new Date()) - .field("CORP_CODE_","_PRIMARY_") - .insert(jdbcTemplate); - - new InsertIntoSqlBuilder().table("SYS_PARAMETER") - .field("ID_", UUID.randomUUID().toString()) - .field("CODE_","parameter.login.encodePassword") - .field("VALUE_","false") - .field("PARENT_ID_",systemId) - .field("DATA_COME_FROM_","INPUT") - .field("CREATOR_","admin") - .field("CREATE_DATE_",new Date()) - .field("LAST_MODIFIER_","admin") - .field("LAST_MODIFYDATE_",new Date()) - .field("CORP_CODE_","_PRIMARY_") - .insert(jdbcTemplate); + try { + parameterService.init(); + } catch (Exception e) { + throw new ApplicationInitializerExecuteException(e); + } } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuEntity.java index 915782bb..580054e4 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuEntity.java @@ -35,7 +35,7 @@ import java.util.Objects; @JsonSubTypes.Type(value = MenuUrlEntity.class, name = "URL"), @JsonSubTypes.Type(value = MenuJavascriptEntity.class, name = "JAVASCRIPT") }) -public abstract class MenuEntity extends CorporationAuditorEntity implements IdClearable { +public class MenuEntity extends CorporationAuditorEntity implements IdClearable { //ID,主键 @Id @GeneratedValue(generator = "system-uuid") @@ -101,6 +101,7 @@ public abstract class MenuEntity extends CorporationAuditorEntity implem @JoinColumn(name="PARENT_ID_") protected MenuGroupEntity parent; + @Override public void toVo(MenuVo vo){ if(vo!=null){ super.toVo(vo); diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerWebController.java index 60807b42..8fcdddcf 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerWebController.java @@ -132,8 +132,8 @@ public class LogViewerWebController { * @param response HttpServletResponse 对象 * @throws Exception 违例 */ - @RequestMapping(value="downloadLogFile/{fileName:.+}",method=RequestMethod.GET) - public void downloadLogFile(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception{ + @RequestMapping(value="downloadLogFile",method=RequestMethod.GET) + public void downloadLogFile(@RequestParam("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception{ Resource resource =new DefaultResourceLoader().getResource("file://" + DirectoryManager.getInstance().getByName("dir.log") + "/" + fileName); FileDownloader.download(request, response, fileName, resource); } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java index ba0a026b..12015f58 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java @@ -1,15 +1,48 @@ package io.sc.platform.system.parameter.controller; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.mvc.plugins.item.Parameter; +import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.system.api.parameter.ParameterVo; import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; import io.sc.platform.system.parameter.service.ParameterService; +import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @RestController @RequestMapping("api/system/parameter") public class ParameterWebController extends RestCrudController { - + @Override + protected Page query(HttpServletRequest request, HttpServletResponse response, QueryParameter queryParameter) throws Exception { + Page page =super.query(request, response, queryParameter); + List vos =page.getContent(); + if(vos!=null && !vos.isEmpty()){ + List parameters = PluginManager.getInstance().getParameters(); + if(parameters!=null && !parameters.isEmpty()){ + Map parameterMap =new HashMap<>(parameters.size()); + for(Parameter parameter : parameters){ + parameterMap.put(parameter.getCode(),parameter); + } + for(ParameterVo vo : vos){ + Parameter parameter =parameterMap.get(vo.getCode()); + if(parameter!=null) { + vo.setDefaultValue(parameter.getDefaultValue()); + if (parameter.getOptions() != null) { + vo.setOptions(parameter.getOptions()); + } + } + } + } + } + return page; + } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java index 440f6e7a..ef0d08f3 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java @@ -1,21 +1,26 @@ package io.sc.platform.system.parameter.jpa.entity; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.mvc.plugins.item.Parameter; +import io.sc.platform.orm.DeepClone; +import io.sc.platform.orm.IdClearable; import io.sc.platform.orm.entity.CorporationAuditorEntity; import io.sc.platform.system.api.parameter.ParameterVo; -import io.sc.platform.system.parameter.jpa.support.ParameterEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; +import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; import javax.persistence.*; import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** - * 法人实体类 + * 系统参数实体类 */ @Entity @Table(name="SYS_PARAMETER") -public class ParameterEntity extends CorporationAuditorEntity { +public class ParameterEntity extends CorporationAuditorEntity implements IdClearable { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -31,15 +36,34 @@ public class ParameterEntity extends CorporationAuditorEntity { @Size(max=255) private String value; + //排序 + @Column(name="ORDER_",nullable=false) + protected Integer order; + @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="PARENT_ID_") private ParameterEntity parent; + //孩子集合 + @OneToMany(mappedBy="parent",cascade= {CascadeType.PERSIST}) + @OrderBy("order") + protected List children =new ArrayList(); + public ParameterEntity(){} public ParameterEntity(String id){ this.id =id; } + public static ParameterEntity from(Parameter parameter){ + ParameterEntity entity =new ParameterEntity(); + entity.setId(parameter.getId()); + entity.setCode(parameter.getCode()); + entity.setValue(parameter.getDefaultValue()); + entity.setOrder(parameter.getOrder()); + entity.setParent(StringUtils.hasText(parameter.getParentId())?new ParameterEntity(parameter.getParentId()):null); + return entity; + } + @Override public ParameterVo toVo() { ParameterVo vo =new ParameterVo(); @@ -47,6 +71,7 @@ public class ParameterEntity extends CorporationAuditorEntity { vo.setId(this.getId()); vo.setCode(this.getCode()); vo.setValue(this.getValue()); + vo.setOrder(this.getOrder()); vo.setParent(this.getParent()==null?null:this.getParent().getId()); return vo; } @@ -75,6 +100,14 @@ public class ParameterEntity extends CorporationAuditorEntity { this.value = value; } + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + public ParameterEntity getParent() { return parent; } @@ -82,4 +115,62 @@ public class ParameterEntity extends CorporationAuditorEntity { public void setParent(ParameterEntity parent) { this.parent = parent; } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + /** + * 重新设置父 + * @param parent 新父 + */ + public void resetParent(ParameterEntity parent){ + if(this.parent!=parent){ + //首先移除之前的关系 + if(this.parent!=null){ + List children =this.parent.getChildren(); + if(children!=null && children.contains(this)){ + children.remove(this); + } + } + //建立新的父子关系 + if(parent!=null){ + List children =parent.getChildren(); + if(children!=null && !children.contains(this)){ + children.add(this); + } + } + this.parent =parent; + } + } + + @Override + public void clearId() { + this.setId(null); + //清除所有 children 的 Id 值 + List children =this.getChildren(); + if(children!=null && children.size()>0) { + for(ParameterEntity child : children) { + child.clearId(); + } + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ParameterEntity entity = (ParameterEntity) o; + return Objects.equals(code, entity.code); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), code); + } } \ No newline at end of file diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/ParameterService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/ParameterService.java index 5817f119..80754b67 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/ParameterService.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/ParameterService.java @@ -6,4 +6,5 @@ import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; public interface ParameterService extends DaoService, SystemParameterService { + public void init() throws Exception; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java index 60734881..a48ca501 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java @@ -1,19 +1,50 @@ package io.sc.platform.system.parameter.service.impl; +import io.sc.platform.core.util.TreeBuilder; +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.mvc.plugins.item.Parameter; import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.system.menu.jpa.entity.MenuEntity; +import io.sc.platform.system.menu.jpa.entity.MenuGroupEntity; +import io.sc.platform.system.menu.service.support.MenuEntityTreeBuilder; import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; import io.sc.platform.system.parameter.service.ParameterService; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import javax.transaction.Transactional; +import java.util.*; @Service public class ParameterServiceImpl extends DaoServiceImpl implements ParameterService { + @Override + @Transactional + public void init() throws Exception { + List parameters =PluginManager.getInstance().getParameters(); + if(parameters!=null && !parameters.isEmpty()) { + List entities =new ArrayList<>(); + for(Parameter parameter : parameters){ + entities.add(ParameterEntity.from(parameter)); + } + TreeBuilder treeBuilder =new ParameterEntityTreeBuilder(); + entities =treeBuilder.buildAndGetRoots(entities); + if(entities!=null && !entities.isEmpty()){ + for(ParameterEntity entity : entities){ + entity.clearId(); + repository.save(entity); + } + } + } + } + + @Override + public String[] getDefaultSortBy() { + return new String[]{"order"}; + } + @Override public boolean containsParameter(String code) { if(StringUtils.hasText(code)) { @@ -72,4 +103,24 @@ public class ParameterServiceImpl extends DaoServiceImpl { + @Override + public String getId(ParameterEntity entity) { + return entity.getId(); + } + + @Override + public String getParentId(ParameterEntity entity) { + if(entity.getParent()!=null) { + return entity.getParent().getId(); + } + return null; + } + + @Override + public void resetParent(ParameterEntity entity, ParameterEntity parent) { + entity.resetParent(parent); + } + } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java index 2dccbb65..6b729ee9 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java @@ -440,20 +440,21 @@ public class UserServiceImpl extends DaoServiceImpl getFrontEndRoutes(List menus){ + List result = new ArrayList<>(); + Map frontEndRouteMap =new HashMap<>(); if(menus!=null && !menus.isEmpty()) { - List result = new ArrayList<>(); for(MenuVo menu : menus){ if (menu instanceof MenuRouteVo) { MenuRouteVo routeMenu = (MenuRouteVo) menu; FrontEndRoute route = PluginManager.getInstance().getFrontEndRouteByName(routeMenu.getRouteName()); if(route!=null) { result.add(route); + frontEndRouteMap.put(route.getName(),route); } } } - return result; } - return Collections.emptyList(); + return result; } @Override diff --git a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json index 5041b440..2e916a41 100644 --- a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json +++ b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json @@ -1,5 +1,6 @@ { "includes":[ - "io/sc/platform/system/i18n/initializer" + "io/sc/platform/system/i18n/initializer", + "io/sc/platform/system/i18n/parameter" ] } \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter.properties new file mode 100644 index 00000000..8e494fc9 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter.properties @@ -0,0 +1,3 @@ +parameter.system=System +parameter.system.homePage=Home Page +parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_tw_CN.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_tw_CN.properties new file mode 100644 index 00000000..5f1d6bf5 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_tw_CN.properties @@ -0,0 +1,3 @@ +parameter.system=\u7CFB\u7D71 +parameter.system.homePage=\u9996\u9801 +parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_zh_CN.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_zh_CN.properties new file mode 100644 index 00000000..484795a0 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/parameter_zh_CN.properties @@ -0,0 +1,3 @@ +parameter.system=\u7CFB\u7EDF +parameter.system.homePage=\u9996\u9875 +parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System Database Schema DDL.xml b/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System Database Schema DDL.xml index d02afd40..fcb6289b 100644 --- a/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System Database Schema DDL.xml +++ b/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System Database Schema DDL.xml @@ -209,12 +209,13 @@ - + - + + diff --git a/io.sc.standard.frontend/package.json b/io.sc.standard.frontend/package.json index 550a1817..79c3316c 100644 --- a/io.sc.standard.frontend/package.json +++ b/io.sc.standard.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.standard.frontend", - "version": "8.1.30", + "version": "8.1.33", "description": "", "private": false, "keywords": [], @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.160", + "platform-core": "8.1.169", "quasar": "2.14.5", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/settings.gradle b/settings.gradle index 23f8d745..f6b1d9b3 100755 --- a/settings.gradle +++ b/settings.gradle @@ -12,8 +12,8 @@ include ':io.sc.engine.rule.client' include ':io.sc.engine.rule.client.spring' include ':io.sc.engine.rule.core' include ':io.sc.engine.rule.frontend' -include ':io.sc.engine.rule.server' include ':io.sc.engine.rule.sample' +include ':io.sc.engine.rule.server' include ':io.sc.platform.app' include ':io.sc.platform.app-nacos' include ':io.sc.platform.attachment' @@ -24,8 +24,8 @@ include ':io.sc.platform.core.frontend' include ':io.sc.platform.csv' include ':io.sc.platform.data' include ':io.sc.platform.developer' -include ':io.sc.platform.developer.frontend' include ':io.sc.platform.developer.doc' +include ':io.sc.platform.developer.frontend' include ':io.sc.platform.flowable' include ':io.sc.platform.gradle' include ':io.sc.platform.groovy' @@ -41,10 +41,6 @@ include ':io.sc.platform.jdbc.driver.sqlite' include ':io.sc.platform.jdbc.driver.tidb' include ':io.sc.platform.jdbc.liquibase' include ':io.sc.platform.jdbc.schemacrawler' -include ':io.sc.platform.scheduler.core' -include ':io.sc.platform.scheduler.executor' -include ':io.sc.platform.scheduler.manager' -include ':io.sc.platform.scheduler.manager.frontend' include ':io.sc.platform.lcdp' include ':io.sc.platform.lcdp.frontend' include ':io.sc.platform.monitor' @@ -53,6 +49,11 @@ include ':io.sc.platform.mvc.frontend' include ':io.sc.platform.orm' include ':io.sc.platform.orm.api' include ':io.sc.platform.orm.mybatis' +include ':io.sc.platform.poi' +include ':io.sc.platform.scheduler.core' +include ':io.sc.platform.scheduler.executor' +include ':io.sc.platform.scheduler.manager' +include ':io.sc.platform.scheduler.manager.frontend' include ':io.sc.platform.security' include ':io.sc.platform.security.frontend' include ':io.sc.platform.security.loginform' @@ -69,4 +70,4 @@ include ':io.sc.standard' include ':io.sc.standard.api' include ':io.sc.standard.frontend' include ':org.webjars.luckysheet-2.1.13' -include ':org.webjars.tailwindcss-3.3.5' +include ':org.webjars.tailwindcss-3.3.5' \ No newline at end of file