Browse Source

update npm's version

main
wangshaoping 5 months ago
parent
commit
22cc6274e2
  1. 87
      build.gradle
  2. 1
      erm.frontend/.gitignore
  3. 92
      erm.frontend/package.json
  4. 2
      erm.frontend/tsconfig.json
  5. 2
      gradle.properties
  6. 1
      io.sc.engine.mv.frontend/.gitignore
  7. 92
      io.sc.engine.mv.frontend/package.json
  8. 2
      io.sc.engine.mv.frontend/tsconfig.json
  9. 1
      io.sc.engine.rule.frontend/.gitignore
  10. 92
      io.sc.engine.rule.frontend/package.json
  11. 5
      io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
  12. 2
      io.sc.engine.rule.frontend/tsconfig.json
  13. 1
      io.sc.engine.st.frontend/.gitignore
  14. 92
      io.sc.engine.st.frontend/package.json
  15. 2
      io.sc.engine.st.frontend/tsconfig.json
  16. 12
      io.sc.platform.core.frontend/.bin/platform.js
  17. 81
      io.sc.platform.core.frontend/.bin/sync.js
  18. 22
      io.sc.platform.core.frontend/.bin/util.js
  19. 1
      io.sc.platform.core.frontend/.gitignore
  20. 77
      io.sc.platform.core.frontend/package.json
  21. 9
      io.sc.platform.core.frontend/src/i18n/messages.json
  22. 9
      io.sc.platform.core.frontend/src/i18n/messages_tw_CN.json
  23. 9
      io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json
  24. 10
      io.sc.platform.core.frontend/src/menus/menus.json
  25. 2
      io.sc.platform.core.frontend/src/platform/components/math/toolbar/actions/Clean.vue
  26. 14
      io.sc.platform.core.frontend/src/platform/index.ts
  27. 61
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/ExpansionMenuItem.vue
  28. 27
      io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue
  29. 2
      io.sc.platform.core.frontend/src/platform/mock/index.ts
  30. 2
      io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts
  31. 4
      io.sc.platform.core.frontend/src/platform/plugin/manager/TagViewManager.ts
  32. 15
      io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts
  33. 13
      io.sc.platform.core.frontend/src/platform/utils/DictionaryTools.ts
  34. 2
      io.sc.platform.core.frontend/src/platform/utils/Downloader.ts
  35. 13
      io.sc.platform.core.frontend/src/platform/utils/EnumTools.ts
  36. 7
      io.sc.platform.core.frontend/src/platform/utils/Tools.ts
  37. 1
      io.sc.platform.core.frontend/template-project/.gitignore
  38. 79
      io.sc.platform.core.frontend/template-project/package.json
  39. 9
      io.sc.platform.core.frontend/template-project/src/i18n/messages.json
  40. 9
      io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json
  41. 9
      io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json
  42. 10
      io.sc.platform.core.frontend/template-project/src/menus/menus.json
  43. 152
      io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue
  44. 26
      io.sc.platform.core.frontend/template-project/src/views/likm/Grid.vue
  45. 2
      io.sc.platform.core.frontend/template-project/tsconfig.json
  46. 40
      io.sc.platform.core.frontend/template-project/vuepress.client.ts
  47. 61
      io.sc.platform.core.frontend/template-project/vuepress.config.ts
  48. 5
      io.sc.platform.core.frontend/tsconfig.json
  49. 2
      io.sc.platform.core.frontend/util.template-generator.cjs
  50. 40
      io.sc.platform.core.frontend/vuepress.client.ts
  51. 61
      io.sc.platform.core.frontend/vuepress.config.ts
  52. 26
      io.sc.platform.core.frontend/webpack.env.lib.cjs
  53. 5
      io.sc.platform.developer.doc/.browserslistrc
  54. 15
      io.sc.platform.developer.doc/.editorconfig
  55. 32
      io.sc.platform.developer.doc/.gitignore
  56. 0
      io.sc.platform.developer.doc/.npmignore
  57. 13
      io.sc.platform.developer.doc/.npmrc
  58. 3
      io.sc.platform.developer.doc/README.adoc
  59. 3
      io.sc.platform.developer.doc/asciidoc/9999-appendix/tools/node_npm/node_npm.adoc
  60. 34
      io.sc.platform.developer.doc/package.json
  61. 5
      io.sc.platform.developer.doc/public/hero.svg
  62. 12
      io.sc.platform.developer.doc/public/index.html
  63. BIN
      io.sc.platform.developer.doc/public/openpath.png
  64. 62
      io.sc.platform.developer.doc/public/webjars/tailwindcss/3.4.5/tailwind.css.js
  65. 5
      io.sc.platform.developer.doc/src/main/resources/META-INF/platform/plugins/security.json
  66. 24
      io.sc.platform.developer.doc/vuepress-src/getting-started/GettingStarted.md
  67. 33
      io.sc.platform.developer.doc/vuepress-src/index.md
  68. 40
      io.sc.platform.developer.doc/vuepress.client.ts
  69. 61
      io.sc.platform.developer.doc/vuepress.config.ts
  70. 24
      io.sc.platform.developer.doc/vuepress.theme.ts
  71. 1
      io.sc.platform.developer.frontend/.gitignore
  72. 90
      io.sc.platform.developer.frontend/package.json
  73. 2
      io.sc.platform.developer.frontend/src/menus/menus.json
  74. 18
      io.sc.platform.developer.frontend/src/views/Help.vue
  75. 2
      io.sc.platform.developer.frontend/tsconfig.json
  76. 3
      io.sc.platform.installer/src/main/java/io/sc/platform/installer/controller/InstallerWebController.java
  77. 4
      io.sc.platform.jdbc.liquibase/src/main/resources/templates/io/sc/platform/jdbc/liquibase/installer/installer.html
  78. 1
      io.sc.platform.lcdp.frontend/.gitignore
  79. 92
      io.sc.platform.lcdp.frontend/package.json
  80. 2
      io.sc.platform.lcdp.frontend/tsconfig.json
  81. 1
      io.sc.platform.mvc.frontend/.gitignore
  82. 92
      io.sc.platform.mvc.frontend/package.json
  83. 2
      io.sc.platform.mvc.frontend/tsconfig.json
  84. 1
      io.sc.platform.scheduler.manager.frontend/.gitignore
  85. 92
      io.sc.platform.scheduler.manager.frontend/package.json
  86. 2
      io.sc.platform.scheduler.manager.frontend/tsconfig.json
  87. 1
      io.sc.platform.system.frontend/.gitignore
  88. 82
      io.sc.platform.system.frontend/package.json
  89. 4
      io.sc.platform.system.frontend/src/views/menu/Menu.vue
  90. 2
      io.sc.platform.system.frontend/tsconfig.json
  91. 1
      io.sc.standard.frontend/.gitignore
  92. 92
      io.sc.standard.frontend/package.json
  93. 2
      io.sc.standard.frontend/tsconfig.json
  94. 5
      io.sc.website/.browserslistrc
  95. 15
      io.sc.website/.editorconfig
  96. 32
      io.sc.website/.gitignore
  97. 0
      io.sc.website/.npmignore
  98. 13
      io.sc.website/.npmrc
  99. 33
      io.sc.website/package.json
  100. 5
      io.sc.website/public/favicon.svg

