Преглед изворни кода

feat: graph selection, detailing various libraries suitable for drawing and manipulating topology graphs in frontend development.

zhanghaijun пре 1 година
родитељ
комит
5454a8579c

+ 1 - 1
.env.development

@@ -1,7 +1,7 @@
 # 【开发】环境变量
 
 # 网站地址前缀
-VITE_BASE_URL = /
+VITE_BASE_URL = ./
 
 # API 地址前缀
 VITE_API_URL = /api

+ 1 - 1
.env.mock

@@ -1,7 +1,7 @@
 # 【生产】环境变量
 
 # 网站地址前缀
-VITE_BASE_URL = /
+VITE_BASE_URL = ./
 
 # API 地址前缀
 VITE_API_URL = https://m1.apifoxmock.com/m1/3323228-2823297-default

+ 1 - 1
.env.production

@@ -1,7 +1,7 @@
 # 【生产】环境变量
 
 # 网站地址前缀
-VITE_BASE_URL = /
+VITE_BASE_URL = ./
 
 # API 地址前缀
 VITE_API_URL = /api

+ 1 - 1
.env.test

@@ -1,7 +1,7 @@
 # 【生产】环境变量
 
 # 网站地址前缀
-VITE_BASE_URL = /
+VITE_BASE_URL = ./
 
 # API 地址前缀
 VITE_API_URL = /api

.vscode/dialog..code-snippets → .vscode/dialog.code-snippets


+ 43 - 2
.vscode/settings.json

@@ -1,6 +1,47 @@
 {
   "volar.inlayHints.eventArgumentInInlineHandlers": true,
   "i18n-ally.localesPaths": ["src/locales", "src/locales/langs"],
-  "editor.formatOnSave": true, // 启用保存时自动格式化
-  "editor.defaultFormatter": "esbenp.prettier-vscode" // 设置默认格式化工具为 Prettier
+  // Disable the default formatter, use eslint instead
+  "prettier.enable": false,
+  "editor.formatOnSave": false,
+  // Auto fix
+  "editor.codeActionsOnSave": {
+    "source.fixAll": "explicit",
+    "source.fixAll.eslint": "explicit",
+    "source.organizeImports": "never"
+  },
+  // 默认格式化工具选择prettier
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+  "[json]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[vue]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[typescript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  // 配置语言的文件关联
+  "files.encoding": "utf8",
+  "files.associations": {},
+  "i18n-ally.defaultLocale": "zh",
+  "css.customData": [".vscode/tailwindcss.json"],
+  "files.exclude": {
+    "**/.DS_Store": true,
+    "**/.git": true,
+    "**/node_modules": true,
+    "**/src-tauri": true
+  },
+  // Enable file nesting
+  "explorer.fileNesting.enabled": true,
+  "explorer.fileNesting.patterns": {
+    "README.md": "*.md",
+    ".env": ".env.*",
+    "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,CNAME,.npmrc,.browserslistrc,.nvmrc,.node-version",
+    "eslint.config.mjs": ".eslintignore,.prettierrc,.prettierignore,.stylelintignore,commitlint.*,prettier.*,stylelint.*,.eslintrc-auto-import.*,.release*,.editorconfig,.stylelintrc.*,.auto-import.json"
+  },
+  "cSpell.words": ["unplugin"]
 }

+ 15 - 0
.vscode/tailwindcss.json

@@ -0,0 +1,15 @@
+{
+  "version": 1.1,
+  "atDirectives": [
+    {
+      "name": "@apply",
+      "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS.",
+      "references": [
+        {
+          "name": "Tailwind Documentation",
+          "url": "https://tailwindcss.com/docs/functions-and-directives#apply"
+        }
+      ]
+    }
+  ]
+}

+ 23 - 0
.vscode/vue3.code-snippets

@@ -0,0 +1,23 @@
+{
+  "Uni-Plus Vue3 SFC": {
+    "scope": "vue",
+    "prefix": "vue3",
+    "description": "vue3 的 文件模板",
+    "body": [
+      "<!--",
+      "@description: $1",
+      "@creationTime: ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}",
+      "-->\n",
+      "<template>",
+      "  <view>$3</view>",
+      "</template>\n",
+      "<script lang=\"ts\" setup>",
+      "defineOptions({ name: '$1' })",
+      "/* ------------------------ 导入 与 引用 ----------------------------------- */",
+      "/* ------------------------ 函数 与 方法 ----------------------------------- */",
+      "/* ------------------------- 生命周期 -------------------------------------- */",
+      "</script>\n",
+      "<style lang=\"scss\" scoped></style>\n"
+    ]
+  }
+}

+ 0 - 243
README.zh-CN.md

