diff --git a/gradle.properties b/gradle.properties index 6879ef20..b4be81da 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ application_version=1.0.0 platform_group=io.sc platform_version=8.1.20 platform_plugin_version=8.1.13 -platform_core_frontend_version=8.1.59 +platform_core_frontend_version=8.1.67 ########################################################### # dependencies version diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json index 55030f26..734cd1c5 100644 --- a/io.sc.platform.core.frontend/package.json +++ b/io.sc.platform.core.frontend/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.1.61", + "version": "8.1.70", "description": "前端核心包,用于快速构建前端的脚手架", "//main": "库的主文件", "main": "dist/platform-core.js", diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/formater/BooleanFormater.ts b/io.sc.platform.core.frontend/src/platform/components-ext/formater/BooleanFormater.ts new file mode 100644 index 00000000..7278d5cf --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/formater/BooleanFormater.ts @@ -0,0 +1,17 @@ +import { i18n } from '@/platform/plugin'; + +const yesNoFormater = (value) => { + if (value) { + return i18n.global.t('yes'); + } + return i18n.global.t('no'); +}; + +const trueFalseFormater = (value) => { + if (value) { + return i18n.global.t('true'); + } + return i18n.global.t('false'); +}; + +export { yesNoFormater, trueFalseFormater }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/formater/DatetimeFormater.ts b/io.sc.platform.core.frontend/src/platform/components-ext/formater/DatetimeFormater.ts new file mode 100644 index 00000000..a2572724 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/formater/DatetimeFormater.ts @@ -0,0 +1,15 @@ +import { DateTools } from '@/platform/utils'; + +/** + * 日期格式化(仅显示日期,不显示时间,完整的日期时间可通过鼠标移到元素上显示) + * @param value 日期字符串(YYYY-MM-DD HH:mm:ss) + * @returns 日期字符串 + */ +const dateOnlyFormater = (value) => { + if (value) { + return '' + DateTools.format(value, 'YYYY-MM-DD') + ''; + } + return ''; +}; + +export { dateOnlyFormater }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/formater/EnumFormater.ts b/io.sc.platform.core.frontend/src/platform/components-ext/formater/EnumFormater.ts new file mode 100644 index 00000000..90e1cd7d --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/formater/EnumFormater.ts @@ -0,0 +1,21 @@ +import type { OptionItemType } from '@/platform/types'; +import { i18n } from '@/platform/plugin'; + +class EnumFormater { + #enumMap = {}; + + constructor(options: OptionItemType[]) { + for (const option of options) { + this.#enumMap[option.value] = option.label; + } + } + + public formater() { + const enumMap = this.#enumMap; + return (value) => { + return i18n.global.t(enumMap[value]); + }; + } +} + +export { EnumFormater }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/formater/index.ts b/io.sc.platform.core.frontend/src/platform/components-ext/formater/index.ts new file mode 100644 index 00000000..e9c7db0e --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/formater/index.ts @@ -0,0 +1,33 @@ +import type { EnumType } from '@/platform/types'; +import { yesNoFormater, trueFalseFormater } from './BooleanFormater'; +import { dateOnlyFormater } from './DatetimeFormater'; +import { EnumFormater } from './EnumFormater'; + +class Formater { + static #enumFormaterMap = {}; + + public static yesNo() { + return yesNoFormater; + } + + public static trueFalse() { + return trueFalseFormater; + } + + public static dateOnly() { + return dateOnlyFormater; + } + + public static enum(enumType: EnumType) { + if (enumType) { + let enumFormater = Formater.#enumFormaterMap[enumType.name]; + if (!enumFormater) { + enumFormater = new EnumFormater(enumType.items); + Formater.#enumFormaterMap[enumType.name] = enumFormater; + } + return enumFormater.formater(); + } + } +} + +export { Formater }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/index.ts b/io.sc.platform.core.frontend/src/platform/components-ext/index.ts new file mode 100644 index 00000000..83b38452 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/index.ts @@ -0,0 +1,2 @@ +export { Formater } from './formater'; +export { Options } from './options'; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/options/BooleanOptions.ts b/io.sc.platform.core.frontend/src/platform/components-ext/options/BooleanOptions.ts new file mode 100644 index 00000000..97096866 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/options/BooleanOptions.ts @@ -0,0 +1,17 @@ +import { i18n } from '@/platform/plugin'; + +const yesNo = () => { + return [ + { value: true, label: i18n.global.t('yes') }, + { value: false, label: i18n.global.t('no') }, + ]; +}; + +const trueFalse = () => { + return [ + { value: true, label: i18n.global.t('true') }, + { value: false, label: i18n.global.t('false') }, + ]; +}; + +export { yesNo, trueFalse }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/options/EnumOptions.ts b/io.sc.platform.core.frontend/src/platform/components-ext/options/EnumOptions.ts new file mode 100644 index 00000000..7943423f --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/options/EnumOptions.ts @@ -0,0 +1,26 @@ +import type { OptionItemType } from '@/platform/types'; +import { i18n } from '@/platform/plugin'; + +class EnumOptions { + #options; + + constructor(options: OptionItemType[]) { + this.#options = options; + } + + public options() { + if (this.#options) { + const result = []; + for (const option of this.#options) { + result.push({ + value: option.value, + label: i18n.global.t(option.label), + }); + } + return result; + } + return []; + } +} + +export { EnumOptions }; diff --git a/io.sc.platform.core.frontend/src/platform/components-ext/options/index.ts b/io.sc.platform.core.frontend/src/platform/components-ext/options/index.ts new file mode 100644 index 00000000..de951652 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components-ext/options/index.ts @@ -0,0 +1,28 @@ +import type { EnumType } from '@/platform/types'; +import { yesNo, trueFalse } from './BooleanOptions'; +import { EnumOptions } from './EnumOptions'; + +class Options { + static #enumOptionsMap = {}; + + public static yesNo() { + return yesNo(); + } + + public static truefalse(t: any) { + return trueFalse(); + } + + public static enum(enumType: EnumType) { + if (enumType) { + let enumOptions = Options.#enumOptionsMap[enumType.name]; + if (!enumOptions) { + enumOptions = new EnumOptions(enumType.items); + Options.#enumOptionsMap[enumType.name] = enumOptions; + } + return enumOptions.options(); + } + } +} + +export { Options }; diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts index 6ce9fa61..41302731 100644 --- a/io.sc.platform.core.frontend/src/platform/index.ts +++ b/io.sc.platform.core.frontend/src/platform/index.ts @@ -88,12 +88,23 @@ export { TagViewManager } from './plugin'; * 导出工具 */ export { EnumTools } from './utils'; +export { DateTools } from './utils'; export { JavascriptLoader } from './utils'; export { QuasarTools } from './utils'; export { Tools } from './utils'; export { TreeBuilder } from './utils'; export { VueTools } from './utils'; +/** + * 导出 formater + */ +export { Formater } from './components-ext'; + +/** + * 导出 options + */ +export { Options } from './components-ext'; + /** * 导出 UI 组件 */ diff --git a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/ChangePasswordDialog.vue b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/ChangePasswordDialog.vue index 4be0bc30..12ee6f1e 100644 --- a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/ChangePasswordDialog.vue +++ b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/ChangePasswordDialog.vue @@ -31,25 +31,19 @@ const computedFormFields = computed(() => { name: 'rawPassword', label: t('rawPassword'), type: 'password', - requiredIf: () => { - return true; - }, + required: true, }, { name: 'newPassword', label: t('newPassword'), type: 'password', - requiredIf: () => { - return true; - }, + required: true, }, { name: 'confirmNewPassword', label: t('confirmNewPassword'), type: 'password', - requiredIf: () => { - return true; - }, + required: true, rules: [ (value) => { return changePasswordFormRef.value.data.newPassword != value ? t('passwordAndConfirmPasswordMustEqual') : true; diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/DialogManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/DialogManager.ts index a8af6e74..7c71c1cc 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/manager/DialogManager.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/DialogManager.ts @@ -99,7 +99,7 @@ class DialogManager { const t = i18n.global.t; Dialog.create({ - title: t('confirm'), + title: t('inquiring'), message: options.message, focus: focus, ok: { diff --git a/io.sc.platform.core.frontend/src/platform/types/EnumType.ts b/io.sc.platform.core.frontend/src/platform/types/EnumType.ts index 7cad3166..2673f2d7 100644 --- a/io.sc.platform.core.frontend/src/platform/types/EnumType.ts +++ b/io.sc.platform.core.frontend/src/platform/types/EnumType.ts @@ -1,6 +1,6 @@ import type {OptionItemType} from './OptionItemType'; export type EnumType = { - list:OptionItemType[]; - map: object; -}; \ No newline at end of file + name: string; + items: OptionItemType[]; +}; diff --git a/io.sc.platform.core.frontend/src/platform/utils/BackendTools.ts b/io.sc.platform.core.frontend/src/platform/utils/BackendTools.ts deleted file mode 100644 index ede269ed..00000000 --- a/io.sc.platform.core.frontend/src/platform/utils/BackendTools.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { EnumType, OptionItemType } from '@/platform/types'; -import { axios, Environment } from '@/platform/plugin'; - -class BackendTools { - public static async enums(type: string, t: any = null): EnumType { - const response = await axios.get(Environment.apiContextPath('/api/enums/list/') + type); - if (response) { - const result: EnumType = { list: [], map: {} }; - - // list - const list: OptionItemType[] = response.data as OptionItemType[]; - if (t) { - for (const option of list) { - option.label = t(option.label); - } - } - result.list = list; - - // map - const map = {}; - for (const option of list) { - map[option.value] = t(option.label); - } - result.map = map; - return result; - } else { - return { list: [], map: {} }; - } - } -} - -export { BackendTools }; diff --git a/io.sc.platform.core.frontend/src/platform/utils/DateTools.ts b/io.sc.platform.core.frontend/src/platform/utils/DateTools.ts new file mode 100644 index 00000000..8eeabd0f --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/utils/DateTools.ts @@ -0,0 +1,15 @@ +import * as dayjs from 'dayjs'; +import * as customParseFormat from 'dayjs/plugin/customParseFormat'; + +dayjs.extend(customParseFormat); + +class DateTools { + public static format(datetime: string, format: string): string { + if (datetime) { + return dayjs(datetime).format(format || 'YYYY-MM-DD HH:mm:ss'); + } + return ''; + } +} + +export { DateTools }; diff --git a/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts b/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts index 4343db63..417fba37 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts @@ -1,56 +1,19 @@ -import type { EnumType, OptionItemType } from '@/platform/types'; +import type { EnumType } from '@/platform/types'; import { axios, Environment } from '@/platform/plugin'; class EnumTools { - public static yesno(t: any = null): EnumType { - return { - list: [ - { value: true, label: t('yes') }, - { value: false, label: t('no') }, - ], - map: { - true: t('yes'), - false: t('no'), - }, - }; - } - - public static truefalse(t: any = null): EnumType { - return { - list: [ - { value: true, label: t('true') }, - { value: false, label: t('false') }, - ], - map: { - true: t('true'), - false: t('false'), - }, - }; - } - - public static async fetch(type: string, t: any = null): EnumType { + public static async fetch(type: string): EnumType { const response = await axios.get(Environment.apiContextPath('/api/enums/list/') + type); if (response) { - const result: EnumType = { list: [], map: {} }; - - // list - const list: OptionItemType[] = response.data as OptionItemType[]; - if (t) { - for (const option of list) { - option.label = t(option.label); - } - } - result.list = list; - - // map - const map = {}; - for (const option of list) { - map[option.value] = t(option.label); - } - result.map = map; - return result; + return { + name: type, + items: response.data, + }; } else { - return { list: [], map: {} }; + return { + name: type, + items: [], + }; } } } diff --git a/io.sc.platform.core.frontend/src/platform/utils/Tools.ts b/io.sc.platform.core.frontend/src/platform/utils/Tools.ts index cd173558..904f0c34 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/Tools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/Tools.ts @@ -1,4 +1,15 @@ class Tools { + /** + * 判断两个字符串是否相同 + * undefined === undeinfed === null === '' + * @param obj1 字符串 + * @param obj2 字符串 + * @returns 两个字符串是否相同 + */ + public static stringEquals(obj1: any, obj2: any): boolean { + return (obj1 || '') === (obj2 || ''); + } + /** * 判断一个对象是否为 undefined * @param obj 对象 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 5d2b83c8..a1d51036 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/index.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/index.ts @@ -1,3 +1,4 @@ +export { DateTools } from './DateTools'; export { EnumTools } from './EnumTools'; export { JavascriptLoader } from './JavascriptLoader'; export { QuasarTools } from './QuasarTools'; diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json index 7f3201d5..6915f7e4 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.61", + "version": "8.1.70", "description": "前端核心包,用于快速构建前端的脚手架", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.61", + "platform-core": "8.1.70", "quasar": "2.14.2", "tailwindcss": "3.4.0", "vue": "3.4.3", diff --git a/io.sc.platform.core.frontend/template-project/webpack.env.serve.cjs b/io.sc.platform.core.frontend/template-project/webpack.env.serve.cjs index 8f21ccb0..e3f793b4 100644 --- a/io.sc.platform.core.frontend/template-project/webpack.env.serve.cjs +++ b/io.sc.platform.core.frontend/template-project/webpack.env.serve.cjs @@ -12,6 +12,9 @@ module.exports = (env)=> merge(common, mf,{ devtool: 'eval', devServer: { + client: { + overlay: false, + }, static: { directory: path.join(__dirname, 'public'), }, diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/PluginManager.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/PluginManager.java index 7078c70b..38d70086 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/PluginManager.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/PluginManager.java @@ -188,6 +188,9 @@ public class PluginManager { applicationPropertyPlugins.forEach(plugin -> { List value =plugin.getValue(); if(value!=null && !value.isEmpty()){ + for(ApplicationProperties v : value){ + v.setConfigurationFileUrl(plugin.getFileUrl()); + } result.addAll(value); } }); @@ -199,7 +202,13 @@ public class PluginManager { directoryPlugins =parser.parse(DIRECTORIES_LOCATION,new TypeReference>(){}); if(directoryPlugins!=null && !directoryPlugins.isEmpty()){ List result =new ArrayList<>(); - directoryPlugins.forEach(plugin -> result.addAll(plugin.getValue())); + directoryPlugins.forEach(plugin -> { + List directories =plugin.getValue(); + for(Directory directory : directories){ + directory.setConfigurationFileUrl(plugin.getFileUrl()); + } + result.addAll(directories); + }); directories =result; } } @@ -208,7 +217,11 @@ public class PluginManager { componentPlugins =parser.parse(COMPONENTS_LOCATION,new TypeReference(){}); if(componentPlugins!=null && !componentPlugins.isEmpty()){ List result =new ArrayList<>(); - componentPlugins.forEach(plugin -> result.add(plugin.getValue())); + componentPlugins.forEach(plugin -> { + Component component =plugin.getValue(); + component.setConfigurationFileUrl(plugin.getFileUrl()); + result.add(component); + }); components =result; } } @@ -217,7 +230,11 @@ public class PluginManager { messagePlugins =parser.parse(MESSAGES_LOCATION,new TypeReference(){}); if(messagePlugins!=null && !messagePlugins.isEmpty()){ List result =new ArrayList<>(); - messagePlugins.forEach( plugin -> result.add(plugin.getValue())); + messagePlugins.forEach( plugin -> { + Message message =plugin.getValue(); + message.setConfigurationFileUrl(plugin.getFileUrl()); + result.add(message); + }); messages =result; } } @@ -226,7 +243,13 @@ public class PluginManager { jsonSerializerPlugins =parser.parse(JSON_SERIALIZER_LOCATION,new TypeReference>(){}); if(jsonSerializerPlugins!=null && !jsonSerializerPlugins.isEmpty()){ List result =new ArrayList<>(); - jsonSerializerPlugins.forEach( plugin -> result.addAll(plugin.getValue())); + jsonSerializerPlugins.forEach( plugin -> { + List jsonSerializers =plugin.getValue(); + for(JsonSerializer jsonSerializer : jsonSerializers){ + jsonSerializer.setConfigurationFileUrl(plugin.getFileUrl()); + } + result.addAll(jsonSerializers); + }); jsonSerializers =result; } } @@ -235,7 +258,11 @@ public class PluginManager { restartPropertiesPlugins =parser.parse(RESTART_PROPERTIES_LOCATION,new TypeReference(){}); if(restartPropertiesPlugins!=null && !restartPropertiesPlugins.isEmpty()){ List result =new ArrayList<>(); - restartPropertiesPlugins.forEach(plugin -> result.add(plugin.getValue())); + restartPropertiesPlugins.forEach(plugin -> { + RestartProperties restartProperties =plugin.getValue(); + restartProperties.setConfigurationFileUrl(plugin.getFileUrl()); + result.add(restartProperties); + }); restartProperties =result; } } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/ApplicationProperties.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/ApplicationProperties.java index 897ee718..77455bb9 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/ApplicationProperties.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/ApplicationProperties.java @@ -11,6 +11,9 @@ public class ApplicationProperties { private String module; private List properties =new ArrayList<>(); + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + public int getOrder() { return order; } @@ -42,4 +45,12 @@ public class ApplicationProperties { public void setProperties(List properties) { this.properties = properties; } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Component.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Component.java index a01be989..184f35cf 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Component.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Component.java @@ -8,6 +8,9 @@ import java.util.List; public class Component { private List includes; //包含项列表 private List excludes; //排除项列表 + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public List getIncludes() { return includes; @@ -21,4 +24,10 @@ public class Component { public void setExcludes(List excludes) { this.excludes = excludes; } + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java index 54546852..719cc1a6 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java @@ -7,6 +7,9 @@ public class Directory { private String name; //名称 private String path; //目录路径 private boolean autoCreate =true; //是否自动创建(如果目录不存在) + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public String getName() { return name; @@ -26,7 +29,13 @@ public class Directory { public void setAutoCreate(boolean autoCreate) { this.autoCreate = autoCreate; } - + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } + @Override public String toString() { return "Directory [key=" + name + ", path=" + path + ", isAutoCreate=" + autoCreate + "]"; diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/JsonSerializer.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/JsonSerializer.java index 595aa060..69366b11 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/JsonSerializer.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/JsonSerializer.java @@ -8,6 +8,9 @@ public class JsonSerializer { private String serializer; private String deserializer; + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + public String getClassName() { return className; } @@ -31,4 +34,12 @@ public class JsonSerializer { public void setDeserializer(String deserializer) { this.deserializer = deserializer; } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Message.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Message.java index 67adc048..7a9ec2e1 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Message.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Message.java @@ -8,6 +8,9 @@ import java.util.List; public class Message { private List includes; //包含项列表 private List excludes; //排除项列表 + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public List getIncludes() { return includes; @@ -21,4 +24,10 @@ public class Message { public void setExcludes(List excludes) { this.excludes = excludes; } + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/RestartProperties.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/RestartProperties.java index a82f28c4..7c2e780d 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/RestartProperties.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/RestartProperties.java @@ -9,6 +9,9 @@ public class RestartProperties { private List container; //在容器中运行时需要重启的属性列表 private List jar; //通过 jar 直接运行时需要重启的属性列表 + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + public List getContainer() { return container; } @@ -24,4 +27,12 @@ public class RestartProperties { public void setJar(List jar) { this.jar = jar; } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties index 93e8fc4f..f0abeae2 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties @@ -5,6 +5,7 @@ addChild=Add Child {object} addNew=Add addTop=Add Top {object} alter=Alter +autoCreate=Auto Create bottom-left=Bottom Left bottom-right=Bottom Right bottom=Bottom @@ -16,6 +17,7 @@ className=Class clone=Clone close=Close code=Code +component=Component confirm=Confirm confirmPassword=Confirm Password content=Content @@ -25,9 +27,11 @@ createDate=Create Date creator=Creator dataComeFrom=Data Come From deepClone=Deep Clone +defaultValue=Default Value delete=Delete deleteAll=Delete All description=Description +deserializer=Deserializer detail=Detail disable=Disable displayValue=Display Value @@ -40,6 +44,7 @@ example=Example exception=Exception exceptionMessage=Exception Message exceptionStackTrace=Exception StackTrace +exclude=Exclude executeTime=Execute Time expand=Expand expandAll=Expand All @@ -59,9 +64,13 @@ help=Help homePage=Home httpMethod=Http Method id=ID +ignored=Ignored import=Import +include=Include +inquiring=Inquiring ip=IP isEnable=Enable +jar=Jar key=Key language=Language last=Last @@ -77,6 +86,7 @@ methodName=Mehtod millisecond=Milli Second mobile=Mobile modify=Modify +module=Module more=More move=Move myMessages=My Messages @@ -91,13 +101,18 @@ oldValue=Old Value operationSuccess=Operation Sucess order=Order org=Org +parent=Parent +parentId=Parent ID +path=Path password=Password phone=Phone pixel=px previous=Previous previousPage=Previous Page +priority=Priority qq=QQ query=Query +redirect=Redirect refresh=Refresh remove=Remove reset=Reset @@ -109,6 +124,7 @@ save=Save search=Search select=Select selectAll=Select All +serializer=Serializer size=Size startDate=Start Date status=Status @@ -129,6 +145,7 @@ user=User userName=User Name value=Value version=Version +webContainer=Web Container weixin=WeiXin welcome=Welcome yes=Yes diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties index 4e484314..006e146b 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties @@ -5,6 +5,7 @@ addChild=\u65B0\u589E\u5B50{object} addNew=\u65B0\u589E addTop=\u65B0\u589E\u9802\u7D1A{object} alter=\u901A\u77E5 +autoCreate=\u81EA\u52D5\u5275\u5EFA bottom-left=\u5DE6\u4E0B bottom-right=\u53F3\u4E0B bottom=\u4E0B\u908A @@ -16,6 +17,7 @@ className=\u985E\u540D clone=\u8907\u88FD close=\u95DC\u9589 code=\u4EE3\u78BC +component=\u7D44\u4EF6 confirm=\u78BA\u5B9A confirmPassword=\u78BA\u8A8D\u5BC6\u78BC content=\u5167\u5BB9 @@ -25,9 +27,11 @@ createDate=\u5275\u5EFA\u65E5\u671F creator=\u5275\u5EFA\u4EBA dataComeFrom=\u6578\u64DA\u4F86\u6E90 deepClone=\u6DF1\u5EA6\u8907\u88FD +defaultValue=\u9ED8\u8A8D\u503C delete=\u522A\u9664 deleteAll=\u522A\u9664\u5168\u90E8 description=\u63CF\u8FF0 +deserializer=\u53CD\u5E8F\u5217\u5316\u5668 detail=\u8A73\u60C5 disable=\u7981\u7528 displayValue=\u986F\u793A\u503C @@ -40,6 +44,7 @@ example=\u793A\u4F8B exception=\u9055\u4F8B exceptionMessage=\u9055\u4F8B\u4FE1\u606F exceptionStackTrace=\u9055\u4F8B\u68E7 +exclude=\u6392\u9664 executeTime=\u57F7\u884C\u6642\u9593 expand=\u5C55\u958B expandAll=\u5168\u90E8\u5C55\u958B @@ -59,9 +64,13 @@ help=\u5E6B\u52A9 homePage=\u9996\u9801 httpMethod=Http \u65B9\u6CD5 id=\u552F\u4E00\u6A19\u8B58 +ignored=\u5FFD\u7565 import=\u5C0E\u5165 +include=\u5305\u542B +inquiring=\u8A62\u554F ip=IP isEnable=\u662F\u5426\u53EF\u7528 +jar=Jar \u5305 key=\u9375 language=\u8A9E\u8A00 last=\u6700\u5F8C @@ -77,6 +86,7 @@ methodName=\u985E\u65B9\u6CD5 millisecond=\u6BEB\u79D2 mobile=\u624B\u6A5F modify=\u4FEE\u6539 +module=\u6A21\u584A more=\u66F4\u591A move=\u79FB\u52D5 myMessages=\u6211\u7684\u6D88\u606F @@ -91,13 +101,18 @@ oldValue=\u539F\u503C operationSuccess=\u64CD\u4F5C\u6210\u529F order=\u9806\u5E8F org=\u6A5F\u69CB +parent=\u7236 +parentId=\u7236 ID +path=\u8DEF\u5F91 password=\u5BC6\u78BC phone=\u96FB\u8A71 pixel=\u50CF\u7D20 previous=\u524D\u4E00 previousPage=\u524D\u4E00\u9801 +priority=\u512A\u5148\u7D1A qq=QQ query=\u67E5\u8A62 +redirect=\u91CD\u5B9A\u5411 refresh=\u5237\u65B0 remove=\u79FB\u9664 reset=\u91CD\u7F6E @@ -109,6 +124,7 @@ save=\u4FDD\u5B58 search=\u641C\u7D22 select=\u9078\u64C7 selectAll=\u5168\u90E8\u9078\u64C7 +serializer=\u5E8F\u5217\u5316\u5668 size=\u5C3A\u5BF8 startDate=\u958B\u59CB\u65E5\u671F status=\u72C0\u614B @@ -129,6 +145,7 @@ user=\u7528\u6237 userName=\u7528\u6236\u540D value=\u503C version=\u7248\u672C +webContainer=Web \u5BB9\u5668 weixin=\u5FAE\u4FE1 welcome=\u6B61\u8FCE yes=\u662F diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties index 228aa72b..57ee4cee 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties @@ -5,6 +5,7 @@ addChild=\u65B0\u589E\u5B50{object} addNew=\u65B0\u589E addTop=\u65B0\u589E\u9876\u7EA7{object} alter=\u901A\u77E5 +autoCreate=\u81EA\u52A8\u521B\u5EFA bottom-left=\u5DE6\u4E0B bottom-right=\u53F3\u4E0B bottom=\u4E0B\u8FB9 @@ -16,6 +17,7 @@ className=\u7C7B\u540D clone=\u590D\u5236 close=\u5173\u95ED code=\u4EE3\u7801 +component=\u7EC4\u4EF6 confirm=\u786E\u5B9A confirmPassword=\u786E\u8BA4\u5BC6\u7801 content=\u5185\u5BB9 @@ -25,9 +27,11 @@ createDate=\u521B\u5EFA\u65E5\u671F creator=\u521B\u5EFA\u4EBA dataComeFrom=\u6570\u636E\u6765\u6E90 deepClone=\u6DF1\u5EA6\u590D\u5236 +defaultValue=\u9ED8\u8BA4\u503C delete=\u522A\u9664 deleteAll=\u5220\u9664\u5168\u90E8 description=\u63CF\u8FF0 +deserializer=\u53CD\u5E8F\u5217\u5316\u5668 detail=\u8BE6\u60C5 disable=\u7981\u7528 displayValue=\u663E\u793A\u503C @@ -40,6 +44,7 @@ example=\u793A\u4F8B exception=\u8FDD\u4F8B exceptionMessage=\u8FDD\u4F8B\u4FE1\u606F exceptionStackTrace=\u8FDD\u4F8B\u6808 +exclude=\u6392\u9664 executeTime=\u6267\u884C\u65F6\u95F4 expand=\u5C55\u5F00 expandAll=\u5168\u90E8\u5C55\u5F00 @@ -59,9 +64,13 @@ help=\u5E2E\u52A9 homePage=\u9996\u9875 httpMethod=Http \u65B9\u6CD5 id=\u552F\u4E00\u6807\u8BC6 +ignored=\u5FFD\u7565 import=\u5BFC\u5165 +include=\u5305\u542B +inquiring=\u8BE2\u95EE ip=IP isEnable=\u662F\u5426\u53EF\u7528 +jar=Jar \u5305 key=\u952E language=\u8BED\u8A00 last=\u6700\u540E @@ -77,6 +86,7 @@ methodName=\u7C7B\u65B9\u6CD5 millisecond=\u6BEB\u79D2 mobile=\u624B\u673A modify=\u4FEE\u6539 +module=\u6A21\u5757 more=\u66F4\u591A move=\u79FB\u52A8 myMessages=\u6211\u7684\u6D88\u606F @@ -91,13 +101,18 @@ oldValue=\u539F\u503C operationSuccess=\u64CD\u4F5C\u6210\u529F order=\u987A\u5E8F org=\u673A\u6784 +parent=\u7236 +parentId=\u7236 ID +path=\u8DEF\u5F84 password=\u5BC6\u7801 phone=\u7535\u8BDD pixel=\u50CF\u7D20 previous=\u524D\u4E00 previousPage=\u524D\u4E00\u9875 +priority=\u4F18\u5148\u7EA7 qq=QQ query=\u67E5\u8BE2 +redirect=\u91CD\u5B9A\u5411 refresh=\u5237\u65B0 remove=\u79FB\u9664 reset=\u91CD\u7F6E @@ -109,6 +124,7 @@ save=\u4FDD\u5B58 search=\u641C\u7D22 select=\u9009\u62E9 selectAll=\u5168\u90E8\u9009\u62E9 +serializer=\u5E8F\u5217\u5316\u5668 size=\u5C3A\u5BF8 startDate=\u5F00\u59CB\u65E5\u671F status=\u72B6\u6001 @@ -129,6 +145,7 @@ user=\u7528\u6237 userName=\u7528\u6237\u540D value=\u503C version=\u7248\u672C +webContainer=Web \u5BB9\u5668 weixin=\u5FAE\u4FE1 welcome=\u6B22\u8FCE -yes=\u662F +yes=\u662F \ No newline at end of file diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json index 9a5cebe2..4bef69a7 100644 --- a/io.sc.platform.developer.frontend/package.json +++ b/io.sc.platform.developer.frontend/package.json @@ -78,7 +78,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.59", + "platform-core": "8.1.70", "quasar": "2.14.2", "tailwindcss": "3.4.0", "vue": "3.4.3", @@ -100,4 +100,4 @@ "codemirror": "6.0.1", "vue-codemirror6": "1.2.0" } -} \ No newline at end of file +} diff --git a/io.sc.platform.developer.frontend/src/components/index.ts b/io.sc.platform.developer.frontend/src/components/index.ts index 5c7cd970..aad4a862 100644 --- a/io.sc.platform.developer.frontend/src/components/index.ts +++ b/io.sc.platform.developer.frontend/src/components/index.ts @@ -21,6 +21,7 @@ import Parameters from '@/views/plugin/Parameters.vue'; import Repositories from '@/views/plugin/Repositories.vue'; import RestartProperties from '@/views/plugin/RestartProperties.vue'; import Security from '@/views/plugin/Security.vue'; +import Ws from '@/views/plugin/Ws.vue'; import Swagger from '@/views/plugin/Swagger.vue'; import SystemProperties from '@/views/plugin/SystemProperties.vue'; import Icons from '@/views/frontend/Icons.vue'; @@ -45,6 +46,7 @@ const localComponents = { 'component.developer.plugin.Repositories': Repositories, 'component.developer.plugin.RestartProperties': RestartProperties, 'component.developer.plugin.Security': Security, + 'component.developer.plugin.Ws': Ws, 'component.developer.plugin.Swagger': Swagger, 'component.developer.plugin.SystemProperties': SystemProperties, 'component.developer.frontend.Icons': Icons, diff --git a/io.sc.platform.developer.frontend/src/i18n/messages.json b/io.sc.platform.developer.frontend/src/i18n/messages.json index 2f33b7d8..6fcb3852 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages.json @@ -24,6 +24,7 @@ "menu.developer.plugin.frontendModule" : "Front End Module", "menu.developer.plugin.frontendRoutes" : "Front End Route", "menu.developer.plugin.menus" : "Menu", + "menu.developer.plugin.ws" : "WebService", "menu.developer.frontend" : "Front End Tools", "menu.developer.frontend.icons" : "Icons" diff --git a/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json index 0b507937..d40f6223 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json @@ -24,6 +24,7 @@ "menu.developer.plugin.frontendModule" : "前端模塊", "menu.developer.plugin.frontendRoutes" : "前端路由", "menu.developer.plugin.menus" : "菜單", + "menu.developer.plugin.ws" : "Web 服務", "menu.developer.frontend" : "前端工具", "menu.developer.frontend.icons" : "圖標庫" diff --git a/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json index 7b46794c..0d6b10c8 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json @@ -24,6 +24,7 @@ "menu.developer.plugin.frontendModule" : "前端模块", "menu.developer.plugin.frontendRoutes" : "前端路由", "menu.developer.plugin.menus" : "菜单", + "menu.developer.plugin.ws" : "Web 服务", "menu.developer.frontend" : "前端工具", "menu.developer.frontend.icons" : "图标库" diff --git a/io.sc.platform.developer.frontend/src/menus/menus.json b/io.sc.platform.developer.frontend/src/menus/menus.json index a3ea96d6..f26c0bf4 100644 --- a/io.sc.platform.developer.frontend/src/menus/menus.json +++ b/io.sc.platform.developer.frontend/src/menus/menus.json @@ -64,8 +64,10 @@ {"type":"ROUTE", "order":1300, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.restartProperties", "titleI18nKey":"menu.developer.plugin.restartProperties", "icon":"bi-list-check", "routeName":"route.developer.plugin.restartProperties"}, /*开发者工具/平台插件/SQL语句输出*/ {"type":"ROUTE", "order":1400, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.p6spy", "titleI18nKey":"menu.developer.plugin.p6spy", "icon":"bi-filetype-sql", "routeName":"route.developer.plugin.p6spy"}, + /*开发者工具/平台插件/WebService*/ + {"type":"ROUTE", "order":1500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.ws", "titleI18nKey":"menu.developer.plugin.ws", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.ws"}, /*开发者工具/平台插件/Swagger*/ - {"type":"ROUTE", "order":1500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.swagger", "titleI18nKey":"menu.developer.plugin.swagger", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.swagger"}, + {"type":"ROUTE", "order":1600, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.swagger", "titleI18nKey":"menu.developer.plugin.swagger", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.swagger"}, /*开发者工具/前端工具*/ {"type":"GROUP", "order":500, "parentId":"menu.developer", "id":"menu.developer.frontend", "titleI18nKey":"menu.developer.frontend", "icon":"bi-layout-text-window"}, diff --git a/io.sc.platform.developer.frontend/src/routes/routes.json b/io.sc.platform.developer.frontend/src/routes/routes.json index 301839f3..e1e5cb60 100644 --- a/io.sc.platform.developer.frontend/src/routes/routes.json +++ b/io.sc.platform.developer.frontend/src/routes/routes.json @@ -284,6 +284,21 @@ ] } }, + { + "name": "route.developer.plugin.ws", + "path": "developer/plugin/ws", + "parent": "/", + "priority": 0, + "module": "io.sc.platform.developer.frontend", + "component": "component.developer.plugin.Ws", + "componentPath": "@/views/plugin/Ws.vue", + "redirect": null, + "meta": { + "permissions": [ + "/system/developer/plugin/ws/**/*" + ] + } + }, { "name": "route.developer.plugin.swagger", "path": "developer/plugin/swagger", diff --git a/io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue b/io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue index 632500b1..2244df9d 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/ApplicationProperties.vue @@ -1,4 +1,30 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Components.vue b/io.sc.platform.developer.frontend/src/views/plugin/Components.vue index 996c5a42..0defcb11 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Components.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Components.vue @@ -1,4 +1,40 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Directories.vue b/io.sc.platform.developer.frontend/src/views/plugin/Directories.vue index cf44b223..f6990654 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Directories.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Directories.vue @@ -1,4 +1,17 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue b/io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue index 984d231f..773dae5f 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/FrontendModule.vue @@ -1,4 +1,40 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue b/io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue index 8064303f..82293aec 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/FrontendRoutes.vue @@ -1,4 +1,20 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue b/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue index 03946047..4a3a33f5 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue @@ -1,26 +1,17 @@ diff --git a/io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue b/io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue index 0ac556e6..018a3be2 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/JsonSerializers.vue @@ -1,4 +1,17 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Messages.vue b/io.sc.platform.developer.frontend/src/views/plugin/Messages.vue index 4ded66c4..f052b345 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Messages.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Messages.vue @@ -1,4 +1,40 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue b/io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue index b28536ab..914db73d 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/P6spy.vue @@ -1,4 +1,27 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue b/io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue index 4f512636..113a608c 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Parameters.vue @@ -1,4 +1,20 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue b/io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue index 060ef56f..af1c5160 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Repositories.vue @@ -1,4 +1,40 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue b/io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue index 62d3f5ac..877d9a73 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/RestartProperties.vue @@ -1,4 +1,40 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Security.vue b/io.sc.platform.developer.frontend/src/views/plugin/Security.vue index 8b692926..0631c169 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/Security.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/Security.vue @@ -1,4 +1,27 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue b/io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue index 8c4119cb..7ab3c8c4 100644 --- a/io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue +++ b/io.sc.platform.developer.frontend/src/views/plugin/SystemProperties.vue @@ -1,4 +1,16 @@ - + diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Ws.vue b/io.sc.platform.developer.frontend/src/views/plugin/Ws.vue new file mode 100644 index 00000000..7b4961c9 --- /dev/null +++ b/io.sc.platform.developer.frontend/src/views/plugin/Ws.vue @@ -0,0 +1,17 @@ + + diff --git a/io.sc.platform.developer.frontend/src/views/springboot/Bean.vue b/io.sc.platform.developer.frontend/src/views/springboot/Bean.vue index a1e36c3c..67d0a818 100644 --- a/io.sc.platform.developer.frontend/src/views/springboot/Bean.vue +++ b/io.sc.platform.developer.frontend/src/views/springboot/Bean.vue @@ -1,4 +1,61 @@ - + diff --git a/io.sc.platform.developer.frontend/webpack.env.serve.cjs b/io.sc.platform.developer.frontend/webpack.env.serve.cjs index 8f21ccb0..e3f793b4 100644 --- a/io.sc.platform.developer.frontend/webpack.env.serve.cjs +++ b/io.sc.platform.developer.frontend/webpack.env.serve.cjs @@ -12,6 +12,9 @@ module.exports = (env)=> merge(common, mf,{ devtool: 'eval', devServer: { + client: { + overlay: false, + }, static: { directory: path.join(__dirname, 'public'), }, diff --git a/io.sc.platform.developer/build.gradle b/io.sc.platform.developer/build.gradle index 8948af98..4b3c6bf7 100644 --- a/io.sc.platform.developer/build.gradle +++ b/io.sc.platform.developer/build.gradle @@ -1,6 +1,8 @@ dependencies { api( project(":io.sc.platform.mvc"), + project(":io.sc.platform.security"), + project(":io.sc.platform.ws.cxf"), project(":io.sc.platform.developer.doc"), project(":io.sc.platform.developer.frontend"), ) diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/InitializerWebController.java similarity index 73% rename from io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java rename to io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/InitializerWebController.java index dce469f3..5db0eee8 100644 --- a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/InitializerWebController.java @@ -1,9 +1,10 @@ -package io.sc.platform.developer.plugins.controller; +package io.sc.platform.developer.controller.plugins; -import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; import io.sc.platform.core.initializer.ApplicationInitializer; import io.sc.platform.core.util.Sorter; -import io.sc.platform.developer.plugins.wrapper.InitializerWrapper; +import io.sc.platform.developer.wrapper.plugins.InitializerWrapper; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,16 +17,15 @@ import java.util.ServiceLoader; @Controller @RequestMapping("/api/developer/plugins/initializer") public class InitializerWebController { - @GetMapping("") @ResponseBody - public List initializer(){ + public Page initializer(){ List initializers =new ArrayList<>(); ServiceLoader loader = ServiceLoader.load(ApplicationInitializer.class,Thread.currentThread().getContextClassLoader()); loader.iterator().forEachRemaining(item -> { initializers.add(item); }); Sorter.sort(initializers); - return InitializerWrapper.from(initializers); + return QueryResult.page(InitializerWrapper.from(initializers)); } } diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginApplicationPropertiesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginApplicationPropertiesWebController.java new file mode 100644 index 00000000..29842d4e --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginApplicationPropertiesWebController.java @@ -0,0 +1,23 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.ApplicationProperties; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/applicationProperties") +public class PluginApplicationPropertiesWebController { + @GetMapping("") + @ResponseBody + public Page applicationProperties(){ + List plugins = PluginManager.getInstance().getApplicationProperties(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginComponentsWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginComponentsWebController.java new file mode 100644 index 00000000..00983249 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginComponentsWebController.java @@ -0,0 +1,23 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.Component; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/components") +public class PluginComponentsWebController { + @GetMapping("") + @ResponseBody + public Page components(){ + List plugins = PluginManager.getInstance().getComponents(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginDirectoriesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginDirectoriesWebController.java new file mode 100644 index 00000000..d1e74264 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginDirectoriesWebController.java @@ -0,0 +1,23 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.Directory; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/directories") +public class PluginDirectoriesWebController { + @GetMapping("") + @ResponseBody + public Page directories(){ + List plugins = PluginManager.getInstance().getDirectories(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendModuleWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendModuleWebController.java new file mode 100644 index 00000000..d8051725 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendModuleWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.item.Message; +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.mvc.plugins.item.FrontEndModule; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/frontendModule") +public class PluginFrontendModuleWebController { + @GetMapping("") + @ResponseBody + public Page frontendModule(){ + List plugins = PluginManager.getInstance().getFrontEndModules(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendRouteWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendRouteWebController.java new file mode 100644 index 00000000..a3bf782e --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginFrontendRouteWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.mvc.plugins.item.FrontEndModule; +import io.sc.platform.mvc.plugins.item.FrontEndRoute; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/frontendRoute") +public class PluginFrontendRouteWebController { + @GetMapping("") + @ResponseBody + public Page frontendRoute(){ + List plugins = PluginManager.getInstance().getFrontEndRoutes(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginJsonSerializersWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginJsonSerializersWebController.java new file mode 100644 index 00000000..66e0fd87 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginJsonSerializersWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.Directory; +import io.sc.platform.core.plugins.item.JsonSerializer; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/jsonSerializers") +public class PluginJsonSerializersWebController { + @GetMapping("") + @ResponseBody + public Page jsonSerializers(){ + List plugins = PluginManager.getInstance().getJsonSerializers(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginMessagesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginMessagesWebController.java new file mode 100644 index 00000000..5a407448 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginMessagesWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.Message; +import io.sc.platform.orm.plugins.item.Repository; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/messages") +public class PluginMessagesWebController { + @GetMapping("") + @ResponseBody + public Page messages(){ + List plugins = PluginManager.getInstance().getMessages(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginP6spyWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginP6spyWebController.java new file mode 100644 index 00000000..34139af7 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginP6spyWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.item.JsonSerializer; +import io.sc.platform.jdbc.plugins.PluginManager; +import io.sc.platform.jdbc.plugins.item.P6spy; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/p6spy") +public class PluginP6spyWebController { + @GetMapping("") + @ResponseBody + public Page p6spy(){ + List plugins = PluginManager.getInstance().getP6spys(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginParametersWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginParametersWebController.java new file mode 100644 index 00000000..c45381cd --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginParametersWebController.java @@ -0,0 +1,23 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.mvc.plugins.item.Parameter; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/parameters") +public class PluginParametersWebController { + @GetMapping("") + @ResponseBody + public Page parameters(){ + List plugins =PluginManager.getInstance().getParameters(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRepositoriesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRepositoriesWebController.java new file mode 100644 index 00000000..1abb9a97 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRepositoriesWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.item.Component; +import io.sc.platform.orm.plugins.PluginManager; +import io.sc.platform.orm.plugins.item.Repository; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/repositories") +public class PluginRepositoriesWebController { + @GetMapping("") + @ResponseBody + public Page repositories(){ + List plugins = PluginManager.getInstance().getRepositories(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRestartPropertiesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRestartPropertiesWebController.java new file mode 100644 index 00000000..38c31a61 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginRestartPropertiesWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.core.plugins.item.ApplicationProperties; +import io.sc.platform.core.plugins.item.RestartProperties; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/restartProperties") +public class PluginRestartPropertiesWebController { + @GetMapping("") + @ResponseBody + public Page restartProperties(){ + List plugins = PluginManager.getInstance().getRestartProperties(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSecurityWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSecurityWebController.java new file mode 100644 index 00000000..51ab157a --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSecurityWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.mvc.plugins.item.FrontEndRoute; +import io.sc.platform.orm.service.support.QueryResult; +import io.sc.platform.security.plugins.PluginManager; +import io.sc.platform.security.plugins.item.Security; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/security") +public class PluginSecurityWebController { + @GetMapping("") + @ResponseBody + public Page security(){ + List plugins = PluginManager.getInstance().getSecurities(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSwaggerWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSwaggerWebController.java new file mode 100644 index 00000000..491c73ad --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSwaggerWebController.java @@ -0,0 +1,22 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.jdbc.plugins.item.P6spy; +import io.sc.platform.mvc.plugins.PluginManager; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/swagger") +public class PluginSwaggerWebController { + @GetMapping("") + @ResponseBody + public Page swagger(){ + return QueryResult.emptyPage(); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSystemPropertiesWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSystemPropertiesWebController.java new file mode 100644 index 00000000..f62c2dba --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginSystemPropertiesWebController.java @@ -0,0 +1,35 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.core.plugins.Plugin; +import io.sc.platform.core.plugins.PluginManager; +import io.sc.platform.developer.wrapper.plugins.SystemPropertyWrapper; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Controller +@RequestMapping("/api/developer/plugins/systemProperties") +public class PluginSystemPropertiesWebController { + @GetMapping("") + @ResponseBody + public Page systemProperties(){ + List>> plugins = PluginManager.getInstance().getSystemPropertyPlugins(); + List result =new ArrayList<>(); + for(Plugin> plugin : plugins){ + Map map =plugin.getValue(); + for(String key : map.keySet()){ + SystemPropertyWrapper wrapper =new SystemPropertyWrapper(key,map.get(key)); + wrapper.setConfigurationFileUrl(plugin.getFileUrl()); + result.add(wrapper); + } + } + return QueryResult.page(result); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginWsWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginWsWebController.java new file mode 100644 index 00000000..13bf1db5 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginWsWebController.java @@ -0,0 +1,24 @@ +package io.sc.platform.developer.controller.plugins; + +import io.sc.platform.jdbc.plugins.item.P6spy; +import io.sc.platform.orm.service.support.QueryResult; +import io.sc.platform.ws.plugins.PluginManager; +import io.sc.platform.ws.plugins.item.JaxWsWebservice; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping("/api/developer/plugins/ws") +public class PluginWsWebController { + @GetMapping("") + @ResponseBody + public Page ws(){ + List plugins = PluginManager.getInstance().getJaxWsWebservices(); + return QueryResult.page(plugins); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/springboot/SpringbootBeansWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/springboot/SpringbootBeansWebController.java new file mode 100644 index 00000000..1c459066 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/springboot/SpringbootBeansWebController.java @@ -0,0 +1,73 @@ +package io.sc.platform.developer.controller.springboot; + +import io.sc.platform.developer.wrapper.springboot.BeanWrapper; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.beans.BeansEndpoint; +import org.springframework.boot.actuate.beans.BeansEndpoint.BeanDescriptor; +import org.springframework.boot.actuate.beans.BeansEndpoint.ContextBeans; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Order; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.*; + +@Controller +@RequestMapping("/api/developer/springboot/beans") +public class SpringbootBeansWebController { + @Autowired BeansEndpoint beansEndpoint; + + @GetMapping("") + @ResponseBody + public Page beans(QueryParameter queryParameter){ + List result =new ArrayList<>(); + Map contexts =beansEndpoint.beans().getContexts(); + for(Map.Entry contextEntry : contexts.entrySet()){ + String context =contextEntry.getKey(); + ContextBeans contextBeans =contextEntry.getValue(); + Map beans =contextBeans.getBeans(); + for(Map.Entry beanEntry : beans.entrySet()){ + String beanName =beanEntry.getKey(); + BeanDescriptor beanDescriptor =beanEntry.getValue(); + result.add(new BeanWrapper(context,beanName,beanDescriptor)); + } + } + if(queryParameter!=null){ + Sort sort =queryParameter.getSort(); + if(sort!=null){ + Order order =sort.iterator().next(); + if(order!=null){ + if("name".equalsIgnoreCase(order.getProperty())){ + if(order.isAscending()){ + result.sort(new BeanNameAscComparator()); + }else{ + result.sort(new BeanNameDescComparator()); + } + } + + } + } + } + return QueryResult.page(result); + } + + private class BeanNameAscComparator implements Comparator { + @Override + public int compare(BeanWrapper o1, BeanWrapper o2) { + return o1.getName().compareTo(o2.getName()); + } + } + + private class BeanNameDescComparator implements Comparator { + @Override + public int compare(BeanWrapper o1, BeanWrapper o2) { + return o2.getName().compareTo(o1.getName()); + } + } + +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/InitializerWrapper.java similarity index 97% rename from io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java rename to io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/InitializerWrapper.java index f2a4cb8b..22157db7 100644 --- a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/InitializerWrapper.java @@ -1,4 +1,4 @@ -package io.sc.platform.developer.plugins.wrapper; +package io.sc.platform.developer.wrapper.plugins; import io.sc.platform.core.initializer.ApplicationInitializer; diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/SystemPropertyWrapper.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/SystemPropertyWrapper.java new file mode 100644 index 00000000..7026cce8 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/plugins/SystemPropertyWrapper.java @@ -0,0 +1,40 @@ +package io.sc.platform.developer.wrapper.plugins; + +public class SystemPropertyWrapper { + private String name; + private String value; + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + + public SystemPropertyWrapper(){} + + public SystemPropertyWrapper(String name,String value){ + this.name =name; + this.value =value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/springboot/BeanWrapper.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/springboot/BeanWrapper.java new file mode 100644 index 00000000..fe2a5c3f --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/wrapper/springboot/BeanWrapper.java @@ -0,0 +1,81 @@ +package io.sc.platform.developer.wrapper.springboot; + +import org.springframework.boot.actuate.beans.BeansEndpoint.BeanDescriptor; + +public class BeanWrapper { + private String context; + private String name; + private String[] aliases; + private String scope; + private Class type; + private String resource; + private String[] dependencies; + + public BeanWrapper(String context, String name, BeanDescriptor beanDescriptor){ + this.context =context; + this.name =name; + if(beanDescriptor!=null){ + this.aliases =beanDescriptor.getAliases(); + this.scope =beanDescriptor.getScope(); + this.type =beanDescriptor.getType(); + this.resource =beanDescriptor.getResource(); + this.dependencies =beanDescriptor.getDependencies(); + } + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String[] getAliases() { + return aliases; + } + + public void setAliases(String[] aliases) { + this.aliases = aliases; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public Class getType() { + return type; + } + + public void setType(Class type) { + this.type = type; + } + + public String getResource() { + return resource; + } + + public void setResource(String resource) { + this.resource = resource; + } + + public String[] getDependencies() { + return dependencies; + } + + public void setDependencies(String[] dependencies) { + this.dependencies = dependencies; + } +} diff --git a/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json index 6a9ef356..db94a7e4 100644 --- a/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json +++ b/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json @@ -1,5 +1,6 @@ { "includes":[ - "io.sc.platform.developer.plugins.controller" + "io.sc.platform.developer.controller.plugins", + "io.sc.platform.developer.controller.springboot" ] } \ No newline at end of file diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java index 228e8a42..d365e1c3 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java @@ -11,7 +11,7 @@ import io.sc.platform.flowable.support.FlowableGroupList; import io.sc.platform.flowable.support.FlowableUser; import io.sc.platform.flowable.support.FlowableUserList; import io.sc.platform.orm.service.support.QueryParameter; -import io.sc.platform.system.role.convertor.RoleEntityVoConverter; +import io.sc.platform.orm.util.EntityVoConvertor; import io.sc.platform.system.role.jpa.entity.RoleEntity; import io.sc.platform.system.role.service.RoleService; import io.sc.platform.system.user.convertor.UserEntityVoConverter; @@ -131,6 +131,6 @@ public class FlowableModelerEditorWebController { @IgnoreResponseBodyAdvice public FlowableGroupList editorGroups(@RequestParam(name="filter",required=false) String filter,QueryParameter queryParameter) throws Exception{ Page roleEntities =roleService.queryRolesByCodeOrName(filter,queryParameter); - return FlowableGroupList.fromGroups(new RoleEntityVoConverter().toVo(roleEntities)); + return FlowableGroupList.fromGroups(EntityVoConvertor.toVo(roleEntities)); } } diff --git a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/PluginManager.java b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/PluginManager.java index f5a7fa69..978d668a 100644 --- a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/PluginManager.java +++ b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/PluginManager.java @@ -88,6 +88,7 @@ public class PluginManager { List items =new ArrayList<>(); p6spyPlugins.forEach(plugin -> { P6spy entity =plugin.getValue(); + entity.setConfigurationFileUrl(plugin.getFileUrl()); items.add(entity); }); p6spys =items; diff --git a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/item/P6spy.java b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/item/P6spy.java index a8dba095..a6e02f61 100644 --- a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/item/P6spy.java +++ b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/plugins/item/P6spy.java @@ -5,7 +5,8 @@ import java.util.List; public class P6spy { protected List ignoredPatterns =new ArrayList<>(); - private String fileUrl; //插件配置文件位置 + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public List getIgnoredPatterns() { return ignoredPatterns; @@ -15,19 +16,19 @@ public class P6spy { this.ignoredPatterns = ignoredPatterns; } - public String getFileUrl() { - return fileUrl; + public String getConfigurationFileUrl() { + return configurationFileUrl; } - public void setFileUrl(String fileUrl) { - this.fileUrl = fileUrl; + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; } @Override public String toString() { return "P6spy{" + "ignoredPatterns=" + ignoredPatterns + - ", fileUrl='" + fileUrl + '\'' + + ", configurationFileUrl='" + configurationFileUrl + '\'' + '}'; } } diff --git a/io.sc.platform.lcdp.frontend/package.json b/io.sc.platform.lcdp.frontend/package.json index be566f63..e08957c8 100644 --- a/io.sc.platform.lcdp.frontend/package.json +++ b/io.sc.platform.lcdp.frontend/package.json @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.59", + "platform-core": "8.1.67", "quasar": "2.14.2", "tailwindcss": "3.4.0", "vue": "3.4.3", @@ -100,4 +100,4 @@ "vue-router": "4.2.5", "vue-codemirror6": "1.2.0" } -} \ No newline at end of file +} diff --git a/io.sc.platform.lcdp.frontend/webpack.env.serve.cjs b/io.sc.platform.lcdp.frontend/webpack.env.serve.cjs index 8f21ccb0..e3f793b4 100644 --- a/io.sc.platform.lcdp.frontend/webpack.env.serve.cjs +++ b/io.sc.platform.lcdp.frontend/webpack.env.serve.cjs @@ -12,6 +12,9 @@ module.exports = (env)=> merge(common, mf,{ devtool: 'eval', devServer: { + client: { + overlay: false, + }, static: { directory: path.join(__dirname, 'public'), }, diff --git a/io.sc.platform.mvc.frontend/package.json b/io.sc.platform.mvc.frontend/package.json index 3304b53a..2b971b8b 100644 --- a/io.sc.platform.mvc.frontend/package.json +++ b/io.sc.platform.mvc.frontend/package.json @@ -78,7 +78,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.59", + "platform-core": "8.1.67", "quasar": "2.14.2", "tailwindcss": "3.4.0", "vue": "3.4.3", @@ -100,4 +100,4 @@ "codemirror": "6.0.1", "vue-codemirror6": "1.2.0" } -} \ No newline at end of file +} diff --git a/io.sc.platform.mvc.frontend/webpack.env.serve.cjs b/io.sc.platform.mvc.frontend/webpack.env.serve.cjs index 8f21ccb0..e3f793b4 100644 --- a/io.sc.platform.mvc.frontend/webpack.env.serve.cjs +++ b/io.sc.platform.mvc.frontend/webpack.env.serve.cjs @@ -12,6 +12,9 @@ module.exports = (env)=> merge(common, mf,{ devtool: 'eval', devServer: { + client: { + overlay: false, + }, static: { directory: path.join(__dirname, 'public'), }, diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/PluginManager.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/PluginManager.java index 3e651e51..59c4af1b 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/PluginManager.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/PluginManager.java @@ -208,6 +208,7 @@ public class PluginManager { for(FrontEndRoute route : routes){ FrontEndRoute item =frontEndRouteMap.get(route.getName()); if(item==null || route.getPriority() items =new ArrayList<>(); for(Plugin plugin : frontEndModulePlugins){ - items.add(plugin.getValue()); + FrontEndModule frontEndModule =plugin.getValue(); + frontEndModule.setConfigurationFileUrl(plugin.getFileUrl()); + items.add(frontEndModule); } this.frontEndModules =items; } diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndModule.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndModule.java index f78ee56d..296e0d5a 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndModule.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndModule.java @@ -14,6 +14,9 @@ public class FrontEndModule { private String name; private Set components =new HashSet(); private Set resources =new HashSet(); + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public FrontEndModule() { } @@ -77,4 +80,12 @@ public class FrontEndModule { public void setResources(Set resources) { this.resources = resources; } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndRoute.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndRoute.java index e410baff..b2e80661 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndRoute.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/plugins/item/FrontEndRoute.java @@ -18,6 +18,9 @@ public class FrontEndRoute { private List children =new ArrayList<>(); + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + public String getName() { return name; } @@ -90,6 +93,14 @@ public class FrontEndRoute { this.children = children; } + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } + @Override public String toString() { try { diff --git a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception.properties b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception.properties index 98498998..486f95f4 100644 --- a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception.properties +++ b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception.properties @@ -1,26 +1,26 @@ -io.sc.platform.orm.exception.CreateException=Create Failed! -io.sc.platform.orm.exception.CreateNullObjectException=Create Failed,the New Object is Null! -io.sc.platform.orm.exception.CreateNullPrimaryKeyException=Create Failed,the New Object's Primary Key is Null! -io.sc.platform.orm.exception.CreateObjectAlreadyExistsException=Create Failed,The New Object already Exists! +io.sc.platform.orm.api.exception.CreateException=Create Failed! +io.sc.platform.orm.api.exception.CreateNullObjectException=Create Failed,the New Object is Null! +io.sc.platform.orm.api.exception.CreateNullPrimaryKeyException=Create Failed,the New Object's Primary Key is Null! +io.sc.platform.orm.api.exception.CreateObjectAlreadyExistsException=Create Failed,The New Object already Exists! -io.sc.platform.orm.exception.UpdateException=Update Failed! -io.sc.platform.orm.exception.UpdateNullOldObjectPrimaryKeyException=Update Failed,the Old Object's Primary Key is Null! -io.sc.platform.orm.exception.UpdateNullNewObjectPrimaryKeyException=Update Failed,the New Object's Primary Key is Null! -io.sc.platform.orm.exception.UpdateNullNewObjectException=Update Failed,the New Object is Null! -io.sc.platform.orm.exception.UpdateOldObjectNotExistsException=Update Failed,the Old Object Not Exists! -io.sc.platform.orm.exception.UpdateObjectAlreadyExistsException=Update Failed,The New Object already Exists! +io.sc.platform.orm.api.exception.UpdateException=Update Failed! +io.sc.platform.orm.api.exception.UpdateNullOldObjectPrimaryKeyException=Update Failed,the Old Object's Primary Key is Null! +io.sc.platform.orm.api.exception.UpdateNullNewObjectPrimaryKeyException=Update Failed,the New Object's Primary Key is Null! +io.sc.platform.orm.api.exception.UpdateNullNewObjectException=Update Failed,the New Object is Null! +io.sc.platform.orm.api.exception.UpdateOldObjectNotExistsException=Update Failed,the Old Object Not Exists! +io.sc.platform.orm.api.exception.UpdateObjectAlreadyExistsException=Update Failed,The New Object already Exists! -io.sc.platform.orm.exception.DeleteException=Delete Failed! -io.sc.platform.orm.exception.DeleteObjectNotExistsException=Delete Failed,the Object will be deleted Not Exists! -io.sc.platform.orm.exception.DeleteOperateNotAllowedException=Delete Failed, the Object was reserved by system! -io.sc.platform.orm.exception.DeleteNullObjectException=Delete Failed,the Object will be deleted is Null! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyCollectionException=Delete Failed,the Primary Key Collection which will be deleted is Empty! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyException=Delete Failed,the Primary Key which will be deleted is Empty! +io.sc.platform.orm.api.exception.DeleteException=Delete Failed! +io.sc.platform.orm.api.exception.DeleteObjectNotExistsException=Delete Failed,the Object will be deleted Not Exists! +io.sc.platform.orm.api.exception.DeleteOperateNotAllowedException=Delete Failed, the Object was reserved by system! +io.sc.platform.orm.api.exception.DeleteNullObjectException=Delete Failed,the Object will be deleted is Null! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyCollectionException=Delete Failed,the Primary Key Collection which will be deleted is Empty! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyException=Delete Failed,the Primary Key which will be deleted is Empty! -io.sc.platform.orm.exception.UserRawPasswordEmptyException=Raw Password Not allow Empty! -io.sc.platform.orm.exception.UserRawPasswordNotMatchException=Raw Password Error! -io.sc.platform.orm.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=The New Password and Confirm New Password NOT same! -io.sc.platform.orm.exception.UserNewPasswordEmptyException=The New Password Not allow Empty! +io.sc.platform.orm.api.exception.UserRawPasswordEmptyException=Raw Password Not allow Empty! +io.sc.platform.orm.api.exception.UserRawPasswordNotMatchException=Raw Password Error! +io.sc.platform.orm.api.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=The New Password and Confirm New Password NOT same! +io.sc.platform.orm.api.exception.UserNewPasswordEmptyException=The New Password Not allow Empty! io.sc.platform.core.audit.AuditLogAction.ADD=Add io.sc.platform.core.audit.AuditLogAction.REMOVE=Remove diff --git a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_tw_CN.properties b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_tw_CN.properties index 6511bbc4..36b01bb6 100644 --- a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_tw_CN.properties +++ b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_tw_CN.properties @@ -1,26 +1,26 @@ -io.sc.platform.orm.exception.CreateException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557! -io.sc.platform.orm.exception.CreateNullObjectException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u65B0\u589E\u5C0D\u8C61\u70BA\u7A7A! -io.sc.platform.orm.exception.CreateNullPrimaryKeyException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u65B0\u589E\u5C0D\u8C61\u7684\u4E3B\u9375(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! -io.sc.platform.orm.exception.CreateObjectAlreadyExistsException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u7CFB\u7D71\u4E2D\u5DF2\u7D93\u5B58\u5728\u8A72\u5C0D\u8C61! +io.sc.platform.orm.api.exception.CreateException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557! +io.sc.platform.orm.api.exception.CreateNullObjectException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u65B0\u589E\u5C0D\u8C61\u70BA\u7A7A! +io.sc.platform.orm.api.exception.CreateNullPrimaryKeyException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u65B0\u589E\u5C0D\u8C61\u7684\u4E3B\u9375(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! +io.sc.platform.orm.api.exception.CreateObjectAlreadyExistsException=\u65B0\u589E\u64CD\u4F5C\u5931\u6557,\u7CFB\u7D71\u4E2D\u5DF2\u7D93\u5B58\u5728\u8A72\u5C0D\u8C61! -io.sc.platform.orm.exception.UpdateException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557! -io.sc.platform.orm.exception.UpdateNullOldObjectPrimaryKeyException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u88AB\u66F4\u65B0\u5C0D\u8C61\u7684\u4E3B\u9375(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! -io.sc.platform.orm.exception.UpdateNullNewObjectPrimaryKeyException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! -io.sc.platform.orm.exception.UpdateNullNewObjectException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u66F4\u65B0\u5BF9\u8C61\u70BA\u7A7A! -io.sc.platform.orm.exception.UpdateOldObjectNotExistsException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u88AB\u66F4\u65B0\u7684\u5BF9\u8C61\u4E0D\u5B58\u5728! -io.sc.platform.orm.exception.UpdateObjectAlreadyExistsException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u7CFB\u7D71\u4E2D\u5DF2\u7D93\u5B58\u5728\u8A72\u5C0D\u8C61! +io.sc.platform.orm.api.exception.UpdateException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557! +io.sc.platform.orm.api.exception.UpdateNullOldObjectPrimaryKeyException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u88AB\u66F4\u65B0\u5C0D\u8C61\u7684\u4E3B\u9375(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! +io.sc.platform.orm.api.exception.UpdateNullNewObjectPrimaryKeyException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6A19\u8B58\u65B0\u589E\u5C0D\u8C61,\u5982\u5C0D\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! +io.sc.platform.orm.api.exception.UpdateNullNewObjectException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u66F4\u65B0\u5BF9\u8C61\u70BA\u7A7A! +io.sc.platform.orm.api.exception.UpdateOldObjectNotExistsException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u88AB\u66F4\u65B0\u7684\u5BF9\u8C61\u4E0D\u5B58\u5728! +io.sc.platform.orm.api.exception.UpdateObjectAlreadyExistsException=\u66F4\u65B0\u64CD\u4F5C\u5931\u6557,\u7CFB\u7D71\u4E2D\u5DF2\u7D93\u5B58\u5728\u8A72\u5C0D\u8C61! -io.sc.platform.orm.exception.DeleteException=\u522A\u9664\u64CD\u4F5C\u5931\u6557! -io.sc.platform.orm.exception.DeleteObjectNotExistsException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u4E0D\u5B58\u5728! -io.sc.platform.orm.exception.DeleteOperateNotAllowedException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u6B64\u8A18\u9304\u70BA\u7CFB\u7D71\u4FDD\u7559\u8A18\u9304,\u7121\u6CD5\u5220\u9664! -io.sc.platform.orm.exception.DeleteNullObjectException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u70BA\u7A7A! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyCollectionException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u96C6\u5408\u70BA\u7A7A! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! +io.sc.platform.orm.api.exception.DeleteException=\u522A\u9664\u64CD\u4F5C\u5931\u6557! +io.sc.platform.orm.api.exception.DeleteObjectNotExistsException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u4E0D\u5B58\u5728! +io.sc.platform.orm.api.exception.DeleteOperateNotAllowedException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u6B64\u8A18\u9304\u70BA\u7CFB\u7D71\u4FDD\u7559\u8A18\u9304,\u7121\u6CD5\u5220\u9664! +io.sc.platform.orm.api.exception.DeleteNullObjectException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u70BA\u7A7A! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyCollectionException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u96C6\u5408\u70BA\u7A7A! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyException=\u522A\u9664\u64CD\u4F5C\u5931\u6557,\u88AB\u522A\u9664\u5C0D\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u7A31)\u70BA\u7A7A! -io.sc.platform.orm.exception.UserRawPasswordEmptyException=\u7528\u6236\u767B\u9304"\u539F\u5BC6\u78BC"\u4E0D\u5141\u8A31\u70BA\u7A7A! -io.sc.platform.orm.exception.UserRawPasswordNotMatchException=\u7528\u6236\u767B\u9304"\u539F\u5BC6\u78BC"\u932F\u8AA4! -io.sc.platform.orm.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=\u7528\u6236\u767B\u9304"\u65B0\u5BC6\u78BC"\u548C"\u65B0\u5BC6\u78BC\u78BA\u8A8D"\u4E0D\u4E00\u81F4! -io.sc.platform.orm.exception.UserNewPasswordEmptyException=\u7528\u6236\u767B\u9304"\u65B0\u5BC6\u78BC"\u4E0D\u5141\u8A31\u70BA\u7A7A! +io.sc.platform.orm.api.exception.UserRawPasswordEmptyException=\u7528\u6236\u767B\u9304"\u539F\u5BC6\u78BC"\u4E0D\u5141\u8A31\u70BA\u7A7A! +io.sc.platform.orm.api.exception.UserRawPasswordNotMatchException=\u7528\u6236\u767B\u9304"\u539F\u5BC6\u78BC"\u932F\u8AA4! +io.sc.platform.orm.api.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=\u7528\u6236\u767B\u9304"\u65B0\u5BC6\u78BC"\u548C"\u65B0\u5BC6\u78BC\u78BA\u8A8D"\u4E0D\u4E00\u81F4! +io.sc.platform.orm.api.exception.UserNewPasswordEmptyException=\u7528\u6236\u767B\u9304"\u65B0\u5BC6\u78BC"\u4E0D\u5141\u8A31\u70BA\u7A7A! io.sc.platform.core.audit.AuditLogAction.ADD=\u65B0\u589E diff --git a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_zh_CN.properties b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_zh_CN.properties index a744a1ce..769adea3 100644 --- a/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_zh_CN.properties +++ b/io.sc.platform.orm.api/src/main/resources/io/sc/platform/orm/api/i18n/exception_zh_CN.properties @@ -1,26 +1,26 @@ -io.sc.platform.orm.exception.CreateException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25! -io.sc.platform.orm.exception.CreateNullObjectException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u65B0\u589E\u5BF9\u8C61\u4E3A\u7A7A! -io.sc.platform.orm.exception.CreateNullPrimaryKeyException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u65B0\u589E\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! -io.sc.platform.orm.exception.CreateObjectAlreadyExistsException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u7CFB\u7EDF\u4E2D\u5DF2\u7ECF\u5B58\u5728\u8BE5\u5BF9\u8C61! +io.sc.platform.orm.api.exception.CreateException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25! +io.sc.platform.orm.api.exception.CreateNullObjectException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u65B0\u589E\u5BF9\u8C61\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.CreateNullPrimaryKeyException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u65B0\u589E\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.CreateObjectAlreadyExistsException=\u65B0\u589E\u64CD\u4F5C\u5931\u8D25,\u7CFB\u7EDF\u4E2D\u5DF2\u7ECF\u5B58\u5728\u8BE5\u5BF9\u8C61! -io.sc.platform.orm.exception.UpdateException=\u66F4\u65B0\u64CD\u4F5C\u5931\u8D25! -io.sc.platform.orm.exception.UpdateNullOldObjectPrimaryKeyException=\u66F4\u65B0\u5931\u8D25,\u88AB\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! -io.sc.platform.orm.exception.UpdateNullNewObjectPrimaryKeyException=\u66F4\u65B0\u5931\u8D25,\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! -io.sc.platform.orm.exception.UpdateNullNewObjectException=\u66F4\u65B0\u5931\u8D25,\u66F4\u65B0\u5BF9\u8C61\u4E3A\u7A7A! -io.sc.platform.orm.exception.UpdateOldObjectNotExistsException=\u66F4\u65B0\u5931\u8D25,\u88AB\u66F4\u65B0\u7684\u5BF9\u8C61\u4E0D\u5B58\u5728! -io.sc.platform.orm.exception.UpdateObjectAlreadyExistsException=\u66F4\u65B0\u5931\u8D25,\u7CFB\u7EDF\u4E2D\u5DF2\u7ECF\u5B58\u5728\u8BE5\u5BF9\u8C61! +io.sc.platform.orm.api.exception.UpdateException=\u66F4\u65B0\u64CD\u4F5C\u5931\u8D25! +io.sc.platform.orm.api.exception.UpdateNullOldObjectPrimaryKeyException=\u66F4\u65B0\u5931\u8D25,\u88AB\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.UpdateNullNewObjectPrimaryKeyException=\u66F4\u65B0\u5931\u8D25,\u66F4\u65B0\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.UpdateNullNewObjectException=\u66F4\u65B0\u5931\u8D25,\u66F4\u65B0\u5BF9\u8C61\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.UpdateOldObjectNotExistsException=\u66F4\u65B0\u5931\u8D25,\u88AB\u66F4\u65B0\u7684\u5BF9\u8C61\u4E0D\u5B58\u5728! +io.sc.platform.orm.api.exception.UpdateObjectAlreadyExistsException=\u66F4\u65B0\u5931\u8D25,\u7CFB\u7EDF\u4E2D\u5DF2\u7ECF\u5B58\u5728\u8BE5\u5BF9\u8C61! -io.sc.platform.orm.exception.DeleteException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25! -io.sc.platform.orm.exception.DeleteObjectNotExistsException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u4E0D\u5B58\u5728! -io.sc.platform.orm.exception.DeleteOperateNotAllowedException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u6B64\u8BB0\u5F55\u4E3A\u7CFB\u7EDF\u4FDD\u7559\u8BB0\u5F55,\u65E0\u6CD5\u5220\u9664! -io.sc.platform.orm.exception.DeleteNullObjectException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u4E3A\u7A7A! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyCollectionException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u96C6\u5408\u4E3A\u7A7A! -io.sc.platform.orm.exception.DeleteNullPrimaryKeyException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.DeleteException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25! +io.sc.platform.orm.api.exception.DeleteObjectNotExistsException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u4E0D\u5B58\u5728! +io.sc.platform.orm.api.exception.DeleteOperateNotAllowedException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u6B64\u8BB0\u5F55\u4E3A\u7CFB\u7EDF\u4FDD\u7559\u8BB0\u5F55,\u65E0\u6CD5\u5220\u9664! +io.sc.platform.orm.api.exception.DeleteNullObjectException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyCollectionException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u96C6\u5408\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.DeleteNullPrimaryKeyException=\u5220\u9664\u64CD\u4F5C\u5931\u8D25,\u88AB\u5220\u9664\u5BF9\u8C61\u7684\u4E3B\u952E(\u552F\u4E00\u6807\u8BC6\u65B0\u589E\u5BF9\u8C61,\u5982\u5BF9\u8C61\u7684\u540D\u79F0)\u4E3A\u7A7A! -io.sc.platform.orm.exception.UserRawPasswordEmptyException=\u7528\u6237\u767B\u5F55"\u539F\u5BC6\u7801"\u4E0D\u5141\u8BB8\u4E3A\u7A7A! -io.sc.platform.orm.exception.UserRawPasswordNotMatchException=\u7528\u6237\u767B\u5F55"\u539F\u5BC6\u7801"\u9519\u8BEF! -io.sc.platform.orm.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=\u7528\u6237\u767B\u5F55"\u65B0\u5BC6\u7801"\u548C"\u65B0\u5BC6\u7801\u786E\u8BA4"\u4E0D\u4E00\u81F4! -io.sc.platform.orm.exception.UserNewPasswordEmptyException=\u7528\u6237\u767B\u5F55"\u65B0\u5BC6\u7801"\u4E0D\u5141\u8BB8\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.UserRawPasswordEmptyException=\u7528\u6237\u767B\u5F55"\u539F\u5BC6\u7801"\u4E0D\u5141\u8BB8\u4E3A\u7A7A! +io.sc.platform.orm.api.exception.UserRawPasswordNotMatchException=\u7528\u6237\u767B\u5F55"\u539F\u5BC6\u7801"\u9519\u8BEF! +io.sc.platform.orm.api.exception.UserNewPasswordAndConfirmNewPasswordNotMatchException=\u7528\u6237\u767B\u5F55"\u65B0\u5BC6\u7801"\u548C"\u65B0\u5BC6\u7801\u786E\u8BA4"\u4E0D\u4E00\u81F4! +io.sc.platform.orm.api.exception.UserNewPasswordEmptyException=\u7528\u6237\u767B\u5F55"\u65B0\u5BC6\u7801"\u4E0D\u5141\u8BB8\u4E3A\u7A7A! io.sc.platform.core.audit.AuditLogAction.ADD=\u65B0\u589E diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/PluginManager.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/PluginManager.java index b968c8c2..a3d45875 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/PluginManager.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/PluginManager.java @@ -86,8 +86,9 @@ public class PluginManager { if(repositoriesPlugins!=null && !repositoriesPlugins.isEmpty()){ List items =new ArrayList(); repositoriesPlugins.forEach((plugin)->{ - Repository entries =plugin.getValue(); - items.add(entries); + Repository repository =plugin.getValue(); + repository.setConfigurationFileUrl(plugin.getFileUrl()); + items.add(repository); }); repositories =items; } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/item/Repository.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/item/Repository.java index b42fb533..ce4e4e37 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/item/Repository.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/plugins/item/Repository.java @@ -7,6 +7,9 @@ import java.util.List; public class Repository { private List includes; //包含项列表 private List excludes; //排除项列表 + + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 public List getIncludes() { return includes; @@ -20,4 +23,10 @@ public class Repository { public void setExcludes(List excludes) { this.excludes = excludes; } + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java index 1e6cb28e..4c76659f 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java @@ -81,7 +81,7 @@ public class QueryParameter { return size; } public void setSize(Integer size) { - this.size = size==null? 20 : size; + this.size = (size==null || size<=0)? 20 : size; } public List getSortBy() { return sortBy; diff --git a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/repositories.json b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/repositories.json deleted file mode 100644 index 87ba8bf3..00000000 --- a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/repositories.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "includes":[ - - ] -} \ No newline at end of file diff --git a/io.sc.platform.security.frontend/package.json b/io.sc.platform.security.frontend/package.json index 4035b752..08534554 100644 --- a/io.sc.platform.security.frontend/package.json +++ b/io.sc.platform.security.frontend/package.json @@ -4,7 +4,7 @@ "description": "", "private": false, "keywords": [ - + ], "author": "", "license": "ISC", @@ -99,6 +99,6 @@ "vue-dompurify-html": "5.0.1", "vue-i18n": "9.8.0", "vue-router": "4.2.5", - "platform-core": "8.1.59" + "platform-core": "8.1.67" } -} \ No newline at end of file +} diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/PluginManager.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/PluginManager.java index 2242af3a..1e9ad8c0 100644 --- a/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/PluginManager.java +++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/PluginManager.java @@ -65,7 +65,9 @@ public class PluginManager { if(securityPlugins!=null && !securityPlugins.isEmpty()) { List result =new ArrayList(); securityPlugins.forEach((plugin)->{ - result.add(plugin.getValue()); + Security security =plugin.getValue(); + security.setConfigurationFileUrl(plugin.getFileUrl()); + result.add(security); }); securities =result; } diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/item/Security.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/item/Security.java index c1b7e0c8..f52d101c 100644 --- a/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/item/Security.java +++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/plugins/item/Security.java @@ -8,6 +8,9 @@ import java.util.List; public class Security { private List permitPatterns; + //附加属性 + private String configurationFileUrl; //菜单贡献项配置文件位置 + public List getPermitPatterns() { return permitPatterns; } @@ -15,4 +18,12 @@ public class Security { public void setPermitPatterns(List permitPatterns) { this.permitPatterns = permitPatterns; } + + public String getConfigurationFileUrl() { + return configurationFileUrl; + } + + public void setConfigurationFileUrl(String configurationFileUrl) { + this.configurationFileUrl = configurationFileUrl; + } } diff --git a/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml b/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml index 0483db0d..81c0b8e5 100644 --- a/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml +++ b/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml @@ -77,7 +77,7 @@ - + diff --git a/io.sc.platform.system.frontend/package.json b/io.sc.platform.system.frontend/package.json index 3f1673e7..ae0717de 100644 --- a/io.sc.platform.system.frontend/package.json +++ b/io.sc.platform.system.frontend/package.json @@ -78,7 +78,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.61", + "platform-core": "8.1.70", "quasar": "2.14.2", "tailwindcss": "3.4.0", "vue": "3.4.3", @@ -100,4 +100,4 @@ "codemirror": "6.0.1", "vue-codemirror6": "1.2.0" } -} \ No newline at end of file +} diff --git a/io.sc.platform.system.frontend/src/i18n/messages.json b/io.sc.platform.system.frontend/src/i18n/messages.json index 04731a7c..a2ad755a 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages.json +++ b/io.sc.platform.system.frontend/src/i18n/messages.json @@ -17,7 +17,6 @@ "menu.system.monitor.resources" : "Resources", "menu.system.license" : "License", - "system.role.gridTitle":"Role List", "system.org.gridTitle":"Org Tree", "system.announcement.gridTitle":"Announcement List", "system.monitor.auditlog.gridTitle":"Audit Log List", @@ -33,13 +32,21 @@ "system.user.action.resetAllPassword":"Reset All Password", "system.user.confirm.resetPassword":"Are you sure to reset the user's password?", "system.user.confirm.resetAllPassword":"Are you sure to reset ALL user's password?", - "system.user.entity.title":"User List", - + "system.role.grid.title":"Role List", "system.role.action.addRole":"Add Role", "system.role.action.addAllRole":"Add All Role", + "system.role.action.addAllRole.confirm":"Are you sure to add ALL roles to {userName} ({userLoginName})?", "system.role.action.removeRole":"Remove Role", + "system.role.action.removeRole.confirm":"Are you sure to remove {userName} ({userLoginName}) user's role {roleCode} ({roleName})?", + "system.role.action.removeRole.confirms":"Are you sure to remove {userName} ({userLoginName}) user's {counter} roles?", "system.role.action.removeAllRole":"Remove All Role", + "system.role.action.removeAllRole.confirm":"Are you sure to remove ALL roles to {userName} ({userLoginName})?", + + "system.selectRoleByUserDialog.title":"Available Role List", + + "system.org.grid.title":"Org Tree", + "system.menu.action.addTop":"Add Top Menu", "system.menu.action.addChild":"Add Child Menu", diff --git a/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json index 46ab563a..5522f161 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json @@ -17,7 +17,6 @@ "menu.system.monitor.resources" : "系統資源", "menu.system.license" : "許可證管理", - "system.role.gridTitle":"角色列表", "system.org.gridTitle":"機構樹", "system.announcement.gridTitle":"公告列表", "system.monitor.auditlog.gridTitle":"審計日誌列表", @@ -34,10 +33,19 @@ "system.user.confirm.resetPassword":"您確認要重置用戶密碼嗎?", "system.user.confirm.resetAllPassword":"您確認要重置所有用戶密碼嗎?", + "system.role.grid.title":"角色列表", "system.role.action.addRole":"添加角色", "system.role.action.addAllRole":"添加所有角色", + "system.role.action.addAllRole.confirm":"您確認要給 {userName} ({userLoginName}) 用戶添加所有角色嗎?", "system.role.action.removeRole":"移除角色", + "system.role.action.removeRole.confirm":"您確定要移除 {userName} ({userLoginName}) 用戶的角色 {roleCode} ({roleName}) 吗?", + "system.role.action.removeRole.confirms":"您確定要移除 {userName} ({userLoginName}) 用戶的 {counter} 個角色吗?", "system.role.action.removeAllRole":"移除所有角色", + "system.role.action.removeAllRole.confirm":"您確認要將 {userName} ({userLoginName}) 用戶的所有角色移除嗎?", + + "system.selectRoleByUserDialog.title":"可選角色列表", + + "system.org.grid.title":"機構樹", "system.menu.action.addTop":"新增頂級菜單", "system.menu.action.addChild":"新增子菜單", diff --git a/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json index 3c657f09..b761693f 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json @@ -17,7 +17,6 @@ "menu.system.monitor.resources" : "系统资源", "menu.system.license" : "许可证管理", - "system.role.gridTitle":"角色列表", "system.org.gridTitle":"机构树", "system.announcement.gridTitle":"公告列表", "system.monitor.auditlog.gridTitle":"审计日志列表", @@ -33,12 +32,21 @@ "system.user.action.resetAllPassword":"重置所有密码", "system.user.confirm.resetPassword":"您确定要重置用户密码吗?", "system.user.confirm.resetAllPassword":"您确定要重置所有用户密码吗?", - + "system.role.grid.title":"角色列表", "system.role.action.addRole":"添加角色", "system.role.action.addAllRole":"添加所有角色", + "system.role.action.addAllRole.confirm":"您确定要给 {userName} ({userLoginName}) 用户添加所有角色吗?", "system.role.action.removeRole":"移除角色", + "system.role.action.removeRole.confirm":"您确定要移除 {userName} ({userLoginName}) 用户的角色 {roleCode} ({roleName}) 吗?", + "system.role.action.removeRole.confirms":"您确定要移除 {userName} ({userLoginName}) 用户的 {counter} 个角色吗?", "system.role.action.removeAllRole":"移除所有角色", + "system.role.action.removeAllRole.confirm":"您确定要将 {userName} ({userLoginName}) 用户的所有角色移除吗?", + + "system.selectRoleByUserDialog.title":"可选角色列表", + + "system.org.grid.title":"机构树", + "system.menu.action.addTop":"新增顶级菜单", "system.menu.action.addChild":"新增子菜单", diff --git a/io.sc.platform.system.frontend/src/views/user/Ok.vue b/io.sc.platform.system.frontend/src/views/user/Ok.vue deleted file mode 100644 index 3ffd860e..00000000 --- a/io.sc.platform.system.frontend/src/views/user/Ok.vue +++ /dev/null @@ -1,34 +0,0 @@ - - diff --git a/io.sc.platform.system.frontend/src/views/user/RoleStatusTag.vue b/io.sc.platform.system.frontend/src/views/user/RoleStatusTag.vue new file mode 100644 index 00000000..d8cfbfdf --- /dev/null +++ b/io.sc.platform.system.frontend/src/views/user/RoleStatusTag.vue @@ -0,0 +1,11 @@ + + diff --git a/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue b/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue index da565fb6..627454e6 100644 --- a/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue +++ b/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue @@ -1,152 +1,114 @@ diff --git a/io.sc.platform.system.frontend/src/views/user/SetPasswordDialog.vue b/io.sc.platform.system.frontend/src/views/user/SetPasswordDialog.vue index 32d173bb..66fc1217 100644 --- a/io.sc.platform.system.frontend/src/views/user/SetPasswordDialog.vue +++ b/io.sc.platform.system.frontend/src/views/user/SetPasswordDialog.vue @@ -3,7 +3,7 @@ ref="setPasswordDialogRef" :title="$t('system.user.action.' + actionType)" width="500px" - height="200px" + height="230px" :can-maximize="false" :buttons="[ { @@ -26,8 +26,18 @@ ref="setPasswordFormRef" :cols-num="1" :fields="[ - { name: 'password', label: $t('password'), type: 'password' }, - { name: 'confirmPassword', label: $t('confirmPassword'), type: 'password' }, + { name: 'password', label: $t('password'), type: 'password', required: true }, + { + name: 'confirmPassword', + label: $t('confirmPassword'), + type: 'password', + required: true, + rules: [ + (value) => { + return Tools.stringEquals(setPasswordFormRef.getData().password, value) ? true : $t('passwordAndConfirmPasswordMustEqual'); + }, + ], + }, ]" class="p-2" > @@ -42,18 +52,18 @@ const setPasswordFormRef = ref(); let actionType = ref(); let userIds = []; -const show = (type, users) => { +const open = (type, users) => { actionType.value = type; userIds = Tools.extractProperties(users, 'id'); setPasswordDialogRef.value.show(); }; -const hide = () => { +const close = () => { setPasswordDialogRef.value.hide(); }; defineExpose({ - show, - hide, + open, + close, }); diff --git a/io.sc.platform.system.frontend/src/views/user/User.vue b/io.sc.platform.system.frontend/src/views/user/User.vue index f89d2167..c1b7334d 100644 --- a/io.sc.platform.system.frontend/src/views/user/User.vue +++ b/io.sc.platform.system.frontend/src/views/user/User.vue @@ -1,20 +1,182 @@ - +