87
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('<script defer src="javascript/main', """<script defer src="${project.name}/javascript/main""");
def output = file("java-src/main/resources/templates/${project.name}.html");
@ -582,6 +587,9 @@ subprojects {
}
tasks.frontendGenerateMenus.doLast {
if(isFrontendProject(file('.'))) {
if(!file('src/menus/menus.json').exists()) {
return;
}
java.nio.file.Files.copy(file('src/menus/menus.json').toPath(), file('java-src/main/resources/META-INF/platform/plugins/menus.json').toPath());
}
}
@ -598,12 +606,15 @@ subprojects {
}
tasks.frontendGenerateRoutes.doLast {
if(isFrontendProject(file('.'))) {
if(!file("src/routes/routes.json").exists()) {
return;
}
def routes = new groovy.json.JsonSlurper().parseText(file("src/routes/routes.json").text);
for(def route : routes){
route.module=project.name;
for (def route : routes) {
route.module = project.name;
}
def json = groovy.json.JsonOutput.toJson(routes);
def outputFile =file("java-src/main/resources/META-INF/platform/plugins/frontend-routes.json");
def outputFile = file("java-src/main/resources/META-INF/platform/plugins/frontend-routes.json");
outputFile.withWriter('UTF-8') { writer ->
writer.write(groovy.json.JsonOutput.prettyPrint(json));
}
@ -624,10 +635,12 @@ subprojects {
if(isFrontendProject(file('.'))) {
//components---------------------------------------
List<String> components =new ArrayList<String>();
if(file("java-src/main/resources/META-INF/platform/plugins/frontend-routes.json").exists()) {
def routes = new groovy.json.JsonSlurper().parseText(file("java-src/main/resources/META-INF/platform/plugins/frontend-routes.json").text);
for(def route : routes){
for (def route : routes) {
components.add(route.component);
}
}
//resources----------------------------------------
List<String> resources = new ArrayList<String>();
@ -674,36 +687,6 @@ subprojects {
}
}
task gzipFrontend(){}
tasks.gzipFrontend.doFirst {
if(isFrontendProject(file('.'))) {
println '开始执行 gzip frontend ......'
}
}
tasks.frontendModule.doLast {
if(isFrontendProject(file('.'))) {
// js css
def tree = fileTree('dist') {
include '**/*.js'
include '**/*.css'
}
tree.each { File file ->
println file.getAbsolutePath()
FileInputStream ins = new FileInputStream(file);
GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream(file.getAbsolutePath() + ".gz"));
def count;
def data = new byte[1024];
while ((count = ins.read(data, 0, 1024)) != -1) {
gos.write(data, 0, count);
}
gos.finish();
gos.flush();
gos.close();
ins.close();
}
}
}
/*-----------------------------------------------------------------
* jar
*----------------------------------------------------------------*/
@ -717,7 +700,7 @@ subprojects {
//
frontendNpmInstall.dependsOn(frontendUpdatePackageJson)
frontendNpmSync.dependsOn(frontendNpmInstall)
frontendNpmReInstall.dependsOn(frontendNpmSync);
frontendNpmReInstall.dependsOn(frontendNpmSync)
frontendNpmBuild.dependsOn(frontendNpmReInstall)
frontendNpmProd.dependsOn(frontendNpmReInstall)
@ -736,10 +719,8 @@ subprojects {
frontendGenerateMenus.dependsOn(frontendGenerateI18n);
frontendGenerateRoutes.dependsOn(frontendGenerateMenus);
frontendModule.dependsOn(frontendGenerateRoutes);
gzipFrontend.dependsOn(frontendModule);
frontend.dependsOn(gzipFrontend);
frontend.dependsOn(frontendModule);
//tasks.preBuild.dependsOn(frontend);
processResources.dependsOn(frontend)
processResources {

1
erm.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

92
erm.frontend/package.json

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

2
erm.frontend/tsconfig.json

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

2
gradle.properties

@ -38,7 +38,7 @@ application_version=1.0.0
platform_group=io.sc
platform_version=8.1.49
platform_plugin_version=8.1.49
platform_core_frontend_version=8.1.358
platform_core_frontend_version=8.1.391
###########################################################
# dependencies version

1
io.sc.engine.mv.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

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

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.engine.rule.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

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

@ -994,6 +994,7 @@
},
type: 'w-grid',
height: 300,
cellSelected: true,
dbClickOperation: 'edit',
autoFetchData: false,
denseBody: true,
@ -1013,7 +1014,9 @@
enableIf: (args) => {
return true;
},
click: () => {},
click: (arg) => {
console.log(arg);
},
},
{
name: 'addCol2Right',

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

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.engine.st.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

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

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

12
io.sc.platform.core.frontend/.bin/platform.js

@ -1,15 +1,15 @@
#!/usr/bin/env node
"use strict";
'use strict';
const sync = require("./sync");
const create = require("./create");
const sync = require('./sync.js');
const create = require('./create.js');
if(process.argv[2]=='create'){
if (process.argv[2] == 'create') {
create();
}else if(process.argv[2]=='sync'){
} else if (process.argv[2] == 'sync') {
sync();
}else{
} else {
console.info(`
用法: npx platform [-options]
其中选项包括:

81
io.sc.platform.core.frontend/.bin/sync.js

@ -8,9 +8,46 @@ Object.defineProperty(exports, '__esModule', { value: true });
* 同步 platform-core 定义的前端项目配置
* platform-core 库的 template-project 目录中复制前端项目文件到本地项目
*/
const { rm, cp, mergeJsonFile } = require('./util.js');
const { rm, cp, mergeJsonFile, parseJson, sortObject } = require('./util.js');
const sync = async () => {
const sync = () => {
if (isFrontendProject()) {
syncFrontendProject();
}
if (isVuePressProject()) {
syncVuePressProject();
}
console.info('sync completed!');
};
/**
* 判断项目是否是普通前端项目
* 1. 包含 package.json 文件
* 2. 不包含 webpack.env.lib.cjs 文件, 存在该文件的项目是 io.sc.platform.core.frontend
* 3. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目
*/
const isFrontendProject = () => {
const targetDir = process.cwd() + '/';
if (fs.existsSync(targetDir + 'package.json') && !fs.existsSync(targetDir + 'webpack.env.lib.cjs') && !fs.existsSync(targetDir + 'vuepress-src')) {
return true;
}
return false;
};
/**
* 判断项目是否是 vuepress 前端文档项目
* 1. 包含 package.json 文件
* 2. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目
*/
const isVuePressProject = () => {
const targetDir = process.cwd() + '/';
if (fs.existsSync(targetDir + 'package.json') && fs.existsSync(targetDir + 'vuepress-src')) {
return true;
}
return false;
};
const syncFrontendProject = () => {
const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/';
const targetDir = process.cwd() + '/';
@ -49,8 +86,46 @@ const sync = async () => {
mergeJsonFile(targetDir + 'frontend-register.json', sourceDir + 'frontend-register.json', ['path']);
mergeJsonFile(targetDir + 'package.json', sourceDir + 'package.json', ['scripts', 'devDependencies', 'dependencies']);
mergeJsonFile(targetDir + 'tsconfig.json', sourceDir + 'tsconfig.json', ['compilerOptions']);
};
console.info('sync completed!');
const syncVuePressProject = () => {
const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/';
const targetDir = process.cwd() + '/';
const target = parseJson(targetDir + 'package.json');
const source = parseJson(sourceDir + 'package.json');
cp(sourceDir + '.browserslistrc', targetDir + '.browserslistrc');
cp(sourceDir + '.editorconfig', targetDir + '.editorconfig');
cp(sourceDir + '.gitignore', targetDir + '.gitignore');
cp(sourceDir + '.npmignore', targetDir + '.npmignore');
cp(sourceDir + '.npmrc', targetDir + '.npmrc');
if (!target.devDependencies) {
target.devDependencies = {};
}
target.devDependencies['@vuepress/bundler-webpack'] = source.devDependencies['@vuepress/bundler-webpack'];
target.devDependencies['@vuepress/theme-default'] = source.devDependencies['@vuepress/theme-default'];
target.devDependencies['sass'] = source.devDependencies['sass'];
target.devDependencies['sass-loader'] = source.devDependencies['sass-loader'];
target.devDependencies['vuepress'] = source.devDependencies['vuepress'];
sortObject(target.devDependencies);
if (!target.dependencies) {
target.devDependencies = {};
}
if (target.dependencies['platform-core']) {
target.dependencies['platform-core'] = source.version;
}
if (target.dependencies['quasar']) {
target.dependencies['quasar'] = source.dependencies['quasar'];
}
target.dependencies['vue'] = source.dependencies['vue'];
if (target.dependencies['vue-i18n']) {
target.dependencies['vue-i18n'] = source.dependencies['vue-i18n'];
}
sortObject(target.dependencies);
fs.writeFileSync(targetDir + 'package.json', JSON.stringify(target, null, ' '));
};
module.exports = sync;

22
io.sc.platform.core.frontend/.bin/util.js

@ -117,6 +117,15 @@ function mergeJsonFile(targetPath, srcPath, includeProperties) {
} else {
mergeObject(target, source);
}
if (target['devDependencies']) {
target['devDependencies'] = sortObjectProperties(target['devDependencies']);
}
if (target['dependencies']) {
target['dependencies'] = sortObjectProperties(target['dependencies']);
}
if (target['peer-dependencies']) {
target['peer-dependencies'] = sortObjectProperties(target['peer-dependencies']);
}
fs.writeFileSync(targetPath, JSON.stringify(target, null, ' '));
}
@ -129,6 +138,19 @@ function isFileExisted(file) {
return fs.existsSync(file);
}
function sortObjectProperties(map) {
const names = [];
for (const item in map) {
names.push(item);
}
names.sort();
const result = {};
for (const name of names) {
result[name] = map[name];
}
return result;
}
module.exports = {
mkdir,
rm,

1
io.sc.platform.core.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.1.373",
"version": "8.1.391",
"description": "前端核心包,用于快速构建前端的脚手架",
"//main": "库的主文件",
"main": "dist/platform-core.js",
@ -57,22 +57,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",
@ -80,51 +82,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",
@ -134,12 +137,12 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.2.2",
"quasar": "2.16.11",
"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",
"node-sql-parser": "5.3.2"
}

9
io.sc.platform.core.frontend/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"
}

9
io.sc.platform.core.frontend/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": "無關聯菜單路由"
}

9
io.sc.platform.core.frontend/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": "无关联菜单路由"
}

10
io.sc.platform.core.frontend/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,

2
io.sc.platform.core.frontend/src/platform/components/math/toolbar/actions/Clean.vue

@ -1,5 +1,5 @@
<template>
<q-btn :title="$t('math.toolbar.actions.clean')" stretch flat no-caps icon="sym_o_cleaning_services" padding="4px 10px" @click="clean"></q-btn>
<q-btn :title="$t('math.toolbar.actions.clean')" stretch flat no-caps icon="bi-trash" padding="4px 10px" @click="clean"></q-btn>
</template>
<script setup lang="ts">
import { $t, DialogManager } from '@/platform';

14
io.sc.platform.core.frontend/src/platform/index.ts

@ -26,12 +26,23 @@ import '@/platform/css/mathfonts.css';
export default {
install: (app: App) => {
install(app);
},
};
const install = (app: App) => {
app.use(VueDOMPurifyHTML);
app.use(QuasarPlugin);
app.use(PlatformPlugin);
app.use(ComponentPlugin);
app.use(DirectivePlugin);
},
};
const installForVuePress = (app: App) => {
app.use(VueDOMPurifyHTML);
app.use(QuasarPlugin);
app.use(ComponentPlugin);
app.use(DirectivePlugin);
};
// 导出平台接口定义
@ -171,3 +182,4 @@ export { FormComponentValidateEnum } from './components';
export { OperatorTypeEnum } from './components';
export type { CriteriaType } from './components';
export { arrayToMap, componentRegistryName } from './components';
export { install, installForVuePress };

61
io.sc.platform.core.frontend/src/platform/layout/sub-layout/ExpansionMenuItem.vue

@ -47,9 +47,57 @@
<ExpansionMenuItem :menus="item.children" :menu-level="menuLevel + 1"></ExpansionMenuItem>
</q-expansion-item>
<!-- 菜单项 -->
<!-- 菜单项(URL) -->
<q-item
v-else-if="item.type !== 'SEPARATOR'"
v-else-if="item.type === 'URL'"
:key="item.id"
clickable
:dense="$gc.theme.sider.dense"
:inset-level="menuLevel > 1 ? menuLevel * 0.6 : menuLevel * 0.7"
exact
:title="t(item.titleI18nKey)"
:style="
$gr.selectedTagView === item.id
? {
color: $gc.theme.sider.activeColor,
'background-color': $gc.theme.sider.activeBgColor,
'font-weight': 'bold',
}
: {
color: $gc.theme.sider.color,
'background-color': $gc.theme.sider.bgColor,
}
"
:href="getUrl(item.url)"
:target="item.urlOpenType === 'SELF' ? '_selft' : '_blank'"
>
<q-item-section avatar style="min-width: 36px; padding-right: 0px">
<q-icon
:name="item.icon"
:size="$gc.theme.sider.iconSize + 'px'"
:style="{
color: $gr.selectedTagView === item.id ? $gc.theme.sider.activeIconColor : $gc.theme.sider.iconColor,
}"
/>
</q-item-section>
<q-item-section class="truncate">{{ t(item.titleI18nKey) }}</q-item-section>
<div
v-if="$gr.selectedTagView === item.id"
class="bg-primary"
:style="{
content: '',
position: 'absolute',
width: '3px',
height: '100%',
top: 0,
right: 0,
}"
></div>
</q-item>
<!-- 菜单项(ROUTE) -->
<q-item
v-else-if="item.type === 'ROUTE'"
:key="item.id"
clickable
:dense="$gc.theme.sider.dense"
@ -103,7 +151,7 @@ import type { MenuItemType } from '@/platform/types';
import { toRaw, reactive } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { MenuManager, TagViewManager } from '@/platform';
import { Environment, MenuManager, TagViewManager } from '@/platform';
const router = useRouter();
const { t } = useI18n();
@ -113,4 +161,11 @@ const props = defineProps({
});
const menuGroupExpandStatus = reactive(TagViewManager.getMenuGroupExpandStatus());
const getUrl = (url) => {
if (Environment.getFontendScenario() === 'develop') {
return Environment.apiContextPath(url);
} else {
return Environment.getWebContextPath() + url;
}
};
</script>

27
io.sc.platform.core.frontend/src/platform/layout/sub-layout/IconSubMenuItem.vue

@ -44,6 +44,23 @@
<template v-else-if="item.type === 'SEPARATOR'">
<q-separator inset spaced />
</template>
<template v-else-if="item.type === 'URL'">
<q-item
v-close-popup
:dense="$gc.theme.sider.dense"
clickable
:style="{
color: $gc.theme.sider.color,
'background-color': $gc.theme.sider.bgColor,
}"
:href="getUrl(item.url)"
:target="item.urlOpenType === 'SELF' ? '_selft' : '_blank'"
>
<q-item-section>
<q-item-label><q-icon :name="item.icon" left size="20px"></q-icon>{{ $t(item.titleI18nKey) }}</q-item-label>
</q-item-section>
</q-item>
</template>
<template v-else>
<q-item
v-close-popup
@ -85,9 +102,17 @@
</q-menu>
</template>
<script setup lang="ts">
import { MenuManager } from '@/platform';
import { Environment, MenuManager } from '@/platform';
const props = defineProps({
menus: { type: [Array, Object], default: undefined },
});
const getUrl = (url) => {
if (Environment.getFontendScenario() === 'develop') {
return Environment.apiContextPath(url);
} else {
return Environment.getWebContextPath() + url;
}
};
</script>

2
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;

2
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]);
}

4
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)) {

15
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;
// ---------------------------------------------
@ -44,7 +51,7 @@ export type ConfigureType = {
// 前端设置
// ---------------------------------------------
setting: {
routerHistoryMode: 'hash' | 'web'; // vue-router 历史模式(hash,web)
notifyTimeout: number; // 通知提示框显示时间单位:毫秒
homePage: string; // 首页路由 path
i18n: {
availableLocales: string[]; // 支持的国际化多语言数组
@ -209,6 +216,6 @@ export type ConfigureType = {
headBgColor: string; // 表头背景颜色
stickyBgColor: string; // 锁定列背景颜色
borderColor: string; // 表格边框颜色
}
};
};
};

13
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<string, DictionaryType> {
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<DictionaryType> {
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<string, DictionaryType> {
public static async fetchMultiple(codes: string[]): Promise<Map<string, DictionaryType>> {
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<string, DictionaryType>;
}
}
return {} as Map<string, DictionaryType>;
}
}

2
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);
}
}

13
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<string, EnumType> {
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<EnumType> {
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<string, EnumType> {
public static async fetchMultiple(types: string[]): Promise<Map<string, EnumType>> {
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<string, EnumType>;
}
}
return {} as Map<string, EnumType>;
}
}

7
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;
}
/**

1
io.sc.platform.core.frontend/template-project/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

79
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"
}
}

9
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"
}

9
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": "無關聯菜單路由"
}

9
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": "无关联菜单路由"
}

10
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,

152
io.sc.platform.core.frontend/template-project/src/views/likm/Form.vue

@ -6,11 +6,131 @@
<br />
<br />
<div class="flex justify-center">
<div class="w-[800px]">
<w-text-editor label="富文本组件" :required-if="true"></w-text-editor>
<br />
<div v-if="mode === 'criteria'" class="w-[800px]">
<w-query-builder
ref="queryBuilderRef"
v-model="objectModelValue"
mode="criteria"
:options="[
{
label: '姓名',
value: 'name',
operator: ['equals', 'contains'],
useComponent: {
type: 'w-text',
requiredIf: true,
},
},
{
label: '年龄',
value: 'age',
excludeOperator: ['contains', 'notContains'],
useComponent: {
type: 'w-number',
},
},
{
label: '性别',
value: 'sex',
useComponent: {
type: 'w-radio',
options: [
{ label: '男', value: '1' },
{ label: '女', value: '2' },
],
},
},
{
label: '学历',
value: 'xl',
useComponent: {
type: 'w-checkbox-group',
options: [
{ label: '博士', value: '1' },
{ label: '硕士', value: '2' },
{ label: '本科及以下', value: '3' },
],
},
},
{
label: '出生日期',
value: 'birthday',
useComponent: {
type: 'w-date',
},
},
]"
></w-query-builder>
</div>
<div v-else-if="mode === 'sql'" class="w-[800px]">
<w-query-builder
ref="queryBuilderRef"
v-model="string2ModelValue"
mode="sql"
:options="[
{
label: '姓名',
value: 'name',
operator: ['equals', 'contains'],
useComponent: {
type: 'w-text',
requiredIf: true,
},
},
{
label: '年龄',
value: 'age',
excludeOperator: ['contains', 'notContains'],
useComponent: {
type: 'w-number',
},
},
{
label: '性别',
value: 'sex',
useComponent: {
type: 'w-radio',
options: [
{ label: '男', value: '1' },
{ label: '女', value: '2' },
],
},
},
{
label: '学历',
value: 'xl',
useComponent: {
type: 'w-checkbox-group',
options: [
{ label: '博士', value: '1' },
{ label: '硕士', value: '2' },
{ label: '本科及以下', value: '3' },
],
},
},
{
label: '出生日期',
value: 'birthday',
useComponent: {
type: 'w-date',
},
},
]"
></w-query-builder>
</div>
<!-- <div class="pl-[20px]">自定义表格选择值: {{ arr1ModelValue }} <br /><br /><br /></div> -->
</div>
<br /><br />
<div class="pl-[20px]">模型值: {{ mode === 'criteria' ? objectModelValue : string2ModelValue }} <br /><br /></div>
<br /><br />
<div class="pl-[20px]">
<q-btn
label="切换模式"
@click="
() => {
mode = mode === 'criteria' ? 'sql' : 'criteria';
}
"
></q-btn>
</div>
<br />
<br />
@ -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 @@
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ref, reactive, computed } from 'vue';
import { Environment, Formater } from '@/platform';
const mode = ref('criteria');
const booleanModelValue = ref(false);
const string1ModelValue = ref('');
const string2ModelValue = ref('');
const string2ModelValue = ref(`name = '1' and age <> 22 and ( sex = '2' or xl NOT IN ('1','2') or ( not ( birthday = '2024-09-25' and name LIKE '%222%' ) ) )`);
const numberModelValue = ref(1);
const objectModelValue = ref(undefined);
const arr1ModelValue = ref([]);
const arr2ModelValue = ref([]);
const arr3ModelValue = ref([]);
const objectModelValue = ref({
operator: 'and',
criteria: [
{ fieldName: 'name', operator: 'contains', value: '张三' },
{ fieldName: 'age', operator: 'notEquals', value: 23 },
{
operator: 'or',
criteria: [
{ fieldName: 'sex', operator: 'equals', value: '2' },
{ fieldName: 'xl', operator: 'inSet', value: ['1', '2'] },
],
},
{ fieldName: 'birthday', operator: 'equals', value: '2024-09-20' },
],
});
const queryBuilderRef = ref();
const formRef = ref();
const submit = async () => {

26
io.sc.platform.core.frontend/template-project/src/views/likm/Grid.vue

@ -4,7 +4,31 @@
ref="gridRef"
title="示例列表"
:data-url="Environment.apiContextPath('/api/system/application')"
:toolbar-actions="['add', 'edit', 'query']"
db-click-operation="testAdd"
selected-mode="cell"
:cell-selected="true"
:toolbar-actions="[
'add',
{
extend: 'add',
name: 'testAdd',
click: (args) => {
const cell = args.grid.getSelectedCell();
console.info('cell=========', args);
},
},
[
'remove',
{
extend: 'edit',
name: 'testEdit',
click: (args) => {
console.info('testEdit======', args);
},
},
],
'query',
]"
:query-form-fields="[{ name: 'code', label: '编码', type: 'w-text' }]"
:columns="[
{ name: 'code', label: '编码', type: 'w-text' },

2
io.sc.platform.core.frontend/template-project/tsconfig.json

@ -14,7 +14,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

40
io.sc.platform.core.frontend/template-project/vuepress.client.ts

@ -0,0 +1,40 @@
import { onMounted } from 'vue';
import { defineClientConfig } from 'vuepress/client';
import 'platform-core/dist/css/platform-core.css';
export default defineClientConfig({
async enhance({ app, router, siteData }) {
if (!__VUEPRESS_SSR__) {
// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量
window.APP = {
configure: {
webContextPath: '/',
apiContextPaths: {
DEFAULT: 'http://localhost:8080/',
},
},
};
// 初始化 platform
const platform = await import('platform-core');
platform.installForVuePress(app);
// 初始化 vue-i18n
const vueI18n = await import('vue-i18n');
const i18n = vueI18n.createI18n({
legacy: false,
availableLocales: ['en', 'zh_CN', 'tw_CN'],
locale: 'zh_CN',
fallbackLocale: 'en',
missingWarn: false,
fallbackWarn: false,
});
app.use(i18n);
}
},
setup() {
onMounted(() => {
document.querySelector('#app');
});
},
});

61
io.sc.platform.core.frontend/template-project/vuepress.config.ts

@ -0,0 +1,61 @@
import { webpackBundler } from '@vuepress/bundler-webpack';
import { defaultTheme } from '@vuepress/theme-default';
import { defineUserConfig } from 'vuepress';
export default defineUserConfig({
bundler: webpackBundler({
// 自定义 webpack 配置
configureWebpack: (config, isServer, isBuild) => {
return {
module: {
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist/index.js 175:0-24
// Module not found: Error: Can't resolve './types' in '/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend/node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist'
// Did you mean 'types.js'?
// BREAKING CHANGE: The request './types' failed to resolve only because it was resolved as fully specified
// (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '*.mjs' file, or a '*.js' file where the package.json contains '"type": "module"').
// The extension in the request is mandatory for it to be fully specified.
rules: [
{
test: /\.js$/,
include: /[\/\\]@maxgraph[\/\\]core/,
resolve: {
fullySpecified: false,
},
},
],
},
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/platform-core/dist/platform-core.js 3:428-453
// Module not found: Error: Package path . is not exported from package /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core (see exports field in /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core/package.json)
// 同时解决 quasar 默认加载 /dist/quasar.server.prod.cjs 文件出现错误
resolve: {
// 以下配置使得在 node_modules 目录下的模块加载入口文件采用模块 package.json 的 exports 部分采用 import 配置加载优先
modules: ['node_modules'],
conditionNames: ['import'],
},
};
},
}),
// 网站根
base: '${base}',
// 默认主题
theme: defaultTheme(),
// 打包目录
dest: '${dest}',
// 缓存目录
cache: './.vuepress/.cache',
// 临时目录
temp: './.vuepress/.temp',
// 服务端口
port: 3000,
// public 目录
public: './public',
});

5
io.sc.platform.core.frontend/tsconfig.json

@ -17,10 +17,11 @@
"allowImportingTsExtensions": true /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */,
"noImplicitAny": false /* Enable error reporting for expressions and declarations with an implied 'any' type. */,
"moduleResolution": "node16" /* Specify how TypeScript looks up a file from a given module specifier. */,
"sourceMap": true /* Create source map files for emitted JavaScript files. */,
"sourceMap": false /* Create source map files for emitted JavaScript files. */,
"baseUrl": "." /* Specify the base directory to resolve non-relative module names. */,
"paths": {
/* Specify a set of entries that re-map imports to additional lookup locations. */ "@/*": ["src/*"]
/* Specify a set of entries that re-map imports to additional lookup locations. */
"@/*": ["src/*"]
}
}
}

2
io.sc.platform.core.frontend/util.template-generator.cjs

@ -94,6 +94,8 @@ cp(sourceDir + 'postcss.config.cjs', targetDir + 'postcss.config.cjs');
cp(sourceDir + 'tailwind.config.cjs', targetDir + 'tailwind.config.cjs');
cp(sourceDir + 'util-components-generator.cjs', targetDir + 'util-components-generator.cjs');
cp(sourceDir + 'util-frontend-register.cjs', targetDir + 'util-frontend-register.cjs');
cp(sourceDir + 'vuepress.client.ts', targetDir + 'vuepress.client.ts');
cp(sourceDir + 'vuepress.config.ts', targetDir + 'vuepress.config.ts');
cp(sourceDir + 'webpack.config.common.cjs', targetDir + 'webpack.config.common.cjs');
cp(sourceDir + 'webpack.config.mf.cjs', targetDir + 'webpack.config.mf.cjs');
cp(sourceDir + 'webpack.env.build.cjs', targetDir + 'webpack.env.build.cjs');

40
io.sc.platform.core.frontend/vuepress.client.ts

@ -0,0 +1,40 @@
import { onMounted } from 'vue';
import { defineClientConfig } from 'vuepress/client';
import 'platform-core/dist/css/platform-core.css';
export default defineClientConfig({
async enhance({ app, router, siteData }) {
if (!__VUEPRESS_SSR__) {
// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量
window.APP = {
configure: {
webContextPath: '/',
apiContextPaths: {
DEFAULT: 'http://localhost:8080/',
},
},
};
// 初始化 platform
const platform = await import('platform-core');
platform.installForVuePress(app);
// 初始化 vue-i18n
const vueI18n = await import('vue-i18n');
const i18n = vueI18n.createI18n({
legacy: false,
availableLocales: ['en', 'zh_CN', 'tw_CN'],
locale: 'zh_CN',
fallbackLocale: 'en',
missingWarn: false,
fallbackWarn: false,
});
app.use(i18n);
}
},
setup() {
onMounted(() => {
document.querySelector('#app');
});
},
});

61
io.sc.platform.core.frontend/vuepress.config.ts

@ -0,0 +1,61 @@
import { webpackBundler } from '@vuepress/bundler-webpack';
import { defaultTheme } from '@vuepress/theme-default';
import { defineUserConfig } from 'vuepress';
export default defineUserConfig({
bundler: webpackBundler({
// 自定义 webpack 配置
configureWebpack: (config, isServer, isBuild) => {
return {
module: {
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist/index.js 175:0-24
// Module not found: Error: Can't resolve './types' in '/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend/node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist'
// Did you mean 'types.js'?
// BREAKING CHANGE: The request './types' failed to resolve only because it was resolved as fully specified
// (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '*.mjs' file, or a '*.js' file where the package.json contains '"type": "module"').
// The extension in the request is mandatory for it to be fully specified.
rules: [
{
test: /\.js$/,
include: /[\/\\]@maxgraph[\/\\]core/,
resolve: {
fullySpecified: false,
},
},
],
},
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/platform-core/dist/platform-core.js 3:428-453
// Module not found: Error: Package path . is not exported from package /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core (see exports field in /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core/package.json)
// 同时解决 quasar 默认加载 /dist/quasar.server.prod.cjs 文件出现错误
resolve: {
// 以下配置使得在 node_modules 目录下的模块加载入口文件采用模块 package.json 的 exports 部分采用 import 配置加载优先
modules: ['node_modules'],
conditionNames: ['import'],
},
};
},
}),
// 网站根
base: '${base}',
// 默认主题
theme: defaultTheme(),
// 打包目录
dest: '${dest}',
// 缓存目录
cache: './.vuepress/.cache',
// 临时目录
temp: './.vuepress/.temp',
// 服务端口
port: 3000,
// public 目录
public: './public',
});

26
io.sc.platform.core.frontend/webpack.env.lib.cjs

@ -11,7 +11,7 @@ const config = merge(common, {
entry: {
'platform-core': './src/platform/index.ts',
},
devtool: 'source-map',
//devtool: 'source-map',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
@ -53,25 +53,25 @@ const config = merge(common, {
'@univerjs/sheets': '@univerjs/sheets',
'@univerjs/sheets-formula': '@univerjs/sheets-formula',
'@univerjs/sheets-ui': '@univerjs/sheets-ui',
'@univerjs/thread-comment':'@univerjs/thread-comment',
'@univerjs/thread-comment': '@univerjs/thread-comment',
'@univerjs/ui': '@univerjs/ui',
'@vueuse/core': '@vueuse/core',
'axios': 'axios',
'codemirror': 'codemirror',
'dayjs': 'dayjs',
'echarts': 'echarts',
'exceljs': 'exceljs',
axios: 'axios',
codemirror: 'codemirror',
dayjs: 'dayjs',
echarts: 'echarts',
exceljs: 'exceljs',
'file-saver': 'file-saver',
'luckyexcel': 'luckyexcel',
'mockjs': 'mockjs',
'pinia': 'pinia',
'quasar': 'quasar',
luckyexcel: 'luckyexcel',
mockjs: 'mockjs',
pinia: 'pinia',
quasar: 'quasar',
'svg-path-commander': 'svg-path-commander',
'vue': 'vue',
vue: 'vue',
'vue-dompurify-html': 'vue-dompurify-html',
'vue-i18n': 'vue-i18n',
'vue-router': 'vue-router',
'xml-formatter': 'xml-formatter'
'xml-formatter': 'xml-formatter',
},
],

5
io.sc.platform.developer.doc/.browserslistrc

@ -0,0 +1,5 @@
chrome >=89
edge >=88
firefox >=89
safari >=15
ios_saf >=15

15
io.sc.platform.developer.doc/.editorconfig

@ -0,0 +1,15 @@
#################################################################
# 强制对使用该基本代码的所有人实施一致的编码样式
#################################################################
# 顶级配置(即不集成父配置)
root = true
# 针对所有文件
[*]
charset = utf-8 # 字符集: utf-8
indent_size = 2 # 缩进大小: 2
indent_style = space # 缩进风格: 空格
end_of_line = lf # 行结束符: 换行符
insert_final_newline = true # 是否在文件的最后插入一个空行
trim_trailing_whitespace = true # 是否删除行尾的空格

32
io.sc.platform.developer.doc/.gitignore

@ -0,0 +1,32 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

0
io.sc.platform.developer.doc/.npmignore

13
io.sc.platform.developer.doc/.npmrc

@ -0,0 +1,13 @@
# npm 仓库地址, 在 npm install 时使用
registry=http://nexus.sc.io:8000/repository/npm-public/
# 用户邮箱
email=
# publish 时无需先进行 git 代码同步检查, 可避免 publish 时使用 --no-git-checks 选项
git-checks=false
# 注意: 以下 // 不是注释,不能去掉哦
# 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置
# _authToken 可通过以下命令获取
# curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin
//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.67c99588-56a6-3ce1-9bea-a9a6164f8090

3
io.sc.platform.developer.doc/README.adoc

@ -1,3 +0,0 @@
= 项目介绍

3
io.sc.platform.developer.doc/asciidoc/9999-appendix/tools/node_npm/node_npm.adoc

@ -27,7 +27,8 @@ export FNM_MULTISHELL_PATH="/Users/wangshaoping/Library/Caches/fnm_multishells/8
export FNM_DIR="/Users/wangshaoping/Library/Application Support/fnm" <1>
export FNM_LOGLEVEL="info"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
#export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_NODE_DIST_MIRROR="https://npmmirror.com/mirrors/node/"
autoload -U add-zsh-hook
_fnm_autoload_hook () {
if [[ -f .node-version || -f .nvmrc ]]; then

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

@ -0,0 +1,34 @@
{
"name": "io.sc.platform.developer.doc",
"version": "8.1.49",
"description": "",
"main": "index.js",
"scripts": {
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml && rm -rf .vuepress && rm -rf dist",
"sync": "platform sync",
"serve": "vuepress dev vuepress-src",
"build": "vuepress build vuepress-src && rm -rf dist/public/io.sc.platform.developer.doc && mv dist/public/site/ dist/public/io.sc.platform.developer.doc/",
"prod": "vuepress build vuepress-src && rm -rf dist/public/io.sc.platform.developer.doc && mv dist/public/site/ dist/public/io.sc.platform.developer.doc/"
},
"keywords": [],
"author": "",
"license": "ISC",
"engines": {
"node": ">=18.19.0",
"pnpm": ">=7"
},
"devDependencies": {
"sass": "1.79.4",
"sass-loader": "16.0.2",
"vue-loader": "17.4.2",
"@vuepress/bundler-webpack": "2.0.0-rc.15",
"@vuepress/theme-default": "2.0.0-rc.49",
"vuepress": "2.0.0-rc.15"
},
"dependencies": {
"platform-core": "8.1.391",
"quasar": "2.17.0",
"vue": "3.5.10",
"vue-i18n": "10.0.3"
}
}

5
io.sc.platform.developer.doc/public/hero.svg

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="green" class="bi bi-browser-edge" viewBox="0 0 16 16">
<path d="M9.482 9.341c-.069.062-.17.153-.17.309 0 .162.107.325.3.456.877.613 2.521.54 2.592.538h.002c.667 0 1.32-.18 1.894-.519A3.838 3.838 0 0 0 16 6.819c.018-1.316-.44-2.218-.666-2.664l-.04-.08C13.963 1.487 11.106 0 8 0A8 8 0 0 0 .473 5.29C1.488 4.048 3.183 3.262 5 3.262c2.83 0 5.01 1.885 5.01 4.797h-.004v.002c0 .338-.168.832-.487 1.244l.006-.006a.594.594 0 0 1-.043.041Z"/>
<path d="M.01 7.753a8.137 8.137 0 0 0 .753 3.641 8 8 0 0 0 6.495 4.564 5.21 5.21 0 0 1-.785-.377h-.01l-.12-.075a5.45 5.45 0 0 1-1.56-1.463A5.543 5.543 0 0 1 6.81 5.8l.01-.004.025-.012c.208-.098.62-.292 1.167-.285.129.001.257.012.384.033a4.037 4.037 0 0 0-.993-.698l-.01-.005C6.348 4.282 5.199 4.263 5 4.263c-2.44 0-4.824 1.634-4.99 3.49Zm10.263 7.912c.088-.027.177-.054.265-.084-.102.032-.204.06-.307.086l.042-.002Z"/>
<path d="M10.228 15.667a5.21 5.21 0 0 0 .303-.086l.082-.025a8.019 8.019 0 0 0 4.162-3.3.25.25 0 0 0-.331-.35c-.215.112-.436.21-.663.294a6.367 6.367 0 0 1-2.243.4c-2.957 0-5.532-2.031-5.532-4.644.002-.135.017-.268.046-.399a4.543 4.543 0 0 0-.46 5.898l.003.005c.315.441.707.821 1.158 1.121h.003l.144.09c.877.55 1.721 1.078 3.328.996Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

12
io.sc.platform.developer.doc/public/index.html

@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- <script src="./webjars/tailwindcss/3.4.5/tailwind.css.js"></script> -->
</head>
<body>
<div id="app"></div>
</body>
</html>

BIN
io.sc.platform.developer.doc/public/openpath.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

62
io.sc.platform.developer.doc/public/webjars/tailwindcss/3.4.5/tailwind.css.js

File diff suppressed because one or more lines are too long

5
io.sc.platform.developer.doc/src/main/resources/META-INF/platform/plugins/security.json

@ -1,5 +1,6 @@
{
"permitPatterns":[
"/help/io.sc.platform.developer.doc/**/*"
"permitPatterns": [
"/help/io.sc.platform.developer.doc/**/*",
"/io.sc.platform.developer.doc/**/*"
]
}

24
io.sc.platform.developer.doc/vuepress-src/getting-started/GettingStarted.md

@ -0,0 +1,24 @@
# 快速开始
<span>
<a class="route-link" href="/io.sc.platform.developer.doc/">
<img class="vp-site-logo" src="/io.sc.platform.developer.doc/logo.svg" alt="开发者帮助文档"/>
<span class="vp-site-name vp-hide-mobile" aria-hidden="true">开发者帮助文档</span>
</a>
</span>
```ts title=".vuepress/config.ts"
import { defaultTheme } from '@vuepress/theme-default'
import { defineUserConfig } from 'vuepress'
export default defineUserConfig({
title: '你好, VuePress',
theme: defaultTheme({
logo: 'https://vuejs.org/images/logo.png',
}),
})
```
VuePress 2 已经发布 :tada: !
<w-grid :auto-fetch-data="false"/>

33
io.sc.platform.developer.doc/vuepress-src/index.md

@ -0,0 +1,33 @@
---
home: true
description: 页面的描述
lang: zh-CN
heroText: 开发者帮助文档
tagline:
heroImage: /hero.svg
heroHeight: 48
date: 2024-09-27
navbar: true
actions:
- text: 系统演示
link: /zh/guide/introduction.html
type: secondary
- text: 前端
link: /zh/guide/introduction.html
type: secondary
- text: 后端
link: /zh/guide/introduction.html
type: secondary
features:
- title: 内部评级
details: 以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。
link: /zh/guide/introduction.html
- title: 智能风控
details: 享受 Vue 的开发体验,可以在 Markdown 中使用 Vue 组件,又可以使用 Vue 来开发自定义主题。
- title: 风险预警
details: VuePress 会为每个页面预渲染生成静态的 HTML,同时,每个页面被加载的时候,将作为 SPA 运行。
- title: 风险计量
details: VuePress 会为每个页面预渲染生成静态的 HTML,同时,每个页面被加载的时候,将作为 SPA 运行。
- title: 全面风险
details: VuePress 会为每个页面预渲染生成静态的 HTML,同时,每个页面被加载的时候,将作为 SPA 运行。
---

40
io.sc.platform.developer.doc/vuepress.client.ts

@ -0,0 +1,40 @@
import { onMounted } from 'vue';
import { defineClientConfig } from 'vuepress/client';
import 'platform-core/dist/css/platform-core.css';
export default defineClientConfig({
async enhance({ app, router, siteData }) {
if (!__VUEPRESS_SSR__) {
// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量
window.APP = {
configure: {
webContextPath: '/',
apiContextPaths: {
DEFAULT: 'http://localhost:8080/',
},
},
};
// 初始化 platform
const platform = await import('platform-core');
platform.installForVuePress(app);
// 初始化 vue-i18n
const vueI18n = await import('vue-i18n');
const i18n = vueI18n.createI18n({
legacy: false,
availableLocales: ['en', 'zh_CN', 'tw_CN'],
locale: 'zh_CN',
fallbackLocale: 'en',
missingWarn: false,
fallbackWarn: false,
});
app.use(i18n);
}
},
setup() {
onMounted(() => {
document.querySelector('#app');
});
},
});

61
io.sc.platform.developer.doc/vuepress.config.ts

@ -0,0 +1,61 @@
import { webpackBundler } from '@vuepress/bundler-webpack';
import { defaultTheme } from '@vuepress/theme-default';
import { defineUserConfig } from 'vuepress';
export default defineUserConfig({
bundler: webpackBundler({
// 自定义 webpack 配置
configureWebpack: (config, isServer, isBuild) => {
return {
module: {
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist/index.js 175:0-24
// Module not found: Error: Can't resolve './types' in '/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend/node_modules/.pnpm/@maxgraph+core@0.13.0/node_modules/@maxgraph/core/dist'
// Did you mean 'types.js'?
// BREAKING CHANGE: The request './types' failed to resolve only because it was resolved as fully specified
// (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '*.mjs' file, or a '*.js' file where the package.json contains '"type": "module"').
// The extension in the request is mandatory for it to be fully specified.
rules: [
{
test: /\.js$/,
include: /[\/\\]@maxgraph[\/\\]core/,
resolve: {
fullySpecified: false,
},
},
],
},
// 解决 @maxgraph/core 的问题, 避免出现以下错误:
// ERROR in ./node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/platform-core/dist/platform-core.js 3:428-453
// Module not found: Error: Package path . is not exported from package /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core (see exports field in /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.platform.core.frontend.doc/node_modules/.pnpm/platform-core@8.1.372_rglpzkkg4umhmrchez7aoyu2m4/node_modules/@maxgraph/core/package.json)
// 同时解决 quasar 默认加载 /dist/quasar.server.prod.cjs 文件出现错误
resolve: {
// 以下配置使得在 node_modules 目录下的模块加载入口文件采用模块 package.json 的 exports 部分采用 import 配置加载优先
modules: ['node_modules'],
conditionNames: ['import'],
},
};
},
}),
// 网站根
base: '/io.sc.platform.developer.doc/',
// 默认主题
theme: defaultTheme(),
// 打包目录
dest: 'dist/public/site/',
// 缓存目录
cache: './.vuepress/.cache',
// 临时目录
temp: './.vuepress/.temp',
// 服务端口
port: 3000,
// public 目录
public: './public',
});

24
io.sc.platform.developer.doc/vuepress.theme.ts

@ -0,0 +1,24 @@
export default {
// 网站标题(位于网页导航栏的左边)
navigatorTitle: "开发者帮助文档",
// 网站 Logo 图标
//logo: "/logo.svg",
// 是否开启切换颜色
colorModeSwitch: true,
// 默认主题配置
navbar: [
{
text: "首页",
link: "/",
},
{
text: "前端",
link: "/frontend",
},
{
text: "后端",
link: "/backend",
},
],
};

1
io.sc.platform.developer.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

2
io.sc.platform.developer.frontend/src/menus/menus.json

@ -20,7 +20,7 @@
/**/
{"type":"GROUP", "order":1000, "id":"menu.developer", "titleI18nKey":"menu.developer", "icon":"bi-command"},
/*/*/
{"type":"ROUTE", "order":100, "parentId":"menu.developer", "id":"menu.developer.help", "titleI18nKey":"menu.developer.help", "icon":"bi-question-circle", "routeName":"route.developer.help"},
{"type":"URL", "order":100, "parentId":"menu.developer", "id":"menu.developer.help", "titleI18nKey":"menu.developer.help", "icon":"bi-question-circle", "url":"/io.sc.platform.developer.doc/index.html", "urlOpenType": "NEW_WINDOW"},
/*/spring boot */
{"type":"GROUP", "order":300, "parentId":"menu.developer", "id":"menu.developer.springboot", "titleI18nKey":"menu.developer.springboot", "icon":"bi-grid"},
/*/spring boot /Spring Bean*/

18
io.sc.platform.developer.frontend/src/views/Help.vue

@ -1,16 +1,30 @@
<template>
<iframe ref="containerRef" :src="url" class="w-full" :style="{ 'min-height': containerHeightRef + 'px' }"></iframe>
<iframe ref="containerRef" :src="iframeUrl" class="w-full" :style="{ 'min-height': containerHeightRef + 'px' }"></iframe>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { useQuasar } from 'quasar';
import { Environment } from 'platform-core';
const url = Environment.apiContextPath('/help/io.sc.platform.developer.doc/index.html');
const gc = Environment.getConfigure();
const q = useQuasar();
const containerRef = ref<HTMLElement>();
const containerHeightRef = ref(0);
const iframeUrl = ref('_blank');
//
// alone: , web (: nginx, caddy )
// develop: , (: webpack)
// backend: , (: tomcat, undertow, jeety)
if (Environment.getFontendScenario() === 'develop') {
const url = Environment.apiContextPath('io.sc.platform.developer.doc/index.html');
console.log(url);
iframeUrl.value = url;
} else {
const url = Environment.getWebContextPath() + 'io.sc.platform.developer.doc/index.html';
console.log(url);
iframeUrl.value = url;
}
onMounted(() => {
if (containerRef.value) {

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

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

3
io.sc.platform.installer/src/main/java/io/sc/platform/installer/controller/InstallerWebController.java

@ -5,6 +5,7 @@ import io.sc.platform.core.service.ProgressableThreadService;
import io.sc.platform.core.service.RuntimeService;
import io.sc.platform.core.support.ProgressInfo;
import io.sc.platform.core.util.IpUtil;
import io.sc.platform.core.util.ObjectMapper4Json;
import io.sc.platform.installer.service.InstallerService;
import io.sc.platform.installer.support.InstallerProgressableThread;
import org.springframework.beans.factory.annotation.Autowired;
@ -40,6 +41,8 @@ public class InstallerWebController {
mv.addObject("license",runtimeService.getLicense());
mv.addObject("isRunningInWebContainer",Environment.getInstance().isRunningInWebContainer());
mv.addObject("serverIp", IpUtil.getLocalIp());
mv.addObject("jacksonObjectMapper", ObjectMapper4Json.getMapper());
mv.addObject("jdbcConnectionTemplateService", applicationContext.getBean("io.sc.platform.jdbc.service.impl.JdbcConnectionTemplateServiceImpl"));
return mv;
}else{
return new ModelAndView("redirect:/");

4
io.sc.platform.jdbc.liquibase/src/main/resources/templates/io/sc/platform/jdbc/liquibase/installer/installer.html

@ -14,7 +14,7 @@
<!-- 数据库类型 -->
<label for="databaseType" class="form-label pt-2" th:text="#{DatasourceInstallerItem.databaseType}">数据库类型</label>
<select id="databaseType" class="form-select form-select-sm" onchange="databaseTypeChanged()">
<option th:each="template : ${@jdbcConnectionTemplateService.getInstallerEnableTemplates()}" th:value="${template.type}" th:text="|${template.type} ${template.version}|"></option>
<option th:each="template : ${jdbcConnectionTemplateService.getInstallerEnableTemplates()}" th:value="${template.type}" th:text="|${template.type} ${template.version}|"></option>
</select>
<!-- JDBC URL -->
@ -76,7 +76,7 @@
</div>
<script type="text/javascript">
var jdbcConnectionTemplates =[(${@jacksonObjectMapper.writeValueAsString(@jdbcConnectionTemplateService.getTemplates())})];
var jdbcConnectionTemplates =[(${jacksonObjectMapper.writeValueAsString(jdbcConnectionTemplateService.getTemplates())})];
installer.register(new function(){
this.getConfiguration =function(){

1
io.sc.platform.lcdp.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

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

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

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

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.platform.mvc.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

92
io.sc.platform.mvc.frontend/package.json

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

2
io.sc.platform.mvc.frontend/tsconfig.json

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.platform.scheduler.manager.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

92
io.sc.platform.scheduler.manager.frontend/package.json

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

2
io.sc.platform.scheduler.manager.frontend/tsconfig.json

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.platform.system.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

82
io.sc.platform.system.frontend/package.json

@ -28,22 +28,25 @@
"@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",
"compression-webpack-plugin": "11.1.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",
@ -51,52 +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",
"compression-webpack-plugin": "11.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",
@ -105,14 +108,15 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"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"
}
}

4
io.sc.platform.system.frontend/src/views/menu/Menu.vue

@ -80,7 +80,7 @@
form: {
colsNum: 1,
fields: [
// { name: 'parent', label: $t('parent'), type: 'w-text' },
{ name: 'parent', label: $t('parent'), type: 'w-text', hidden: true },
{
name: 'type',
label: $t('type'),
@ -143,7 +143,7 @@
name: 'urlOpenType',
label: $t('system.menu.grid.entity.urlOpenType'),
type: 'w-select',
options: Options.enum(UrlOpenTypeEnum, false),
options: Options.enum(UrlOpenTypeEnum),
defaultValue: 'NEW_WINDOW',
showIf: (arg) => {
return arg.form.getFieldValue('type') === 'URL';

2
io.sc.platform.system.frontend/tsconfig.json

@ -10,7 +10,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

1
io.sc.standard.frontend/.gitignore

@ -26,6 +26,7 @@ coverage
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

92
io.sc.standard.frontend/package.json

@ -24,25 +24,29 @@
},
"devDependencies": {
"@babel/core": "7.25.2",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@babel/plugin-transform-class-properties": "7.25.4",
"@babel/plugin-transform-object-rest-spread": "7.24.7",
"@quasar/app-webpack": "4.0.0-beta.16",
"@babel/preset-env": "7.25.4",
"@babel/preset-typescript": "7.24.7",
"@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/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",
"compression-webpack-plugin": "11.1.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",
@ -50,41 +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",
"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",
"@vue/babel-plugin-jsx": "1.2.4",
"tailwindcss": "3.4.10",
"compression-webpack-plugin": "11.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",
"@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",
@ -93,28 +108,17 @@
"file-saver": "2.0.5",
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"node-sql-parser": "5.3.2",
"pinia": "2.2.2",
"platform-core": "8.1.358",
"quasar": "2.16.11",
"pinia-undo": "0.2.4",
"platform-core": "8.1.391",
"quasar": "2.17.0",
"svg-path-commander": "2.0.10",
"tailwindcss": "3.4.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",
"@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/ui": "0.2.14",
"pinia-undo": "0.2.4",
"xml-formatter": "3.6.3",
"@univerjs/thread-comment": "0.2.14",
"svg-path-commander": "2.0.10"
"vue-i18n": "10.0.3",
"vue-router": "4.4.5",
"xml-formatter": "3.6.3"
}
}

2
io.sc.standard.frontend/tsconfig.json

@ -9,7 +9,7 @@
"allowImportingTsExtensions": true,
"noImplicitAny": false,
"moduleResolution": "node16",
"sourceMap": true,
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": [

5
io.sc.website/.browserslistrc

@ -0,0 +1,5 @@
chrome >=89
edge >=88
firefox >=89
safari >=15
ios_saf >=15

15
io.sc.website/.editorconfig

@ -0,0 +1,15 @@
#################################################################
# 强制对使用该基本代码的所有人实施一致的编码样式
#################################################################
# 顶级配置(即不集成父配置)
root = true
# 针对所有文件
[*]
charset = utf-8 # 字符集: utf-8
indent_size = 2 # 缩进大小: 2
indent_style = space # 缩进风格: 空格
end_of_line = lf # 行结束符: 换行符
insert_final_newline = true # 是否在文件的最后插入一个空行
trim_trailing_whitespace = true # 是否删除行尾的空格

32
io.sc.website/.gitignore

@ -0,0 +1,32 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.vuepress
test-results/
playwright-report/

0
io.sc.website/.npmignore

13
io.sc.website/.npmrc

@ -0,0 +1,13 @@
# npm 仓库地址, 在 npm install 时使用
registry=http://nexus.sc.io:8000/repository/npm-public/
# 用户邮箱
email=
# publish 时无需先进行 git 代码同步检查, 可避免 publish 时使用 --no-git-checks 选项
git-checks=false
# 注意: 以下 // 不是注释,不能去掉哦
# 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置
# _authToken 可通过以下命令获取
# curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin
//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.67c99588-56a6-3ce1-9bea-a9a6164f8090

33
io.sc.website/package.json

@ -0,0 +1,33 @@
{
"name": "io.sc.website",
"version": "8.1.49",
"description": "",
"main": "index.js",
"scripts": {
"clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml && rm -rf .vuepress && rm -rf dist",
"sync": "platform sync",
"serve": "vuepress dev vuepress-src",
"build": "vuepress build vuepress-src",
"prod": "vuepress build vuepress-src"
},
"keywords": [],
"author": "",
"license": "ISC",
"engines": {
"node": ">=18.19.0",
"pnpm": ">=7"
},
"devDependencies": {
"sass": "1.79.4",
"sass-loader": "16.0.2",
"vue-loader": "17.4.2",
"platform-core": "8.1.385",
"@vuepress/bundler-webpack": "2.0.0-rc.15",
"@vuepress/theme-default": "2.0.0-rc.49",
"vuepress": "2.0.0-rc.15"
},
"dependencies": {
"vue": "3.5.10",
"platform-core": "8.1.391"
}
}

5
io.sc.website/public/favicon.svg

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="blue" class="bi bi-browser-edge" viewBox="0 0 16 16">
<path d="M9.482 9.341c-.069.062-.17.153-.17.309 0 .162.107.325.3.456.877.613 2.521.54 2.592.538h.002c.667 0 1.32-.18 1.894-.519A3.838 3.838 0 0 0 16 6.819c.018-1.316-.44-2.218-.666-2.664l-.04-.08C13.963 1.487 11.106 0 8 0A8 8 0 0 0 .473 5.29C1.488 4.048 3.183 3.262 5 3.262c2.83 0 5.01 1.885 5.01 4.797h-.004v.002c0 .338-.168.832-.487 1.244l.006-.006a.594.594 0 0 1-.043.041Z"/>
<path d="M.01 7.753a8.137 8.137 0 0 0 .753 3.641 8 8 0 0 0 6.495 4.564 5.21 5.21 0 0 1-.785-.377h-.01l-.12-.075a5.45 5.45 0 0 1-1.56-1.463A5.543 5.543 0 0 1 6.81 5.8l.01-.004.025-.012c.208-.098.62-.292 1.167-.285.129.001.257.012.384.033a4.037 4.037 0 0 0-.993-.698l-.01-.005C6.348 4.282 5.199 4.263 5 4.263c-2.44 0-4.824 1.634-4.99 3.49Zm10.263 7.912c.088-.027.177-.054.265-.084-.102.032-.204.06-.307.086l.042-.002Z"/>
<path d="M10.228 15.667a5.21 5.21 0 0 0 .303-.086l.082-.025a8.019 8.019 0 0 0 4.162-3.3.25.25 0 0 0-.331-.35c-.215.112-.436.21-.663.294a6.367 6.367 0 0 1-2.243.4c-2.957 0-5.532-2.031-5.532-4.644.002-.135.017-.268.046-.399a4.543 4.543 0 0 0-.46 5.898l.003.005c.315.441.707.821 1.158 1.121h.003l.144.09c.877.55 1.721 1.078 3.328.996Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Loading…
Cancel
Save