@@ -1,243 +0,0 @@
-## 简介
-
-mldong-ant-design基于art-design-pro的快速开发框架前端工程
-
-## 特性
-
-- **最新技术栈**:使用 Vue3/vite 等前端前沿技术开发
-- **TypeScript**:应用程序级 JavaScript 的语言
-- **主题**:提供多套主题色彩,可配置自定义主题
-- **国际化**:内置完善的国际化方案
-- **权限**:内置完善的动态路由权限生成方案
-
-## 演示地址(apifox云mock版)
-
-- [演示地址-mock版](https://www.mldong.com/?nav=onlinedemo-8)
-
-测试账号: admin/123456
-
-## 安装使用
-
-1. 获取项目代码
-
-```bash
-git clone https://gitee.com/mldong/mldong-art-design.git
-```
-
-2. 安装依赖
-
-```bash
-cd mldong-art-design
-
-
-pnpm install
-```
-
-- 修改代理地址vite.config.mts
-
-```ts
-return defineConfig({
-    define: {
-      __APP_VERSION__: JSON.stringify(VITE_VERSION)
-    },
-    base: VITE_BASE_URL,
-    server: {
-      port: parseInt(VITE_PORT),
-      proxy: {
-        '/api': {
-          target: 'https://apifox-plus.mldong.com/m1/3323228-2823297-default',
-          changeOrigin: true,
-          rewrite: (path) => path.replace(/^\/api/, '')
-        }
-      },
-      host: true
-    },
-```
-
-- 运行
-
-```bash
-pnpm dev
-```
-
-4. 打包
-
-```bash
-pnpm build
-```
-
-## 相关项目
-
-- [配套后端-java版](https://gitee.com/mldong/mldong)
-- [配套后端-python-flask版](https://gitee.com/mldong666/mldong-python)
-- [配套后端-nodejs版](https://gitee.com/mldong/mldong-koa)
-- [配套后端-GoLang版](https://gitee.com/mldong/mldong-goframe)
-- [配套后端-python-fastapi版](https://gitee.com/mldong/mldong-fastapi)
-- [vben5文档](https://doc.mldong.com/mldong/front-pro/pro-explain.html/)
-
-* 第一章·基础篇
-  - [环境准备](https://www.bilibili.com/cheese/play/ep1893365)
-  - [体验一下](https://www.bilibili.com/cheese/play/ep1893366)
-  - [apifox简单介绍](https://www.bilibili.com/cheese/play/ep1893367)
-  - [替换接口地址](https://www.bilibili.com/cheese/play/ep1893368)
-  - [角色编码返回处理](https://www.bilibili.com/cheese/play/ep1893369)
-  - [关于代码提交](https://www.bilibili.com/cheese/play/ep1893370)
-  - [更换真实接口遇到的问题](https://www.bilibili.com/cheese/play/ep1893371)
-  - [尝试添加一个页面](https://www.bilibili.com/cheese/play/ep1893372)
-  - [路由模块重构·文件拆分](https://www.bilibili.com/cheese/play/ep1893373)
-  - [路由模块重构·自动导入](https://www.bilibili.com/cheese/play/ep1893374)
-* 第二章·权限管理
-  - [前端控制模式·初探](https://www.bilibili.com/cheese/play/ep1893378)
-  - [前端控制模式·复现bug](https://www.bilibili.com/cheese/play/ep1893380)
-  - [权限管理·后端控制模式·初探](https://www.bilibili.com/cheese/play/ep1893381)
-  - [后端控制模式·权限码·自定义指令](https://www.bilibili.com/cheese/play/ep1893382)
-  - [后端控制模式·权限指令源码解读](https://www.bilibili.com/cheese/play/ep1893383)
-  - [hasAuth方法·初探](https://www.bilibili.com/cheese/play/ep1893394)
-  - [hasAuth方法·源码解读](https://www.bilibili.com/cheese/play/ep1893395)
-  - [获取用户权限码接口联调](https://www.bilibili.com/cheese/play/ep1893396)
-  - [优化·增加超管标识判断](https://www.bilibili.com/cheese/play/ep1893397)
-  - [v-roles指令](https://www.bilibili.com/cheese/play/ep1893873)
-* 第三章·打包发布
-  - [打包发布·初探](https://www.bilibili.com/cheese/play/ep1893906)
-  - [打包发布·build](https://www.bilibili.com/cheese/play/ep1893907)
-  - [打包发布·处理打包报错问题](https://www.bilibili.com/cheese/play/ep1893908)
-  - [打包发布·云效持续集成](https://www.bilibili.com/cheese/play/ep1893930)
-* 第四章·ArtTable表格组件
-  - [表格组件·初探](https://www.bilibili.com/cheese/play/ep1894016)
-  - [表格组件·分页参数](https://www.bilibili.com/cheese/play/ep1894017)
-  - [表格组件·响应数据适配器](https://www.bilibili.com/cheese/play/ep1894019)
-  - [表格组件·数据转换函数](https://www.bilibili.com/cheese/play/ep1894020)
-  - [表格组件·formatter格式化列](https://www.bilibili.com/cheese/play/ep1894021)
-  - [表格组件·自定义列模板](https://www.bilibili.com/cheese/play/ep1894022)
-  - [自定义列ApiDict回显组件·初探](https://www.bilibili.com/cheese/play/ep1894790)
-  - [自定义列ApiDict回显组件·实现请求逻辑](https://www.bilibili.com/cheese/play/ep1894791)
-  - [自定义列ApiDict回显组件·优化](https://www.bilibili.com/cheese/play/ep1894792)
-  - [自定义列ApiDict回显组件·增加初始化所有](https://www.bilibili.com/cheese/play/ep1894794)
-  - [番外篇·更新项目代码](https://www.bilibili.com/cheese/play/ep1894795)
-  - [番外篇·验证更新的代码](https://www.bilibili.com/cheese/play/ep1894796)
-  - [番外篇·再次更新项目代码](https://www.bilibili.com/cheese/play/ep1894798)
-  - [自定义列ApiDict回显组件·调用接口初始化](https://www.bilibili.com/cheese/play/ep1894799)
-  - [自定义列ApiDict回显组件·使用Tag渲染](https://www.bilibili.com/cheese/play/ep1894954)
-  - [自定义列ApiDict回显组件·使用Tag渲染多值优化](https://www.bilibili.com/cheese/play/ep1894955)
-  - [自定义列ApiDict回显组件·Tag主题色实现](https://www.bilibili.com/cheese/play/ep1897278)
-  - [自定义列ApiDict回显组件·Tag增加颜色配置项](https://www.bilibili.com/cheese/play/ep1897279)
-  - [自定义列ApiDict回显组件·重构Tag增加颜色配置项](https://www.bilibili.com/cheese/play/ep1897285)
-  - [自定义列ApiDict回显组件·优化代码](https://www.bilibili.com/cheese/play/ep1897280)
-  - [自定义列ApiDict回显组件·新增预设颜色列表配置项](https://www.bilibili.com/cheese/play/ep1897284)
-  - [自定义列ApiDict回显组件·AI生成预设颜色列表](https://www.bilibili.com/cheese/play/ep1897286)
-  - [自定义列ApiDict回显组件·修复useColorList无效](https://www.bilibili.com/cheese/play/ep1897287)
-  - [自定义列ApiDict回显组件·使用接口中的颜色配置](https://www.bilibili.com/cheese/play/ep1897289)
-  - [自定义列ApiDict回显组件·重构类型定义](https://www.bilibili.com/cheese/play/ep1899739)
-  - [自定义列回显组件优化·初探](https://www.bilibili.com/cheese/play/ep1899741)
-  - [自定义列回显组件优化·引入componentMap机制](https://www.bilibili.com/cheese/play/ep1899742)
-  - [自定义列回显组件优化·新增管理componentMap方法](https://www.bilibili.com/cheese/play/ep1899743)
-  - [自定义列回显组件优化·自动注册](https://www.bilibili.com/cheese/play/ep1899744)
-  - [自定义列新增component和componentProps配置](https://www.bilibili.com/cheese/play/ep1899745)
-  - [自定义列回显组件·终](https://www.bilibili.com/cheese/play/ep1899746)
-  - [搜索表单·初探](https://www.bilibili.com/cheese/play/ep1905465)
-  - [搜索表单·常用控件](https://www.bilibili.com/cheese/play/ep1905466)
-  - [搜索表单·修复日期控制bug](https://www.bilibili.com/cheese/play/ep1905467)
-  - [搜索表单·select和radio](https://www.bilibili.com/cheese/play/ep1905478)
-  - [搜索表单·自定义字典组件·初探](https://www.bilibili.com/cheese/play/ep1905479)
-  - [搜索表单·自定义字典组件·实现Select逻辑](https://www.bilibili.com/cheese/play/ep1908981)
-  - [搜索表单·自定义字典组件·实现RadioGroup逻辑](https://www.bilibili.com/cheese/play/ep1908982)
-  - [搜索表单·自定义字典组件·实现RadioGroup按钮组逻辑](https://www.bilibili.com/cheese/play/ep1908983)
-  - [搜索表单·自定义字典组件·实现CheckboxGroup](https://www.bilibili.com/cheese/play/ep1908984)
-  - [操作列·初探](https://www.bilibili.com/cheese/play/ep1909549)
-  - [操作列·插槽方式](https://www.bilibili.com/cheese/play/ep1909551)
-  - [操作列·自定义TableAction组件·初探](https://www.bilibili.com/cheese/play/ep1909552)
-  - [操作列·自定义TableAction组件·移植逻辑](https://www.bilibili.com/cheese/play/ep1909553)
-  - [操作列·自定义TableAction组件·图标](https://www.bilibili.com/cheese/play/ep1909554)
-  - [操作列·自定义TableAction组件·更多](https://www.bilibili.com/cheese/play/ep1909555)
-  - [操作列·自定义TableAction组件·权限码](https://www.bilibili.com/cheese/play/ep1909556)
-  - [操作列·自定义TableAction组件·气泡确认框](https://www.bilibili.com/cheese/play/ep1909557)
-  - [操作列·自定义TableAction组件·确认消息框](https://www.bilibili.com/cheese/play/ep1909559)
-  - [表格组件·多选行与本章小结](https://www.bilibili.com/cheese/play/ep1909560)
-* 第五章·增删改查样例(上)
-  - [增删改查样例·用户列表调整](https://www.bilibili.com/cheese/play/ep1910156)
-  - [修复页面修改TableAction不渲染bug](https://www.bilibili.com/cheese/play/ep1910157)
-  - [增删改查样例·抽离schemas表单配置项](https://www.bilibili.com/cheese/play/ep1910158)
-  - [增删改查样例·抽离schemas表格列配置](https://www.bilibili.com/cheese/play/ep1910159)
-  - [让框架支持jsx语法(上)](https://www.bilibili.com/cheese/play/ep1910160)
-  - [让框架支持jsx语法(下)](https://www.bilibili.com/cheese/play/ep1910161)
-  - [让.vue文件支持jsx语法](https://www.bilibili.com/cheese/play/ep1910162)
-  - [增删改查样例·弹窗表单·初探](https://www.bilibili.com/cheese/play/ep1910864)
-  - [增删改查样例·弹窗表单·常用属性](https://www.bilibili.com/cheese/play/ep1910865)
-  - [增删改查样例·弹窗表单·全屏逻辑处理](https://www.bilibili.com/cheese/play/ep1910866)
-  - [弹窗表单·关于设置全屏后footer显示错位问题issues](https://www.bilibili.com/cheese/play/ep1910867)
-  - [增删改查样例·弹窗表单·表单初探](https://www.bilibili.com/cheese/play/ep1910868)
-* 第六章·自定义表单组件
-  - [表单元数据](https://www.bilibili.com/cheese/play/ep1913468)
-  - [自定义表单组件](https://www.bilibili.com/cheese/play/ep1913469)
-  - [自定义表单组件·slot处理(一)](https://www.bilibili.com/cheese/play/ep1913470)
-  - [自定义表单组件·slot处理(二)](https://www.bilibili.com/cheese/play/ep1913476)
-  - [自定义表单组件·slot处理(三)](https://www.bilibili.com/cheese/play/ep1913477)
-  - [自定义表单组件·24栅格](https://www.bilibili.com/cheese/play/ep1913478)
-  - [自定义表单组件·提交和重置按钮](https://www.bilibili.com/cheese/play/ep1916170)
-  - [自定义表单组件·提交和重置逻辑](https://www.bilibili.com/cheese/play/ep1916171)
-  - [自定义表单组件·expose方法](https://www.bilibili.com/cheese/play/ep1916172)
-  - [自定义表单组件·expose表单原有的方法](https://www.bilibili.com/cheese/play/ep1916173)
-  - [自定义表单组件·仿vben5的方式定义和使用表单组件](https://www.bilibili.com/cheese/play/ep1916174)
-  - [自定义表单组件·仿vben5·简单说明](https://www.bilibili.com/cheese/play/ep1916175)
-  - [仿vben5·优化实例注册逻辑](https://www.bilibili.com/cheese/play/ep1921824)
-  - [仿vben5·新增setValues方法](https://www.bilibili.com/cheese/play/ep1921825)
-  - [仿vben5·新实现setValues逻](https://www.bilibili.com/cheese/play/ep1921826)
-  - [仿vben5·useForm暴露方法说明](https://www.bilibili.com/cheese/play/ep1921827)
-  - [仿vben5·获取指定字段的组件实例方法](https://www.bilibili.com/cheese/play/ep1930583)
-  - [仿vben5·设置组件状态方法实现](https://www.bilibili.com/cheese/play/ep1930584)
-  - [仿vben5·设置组件状态方法优化](https://www.bilibili.com/cheese/play/ep1930585)
-  - [仿vben5·实现updateSchema方法](https://www.bilibili.com/cheese/play/ep1930586)
-  - [仿vben5·实现ifShow配置·初探](https://www.bilibili.com/cheese/play/ep1936612)
-  - [仿vben5·实现ifShow配置·formApi引用处理](https://www.bilibili.com/cheese/play/ep1936613)
-  - [仿vben5·getValues方法优化](https://www.bilibili.com/cheese/play/ep1936614)
-  - [仿vben5·实现show属性](https://www.bilibili.com/cheese/play/ep1936615)
-  - [仿vben5·componentProps支持函数](https://www.bilibili.com/cheese/play/ep1936616)
-  - [增加Select控件](https://www.bilibili.com/cheese/play/ep1936617)
-  - [自定义表单组件·默认值处理](https://www.bilibili.com/cheese/play/ep1936628)
-  - [增加RadioGroup控件](https://www.bilibili.com/cheese/play/ep1936629)
-  - [增加CheckboxGroup控件](https://www.bilibili.com/cheese/play/ep1936630)
-  - [增加ApiDict控件](https://www.bilibili.com/cheese/play/ep1936632)
-* 第七章·番外篇
-  - [番外篇·大版本更新说明](https://www.bilibili.com/cheese/play/ep1950852)
-  - [番外篇·大版本更新操作](https://www.bilibili.com/cheese/play/ep1950853)
-  - [番外篇·二次封装ArtSearchBar组件](https://www.bilibili.com/cheese/play/ep1950854)
-  - [番外篇·二次封装ArtSearchBar组件二开说明](https://www.bilibili.com/cheese/play/ep1950865)
-* 第八章·ArtTable组件二次封装
-  - [ArtTable组件二次封装·初探](https://www.bilibili.com/cheese/play/ep1950866)
-  - [ArtTable组件二次封装·列定义](https://www.bilibili.com/cheese/play/ep1950871)
-  - [ArtTable组件二次封装·component和props](https://www.bilibili.com/cheese/play/ep1950872)
-  - [ArtTable组件二次封装·请求api参数封装](https://www.bilibili.com/cheese/play/ep1950873)
-  - [ArtTable组件二次封装·集成搜索表单](https://www.bilibili.com/cheese/play/ep1950874)
-  - [ArtTable组件二次封装·set/getState方法](https://www.bilibili.com/cheese/play/ep1950876)
-  - [ArtTable组件二次封装·reload方法实现](https://www.bilibili.com/cheese/play/ep1950877)
-  - [ArtTable组件二次封装·修复分页组件看不到bug](https://www.bilibili.com/cheese/play/ep1950878)
-  - [ArtTable组件二次封装·toolbar](https://www.bilibili.com/cheese/play/ep1950879)
-  - [ArtTable组件二次封装·行操作](https://www.bilibili.com/cheese/play/ep1950880)
-  - [ArtTable组件二次封装·小结](https://www.bilibili.com/cheese/play/ep1950881)
-* 第九章·RBAC权限管理
-
-  - [RBAC权限管理·合并master代码](https://www.bilibili.com/cheese/play/ep1962030)
-  - [RBAC权限管理·使用AI生成岗位管理](https://www.bilibili.com/cheese/play/ep1962031)
-  - [RBAC权限管理·岗位管理微调](https://www.bilibili.com/cheese/play/ep1962032)
-  - [RBAC权限管理·使用AI生成部门管理](https://www.bilibili.com/cheese/play/ep1962043)
-  - [RBAC权限管理·部门管理微调](https://www.bilibili.com/cheese/play/ep1962044)
-  - [RBAC权限管理·给用户授权角色·新增弹窗](https://www.bilibili.com/cheese/play/ep1962045)
-  - [RBAC权限管理·给用户授权角色·选择角色表单](https://www.bilibili.com/cheese/play/ep1962046)
-  - [RBAC权限管理·给用户授权角色·接口联调](https://www.bilibili.com/cheese/play/ep1962047)
-  - [RBAC权限管理·调整角色编辑按钮位置](https://www.bilibili.com/cheese/play/ep1963429)
-  - [RBAC权限管理·增加授权菜单抽屉](https://www.bilibili.com/cheese/play/ep1963430)
-  - [RBAC权限管理·增加成员管理抽屉](https://www.bilibili.com/cheese/play/ep1963431)
-  - [RBAC权限管理·权限菜单树](https://www.bilibili.com/cheese/play/ep1963432)
-  - [RBAC权限管理·设置当前角色菜单勾选](https://www.bilibili.com/cheese/play/ep1963434)
-  - [RBAC权限管理·优化当前角色菜单勾选(仅叶子)](https://www.bilibili.com/cheese/play/ep1963436)
-  - [RBAC权限管理·保存角色菜单关系](https://www.bilibili.com/cheese/play/ep1963437)
-  - [RBAC权限管理·成员管理列表](https://www.bilibili.com/cheese/play/ep1963439)
-  - [RBAC权限管理·成员管理列表·请求前参数处理](https://www.bilibili.com/cheese/play/ep1963440)
-  - [RBAC权限管理·成员管理列表·添加用户弹窗](https://www.bilibili.com/cheese/play/ep1963443)
-  - [RBAC权限管理·成员管理列表·添加用户列表](https://www.bilibili.com/cheese/play/ep1963444)
-  - [RBAC权限管理·成员管理列表·保存用户角色关系](https://www.bilibili.com/cheese/play/ep1963445)
-  - [RBAC权限管理·成员管理列表·行删除](https://www.bilibili.com/cheese/play/ep1963447)
-  - [RBAC权限管理·成员管理列表·批量删除](https://www.bilibili.com/cheese/play/ep1963448)
-  - [课程小结](https://www.bilibili.com/cheese/play/ep1963449)
-
-  持续更新中……

+ 0 - 205
npminstall-debug.log

@@ -1,205 +0,0 @@
-{
-  root: '/Users/tt/Downloads/art-design-pro',
-  registry: 'https://registry.npmmirror.com',
-  pkgs: [
-    {
-      name: '',
-      version: '/Users/tt/Downloads/art-design-pro/@types/vite/client',
-      type: 'directory',
-      alias: undefined,
-      arg: [Result]
-    }
-  ],
-  production: false,
-  cacheStrict: false,
-  cacheDir: '/Users/tt/.npminstall_tarball',
-  env: {
-    npm_config_registry: 'https://registry.npmmirror.com',
-    npm_config_argv: '{"remain":[],"cooked":["--fix-bug-versions","--china","--userconfig=/Users/tt/.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=https://registry.npmmirror.com","--save-dev","@types/vite/client"],"original":["--fix-bug-versions","--china","--userconfig=/Users/tt/.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=https://registry.npmmirror.com","--save-dev","@types/vite/client"]}',
-    npm_config_user_agent: 'npminstall/7.12.0 npm/? node/v18.20.4 darwin x64',
-    npm_config_cache: '/Users/tt/.npminstall_tarball',
-    NODE: '/Users/tt/.nvm/versions/node/v18.20.4/bin/node',
-    npm_node_execpath: '/Users/tt/.nvm/versions/node/v18.20.4/bin/node',
-    npm_execpath: '/usr/local/lib/node_modules/cnpm/node_modules/npminstall/bin/install.js',
-    npm_config_userconfig: '/Users/tt/.cnpmrc',
-    npm_config_disturl: 'https://cdn.npmmirror.com/binaries/node',
-    npm_config_r: 'https://registry.npmmirror.com',
-    COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
-    EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
-    NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
-    NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
-    PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
-    CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
-    OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
-    CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
-    ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
-    ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
-    SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
-    SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
-    NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
-    PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
-    PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
-    PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
-    SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
-    SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
-    RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
-    RE2_DOWNLOAD_SKIP_PATH: 'true',
-    PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
-    npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
-    npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
-    npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
-    npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
-    npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs',
-    npm_rootpath: '/Users/tt/Downloads/art-design-pro',
-    INIT_CWD: '/Users/tt/Downloads/art-design-pro'
-  },
-  binaryMirrors: {
-    ENVS: {
-      COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
-      EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
-      NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
-      NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
-      PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
-      CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
-      OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
-      CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
-      ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
-      ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
-      SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
-      SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
-      NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
-      PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
-      PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
-      PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
-      SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
-      SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
-      RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
-      RE2_DOWNLOAD_SKIP_PATH: 'true',
-      PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
-      npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
-      npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
-      npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
-      npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
-      npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs'
-    },
-    '@ali/s2': { host: 'https://cdn.npmmirror.com/binaries/looksgood-s2' },
-    sharp: { replaceHostFiles: [Array], replaceHostMap: [Object] },
-    '@tensorflow/tfjs-node': {
-      replaceHostFiles: [Array],
-      replaceHostRegExpMap: [Object],
-      replaceHostMap: [Object]
-    },
-    cypress: {
-      host: 'https://cdn.npmmirror.com/binaries/cypress',
-      newPlatforms: [Object]
-    },
-    'utf-8-validate': {
-      host: 'https://cdn.npmmirror.com/binaries/utf-8-validate/v{version}'
-    },
-    xprofiler: {
-      remote_path: './xprofiler/v{version}/',
-      host: 'https://cdn.npmmirror.com/binaries'
-    },
-    leveldown: { host: 'https://cdn.npmmirror.com/binaries/leveldown/v{version}' },
-    couchbase: { host: 'https://cdn.npmmirror.com/binaries/couchbase/v{version}' },
-    gl: { host: 'https://cdn.npmmirror.com/binaries/gl/v{version}' },
-    sqlite3: {
-      host: 'https://cdn.npmmirror.com/binaries/sqlite3',
-      remote_path: 'v{version}'
-    },
-    '@journeyapps/sqlcipher': { host: 'https://cdn.npmmirror.com/binaries' },
-    grpc: {
-      host: 'https://cdn.npmmirror.com/binaries',
-      remote_path: '{name}/v{version}'
-    },
-    'grpc-tools': { host: 'https://cdn.npmmirror.com/binaries' },
-    wrtc: {
-      host: 'https://cdn.npmmirror.com/binaries',
-      remote_path: '{name}/v{version}'
-    },
-    fsevents: { host: 'https://cdn.npmmirror.com/binaries/fsevents' },
-    nodejieba: { host: 'https://cdn.npmmirror.com/binaries/nodejieba' },
-    canvas: { host: 'https://cdn.npmmirror.com/binaries/canvas' },
-    'skia-canvas': { host: 'https://cdn.npmmirror.com/binaries/skia-canvas' },
-    'flow-bin': {
-      replaceHost: 'https://github.com/facebook/flow/releases/download/v',
-      host: 'https://cdn.npmmirror.com/binaries/flow/v'
-    },
-    'jpegtran-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/jpegtran-bin'
-    },
-    'cwebp-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/cwebp-bin'
-    },
-    'zopflipng-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/zopflipng-bin'
-    },
-    'optipng-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/optipng-bin'
-    },
-    mozjpeg: {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/mozjpeg-bin'
-    },
-    gifsicle: {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/gifsicle-bin'
-    },
-    'pngquant-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/pngquant-bin',
-      replaceHostMap: [Object]
-    },
-    'pngcrush-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/pngcrush-bin'
-    },
-    'jpeg-recompress-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/jpeg-recompress-bin'
-    },
-    'advpng-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/advpng-bin'
-    },
-    'pngout-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/pngout-bin'
-    },
-    'jpegoptim-bin': {
-      replaceHost: [Array],
-      host: 'https://cdn.npmmirror.com/binaries/jpegoptim-bin'
-    },
-    argon2: { host: 'https://cdn.npmmirror.com/binaries/argon2' },
-    'ali-zeromq': { host: 'https://cdn.npmmirror.com/binaries/ali-zeromq' },
-    'ali-usb_ctl': { host: 'https://cdn.npmmirror.com/binaries/ali-usb_ctl' },
-    'gdal-async': { host: 'https://cdn.npmmirror.com/binaries/node-gdal-async' },
-    'libpg-query': { host: 'https://cdn.npmmirror.com/binaries' }
-  },
-  forbiddenLicenses: null,
-  flatten: false,
-  proxy: undefined,
-  prune: false,
-  disableFallbackStore: false,
-  workspacesMap: Map(0) {},
-  enableWorkspace: false,
-  workspaceRoot: '/Users/tt/Downloads/art-design-pro',
-  isWorkspaceRoot: true,
-  isWorkspacePackage: false,
-  offline: false,
-  strictSSL: true,
-  ignoreScripts: false,
-  foregroundScripts: false,
-  ignoreOptionalDependencies: false,
-  detail: false,
-  forceLinkLatest: false,
-  trace: false,
-  engineStrict: false,
-  registryOnly: false,
-  client: false,
-  autoFixVersion: [Function: autoFixVersion]
-}

+ 1 - 194
src/mock/upgrade/changeLog.ts

@@ -7,197 +7,4 @@ interface UpgradeLog {
   remark?: string // 备注
 }
 
-export const upgradeLogList = ref<UpgradeLog[]>([
-  {
-    version: 'v2.5.7',
-    title: '新增表单组件',
-    date: '2025-09-14',
-    detail: [
-      '新增 ArtForm 组件',
-      '修复新版本谷歌浏览器切换主题闪烁问题',
-      '优化表单 label 高度没有对齐问题',
-      '首屏启动性能优化'
-    ]
-  },
-  {
-    version: 'v2.5.6',
-    title: '优化用户体验、bug修复',
-    date: '2025-09-06',
-    detail: [
-      'useTable 类型推导优化,不需要手动传递类型即可实现类型提示',
-      'useTable removeColumn 支持多数据删除',
-      'useTable 自动识别响应体支持自定义配置 (src/utils/table/tableConfig.ts)',
-      'useTable 空数据浏览器警告优化',
-      'api 接口请求代码优化、api.d.ts 类型优化',
-      '优化 ArtTable 顶部按钮换行无法自适应问题(示例:功能示例 / 左右布局表格)',
-      'ArtTable 分页组件选中样式优化',
-      'ArtTable 空状态高度默认撑满',
-      'ArtButtonMore 组件新增图标、颜色配置',
-      'ArtTableHeader 新增搜索按钮,用于控制顶部搜索栏的显示与隐藏',
-      'ArtSearchBar label 为空时不占空间',
-      '表格操作栏拖拽禁止固定列拖拽',
-      '角色管理页面接口对接、代码优化',
-      '菜单管理页面优化',
-      '优化设置中心滚动页面跟随滚动问题',
-      '一级路由是外链时,component 校验逻辑优化',
-      '优化地图右下角拖动问题',
-      '优化暗黑模式刷新页面白色背景问题',
-      '优化左侧菜单折叠按钮间距问题',
-      '移动端显示左侧菜单 logo',
-      '网络请求新增 showSuccessMessage,用于配置是否显示成功消息',
-      '添加全局错误处理基础框架',
-      '修复批量删除整页数据没有返回上一页的bug',
-      '修复动态路由参数导致的问题',
-      '修复动态路由配置 一级路由是 iframe 页面时,全屏问题',
-      '新增权限演示示例',
-      '全局组件采用异步加载策略,提升首屏加载性能'
-    ]
-  },
-  {
-    version: 'v2.5.5',
-    title: 'bug修复、优化用户体验',
-    date: '2025-08-17',
-    detail: [
-      '重构 ArtSearchBar 组件,支持更多组件、表单校验等能力',
-      'useTable 列配置:支持动态更新能力',
-      '修复多个富文本编辑器图标不统一问题',
-      '优化颜色选择器圆角',
-      'el-radio、el-checkbox 统一大小',
-      'art-stats-card 新增小数位、分隔符配置',
-      '路由配置示例优化',
-      '高级表格新增自定义获取数据示例(等待其他请求完成后执行 useTable 数据获取)',
-      'useTable 新增 excludeParams,用于排除某些参数不参与请求',
-      '优化路径别名类型问题',
-      '本地开发跨域配置优化',
-      '修复 useTable 删除最后一整页数据没有返回上一页的问题',
-      '修复 echarts 图表数据初始化、更新数据浏览器报错',
-      '删除 art-chart-empty 组件',
-      '新增 ArtSearchBar 组件示例',
-      '网络请求支持 http 状态码为 401 时退出登录',
-      '优化网络请求退出登录多次提示问题',
-      'useTable 属性、方法命名优化',
-      '登录页UI升级',
-      '403、404、500 页面UI升级'
-    ]
-  },
-  {
-    version: 'v2.5.4',
-    title: 'bug修复、优化用户体验',
-    date: '2025-07-27',
-    detail: [
-      '修复获取用户信息接口时序问题导致路由注册菜单渲染错误bug',
-      '修复动态路由校验问题导致的 iframe 不显示bug',
-      '修复 reset 文件语法错误',
-      '修复 ArtTable 数据类型错误',
-      '路由注册新增 component 校验',
-      '修复地图滚轮滚动放大问题',
-      '网络请求 headers 支持自定义配置',
-      '展开行支持 formatter 渲染'
-    ]
-  },
-  {
-    version: 'v2.5.3',
-    title: 'bug修复、优化用户体验',
-    date: '2025-07-20',
-    detail: [
-      'ArtTable 组件重构',
-      'Element Plus 升级到 v2.10.2',
-      '优化 useTable 分页参数问题',
-      '修复 ArtTable 切换分页大小时执行两次请求bug',
-      '优化网络请求示例:初始化参数、分页携带参数问题',
-      '优化搜索日期范围参数处理',
-      '优化 el-date-picker 组件圆角问题',
-      '优化 el-select 组件 hover 样式',
-      '新增表格左右布局示例',
-      '搜索组件、分页组件高度降低',
-      '优化登录页面滑块动画间隔时长',
-      '优化菜单没有子菜单显示的问题'
-    ]
-  },
-  {
-    version: 'v2.5.2',
-    title: 'bug修复、优化用户体验',
-    date: '2025-07-13',
-    detail: [
-      '新增一键精简脚本,快速准备开发环境',
-      '优化表格无数据时表头不显示问题',
-      'useTable hooks 支持分页字段名自定义映射',
-      '修复 v2.5.0 顶部进度条不显示问题',
-      '修复左侧菜单遮罩异常显示问题',
-      '修复隐藏所有子菜单时仍显示父级菜单的问题',
-      '水平菜单、混合菜单、双列菜单支持徽章显示',
-      '修复 stylelint 导致的登录页滑块样式异常',
-      '修复老旧移动端设备 loading 定位问题',
-      '快速入口支持配置文件模式',
-      '顶栏功能支持配置文件模式',
-      '全局事件总线 mittBus 类型安全优化',
-      '支持自定义首页路径',
-      '优化移动端设置中容器宽度样式',
-      '优化登录页验证滑块文字居中效果',
-      '路由支持配置 redirect 等属性'
-    ]
-  },
-  {
-    version: 'v2.5.1',
-    title: 'bug修复、优化用户体验',
-    date: '2025-07-08',
-    detail: [
-      '修复首次登录系统时 loading 提前关闭bug',
-      'el-card、el-table 背景色跟系统保持一致',
-      '修复 v2.5.0 版本引起的全屏页样式层级过低bug',
-      '修复 v2.5.0 版本引起的表格展开行折叠bug'
-    ]
-  },
-  {
-    version: 'v2.5.0',
-    title: '新增 useTable hooks 表格封装、组件重构',
-    date: '2025-07-06',
-    remark: '建议升级,带来更高效、更智能的表格开发体验',
-    detail: [
-      '重构 ArtTable、ArtTableHeader、ArtNotification 组件',
-      '新增 useTable hooks 表格封装,支持数据获取、转换、响应适配、智能缓存(基于 LRU 算法)、错误处理、列配置与插槽、分页控制、刷新策略等核心功能,全面提升开发效率与用户体验',
-      '修复菜单管理搜索直接修改 pinia 数据的问题',
-      '移除 CountTo 插件,替换为 ArtCountTo 组件',
-      'Echarts 版本升级到 5.6.0',
-      '修复路由守卫 loading 闪烁问题'
-    ]
-  },
-  {
-    version: 'v2.4.2.9',
-    title: '代码重构、修复bug、优化用户体验',
-    date: '2025-07-02',
-    detail: [
-      '菜单布局、顶部导航代码重构',
-      '修复移动端锁屏页部分浏览器无法解锁bug',
-      '优化移动端菜单滚动用户体验',
-      '优化顶部菜单样式问题',
-      '顶部菜单宽度自适应,可显示更多内容,混合菜单支持鼠标滚动',
-      'asyncRoutes 路由配置 auth_mark 字段改为 authMark',
-      '去除重复的 components.d.ts 文件,components.d.ts、auto-imports.d.ts 忽略提交',
-      '优化国际化语言文件加载方式,异步改成同步模式',
-      '优化 el-pagination 大小不一致问题'
-    ]
-  },
-  {
-    version: 'v2.4.2.8',
-    title: '修复 v2.4.2.7 版本访问 / 路径时显示 404 的问题',
-    date: '2025-06-26'
-  },
-  {
-    version: 'v2.4.2.7',
-    title: 'bug修复、优化用户体验',
-    date: '2025-06-25',
-    detail: [
-      '路由支持配置全屏模式',
-      '路由支持自动跳转到菜单的第一个有效路由',
-      '动态路由新增 removeAllDynamicRoutes 方法,可用于彻底清除所有动态路由',
-      '权限自定义指令优化、新增角色权限指令 v-roles、可用于控制元素的显示与隐藏',
-      '修复登录页面拖拽组件 ArtDragVerify 宽度、颜色异常bug',
-      '修复 iframe 页面混合模式、双列模式异常bug',
-      '优化锁屏页面被 el-loading 穿透bug',
-      '跨域请求携带 cookie 配置从环境变量中获取,默认关闭',
-      '针对SEO、可访问性做一些优化',
-      '新增标签页操作示例'
-    ]
-  }
-])
+export const upgradeLogList = ref<UpgradeLog[]>([])

+ 85 - 0
技术栈.md

@@ -0,0 +1,85 @@
+## 📌 拓扑图选型
+
+拓扑图(Topology Graph)是一种用于展示网络结构、系统架构或流程的图形化工具。在前端开发中,选择合适的库来绘制和操作拓扑图至关重要。以下是一些流行的 JavaScript 库及其简要介绍:
+
+### 📈 ECharts
+
+- 简介: 百度开源的可视化库,提供关系图、图表等丰富组件。
+- 背景: 百度,国产
+- 官网: <https://echarts.apache.org/zh/index.html>
+
+### 📈 maotu-webtopo
+- 简介: 基于Vue3开发的开源Web组态引擎库。
+- 背景: 国产,开源
+- 官网: <https://mt-edit.yaolm.top/>
+- 仓库: <https://gitee.com/yaolunmao/maotu-webtopo>
+
+### 📚 hightopo ⭐
+
+> 闭源商用。如果有授权或能够使用这个库,这是最直接的方案
+
+- 简介: 高性能的拓扑图绘制库,支持大规模数据渲染。
+- 背景: 个人开发,国产
+- 官网: <http://www.hightopo.com/>
+- 示例: <http://www.hightopo.cn/demo/electric-bling/index.html> 、<https://www.hightopo.com/demo/2deditor/HT-2D-Editor.html>
+
+### 🐜 AntV G6 ⭐⭐
+
+> 社区强、文档好;布局 & 拓扑 + 交互强;可以自定义节点样式。
+
+- 简介: 图可视化引擎,提供绘制、布局、分析、交互、动画等基础能力。
+- 背景: 蚂蚁金服 AntV,国产
+- 官网: <https://g6.antv.antgroup.com/>
+- 示例: <https://g6.antv.antgroup.com/examples>
+
+### 🔌 jsPlumb
+
+- 简介: 强大的绘图组件,主要用于连接网页上的元素。
+- 背景: 个人,国外
+- 官网: <https://jsplumbtoolkit.com/>
+- GitHub: <https://github.com/jsplumb/community-edition>
+- 中文案例整理: <https://github.com/wangduanduan/jsplumb-chinese-tutorial>
+- 二次封装:
+  - [easy-flow](https://github.com/BiaoChengLiu/easy-flow)
+  - [vue-jsplumb-editor](https://github.com/fangyang921017/vue-jsplumb-editor)
+
+### 🖊️ Le5le-topology ⭐⭐⭐⭐
+
+> 电气 /组态 /拓扑类支持好;TypeScript 支持;易于自定义元件样式。
+
+- 简介: 可视化在线绘图工具,基于 Canvas + TypeScript。支持拓扑图、UML、微服务架构、SCADA 等场景。
+- 背景: 个人,国产
+- 官网: <https://le5le.com/enterprise/solution>
+- 仓库: [GitHub](https://github.com/le5le-com/meta2d.js)
+
+### 🎨 jTopo
+
+- 简介: jTopo (Javascript Topology library) 是一款完全基于 HTML5 Canvas 的关系、拓扑图形化界面开发工具包。
+- 背景: 个人开发,国产
+- 官网: <http://www.jtopo.com>
+- 示例: <https://github.com/fivge/jTopo>、<https://github.com/wenyuan/jtopo_topology>
+
+### WebTopo
+
+- 简介: 基于VUE的web组态(组态,拓扑图,拓扑编辑器)
+- 背景: 个人、国外
+- GitHub: <https://github.com/phynos/WebTopo>
+
+### 🌐 Vis.js
+
+- 简介: 基于 HTML5 Canvas 的动态可视化库,支持大规模数据、交互与动态操作。
+- 背景: Almende B.V,国外
+- 官网: <https://visjs.org/>
+- 示例: <https://visjs.github.io/vis-network/examples/>
+
+### 🔗 JointJS
+
+- 简介: 开源前端框架,支持流程图、工作流图等。商业版 Rappid 提供增强插件。
+- 背景: 国外公司
+- 官网: <https://www.jointjs.com/>
+
+### 📊 D3.js
+
+- 简介: 数据驱动文档 (Data-Driven Documents),强大的可视化库。
+- 特点: 几乎需要完全手写实现,灵活度极高。
+- 官网: <https://d3js.org/>