diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..b33d9d37 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# 所有文本文件的行结束符为: 换行符 +* text=auto \ No newline at end of file diff --git a/io.sc.engine.rule.frontend/package.json b/io.sc.engine.rule.frontend/package.json index cc90314c..ee15a41d 100644 --- a/io.sc.engine.rule.frontend/package.json +++ b/io.sc.engine.rule.frontend/package.json @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.312", + "platform-core": "8.1.320", "quasar": "2.15.4", "tailwindcss": "3.4.4", "vue": "3.4.31", @@ -113,4 +113,4 @@ "pinia-undo": "0.2.4", "xml-formatter": "3.6.3" } -} \ No newline at end of file +} diff --git a/io.sc.engine.rule.frontend/src/views/resources/Resources.vue b/io.sc.engine.rule.frontend/src/views/resources/Resources.vue index dd50ebd0..4508c599 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/Resources.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/Resources.vue @@ -345,7 +345,8 @@ }, }" @row-db-click=" - (e, row) => { + (args) => { + console.log(args); if (row.type !== 'FOLDER') { designerDialogRef.open(row); } diff --git a/io.sc.platform.core.frontend/.editorconfig b/io.sc.platform.core.frontend/.editorconfig index 2791f744..4bd609e2 100644 --- a/io.sc.platform.core.frontend/.editorconfig +++ b/io.sc.platform.core.frontend/.editorconfig @@ -10,5 +10,6 @@ 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 # 是否删除行尾的空格 diff --git a/io.sc.platform.core.frontend/.eslintrc.cjs b/io.sc.platform.core.frontend/.eslintrc.cjs index 82581f3d..f7fab5cc 100644 --- a/io.sc.platform.core.frontend/.eslintrc.cjs +++ b/io.sc.platform.core.frontend/.eslintrc.cjs @@ -1,37 +1,68 @@ module.exports = { - root: true, + // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy + // This option interrupts the configuration hierarchy at this file + // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) + root: true, - env: { - browser: true, - es2022: true, - "vue/setup-compiler-macros": true, - }, + env: { + browser: true, + es2022: true, + node: true, + 'vue/setup-compiler-macros': true, + }, - extends:[ - "eslint:recommended", - "plugin:vue/vue3-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - ], - - parser: "vue-eslint-parser", - parserOptions: { - ecmaVersion: 2022, - parser: "@typescript-eslint/parser", - sourceType: "module", - ecmaFeatures: { - jsx : false - } - }, + // Rules order is important, please avoid shuffling them + extends: [ + // Base ESLint recommended rules + 'eslint:recommended', + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage + // ESLint typescript rules + 'plugin:@typescript-eslint/recommended', + + // Vue ESLint recommended rules + // 'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention) + // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) + // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) + 'plugin:vue/vue3-recommended', + + // https://github.com/prettier/eslint-config-prettier#installation + // usage with Prettier, provided by 'eslint-config-prettier'. + 'plugin:prettier/recommended', // Recommended + ], - rules:{ - 'semi':[1], - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-explicit-any': 'off', - "@typescript-eslint/no-unused-vars": 'off', - "@typescript-eslint/no-this-alias": 'off', - 'vue/multi-word-component-names': 'off', /* 禁用 vue 组件名称检查规则 */ - 'no-prototype-builtins': 'off', - 'prefer-rest-params': 'off', + parser: 'vue-eslint-parser', + parserOptions: { + ecmaVersion: 2022, + parser: '@typescript-eslint/parser', + ecmaFeatures: { + jsx: false, }, + }, + + plugins: [ + // required to apply rules which need type information + '@typescript-eslint', + + // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-files + // required to lint *.vue files + 'vue', + + // https://github.com/typescript-eslint/typescript-eslint/issues/389#issuecomment-509292674 + // Prettier has not been included as plugin to avoid performance impact + // add it as an extension for your IDE + ], + + rules: { + semi: [1], + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-this-alias': 'off', + 'vue/multi-word-component-names': 'off' /* 禁用 vue 组件名称检查规则 */, + 'no-prototype-builtins': 'off', + 'prefer-rest-params': 'off', + }, }; diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json index 1dd99a5c..4328c4c8 100644 --- a/io.sc.platform.core.frontend/package.json +++ b/io.sc.platform.core.frontend/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.1.317", + "version": "8.1.321", "description": "前端核心包,用于快速构建前端的脚手架", "//main": "库的主文件", "main": "dist/platform-core.js", @@ -52,93 +52,94 @@ "no-git-checks": true }, "devDependencies": { - "@babel/core": "7.24.7", - "@babel/preset-env": "7.24.7", + "@babel/core": "7.25.2", + "@babel/preset-env": "7.25.4", "@babel/preset-typescript": "7.24.7", - "@babel/plugin-transform-class-properties": "7.24.7", + "@babel/plugin-transform-class-properties": "7.25.4", "@babel/plugin-transform-object-rest-spread": "7.24.7", - "@quasar/app-webpack": "3.13.2", + "@quasar/app-webpack": "4.0.0-beta.16", "@quasar/cli": "2.4.1", "@types/mockjs": "1.0.10", - "@types/node": "20.14.10", - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@vue/compiler-sfc": "3.4.31", + "@types/node": "22.5.4", + "@typescript-eslint/eslint-plugin": "8.5.0", + "@typescript-eslint/parser": "8.5.0", + "@vue/compiler-sfc": "3.5.3", "@webpack-cli/serve": "2.0.5", - "autoprefixer": "10.4.19", + "autoprefixer": "10.4.20", "babel-loader": "9.1.3", "clean-webpack-plugin": "4.0.0", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", "css-loader": "7.1.2", - "eslint": "8.56.0", + "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", - "eslint-plugin-prettier": "5.1.3", - "eslint-plugin-vue": "9.27.0", + "eslint-plugin-prettier": "5.2.1", + "eslint-plugin-vue": "9.28.0", "eslint-webpack-plugin": "4.2.0", "html-webpack-plugin": "5.6.0", "json5": "2.2.3", - "mini-css-extract-plugin": "2.9.0", + "mini-css-extract-plugin": "2.9.1", "nodemon": "3.1.4", - "postcss": "8.4.39", + "postcss": "8.4.45", "postcss-import": "16.1.0", "postcss-loader": "8.1.1", - "postcss-preset-env": "9.6.0", - "prettier": "3.3.2", - "sass": "1.77.6", - "sass-loader": "14.2.1", - "typescript": "5.5.3", + "postcss-preset-env": "10.0.3", + "prettier": "3.3.3", + "sass": "1.78.0", + "sass-loader": "16.0.1", + "typescript": "5.5.4", "vue-loader": "17.4.2", - "webpack": "5.92.1", + "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", - "webpack-dev-server": "5.0.4", + "webpack-dev-server": "5.1.0", "webpack-merge": "6.0.1", - "@vue/babel-plugin-jsx": "1.2.2" + "@vue/babel-plugin-jsx": "1.2.4" }, "dependencies": { - "@codemirror/autocomplete": "6.17.0", - "@codemirror/commands": "6.6.0", + "@codemirror/autocomplete": "6.18.0", + "@codemirror/commands": "6.6.1", "@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.0", + "@codemirror/lang-sql": "6.7.1", "@codemirror/lang-xml": "6.1.0", "@codemirror/language": "6.10.2", "@codemirror/search": "6.5.6", "@codemirror/state": "6.4.1", - "@codemirror/view": "6.28.4", + "@codemirror/view": "6.33.0", "@maxgraph/core": "0.13.0", "@quasar/extras": "1.16.12", - "@vueuse/core": "10.11.0", - "axios": "1.7.2", + "@vueuse/core": "11.0.3", + "axios": "1.7.7", "codemirror": "6.0.1", - "dayjs": "1.11.11", + "dayjs": "1.11.13", "echarts": "5.5.1", "exceljs": "4.4.0", "file-saver": "2.0.5", "luckyexcel": "1.0.1", "mockjs": "1.1.0", - "pinia": "2.1.7", - "quasar": "2.15.4", + "pinia": "2.2.2", + "quasar": "2.16.11", "svg-path-commander": "2.0.10", - "tailwindcss": "3.4.4", - "vue": "3.4.31", + "tailwindcss": "3.4.10", + "vue": "3.4.38", "vue-dompurify-html": "5.1.0", - "vue-i18n": "9.13.1", - "vue-router": "4.4.0", + "vue-i18n": "10.0.0", + "vue-router": "4.4.3", "xml-formatter": "3.6.3", - "@univerjs/core": "0.2.0", - "@univerjs/design": "0.2.0", - "@univerjs/docs": "0.2.0", - "@univerjs/docs-ui": "0.2.0", - "@univerjs/engine-formula": "0.2.0", - "@univerjs/engine-render": "0.2.0", - "@univerjs/facade": "0.2.0", - "@univerjs/sheets": "0.2.0", - "@univerjs/sheets-formula": "0.2.0", - "@univerjs/sheets-ui": "0.2.0", - "@univerjs/ui": "0.2.0" + "@univerjs/core": "0.2.12", + "@univerjs/design": "0.2.12", + "@univerjs/docs": "0.2.12", + "@univerjs/docs-ui": "0.2.12", + "@univerjs/engine-formula": "0.2.12", + "@univerjs/engine-render": "0.2.12", + "@univerjs/facade": "0.2.12", + "@univerjs/sheets": "0.2.12", + "@univerjs/sheets-formula": "0.2.12", + "@univerjs/sheets-ui": "0.2.12", + "@univerjs/thread-comment": "0.2.12", + "@univerjs/ui": "0.2.12" } } diff --git a/io.sc.platform.core.frontend/public/images/point.gif b/io.sc.platform.core.frontend/public/images/point.gif deleted file mode 100644 index 9074c395..00000000 Binary files a/io.sc.platform.core.frontend/public/images/point.gif and /dev/null differ diff --git a/io.sc.platform.core.frontend/public/index.html b/io.sc.platform.core.frontend/public/index.html index c3b9270d..d1c1f7a0 100644 --- a/io.sc.platform.core.frontend/public/index.html +++ b/io.sc.platform.core.frontend/public/index.html @@ -29,27 +29,34 @@ diff --git a/io.sc.platform.core.frontend/src/platform/components/graph/PlatformGraph.ts b/io.sc.platform.core.frontend/src/platform/components/graph/PlatformGraph.ts index de9921ca..b373e2b1 100644 --- a/io.sc.platform.core.frontend/src/platform/components/graph/PlatformGraph.ts +++ b/io.sc.platform.core.frontend/src/platform/components/graph/PlatformGraph.ts @@ -1,5 +1,19 @@ import type { GraphPluginConstructor } from '@maxgraph/core'; -import { constants, Client, Graph, Point, Cell, Geometry, CellState, ConnectionConstraint, ModelXmlSerializer, styleUtils, eventUtils } from '@maxgraph/core'; +import { + constants, + Client, + Graph, + Point, + Cell, + Geometry, + ImageBox, + CellState, + ConnectionConstraint, + ModelXmlSerializer, + styleUtils, + eventUtils, + xmlUtils, +} from '@maxgraph/core'; import { CellEditorHandler, @@ -13,6 +27,7 @@ import { } from '@maxgraph/core'; // 默认插件 import { + PlatformConstraintHandler, PlatformDragAndDropHandler, PlatformEdgeDefineHandler, PlatformKeyBindHandler, @@ -38,6 +53,7 @@ const plugins: GraphPluginConstructor[] = [ SelectionCellsHandler, SelectionHandler, + PlatformConstraintHandler, PlatformDragAndDropHandler, PlatformEdgeDefineHandler, PlatformKeyBindHandler, @@ -52,9 +68,6 @@ class PlatformGraph extends Graph { this.setConnectable(true); this.setPanning(true); this.setHtmlLabels(true); - // this.isCellEditable = function (cell) { - // return !cell.isEdge(); - // }; // 禁止节点直接连接 const connectionHandler: ConnectionHandler = this.getPlugin('ConnectionHandler'); @@ -100,32 +113,29 @@ class PlatformGraph extends Graph { convertValueToString(cell) { if (cell.isVertex()) { const dom = cell.value; - const type = dom.nodeName.toLowerCase(); + const type = dom.nodeName; const vertexDefineHandler: PlatformVertexDefineHandler = this.getPlugin('PlatformVertexDefineHandler'); if (vertexDefineHandler) { const value = vertexDefineHandler.getValue(type, dom); return vertexDefineHandler.getLabel(type, value); } + } else if (cell.isEdge()) { + const dom = cell.value; + const type = dom.nodeName; + const edgeDefineHandler: PlatformEdgeDefineHandler = this.getPlugin('PlatformEdgeDefineHandler'); + if (edgeDefineHandler) { + const value = edgeDefineHandler.getValue(type, dom); + return edgeDefineHandler.getLabel(type, value); + } + } else { + return null; } - return null; } createEdge(parent = null, id, value, source = null, target = null, style = {}) { - const sourceCell: Cell = source; - const targetCell: Cell = target; - const sourceType = sourceCell.value.nodeName.toLowerCase(); - const targetType = targetCell.value.nodeName.toLowerCase(); - - const ddgeDefineHandler: PlatformEdgeDefineHandler = this.getPlugin('PlatformEdgeDefineHandler'); - if (ddgeDefineHandler) { - const type = ddgeDefineHandler.getType(sourceType, targetType); - const dom = document.createElement(type); - dom.setAttribute('wsp', 'wsp'); - const edge = new Cell(dom, new Geometry(), style); - edge.setId(id); - edge.setEdge(true); - edge.geometry.relative = true; - return edge; + const edgeDefineHandler: PlatformEdgeDefineHandler = this.getPlugin('PlatformEdgeDefineHandler'); + if (edgeDefineHandler) { + return edgeDefineHandler.createEdge(parent, id, value, source, target, style); } } diff --git a/io.sc.platform.core.frontend/src/platform/components/graph/WGraph.vue b/io.sc.platform.core.frontend/src/platform/components/graph/WGraph.vue index e91b48e7..6d7d8b8e 100644 --- a/io.sc.platform.core.frontend/src/platform/components/graph/WGraph.vue +++ b/io.sc.platform.core.frontend/src/platform/components/graph/WGraph.vue @@ -1,7 +1,7 @@ @@ -82,11 +97,11 @@ const testGrid = { ], 'separator', ], - queryFormFields: [ - { label: '菜单名称', name: 'name', type: 'w-password' }, - { label: '菜单类型', name: 'userName', type: 'select' }, - { label: '是否可用', name: 'enable', type: 'select' }, - ], + // queryFormFields: [ + // { label: '菜单名称', name: 'name', type: 'w-password' }, + // { label: '菜单类型', name: 'userName', type: 'select' }, + // { label: '是否可用', name: 'enable', type: 'select' }, + // ], tableColumns: [ { name: 'name', diff --git a/io.sc.platform.core.frontend/template-project/src/views/testcase/maxgraph/Maxgraph.vue b/io.sc.platform.core.frontend/template-project/src/views/testcase/maxgraph/Maxgraph.vue index b6c43369..7134c7d4 100644 --- a/io.sc.platform.core.frontend/template-project/src/views/testcase/maxgraph/Maxgraph.vue +++ b/io.sc.platform.core.frontend/template-project/src/views/testcase/maxgraph/Maxgraph.vue @@ -1,37 +1,199 @@ diff --git a/io.sc.platform.core.frontend/template-project/webpack.config.mf.cjs b/io.sc.platform.core.frontend/template-project/webpack.config.mf.cjs index a1819edc..248aa8f4 100644 --- a/io.sc.platform.core.frontend/template-project/webpack.config.mf.cjs +++ b/io.sc.platform.core.frontend/template-project/webpack.config.mf.cjs @@ -61,18 +61,19 @@ module.exports = { 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, - "xml-formatter": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/core": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/design": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/docs": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/docs-ui": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/engine-formula": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/engine-render": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/facade": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets-formula": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets-ui": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/ui": { requiredVersion: deps['vue-router'], singleton: true } + "xml-formatter": { requiredVersion: deps['xml-formatter'], singleton: true }, + "@univerjs/core": { requiredVersion: deps['@univerjs/core'], singleton: true }, + "@univerjs/design": { requiredVersion: deps['@univerjs/design'], singleton: true }, + "@univerjs/docs": { requiredVersion: deps['@univerjs/docs'], singleton: true }, + "@univerjs/docs-ui": { requiredVersion: deps['@univerjs/docs-ui'], singleton: true }, + "@univerjs/engine-formula": { requiredVersion: deps['@univerjs/engine-formula'], singleton: true }, + "@univerjs/engine-render": { requiredVersion: deps['@univerjs/engine-render'], singleton: true }, + "@univerjs/facade": { requiredVersion: deps['@univerjs/facade'], singleton: true }, + "@univerjs/sheets": { requiredVersion: deps['@univerjs/sheets'], singleton: true }, + "@univerjs/sheets-formula": { requiredVersion: deps['@univerjs/sheets-formula'], singleton: true }, + "@univerjs/sheets-ui": { requiredVersion: deps['@univerjs/sheets-ui'], singleton: true }, + "@univerjs/thread-comment": { requiredVersion: deps['@univerjs/thread-comment'], singleton: true }, + "@univerjs/ui": { requiredVersion: deps['@univerjs/ui'], singleton: true } } }), ] diff --git a/io.sc.platform.core.frontend/webpack.config.mf.cjs b/io.sc.platform.core.frontend/webpack.config.mf.cjs index a1819edc..248aa8f4 100644 --- a/io.sc.platform.core.frontend/webpack.config.mf.cjs +++ b/io.sc.platform.core.frontend/webpack.config.mf.cjs @@ -61,18 +61,19 @@ module.exports = { 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, - "xml-formatter": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/core": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/design": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/docs": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/docs-ui": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/engine-formula": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/engine-render": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/facade": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets-formula": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/sheets-ui": { requiredVersion: deps['vue-router'], singleton: true }, - "@univerjs/ui": { requiredVersion: deps['vue-router'], singleton: true } + "xml-formatter": { requiredVersion: deps['xml-formatter'], singleton: true }, + "@univerjs/core": { requiredVersion: deps['@univerjs/core'], singleton: true }, + "@univerjs/design": { requiredVersion: deps['@univerjs/design'], singleton: true }, + "@univerjs/docs": { requiredVersion: deps['@univerjs/docs'], singleton: true }, + "@univerjs/docs-ui": { requiredVersion: deps['@univerjs/docs-ui'], singleton: true }, + "@univerjs/engine-formula": { requiredVersion: deps['@univerjs/engine-formula'], singleton: true }, + "@univerjs/engine-render": { requiredVersion: deps['@univerjs/engine-render'], singleton: true }, + "@univerjs/facade": { requiredVersion: deps['@univerjs/facade'], singleton: true }, + "@univerjs/sheets": { requiredVersion: deps['@univerjs/sheets'], singleton: true }, + "@univerjs/sheets-formula": { requiredVersion: deps['@univerjs/sheets-formula'], singleton: true }, + "@univerjs/sheets-ui": { requiredVersion: deps['@univerjs/sheets-ui'], singleton: true }, + "@univerjs/thread-comment": { requiredVersion: deps['@univerjs/thread-comment'], singleton: true }, + "@univerjs/ui": { requiredVersion: deps['@univerjs/ui'], singleton: true } } }), ] diff --git a/io.sc.platform.core.frontend/webpack.env.lib.cjs b/io.sc.platform.core.frontend/webpack.env.lib.cjs index 0613fe21..cdd02b83 100644 --- a/io.sc.platform.core.frontend/webpack.env.lib.cjs +++ b/io.sc.platform.core.frontend/webpack.env.lib.cjs @@ -71,6 +71,7 @@ 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/ui': '@univerjs/ui' } ],