diff --git a/build.gradle b/build.gradle index 085ac72e..5689f0f6 100644 --- a/build.gradle +++ b/build.gradle @@ -4,8 +4,10 @@ import java.util.zip.GZIPOutputStream apply from: "build-version.gradle" +// 判断项目是否是普通前端项目 def isFrontendProject(currentDir){ - return file(currentDir.getAbsolutePath() + '/package.json').exists() && !file(currentDir.getAbsolutePath() + '/webpack.env.lib.cjs').exists(); + return file(currentDir.getAbsolutePath() + '/package.json').exists() + && !file(currentDir.getAbsolutePath() + '/webpack.env.lib.cjs').exists(); } /*********************************************************************** @@ -395,15 +397,15 @@ subprojects { } /*----------------------------------------------------------------- - * pnpm re install + * pnpm sync *----------------------------------------------------------------*/ - task frontendNpmReInstall(type:Exec){ - if(isFrontendProject(file('.'))){ + task frontendNpmSync(type:Exec){ + if(isFrontendProject(file('.')) && !project.name.contains("io.sc.platform.security.frontend")){ workingDir '.' if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ - commandLine 'cmd', '/c', 'pnpm', 'install' + commandLine 'cmd', '/c', 'pnpm', 'sync' }else{ - commandLine 'pnpm', 'install' + commandLine 'pnpm', 'sync' } }else{ if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ @@ -413,22 +415,22 @@ subprojects { } } } - tasks.frontendNpmReInstall.doFirst { + tasks.frontendNpmSync.doFirst { if(isFrontendProject(file('.'))) { - println '开始执行 pnpm re install ......'; + println '开始执行 pnpm sync ......'; } } /*----------------------------------------------------------------- - * pnpm sync + * pnpm re install *----------------------------------------------------------------*/ - task frontendNpmSync(type:Exec){ - if(isFrontendProject(file('.')) && !project.name.contains("io.sc.platform.security.frontend")){ + task frontendNpmReInstall(type:Exec){ + if(isFrontendProject(file('.'))){ workingDir '.' if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ - commandLine 'cmd', '/c', 'pnpm', 'sync' + commandLine 'cmd', '/c', 'pnpm', 'install' }else{ - commandLine 'pnpm', 'sync' + commandLine 'pnpm', 'install' } }else{ if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ @@ -438,9 +440,9 @@ subprojects { } } } - tasks.frontendNpmSync.doFirst { + tasks.frontendNpmReInstall.doFirst { if(isFrontendProject(file('.'))) { - println '开始执行 pnpm sync ......'; + println '开始执行 pnpm re install ......'; } } @@ -508,6 +510,9 @@ subprojects { } tasks.frontendGenerateThymeleafTemplate.doLast { if(isFrontendProject(file('.'))) { + if(!file("dist/public/${project.name}/index.html").exists()){ + return; + } def content = file("dist/public/${project.name}/index.html").text; content = content.replace(' diff --git a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue index 28964af4..2c78a67f 100644 --- a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue +++ b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue @@ -44,6 +44,23 @@ + diff --git a/io.sc.platform.core.frontend/src/platform/mock/index.ts b/io.sc.platform.core.frontend/src/platform/mock/index.ts index 1717049d..ac04ab6e 100644 --- a/io.sc.platform.core.frontend/src/platform/mock/index.ts +++ b/io.sc.platform.core.frontend/src/platform/mock/index.ts @@ -2,6 +2,6 @@ import login from './api/login.json'; import session from './api/system/user/session.json'; import activeConfigure from './api/lcdp/configure/getActiveConfigure.json'; -const PLATFORM_MOCKS = [login, session, activeConfigure]; +const PLATFORM_MOCKS: any[] = [login, session, activeConfigure]; export default PLATFORM_MOCKS; diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts index 36baa03c..e3e60143 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts @@ -13,7 +13,7 @@ class RemoteEntryManager { // 在独立的 web 服务器上部署时, 远程入口文件位于 web 服务器上 const remoteEntries = Environment.getRemoteEntries(); if (remoteEntries) { - const urls = []; + const urls: string[] = []; for (const key in remoteEntries) { urls.push(Environment.getWebContextPath() + remoteEntries[key]); } diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts index a0a1cb7b..acd98358 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts @@ -71,7 +71,7 @@ class TagViewManager { } } } else { - const route = RouterManager.getRouteByName(to.name); + const route = RouterManager.getRouteByName(to.name) as FrontEndRouteType; if (route) { menuId = route.name; menuTitleI18nKey = route.name; @@ -106,7 +106,7 @@ class TagViewManager { } private static update(storage: any) { - const tagViews = []; + const tagViews: any[] = []; if (storage.tagViews && storage.tagViews.length > 0) { for (const tagView of storage.tagViews) { if (RouterManager.getRouteByName(tagView.routeName)) { diff --git a/io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts b/io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts index 979349f7..ca11a73f 100644 --- a/io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts +++ b/io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts @@ -4,9 +4,16 @@ import type { I18nMessageLocaleType } from './I18nMessageLocaleType'; * 应用配置类型 */ export type ConfigureType = { - // --------------------------------------------- + // 前端运行环境 + // alone: 前端独立部署, 即前端打包后独立部署于 web 服务上(如: nginx, caddy 等) + // develop: 前端运行在开发环境, 即前端在开发环境下运行(如: webpack) + // backend: 前端运行在后端环境, 即前后端一起打包后部署在应用服务器上(如: tomcat, undertow, jeety等) + fontendScenario: string; + + // router 历史模式 + routerHistoryMode: string; + // 应用上下文路径 - // --------------------------------------------- webContextPath: string; // --------------------------------------------- @@ -21,10 +28,10 @@ export type ConfigureType = { [name: string]: any; }; - enableLocalMock: boolean; // 是否启用本地 mock - localMockTimeout: number; // mock 请求响应时间(单位:毫秒) - enableRemoteConfigure: boolean; // 是否启用使用远程服务端配置 - useLocalRouterFirst: boolean; // 是否首先使用本地路由 + enableLocalMock: boolean; // 是否启用本地 mock + localMockTimeout: number; // mock 请求响应时间(单位:毫秒) + enableRemoteConfigure: boolean; // 是否启用使用远程服务端配置 + useLocalRouterFirst: boolean; // 是否首先使用本地路由 // --------------------------------------------- // axios @@ -44,7 +51,7 @@ export type ConfigureType = { // 前端设置 // --------------------------------------------- setting: { - routerHistoryMode: 'hash' | 'web'; // vue-router 历史模式(hash,web) + notifyTimeout: number; // 通知提示框显示时间单位:毫秒 homePage: string; // 首页路由 path i18n: { availableLocales: string[]; // 支持的国际化多语言数组 @@ -55,7 +62,7 @@ export type ConfigureType = { changeNotify: boolean; // 当切换区域成功后是否显示通知 }; isMultiCorporationMode: boolean; //是否多法人模式 - isPrimaryCorporation: boolean; //是否是主法人(主法人可以管理其他法人) + isPrimaryCorporation: boolean; //是否是主法人(主法人可以管理其他法人) }; // --------------------------------------------- @@ -113,7 +120,7 @@ export type ConfigureType = { // --------------------------------------------- sider: { position: 'left' | 'right'; // 位置(可选值:left,right) - isSiderExpaned: boolean; // 是否默认展开 + isSiderExpaned: boolean; // 是否默认展开 dense: boolean; // 是否采用紧凑模式 border: boolean; // 是否显示边框 @@ -206,9 +213,9 @@ export type ConfigureType = { }; grid: { - headBgColor: string; // 表头背景颜色 - stickyBgColor: string; // 锁定列背景颜色 - borderColor: string; // 表格边框颜色 - } + headBgColor: string; // 表头背景颜色 + stickyBgColor: string; // 锁定列背景颜色 + borderColor: string; // 表格边框颜色 + }; }; }; diff --git a/io.sc.platform.core.frontend/src/platform/utils/DictionaryTools.ts b/io.sc.platform.core.frontend/src/platform/utils/DictionaryTools.ts index b796b11d..f538fd81 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/DictionaryTools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/DictionaryTools.ts @@ -2,7 +2,7 @@ import type { DictionaryType } from '@/platform/types'; import { axios, Environment, Tools } from '@/platform'; class DictionaryTools { - public static async fetch(codes: string | string[]): DictionaryType | Map { + public static async fetch(codes: string | string[]) { if (!Tools.isUndefinedOrNull(codes)) { if (Tools.isArray(codes)) { return DictionaryTools.fetchMultiple(codes as string[]); @@ -12,7 +12,7 @@ class DictionaryTools { } } - public static async fetchSingle(code: string): DictionaryType { + public static async fetchSingle(code: string): Promise { const response = await axios.get(Environment.apiContextPath('/api/dictionary/list/') + code); if (response) { return { @@ -27,9 +27,9 @@ class DictionaryTools { } } - public static async fetchMultiple(codes: string[]): Map { + public static async fetchMultiple(codes: string[]): Promise> { if (codes && codes.length > 0) { - const parameters = []; + const parameters: any[] = []; for (const code of codes) { parameters.push({ key: 'codes', value: code }); } @@ -44,11 +44,10 @@ class DictionaryTools { items: items, }; } - return result; - } else { - return {}; + return result as Map; } } + return {} as Map; } } diff --git a/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts b/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts index a817211f..41219a16 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/Downloader.ts @@ -34,7 +34,7 @@ class Downloader { a.style.display = 'none'; document.body.appendChild(a); a.click(); - a.parentNode.removeChild(a); + a.parentNode?.removeChild(a); window.URL.revokeObjectURL(url); } } 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 9e1427d3..1aba8c99 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts @@ -2,7 +2,7 @@ import type { EnumType } from '@/platform/types'; import { axios, Environment, Tools } from '@/platform'; class EnumTools { - public static async fetch(codes: string | string[]): EnumType | Map { + public static async fetch(codes: string | string[]) { if (!Tools.isUndefinedOrNull(codes)) { if (Tools.isArray(codes)) { return EnumTools.fetchMultiple(codes as string[]); @@ -12,7 +12,7 @@ class EnumTools { } } - public static async fetchSingle(type: string): EnumType { + public static async fetchSingle(type: string): Promise { const response = await axios.get(Environment.apiContextPath('/api/enum/list/') + type); if (response) { return { @@ -27,9 +27,9 @@ class EnumTools { } } - public static async fetchMultiple(types: string[]): Map { + public static async fetchMultiple(types: string[]): Promise> { if (types && types.length > 0) { - const parameters = []; + const parameters: any[] = []; for (const type of types) { parameters.push({ key: 'types', value: type }); } @@ -44,11 +44,10 @@ class EnumTools { items: items, }; } - return result; - } else { - return {}; + return result as Map; } } + return {} as Map; } } 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 72cd07d9..180cf28a 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/Tools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/Tools.ts @@ -801,7 +801,7 @@ class Tools { * @param o2 对象2 * @returns 两个对象的值是否相等 */ - public static objectValueEquals(o1: object | null | undefined, o2: object | null | undefined): boolean { + public static objectValueEquals(o1: object, o2: object): boolean { if (Tools.isUndefinedOrNull(o1) && Tools.isUndefinedOrNull(o2)) { return true; } @@ -851,14 +851,13 @@ class Tools { * @returns 属性值数组 */ public static extractProperties(objects: object[], propertyName: string): object[] { + const result: any[] = []; if (objects && objects.length > 0 && propertyName) { - const result = []; for (const object of objects) { result.push(object[propertyName]); } - return result; } - return []; + return result; } /** diff --git a/io.sc.platform.core.frontend/template-project/.gitignore b/io.sc.platform.core.frontend/template-project/.gitignore index 719bf30c..f5dbd6f5 100644 --- a/io.sc.platform.core.frontend/template-project/.gitignore +++ b/io.sc.platform.core.frontend/template-project/.gitignore @@ -26,6 +26,7 @@ coverage *.njsproj *.sln *.sw? +.vuepress test-results/ playwright-report/ diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json index 18f5636b..fbebcd10 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.373", + "version": "8.1.391", "description": "前端核心包,用于快速构建前端的脚手架", "private": false, "keywords": [], @@ -29,22 +29,24 @@ "@babel/plugin-transform-object-rest-spread": "7.24.7", "@babel/preset-env": "7.25.4", "@babel/preset-typescript": "7.24.7", - "@quasar/app-webpack": "4.0.0-beta.16", + "@quasar/app-webpack": "4.0.0-beta.23", "@quasar/cli": "2.4.1", "@types/mockjs": "1.0.10", - "@types/node": "22.5.4", - "@typescript-eslint/eslint-plugin": "8.5.0", - "@typescript-eslint/parser": "8.5.0", - "@vue/babel-plugin-jsx": "1.2.4", - "@vue/compiler-sfc": "3.5.4", + "@types/node": "22.7.4", + "@typescript-eslint/eslint-plugin": "8.7.0", + "@typescript-eslint/parser": "8.7.0", + "@vue/babel-plugin-jsx": "1.2.5", + "@vue/compiler-sfc": "3.5.10", + "@vuepress/bundler-webpack": "2.0.0-rc.15", + "@vuepress/theme-default": "2.0.0-rc.49", "@webpack-cli/serve": "2.0.5", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", "css-loader": "7.1.2", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-vue": "9.28.0", @@ -52,51 +54,52 @@ "html-webpack-plugin": "5.6.0", "json5": "2.2.3", "mini-css-extract-plugin": "2.9.1", - "nodemon": "3.1.4", - "postcss": "8.4.45", + "nodemon": "3.1.7", + "postcss": "8.4.47", "postcss-import": "16.1.0", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.3", + "postcss-preset-env": "10.0.5", "prettier": "3.3.3", - "sass": "1.78.0", - "sass-loader": "16.0.1", - "tailwindcss": "3.4.10", + "sass": "1.79.4", + "sass-loader": "16.0.2", + "tailwindcss": "3.4.13", "typescript": "5.5.4", "vue-loader": "17.4.2", - "webpack": "5.94.0", + "vuepress": "2.0.0-rc.15", + "webpack": "5.95.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.1.0", "webpack-merge": "6.0.1" }, "dependencies": { - "@codemirror/autocomplete": "6.18.0", - "@codemirror/commands": "6.6.1", + "@codemirror/autocomplete": "6.18.1", + "@codemirror/commands": "6.6.2", "@codemirror/lang-html": "6.4.9", "@codemirror/lang-java": "6.0.1", "@codemirror/lang-javascript": "6.2.2", "@codemirror/lang-json": "6.0.1", "@codemirror/lang-sql": "6.7.1", "@codemirror/lang-xml": "6.1.0", - "@codemirror/language": "6.10.2", + "@codemirror/language": "6.10.3", "@codemirror/search": "6.5.6", "@codemirror/state": "6.4.1", - "@codemirror/view": "6.33.0", + "@codemirror/view": "6.34.1", "@maxgraph/core": "0.13.0", "@quasar/extras": "1.16.12", - "@univerjs/core": "0.2.14", - "@univerjs/design": "0.2.14", - "@univerjs/docs": "0.2.14", - "@univerjs/docs-ui": "0.2.14", - "@univerjs/engine-formula": "0.2.14", - "@univerjs/engine-render": "0.2.14", - "@univerjs/facade": "0.2.14", - "@univerjs/sheets": "0.2.14", - "@univerjs/sheets-formula": "0.2.14", - "@univerjs/sheets-ui": "0.2.14", - "@univerjs/thread-comment": "0.2.14", - "@univerjs/ui": "0.2.14", - "@vueuse/core": "11.0.3", + "@univerjs/core": "0.2.15", + "@univerjs/design": "0.2.15", + "@univerjs/docs": "0.2.15", + "@univerjs/docs-ui": "0.2.15", + "@univerjs/engine-formula": "0.2.15", + "@univerjs/engine-render": "0.2.15", + "@univerjs/facade": "0.2.15", + "@univerjs/sheets": "0.2.15", + "@univerjs/sheets-formula": "0.2.15", + "@univerjs/sheets-ui": "0.2.15", + "@univerjs/thread-comment": "0.2.15", + "@univerjs/ui": "0.2.15", + "@vueuse/core": "11.1.0", "axios": "1.7.7", "codemirror": "6.0.1", "dayjs": "1.11.13", @@ -107,13 +110,13 @@ "mockjs": "1.1.0", "node-sql-parser": "5.3.2", "pinia": "2.2.2", - "platform-core": "8.1.373", - "quasar": "2.16.11", + "platform-core": "8.1.391", + "quasar": "2.17.0", "svg-path-commander": "2.0.10", - "vue": "3.5.4", + "vue": "3.5.10", "vue-dompurify-html": "5.1.0", - "vue-i18n": "10.0.0", - "vue-router": "4.4.3", + "vue-i18n": "10.0.3", + "vue-router": "4.4.5", "xml-formatter": "3.6.3" } } \ No newline at end of file diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages.json index cbfc171d..fa46698e 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages.json @@ -1,14 +1,15 @@ { "menu.testcase": "Test Case", + "menu.testcase.openUrl": "Open At New Tab", "menu.testcase.openNoMenuRoute": "Open No Menu Route", "menu.testcase.mathEditor": "Math Formual Editor", "menu.testcase.mathEditorForm": "Math Formual Editor(Form)", - "menu.testcase.form":"Form Element", - "menu.testcase.codemirror":"Code Mirror", - "menu.testcase.loading":"Loading", + "menu.testcase.form": "Form Element", + "menu.testcase.codemirror": "Code Mirror", + "menu.testcase.loading": "Loading", "menu.testcase.excel": "Excel", "menu.testcase.word": "Word", "menu.testcase.maxgraph": "Graph Editor", - "route.testcase.noMenuRoute":"No Menu Route" + "route.testcase.noMenuRoute": "No Menu Route" } diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json index bf8f44d8..85003056 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json @@ -1,14 +1,15 @@ { "menu.testcase": "測試用例", + "menu.testcase.openUrl": "在新標籤頁打開", "menu.testcase.openNoMenuRoute": "打開無關聯菜單的路由", "menu.testcase.mathEditor": "數學公式編輯器", "menu.testcase.mathEditorForm": "數學公式編輯器(表單)", - "menu.testcase.form":"表單元素", - "menu.testcase.codemirror":"代碼編輯器", - "menu.testcase.loading":"正在加載", + "menu.testcase.form": "表單元素", + "menu.testcase.codemirror": "代碼編輯器", + "menu.testcase.loading": "正在加載", "menu.testcase.excel": "Excel", "menu.testcase.word": "Word", "menu.testcase.maxgraph": "图形编辑器", - "route.testcase.noMenuRoute":"無關聯菜單路由" + "route.testcase.noMenuRoute": "無關聯菜單路由" } diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json index 2df3af9a..2fca94e2 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json @@ -1,14 +1,15 @@ { "menu.testcase": "测试用例", + "menu.testcase.openUrl": "在新标签页打开", "menu.testcase.openNoMenuRoute": "打开无关联菜单的路由示例", "menu.testcase.mathEditor": "数学公式编辑器", "menu.testcase.mathEditorForm": "数学公式编辑器(表单)", - "menu.testcase.form":"表单元素", - "menu.testcase.codemirror":"代码编辑器", - "menu.testcase.loading":"正在加載", + "menu.testcase.form": "表单元素", + "menu.testcase.codemirror": "代码编辑器", + "menu.testcase.loading": "正在加載", "menu.testcase.excel": "Excel", "menu.testcase.word": "Word", "menu.testcase.maxgraph": "图形编辑器", - "route.testcase.noMenuRoute":"无关联菜单路由" + "route.testcase.noMenuRoute": "无关联菜单路由" } diff --git a/io.sc.platform.core.frontend/template-project/src/menus/menus.json b/io.sc.platform.core.frontend/template-project/src/menus/menus.json index f1a8e8bb..21141c4a 100644 --- a/io.sc.platform.core.frontend/template-project/src/menus/menus.json +++ b/io.sc.platform.core.frontend/template-project/src/menus/menus.json @@ -18,6 +18,16 @@ [ { "type": "GROUP", "order": 20000, "id": "menu.testcase", "titleI18nKey": "menu.testcase", "icon": "bi-gear" }, + { + "type": "URL", + "order": 50, + "parentId": "menu.testcase", + "id": "menu.testcase.openUrl", + "titleI18nKey": "menu.testcase.openUrl", + "icon": "bi-palette", + "url": "/xxx/a.html", + "urlOpenType": "NEW_WINDOW" + }, { "type": "ROUTE", "order": 100, diff --git a/io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue b/io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue index 099f0a1b..d3c89f2b 100644 --- a/io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue +++ b/io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue @@ -6,11 +6,131 @@

-
- -
+
+ +
+
+
- +
+

+
模型值: {{ mode === 'criteria' ? objectModelValue : string2ModelValue }}

+

+
+


@@ -254,7 +374,7 @@ :cols-x-gap="8" @update-value=" (args) => { - console.info('form.updateValue=====', args); + // console.info('form.updateValue=====', args); } " > @@ -264,18 +384,34 @@