diff --git a/.gitignore b/.gitignore
index 613bcd4..8bed08f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -78,3 +78,6 @@ server/config.yaml
.codex
.cursor
.gpt
+
+
+web
\ No newline at end of file
diff --git a/server/initialize/plugin.go b/server/initialize/plugin.go
index 7ee33c2..87ac748 100644
--- a/server/initialize/plugin.go
+++ b/server/initialize/plugin.go
@@ -7,7 +7,7 @@ import (
func InstallPlugin(PrivateGroup *gin.RouterGroup, PublicRouter *gin.RouterGroup, engine *gin.Engine) {
if global.GVA_DB == nil {
- global.GVA_LOG.Info("项目暂未初始化,无法安装插件,初始化后重启项目即可完成插件安装")
+ global.GVA_LOG.Info("项目暂未初始化,跳过可选扩展安装")
return
}
bizPluginV1(PrivateGroup, PublicRouter)
diff --git a/server/plugin/announcement/gen/gen.go b/server/plugin/announcement/gen/gen.go
index 240749f..d09800c 100644
--- a/server/plugin/announcement/gen/gen.go
+++ b/server/plugin/announcement/gen/gen.go
@@ -1,11 +1,13 @@
package main
+//go:generate go mod tidy
+//go:generate go mod download
+//go:generate go run gen.go
+
import (
- "gorm.io/gen"
- "path/filepath" //go:generate go mod tidy
- //go:generate go mod download
- //go:generate go run gen.go
"github.com/flipped-aurora/gin-vue-admin/server/plugin/announcement/model"
+ "gorm.io/gen"
+ "path/filepath"
)
func main() {
diff --git a/web-admin/docs/system-inventory.md b/web-admin/docs/system-inventory.md
index 6ac1a7a..d9bc780 100644
--- a/web-admin/docs/system-inventory.md
+++ b/web-admin/docs/system-inventory.md
@@ -179,11 +179,6 @@
- Mcp Tools 模板
- Skills 管理
- AI 页面绘制
-- 插件系统
-- 插件安装
-- 打包插件
-- 邮件插件
-- 公告管理
## 说明
diff --git a/web/.docker-compose/nginx/conf.d/my.conf b/web/.docker-compose/nginx/conf.d/my.conf
deleted file mode 100644
index 9a1685d..0000000
--- a/web/.docker-compose/nginx/conf.d/my.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-server {
- listen 8080;
- server_name localhost;
-
- #charset koi8-r;
- #access_log logs/host.access.log main;
-
- location / {
- root /usr/share/nginx/html;
- add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
- try_files $uri $uri/ /index.html;
- }
-
- location /api {
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- rewrite ^/api/(.*)$ /$1 break; #重写
- proxy_pass http://177.7.0.12:8888; # 设置代理服务器的协议和地址
- }
-
- location /api/swagger/index.html {
- proxy_pass http://127.0.0.1:8888/swagger/index.html;
- }
- }
\ No newline at end of file
diff --git a/web/.docker-compose/nginx/conf.d/nginx.conf b/web/.docker-compose/nginx/conf.d/nginx.conf
deleted file mode 100644
index 29f68b8..0000000
--- a/web/.docker-compose/nginx/conf.d/nginx.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-server {
- listen 80;
- server_name localhost;
-
- #charset koi8-r;
- #access_log logs/host.access.log main;
-
- location / {
- root /usr/share/nginx/html/dist;
- add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
- try_files $uri $uri/ /index.html;
- }
-
- location /api {
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- rewrite ^/api/(.*)$ /$1 break; #重写
- proxy_pass http://127.0.0.1:8888; # 设置代理服务器的协议和地址
- }
- location /form-generator {
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_pass http://127.0.0.1:8888;
- }
- location /api/swagger/index.html {
- proxy_pass http://127.0.0.1:8888/swagger/index.html;
- }
- }
\ No newline at end of file
diff --git a/web/.dockerignore b/web/.dockerignore
deleted file mode 100644
index 40b878d..0000000
--- a/web/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules/
\ No newline at end of file
diff --git a/web/.env.development b/web/.env.development
deleted file mode 100644
index 25ffe1f..0000000
--- a/web/.env.development
+++ /dev/null
@@ -1,11 +0,0 @@
-ENV = 'development'
-VITE_CLI_PORT = 8080
-VITE_SERVER_PORT = 8888
-VITE_BASE_API = /api
-VITE_FILE_API = /api
-VITE_BASE_PATH = http://127.0.0.1
-VITE_POSITION = open
-VITE_EDITOR = code
-// VITE_EDITOR = webstorm 如果使用webstorm开发且要使用dom定位到代码行功能 请先自定添加 webstorm到环境变量 再将VITE_EDITOR值修改为webstorm
-// 如果使用docker-compose开发模式,设置为下面的地址或本机主机IP
-//VITE_BASE_PATH = http://177.7.0.12
diff --git a/web/.env.production b/web/.env.production
deleted file mode 100644
index 9345df2..0000000
--- a/web/.env.production
+++ /dev/null
@@ -1,7 +0,0 @@
-ENV = 'production'
-
-#下方为上线需要用到的程序代理前缀,一般用于nginx代理转发
-VITE_BASE_API = /api
-VITE_FILE_API = /api
-#下方修改为你的线上ip(如果需要在线使用表单构建工具时使用,其余情况无需使用以下环境变量)
-VITE_BASE_PATH = https://demo.gin-vue-admin.com
diff --git a/web/.gitignore b/web/.gitignore
deleted file mode 100644
index 1a4abd9..0000000
--- a/web/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-node_modules/*
-package-lock.json
-yarn.lock
-bun.lockb
-config.yaml
\ No newline at end of file
diff --git a/web/.prettierrc b/web/.prettierrc
deleted file mode 100644
index bc61a53..0000000
--- a/web/.prettierrc
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "printWidth": 80,
- "tabWidth": 2,
- "useTabs": false,
- "semi": false,
- "singleQuote": true,
- "trailingComma": "none",
- "bracketSpacing": true,
- "arrowParens": "always",
- "vueIndentScriptAndStyle": true,
- "endOfLine": "lf"
-}
diff --git a/web/Dockerfile b/web/Dockerfile
deleted file mode 100644
index af4464e..0000000
--- a/web/Dockerfile
+++ /dev/null
@@ -1,25 +0,0 @@
-# 如果需要用 cicd ,请设置环境变量:
-# variables:
-# DOCKER_BUILDKIT: 1
-
-FROM node:20-slim AS base
-ENV PNPM_HOME="/pnpm"
-ENV PATH="$PNPM_HOME:$PATH"
-RUN corepack enable
-COPY . /app
-WORKDIR /app
-
-
-FROM base AS prod-deps
-RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod
-
-FROM base AS build
-COPY --from=prod-deps /app/node_modules /app/node_modules
-RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install && pnpm run build
-
-
-FROM nginx:alpine
-LABEL MAINTAINER="bypanghu@163.com"
-COPY --from=base /app/.docker-compose/nginx/conf.d/my.conf /etc/nginx/conf.d/my.conf
-COPY --from=build /app/dist /usr/share/nginx/html
-RUN ls -al /usr/share/nginx/html
diff --git a/web/README.md b/web/README.md
deleted file mode 100644
index 06f1a8c..0000000
--- a/web/README.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# gin-vue-admin web
-
-## Project setup
-
-```
-npm install
-```
-
-### Compiles and hot-reloads for development
-
-```
-npm run serve
-```
-
-### Compiles and minifies for production
-
-```
-npm run build
-```
-
-### Run your tests
-
-```
-npm run test
-```
-
-### Lints and fixes files
-
-```
-npm run lint
-```
-
-整理代码结构
-
-```lua
-web
- ├── babel.config.js
- ├── Dockerfile
- ├── favicon.ico
- ├── index.html -- 主页面
- ├── limit.js -- 助手代码
- ├── package.json -- 包管理器代码
- ├── src -- 源代码
- │ ├── api -- api 组
- │ ├── App.vue -- 主页面
- │ ├── assets -- 静态资源
- │ ├── components -- 全局组件
- │ ├── core -- gva 组件包
- │ │ ├── config.js -- gva网站配置文件
- │ │ ├── gin-vue-admin.js -- 注册欢迎文件
- │ │ └── global.js -- 统一导入文件
- │ ├── directive -- v-auth 注册文件
- │ ├── main.js -- 主文件
- │ ├── permission.js -- 路由中间件
- │ ├── pinia -- pinia 状态管理器,取代vuex
- │ │ ├── index.js -- 入口文件
- │ │ └── modules -- modules
- │ │ ├── dictionary.js
- │ │ ├── router.js
- │ │ └── user.js
- │ ├── router -- 路由声明文件
- │ │ └── index.js
- │ ├── style -- 全局样式
- │ │ ├── base.scss
- │ │ ├── basics.scss
- │ │ ├── element_visiable.scss -- 此处可以全局覆盖 element-plus 样式
- │ │ ├── iconfont.css -- 顶部几个icon的样式文件
- │ │ ├── main.scss
- │ │ ├── mobile.scss
- │ │ └── newLogin.scss
- │ ├── utils -- 方法包库
- │ │ ├── asyncRouter.js -- 动态路由相关
- │ │ ├── bus.js -- 全局mitt声明文件
- │ │ ├── date.js -- 日期相关
- │ │ ├── dictionary.js -- 获取字典方法
- │ │ ├── downloadImg.js -- 下载图片方法
- │ │ ├── format.js -- 格式整理相关
- │ │ ├── image.js -- 图片相关方法
- │ │ ├── page.js -- 设置页面标题
- │ │ ├── request.js -- 请求
- │ │ └── stringFun.js -- 字符串文件
- | ├── view -- 主要view代码
- | | ├── about -- 关于我们
- | | ├── dashboard -- 面板
- | | ├── error -- 错误
- | | ├── example --上传案例
- | | ├── iconList -- icon列表
- | | ├── init -- 初始化数据
- | | | ├── index -- 新版本
- | | | ├── init -- 旧版本
- | | ├── layout -- layout约束页面
- | | | ├── aside
- | | | ├── bottomInfo -- bottomInfo
- | | | ├── screenfull -- 全屏设置
- | | | ├── setting -- 系统设置
- | | | └── index.vue -- base 约束
- | | ├── login --登录
- | | ├── person --个人中心
- | | ├── superAdmin -- 超级管理员操作
- | | ├── system -- 系统检测页面
- | | ├── systemTools -- 系统配置相关页面
- | | └── routerHolder.vue -- page 入口页面
- ├── vite.config.js -- vite 配置文件
- └── yarn.lock
-
-```
diff --git a/web/babel.config.js b/web/babel.config.js
deleted file mode 100644
index b1becff..0000000
--- a/web/babel.config.js
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = {
- presets: [],
- plugins: []
-}
diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs
deleted file mode 100644
index 3b443c5..0000000
--- a/web/eslint.config.mjs
+++ /dev/null
@@ -1,29 +0,0 @@
-import js from '@eslint/js'
-import pluginVue from 'eslint-plugin-vue'
-import globals from 'globals'
-
-export default [
- js.configs.recommended,
- ...pluginVue.configs['flat/essential'],
- {
- name: 'app/files-to-lint',
- files: ['**/*.{js,mjs,jsx,vue}'],
- languageOptions: {
- ecmaVersion: 'latest',
- sourceType: 'module',
- globals: globals.node
- },
- rules: {
- 'vue/max-attributes-per-line': 0,
- 'vue/no-v-model-argument': 0,
- 'vue/multi-word-component-names': 'off',
- 'no-lone-blocks': 'off',
- 'no-extend-native': 'off',
- 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }]
- }
- },
- {
- name: 'app/files-to-ignore',
- ignores: ['**/dist/**', '**/build/*.js', '**/src/assets/**', '**/public/**']
- }
-]
diff --git a/web/index.html b/web/index.html
deleted file mode 100644
index eeb87a2..0000000
--- a/web/index.html
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/jsconfig.json b/web/jsconfig.json
deleted file mode 100644
index ca45014..0000000
--- a/web/jsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": "./",
- "paths": {
- "@/*": ["src/*"]
- }
- },
- "exclude": ["node_modules", "dist"],
- "include": ["src/**/*"]
-}
diff --git a/web/limit.js b/web/limit.js
deleted file mode 100644
index f23fa51..0000000
--- a/web/limit.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// 运行项目前通过node执行此脚本 (此脚本与 node_modules 目录同级)
-import fs from 'fs'
-import path from 'path'
-const wfPath = path.resolve(__dirname, './node_modules/.bin')
-
-fs.readdir(wfPath, (err, files) => {
- if (err) {
- console.log(err)
- } else {
- if (files.length !== 0) {
- files.forEach((item) => {
- if (item.split('.')[1] === 'cmd') {
- replaceStr(`${wfPath}/${item}`, /"%_prog%"/, '%_prog%')
- }
- })
- }
- }
-})
-
-// 参数:[文件路径、 需要修改的字符串、修改后的字符串] (替换对应文件内字符串的公共函数)
-function replaceStr(filePath, sourceRegx, targetSrt) {
- fs.readFile(filePath, (err, data) => {
- if (err) {
- console.log(err)
- } else {
- let str = data.toString()
- str = str.replace(sourceRegx, targetSrt)
- fs.writeFile(filePath, str, (err) => {
- if (err) {
- console.log(err)
- } else {
- console.log('\x1B[42m%s\x1B[0m', '文件修改成功')
- }
- })
- }
- })
-}
diff --git a/web/openDocument.js b/web/openDocument.js
deleted file mode 100644
index 03a886b..0000000
--- a/web/openDocument.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-此文件受版权保护,未经授权禁止修改!如果您尚未获得授权,请通过微信(shouzi_1994)联系我们以购买授权。在未授权状态下,只需保留此代码,不会影响任何正常使用。
- 未经授权的商用使用可能会被我们的资产搜索引擎爬取,并可能导致后续索赔。索赔金额将不低于高级授权费的十倍。请您遵守版权法律法规,尊重知识产权。
-*/
-
-import child_process from 'child_process'
-
-var url = 'https://www.gin-vue-admin.com'
-var cmd = ''
-switch (process.platform) {
- case 'win32':
- cmd = 'start'
- child_process.exec(cmd + ' ' + url)
- break
-
- case 'darwin':
- cmd = 'open'
- child_process.exec(cmd + ' ' + url)
- break
-}
diff --git a/web/package.json b/web/package.json
deleted file mode 100644
index 40365ab..0000000
--- a/web/package.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "name": "gin-vue-admin",
- "version": "2.9.1",
- "private": true,
- "scripts": {
- "dev": "vite --host --mode development",
- "serve": "vite --host --mode development",
- "build": "vite build --mode production",
- "limit-build": "npm install increase-memory-limit-fixbug cross-env -g && npm run fix-memory-limit && node ./limit && npm run build",
- "preview": "vite preview",
- "fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit"
- },
- "type": "module",
- "dependencies": {
- "@element-plus/icons-vue": "^2.3.1",
- "@form-create/designer": "^3.2.6",
- "@form-create/element-ui": "^3.2.10",
- "@iconify/vue": "^5.0.0",
- "@unocss/transformer-directives": "^66.4.2",
- "@vue-office/docx": "^1.6.2",
- "@vue-office/excel": "^1.7.11",
- "@vue-office/pdf": "^2.0.2",
- "@vueuse/core": "^11.0.3",
- "@vueuse/integrations": "^12.0.0",
- "@wangeditor/editor": "^5.1.23",
- "@wangeditor/editor-for-vue": "^5.1.12",
- "ace-builds": "^1.36.4",
- "axios": "1.8.2",
- "chokidar": "^4.0.0",
- "core-js": "^3.38.1",
- "echarts": "5.5.1",
- "element-plus": "^2.13.6",
- "highlight.js": "^11.10.0",
- "install": "^0.13.0",
- "marked": "14.1.1",
- "marked-highlight": "^2.1.4",
- "mitt": "^3.0.1",
- "npm": "^11.3.0",
- "nprogress": "^0.2.0",
- "path": "^0.12.7",
- "pinia": "^2.2.2",
- "qs": "^6.13.0",
- "screenfull": "^6.0.2",
- "sortablejs": "^1.15.3",
- "spark-md5": "^3.0.2",
- "universal-cookie": "^7",
- "vform3-builds": "^3.0.10",
- "vite-auto-import-svg": "^2.5.0",
- "vue": "^3.5.31",
- "vue-cropper": "^1.1.4",
- "vue-echarts": "^7.0.3",
- "vue-qr": "^4.0.9",
- "vue-router": "^4.4.3",
- "vue3-ace-editor": "^2.2.4",
- "vue3-sfc-loader": "^0.9.5",
- "vuedraggable": "^4.1.0"
- },
- "devDependencies": {
- "@babel/eslint-parser": "^7.25.1",
- "@eslint/js": "^8.56.0",
- "@unocss/extractor-svelte": "^66.4.2",
- "@unocss/preset-wind3": "^66.4.2",
- "@unocss/vite": "^66.5.0",
- "@vitejs/plugin-legacy": "^6.0.0",
- "@vitejs/plugin-vue": "^5.0.3",
- "@vue/cli-plugin-babel": "~5.0.8",
- "@vue/cli-plugin-eslint": "~5.0.8",
- "@vue/cli-plugin-router": "~5.0.8",
- "@vue/cli-plugin-vuex": "~5.0.8",
- "@vue/cli-service": "~5.0.8",
- "@vue/compiler-sfc": "^3.5.1",
- "autoprefixer": "^10.4.20",
- "babel-plugin-import": "^1.13.8",
- "chalk": "^5.3.0",
- "dotenv": "^16.4.5",
- "eslint": "^8.57.0",
- "eslint-plugin-vue": "^9.19.2",
- "globals": "^16.3.0",
- "sass": "^1.78.0",
- "terser": "^5.31.6",
- "vite": "^6.2.3",
- "vite-check-multiple-dom": "0.2.1",
- "vite-plugin-banner": "^0.8.0",
- "vite-plugin-importer": "^0.2.5",
- "vite-plugin-vue-devtools": "^7.0.16"
- }
-}
diff --git a/web/public/favicon.ico b/web/public/favicon.ico
deleted file mode 100644
index ee520ce..0000000
Binary files a/web/public/favicon.ico and /dev/null differ
diff --git a/web/public/logo.png b/web/public/logo.png
deleted file mode 100644
index 468cdab..0000000
Binary files a/web/public/logo.png and /dev/null differ
diff --git a/web/src/App.vue b/web/src/App.vue
deleted file mode 100644
index 63cbbdd..0000000
--- a/web/src/App.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
diff --git a/web/src/api/api.js b/web/src/api/api.js
deleted file mode 100644
index 8ccbbaf..0000000
--- a/web/src/api/api.js
+++ /dev/null
@@ -1,206 +0,0 @@
-import service from '@/utils/request'
-
-// @Tags api
-// @Summary 分页获取角色列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body modelInterface.PageInfo true "分页获取用户列表"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /api/getApiList [post]
-// {
-// page int
-// pageSize int
-// }
-export const getApiList = (data) => {
- return service({
- url: '/api/getApiList',
- method: 'post',
- data
- })
-}
-
-// @Tags Api
-// @Summary 创建基础api
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateApiParams true "创建api"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /api/createApi [post]
-export const createApi = (data) => {
- return service({
- url: '/api/createApi',
- method: 'post',
- data
- })
-}
-
-// @Tags menu
-// @Summary 根据id获取菜单
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.GetById true "根据id获取菜单"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /menu/getApiById [post]
-export const getApiById = (data) => {
- return service({
- url: '/api/getApiById',
- method: 'post',
- data
- })
-}
-
-// @Tags Api
-// @Summary 更新api
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateApiParams true "更新api"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /api/updateApi [post]
-export const updateApi = (data) => {
- return service({
- url: '/api/updateApi',
- method: 'post',
- data
- })
-}
-
-// @Tags Api
-// @Summary 更新api
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateApiParams true "更新api"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /api/setAuthApi [post]
-export const setAuthApi = (data) => {
- return service({
- url: '/api/setAuthApi',
- method: 'post',
- data
- })
-}
-
-// @Tags Api
-// @Summary 获取所有的Api 不分页
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /api/getAllApis [post]
-export const getAllApis = (data) => {
- return service({
- url: '/api/getAllApis',
- method: 'post',
- data
- })
-}
-
-// @Tags Api
-// @Summary 删除指定api
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body dbModel.Api true "删除api"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /api/deleteApi [post]
-export const deleteApi = (data) => {
- return service({
- url: '/api/deleteApi',
- method: 'post',
- data
- })
-}
-
-// @Tags SysApi
-// @Summary 删除选中Api
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "ID"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /api/deleteApisByIds [delete]
-export const deleteApisByIds = (data) => {
- return service({
- url: '/api/deleteApisByIds',
- method: 'delete',
- data
- })
-}
-
-// FreshCasbin
-// @Tags SysApi
-// @Summary 刷新casbin缓存
-// @accept application/json
-// @Produce application/json
-// @Success 200 {object} response.Response{msg=string} "刷新成功"
-// @Router /api/freshCasbin [get]
-export const freshCasbin = () => {
- return service({
- url: '/api/freshCasbin',
- method: 'get'
- })
-}
-
-export const syncApi = () => {
- return service({
- url: '/api/syncApi',
- method: 'get'
- })
-}
-
-export const getApiGroups = () => {
- return service({
- url: '/api/getApiGroups',
- method: 'get'
- })
-}
-
-export const ignoreApi = (data) => {
- return service({
- url: '/api/ignoreApi',
- method: 'post',
- data
- })
-}
-
-export const enterSyncApi = (data) => {
- return service({
- url: '/api/enterSyncApi',
- method: 'post',
- data
- })
-}
-
-/**
- * 获取拥有指定API权限的角色ID列表
- * @param {string} path API路径
- * @param {string} method 请求方法
- * @returns {Promise} 角色ID数组
- */
-export const getApiRoles = (path, method) => {
- return service({
- url: '/api/getApiRoles',
- method: 'get',
- params: { path, method }
- })
-}
-
-/**
- * 全量覆盖某API关联的角色列表
- * @param {Object} data
- * @param {string} data.path API路径
- * @param {string} data.method 请求方法
- * @param {number[]} data.authorityIds 角色ID列表
- * @returns {Promise}
- */
-export const setApiRoles = (data) => {
- return service({
- url: '/api/setApiRoles',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/attachmentCategory.js b/web/src/api/attachmentCategory.js
deleted file mode 100644
index 58980f6..0000000
--- a/web/src/api/attachmentCategory.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import service from '@/utils/request'
-// 分类列表
-export const getCategoryList = () => {
- return service({
- url: '/attachmentCategory/getCategoryList',
- method: 'get',
- })
-}
-
-// 添加/编辑分类
-export const addCategory = (data) => {
- return service({
- url: '/attachmentCategory/addCategory',
- method: 'post',
- data
- })
-}
-
-// 删除分类
-export const deleteCategory = (data) => {
- return service({
- url: '/attachmentCategory/deleteCategory',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/authority.js b/web/src/api/authority.js
deleted file mode 100644
index 919a728..0000000
--- a/web/src/api/authority.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import service from '@/utils/request'
-// @Router /authority/getAuthorityList [post]
-export const getAuthorityList = (data) => {
- return service({
- url: '/authority/getAuthorityList',
- method: 'post',
- data
- })
-}
-
-// @Summary 删除角色
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body {authorityId uint} true "删除角色"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /authority/deleteAuthority [post]
-export const deleteAuthority = (data) => {
- return service({
- url: '/authority/deleteAuthority',
- method: 'post',
- data
- })
-}
-
-// @Summary 创建角色
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateAuthorityPatams true "创建角色"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /authority/createAuthority [post]
-export const createAuthority = (data) => {
- return service({
- url: '/authority/createAuthority',
- method: 'post',
- data
- })
-}
-
-// @Tags authority
-// @Summary 拷贝角色
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateAuthorityPatams true "拷贝角色"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"拷贝成功"}"
-// @Router /authority/copyAuthority [post]
-export const copyAuthority = (data) => {
- return service({
- url: '/authority/copyAuthority',
- method: 'post',
- data
- })
-}
-
-// @Summary 设置角色资源权限
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body sysModel.SysAuthority true "设置角色资源权限"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"设置成功"}"
-// @Router /authority/setDataAuthority [post]
-export const setDataAuthority = (data) => {
- return service({
- url: '/authority/setDataAuthority',
- method: 'post',
- data
- })
-}
-
-// @Summary 修改角色
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysAuthority true "修改角色"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"设置成功"}"
-// @Router /authority/setDataAuthority [post]
-export const updateAuthority = (data) => {
- return service({
- url: '/authority/updateAuthority',
- method: 'put',
- data
- })
-}
-
-/**
- * 获取拥有指定角色的用户ID列表
- * @param {number} authorityId 角色ID
- * @returns {Promise} 用户ID数组
- */
-export const getUsersByAuthorityId = (authorityId) => {
- return service({
- url: '/authority/getUsersByAuthority',
- method: 'get',
- params: { authorityId }
- })
-}
-
-/**
- * 全量覆盖某角色关联的用户列表
- * @param {Object} data
- * @param {number} data.authorityId 角色ID
- * @param {number[]} data.userIds 用户ID列表
- * @returns {Promise}
- */
-export const setRoleUsers = (data) => {
- return service({
- url: '/authority/setRoleUsers',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/authorityBtn.js b/web/src/api/authorityBtn.js
deleted file mode 100644
index e12db47..0000000
--- a/web/src/api/authorityBtn.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import service from '@/utils/request'
-
-export const getAuthorityBtnApi = (data) => {
- return service({
- url: '/authorityBtn/getAuthorityBtn',
- method: 'post',
- data
- })
-}
-
-export const setAuthorityBtnApi = (data) => {
- return service({
- url: '/authorityBtn/setAuthorityBtn',
- method: 'post',
- data
- })
-}
-
-export const canRemoveAuthorityBtnApi = (params) => {
- return service({
- url: '/authorityBtn/canRemoveAuthorityBtn',
- method: 'post',
- params
- })
-}
diff --git a/web/src/api/autoCode.js b/web/src/api/autoCode.js
deleted file mode 100644
index a8147f2..0000000
--- a/web/src/api/autoCode.js
+++ /dev/null
@@ -1,582 +0,0 @@
-import service from '@/utils/request'
-import { useUserStore } from '@/pinia/modules/user'
-
-const DEFAULT_LLM_TIMEOUT = 1000 * 60 * 10
-
-const LLM_AUTO_URL = '/autoCode/llmAuto'
-const LLM_AUTO_SSE_URL = '/autoCode/llmAutoSSE'
-const timerHost = typeof window !== 'undefined' ? window : globalThis
-
-const firstText = (...values) =>
- values.find((item) => typeof item === 'string' && item.trim()) || ''
-
-const mergeStreamText = (current, incoming) => {
- const next = String(incoming || '')
- if (!next) return current
- if (!current) return next
- if (next === current) return current
- if (next.length > current.length && next.startsWith(current)) return next
- return `${current}${next}`
-}
-
-const pickStreamText = (payload) => {
- if (typeof payload === 'string') return payload
- if (!payload || typeof payload !== 'object') return ''
- return firstText(
- payload.answer,
- payload.text,
- payload.content,
- payload.output,
- payload.delta,
- payload.chunk
- )
-}
-
-const parseFetchBody = async (response) => {
- const contentType = String(response.headers.get('content-type') || '').toLowerCase()
- if (contentType.includes('application/json')) {
- return response.json()
- }
- return response.text()
-}
-
-const buildFetchError = async (response) => {
- const body = await parseFetchBody(response)
- const message =
- firstText(body?.msg, body?.message, body?.error) ||
- (typeof body === 'string' ? body.trim() : '') ||
- response.statusText ||
- 'Request failed'
- return new Error(message)
-}
-
-const buildLLMStreamResult = (state) => {
- const payload =
- state.lastPayload && typeof state.lastPayload === 'object'
- ? { ...state.lastPayload }
- : {}
-
- if (state.answerText) {
- if (!firstText(payload.answer, payload.text, payload.content, payload.output)) {
- payload.answer = state.answerText
- } else {
- payload.answer = state.answerText
- }
- }
- if (state.conversationId && !firstText(payload.conversation_id, payload.conversationId)) {
- payload.conversation_id = state.conversationId
- }
- if (state.messageId && !firstText(payload.message_id, payload.messageId)) {
- payload.message_id = state.messageId
- }
- return payload
-}
-
-const createLLMFetchHeaders = (extraHeaders = {}) => {
- const userStore = useUserStore()
- return {
- 'Content-Type': 'application/json',
- Accept: 'text/event-stream',
- 'x-token': userStore.token || '',
- 'x-user-id': userStore.userInfo.ID || userStore.userInfo.id || '',
- ...extraHeaders
- }
-}
-
-export const preview = (data) => {
- return service({
- url: '/autoCode/preview',
- method: 'post',
- data
- })
-}
-
-export const createTemp = (data) => {
- return service({
- url: '/autoCode/createTemp',
- method: 'post',
- data
- })
-}
-
-export const getDB = (params) => {
- return service({
- url: '/autoCode/getDB',
- method: 'get',
- params
- })
-}
-
-export const getTable = (params) => {
- return service({
- url: '/autoCode/getTables',
- method: 'get',
- params
- })
-}
-
-export const getColumn = (params) => {
- return service({
- url: '/autoCode/getColumn',
- method: 'get',
- params
- })
-}
-
-export const getSysHistory = (data) => {
- return service({
- url: '/autoCode/getSysHistory',
- method: 'post',
- data
- })
-}
-
-export const rollback = (data) => {
- return service({
- url: '/autoCode/rollback',
- method: 'post',
- data
- })
-}
-
-export const getMeta = (data) => {
- return service({
- url: '/autoCode/getMeta',
- method: 'post',
- data
- })
-}
-
-export const delSysHistory = (data) => {
- return service({
- url: '/autoCode/delSysHistory',
- method: 'post',
- data
- })
-}
-
-export const createPackageApi = (data) => {
- return service({
- url: '/autoCode/createPackage',
- method: 'post',
- data
- })
-}
-
-export const saveAIWorkflowSession = (data) => {
- return service({
- url: '/autoCode/saveAIWorkflowSession',
- method: 'post',
- data,
- donNotShowLoading: true
- })
-}
-
-export const getAIWorkflowSessionList = (data) => {
- return service({
- url: '/autoCode/getAIWorkflowSessionList',
- method: 'post',
- data,
- donNotShowLoading: true
- })
-}
-
-export const getAIWorkflowSessionDetail = (data) => {
- return service({
- url: '/autoCode/getAIWorkflowSessionDetail',
- method: 'post',
- data,
- donNotShowLoading: true
- })
-}
-
-export const deleteAIWorkflowSession = (data) => {
- return service({
- url: '/autoCode/deleteAIWorkflowSession',
- method: 'post',
- data,
- donNotShowLoading: true
- })
-}
-
-export const dumpAIWorkflowMarkdown = (data) => {
- return service({
- url: '/autoCode/dumpAIWorkflowMarkdown',
- method: 'post',
- data
- })
-}
-
-export const getPackageApi = () => {
- return service({
- url: '/autoCode/getPackage',
- method: 'post'
- })
-}
-
-export const deletePackageApi = (data) => {
- return service({
- url: '/autoCode/delPackage',
- method: 'post',
- data
- })
-}
-
-export const getTemplatesApi = () => {
- return service({
- url: '/autoCode/getTemplates',
- method: 'get'
- })
-}
-
-export const installPlug = (data) => {
- return service({
- url: '/autoCode/installPlug',
- method: 'post',
- data
- })
-}
-
-export const pubPlug = (params) => {
- return service({
- url: '/autoCode/pubPlug',
- method: 'post',
- params
- })
-}
-
-export const llmAuto = (data, options = {}) => {
- return service({
- url: LLM_AUTO_URL,
- method: 'post',
- data: { ...data },
- timeout: options.timeout ?? DEFAULT_LLM_TIMEOUT,
- loadingOption: {
- lock: true,
- fullscreen: true,
- persistLoading: true,
- text: '小淼正在思考,请稍候...'
- },
- donNotShowLoading: options.donNotShowLoading ?? false
- })
-}
-
-const streamLLMRequest = async (url, data, options = {}) => {
- const controller = options.controller || new AbortController()
- const timeout = options.timeout ?? DEFAULT_LLM_TIMEOUT
- let timeoutId = null
- let timeoutTriggered = false
-
- if (timeout > 0) {
- timeoutId = timerHost.setTimeout(() => {
- timeoutTriggered = true
- controller.abort()
- }, timeout)
- }
-
- const state = {
- answerText: '',
- conversationId: '',
- messageId: '',
- lastPayload: null
- }
-
- const handleSSEEvent = (event) => {
- const eventName = firstText(event.event, event.type) || 'message'
- const text = pickStreamText(event)
-
- if (event && typeof event === 'object') {
- state.lastPayload = event
- state.conversationId =
- firstText(event.conversation_id, event.conversationId) ||
- state.conversationId
- state.messageId =
- firstText(event.message_id, event.messageId) || state.messageId
- }
- if (text) {
- state.answerText = mergeStreamText(state.answerText, text)
- }
-
- if (
- eventName === 'error' ||
- event?.error ||
- event?.status === 'error'
- ) {
- throw new Error(
- firstText(event?.message, event?.msg, event?.error) ||
- 'LLM stream failed'
- )
- }
-
- options.onMessage?.({
- event: eventName,
- data: event,
- rawData: JSON.stringify(event),
- text: state.answerText,
- conversationId: state.conversationId,
- messageId: state.messageId
- })
- }
-
- try {
- const fetchUrl = `${import.meta.env.VITE_BASE_API || ''}${url}`
- console.debug('[SSE] fetch →', fetchUrl)
-
- const response = await fetch(fetchUrl, {
- method: 'POST',
- headers: createLLMFetchHeaders(options.headers),
- body: JSON.stringify({
- ...data,
- response_mode: data?.response_mode || 'streaming'
- }),
- signal: controller.signal
- })
-
- if (!response.ok) {
- throw await buildFetchError(response)
- }
-
- const contentType = String(response.headers.get('content-type') || '').toLowerCase()
- if (!contentType.includes('text/event-stream') || !response.body) {
- console.warn('[SSE] 响应非 SSE 格式,Content-Type:', contentType, '| 降级为普通 JSON 解析')
- const body = await parseFetchBody(response)
- if (typeof body?.code !== 'undefined' && body.code !== 0) {
- throw new Error(body.msg || 'LLM request failed')
- }
- return body
- }
- console.debug('[SSE] 已进入流式读取模式')
-
- const reader = response.body.getReader()
- const decoder = new TextDecoder()
- let buffer = ''
- let done = false
-
- while (!done) {
- const result = await reader.read()
- done = result.done
- if (done) break
-
- buffer += decoder.decode(result.value, { stream: true })
- const lines = buffer.split('\n')
- // 最后一个元素可能是不完整的行,保留到下次
- buffer = lines.pop() || ''
-
- for (const line of lines) {
- const trimmed = line.trim()
- if (!trimmed) continue
- if (trimmed.startsWith('data:')) {
- const dataStr = trimmed.slice(5).trim()
- if (!dataStr || dataStr === '[DONE]') continue
- try {
- const event = JSON.parse(dataStr)
- handleSSEEvent(event)
- } catch (e) {
- // 非 JSON 数据,作为文本处理
- if (dataStr) {
- state.answerText += dataStr
- options.onMessage?.({
- event: 'message',
- data: dataStr,
- rawData: dataStr,
- text: state.answerText,
- conversationId: state.conversationId,
- messageId: state.messageId
- })
- }
- }
- }
- }
- }
-
- // 处理 buffer 中剩余的数据
- if (buffer.trim()) {
- const trimmed = buffer.trim()
- if (trimmed.startsWith('data:')) {
- const dataStr = trimmed.slice(5).trim()
- if (dataStr && dataStr !== '[DONE]') {
- try {
- const event = JSON.parse(dataStr)
- handleSSEEvent(event)
- } catch {
- state.answerText += dataStr
- }
- }
- }
- }
-
- return buildLLMStreamResult(state)
- } catch (error) {
- if (controller.signal.aborted && timeoutTriggered) {
- throw new Error('LLM stream request timed out')
- }
- throw error
- } finally {
- if (timeoutId) timerHost.clearTimeout(timeoutId)
- }
-}
-
-export const llmAutoStream = async (data, options = {}) =>
- streamLLMRequest(LLM_AUTO_URL, data, options)
-
-export const llmAutoSSEStream = async (data, options = {}) =>
- streamLLMRequest(LLM_AUTO_SSE_URL, data, options)
-
-export const analyzeRequirementByAI = (data, options = {}) => {
- return llmAuto(
- {
- mode: 'analysisChat',
- ...data
- },
- {
- ...options,
- donNotShowLoading: options.donNotShowLoading ?? true
- }
- )
-}
-
-export const analyzeRequirementByAIStream = (data, options = {}) => {
- return llmAutoStream(
- {
- mode: 'analysisChat',
- ...data
- },
- options
- )
-}
-
-export const analyzeRequirementByAISSEStream = (data, options = {}) => {
- return llmAutoSSEStream(
- {
- mode: 'analysisChat',
- ...data
- },
- options
- )
-}
-
-export const generatePromptFlowByAI = (data, options = {}) => {
- return llmAuto(
- {
- mode: 'workflowPromptChat',
- ...data
- },
- {
- ...options,
- donNotShowLoading: options.donNotShowLoading ?? true
- }
- )
-}
-
-export const generatePromptFlowByAIStream = (data, options = {}) => {
- return llmAutoStream(
- {
- mode: 'workflowPromptChat',
- ...data
- },
- options
- )
-}
-
-export const generatePromptFlowByAISSEStream = (data, options = {}) => {
- return llmAutoSSEStream(
- {
- mode: 'workflowPromptChat',
- ...data
- },
- options
- )
-}
-
-export const addFunc = (data) => {
- return service({
- url: '/autoCode/addFunc',
- method: 'post',
- data
- })
-}
-
-export const initMenu = (data) => {
- return service({
- url: '/autoCode/initMenu',
- method: 'post',
- data
- })
-}
-
-export const initAPI = (data) => {
- return service({
- url: '/autoCode/initAPI',
- method: 'post',
- data
- })
-}
-
-export const initDictionary = (data) => {
- return service({
- url: '/autoCode/initDictionary',
- method: 'post',
- data
- })
-}
-
-export const mcp = (data) => {
- return service({
- url: '/autoCode/mcp',
- method: 'post',
- data
- })
-}
-
-export const mcpStatus = () => {
- return service({
- url: '/autoCode/mcpStatus',
- method: 'post'
- })
-}
-
-export const mcpStart = () => {
- return service({
- url: '/autoCode/mcpStart',
- method: 'post'
- })
-}
-
-export const mcpStop = () => {
- return service({
- url: '/autoCode/mcpStop',
- method: 'post'
- })
-}
-
-export const mcpList = (data) => {
- return service({
- url: '/autoCode/mcpList',
- method: 'post',
- data
- })
-}
-
-export const mcpTest = (data) => {
- return service({
- url: '/autoCode/mcpTest',
- method: 'post',
- data
- })
-}
-
-export const getPluginList = (params) => {
- return service({
- url: '/autoCode/getPluginList',
- method: 'get',
- params
- })
-}
-
-export const removePlugin = (params) => {
- return service({
- url: '/autoCode/removePlugin',
- method: 'post',
- params
- })
-}
diff --git a/web/src/api/breakpoint.js b/web/src/api/breakpoint.js
deleted file mode 100644
index 1dbfba2..0000000
--- a/web/src/api/breakpoint.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import service from '@/utils/request'
-// @Summary 设置角色资源权限
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body sysModel.SysAuthority true "设置角色资源权限"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"设置成功"}"
-// @Router /authority/setDataAuthority [post]
-
-export const findFile = (params) => {
- return service({
- url: '/fileUploadAndDownload/findFile',
- method: 'get',
- params
- })
-}
-
-export const breakpointContinue = (data) => {
- return service({
- url: '/fileUploadAndDownload/breakpointContinue',
- method: 'post',
- donNotShowLoading: true,
- headers: { 'Content-Type': 'multipart/form-data' },
- data
- })
-}
-
-export const breakpointContinueFinish = (params) => {
- return service({
- url: '/fileUploadAndDownload/breakpointContinueFinish',
- method: 'post',
- params
- })
-}
-
-export const removeChunk = (data, params) => {
- return service({
- url: '/fileUploadAndDownload/removeChunk',
- method: 'post',
- data,
- params
- })
-}
diff --git a/web/src/api/casbin.js b/web/src/api/casbin.js
deleted file mode 100644
index 802e130..0000000
--- a/web/src/api/casbin.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import service from '@/utils/request'
-// @Tags authority
-// @Summary 更改角色api权限
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateAuthorityPatams true "更改角色api权限"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /casbin/UpdateCasbin [post]
-export const UpdateCasbin = (data) => {
- return service({
- url: '/casbin/updateCasbin',
- method: 'post',
- data
- })
-}
-
-// @Tags casbin
-// @Summary 获取权限列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.CreateAuthorityPatams true "获取权限列表"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /casbin/getPolicyPathByAuthorityId [post]
-export const getPolicyPathByAuthorityId = (data) => {
- return service({
- url: '/casbin/getPolicyPathByAuthorityId',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/customer.js b/web/src/api/customer.js
deleted file mode 100644
index 4776f1c..0000000
--- a/web/src/api/customer.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysApi
-// @Summary 删除客户
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body dbModel.ExaCustomer true "删除客户"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /customer/customer [post]
-export const createExaCustomer = (data) => {
- return service({
- url: '/customer/customer',
- method: 'post',
- data
- })
-}
-
-// @Tags SysApi
-// @Summary 更新客户信息
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body dbModel.ExaCustomer true "更新客户信息"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /customer/customer [put]
-export const updateExaCustomer = (data) => {
- return service({
- url: '/customer/customer',
- method: 'put',
- data
- })
-}
-
-// @Tags SysApi
-// @Summary 创建客户
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body dbModel.ExaCustomer true "创建客户"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /customer/customer [delete]
-export const deleteExaCustomer = (data) => {
- return service({
- url: '/customer/customer',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysApi
-// @Summary 获取单一客户信息
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body dbModel.ExaCustomer true "获取单一客户信息"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /customer/customer [get]
-export const getExaCustomer = (params) => {
- return service({
- url: '/customer/customer',
- method: 'get',
- params
- })
-}
-
-// @Tags SysApi
-// @Summary 获取权限客户列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body modelInterface.PageInfo true "获取权限客户列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /customer/customerList [get]
-export const getExaCustomerList = (params) => {
- return service({
- url: '/customer/customerList',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/email.js b/web/src/api/email.js
deleted file mode 100644
index c2f16f4..0000000
--- a/web/src/api/email.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import service from '@/utils/request'
-// @Tags email
-// @Summary 发送测试邮件
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
-// @Router /email/emailTest [post]
-export const emailTest = (data) => {
- return service({
- url: '/email/emailTest',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/exportTemplate.js b/web/src/api/exportTemplate.js
deleted file mode 100644
index 753547d..0000000
--- a/web/src/api/exportTemplate.js
+++ /dev/null
@@ -1,145 +0,0 @@
-import service from '@/utils/request'
-
-// @Tags SysExportTemplate
-// @Summary 创建导出模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysExportTemplate true "创建导出模板"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
-// @Router /sysExportTemplate/createSysExportTemplate [post]
-export const createSysExportTemplate = (data) => {
- return service({
- url: '/sysExportTemplate/createSysExportTemplate',
- method: 'post',
- data
- })
-}
-
-// @Tags SysExportTemplate
-// @Summary 删除导出模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysExportTemplate true "删除导出模板"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysExportTemplate/deleteSysExportTemplate [delete]
-export const deleteSysExportTemplate = (data) => {
- return service({
- url: '/sysExportTemplate/deleteSysExportTemplate',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysExportTemplate
-// @Summary 批量删除导出模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "批量删除导出模板"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysExportTemplate/deleteSysExportTemplate [delete]
-export const deleteSysExportTemplateByIds = (data) => {
- return service({
- url: '/sysExportTemplate/deleteSysExportTemplateByIds',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysExportTemplate
-// @Summary 更新导出模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysExportTemplate true "更新导出模板"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /sysExportTemplate/updateSysExportTemplate [put]
-export const updateSysExportTemplate = (data) => {
- return service({
- url: '/sysExportTemplate/updateSysExportTemplate',
- method: 'put',
- data
- })
-}
-
-// @Tags SysExportTemplate
-// @Summary 用id查询导出模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query model.SysExportTemplate true "用id查询导出模板"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysExportTemplate/findSysExportTemplate [get]
-export const findSysExportTemplate = (params) => {
- return service({
- url: '/sysExportTemplate/findSysExportTemplate',
- method: 'get',
- params
- })
-}
-
-// @Tags SysExportTemplate
-// @Summary 分页获取导出模板列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query request.PageInfo true "分页获取导出模板列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysExportTemplate/getSysExportTemplateList [get]
-export const getSysExportTemplateList = (params) => {
- return service({
- url: '/sysExportTemplate/getSysExportTemplateList',
- method: 'get',
- params
- })
-}
-
-
-// ExportExcel 导出表格token
-// @Tags SysExportTemplate
-// @Summary 导出表格
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Router /sysExportTemplate/exportExcel [get]
-export const exportExcel = (params) => {
- return service({
- url: '/sysExportTemplate/exportExcel',
- method: 'get',
- params
- })
-}
-
-// ExportTemplate 导出表格模板
-// @Tags SysExportTemplate
-// @Summary 导出表格模板
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Router /sysExportTemplate/exportTemplate [get]
-export const exportTemplate = (params) => {
- return service({
- url: '/sysExportTemplate/exportTemplate',
- method: 'get',
- params
- })
-}
-
-// PreviewSQL 预览最终生成的SQL
-// @Tags SysExportTemplate
-// @Summary 预览最终生成的SQL
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Router /sysExportTemplate/previewSQL [get]
-// @Param templateID query string true "导出模板ID"
-// @Param params query string false "查询参数编码字符串,参考 ExportExcel 组件"
-export const previewSQL = (params) => {
- return service({
- url: '/sysExportTemplate/previewSQL',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/fileUploadAndDownload.js b/web/src/api/fileUploadAndDownload.js
deleted file mode 100644
index 0f260b6..0000000
--- a/web/src/api/fileUploadAndDownload.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import service from '@/utils/request'
-// @Tags FileUploadAndDownload
-// @Summary 分页文件列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body modelInterface.PageInfo true "分页获取文件户列表"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /fileUploadAndDownload/getFileList [post]
-export const getFileList = (data) => {
- return service({
- url: '/fileUploadAndDownload/getFileList',
- method: 'post',
- data
- })
-}
-
-// @Tags FileUploadAndDownload
-// @Summary 删除文件
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Param data body dbModel.FileUploadAndDownload true "传入文件里面id即可"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"返回成功"}"
-// @Router /fileUploadAndDownload/deleteFile [post]
-export const deleteFile = (data) => {
- return service({
- url: '/fileUploadAndDownload/deleteFile',
- method: 'post',
- data
- })
-}
-
-/**
- * 编辑文件名或者备注
- * @param data
- * @returns {*}
- */
-export const editFileName = (data) => {
- return service({
- url: '/fileUploadAndDownload/editFileName',
- method: 'post',
- data
- })
-}
-
-/**
- * 导入URL
- * @param data
- * @returns {*}
- */
-export const importURL = (data) => {
- return service({
- url: '/fileUploadAndDownload/importURL',
- method: 'post',
- data
- })
-}
-
-
-// 上传文件 暂时用于头像上传
-export const uploadFile = (data) => {
- return service({
- url: "/fileUploadAndDownload/upload",
- method: "post",
- data,
- });
-};
\ No newline at end of file
diff --git a/web/src/api/github.js b/web/src/api/github.js
deleted file mode 100644
index 38e1067..0000000
--- a/web/src/api/github.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import axios from 'axios'
-
-const service = axios.create()
-
-export function Commits(page) {
- return service({
- url:
- 'https://api.github.com/repos/flipped-aurora/gin-vue-admin/commits?page=' +
- page,
- method: 'get'
- })
-}
-
-export function Members() {
- return service({
- url: 'https://api.github.com/orgs/FLIPPED-AURORA/members',
- method: 'get'
- })
-}
diff --git a/web/src/api/initdb.js b/web/src/api/initdb.js
deleted file mode 100644
index f1eb2f4..0000000
--- a/web/src/api/initdb.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import service from '@/utils/request'
-// @Tags InitDB
-// @Summary 初始化用户数据库
-// @Produce application/json
-// @Param data body request.InitDB true "初始化数据库参数"
-// @Success 200 {string} string "{"code":0,"data":{},"msg":"自动创建数据库成功"}"
-// @Router /init/initdb [post]
-export const initDB = (data) => {
- return service({
- url: '/init/initdb',
- method: 'post',
- data,
- donNotShowLoading: true
- })
-}
-
-// @Tags CheckDB
-// @Summary 初始化用户数据库
-// @Produce application/json
-// @Success 200 {string} string "{"code":0,"data":{},"msg":"探测完成"}"
-// @Router /init/checkdb [post]
-export const checkDB = () => {
- return service({
- url: '/init/checkdb',
- method: 'post'
- })
-}
diff --git a/web/src/api/jwt.js b/web/src/api/jwt.js
deleted file mode 100644
index 811ffc4..0000000
--- a/web/src/api/jwt.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import service from '@/utils/request'
-// @Tags jwt
-// @Summary jwt加入黑名单
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"拉黑成功"}"
-// @Router /jwt/jsonInBlacklist [post]
-export const jsonInBlacklist = () => {
- return service({
- url: '/jwt/jsonInBlacklist',
- method: 'post'
- })
-}
diff --git a/web/src/api/menu.js b/web/src/api/menu.js
deleted file mode 100644
index 9e7398d..0000000
--- a/web/src/api/menu.js
+++ /dev/null
@@ -1,141 +0,0 @@
-import service from '@/utils/request'
-// @Summary 用户登录 获取动态路由
-// @Produce application/json
-// @Param 可以什么都不填 调一下即可
-// @Router /menu/getMenu [post]
-export const asyncMenu = () => {
- return service({
- url: '/menu/getMenu',
- method: 'post'
- })
-}
-
-// @Summary 获取menu列表
-// @Produce application/json
-// @Param {
-// page int
-// pageSize int
-// }
-// @Router /menu/getMenuList [post]
-export const getMenuList = (data) => {
- return service({
- url: '/menu/getMenuList',
- method: 'post',
- data
- })
-}
-
-// @Summary 新增基础menu
-// @Produce application/json
-// @Param menu Object
-// @Router /menu/getMenuList [post]
-export const addBaseMenu = (data) => {
- return service({
- url: '/menu/addBaseMenu',
- method: 'post',
- data
- })
-}
-
-// @Summary 获取基础路由列表
-// @Produce application/json
-// @Param 可以什么都不填 调一下即可
-// @Router /menu/getBaseMenuTree [post]
-export const getBaseMenuTree = () => {
- return service({
- url: '/menu/getBaseMenuTree',
- method: 'post'
- })
-}
-
-// @Summary 添加用户menu关联关系
-// @Produce application/json
-// @Param menus Object authorityId string
-// @Router /menu/getMenuList [post]
-export const addMenuAuthority = (data) => {
- return service({
- url: '/menu/addMenuAuthority',
- method: 'post',
- data
- })
-}
-
-// @Summary 获取用户menu关联关系
-// @Produce application/json
-// @Param authorityId string
-// @Router /menu/getMenuAuthority [post]
-export const getMenuAuthority = (data) => {
- return service({
- url: '/menu/getMenuAuthority',
- method: 'post',
- data
- })
-}
-
-// @Summary 删除menu
-// @Produce application/json
-// @Param ID float64
-// @Router /menu/deleteBaseMenu [post]
-export const deleteBaseMenu = (data) => {
- return service({
- url: '/menu/deleteBaseMenu',
- method: 'post',
- data
- })
-}
-
-// @Summary 修改menu列表
-// @Produce application/json
-// @Param menu Object
-// @Router /menu/updateBaseMenu [post]
-export const updateBaseMenu = (data) => {
- return service({
- url: '/menu/updateBaseMenu',
- method: 'post',
- data
- })
-}
-
-// @Tags menu
-// @Summary 根据id获取菜单
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.GetById true "根据id获取菜单"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /menu/getBaseMenuById [post]
-export const getBaseMenuById = (data) => {
- return service({
- url: '/menu/getBaseMenuById',
- method: 'post',
- data
- })
-}
-
-/**
- * 获取拥有指定菜单的角色ID列表
- * @param {number} menuId 菜单ID
- * @returns {Promise} 角色ID数组
- */
-export const getMenuRoles = (menuId) => {
- return service({
- url: '/menu/getMenuRoles',
- method: 'get',
- params: { menuId }
- })
-}
-
-/**
- * 全量覆盖某菜单关联的角色列表
- * @param {Object} data
- * @param {number} data.menuId 菜单ID
- * @param {number[]} data.authorityIds 角色ID列表
- * @returns {Promise}
- */
-export const setMenuRoles = (data) => {
- return service({
- url: '/menu/setMenuRoles',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/plugin/api.js b/web/src/api/plugin/api.js
deleted file mode 100644
index 5b37c2f..0000000
--- a/web/src/api/plugin/api.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import service from '@/utils/request'
-
-export const getShopPluginList = (params) => {
- return service({
- baseURL: "plugin",
- url: '/shopPlugin/getShopPluginList',
- method: 'get',
- params
- })
-}
\ No newline at end of file
diff --git a/web/src/api/skills.js b/web/src/api/skills.js
deleted file mode 100644
index 801c52e..0000000
--- a/web/src/api/skills.js
+++ /dev/null
@@ -1,169 +0,0 @@
-import service from '@/utils/request'
-
-export const getSkillTools = () => {
- return service({
- url: '/skills/getTools',
- method: 'get'
- })
-}
-
-export const getSkillList = (data) => {
- return service({
- url: '/skills/getSkillList',
- method: 'post',
- data
- })
-}
-
-export const getSkillDetail = (data) => {
- return service({
- url: '/skills/getSkillDetail',
- method: 'post',
- data
- })
-}
-
-export const saveSkill = (data) => {
- return service({
- url: '/skills/saveSkill',
- method: 'post',
- data
- })
-}
-
-export const deleteSkill = (data) => {
- return service({
- url: '/skills/deleteSkill',
- method: 'post',
- data
- })
-}
-
-export const createSkillScript = (data) => {
- return service({
- url: '/skills/createScript',
- method: 'post',
- data
- })
-}
-
-export const getSkillScript = (data) => {
- return service({
- url: '/skills/getScript',
- method: 'post',
- data
- })
-}
-
-export const saveSkillScript = (data) => {
- return service({
- url: '/skills/saveScript',
- method: 'post',
- data
- })
-}
-
-export const createSkillResource = (data) => {
- return service({
- url: '/skills/createResource',
- method: 'post',
- data
- })
-}
-
-export const getSkillResource = (data) => {
- return service({
- url: '/skills/getResource',
- method: 'post',
- data
- })
-}
-
-export const saveSkillResource = (data) => {
- return service({
- url: '/skills/saveResource',
- method: 'post',
- data
- })
-}
-
-export const createSkillReference = (data) => {
- return service({
- url: '/skills/createReference',
- method: 'post',
- data
- })
-}
-
-export const getSkillReference = (data) => {
- return service({
- url: '/skills/getReference',
- method: 'post',
- data
- })
-}
-
-export const saveSkillReference = (data) => {
- return service({
- url: '/skills/saveReference',
- method: 'post',
- data
- })
-}
-
-export const createSkillTemplate = (data) => {
- return service({
- url: '/skills/createTemplate',
- method: 'post',
- data
- })
-}
-
-export const getSkillTemplate = (data) => {
- return service({
- url: '/skills/getTemplate',
- method: 'post',
- data
- })
-}
-
-export const saveSkillTemplate = (data) => {
- return service({
- url: '/skills/saveTemplate',
- method: 'post',
- data
- })
-}
-
-export const getGlobalConstraint = (data) => {
- return service({
- url: '/skills/getGlobalConstraint',
- method: 'post',
- data
- })
-}
-
-export const saveGlobalConstraint = (data) => {
- return service({
- url: '/skills/saveGlobalConstraint',
- method: 'post',
- data
- })
-}
-
-export const packageSkill = (data) => {
- return service({
- url: '/skills/packageSkill',
- method: 'post',
- data,
- responseType: 'blob'
- })
-}
-
-export const downloadOnlineSkill = (data) => {
- return service({
- url: '/skills/downloadOnlineSkill',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/sysApiToken.js b/web/src/api/sysApiToken.js
deleted file mode 100644
index f95c714..0000000
--- a/web/src/api/sysApiToken.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import service from '@/utils/request'
-
-export const createApiToken = (data) => {
- return service({
- url: '/sysApiToken/createApiToken',
- method: 'post',
- data
- })
-}
-
-export const getApiTokenList = (data) => {
- return service({
- url: '/sysApiToken/getApiTokenList',
- method: 'post',
- data
- })
-}
-
-export const deleteApiToken = (data) => {
- return service({
- url: '/sysApiToken/deleteApiToken',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/sysDictionary.js b/web/src/api/sysDictionary.js
deleted file mode 100644
index 90a2583..0000000
--- a/web/src/api/sysDictionary.js
+++ /dev/null
@@ -1,112 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysDictionary
-// @Summary 创建SysDictionary
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionary true "创建SysDictionary"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionary/createSysDictionary [post]
-export const createSysDictionary = (data) => {
- return service({
- url: '/sysDictionary/createSysDictionary',
- method: 'post',
- data
- })
-}
-
-// @Tags SysDictionary
-// @Summary 删除SysDictionary
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionary true "删除SysDictionary"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysDictionary/deleteSysDictionary [delete]
-export const deleteSysDictionary = (data) => {
- return service({
- url: '/sysDictionary/deleteSysDictionary',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysDictionary
-// @Summary 更新SysDictionary
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionary true "更新SysDictionary"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /sysDictionary/updateSysDictionary [put]
-export const updateSysDictionary = (data) => {
- return service({
- url: '/sysDictionary/updateSysDictionary',
- method: 'put',
- data
- })
-}
-
-// @Tags SysDictionary
-// @Summary 用id查询SysDictionary
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionary true "用id查询SysDictionary"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysDictionary/findSysDictionary [get]
-export const findSysDictionary = (params) => {
- return service({
- url: '/sysDictionary/findSysDictionary',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionary
-// @Summary 分页获取SysDictionary列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.PageInfo true "分页获取SysDictionary列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionary/getSysDictionaryList [get]
-export const getSysDictionaryList = (params) => {
- return service({
- url: '/sysDictionary/getSysDictionaryList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionary
-// @Summary 导出字典JSON(包含字典详情)
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query model.SysDictionary true "字典ID"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"导出成功"}"
-// @Router /sysDictionary/exportSysDictionary [get]
-export const exportSysDictionary = (params) => {
- return service({
- url: '/sysDictionary/exportSysDictionary',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionary
-// @Summary 导入字典JSON(包含字典详情)
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body object true "字典JSON数据"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"导入成功"}"
-// @Router /sysDictionary/importSysDictionary [post]
-export const importSysDictionary = (data) => {
- return service({
- url: '/sysDictionary/importSysDictionary',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/sysDictionaryDetail.js b/web/src/api/sysDictionaryDetail.js
deleted file mode 100644
index 1f4ab73..0000000
--- a/web/src/api/sysDictionaryDetail.js
+++ /dev/null
@@ -1,145 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysDictionaryDetail
-// @Summary 创建SysDictionaryDetail
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionaryDetail true "创建SysDictionaryDetail"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/createSysDictionaryDetail [post]
-export const createSysDictionaryDetail = (data) => {
- return service({
- url: '/sysDictionaryDetail/createSysDictionaryDetail',
- method: 'post',
- data
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 删除SysDictionaryDetail
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionaryDetail true "删除SysDictionaryDetail"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysDictionaryDetail/deleteSysDictionaryDetail [delete]
-export const deleteSysDictionaryDetail = (data) => {
- return service({
- url: '/sysDictionaryDetail/deleteSysDictionaryDetail',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 更新SysDictionaryDetail
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionaryDetail true "更新SysDictionaryDetail"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /sysDictionaryDetail/updateSysDictionaryDetail [put]
-export const updateSysDictionaryDetail = (data) => {
- return service({
- url: '/sysDictionaryDetail/updateSysDictionaryDetail',
- method: 'put',
- data
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 用id查询SysDictionaryDetail
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysDictionaryDetail true "用id查询SysDictionaryDetail"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysDictionaryDetail/findSysDictionaryDetail [get]
-export const findSysDictionaryDetail = (params) => {
- return service({
- url: '/sysDictionaryDetail/findSysDictionaryDetail',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 分页获取SysDictionaryDetail列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.PageInfo true "分页获取SysDictionaryDetail列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/getSysDictionaryDetailList [get]
-export const getSysDictionaryDetailList = (params) => {
- return service({
- url: '/sysDictionaryDetail/getSysDictionaryDetailList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 获取层级字典详情树形结构(根据字典ID)
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param sysDictionaryID query string true "字典ID"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/getDictionaryTreeList [get]
-export const getDictionaryTreeList = (params) => {
- return service({
- url: '/sysDictionaryDetail/getDictionaryTreeList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 获取层级字典详情树形结构(根据字典类型)
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param dictType query string true "字典类型"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/getDictionaryTreeListByType [get]
-export const getDictionaryTreeListByType = (params) => {
- return service({
- url: '/sysDictionaryDetail/getDictionaryTreeListByType',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 根据父级ID获取字典详情
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param parentID query string true "父级ID"
-// @Param includeChildren query boolean false "是否包含子级"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/getDictionaryDetailsByParent [get]
-export const getDictionaryDetailsByParent = (params) => {
- return service({
- url: '/sysDictionaryDetail/getDictionaryDetailsByParent',
- method: 'get',
- params
- })
-}
-
-// @Tags SysDictionaryDetail
-// @Summary 获取字典详情的完整路径
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param ID query string true "字典详情ID"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysDictionaryDetail/getDictionaryPath [get]
-export const getDictionaryPath = (params) => {
- return service({
- url: '/sysDictionaryDetail/getDictionaryPath',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/sysLoginLog.js b/web/src/api/sysLoginLog.js
deleted file mode 100644
index 4c96de2..0000000
--- a/web/src/api/sysLoginLog.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import service from '@/utils/request'
-
-export const deleteLoginLog = (data) => {
- return service({
- url: '/sysLoginLog/deleteLoginLog',
- method: 'delete',
- data
- })
-}
-
-export const deleteLoginLogByIds = (data) => {
- return service({
- url: '/sysLoginLog/deleteLoginLogByIds',
- method: 'delete',
- data
- })
-}
-
-export const getLoginLogList = (params) => {
- return service({
- url: '/sysLoginLog/getLoginLogList',
- method: 'get',
- params
- })
-}
-
-export const findLoginLog = (params) => {
- return service({
- url: '/sysLoginLog/findLoginLog',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/sysOperationRecord.js b/web/src/api/sysOperationRecord.js
deleted file mode 100644
index 4428c03..0000000
--- a/web/src/api/sysOperationRecord.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysOperationRecord
-// @Summary 删除SysOperationRecord
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysOperationRecord true "删除SysOperationRecord"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysOperationRecord/deleteSysOperationRecord [delete]
-export const deleteSysOperationRecord = (data) => {
- return service({
- url: '/sysOperationRecord/deleteSysOperationRecord',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysOperationRecord
-// @Summary 删除SysOperationRecord
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "删除SysOperationRecord"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysOperationRecord/deleteSysOperationRecord [delete]
-export const deleteSysOperationRecordByIds = (data) => {
- return service({
- url: '/sysOperationRecord/deleteSysOperationRecordByIds',
- method: 'delete',
- data
- })
-}
-
-// @Tags SysOperationRecord
-// @Summary 分页获取SysOperationRecord列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.PageInfo true "分页获取SysOperationRecord列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysOperationRecord/getSysOperationRecordList [get]
-export const getSysOperationRecordList = (params) => {
- return service({
- url: '/sysOperationRecord/getSysOperationRecordList',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/sysParams.js b/web/src/api/sysParams.js
deleted file mode 100644
index 348f1b5..0000000
--- a/web/src/api/sysParams.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysParams
-// @Summary 创建参数
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysParams true "创建参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
-// @Router /sysParams/createSysParams [post]
-export const createSysParams = (data) => {
- return service({
- url: '/sysParams/createSysParams',
- method: 'post',
- data
- })
-}
-
-// @Tags SysParams
-// @Summary 删除参数
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysParams true "删除参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysParams/deleteSysParams [delete]
-export const deleteSysParams = (params) => {
- return service({
- url: '/sysParams/deleteSysParams',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysParams
-// @Summary 批量删除参数
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "批量删除参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysParams/deleteSysParams [delete]
-export const deleteSysParamsByIds = (params) => {
- return service({
- url: '/sysParams/deleteSysParamsByIds',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysParams
-// @Summary 更新参数
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysParams true "更新参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /sysParams/updateSysParams [put]
-export const updateSysParams = (data) => {
- return service({
- url: '/sysParams/updateSysParams',
- method: 'put',
- data
- })
-}
-
-// @Tags SysParams
-// @Summary 用id查询参数
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query model.SysParams true "用id查询参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysParams/findSysParams [get]
-export const findSysParams = (params) => {
- return service({
- url: '/sysParams/findSysParams',
- method: 'get',
- params
- })
-}
-
-// @Tags SysParams
-// @Summary 分页获取参数列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query request.PageInfo true "分页获取参数列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysParams/getSysParamsList [get]
-export const getSysParamsList = (params) => {
- return service({
- url: '/sysParams/getSysParamsList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysParams
-// @Summary 不需要鉴权的参数接口
-// @accept application/json
-// @Produce application/json
-// @Param data query systemReq.SysParamsSearch true "分页获取参数列表"
-// @Success 200 {object} response.Response{data=object,msg=string} "获取成功"
-// @Router /sysParams/getSysParam [get]
-export const getSysParam = (params) => {
- return service({
- url: '/sysParams/getSysParam',
- method: 'get',
- params
- })
-}
diff --git a/web/src/api/system.js b/web/src/api/system.js
deleted file mode 100644
index ff41abf..0000000
--- a/web/src/api/system.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import service from '@/utils/request'
-// @Tags systrm
-// @Summary 获取配置文件内容
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
-// @Router /system/getSystemConfig [post]
-export const getSystemConfig = () => {
- return service({
- url: '/system/getSystemConfig',
- method: 'post'
- })
-}
-
-// @Tags system
-// @Summary 设置配置文件内容
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Param data body sysModel.System true
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
-// @Router /system/setSystemConfig [post]
-export const setSystemConfig = (data) => {
- return service({
- url: '/system/setSystemConfig',
- method: 'post',
- data
- })
-}
-
-// @Tags system
-// @Summary 获取服务器运行状态
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
-// @Router /system/getServerInfo [post]
-export const getSystemState = () => {
- return service({
- url: '/system/getServerInfo',
- method: 'post',
- donNotShowLoading: true
- })
-}
-
-/**
- * 重载服务
- * @param data
- * @returns {*}
- */
-export const reloadSystem = (data) => {
- return service({
- url: '/system/reloadSystem',
- method: 'post',
- data
- })
-}
diff --git a/web/src/api/system/sysError.js b/web/src/api/system/sysError.js
deleted file mode 100644
index 4b3271b..0000000
--- a/web/src/api/system/sysError.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import service from '@/utils/request'
-// @Tags SysError
-// @Summary 创建错误日志
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body model.SysError true "创建错误日志"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
-// @Router /sysError/createSysError [post]
-export const createSysError = (data) => {
- return service({
- url: '/sysError/createSysError',
- method: 'post',
- data
- })
-}
-
-// @Tags SysError
-// @Summary 删除错误日志
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body model.SysError true "删除错误日志"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysError/deleteSysError [delete]
-export const deleteSysError = (params) => {
- return service({
- url: '/sysError/deleteSysError',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysError
-// @Summary 批量删除错误日志
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "批量删除错误日志"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysError/deleteSysError [delete]
-export const deleteSysErrorByIds = (params) => {
- return service({
- url: '/sysError/deleteSysErrorByIds',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysError
-// @Summary 更新错误日志
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body model.SysError true "更新错误日志"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /sysError/updateSysError [put]
-export const updateSysError = (data) => {
- return service({
- url: '/sysError/updateSysError',
- method: 'put',
- data
- })
-}
-
-// @Tags SysError
-// @Summary 用id查询错误日志
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data query model.SysError true "用id查询错误日志"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysError/findSysError [get]
-export const findSysError = (params) => {
- return service({
- url: '/sysError/findSysError',
- method: 'get',
- params
- })
-}
-
-// @Tags SysError
-// @Summary 分页获取错误日志列表
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data query request.PageInfo true "分页获取错误日志列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysError/getSysErrorList [get]
-export const getSysErrorList = (params) => {
- return service({
- url: '/sysError/getSysErrorList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysError
-// @Summary 不需要鉴权的错误日志接口
-// @Accept application/json
-// @Produce application/json
-// @Param data query systemReq.SysErrorSearch true "分页获取错误日志列表"
-// @Success 200 {object} response.Response{data=object,msg=string} "获取成功"
-// @Router /sysError/getSysErrorPublic [get]
-export const getSysErrorPublic = () => {
- return service({
- url: '/sysError/getSysErrorPublic',
- method: 'get',
- })
-}
-
-// @Tags SysError
-// @Summary 触发错误处理(异步)
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param id query string true "错误日志ID"
-// @Success 200 {string} string "{\"success\":true,\"data\":{},\"msg\":\"处理已提交\"}"
-// @Router /sysError/getSysErrorSolution [get]
-export const getSysErrorSolution = (params) => {
- return service({
- url: '/sysError/getSysErrorSolution',
- method: 'get',
- params
- })
-}
\ No newline at end of file
diff --git a/web/src/api/user.js b/web/src/api/user.js
deleted file mode 100644
index 2b357d0..0000000
--- a/web/src/api/user.js
+++ /dev/null
@@ -1,181 +0,0 @@
-import service from '@/utils/request'
-// @Summary 用户登录
-// @Produce application/json
-// @Param data body {username:"string",password:"string"}
-// @Router /base/login [post]
-export const login = (data) => {
- return service({
- url: '/base/login',
- method: 'post',
- data: data
- })
-}
-
-// @Summary 获取验证码
-// @Produce application/json
-// @Param data body {username:"string",password:"string"}
-// @Router /base/captcha [post]
-export const captcha = () => {
- return service({
- url: '/base/captcha',
- method: 'post'
- })
-}
-
-// @Summary 用户注册
-// @Produce application/json
-// @Param data body {username:"string",password:"string"}
-// @Router /base/resige [post]
-export const register = (data) => {
- return service({
- url: '/user/admin_register',
- method: 'post',
- data: data
- })
-}
-
-// @Summary 修改密码
-// @Produce application/json
-// @Param data body {username:"string",password:"string",newPassword:"string"}
-// @Router /user/changePassword [post]
-export const changePassword = (data) => {
- return service({
- url: '/user/changePassword',
- method: 'post',
- data: data
- })
-}
-
-// @Tags User
-// @Summary 分页获取用户列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body modelInterface.PageInfo true "分页获取用户列表"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /user/getUserList [post]
-export const getUserList = (data) => {
- return service({
- url: '/user/getUserList',
- method: 'post',
- data: data
- })
-}
-
-// @Tags User
-// @Summary 设置用户权限
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.SetUserAuth true "设置用户权限"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/setUserAuthority [post]
-export const setUserAuthority = (data) => {
- return service({
- url: '/user/setUserAuthority',
- method: 'post',
- data: data
- })
-}
-
-// @Tags SysUser
-// @Summary 删除用户
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.SetUserAuth true "删除用户"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/deleteUser [delete]
-export const deleteUser = (data) => {
- return service({
- url: '/user/deleteUser',
- method: 'delete',
- data: data
- })
-}
-
-// @Tags SysUser
-// @Summary 设置用户信息
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysUser true "设置用户信息"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/setUserInfo [put]
-export const setUserInfo = (data) => {
- return service({
- url: '/user/setUserInfo',
- method: 'put',
- data: data
- })
-}
-
-// @Tags SysUser
-// @Summary 设置用户信息
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysUser true "设置用户信息"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/setSelfInfo [put]
-export const setSelfInfo = (data) => {
- return service({
- url: '/user/setSelfInfo',
- method: 'put',
- data: data
- })
-}
-
-// @Tags SysUser
-// @Summary 设置自身界面配置
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.SysUser true "设置自身界面配置"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/setSelfSetting [put]
-export const setSelfSetting = (data) => {
- return service({
- url: '/user/setSelfSetting',
- method: 'put',
- data: data
- })
-}
-
-// @Tags User
-// @Summary 设置用户权限
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body api.setUserAuthorities true "设置用户权限"
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"修改成功"}"
-// @Router /user/setUserAuthorities [post]
-export const setUserAuthorities = (data) => {
- return service({
- url: '/user/setUserAuthorities',
- method: 'post',
- data: data
- })
-}
-
-// @Tags User
-// @Summary 获取用户信息
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /user/getUserInfo [get]
-export const getUserInfo = () => {
- return service({
- url: '/user/getUserInfo',
- method: 'get'
- })
-}
-
-export const resetPassword = (data) => {
- return service({
- url: '/user/resetPassword',
- method: 'post',
- data: data
- })
-}
diff --git a/web/src/api/version.js b/web/src/api/version.js
deleted file mode 100644
index b5b7dcc..0000000
--- a/web/src/api/version.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import service from '@/utils/request'
-
-// @Tags SysVersion
-// @Summary 删除版本管理
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body model.SysVersion true "删除版本管理"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysVersion/deleteSysVersion [delete]
-export const deleteSysVersion = (params) => {
- return service({
- url: '/sysVersion/deleteSysVersion',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysVersion
-// @Summary 批量删除版本管理
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "批量删除版本管理"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /sysVersion/deleteSysVersion [delete]
-export const deleteSysVersionByIds = (params) => {
- return service({
- url: '/sysVersion/deleteSysVersionByIds',
- method: 'delete',
- params
- })
-}
-
-// @Tags SysVersion
-// @Summary 用id查询版本管理
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data query model.SysVersion true "用id查询版本管理"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /sysVersion/findSysVersion [get]
-export const findSysVersion = (params) => {
- return service({
- url: '/sysVersion/findSysVersion',
- method: 'get',
- params
- })
-}
-
-// @Tags SysVersion
-// @Summary 分页获取版本管理列表
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data query request.PageInfo true "分页获取版本管理列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /sysVersion/getSysVersionList [get]
-export const getSysVersionList = (params) => {
- return service({
- url: '/sysVersion/getSysVersionList',
- method: 'get',
- params
- })
-}
-
-// @Tags SysVersion
-// @Summary 导出版本数据
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body object true "导出版本数据"
-// @Success 200 {string} string "{\"success\":true,\"data\":{},\"msg\":\"导出成功\"}"
-// @Router /sysVersion/exportVersion [post]
-export const exportVersion = (data) => {
- return service({
- url: '/sysVersion/exportVersion',
- method: 'post',
- data
- })
-}
-
-// @Tags SysVersion
-// @Summary 下载版本JSON数据
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param ID query string true "版本ID"
-// @Success 200 {string} string "{\"success\":true,\"data\":{},\"msg\":\"下载成功\"}"
-// @Router /sysVersion/downloadVersionJson [get]
-export const downloadVersionJson = (params) => {
- return service({
- url: '/sysVersion/downloadVersionJson',
- method: 'get',
- params,
- responseType: 'blob'
- })
-}
-
-// @Tags SysVersion
-// @Summary 导入版本数据
-// @Security ApiKeyAuth
-// @Accept application/json
-// @Produce application/json
-// @Param data body object true "版本JSON数据"
-// @Success 200 {string} string "{\"success\":true,\"data\":{},\"msg\":\"导入成功\"}"
-// @Router /sysVersion/importVersion [post]
-export const importVersion = (data) => {
- return service({
- url: '/sysVersion/importVersion',
- method: 'post',
- data
- })
-}
diff --git a/web/src/assets/404.png b/web/src/assets/404.png
deleted file mode 100644
index f803724..0000000
Binary files a/web/src/assets/404.png and /dev/null differ
diff --git a/web/src/assets/background.svg b/web/src/assets/background.svg
deleted file mode 100644
index 7375bb5..0000000
--- a/web/src/assets/background.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/banner.jpg b/web/src/assets/banner.jpg
deleted file mode 100644
index 675411e..0000000
Binary files a/web/src/assets/banner.jpg and /dev/null differ
diff --git a/web/src/assets/banner2.jpg b/web/src/assets/banner2.jpg
deleted file mode 100644
index 62e08a4..0000000
Binary files a/web/src/assets/banner2.jpg and /dev/null differ
diff --git a/web/src/assets/dashboard.png b/web/src/assets/dashboard.png
deleted file mode 100644
index 64981d0..0000000
Binary files a/web/src/assets/dashboard.png and /dev/null differ
diff --git a/web/src/assets/docs.png b/web/src/assets/docs.png
deleted file mode 100644
index bb98d6e..0000000
Binary files a/web/src/assets/docs.png and /dev/null differ
diff --git a/web/src/assets/flipped-aurora.png b/web/src/assets/flipped-aurora.png
deleted file mode 100644
index c94033b..0000000
Binary files a/web/src/assets/flipped-aurora.png and /dev/null differ
diff --git a/web/src/assets/github.png b/web/src/assets/github.png
deleted file mode 100644
index d1d200e..0000000
Binary files a/web/src/assets/github.png and /dev/null differ
diff --git a/web/src/assets/icons/ai-gva.svg b/web/src/assets/icons/ai-gva.svg
deleted file mode 100644
index fcbea93..0000000
--- a/web/src/assets/icons/ai-gva.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/close.svg b/web/src/assets/icons/close.svg
deleted file mode 100644
index 1b1f631..0000000
--- a/web/src/assets/icons/close.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/customer-gva.svg b/web/src/assets/icons/customer-gva.svg
deleted file mode 100644
index 1e72201..0000000
--- a/web/src/assets/icons/customer-gva.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/idea.svg b/web/src/assets/icons/idea.svg
deleted file mode 100644
index eac5a0d..0000000
--- a/web/src/assets/icons/idea.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/lock.svg b/web/src/assets/icons/lock.svg
deleted file mode 100644
index 4685191..0000000
--- a/web/src/assets/icons/lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/server.svg b/web/src/assets/icons/server.svg
deleted file mode 100644
index 3b1375a..0000000
--- a/web/src/assets/icons/server.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/warn.svg b/web/src/assets/icons/warn.svg
deleted file mode 100644
index 73d7a15..0000000
--- a/web/src/assets/icons/warn.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/kefu.png b/web/src/assets/kefu.png
deleted file mode 100644
index 47cab15..0000000
Binary files a/web/src/assets/kefu.png and /dev/null differ
diff --git a/web/src/assets/login_background.jpg b/web/src/assets/login_background.jpg
deleted file mode 100644
index e601f24..0000000
Binary files a/web/src/assets/login_background.jpg and /dev/null differ
diff --git a/web/src/assets/login_background.svg b/web/src/assets/login_background.svg
deleted file mode 100644
index 0a9514b..0000000
--- a/web/src/assets/login_background.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/login_left.svg b/web/src/assets/login_left.svg
deleted file mode 100644
index 9c48b0b..0000000
--- a/web/src/assets/login_left.svg
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
\ No newline at end of file
diff --git a/web/src/assets/login_right_banner.jpg b/web/src/assets/login_right_banner.jpg
deleted file mode 100644
index 0a597c1..0000000
Binary files a/web/src/assets/login_right_banner.jpg and /dev/null differ
diff --git a/web/src/assets/logo.jpg b/web/src/assets/logo.jpg
deleted file mode 100644
index 09502d5..0000000
Binary files a/web/src/assets/logo.jpg and /dev/null differ
diff --git a/web/src/assets/logo.png b/web/src/assets/logo.png
deleted file mode 100644
index b497ee0..0000000
Binary files a/web/src/assets/logo.png and /dev/null differ
diff --git a/web/src/assets/logo_login.png b/web/src/assets/logo_login.png
deleted file mode 100644
index e330458..0000000
Binary files a/web/src/assets/logo_login.png and /dev/null differ
diff --git a/web/src/assets/nav_logo.png b/web/src/assets/nav_logo.png
deleted file mode 100644
index 468cdab..0000000
Binary files a/web/src/assets/nav_logo.png and /dev/null differ
diff --git a/web/src/assets/noBody.png b/web/src/assets/noBody.png
deleted file mode 100644
index e16488e..0000000
Binary files a/web/src/assets/noBody.png and /dev/null differ
diff --git a/web/src/assets/notFound.png b/web/src/assets/notFound.png
deleted file mode 100644
index 59ca9f0..0000000
Binary files a/web/src/assets/notFound.png and /dev/null differ
diff --git a/web/src/assets/qm.png b/web/src/assets/qm.png
deleted file mode 100644
index 9f598ca..0000000
Binary files a/web/src/assets/qm.png and /dev/null differ
diff --git a/web/src/assets/video.png b/web/src/assets/video.png
deleted file mode 100644
index af4d35f..0000000
Binary files a/web/src/assets/video.png and /dev/null differ
diff --git a/web/src/components/application/index.vue b/web/src/components/application/index.vue
deleted file mode 100644
index 4dda3ec..0000000
--- a/web/src/components/application/index.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
diff --git a/web/src/components/arrayCtrl/arrayCtrl.vue b/web/src/components/arrayCtrl/arrayCtrl.vue
deleted file mode 100644
index 1296cf7..0000000
--- a/web/src/components/arrayCtrl/arrayCtrl.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
- {{ tag }}
-
-
-
-
- + 新增
-
-
-
-
-
-
diff --git a/web/src/components/bottomInfo/bottomInfo.vue b/web/src/components/bottomInfo/bottomInfo.vue
deleted file mode 100644
index 376de05..0000000
--- a/web/src/components/bottomInfo/bottomInfo.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
Powered by
-
- Gin-Vue-Admin
-
-
-
-
-
Copyright
-
- flipped-aurora团队
-
-
-
-
-
-
diff --git a/web/src/components/charts/index.vue b/web/src/components/charts/index.vue
deleted file mode 100644
index 9eb71cb..0000000
--- a/web/src/components/charts/index.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/components/commandMenu/index.vue b/web/src/components/commandMenu/index.vue
deleted file mode 100644
index 4ab4e20..0000000
--- a/web/src/components/commandMenu/index.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
-
-
- {{ option.label }}
-
-
- {{ item.label }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/customPic/index.vue b/web/src/components/customPic/index.vue
deleted file mode 100644
index 6a265de..0000000
--- a/web/src/components/customPic/index.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/components/errorPreview/index.vue b/web/src/components/errorPreview/index.vue
deleted file mode 100644
index a390fed..0000000
--- a/web/src/components/errorPreview/index.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
diff --git a/web/src/components/exportExcel/exportExcel.vue b/web/src/components/exportExcel/exportExcel.vue
deleted file mode 100644
index 1a94db5..0000000
--- a/web/src/components/exportExcel/exportExcel.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
- 导出
-
-
-
diff --git a/web/src/components/exportExcel/exportTemplate.vue b/web/src/components/exportExcel/exportTemplate.vue
deleted file mode 100644
index dd77f95..0000000
--- a/web/src/components/exportExcel/exportTemplate.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-
- 下载模板
-
-
-
diff --git a/web/src/components/exportExcel/importExcel.vue b/web/src/components/exportExcel/importExcel.vue
deleted file mode 100644
index cd3a7d9..0000000
--- a/web/src/components/exportExcel/importExcel.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- 导入
-
-
-
-
diff --git a/web/src/components/logo/index.vue b/web/src/components/logo/index.vue
deleted file mode 100644
index ed2ef5f..0000000
--- a/web/src/components/logo/index.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
- GVA
-
-
diff --git a/web/src/components/office/docx.vue b/web/src/components/office/docx.vue
deleted file mode 100644
index e607d0b..0000000
--- a/web/src/components/office/docx.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
diff --git a/web/src/components/office/excel.vue b/web/src/components/office/excel.vue
deleted file mode 100644
index 5b22f91..0000000
--- a/web/src/components/office/excel.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
diff --git a/web/src/components/office/index.vue b/web/src/components/office/index.vue
deleted file mode 100644
index d22d6da..0000000
--- a/web/src/components/office/index.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/office/pdf.vue b/web/src/components/office/pdf.vue
deleted file mode 100644
index 2ca4363..0000000
--- a/web/src/components/office/pdf.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
diff --git a/web/src/components/richtext/rich-edit.vue b/web/src/components/richtext/rich-edit.vue
deleted file mode 100644
index 64703db..0000000
--- a/web/src/components/richtext/rich-edit.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/richtext/rich-view.vue b/web/src/components/richtext/rich-view.vue
deleted file mode 100644
index a116141..0000000
--- a/web/src/components/richtext/rich-view.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/web/src/components/selectFile/selectFile.vue b/web/src/components/selectFile/selectFile.vue
deleted file mode 100644
index 8bf0d6d..0000000
--- a/web/src/components/selectFile/selectFile.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
- 上传文件
-
-
-
-
-
diff --git a/web/src/components/selectImage/selectComponent.vue b/web/src/components/selectImage/selectComponent.vue
deleted file mode 100644
index 18cc64a..0000000
--- a/web/src/components/selectImage/selectComponent.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
diff --git a/web/src/components/selectImage/selectImage.vue b/web/src/components/selectImage/selectImage.vue
deleted file mode 100644
index 5958e0a..0000000
--- a/web/src/components/selectImage/selectImage.vue
+++ /dev/null
@@ -1,503 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ data.name }}
-
-
-
-
-
-
- 添加分类
- 编辑分类
- 删除分类
-
-
-
-
-
-
-
-
-
-
-
-
-
- 选定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
diff --git a/web/src/components/svgIcon/svgIcon.vue b/web/src/components/svgIcon/svgIcon.vue
deleted file mode 100644
index 1783e44..0000000
--- a/web/src/components/svgIcon/svgIcon.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/warningBar/warningBar.vue b/web/src/components/warningBar/warningBar.vue
deleted file mode 100644
index 9d01881..0000000
--- a/web/src/components/warningBar/warningBar.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
- {{ title }}
-
-
-
-
diff --git a/web/src/core/config.js b/web/src/core/config.js
deleted file mode 100644
index 02bb788..0000000
--- a/web/src/core/config.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 网站配置文件
- */
-import packageInfo from '../../package.json'
-
-const greenText = (text) => `\x1b[32m${text}\x1b[0m`
-
-export const config = {
- appName: 'Gin-Vue-Admin',
- showViteLogo: true,
- keepAliveTabs: false,
- logs: []
-}
-
-export const viteLogo = (env) => {
- if (config.showViteLogo) {
- console.log(
- greenText(
- `> 欢迎使用Gin-Vue-Admin,开源地址:https://github.com/flipped-aurora/gin-vue-admin`
- )
- )
- console.log(greenText(`> 当前版本:v${packageInfo.version}`))
- console.log(greenText(`> 加群方式:微信:shouzi_1994 QQ群:470239250`))
- console.log(
- greenText(`> 项目地址:https://github.com/flipped-aurora/gin-vue-admin`)
- )
- console.log(greenText(`> 插件市场:https://plugin.gin-vue-admin.com`))
- console.log(
- greenText(`> GVA讨论社区:https://support.qq.com/products/371961`)
- )
- console.log(
- greenText(
- `> 默认自动化文档地址:http://127.0.0.1:${env.VITE_SERVER_PORT}/swagger/index.html`
- )
- )
- console.log(
- greenText(`> 默认前端文件运行地址:http://127.0.0.1:${env.VITE_CLI_PORT}`)
- )
- console.log(
- greenText(
- `--------------------------------------版权声明--------------------------------------`
- )
- )
- console.log(greenText(`** 版权所有方:flipped-aurora开源团队 **`))
- console.log(greenText(`** 版权持有公司:北京翻转极光科技有限责任公司 **`))
- console.log(
- greenText(
- `** 剔除授权标识需购买商用授权:https://plugin.gin-vue-admin.com/license **`
- )
- )
- console.log('\n')
- }
-}
-
-export default config
diff --git a/web/src/core/error-handel.js b/web/src/core/error-handel.js
deleted file mode 100644
index bc85b06..0000000
--- a/web/src/core/error-handel.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { createSysError } from '@/api/system/sysError'
-
-function sendErrorTip(errorInfo) {
- setTimeout(() => {
- const errorData = {
- form: errorInfo.type,
- info: `${errorInfo.message}\nStack: ${errorInfo.stack}${errorInfo.component ? `\nComponent: ${errorInfo.component.name || 'Unknown'}` : ''}${errorInfo.vueInfo ? `\nVue Info: ${errorInfo.vueInfo}` : ''}${errorInfo.source ? `\nSource: ${errorInfo.source}:${errorInfo.lineno}:${errorInfo.colno}` : ''}`,
- level: 'error',
- solution: null
- }
-
- createSysError(errorData).catch(apiErr => {
- console.error('Failed to create error record:', apiErr)
- })
- }, 0)
-}
-
- window.addEventListener('unhandledrejection', (event) => {
- sendErrorTip({
- type: '前端',
- message: `错误信息: ${event.reason}`,
- stack: `调用栈: ${event.reason?.stack || '没有调用栈信息'}`,
- });
- });
diff --git a/web/src/core/gin-vue-admin.js b/web/src/core/gin-vue-admin.js
deleted file mode 100644
index b6ce1d0..0000000
--- a/web/src/core/gin-vue-admin.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * gin-vue-admin web框架组
- *
- * */
-// 加载网站配置文件夹
-import { register } from './global'
-import packageInfo from '../../package.json'
-
-export default {
- install: (app) => {
- register(app)
- console.log(`
- 欢迎使用 Gin-Vue-Admin
- 当前版本:v${packageInfo.version}
- 加群方式:微信:shouzi_1994 QQ群:622360840
- 项目地址:https://github.com/flipped-aurora/gin-vue-admin
- 插件市场:https://plugin.gin-vue-admin.com
- GVA讨论社区:https://support.qq.com/products/371961
- 默认自动化文档地址:http://127.0.0.1:${import.meta.env.VITE_SERVER_PORT}/swagger/index.html
- 默认前端文件运行地址:http://127.0.0.1:${import.meta.env.VITE_CLI_PORT}
- 如果项目让您获得了收益,希望您能请团队喝杯可乐:https://www.gin-vue-admin.com/coffee/index.html
- --------------------------------------版权声明--------------------------------------
- ** 版权所有方:flipped-aurora开源团队 **
- ** 版权持有公司:北京翻转极光科技有限责任公司 **
- ** 剔除授权标识需购买商用授权:https://plugin.gin-vue-admin.com/license **
- ** 感谢您对Gin-Vue-Admin的支持与关注 合法授权使用更有利于项目的长久发展**
- `)
- }
-}
diff --git a/web/src/core/global.js b/web/src/core/global.js
deleted file mode 100644
index 40c033f..0000000
--- a/web/src/core/global.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import config from './config'
-import { h } from 'vue'
-
-// 统一导入el-icon图标
-import * as ElIconModules from '@element-plus/icons-vue'
-import svgIcon from '@/components/svgIcon/svgIcon.vue'
-// 导入转换图标名称的函数
-
-const createIconComponent = (name) => ({
- name: 'SvgIcon',
- render() {
- return h(svgIcon, {
- localIcon: name
- })
- }
-})
-
-const registerIcons = async (app) => {
- const iconModules = import.meta.glob('@/assets/icons/**/*.svg') // 系统目录 svg 图标
- const pluginIconModules = import.meta.glob(
- '@/plugin/**/assets/icons/**/*.svg'
- ) // 插件目录 svg 图标
- const mergedIconModules = Object.assign({}, iconModules, pluginIconModules) // 合并所有 svg 图标
- let allKeys = []
- for (const path in mergedIconModules) {
- let pluginName = ''
- if (path.startsWith('/src/plugin/')) {
- pluginName = `${path.split('/')[3]}-`
- }
- const iconName = path
- .split('/')
- .pop()
- .replace(/\.svg$/, '')
- // 如果iconName带空格则不加入到图标库中并且提示名称不合法
- if (iconName.indexOf(' ') !== -1) {
- console.error(`icon ${iconName}.svg includes whitespace in ${path}`)
- continue
- }
- const key = `${pluginName}${iconName}`
- const iconComponent = createIconComponent(key)
- config.logs.push({
- key: key,
- label: key
- })
- app.component(key, iconComponent)
-
- // 开发模式下列出所有 svg 图标,方便开发者直接查找复制使用
- allKeys.push(key)
- }
-
- import.meta.env.MODE == 'development' &&
- console.log(`所有可用的本地图标: ${allKeys.join(', ')}`)
-}
-
-export const register = (app) => {
- // 统一注册el-icon图标
- for (const iconName in ElIconModules) {
- app.component(iconName, ElIconModules[iconName])
- }
- app.component('SvgIcon', svgIcon)
- registerIcons(app)
- app.config.globalProperties.$GIN_VUE_ADMIN = config
-}
diff --git a/web/src/directive/auth.js b/web/src/directive/auth.js
deleted file mode 100644
index 2517299..0000000
--- a/web/src/directive/auth.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// 权限按钮展示指令
-import { useUserStore } from '@/pinia/modules/user'
-export default {
- install: (app) => {
- const userStore = useUserStore()
- app.directive('auth', {
- // 当被绑定的元素插入到 DOM 中时……
- mounted: function (el, binding) {
- const userInfo = userStore.userInfo
- if (!binding.value){
- el.parentNode.removeChild(el)
- return
- }
- const waitUse = binding.value.toString().split(',')
- let flag = waitUse.some((item) => Number(item) === userInfo.authorityId)
- if (binding.modifiers.not) {
- flag = !flag
- }
- if (!flag) {
- el.parentNode.removeChild(el)
- }
- }
- })
- }
-}
diff --git a/web/src/directive/clickOutSide.js b/web/src/directive/clickOutSide.js
deleted file mode 100644
index d1bd502..0000000
--- a/web/src/directive/clickOutSide.js
+++ /dev/null
@@ -1,43 +0,0 @@
-export default {
- install: (app) => {
- app.directive('click-outside', {
- mounted(el, binding) {
- const handler = (e) => {
- // 如果绑定的元素包含事件目标,或元素已经被移除,则不触发
- if (!el || el.contains(e.target) || e.target === el) return
- // 支持函数或对象 { handler: fn, exclude: [el1, el2], capture: true }
- const value = binding.value
- if (value && typeof value === 'object') {
- if (
- value.exclude &&
- value.exclude.some(
- (ex) => ex && ex.contains && ex.contains(e.target)
- )
- )
- return
- if (typeof value.handler === 'function') value.handler(e)
- } else if (typeof value === 'function') {
- value(e)
- }
- }
-
- // 存到 el 上,便于解绑
- el.__clickOutsideHandler__ = handler
-
- // 延迟注册,避免 mounted 时触发(比如当点击就是触发绑定动作时)
- setTimeout(() => {
- document.addEventListener('mousedown', handler)
- document.addEventListener('touchstart', handler)
- }, 0)
- },
- unmounted(el) {
- const h = el.__clickOutsideHandler__
- if (h) {
- document.removeEventListener('mousedown', h)
- document.removeEventListener('touchstart', h)
- delete el.__clickOutsideHandler__
- }
- }
- })
- }
-}
diff --git a/web/src/hooks/charts.js b/web/src/hooks/charts.js
deleted file mode 100644
index b7f7bb3..0000000
--- a/web/src/hooks/charts.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// 本组件参考 arco-pro 的实现
-// https://github.com/arco-design/arco-design-pro-vue/blob/main/arco-design-pro-vite/src/hooks/chart-option.ts
-
-import { computed } from 'vue'
-import { useAppStore } from '@/pinia'
-
-export default function useChartOption(sourceOption) {
- const appStore = useAppStore()
- const isDark = computed(() => {
- return appStore.isDark
- })
- const chartOption = computed(() => {
- return sourceOption(isDark.value)
- })
- return {
- chartOption
- }
-}
diff --git a/web/src/hooks/responsive.js b/web/src/hooks/responsive.js
deleted file mode 100644
index e324c16..0000000
--- a/web/src/hooks/responsive.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// 本组件参考 arco-pro 的实现
-// https://github.com/arco-design/arco-design-pro-vue/blob/main/arco-design-pro-vite/src/hooks/responsive.ts
-
-import { onMounted, onBeforeMount, onBeforeUnmount } from 'vue'
-import { useDebounceFn } from '@vueuse/core'
-import { useAppStore } from '@/pinia'
-import { addEventListen, removeEventListen } from '@/utils/event'
-
-const WIDTH = 992
-
-function queryDevice() {
- const rect = document.body.getBoundingClientRect()
- return rect.width - 1 < WIDTH
-}
-
-export default function useResponsive(immediate) {
- const appStore = useAppStore()
- function resizeHandler() {
- if (!document.hidden) {
- const isMobile = queryDevice()
- appStore.toggleDevice(isMobile ? 'mobile' : 'desktop')
- // appStore.toggleDevice(isMobile);
- }
- }
- const debounceFn = useDebounceFn(resizeHandler, 100)
- onMounted(() => {
- if (immediate) debounceFn()
- })
- onBeforeMount(() => {
- addEventListen(window, 'resize', debounceFn)
- })
- onBeforeUnmount(() => {
- removeEventListen(window, 'resize', debounceFn)
- })
-}
diff --git a/web/src/hooks/use-windows-resize.js b/web/src/hooks/use-windows-resize.js
deleted file mode 100644
index a3e1490..0000000
--- a/web/src/hooks/use-windows-resize.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// 监听 window 的 resize 事件,返回当前窗口的宽高
-import { shallowRef } from 'vue'
-import { tryOnMounted, useEventListener } from '@vueuse/core'
-
-const width = shallowRef(0)
-const height = shallowRef(0)
-
-export const useWindowResize = (cb) => {
- const onResize = () => {
- width.value = window.innerWidth
- height.value = window.innerHeight
- if (cb && typeof cb === 'function') {
- cb(width.value, height.value)
- }
- }
-
- tryOnMounted(onResize)
- useEventListener('resize', onResize, { passive: true })
- return {
- width,
- height
- }
-}
diff --git a/web/src/main.js b/web/src/main.js
deleted file mode 100644
index e5b5cc2..0000000
--- a/web/src/main.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import './style/element_visiable.scss'
-import 'element-plus/theme-chalk/dark/css-vars.css'
-import 'uno.css'
-import { createApp } from 'vue'
-import ElementPlus from 'element-plus'
-import { setupVueRootValidator } from 'vite-check-multiple-dom/client';
-
-import 'element-plus/dist/index.css'
-// 引入gin-vue-admin前端初始化相关内容
-import './core/gin-vue-admin'
-// 引入封装的router
-import router from '@/router/index'
-import '@/permission'
-import run from '@/core/gin-vue-admin.js'
-import auth from '@/directive/auth'
-import clickOutSide from '@/directive/clickOutSide'
-import { store } from '@/pinia'
-import App from './App.vue'
-import '@/core/error-handel'
-
-const app = createApp(App)
-
-app.config.productionTip = false
-
-setupVueRootValidator(app, {
- lang: 'zh'
- })
-
-app
- .use(run)
- .use(ElementPlus)
- .use(store)
- .use(auth)
- .use(clickOutSide)
- .use(router)
- .mount('#app')
-export default app
diff --git a/web/src/pathInfo.json b/web/src/pathInfo.json
deleted file mode 100644
index 04a9333..0000000
--- a/web/src/pathInfo.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "/src/view/about/index.vue": "About",
- "/src/view/dashboard/components/banner.vue": "Banner",
- "/src/view/dashboard/components/card.vue": "Card",
- "/src/view/dashboard/components/charts-content-numbers.vue": "ChartsContentNumbers",
- "/src/view/dashboard/components/charts-people-numbers.vue": "ChartsPeopleNumbers",
- "/src/view/dashboard/components/charts.vue": "Charts",
- "/src/view/dashboard/components/notice.vue": "Notice",
- "/src/view/dashboard/components/pluginTable.vue": "PluginTable",
- "/src/view/dashboard/components/quickLinks.vue": "QuickLinks",
- "/src/view/dashboard/components/table.vue": "Table",
- "/src/view/dashboard/components/wiki.vue": "Wiki",
- "/src/view/dashboard/index.vue": "Dashboard",
- "/src/view/error/index.vue": "Error",
- "/src/view/error/reload.vue": "Reload",
- "/src/view/example/breakpoint/breakpoint.vue": "BreakPoint",
- "/src/view/example/customer/customer.vue": "Customer",
- "/src/view/example/index.vue": "Example",
- "/src/view/example/upload/scanUpload.vue": "scanUpload",
- "/src/view/example/upload/upload.vue": "Upload",
- "/src/view/init/index.vue": "Init",
- "/src/view/layout/aside/asideComponent/asyncSubmenu.vue": "AsyncSubmenu",
- "/src/view/layout/aside/asideComponent/index.vue": "AsideComponent",
- "/src/view/layout/aside/asideComponent/menuItem.vue": "MenuItem",
- "/src/view/layout/aside/combinationMode.vue": "GvaAside",
- "/src/view/layout/aside/headMode.vue": "GvaAside",
- "/src/view/layout/aside/index.vue": "Index",
- "/src/view/layout/aside/normalMode.vue": "GvaAside",
- "/src/view/layout/aside/sidebarMode.vue": "SidebarMode",
- "/src/view/layout/header/index.vue": "Index",
- "/src/view/layout/header/tools.vue": "Tools",
- "/src/view/layout/iframe.vue": "GvaLayoutIframe",
- "/src/view/layout/index.vue": "GvaLayout",
- "/src/view/layout/screenfull/index.vue": "Screenfull",
- "/src/view/layout/search/search.vue": "BtnBox",
- "/src/view/layout/setting/components/layoutModeCard.vue": "LayoutModeCard",
- "/src/view/layout/setting/components/settingItem.vue": "SettingItem",
- "/src/view/layout/setting/components/themeColorPicker.vue": "ThemeColorPicker",
- "/src/view/layout/setting/components/themeModeSelector.vue": "ThemeModeSelector",
- "/src/view/layout/setting/index.vue": "GvaSetting",
- "/src/view/layout/setting/modules/appearance/index.vue": "AppearanceSettings",
- "/src/view/layout/setting/modules/general/index.vue": "GeneralSettings",
- "/src/view/layout/setting/modules/layout/index.vue": "LayoutSettings",
- "/src/view/layout/tabs/index.vue": "HistoryComponent",
- "/src/view/login/index.vue": "Login",
- "/src/view/person/person.vue": "Person",
- "/src/view/routerHolder.vue": "RouterHolder",
- "/src/view/superAdmin/api/api.vue": "Api",
- "/src/view/superAdmin/authority/authority.vue": "Authority",
- "/src/view/superAdmin/authority/components/apis.vue": "Apis",
- "/src/view/superAdmin/authority/components/datas.vue": "Datas",
- "/src/view/superAdmin/authority/components/menus.vue": "Menus",
- "/src/view/superAdmin/dictionary/sysDictionary.vue": "SysDictionary",
- "/src/view/superAdmin/dictionary/sysDictionaryDetail.vue": "SysDictionaryDetail",
- "/src/view/superAdmin/index.vue": "SuperAdmin",
- "/src/view/superAdmin/menu/components/components-cascader.vue": "ComponentsCascader",
- "/src/view/superAdmin/menu/icon.vue": "Icon",
- "/src/view/superAdmin/menu/menu.vue": "Menus",
- "/src/view/superAdmin/operation/sysOperationRecord.vue": "SysOperationRecord",
- "/src/view/superAdmin/params/sysParams.vue": "SysParams",
- "/src/view/superAdmin/user/user.vue": "User",
- "/src/view/system/state.vue": "State",
- "/src/view/systemTools/aiWrokflow/index.vue": "AIWorkflow",
- "/src/view/systemTools/apiToken/index.vue": "Index",
- "/src/view/systemTools/autoCode/component/fieldDialog.vue": "FieldDialog",
- "/src/view/systemTools/autoCode/component/previewCodeDialog.vue": "PreviewCodeDialog",
- "/src/view/systemTools/autoCode/index.vue": "AutoCode",
- "/src/view/systemTools/autoCode/mcp.vue": "MCP",
- "/src/view/systemTools/autoCode/mcpTest.vue": "MCPTest",
- "/src/view/systemTools/autoCode/picture.vue": "Picture",
- "/src/view/systemTools/autoCodeAdmin/index.vue": "AutoCodeAdmin",
- "/src/view/systemTools/autoPkg/autoPkg.vue": "AutoPkg",
- "/src/view/systemTools/exportTemplate/exportTemplate.vue": "ExportTemplate",
- "/src/view/systemTools/formCreate/index.vue": "FormGenerator",
- "/src/view/systemTools/index.vue": "System",
- "/src/view/systemTools/installPlugin/index.vue": "Index",
- "/src/view/systemTools/loginLog/index.vue": "Index",
- "/src/view/systemTools/pubPlug/pubPlug.vue": "PubPlug",
- "/src/view/systemTools/skills/index.vue": "Skills",
- "/src/view/systemTools/sysError/sysError.vue": "SysError",
- "/src/view/systemTools/system/system.vue": "Config",
- "/src/view/systemTools/version/version.vue": "SysVersion",
- "/src/plugin/announcement/form/info.vue": "InfoForm",
- "/src/plugin/announcement/view/info.vue": "Info",
- "/src/plugin/email/view/index.vue": "Email"
-}
\ No newline at end of file
diff --git a/web/src/permission.js b/web/src/permission.js
deleted file mode 100644
index 3de75a9..0000000
--- a/web/src/permission.js
+++ /dev/null
@@ -1,224 +0,0 @@
-import { useUserStore } from '@/pinia/modules/user'
-import { useRouterStore } from '@/pinia/modules/router'
-import getPageTitle from '@/utils/page'
-import router from '@/router'
-import Nprogress from 'nprogress'
-import 'nprogress/nprogress.css'
-
-// 配置 NProgress
-Nprogress.configure({
- showSpinner: false,
- ease: 'ease',
- speed: 500
-})
-
-// 白名单路由
-const WHITE_LIST = ['Login', 'Init']
-
-function isExternalUrl(val) {
- return typeof val === 'string' && /^(https?:)?\/\//.test(val)
-}
-
-// 工具函数:统一路径归一化
-function normalizeAbsolutePath(p) {
- const s = '/' + String(p || '')
- return s.replace(/\/+/g, '/')
-}
-
-function normalizeRelativePath(p) {
- return String(p || '').replace(/^\/+/, '')
-}
-
-// 安全注册:仅在路由名未存在时注册顶级路由
-function addTopLevelIfAbsent(r) {
- if (!router.hasRoute(r.name)) {
- router.addRoute(r)
- }
-}
-
-// 将 n 级菜单扁平化为:
-// - 常规:一级 layout + 二级页面组件
-// - 若某节点 meta.defaultMenu === true:该节点为顶级(不包裹在 layout 下),其子节点作为该顶级的二级页面组件
-function addRouteByChildren(route, segments = [], parentName = null) {
- // 跳过外链根节点
- if (isExternalUrl(route?.path) || isExternalUrl(route?.name) || isExternalUrl(route?.component)) {
- return
- }
-
- // 顶层 layout 仅用于承载,不参与路径拼接
- if (route?.name === 'layout') {
- route.children?.forEach((child) => addRouteByChildren(child, [], null))
- return
- }
-
- // 如果标记为 defaultMenu,则该路由应作为顶级路由(不包裹在 layout 下)
- if (route?.meta?.defaultMenu === true && parentName === null) {
- const fullPath = [...segments, route.path].filter(Boolean).join('/')
- const children = route.children ? [...route.children] : []
- const newRoute = { ...route, path: fullPath }
- delete newRoute.children
- delete newRoute.parent
- // 顶级路由使用绝对路径
- newRoute.path = normalizeAbsolutePath(newRoute.path)
-
- // 若已存在同名路由则整体跳过(之前应已处理过其子节点)
- if (router.hasRoute(newRoute.name)) return
- addTopLevelIfAbsent(newRoute)
-
- // 若该 defaultMenu 节点仍有子节点,继续递归处理其子节点(挂载到该顶级路由下)
- if (children.length) {
- // 重置片段,使其成为顶级下的二级相对路径
- children.forEach((child) => addRouteByChildren(child, [], newRoute.name))
- }
- return
- }
-
- // 还有子节点,继续向下收集路径片段(忽略外链片段)
- if (route?.children && route.children.length) {
- if(!parentName){
- const firstChild = route.children[0]
- if (firstChild) {
- const fullParentPath = [...segments, route.path].filter(Boolean).join('/')
- const redirectPath = normalizeRelativePath(
- [fullParentPath, firstChild.path].filter(Boolean).join('/')
- )
- const parentRoute = {
- path: normalizeRelativePath(fullParentPath),
- name: route.name, // 保留父级名称,以便 defaultRouter 可以指向它
- meta: route.meta,
- redirect: "/layout/" + redirectPath,
- }
- router.addRoute('layout', parentRoute)
- }
- }
- const nextSegments = isExternalUrl(route.path) ? segments : [...segments, route.path]
- route.children.forEach((child) => addRouteByChildren(child, nextSegments, parentName))
- return
- }
-
- // 叶子节点:注册为其父(defaultMenu 顶级或 layout)的二级子路由
- const fullPath = [...segments, route.path].filter(Boolean).join('/')
- const newRoute = { ...route, path: fullPath }
- delete newRoute.children
- delete newRoute.parent
- // 子路由使用相对路径,避免 /layout/layout/... 的问题
- newRoute.path = normalizeRelativePath(newRoute.path)
-
- if (parentName) {
- // 挂载到 defaultMenu 顶级路由下
- router.addRoute(parentName, newRoute)
- } else {
- // 常规:挂载到 layout 下
- router.addRoute('layout', newRoute)
- }
-}
-
-// 处理路由加载
-const setupRouter = async (userStore) => {
- try {
- const routerStore = useRouterStore()
- await Promise.all([routerStore.SetAsyncRouter(), userStore.GetUserInfo()])
-
- // 确保先注册父级 layout
- const baseRouters = routerStore.asyncRouters || []
- const layoutRoute = baseRouters[0]
- if (layoutRoute?.name === 'layout' && !router.hasRoute('layout')) {
- const bareLayout = { ...layoutRoute, children: [] }
- router.addRoute(bareLayout)
- }
-
- // 扁平化:将 layout.children 与其余顶层异步路由一并作为二级子路由注册到 layout 下
- const toRegister = []
- if (layoutRoute?.children?.length) {
- toRegister.push(...layoutRoute.children)
- }
- if (baseRouters.length > 1) {
- baseRouters.slice(1).forEach((r) => {
- if (r?.name !== 'layout') toRegister.push(r)
- })
- }
- toRegister.forEach((r) => addRouteByChildren(r, [], null))
- return true
- } catch (error) {
- console.error('Setup router failed:', error)
- return false
- }
-}
-
-// 移除加载动画
-const removeLoading = () => {
- const element = document.getElementById('gva-loading-box')
- element?.remove()
-}
-
-
-// 路由守卫
-router.beforeEach(async (to, from) => {
- const userStore = useUserStore()
- const routerStore = useRouterStore()
- const token = userStore.token
-
- Nprogress.start()
-
- // 处理元数据和缓存
- to.meta.matched = [...to.matched]
- await routerStore.handleKeepAlive(to)
- // 设置页面标题
- document.title = getPageTitle(to.meta.title, to)
- if (to.meta.client) {
- return true
- }
-
- // 白名单路由处理
- if (WHITE_LIST.includes(to.name)) {
- if (token) {
- if(!routerStore.asyncRouterFlag){
- await setupRouter(userStore)
- }
- if(userStore.userInfo.authority.defaultRouter){
- return { name: userStore.userInfo.authority.defaultRouter }
- }
- }
- return true
- }
-
- // 需要登录的路由处理
- if (token) {
- // 处理需要跳转到首页的情况
- if (sessionStorage.getItem('needToHome') === 'true') {
- sessionStorage.removeItem('needToHome')
- return { path: '/' }
- }
-
- // 处理异步路由
- if (!routerStore.asyncRouterFlag && !WHITE_LIST.includes(from.name)) {
- await setupRouter(userStore)
- return to
- }
-
- return to.matched.length ? true : { path: '/layout/404' }
- }
-
- // 未登录跳转登录页
- return {
- name: 'Login',
- query: {
- redirect: to.fullPath
- }
- }
-})
-
-// 路由加载完成
-router.afterEach(() => {
- document.querySelector('.main-cont.main-right')?.scrollTo(0, 0)
- Nprogress.done()
-})
-
-// 路由错误处理
-router.onError((error) => {
- console.error('Router error:', error)
- Nprogress.remove()
-})
-
-// 移除初始加载动画
-removeLoading()
diff --git a/web/src/pinia/index.js b/web/src/pinia/index.js
deleted file mode 100644
index 85e45e8..0000000
--- a/web/src/pinia/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { createPinia } from 'pinia'
-import { useAppStore } from '@/pinia/modules/app'
-import { useUserStore } from '@/pinia/modules/user'
-import { useDictionaryStore } from '@/pinia/modules/dictionary'
-
-const store = createPinia()
-
-export { store, useAppStore, useUserStore, useDictionaryStore }
diff --git a/web/src/pinia/modules/app.js b/web/src/pinia/modules/app.js
deleted file mode 100644
index 374e4eb..0000000
--- a/web/src/pinia/modules/app.js
+++ /dev/null
@@ -1,162 +0,0 @@
-import { defineStore } from 'pinia'
-import { ref, watchEffect, reactive } from 'vue'
-import { setBodyPrimaryColor } from '@/utils/format'
-import { useDark, usePreferredDark } from '@vueuse/core'
-
-export const useAppStore = defineStore('app', () => {
- const device = ref('')
- const drawerSize = ref('')
- const operateMinWith = ref('240')
- const config = reactive({
- weakness: false,
- grey: false,
- primaryColor: '#3b82f6',
- showTabs: true,
- darkMode: 'auto',
- layout_side_width: 256,
- layout_side_collapsed_width: 80,
- layout_side_item_height: 48,
- show_watermark: true,
- side_mode: 'normal',
- // 页面过渡动画配置
- transition_type: 'slide',
- global_size: 'default'
- })
-
- const isDark = useDark({
- selector: 'html',
- attribute: 'class',
- valueDark: 'dark',
- valueLight: 'light'
- })
-
- const preferredDark = usePreferredDark()
-
- const toggleTheme = (darkMode) => {
- isDark.value = darkMode
- }
-
- const toggleWeakness = (e) => {
- config.weakness = e
- }
-
- const toggleGrey = (e) => {
- config.grey = e
- }
-
- const togglePrimaryColor = (e) => {
- config.primaryColor = e
- }
-
- const toggleTabs = (e) => {
- config.showTabs = e
- }
-
- const toggleDevice = (e) => {
- if (e === 'mobile') {
- drawerSize.value = '100%'
- operateMinWith.value = '80'
- } else {
- drawerSize.value = '800'
- operateMinWith.value = '240'
- }
- device.value = e
- }
-
- const toggleDarkMode = (e) => {
- config.darkMode = e
- }
-
- // 监听系统主题变化
- watchEffect(() => {
- if (config.darkMode === 'auto') {
- isDark.value = preferredDark.value
- return
- }
- isDark.value = config.darkMode === 'dark'
- })
-
- const toggleConfigSideWidth = (e) => {
- config.layout_side_width = e
- }
-
- const toggleConfigSideCollapsedWidth = (e) => {
- config.layout_side_collapsed_width = e
- }
-
- const toggleConfigSideItemHeight = (e) => {
- config.layout_side_item_height = e
- }
-
- const toggleConfigWatermark = (e) => {
- config.show_watermark = e
- }
-
- const toggleSideMode = (e) => {
- config.side_mode = e
- }
-
- const toggleTransition = (e) => {
- config.transition_type = e
- }
-
- const toggleGlobalSize = (e) => {
- config.global_size = e
- }
-
- const baseCoinfg = {
- weakness: false,
- grey: false,
- primaryColor: '#3b82f6',
- showTabs: true,
- darkMode: 'auto',
- layout_side_width: 256,
- layout_side_collapsed_width: 80,
- layout_side_item_height: 48,
- show_watermark: true,
- side_mode: 'normal',
- // 页面过渡动画配置
- transition_type: 'slide',
- global_size: 'default'
- }
-
- const resetConfig = () => {
- for (let baseCoinfgKey in baseCoinfg) {
- config[baseCoinfgKey] = baseCoinfg[baseCoinfgKey]
- }
- }
-
- // 监听色弱模式和灰色模式
- watchEffect(() => {
- document.documentElement.classList.toggle('html-weakenss', config.weakness)
- document.documentElement.classList.toggle('html-grey', config.grey)
- })
-
- // 监听主题色
- watchEffect(() => {
- setBodyPrimaryColor(config.primaryColor, isDark.value ? 'dark' : 'light')
- })
-
- return {
- isDark,
- device,
- drawerSize,
- operateMinWith,
- config,
- toggleTheme,
- toggleDevice,
- toggleWeakness,
- toggleGrey,
- togglePrimaryColor,
- toggleTabs,
- toggleDarkMode,
- toggleConfigSideWidth,
- toggleConfigSideCollapsedWidth,
- toggleConfigSideItemHeight,
- toggleConfigWatermark,
- toggleSideMode,
- toggleTransition,
- resetConfig,
- toggleGlobalSize
- }
-})
diff --git a/web/src/pinia/modules/dictionary.js b/web/src/pinia/modules/dictionary.js
deleted file mode 100644
index b0c089f..0000000
--- a/web/src/pinia/modules/dictionary.js
+++ /dev/null
@@ -1,252 +0,0 @@
-import { findSysDictionary } from '@/api/sysDictionary'
-import { getDictionaryTreeListByType } from '@/api/sysDictionaryDetail'
-
-import { defineStore } from 'pinia'
-import { ref } from 'vue'
-
-export const useDictionaryStore = defineStore('dictionary', () => {
- const dictionaryMap = ref({})
-
- const setDictionaryMap = (dictionaryRes) => {
- dictionaryMap.value = { ...dictionaryMap.value, ...dictionaryRes }
- }
-
- // 过滤树形数据的深度
- const filterTreeByDepth = (items, currentDepth, targetDepth) => {
- if (targetDepth === 0) {
- // depth=0 返回全部数据
- return items
- }
-
- if (currentDepth >= targetDepth) {
- // 达到目标深度,移除children
- return items.map((item) => ({
- label: item.label,
- value: item.value,
- extend: item.extend
- }))
- }
-
- // 递归处理子项
- return items.map((item) => ({
- label: item.label,
- value: item.value,
- extend: item.extend,
- children: item.children
- ? filterTreeByDepth(item.children, currentDepth + 1, targetDepth)
- : undefined
- }))
- }
-
- // 将树形结构扁平化为数组(用于兼容原有的平铺格式)
- const flattenTree = (items) => {
- const result = []
-
- const traverse = (nodes) => {
- nodes.forEach((item) => {
- result.push({
- label: item.label,
- value: item.value,
- extend: item.extend
- })
-
- if (item.children && item.children.length > 0) {
- traverse(item.children)
- }
- })
- }
-
- traverse(items)
- return result
- }
-
- // 标准化树形数据,确保每个节点都包含标准的字段格式
- const normalizeTreeData = (items) => {
- return items.map((item) => ({
- label: item.label,
- value: item.value,
- extend: item.extend,
- children:
- item.children && item.children.length > 0
- ? normalizeTreeData(item.children)
- : undefined
- }))
- }
-
- // 根据value和depth查找指定节点并返回其children
- const findNodeByValue = (
- items,
- targetValue,
- currentDepth = 1,
- maxDepth = 0
- ) => {
- for (const item of items) {
- // 如果找到目标value的节点
- if (item.value === targetValue) {
- // 如果maxDepth为0,返回所有children
- if (maxDepth === 0) {
- return item.children ? normalizeTreeData(item.children) : []
- }
- // 否则根据depth限制返回children
- if (item.children && item.children.length > 0) {
- return filterTreeByDepth(item.children, 1, maxDepth)
- }
- return []
- }
-
- // 如果当前深度小于最大深度,继续在children中查找
- if (
- item.children &&
- item.children.length > 0 &&
- (maxDepth === 0 || currentDepth < maxDepth)
- ) {
- const result = findNodeByValue(
- item.children,
- targetValue,
- currentDepth + 1,
- maxDepth
- )
- if (result !== null) {
- return result
- }
- }
- }
- return null
- }
-
- const getDictionary = async (type, depth = 0, value = null) => {
- // 如果传入了value参数,则查找指定节点的children
- if (value !== null) {
- // 构建缓存key,包含value和depth信息
- const cacheKey = `${type}_value_${value}_depth_${depth}`
-
- if (
- dictionaryMap.value[cacheKey] &&
- dictionaryMap.value[cacheKey].length
- ) {
- return dictionaryMap.value[cacheKey]
- }
-
- try {
- // 获取完整的树形结构数据
- const treeRes = await getDictionaryTreeListByType({ type })
- if (
- treeRes.code === 0 &&
- treeRes.data &&
- treeRes.data.list &&
- treeRes.data.list.length > 0
- ) {
- // 查找指定value的节点并返回其children
- const targetNodeChildren = findNodeByValue(
- treeRes.data.list,
- value,
- 1,
- depth
- )
-
- if (targetNodeChildren !== null) {
- let resultData
- if (depth === 0) {
- // depth=0 时返回完整的children树形结构
- resultData = targetNodeChildren
- } else {
- // 其他depth值:扁平化children数据
- resultData = flattenTree(targetNodeChildren)
- }
-
- const dictionaryRes = {}
- dictionaryRes[cacheKey] = resultData
- setDictionaryMap(dictionaryRes)
- return dictionaryMap.value[cacheKey]
- } else {
- // 如果没找到指定value的节点,返回空数组
- return []
- }
- }
- } catch (error) {
- console.error('根据value获取字典数据失败:', error)
- return []
- }
- }
-
- // 原有的逻辑:不传value参数时的处理
- // 构建缓存key,包含depth信息
- const cacheKey = depth === 0 ? `${type}_tree` : `${type}_depth_${depth}`
-
- if (dictionaryMap.value[cacheKey] && dictionaryMap.value[cacheKey].length) {
- return dictionaryMap.value[cacheKey]
- } else {
- try {
- // 首先尝试获取树形结构数据
- const treeRes = await getDictionaryTreeListByType({ type })
- if (
- treeRes.code === 0 &&
- treeRes.data &&
- treeRes.data.list &&
- treeRes.data.list.length > 0
- ) {
- // 使用树形结构数据
- const treeData = treeRes.data.list
-
- let resultData
- if (depth === 0) {
- // depth=0 时返回完整的树形结构,但要确保字段格式标准化
- resultData = normalizeTreeData(treeData)
- } else {
- // 其他depth值:根据depth参数过滤数据,然后扁平化
- const filteredData = filterTreeByDepth(treeData, 1, depth)
- resultData = flattenTree(filteredData)
- }
-
- const dictionaryRes = {}
- dictionaryRes[cacheKey] = resultData
- setDictionaryMap(dictionaryRes)
- return dictionaryMap.value[cacheKey]
- } else {
- // 如果没有树形数据,回退到原有的平铺方式
- const res = await findSysDictionary({ type })
- if (res.code === 0) {
- const dictionaryRes = {}
- const dict = []
- res.data.resysDictionary.sysDictionaryDetails &&
- res.data.resysDictionary.sysDictionaryDetails.forEach((item) => {
- dict.push({
- label: item.label,
- value: item.value,
- extend: item.extend
- })
- })
- dictionaryRes[cacheKey] = dict
- setDictionaryMap(dictionaryRes)
- return dictionaryMap.value[cacheKey]
- }
- }
- } catch (error) {
- console.error('获取字典数据失败:', error)
- // 发生错误时回退到原有方式
- const res = await findSysDictionary({ type })
- if (res.code === 0) {
- const dictionaryRes = {}
- const dict = []
- res.data.resysDictionary.sysDictionaryDetails &&
- res.data.resysDictionary.sysDictionaryDetails.forEach((item) => {
- dict.push({
- label: item.label,
- value: item.value,
- extend: item.extend
- })
- })
- dictionaryRes[cacheKey] = dict
- setDictionaryMap(dictionaryRes)
- return dictionaryMap.value[cacheKey]
- }
- }
- }
- }
-
- return {
- dictionaryMap,
- setDictionaryMap,
- getDictionary
- }
-})
diff --git a/web/src/pinia/modules/params.js b/web/src/pinia/modules/params.js
deleted file mode 100644
index 54cdbf9..0000000
--- a/web/src/pinia/modules/params.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { getSysParam } from '@/api/sysParams'
-import { defineStore } from 'pinia'
-import { ref } from 'vue'
-
-export const useParamsStore = defineStore('params', () => {
- const paramsMap = ref({})
-
- const setParamsMap = (paramsRes) => {
- paramsMap.value = { ...paramsMap.value, ...paramsRes }
- }
-
- const getParams = async(key) => {
- if (paramsMap.value[key] && paramsMap.value[key].length) {
- return paramsMap.value[key]
- } else {
- const res = await getSysParam({ key })
- if (res.code === 0) {
- const paramsRes = {}
- paramsRes[key] = res.data.value
- setParamsMap(paramsRes)
- return paramsMap.value[key]
- }
- }
- }
-
- return {
- paramsMap,
- setParamsMap,
- getParams
- }
-})
diff --git a/web/src/pinia/modules/router.js b/web/src/pinia/modules/router.js
deleted file mode 100644
index 639898f..0000000
--- a/web/src/pinia/modules/router.js
+++ /dev/null
@@ -1,207 +0,0 @@
-import { asyncRouterHandle } from '@/utils/asyncRouter'
-import { emitter } from '@/utils/bus.js'
-import { asyncMenu } from '@/api/menu'
-import { defineStore } from 'pinia'
-import { ref, watchEffect } from 'vue'
-import pathInfo from '@/pathInfo.json'
-import {useRoute} from "vue-router";
-import {config} from "@/core/config.js";
-
-const notLayoutRouterArr = []
-const keepAliveRoutersArr = []
-const nameMap = {}
-
-const formatRouter = (routes, routeMap, parent) => {
- routes &&
- routes.forEach((item) => {
- item.parent = parent
- item.meta.btns = item.btns
- item.meta.hidden = item.hidden
- if (item.meta.defaultMenu === true) {
- if (!parent) {
- item = { ...item, path: `/${item.path}` }
- notLayoutRouterArr.push(item)
- }
- }
- routeMap[item.name] = item
- if (item.children && item.children.length > 0) {
- formatRouter(item.children, routeMap, item)
- }
- })
-}
-
-const KeepAliveFilter = (routes) => {
- routes &&
- routes.forEach((item) => {
- // 子菜单中有 keep-alive 的,父菜单也必须 keep-alive,否则无效。这里将子菜单中有 keep-alive 的父菜单也加入。
- if (
- (item.children && item.children.some((ch) => ch.meta.keepAlive)) ||
- item.meta.keepAlive
- ) {
- const path = item.meta.path
- keepAliveRoutersArr.push(pathInfo[path])
- nameMap[item.name] = pathInfo[path]
- }
- if (item.children && item.children.length > 0) {
- KeepAliveFilter(item.children)
- }
- })
-}
-
-export const useRouterStore = defineStore('router', () => {
- const keepAliveRouters = ref([])
- const asyncRouterFlag = ref(0)
- const setKeepAliveRouters = (history) => {
- const keepArrTemp = []
-
- // 1. 首先添加原有的keepAlive配置
- keepArrTemp.push(...keepAliveRoutersArr)
- if (config.keepAliveTabs) {
- history.forEach((item) => {
- // 2. 为所有history中的路由强制启用keep-alive
- // 通过routeMap获取路由信息,然后通过pathInfo获取组件名
- const routeInfo = routeMap[item.name]
- if (routeInfo && routeInfo.meta && routeInfo.meta.path) {
- const componentName = pathInfo[routeInfo.meta.path]
- if (componentName) {
- keepArrTemp.push(componentName)
- }
- }
-
- // 3. 如果子路由在tabs中打开,父路由也需要keepAlive
- if (nameMap[item.name]) {
- keepArrTemp.push(nameMap[item.name])
- }
- })
- }
- keepAliveRouters.value = Array.from(new Set(keepArrTemp))
- }
-
- // 处理组件缓存
- const handleKeepAlive = async (to) => {
- if (!to.matched.some((item) => item.meta.keepAlive)) return
-
- if (to.matched?.length > 2) {
- for (let i = 1; i < to.matched.length; i++) {
- const element = to.matched[i - 1]
-
- if (element.name === 'layout') {
- to.matched.splice(i, 1)
- await handleKeepAlive(to)
- continue
- }
-
- if (typeof element.components.default === 'function') {
- await element.components.default()
- await handleKeepAlive(to)
- }
- }
- }
- }
-
-
- const route = useRoute()
-
- emitter.on('setKeepAlive', setKeepAliveRouters)
-
- const asyncRouters = ref([])
-
- const topMenu = ref([])
-
- const leftMenu = ref([])
-
- const menuMap = {}
-
- const topActive = ref('')
-
- const setLeftMenu = (name) => {
- sessionStorage.setItem('topActive', name)
- topActive.value = name
- leftMenu.value = []
- if (menuMap[name]?.children) {
- leftMenu.value = menuMap[name].children
- }
- return menuMap[name]?.children
- }
-
- const findTopActive = (menuMap, routeName) => {
- for (let topName in menuMap) {
- const topItem = menuMap[topName];
- if (topItem.children?.some(item => item.name === routeName)) {
- return topName;
- }
- const foundName = findTopActive(topItem.children || {}, routeName);
- if (foundName) {
- return topName;
- }
- }
- return null;
- };
-
- watchEffect(() => {
- let topActive = sessionStorage.getItem('topActive')
- // 初始化菜单内容,防止重复添加
- topMenu.value = [];
- asyncRouters.value[0]?.children.forEach((item) => {
- if (item.hidden) return
- menuMap[item.name] = item
- topMenu.value.push({ ...item, children: [] })
- })
- if (!topActive || topActive === 'undefined' || topActive === 'null') {
- topActive = findTopActive(menuMap, route.name);
- }
- setLeftMenu(topActive)
- })
-
- const routeMap = {}
- // 从后台获取动态路由
- const SetAsyncRouter = async () => {
- asyncRouterFlag.value++
- const baseRouter = [
- {
- path: '/layout',
- name: 'layout',
- component: 'view/layout/index.vue',
- meta: {
- title: '底层layout'
- },
- children: []
- }
- ]
- const asyncRouterRes = await asyncMenu()
- const asyncRouter = asyncRouterRes.data.menus
- asyncRouter &&
- asyncRouter.push({
- path: 'reload',
- name: 'Reload',
- hidden: true,
- meta: {
- title: '',
- closeTab: true
- },
- component: 'view/error/reload.vue'
- })
- formatRouter(asyncRouter, routeMap)
- baseRouter[0].children = asyncRouter
- if (notLayoutRouterArr.length !== 0) {
- baseRouter.push(...notLayoutRouterArr)
- }
- asyncRouterHandle(baseRouter)
- KeepAliveFilter(asyncRouter)
- asyncRouters.value = baseRouter
- return true
- }
-
- return {
- topActive,
- setLeftMenu,
- topMenu,
- leftMenu,
- asyncRouters,
- keepAliveRouters,
- asyncRouterFlag,
- SetAsyncRouter,
- routeMap,
- handleKeepAlive
- }
-})
diff --git a/web/src/pinia/modules/user.js b/web/src/pinia/modules/user.js
deleted file mode 100644
index ccbbfb7..0000000
--- a/web/src/pinia/modules/user.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import { login, getUserInfo } from '@/api/user'
-import { jsonInBlacklist } from '@/api/jwt'
-import router from '@/router/index'
-import { ElLoading, ElMessage } from 'element-plus'
-import { defineStore } from 'pinia'
-import { ref, computed } from 'vue'
-import { useRouterStore } from './router'
-import { useCookies } from '@vueuse/integrations/useCookies'
-import { useStorage } from '@vueuse/core'
-
-import { useAppStore } from '@/pinia'
-
-export const useUserStore = defineStore('user', () => {
- const appStore = useAppStore()
- const loadingInstance = ref(null)
-
- const userInfo = ref({
- uuid: '',
- nickName: '',
- headerImg: '',
- authority: {}
- })
- const token = useStorage('token', '')
- const xToken = useCookies()
- const currentToken = computed(() => token.value || xToken.get('x-token') || '')
-
- const setUserInfo = (val) => {
- userInfo.value = val
- if (val.originSetting) {
- Object.keys(appStore.config).forEach((key) => {
- if (val.originSetting[key] !== undefined) {
- appStore.config[key] = val.originSetting[key]
- }
- })
- }
- }
-
- const setToken = (val) => {
- token.value = val
- xToken.value = val
- }
-
- const NeedInit = async () => {
- await ClearStorage()
- await router.push({ name: 'Init', replace: true })
- }
-
- const ResetUserInfo = (value = {}) => {
- userInfo.value = {
- ...userInfo.value,
- ...value
- }
- }
- /* 获取用户信息*/
- const GetUserInfo = async () => {
- const res = await getUserInfo()
- if (res.code === 0) {
- setUserInfo(res.data.userInfo)
- }
- return res
- }
- /* 登录*/
- const LoginIn = async (loginInfo) => {
- try {
- loadingInstance.value = ElLoading.service({
- fullscreen: true,
- text: '登录中,请稍候...'
- })
-
- const res = await login(loginInfo)
-
- if (res.code !== 0) {
- return false
- }
- // 登陆成功,设置用户信息和权限相关信息
- setUserInfo(res.data.user)
- setToken(res.data.token)
-
- // 初始化路由信息
- const routerStore = useRouterStore()
- await routerStore.SetAsyncRouter()
- const asyncRouters = routerStore.asyncRouters
-
- // 注册到路由表里
- asyncRouters.forEach((asyncRouter) => {
- router.addRoute(asyncRouter)
- })
-
- if(router.currentRoute.value.query.redirect) {
- await router.replace(router.currentRoute.value.query.redirect)
- return true
- }
-
- if (!router.hasRoute(userInfo.value.authority.defaultRouter)) {
- ElMessage.error('不存在可以登陆的首页,请联系管理员进行配置')
- } else {
- await router.replace({ name: userInfo.value.authority.defaultRouter })
- }
-
- const isWindows = /windows/i.test(navigator.userAgent)
- window.localStorage.setItem('osType', isWindows ? 'WIN' : 'MAC')
-
- // 全部操作均结束,关闭loading并返回
- return true
- } catch (error) {
- console.error('LoginIn error:', error)
- return false
- } finally {
- loadingInstance.value?.close()
- }
- }
- /* 登出*/
- const LoginOut = async () => {
- const res = await jsonInBlacklist()
-
- // 登出失败
- if (res.code !== 0) {
- return
- }
-
- await ClearStorage()
-
- // 把路由定向到登录页,无需等待直接reload
- router.push({ name: 'Login', replace: true })
- window.location.reload()
- }
- /* 清理数据 */
- const ClearStorage = async () => {
- token.value = ''
- // 使用remove方法正确删除cookie
- xToken.remove()
- sessionStorage.clear()
- // 清理所有相关的localStorage项
- localStorage.removeItem('originSetting')
- localStorage.removeItem('token')
- }
-
- return {
- userInfo,
- token: currentToken,
- NeedInit,
- ResetUserInfo,
- GetUserInfo,
- LoginIn,
- LoginOut,
- setToken,
- loadingInstance,
- ClearStorage
- }
-})
diff --git a/web/src/plugin/announcement/api/info.js b/web/src/plugin/announcement/api/info.js
deleted file mode 100644
index e19770b..0000000
--- a/web/src/plugin/announcement/api/info.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import service from '@/utils/request'
-
-// @Tags Info
-// @Summary 创建公告
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.Info true "创建公告"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
-// @Router /info/createInfo [post]
-export const createInfo = (data) => {
- return service({
- url: '/info/createInfo',
- method: 'post',
- data
- })
-}
-
-// @Tags Info
-// @Summary 删除公告
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.Info true "删除公告"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /info/deleteInfo [delete]
-export const deleteInfo = (params) => {
- return service({
- url: '/info/deleteInfo',
- method: 'delete',
- params
- })
-}
-
-// @Tags Info
-// @Summary 批量删除公告
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body request.IdsReq true "批量删除公告"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
-// @Router /info/deleteInfo [delete]
-export const deleteInfoByIds = (params) => {
- return service({
- url: '/info/deleteInfoByIds',
- method: 'delete',
- params
- })
-}
-
-// @Tags Info
-// @Summary 更新公告
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data body model.Info true "更新公告"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
-// @Router /info/updateInfo [put]
-export const updateInfo = (data) => {
- return service({
- url: '/info/updateInfo',
- method: 'put',
- data
- })
-}
-
-// @Tags Info
-// @Summary 用id查询公告
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query model.Info true "用id查询公告"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /info/findInfo [get]
-export const findInfo = (params) => {
- return service({
- url: '/info/findInfo',
- method: 'get',
- params
- })
-}
-
-// @Tags Info
-// @Summary 分页获取公告列表
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Param data query request.PageInfo true "分页获取公告列表"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
-// @Router /info/getInfoList [get]
-export const getInfoList = (params) => {
- return service({
- url: '/info/getInfoList',
- method: 'get',
- params
- })
-}
-// @Tags Info
-// @Summary 获取数据源
-// @Security ApiKeyAuth
-// @accept application/json
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
-// @Router /info/findInfoDataSource [get]
-export const getInfoDataSource = () => {
- return service({
- url: '/info/getInfoDataSource',
- method: 'get'
- })
-}
diff --git a/web/src/plugin/announcement/form/info.vue b/web/src/plugin/announcement/form/info.vue
deleted file mode 100644
index 9824048..0000000
--- a/web/src/plugin/announcement/form/info.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 保存
- 返回
-
-
-
-
-
-
-
-
-
diff --git a/web/src/plugin/announcement/view/info.vue b/web/src/plugin/announcement/view/info.vue
deleted file mode 100644
index 7ccdcb3..0000000
--- a/web/src/plugin/announcement/view/info.vue
+++ /dev/null
@@ -1,510 +0,0 @@
-
-
-
-
-
-
-
- 创建日期
-
-
-
-
-
-
- —
-
-
-
-
-
-
-
-
-
- 查询
-
- 重置
-
- 展开
-
-
- 收起
-
-
-
-
-
-
-
- 新增
-
-
- 删除
-
-
-
-
-
-
-
- {{ formatDate(scope.row.CreatedAt) }}
-
-
-
-
-
-
- {{
- filterDataSource(dataSource.userID, scope.row.userID)
- }}
-
-
-
-
-
-
- {{ file.name }}
-
-
-
-
-
-
-
- 变更
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
{{ type === 'create' ? '添加' : '修改' }}
-
- 确 定
- 取 消
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/plugin/email/api/email.js b/web/src/plugin/email/api/email.js
deleted file mode 100644
index c3f6c7b..0000000
--- a/web/src/plugin/email/api/email.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import service from '@/utils/request'
-// @Tags System
-// @Summary 发送测试邮件
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"发送成功"}"
-// @Router /email/emailTest [post]
-export const emailTest = (data) => {
- return service({
- url: '/email/emailTest',
- method: 'post',
- data
- })
-}
-
-// @Tags System
-// @Summary 发送邮件
-// @Security ApiKeyAuth
-// @Produce application/json
-// @Param data body email_response.Email true "发送邮件必须的参数"
-// @Success 200 {string} string "{"success":true,"data":{},"msg":"发送成功"}"
-// @Router /email/sendEmail [post]
-export const sendEmail = (data) => {
- return service({
- url: '/email/sendEmail',
- method: 'post',
- data
- })
-}
diff --git a/web/src/plugin/email/view/index.vue b/web/src/plugin/email/view/index.vue
deleted file mode 100644
index 188c45b..0000000
--- a/web/src/plugin/email/view/index.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 发送测试邮件
- 发送邮件
-
-
-
-
-
-
-
diff --git a/web/src/router/index.js b/web/src/router/index.js
deleted file mode 100644
index 4181603..0000000
--- a/web/src/router/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import { createRouter, createWebHashHistory } from 'vue-router'
-
-const routes = [
- {
- path: '/',
- redirect: '/login'
- },
- {
- path: '/init',
- name: 'Init',
- component: () => import('@/view/init/index.vue')
- },
- {
- path: '/login',
- name: 'Login',
- component: () => import('@/view/login/index.vue')
- },
- {
- path: '/scanUpload',
- name: 'ScanUpload',
- meta: {
- title: '扫码上传',
- client: true
- },
- component: () => import('@/view/example/upload/scanUpload.vue')
- },
- {
- path: '/:catchAll(.*)',
- meta: {
- closeTab: true
- },
- component: () => import('@/view/error/index.vue')
- },
-]
-
-const router = createRouter({
- history: createWebHashHistory(),
- routes
-})
-
-export default router
diff --git a/web/src/style/element/index.scss b/web/src/style/element/index.scss
deleted file mode 100644
index 0c2de8d..0000000
--- a/web/src/style/element/index.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-@forward 'element-plus/theme-chalk/src/common/var.scss' with (
- $colors: (
- 'white': #ffffff,
- 'black': #000000,
- 'primary': (
- 'base': #4d70ff
- ),
- 'success': (
- 'base': #67c23a
- ),
- 'warning': (
- 'base': #e6a23c
- ),
- 'danger': (
- 'base': #f56c6c
- ),
- 'error': (
- 'base': #f56c6c
- ),
- 'info': (
- 'base': #909399
- )
- )
-);
diff --git a/web/src/style/element_visiable.scss b/web/src/style/element_visiable.scss
deleted file mode 100644
index 39ef7cc..0000000
--- a/web/src/style/element_visiable.scss
+++ /dev/null
@@ -1,138 +0,0 @@
-@use '@/style/main.scss';
-@use '@/style/reset';
-
-
-.el-button {
- font-weight: 400;
- border-radius: 2px;
-}
-
-.gva-pagination {
- @apply flex justify-end;
- .el-pagination__editor {
- .el-input__inner {
- @apply h-8;
- }
- }
-
- .is-active {
- @apply rounded text-white;
- background: var(--el-color-primary);
- color: #ffffff !important;
- }
-}
-
-.el-drawer__header {
- margin-bottom: 0 !important;
- padding-top: 16px !important;
- padding-bottom: 16px !important;
- @apply border-0 border-b border-solid border-gray-200;
-}
-
-.el-form--inline {
- .el-form-item {
- & > .el-input,
- .el-cascader,
- .el-select,
- .el-date-editor,
- .el-autocomplete {
- @apply w-52;
- }
- }
-}
-
-.el-dropdown {
- @apply overflow-hidden;
-}
-
-.el-table {
- tr {
- th {
- @apply dark:bg-slate-900;
- .cell {
- @apply leading-[36px] text-gray-700 dark:text-gray-200;
- }
- }
- }
- .el-table__row {
- td {
- @apply dark:bg-slate-900;
- .cell {
- @apply leading-[32px] text-gray-600 dark:text-gray-300;
- }
- }
- }
- tr {
- th {
- &.is-leaf {
- @apply dark:bg-slate-900;
- }
- }
- }
-}
-
-// layout
-
-// table
-.el-pagination {
- @apply mt-8;
- .btn-prev,
- .btn-next {
- @apply border border-solid border-gray-300 dark:border-gray-700 rounded;
- }
- .el-pager {
- li {
- @apply border border-solid border-gray-300 dark:border-gray-600 rounded text-gray-600 text-sm mx-1;
- }
- }
-}
-.el-menu {
- background-color: transparent !important;
- li {
- @apply my-1;
- }
-}
-.el-menu--vertical {
- .el-menu-item {
- border-radius: 2px;
- &.is-active {
- background-color: var(--el-color-primary) !important;
- color: #fff !important;
- }
- }
-}
-
-.el-sub-menu.el-sub-menu__hide-arrow {
- height: 44px;
-}
-
-.el-tabs__header {
- margin: 0 0 1px !important;
-}
-
-.el-sub-menu.is-active {
- > .el-sub-menu__title {
- color: var(--el-color-primary) !important;
- }
-}
-
-.el-menu-item.is-active{
- color: var(--el-color-primary)!important;
-}
-
-.el-sub-menu__title.el-tooltip__trigger,
-.el-menu-item .el-menu-tooltip__trigger {
- justify-content: center;
-}
-
-.el-menu--horizontal .el-menu .el-sub-menu__title {
- justify-content: flex-start;
-}
-
-html.dark {
- /* 自定义深色背景颜色 */
- --el-bg-color: rgb(30, 41, 59);
- --el-bg-color-overlay: rgb(40, 51, 69);
- --el-fill-color-light: rgb(15, 23, 42);
- --el-fill-color: rgb(15, 23, 42);
-}
diff --git a/web/src/style/iconfont.css b/web/src/style/iconfont.css
deleted file mode 100644
index 623bf13..0000000
--- a/web/src/style/iconfont.css
+++ /dev/null
@@ -1,47 +0,0 @@
-@font-face {
- font-family: 'gvaIcon';
- src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTZJUyU8AAA14AAAAHEdERUYAKQARAAANWAAAAB5PUy8yPJpJTAAAAVgAAABgY21hcM0T0L4AAAHYAAABWmdhc3D//wADAAANUAAAAAhnbHlmRk3UvwAAA0wAAAbYaGVhZB/a5jgAAADcAAAANmhoZWEHngOFAAABFAAAACRobXR4DaoBrAAAAbgAAAAebG9jYQbMCGgAAAM0AAAAGG1heHABGgB+AAABOAAAACBuYW1lXoIBAgAACiQAAAKCcG9zdN15OnUAAAyoAAAAqAABAAAAAQAA+a916l8PPPUACwQAAAAAAN5YUSMAAAAA3lhRIwBL/8ADwAM1AAAACAACAAAAAAAAAAEAAAOA/4AAXAQAAAAAAAPAAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAALAHIABQAAAAAAAgAAAAoACgAAAP8AAAAAAAAABAQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZADA5mXmfQOA/4AAAAPcAIAAAAABAAAAAAAAAAAAAAAgAAEEAAAAAAAAAAQAAAAEAACLAIoAYAB1AHYASwBLAGAAAAAAAAMAAAADAAAAHAABAAAAAABUAAMAAQAAABwABAA4AAAACgAIAAIAAuZm5mrmduZ9//8AAOZl5mrmdeZ7//8ZnhmbGZEZjQABAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAigEcAbgCUAK6AxoDbAACAIsAIANsAswAEQAjAAAlIicBJjQ3ATYeAQYHCQEeAQYhIicBJjQ3ATYeAQYHCQEeAQYDSw0J/qsLCwFVChsSAgr+xAE8CgIV/qkNCP6qCgoBVgkbEgIK/sUBOwoCFCAJATULGQsBNQoCExwI/uL+4ggbFAkBNQsZCwE1CgITHAj+4v7iCRoUAAAAAAIAigAgA2sCzAARACIAAAE0JwEmDgEWFwkBDgEWMjcBNiUBJg4BFhcJAQ4BFjI3ATY0AiAL/qsJHBECCQE8/sQJAhQZCQFVCwFA/qsKGxICCgE8/sQKAhUZCQFVCwF1DQsBNQoCExwI/uL+4gkaFAkBNQskATUKAhMcCP7i/uIJGhQJATULGQADAGD/wAOgAzUATABcAGwAAAE1NCcmJyYiBwYHBh0BDgEdARQWOwEyNj0BNCYrATU0NzY3NjIXFhcWHQEjIgYdARQWOwEGBwYHLgEjIgYUFjMyNjc2NzY3PgE9ATQmBRUUBisBIiY9ATQ2OwEyFgUUBisBIiY9ATQ2OwEyFhUDYDAvT1O+U08vMBslLB9VHi0tHiAoJkFDnENBJiggHi0tHhUPJC5SChwRHCQkHBEeCHJAMxAfKiX9kAYFVQUGBgVVBQYCVQYFVQUGBgVVBQYByQxgUlAuMDAuUFJgDAQqG6seLCweqx4tCk5DQScnJydBQ04KLR6rHiwrGiAGDxElNiUSEAc1KkUBKx6rGyhFqwQGBgSrBQYGsAQGBgSrBQYGBQAABAB1//UDjQMLABsANwBSAHEAABMyNj0BFxYyNjQvATMyNjQmKwEiBwYHBh0BFBYFIgYdAScmIgYUHwEjIgYUFjsBMjc2NzY9ATYmJQc1NCYiBh0BFBcWFxY7ATI2NCYrATc2NCYGATQ1FSYnJisBIgYUFjsBBwYUFjI/ARUUFjI2PQEnJpUNE7wJHRMKvIcMFBQM1ggCDAgCFALiDRPJCRoTCcmJDBQUDNYIAg8CAwES/gbJExkUAggKBAbWDBQUDInJCRMXAgEHCwQG2AwUFAyJvAkSHgi8ExoTAgEB9RQMibwIEhkKvBMZFAIGDAQI1gwU6hQMickJExoJyRMZFAIICgQG2AwUIsmHDBQUDNYIAg8CAxQZE8kKGRMBAcABAQIOAwMUGRO8ChkTCbyHDBQUDNYFBAAABAB2//cDjgMMABoANQBRAG0AAAEjIgYUFjsBMjc2NzY9ATQmIgYdAScmIgYUFwEzMjY0JisBIgcGBwYdARQWMjY9ARcWMjY0JyUmJyYrASIGFBY7AQcGFBYyPwEVFBYyNj0BLgE3FhcWOwEyNjQmKwE3NjQmIg8BNTQmIgYdAR4BATqJDRMTDdUJAg8CAhMaE7cKGRQKAjeJDRMTDdUJAg8CAhMaE8gJHhIK/i8HCgQH1w0TEw2JyQoTHQnIFBkTAQKoBwoEBtYNExMNibwKFBkKvBMZFAICAhoUGRMCBwoEBtYNExMNib4KExoK/iAUGRMCBwoEB9UNExMNickIEhkK8w8CAhMZFMgKGRMJyYkNExMN1QIJzQ8CAhMZFLsKGhMKvIkNExMN1QMIAAAAAAUAS//LA7UDNQAUACkAKgA3AEQAAAEiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBgMjFB4BMj4BNC4BIg4BFyIGHQEUFjI2PQE0JgIAd2ZiOzs7O2Jm7mZiOzs7O2Jmd2VXVDIzMzJUV8pXVDIzMzJUV2UrDBQWFAwMFBYUDCsNExMaExMDNTs7YmbuZmI7Ozs7YmbuZmI7O/zWMzJUV8pXVDIzMzJUV8pXVDIzAjULFAwMFBYUDAwUgBQM6w0TEw3rDBQAAQBL/+ADwAMgAD0AAAEmBg8BLgEjIgcGBwYUFxYXFjMyPgE3Ni4BBgcOAiMiJyYnJjQ3Njc2MzIeARcnJg4BFh8BMj8BNj8BNCYDpgwXAxc5yXZyY184Ojo4X2NyWaB4HgULGhcFGWaJS2FUUTAwMTBRU2FIhGQbgA0WBw4NwgUIBAwDMQ0CsQMODFhmeDk3XmHiYV43OUV9UQ0XCQsMRWo6MC9PUr9TTy8wNmNBJQMOGhYDMwMBCAu6DRYAAAAAAgBg/8YDugMiAB4AMwAABSc+ATU0JyYnJiIHBgcGFBcWFxYzMjc2NxcWMjc2JiUiJyYnJjQ3Njc2MhcWFxYUBwYHBgOxviouNDFVV8lXVTIzMzJVV2RDPzwzvgkeCAcB/hxUSEYpKiopRkioSEYpKyspRkgCvjB9RGRYVDIzNDJVWMlXVTE0GBYqvgkJChuBKylGSKhIRikqKilGSKhIRikrAAAAABIA3gABAAAAAAAAABMAKAABAAAAAAABAAgATgABAAAAAAACAAcAZwABAAAAAAADAAgAgQABAAAAAAAEAAgAnAABAAAAAAAFAAsAvQABAAAAAAAGAAgA2wABAAAAAAAKACsBPAABAAAAAAALABMBkAADAAEECQAAACYAAAADAAEECQABABAAPAADAAEECQACAA4AVwADAAEECQADABAAbwADAAEECQAEABAAigADAAEECQAFABYApQADAAEECQAGABAAyQADAAEECQAKAFYA5AADAAEECQALACYBaABDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AABDcmVhdGVkIGJ5IGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABSAGUAZwB1AGwAYQByAABSZWd1bGFyAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABWAGUAcgBzAGkAbwBuACAAMQAuADAAAFZlcnNpb24gMS4wAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAABHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuAABoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAABodHRwOi8vZm9udGVsbG8uY29tAAAAAAIAAAAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAgECAQMBBAEFAQYBBwEIAQkRYXJyb3ctZG91YmxlLWxlZnQSYXJyb3ctZG91YmxlLXJpZ2h0EGN1c3RvbWVyLXNlcnZpY2URZnVsbHNjcmVlbi1leHBhbmQRZnVsbHNjcmVlbi1zaHJpbmsGcHJvbXB0B3JlZnJlc2gGc2VhcmNoAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMACgABAAQAAAACAAAAAAAAAAEAAAAA1aQnCAAAAADeWFEjAAAAAN5YUSM=')
- format('truetype');
- font-weight: 600;
- font-style: normal;
- font-display: swap;
-}
-.gvaIcon {
- font-family: 'gvaIcon' !important;
- font-size: 16px;
- font-style: normal;
- font-weight: 800;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.gvaIcon-arrow-double-left:before {
- content: '\e665';
-}
-
-.gvaIcon-arrow-double-right:before {
- content: '\e666';
-}
-
-.gvaIcon-fullscreen-shrink:before {
- content: '\e676';
-}
-.gvaIcon-customer-service:before {
- content: '\e66a';
-}
-
-.gvaIcon-fullscreen-expand:before {
- content: '\e675';
-}
-
-.gvaIcon-prompt:before {
- content: '\e67b';
-}
-
-.gvaIcon-refresh:before {
- content: '\e67c';
-}
-
-.gvaIcon-search:before {
- content: '\e67d';
-}
diff --git a/web/src/style/main.scss b/web/src/style/main.scss
deleted file mode 100644
index 749d977..0000000
--- a/web/src/style/main.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-@use '@/style/iconfont.css';
-@use "./transition.scss";
-
-.html-grey {
- filter: grayscale(100%);
-}
-
-.html-weakenss {
- filter: invert(80%);
-}
-
-.gva-table-box {
- @apply p-4 bg-white text-slate-700 dark:text-slate-400 dark:bg-slate-900 rounded my-2;
- .el-table {
- @apply border-x border-t border-b-0 rounded border-table-border border-solid -mx-[1px];
- }
-}
-
-.gva-btn-list {
- @apply mb-3 flex items-center flex-wrap gap-2;
- .el-button+.el-button{
- @apply ml-0 !important;
- }
- .el-upload{
- .el-button{
- @apply ml-0 !important;
- }
- }
-}
-
-#nprogress .bar {
- background: #29d !important;
-}
-.gva-customer-icon {
- @apply w-4 h-4;
-}
-
-::-webkit-scrollbar {
- @apply hidden;
-}
-
-.gva-search-box {
- @apply p-4 pb-0 bg-white text-slate-700 dark:text-slate-400 dark:bg-slate-900 rounded my-2;
-}
-
-.gva-form-box {
- @apply p-4 bg-white text-slate-700 dark:text-slate-400 dark:bg-slate-900 rounded my-2;
-}
-
-.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
- background: var(--el-color-primary-bg) !important;
-}
-
-.el-dropdown {
- outline: none;
- * {
- outline: none;
- }
-}
diff --git a/web/src/style/reset.scss b/web/src/style/reset.scss
deleted file mode 100644
index fe879bf..0000000
--- a/web/src/style/reset.scss
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
-1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
-2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
-2. [UnoCSS]: allow to override the default border color with css var `--un-default-border-color`
-*/
-
-*,
-::before,
-::after {
- box-sizing: border-box; /* 1 */
- border-width: 0; /* 2 */
- border-style: solid; /* 2 */
- border-color: var(--un-default-border-color, #e5e7eb); /* 2 */
-}
-
-/*
-1. Use a consistent sensible line-height in all browsers.
-2. Prevent adjustments of font size after orientation changes in iOS.
-3. Use a more readable tab size.
-4. Use the user's configured `sans` font-family by default.
-*/
-
-html {
- line-height: 1.5; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
- -moz-tab-size: 4; /* 3 */
- tab-size: 4; /* 3 */
- font-family:
- ui-sans-serif,
- system-ui,
- -apple-system,
- BlinkMacSystemFont,
- 'Segoe UI',
- Roboto,
- 'Helvetica Neue',
- Arial,
- 'Noto Sans',
- sans-serif,
- 'Apple Color Emoji',
- 'Segoe UI Emoji',
- 'Segoe UI Symbol',
- 'Noto Color Emoji'; /* 4 */
-
- // TODO: 在下一个大版本更新的时候需要改回正确的16px
- font-size: 14px;
-}
-
-/*
-1. Remove the margin in all browsers.
-2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
-*/
-
-body {
- margin: 0; /* 1 */
- line-height: inherit; /* 2 */
-}
-
-/*
-1. Add the correct height in Firefox.
-2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
-3. Ensure horizontal rules are visible by default.
-*/
-
-hr {
- height: 0; /* 1 */
- color: inherit; /* 2 */
- border-top-width: 1px; /* 3 */
-}
-
-/*
-Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
- text-decoration: underline dotted;
-}
-
-/*
-Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-size: inherit;
- font-weight: inherit;
-}
-
-/*
-Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
- color: inherit;
- text-decoration: inherit;
-}
-
-/*
-Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/*
-1. Use the user's configured `mono` font family by default.
-2. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
- font-family:
- ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-
-/*
-Add the correct font size in all browsers.
-*/
-
-small {
- font-size: 80%;
-}
-
-/*
-Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/*
-1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
-2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
-3. Remove gaps between table borders by default.
-*/
-
-table {
- text-indent: 0; /* 1 */
- border-color: inherit; /* 2 */
- border-collapse: collapse; /* 3 */
-}
-
-/*
-1. Change the font styles in all browsers.
-2. Remove the margin in Firefox and Safari.
-3. Remove default padding in all browsers.
-*/
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit; /* 1 */
- font-feature-settings: inherit; /* 1 */
- font-variation-settings: inherit; /* 1 */
- font-size: 100%; /* 1 */
- font-weight: inherit; /* 1 */
- line-height: inherit; /* 1 */
- color: inherit; /* 1 */
- margin: 0; /* 2 */
- padding: 0; /* 3 */
-}
-
-/*
-Remove the inheritance of text transform in Edge and Firefox.
-*/
-
-button,
-select {
- text-transform: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Remove default button styles.
-*/
-
-button,
-[type='button'],
-[type='reset'],
-[type='submit'] {
- -webkit-appearance: button; /* 1 */
- /* background-color: transparent; */
- background-image: none; /* 2 */
-}
-
-/*
-Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
- outline: auto;
-}
-
-/*
-Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
- box-shadow: none;
-}
-
-/*
-Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
- vertical-align: baseline;
-}
-
-/*
-Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
- height: auto;
-}
-
-/*
-1. Correct the odd appearance in Chrome and Safari.
-2. Correct the outline style in Safari.
-*/
-
-[type='search'] {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
-}
-
-/*
-Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Change font properties to `inherit` in Safari.
-*/
-
-::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
-}
-
-/*
-Add the correct display in Chrome and Safari.
-*/
-
-summary {
- display: list-item;
-}
-
-/*
-Removes the default spacing and border for appropriate elements.
-*/
-
-blockquote,
-dl,
-dd,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-hr,
-figure,
-p,
-pre {
- margin: 0;
-}
-
-fieldset {
- margin: 0;
- padding: 0;
-}
-
-legend {
- padding: 0;
-}
-
-ol,
-ul,
-menu {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-/*
-Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
- resize: vertical;
-}
-
-/*
-1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-2. Set the default placeholder color to the user's configured gray 400 color.
-*/
-
-input::placeholder,
-textarea::placeholder {
- opacity: 1; /* 1 */
- color: #9ca3af; /* 2 */
-}
-
-/*
-Set the default cursor for buttons.
-*/
-
-button,
-[role='button'] {
- cursor: pointer;
-}
-
-/*
-Make sure disabled buttons don't get the pointer cursor.
-*/
-:disabled {
- cursor: default;
-}
-
-/*
-1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
-2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
- This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
- display: block; /* 1 */
- vertical-align: middle; /* 2 */
-}
-
-/*
-Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
-
-/* Make elements with the HTML hidden attribute stay hidden by default */
-[hidden] {
- display: none;
-}
diff --git a/web/src/style/transition.scss b/web/src/style/transition.scss
deleted file mode 100644
index 09a2543..0000000
--- a/web/src/style/transition.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-
-// 淡入淡出动画
-.fade-enter-active,
-.fade-leave-active {
- transition: all 0.3s ease;
-}
-
-.fade-enter-from,
-.fade-leave-to {
- opacity: 0;
- transform: translateY(10px);
-}
-
-.header {
- border-radius: 0 0 10px 10px;
-}
-
-.body {
- height: calc(100% - 6rem);
-}
-
-@keyframes slideDown {
- from {
- transform: translateY(-20px);
- opacity: 0;
- }
-
- to {
- transform: translateY(0);
- opacity: 1;
- }
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- }
-
- to {
- opacity: 1;
- }
-}
-// 缩放动画
-.zoom-enter-active,
-.zoom-leave-active {
- transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.zoom-enter-from,
-.zoom-leave-to {
- opacity: 0;
- transform: scale(0.95);
-}
-
-
-/* fade-slide */
-.slide-leave-active,
-.slide-enter-active {
- transition: all 0.3s;
-}
-.slide-enter-from {
- opacity: 0;
- transform: translateX(-30px);
-}
-.slide-leave-to {
- opacity: 0;
- transform: translateX(30px);
-}
diff --git a/web/src/utils/asyncRouter.js b/web/src/utils/asyncRouter.js
deleted file mode 100644
index 9e7a5ca..0000000
--- a/web/src/utils/asyncRouter.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const viewModules = import.meta.glob('../view/**/*.vue')
-const pluginModules = import.meta.glob('../plugin/**/*.vue')
-
-export const asyncRouterHandle = (asyncRouter) => {
- asyncRouter.forEach((item) => {
- if (item.component && typeof item.component === 'string') {
- item.meta.path = '/src/' + item.component
- if (item.component.split('/')[0] === 'view') {
- item.component = dynamicImport(viewModules, item.component)
- } else if (item.component.split('/')[0] === 'plugin') {
- item.component = dynamicImport(pluginModules, item.component)
- }
- }
- if (item.children) {
- asyncRouterHandle(item.children)
- }
- })
-}
-
-function dynamicImport(dynamicViewsModules, component) {
- const keys = Object.keys(dynamicViewsModules)
- const matchKeys = keys.filter((key) => {
- const k = key.replace('../', '')
- return k === component
- })
- const matchKey = matchKeys[0]
-
- return dynamicViewsModules[matchKey]
-}
diff --git a/web/src/utils/btnAuth.js b/web/src/utils/btnAuth.js
deleted file mode 100644
index f94fa9b..0000000
--- a/web/src/utils/btnAuth.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { useRoute } from 'vue-router'
-import { reactive } from 'vue'
-export const useBtnAuth = () => {
- const route = useRoute()
- return route.meta.btns || reactive({})
-}
diff --git a/web/src/utils/bus.js b/web/src/utils/bus.js
deleted file mode 100644
index f2a3b92..0000000
--- a/web/src/utils/bus.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// using ES6 modules
-import mitt from 'mitt'
-
-export const emitter = mitt()
diff --git a/web/src/utils/closeThisPage.js b/web/src/utils/closeThisPage.js
deleted file mode 100644
index b2a0c05..0000000
--- a/web/src/utils/closeThisPage.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { emitter } from '@/utils/bus.js'
-
-export const closeThisPage = () => {
- emitter.emit('closeThisPage')
-}
diff --git a/web/src/utils/date.js b/web/src/utils/date.js
deleted file mode 100644
index 987a40d..0000000
--- a/web/src/utils/date.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// 对Date的扩展,将 Date 转化为指定格式的String
-// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
-// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
-// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
-// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
-// eslint-disable-next-line no-extend-native
-Date.prototype.Format = function(fmt) {
- const o = {
- 'M+': this.getMonth() + 1, // 月份
- 'd+': this.getDate(), // 日
- 'h+': this.getHours(), // 小时
- 'm+': this.getMinutes(), // 分
- 's+': this.getSeconds(), // 秒
- 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
- 'S': this.getMilliseconds() // 毫秒
- }
- const reg = /(y+)/
- if (reg.test(fmt)) {
- const t = reg.exec(fmt)[1]
- fmt = fmt.replace(
- t,
- (this.getFullYear() + '').substring(4 - t.length)
- )
- }
- for (let k in o) {
- const regx = new RegExp('(' + k + ')')
- if (regx.test(fmt)) {
- const t = regx.exec(fmt)[1]
- fmt = fmt.replace(
- t,
- t.length === 1 ? o[k] : ('00' + o[k]).substring(('' + o[k]).length)
- )
- }
- }
- return fmt
-}
-
-export function formatTimeToStr(times, pattern) {
- let d = new Date(times).Format('yyyy-MM-dd hh:mm:ss')
- if (pattern) {
- d = new Date(times).Format(pattern)
- }
- return d.toLocaleString()
-}
diff --git a/web/src/utils/dictionary.js b/web/src/utils/dictionary.js
deleted file mode 100644
index c67bb82..0000000
--- a/web/src/utils/dictionary.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import { useDictionaryStore } from '@/pinia/modules/dictionary'
-
-/**
- * 生成字典缓存key
- * @param {string} type - 字典类型
- * @param {number} depth - 深度参数
- * @param {string|number|null} value - 指定节点的value
- * @returns {string} 缓存key
- */
-const generateCacheKey = (type, depth, value) => {
- if (value !== null && value !== undefined) {
- return `${type}_value_${value}_depth_${depth}`
- }
- return depth === 0 ? `${type}_tree` : `${type}_depth_${depth}`
-}
-
-/**
- * 获取字典数据
- * @param {string} type - 字典类型,必填
- * @param {Object} options - 可选参数
- * @param {number} options.depth - 指定获取字典的深度,默认为0(完整树形结构)
- * @param {string|number|null} options.value - 指定节点的value,获取该节点的children,默认为null
- * @returns {Promise} 字典数据数组
- * @example
- * // 获取完整的字典树形结构
- * const dictTree = await getDict('user_status')
- *
- * // 获取指定深度的扁平化字典数据
- * const dictFlat = await getDict('user_status', {
- * depth: 2
- * })
- *
- * // 获取指定节点的children
- * const children = await getDict('user_status', {
- * value: 'active'
- * })
- */
-export const getDict = async (
- type,
- options = {
- depth: 0,
- value: null
- }
-) => {
- // 参数验证
- if (!type || typeof type !== 'string') {
- console.warn('getDict: type参数必须是非空字符串')
- return []
- }
-
- if (typeof options.depth !== 'number' || options.depth < 0) {
- console.warn('getDict: depth参数必须是非负数')
- options.depth = 0
- }
-
- try {
- const dictionaryStore = useDictionaryStore()
-
- // 调用store方法获取字典数据
- await dictionaryStore.getDictionary(type, options.depth, options.value)
-
- // 生成缓存key
- const cacheKey = generateCacheKey(type, options.depth, options.value)
-
- // 从缓存中获取数据
- const result = dictionaryStore.dictionaryMap[cacheKey]
-
- // 返回数据,确保返回数组
- return Array.isArray(result) ? result : []
- } catch (error) {
- console.error('getDict: 获取字典数据失败', { type, options, error })
- return []
- }
-}
-
-// 字典文字展示方法
-export const showDictLabel = (
- dict,
- code,
- keyCode = 'value',
- valueCode = 'label'
-) => {
- if (!dict) {
- return ''
- }
- const dictMap = {}
- dict.forEach((item) => {
- if (Reflect.has(item, keyCode) && Reflect.has(item, valueCode)) {
- dictMap[item[keyCode]] = item[valueCode]
- }
- })
- return Reflect.has(dictMap, code) ? dictMap[code] : ''
-}
diff --git a/web/src/utils/doc.js b/web/src/utils/doc.js
deleted file mode 100644
index 55a3949..0000000
--- a/web/src/utils/doc.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const toDoc = (url) => {
- window.open(url, '_blank')
-}
diff --git a/web/src/utils/downloadImg.js b/web/src/utils/downloadImg.js
deleted file mode 100644
index 10506c7..0000000
--- a/web/src/utils/downloadImg.js
+++ /dev/null
@@ -1,20 +0,0 @@
-export const downloadImage = (imgsrc, name) => {
- // 下载图片地址和图片名
- var image = new Image()
- image.setAttribute('crossOrigin', 'anonymous')
- image.onload = function () {
- var canvas = document.createElement('canvas')
- canvas.width = image.width
- canvas.height = image.height
- var context = canvas.getContext('2d')
- context.drawImage(image, 0, 0, image.width, image.height)
- var url = canvas.toDataURL('image/png') // 得到图片的base64编码数据
-
- var a = document.createElement('a') // 生成一个a元素
- var event = new MouseEvent('click') // 创建一个单击事件
- a.download = name || 'photo' // 设置图片名称
- a.href = url // 将生成的URL设置为a.href属性
- a.dispatchEvent(event) // 触发a的单击事件
- }
- image.src = imgsrc
-}
diff --git a/web/src/utils/env.js b/web/src/utils/env.js
deleted file mode 100644
index 7053375..0000000
--- a/web/src/utils/env.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const isDev = import.meta.env.DEV;
-
-export const isProd = import.meta.env.PROD;
diff --git a/web/src/utils/event.js b/web/src/utils/event.js
deleted file mode 100644
index 4861bf7..0000000
--- a/web/src/utils/event.js
+++ /dev/null
@@ -1,17 +0,0 @@
-export function addEventListen(target, event, handler, capture = false) {
- if (
- target.addEventListener &&
- typeof target.addEventListener === 'function'
- ) {
- target.addEventListener(event, handler, capture)
- }
-}
-
-export function removeEventListen(target, event, handler, capture = false) {
- if (
- target.removeEventListener &&
- typeof target.removeEventListener === 'function'
- ) {
- target.removeEventListener(event, handler, capture)
- }
-}
diff --git a/web/src/utils/fmtRouterTitle.js b/web/src/utils/fmtRouterTitle.js
deleted file mode 100644
index bcaeb67..0000000
--- a/web/src/utils/fmtRouterTitle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-export const fmtTitle = (title, now) => {
- const reg = /\$\{(.+?)\}/
- const reg_g = /\$\{(.+?)\}/g
- const result = title.match(reg_g)
- if (result) {
- result.forEach((item) => {
- const key = item.match(reg)[1]
- const value = now.params[key] || now.query[key]
- title = title.replace(item, value)
- })
- }
- return title
-}
diff --git a/web/src/utils/format.js b/web/src/utils/format.js
deleted file mode 100644
index 3f1e1a8..0000000
--- a/web/src/utils/format.js
+++ /dev/null
@@ -1,175 +0,0 @@
-import { formatTimeToStr } from '@/utils/date'
-import { getDict } from '@/utils/dictionary'
-import { ref } from 'vue'
-import { getUrl } from './image'
-
-export const formatBoolean = (bool) => {
- if (bool !== null) {
- return bool ? '是' : '否'
- } else {
- return ''
- }
-}
-export const formatDate = (time) => {
- if (time !== null && time !== '') {
- var date = new Date(time)
- return formatTimeToStr(date, 'yyyy-MM-dd hh:mm:ss')
- } else {
- return ''
- }
-}
-
-export const filterDict = (value, options) => {
- // 递归查找函数
- const findInOptions = (opts, targetValue) => {
- if (!opts || !Array.isArray(opts)) return null
-
- for (const item of opts) {
- if (item.value === targetValue) {
- return item
- }
-
- if (item.children && Array.isArray(item.children)) {
- const found = findInOptions(item.children, targetValue)
- if (found) return found
- }
- }
-
- return null
- }
-
- const rowLabel = findInOptions(options, value)
- return rowLabel && rowLabel.label
-}
-
-export const filterDataSource = (dataSource, value) => {
- // 递归查找函数
- const findInDataSource = (data, targetValue) => {
- if (!data || !Array.isArray(data)) return null
-
- for (const item of data) {
- // 检查当前项是否匹配
- if (item.value === targetValue) {
- return item
- }
-
- // 如果有children属性,递归查找
- if (item.children && Array.isArray(item.children)) {
- const found = findInDataSource(item.children, targetValue)
- if (found) return found
- }
- }
-
- return null
- }
-
- if (Array.isArray(value)) {
- return value.map((item) => {
- const rowLabel = findInDataSource(dataSource, item)
- return rowLabel?.label
- })
- }
-
- const rowLabel = findInDataSource(dataSource, value)
- return rowLabel?.label
-}
-
-export const getDictFunc = async (type) => {
- const dicts = await getDict(type)
- return dicts
-}
-
-export const ReturnArrImg = (arr) => {
- const imgArr = []
- if (arr instanceof Array) {
- // 如果是数组类型
- for (const arrKey in arr) {
- imgArr.push(getUrl(arr[arrKey]))
- }
- } else {
- imgArr.push(getUrl(arr))
- }
- return imgArr
-}
-
-export const returnArrImg = ReturnArrImg
-
-export const onDownloadFile = (url) => {
- window.open(getUrl(url))
-}
-const colorToHex = (u) => {
- let e = u.replace('#', '').match(/../g)
- for (let t = 0; t < 3; t++) e[t] = parseInt(e[t], 16)
- return e
-}
-
-const hexToColor = (u, e, t) => {
- let a = [u.toString(16), e.toString(16), t.toString(16)]
- for (let n = 0; n < 3; n++) a[n].length === 1 && (a[n] = `0${a[n]}`)
- return `#${a.join('')}`
-}
-const generateAllColors = (u, e) => {
- let t = colorToHex(u)
- const target = [10, 10, 30]
- for (let a = 0; a < 3; a++) t[a] = Math.floor(t[a] * (1 - e) + target[a] * e)
- return hexToColor(t[0], t[1], t[2])
-}
-
-const generateAllLightColors = (u, e) => {
- let t = colorToHex(u)
- const target = [240, 248, 255] // RGB for blue white color
- for (let a = 0; a < 3; a++) t[a] = Math.floor(t[a] * (1 - e) + target[a] * e)
- return hexToColor(t[0], t[1], t[2])
-}
-
-function addOpacityToColor(u, opacity) {
- let t = colorToHex(u)
- return `rgba(${t[0]}, ${t[1]}, ${t[2]}, ${opacity})`
-}
-
-export const setBodyPrimaryColor = (primaryColor, darkMode) => {
- let fmtColorFunc = generateAllColors
- if (darkMode === 'light') {
- fmtColorFunc = generateAllLightColors
- }
-
- document.documentElement.style.setProperty('--el-color-primary', primaryColor)
- document.documentElement.style.setProperty(
- '--el-color-primary-bg',
- addOpacityToColor(primaryColor, 0.4)
- )
- for (let times = 1; times <= 2; times++) {
- document.documentElement.style.setProperty(
- `--el-color-primary-dark-${times}`,
- fmtColorFunc(primaryColor, times / 10)
- )
- }
- for (let times = 1; times <= 10; times++) {
- document.documentElement.style.setProperty(
- `--el-color-primary-light-${times}`,
- fmtColorFunc(primaryColor, times / 10)
- )
- }
- document.documentElement.style.setProperty(
- `--el-menu-hover-bg-color`,
- addOpacityToColor(primaryColor, 0.2)
- )
-}
-
-const baseUrl = ref(import.meta.env.VITE_BASE_API)
-
-export const getBaseUrl = () => {
- return baseUrl.value === '/' ? '' : baseUrl.value
-}
-
-export const CreateUUID = () => {
- let d = new Date().getTime()
- if (window.performance && typeof window.performance.now === 'function') {
- d += performance.now()
- }
- return '00000000-0000-0000-0000-000000000000'.replace(/0/g, (c) => {
- const r = (d + Math.random() * 16) % 16 | 0 // d是随机种子
- d = Math.floor(d / 16)
- return (c === '0' ? r : (r & 0x3) | 0x8).toString(16)
- })
-}
diff --git a/web/src/utils/image.js b/web/src/utils/image.js
deleted file mode 100644
index 8b65232..0000000
--- a/web/src/utils/image.js
+++ /dev/null
@@ -1,126 +0,0 @@
-export default class ImageCompress {
- constructor(file, fileSize, maxWH = 1920) {
- this.file = file
- this.fileSize = fileSize
- this.maxWH = maxWH // 最大长宽
- }
-
- compress() {
- // 压缩
- const fileType = this.file.type
- const fileSize = this.file.size / 1024
- return new Promise((resolve) => {
- const reader = new FileReader()
- reader.readAsDataURL(this.file)
- reader.onload = () => {
- const canvas = document.createElement('canvas')
- const img = document.createElement('img')
- img.src = reader.result
- img.onload = () => {
- const ctx = canvas.getContext('2d')
- const _dWH = this.dWH(img.width, img.height, this.maxWH)
- canvas.width = _dWH.width
- canvas.height = _dWH.height
-
- // 清空后, 重写画布
- ctx.clearRect(0, 0, canvas.width, canvas.height)
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
-
- const newImgData = canvas.toDataURL(fileType, 0.9)
-
- // 压缩宽高后的图像大小
- const newImgSize = this.fileSizeKB(newImgData)
-
- if (newImgSize > this.fileSize) {
- console.log('图片尺寸太大!' + fileSize + ' >> ' + newImgSize)
- }
-
- const blob = this.dataURLtoBlob(newImgData, fileType)
- const nfile = new File([blob], this.file.name)
- resolve(nfile)
- }
- }
- })
- }
-
- /**
- * 长宽等比缩小
- * 图像的一边(长或宽)为最大目标值
- */
- dWH(srcW, srcH, dMax) {
- const defaults = {
- width: srcW,
- height: srcH
- }
- if (Math.max(srcW, srcH) > dMax) {
- if (srcW > srcH) {
- defaults.width = dMax
- defaults.height = Math.round(srcH * (dMax / srcW))
- return defaults
- } else {
- defaults.height = dMax
- defaults.width = Math.round(srcW * (dMax / srcH))
- return defaults
- }
- } else {
- return defaults
- }
- }
-
- fileSizeKB(dataURL) {
- let sizeKB = 0
- sizeKB = Math.round((dataURL.split(',')[1].length * 3) / 4 / 1024)
- return sizeKB
- }
-
- /**
- * 转为Blob
- */
- dataURLtoBlob(dataURL, fileType) {
- const byteString = atob(dataURL.split(',')[1])
- let mimeString = dataURL.split(',')[0].split(':')[1].split(';')[0]
- const ab = new ArrayBuffer(byteString.length)
- const ia = new Uint8Array(ab)
- for (let i = 0; i < byteString.length; i++) {
- ia[i] = byteString.charCodeAt(i)
- }
- if (fileType) {
- mimeString = fileType
- }
- return new Blob([ab], { type: mimeString, lastModifiedDate: new Date() })
- }
-}
-
-const path = import.meta.env.VITE_FILE_API
-export const getUrl = (url) => {
- if (url && url.slice(0, 4) !== 'http') {
- if (path === '/') {
- return url
- }
- if (url.slice(0, 1) === '/') {
- return path + url
- }
- return path + '/' + url
- } else {
- return url
- }
-}
-
-const VIDEO_EXTENSIONS = ['.mp4', '.mov', '.webm', '.ogg']
-const VIDEO_MIME_TYPES = ['video/mp4', 'video/webm', 'video/ogg']
-const IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp', 'image/svg+xml']
-
-export const isVideoExt = (url) => {
- const urlLower = url?.toLowerCase() || ''
- return urlLower !== '' && VIDEO_EXTENSIONS.some(ext => urlLower.endsWith(ext))
-}
-
-export const isVideoMime = (type) => {
- const typeLower = type?.toLowerCase() || ''
- return typeLower !== '' && VIDEO_MIME_TYPES.includes(typeLower)
-}
-
-export const isImageMime = (type) => {
- const typeLower = type?.toLowerCase() || ''
- return typeLower !== '' && IMAGE_MIME_TYPES.includes(typeLower)
-}
diff --git a/web/src/utils/page.js b/web/src/utils/page.js
deleted file mode 100644
index 6a3c6d8..0000000
--- a/web/src/utils/page.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { fmtTitle } from '@/utils/fmtRouterTitle'
-import config from '@/core/config'
-export default function getPageTitle(pageTitle, route) {
- if (pageTitle) {
- const title = fmtTitle(pageTitle, route)
- return `${title} - ${config.appName}`
- }
- return `${config.appName}`
-}
diff --git a/web/src/utils/params.js b/web/src/utils/params.js
deleted file mode 100644
index b03d539..0000000
--- a/web/src/utils/params.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useParamsStore } from '@/pinia/modules/params'
-/*
- * 获取参数方法 使用示例 getParams('key').then(res) 或者 async函数下 const res = await getParams('key')
- * const res = ref('')
- * const fun = async () => {
- * res.value = await getParams('test')
- * }
- * fun()
- */
-export const getParams = async(key) => {
- const paramsStore = useParamsStore()
- await paramsStore.getParams(key)
- return paramsStore.paramsMap[key]
-}
diff --git a/web/src/utils/request.js b/web/src/utils/request.js
deleted file mode 100644
index b9b9264..0000000
--- a/web/src/utils/request.js
+++ /dev/null
@@ -1,231 +0,0 @@
-import axios from 'axios'
-import { useUserStore } from '@/pinia/modules/user'
-import { ElLoading, ElMessage } from 'element-plus'
-import { emitter } from '@/utils/bus'
-import router from '@/router/index'
-
-const DEFAULT_REQUEST_TIMEOUT = 1000 * 60 * 10
-const DEFAULT_LOADING_FORCE_CLOSE_DELAY = 30000
-
-const service = axios.create()
-
-let activeAxios = 0
-let persistentLoadingCount = 0
-let timer = null
-let forceCloseTimer = null
-let loadingInstance = null
-let isLoadingVisible = false
-
-const clearLoadingTimers = () => {
- if (timer) {
- clearTimeout(timer)
- timer = null
- }
-
- if (forceCloseTimer) {
- clearTimeout(forceCloseTimer)
- forceCloseTimer = null
- }
-}
-
-const closeLoadingInstance = () => {
- if (isLoadingVisible && loadingInstance) {
- loadingInstance.close()
- }
- loadingInstance = null
- isLoadingVisible = false
-}
-
-const scheduleForceClose = () => {
- if (!isLoadingVisible || activeAxios <= 0 || persistentLoadingCount > 0) {
- return
- }
-
- forceCloseTimer = setTimeout(() => {
- if (isLoadingVisible && loadingInstance) {
- console.warn(
- `Loading force closed after ${DEFAULT_LOADING_FORCE_CLOSE_DELAY}ms`
- )
- closeLoadingInstance()
- activeAxios = 0
- persistentLoadingCount = 0
- }
- }, DEFAULT_LOADING_FORCE_CLOSE_DELAY)
-}
-
-const showLoading = (
- option = {
- target: null
- }
-) => {
- const loadDom = document.getElementById('gva-base-load-dom')
- const loadingOption = {
- target: null,
- ...option
- }
- const persistLoading = Boolean(loadingOption.persistLoading)
-
- delete loadingOption.persistLoading
-
- activeAxios++
- if (persistLoading) {
- persistentLoadingCount++
- }
-
- clearLoadingTimers()
-
- timer = setTimeout(() => {
- if (activeAxios > 0 && !isLoadingVisible) {
- if (!loadingOption.target) {
- loadingOption.target = loadDom
- }
- loadingInstance = ElLoading.service(loadingOption)
- isLoadingVisible = true
- }
-
- scheduleForceClose()
- }, 400)
-}
-
-const closeLoading = (option = {}) => {
- activeAxios--
- if (option?.persistLoading && persistentLoadingCount > 0) {
- persistentLoadingCount--
- }
-
- if (activeAxios <= 0) {
- activeAxios = 0
- persistentLoadingCount = 0
- clearLoadingTimers()
- closeLoadingInstance()
- return
- }
-
- if (forceCloseTimer) {
- clearTimeout(forceCloseTimer)
- forceCloseTimer = null
- }
-
- scheduleForceClose()
-}
-
-const resetLoading = () => {
- activeAxios = 0
- persistentLoadingCount = 0
- clearLoadingTimers()
- closeLoadingInstance()
-}
-
-service.interceptors.request.use(
- (config) => {
- if (typeof config.timeout === 'undefined') {
- config.timeout = DEFAULT_REQUEST_TIMEOUT
- }
-
- if (!config.donNotShowLoading) {
- showLoading(config.loadingOption)
- }
-
- config.baseURL = config.baseURL || import.meta.env.VITE_BASE_API
-
- const userStore = useUserStore()
- config.headers = {
- 'Content-Type': 'application/json',
- 'x-token': userStore.token,
- 'x-user-id': userStore.userInfo.ID,
- ...config.headers
- }
-
- return config
- },
- (error) => {
- if (!error.config?.donNotShowLoading) {
- closeLoading(error.config?.loadingOption)
- }
-
- emitter.emit('show-error', {
- code: 'request',
- message: error.message || '请求发送失败'
- })
-
- return error
- }
-)
-
-function getErrorMessage(error) {
- return error.response?.data?.msg || error.response?.statusText || '请求失败'
-}
-
-service.interceptors.response.use(
- (response) => {
- const userStore = useUserStore()
-
- if (!response.config.donNotShowLoading) {
- closeLoading(response.config.loadingOption)
- }
-
- if (response.headers['new-token']) {
- userStore.setToken(response.headers['new-token'])
- }
-
- if (typeof response.data.code === 'undefined') {
- return response
- }
-
- if (response.data.code === 0 || response.headers.success === 'true') {
- if (response.headers.msg) {
- response.data.msg = decodeURI(response.headers.msg)
- }
- return response.data
- }
-
- ElMessage({
- showClose: true,
- message: response.data.msg || decodeURI(response.headers.msg),
- type: 'error'
- })
-
- return response.data.msg ? response.data : response
- },
- (error) => {
- if (!error.config?.donNotShowLoading) {
- closeLoading(error.config?.loadingOption)
- }
-
- if (!error.response) {
- resetLoading()
- emitter.emit('show-error', {
- code: 'network',
- message: getErrorMessage(error)
- })
- return Promise.reject(error)
- }
-
- if (error.response.status === 401) {
- emitter.emit('show-error', {
- code: '401',
- message: getErrorMessage(error),
- fn: () => {
- const userStore = useUserStore()
- userStore.ClearStorage()
- router.push({ name: 'Login', replace: true })
- }
- })
- return Promise.reject(error)
- }
-
- emitter.emit('show-error', {
- code: error.response.status,
- message: getErrorMessage(error)
- })
- return Promise.reject(error)
- }
-)
-
-if (typeof window !== 'undefined') {
- window.addEventListener('beforeunload', resetLoading)
- window.addEventListener('unload', resetLoading)
-}
-
-export { resetLoading }
-export default service
diff --git a/web/src/utils/stringFun.js b/web/src/utils/stringFun.js
deleted file mode 100644
index baec83d..0000000
--- a/web/src/utils/stringFun.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/* eslint-disable */
-export const toUpperCase = (str) => {
- if (str[0]) {
- return str.replace(str[0], str[0].toUpperCase())
- } else {
- return ''
- }
-}
-
-export const toLowerCase = (str) => {
- if (str[0]) {
- return str.replace(str[0], str[0].toLowerCase())
- } else {
- return ''
- }
-}
-
-// 驼峰转换下划线
-export const toSQLLine = (str) => {
- if (str === 'ID') return 'ID'
- return str.replace(/([A-Z])/g, '_$1').toLowerCase()
-}
-
-// 下划线转换驼峰
-export const toHump = (name) => {
- return name.replace(/\_(\w)/g, function (all, letter) {
- return letter.toUpperCase()
- })
-}
diff --git a/web/src/view/about/index.vue b/web/src/view/about/index.vue
deleted file mode 100644
index bf02bec..0000000
--- a/web/src/view/about/index.vue
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
- gin-vue-admin
-
-
-
-
-
- flipped-aurora团队
-
-
-
-
-
-
-
- 提交记录
-
-
-
-
-
- {{ item.title }}
- {{ item.message }}
-
-
-
-
-
-
- Load more
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/banner.vue b/web/src/view/dashboard/components/banner.vue
deleted file mode 100644
index 0ea2a81..0000000
--- a/web/src/view/dashboard/components/banner.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/card.vue b/web/src/view/dashboard/components/card.vue
deleted file mode 100644
index dbc4964..0000000
--- a/web/src/view/dashboard/components/card.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
- {{ title }}
-
-
- 更多
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/charts-content-numbers.vue b/web/src/view/dashboard/components/charts-content-numbers.vue
deleted file mode 100644
index c971aaa..0000000
--- a/web/src/view/dashboard/components/charts-content-numbers.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/charts-people-numbers.vue b/web/src/view/dashboard/components/charts-people-numbers.vue
deleted file mode 100644
index c2dabc6..0000000
--- a/web/src/view/dashboard/components/charts-people-numbers.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/charts.vue b/web/src/view/dashboard/components/charts.vue
deleted file mode 100644
index 83e1b54..0000000
--- a/web/src/view/dashboard/components/charts.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/index.js b/web/src/view/dashboard/components/index.js
deleted file mode 100644
index a59985b..0000000
--- a/web/src/view/dashboard/components/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import GvaBanner from './banner.vue'
-import GvaCard from './card.vue'
-import GvaChart from './charts.vue'
-import GvaTable from './table.vue'
-import GvaNotice from './notice.vue'
-import GvaQuickLink from './quickLinks.vue'
-import GvaWiki from './wiki.vue'
-import GvaPluginTable from './pluginTable.vue'
-
-export {
- GvaBanner,
- GvaCard,
- GvaChart,
- GvaTable,
- GvaNotice,
- GvaQuickLink,
- GvaWiki,
- GvaPluginTable
-}
diff --git a/web/src/view/dashboard/components/notice.vue b/web/src/view/dashboard/components/notice.vue
deleted file mode 100644
index c2e7365..0000000
--- a/web/src/view/dashboard/components/notice.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ item.typeTitle }}
-
- {{ item.time }}
-
-
-
- {{ item.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/pluginTable.vue b/web/src/view/dashboard/components/pluginTable.vue
deleted file mode 100644
index bf79c82..0000000
--- a/web/src/view/dashboard/components/pluginTable.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/quickLinks.vue b/web/src/view/dashboard/components/quickLinks.vue
deleted file mode 100644
index 7ff1927..0000000
--- a/web/src/view/dashboard/components/quickLinks.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
常用入口
-
-
-
-
-
-
-
常用外链
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/table.vue b/web/src/view/dashboard/components/table.vue
deleted file mode 100644
index 05f2c37..0000000
--- a/web/src/view/dashboard/components/table.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/components/wiki.vue b/web/src/view/dashboard/components/wiki.vue
deleted file mode 100644
index 0b1cf49..0000000
--- a/web/src/view/dashboard/components/wiki.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/dashboard/index.vue b/web/src/view/dashboard/index.vue
deleted file mode 100644
index f7cb568..0000000
--- a/web/src/view/dashboard/index.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
DASHBOARD
-
- 欢迎回来,开始今天的Coding节奏
-
-
- {{ today }} · 已为你聚合核心业务数据、插件动态和系统公告
-
-
-
- 购买商业授权
- 插件市场
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
商业授权
-
解锁完整商用支持与专属服务
-
- 购买授权后可获得专属支持通道、插件优惠与商用合规保障,帮助团队更稳定地推进项目交付。
-
-
- 专属技术支持
- 插件优惠权益
- 商用授权凭证
-
-
- 立即购买
- 查看插件市场
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/error/index.vue b/web/src/view/error/index.vue
deleted file mode 100644
index ec91562..0000000
--- a/web/src/view/error/index.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
diff --git a/web/src/view/error/reload.vue b/web/src/view/error/reload.vue
deleted file mode 100644
index 1fd027e..0000000
--- a/web/src/view/error/reload.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
diff --git a/web/src/view/example/breakpoint/breakpoint.vue b/web/src/view/example/breakpoint/breakpoint.vue
deleted file mode 100644
index dbda33d..0000000
--- a/web/src/view/example/breakpoint/breakpoint.vue
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-
-
大文件上传
-
-
请上传不超过5MB的文件
-
-
-
-
-
-
- {{ file.name }}
- {{ percentage }}%
-
-
-
-
-
- 此版本为先行体验功能测试版,样式美化和性能优化正在进行中,上传切片文件和合成的完整文件分别再QMPlusserver目录的breakpointDir文件夹和fileDir文件夹
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/web/src/view/example/customer/customer.vue b/web/src/view/example/customer/customer.vue
deleted file mode 100644
index f4a3104..0000000
--- a/web/src/view/example/customer/customer.vue
+++ /dev/null
@@ -1,215 +0,0 @@
-
-
-
-
-
- 新增
-
-
-
-
-
- {{ formatDate(scope.row.CreatedAt) }}
-
-
-
-
-
-
-
- 变更
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/example/index.vue b/web/src/view/example/index.vue
deleted file mode 100644
index 0c3b58d..0000000
--- a/web/src/view/example/index.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/init/index.vue b/web/src/view/init/index.vue
deleted file mode 100644
index 5d76976..0000000
--- a/web/src/view/init/index.vue
+++ /dev/null
@@ -1,386 +0,0 @@
-
-
-
-
-
-
-
- GIN-VUE-ADMIN
-
-
初始化须知
-
- 1.您需有用一定的VUE和GOLANG基础
-
-
- 2.请您确认是否已经阅读过官方文档
- 初始化视频
-
-
- 3.请您确认是否了解后续的配置流程
-
-
- 4.如果您使用mysql数据库,请确认数据库引擎为innoDB
-
-
- 注:开发组不为文档中书写过的内容提供无偿服务
-
-
-
- 阅读文档
-
-
- 我已确认
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 立即初始化
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/asideComponent/asyncSubmenu.vue b/web/src/view/layout/aside/asideComponent/asyncSubmenu.vue
deleted file mode 100644
index b9c4bf4..0000000
--- a/web/src/view/layout/aside/asideComponent/asyncSubmenu.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/asideComponent/index.vue b/web/src/view/layout/aside/asideComponent/index.vue
deleted file mode 100644
index cebcc4a..0000000
--- a/web/src/view/layout/aside/asideComponent/index.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/asideComponent/menuItem.vue b/web/src/view/layout/aside/asideComponent/menuItem.vue
deleted file mode 100644
index 1bcf67f..0000000
--- a/web/src/view/layout/aside/asideComponent/menuItem.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
- {{ isCollapse ? routerInfo.meta.title[0] : "" }}
-
-
- {{ routerInfo.meta.title }}
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/combinationMode.vue b/web/src/view/layout/aside/combinationMode.vue
deleted file mode 100644
index 5a72bb2..0000000
--- a/web/src/view/layout/aside/combinationMode.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
selectMenuItem(index, _, ele, true)"
- >
-
-
-
-
-
-
-
- selectMenuItem(index, _, ele, false)"
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/headMode.vue b/web/src/view/layout/aside/headMode.vue
deleted file mode 100644
index daa99da..0000000
--- a/web/src/view/layout/aside/headMode.vue
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/index.vue b/web/src/view/layout/aside/index.vue
deleted file mode 100644
index c85e8f4..0000000
--- a/web/src/view/layout/aside/index.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/normalMode.vue b/web/src/view/layout/aside/normalMode.vue
deleted file mode 100644
index 18bc001..0000000
--- a/web/src/view/layout/aside/normalMode.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/aside/sidebarMode.vue b/web/src/view/layout/aside/sidebarMode.vue
deleted file mode 100644
index 853b0a5..0000000
--- a/web/src/view/layout/aside/sidebarMode.vue
+++ /dev/null
@@ -1,290 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.meta.title[0] }}
-
-
- {{ item.meta.title }}
-
-
-
-
-
-
-
-
- {{ item.meta.title[0] }}
-
-
- {{ item.meta.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/header/index.vue b/web/src/view/layout/header/index.vue
deleted file mode 100644
index 041d910..0000000
--- a/web/src/view/layout/header/index.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
-
-
- {{ $GIN_VUE_ADMIN.appName }}
-
-
-
-
-
- {{ fmtTitle(item.meta.title, route) }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{
- userStore.userInfo.nickName
- }}
-
-
-
-
-
-
-
-
-
- 当前角色:{{ userStore.userInfo.authority.authorityName }}
-
-
-
-
- 切换为:{{ item.authorityName }}
-
-
-
- 个人信息
-
-
- 登 出
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/header/tools.vue b/web/src/view/layout/header/tools.vue
deleted file mode 100644
index 3995338..0000000
--- a/web/src/view/layout/header/tools.vue
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ item.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/iframe.vue b/web/src/view/layout/iframe.vue
deleted file mode 100644
index 137b520..0000000
--- a/web/src/view/layout/iframe.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/index.vue b/web/src/view/layout/index.vue
deleted file mode 100644
index 4e998ea..0000000
--- a/web/src/view/layout/index.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/screenfull/index.vue b/web/src/view/layout/screenfull/index.vue
deleted file mode 100644
index da91a50..0000000
--- a/web/src/view/layout/screenfull/index.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/search/search.vue b/web/src/view/layout/search/search.vue
deleted file mode 100644
index 5375d70..0000000
--- a/web/src/view/layout/search/search.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/components/layoutModeCard.vue b/web/src/view/layout/setting/components/layoutModeCard.vue
deleted file mode 100644
index abe8fcc..0000000
--- a/web/src/view/layout/setting/components/layoutModeCard.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-
-
-
-
-
-
- {{ layout.label }}
- {{ layout.description }}
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/components/settingItem.vue b/web/src/view/layout/setting/components/settingItem.vue
deleted file mode 100644
index 2d66c6a..0000000
--- a/web/src/view/layout/setting/components/settingItem.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
- {{ label }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/components/themeColorPicker.vue b/web/src/view/layout/setting/components/themeColorPicker.vue
deleted file mode 100644
index 32234fc..0000000
--- a/web/src/view/layout/setting/components/themeColorPicker.vue
+++ /dev/null
@@ -1,150 +0,0 @@
-
-
-
-
-
-
-
-
-
-
当前主题色
-
-
-
- {{ modelValue }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/components/themeModeSelector.vue b/web/src/view/layout/setting/components/themeModeSelector.vue
deleted file mode 100644
index bc34b2d..0000000
--- a/web/src/view/layout/setting/components/themeModeSelector.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
- {{ mode.label }}
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/index.vue b/web/src/view/layout/setting/index.vue
deleted file mode 100644
index 9a84afd..0000000
--- a/web/src/view/layout/setting/index.vue
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
系统配置
-
- 重置配置
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/modules/appearance/index.vue b/web/src/view/layout/setting/modules/appearance/index.vue
deleted file mode 100644
index 930d253..0000000
--- a/web/src/view/layout/setting/modules/appearance/index.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 设置全局组件尺寸
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 降低色彩饱和度
-
-
-
-
-
-
- 优化色彩对比度
-
-
-
-
-
-
- 在页面显示水印标识
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/modules/general/index.vue b/web/src/view/layout/setting/modules/general/index.vue
deleted file mode 100644
index 863adb2..0000000
--- a/web/src/view/layout/setting/modules/general/index.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-
-
-
-
-
-
-
- 版本
- v2.7.4
-
-
- 前端框架
- Vue 3
-
-
- UI 组件库
- Element Plus
-
-
- 构建工具
- Vite
-
-
- 浏览器
- {{ browserInfo }}
-
-
- 屏幕分辨率
- {{ screenResolution }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 📤
-
-
-
导出配置
-
导出当前配置为 JSON 文件
-
-
-
- 导出配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Gin-Vue-Admin
-
- 基于 Vue3 + Gin 的全栈开发基础平台,提供完整的后台管理解决方案
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/setting/modules/layout/index.vue b/web/src/view/layout/setting/modules/layout/index.vue
deleted file mode 100644
index 3756947..0000000
--- a/web/src/view/layout/setting/modules/layout/index.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- 页面标签导航
-
-
-
-
-
-
- 页面过渡效果
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
侧边栏展开宽度
-
侧边栏完全展开时的宽度
-
-
-
- px
-
-
-
-
-
-
-
-
侧边栏收缩宽度
-
侧边栏收缩时的最小宽度
-
-
-
- px
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/layout/tabs/index.vue b/web/src/view/layout/tabs/index.vue
deleted file mode 100644
index 31f4531..0000000
--- a/web/src/view/layout/tabs/index.vue
+++ /dev/null
@@ -1,421 +0,0 @@
-
-
-
-
-
-
- {{ fmtTitle(item.meta.title, item) }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/login/index.vue b/web/src/view/login/index.vue
deleted file mode 100644
index 0e3044b..0000000
--- a/web/src/view/login/index.vue
+++ /dev/null
@@ -1,251 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $GIN_VUE_ADMIN.appName }}
-
-
- A management platform using Golang and Vue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![请输入验证码]()
-
-
-
-
- 登 录
-
-
- 前往初始化
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/person/person.vue b/web/src/view/person/person.vue
deleted file mode 100644
index 9920aae..0000000
--- a/web/src/view/person/person.vue
+++ /dev/null
@@ -1,631 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ userStore.userInfo.nickName }}
-
-
-
-
-
-
-
- 确认
-
-
- 取消
-
-
-
-
-
-
-
- 中国·北京市·朝阳区
-
-
-
- 北京翻转极光科技有限公司
-
-
-
- 技术部·前端事业群
-
-
-
-
-
-
- 发送消息
-
- 分享主页
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 基本信息
-
-
-
-
-
手机号码:
-
{{ userStore.userInfo.phone || '未设置' }}
-
- 修改
-
-
-
-
- 邮箱地址:
- {{ userStore.userInfo.email || '未设置' }}
-
- 修改
-
-
-
-
- 账号密码:
- 已设置
-
- 修改
-
-
-
-
-
-
-
-
- 技能特长
-
-
-
GoLang
-
JavaScript
-
Vue
-
Gorm
-
-
- 添加技能
-
-
-
-
-
-
-
-
-
-
-
-
-
- 数据统计
-
-
-
-
-
-
-
-
- 近期动态
-
-
-
-
-
-
- {{ activity.title }}
-
- {{ activity.content }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ time > 0 ? `${time}s` : '获取验证码' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ emailTime > 0 ? `${emailTime}s` : '获取验证码' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/routerHolder.vue b/web/src/view/routerHolder.vue
deleted file mode 100644
index 1b671ab..0000000
--- a/web/src/view/routerHolder.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/api/api.vue b/web/src/view/superAdmin/api/api.vue
deleted file mode 100644
index a4d78d9..0000000
--- a/web/src/view/superAdmin/api/api.vue
+++ /dev/null
@@ -1,918 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
-
- 重置
-
-
-
-
-
-
- 新增
-
-
- 删除
-
- 刷新缓存
- 同步API
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.method }} / {{ methodFilter(scope.row.method) }}
-
-
-
-
-
-
-
- 编辑
-
-
- 分配角色
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
同步路由
-
-
- 取 消
-
-
- 确 定
-
-
-
-
-
-
- 新增路由
- 存在于当前路由中,但是不存在于api表
-
-
-
-
- 自动填充
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.method }} / {{ methodFilter(scope.row.method) }}
-
-
-
-
-
-
- 单条新增
-
-
- 忽略
-
-
-
-
-
-
- 已删除路由
- 已经不存在于当前项目的路由中,确定同步后会自动从apis表删除
-
-
-
-
-
-
-
-
- {{ scope.row.method }} / {{ methodFilter(scope.row.method) }}
-
-
-
-
-
-
- 忽略路由
- 忽略路由不参与api同步,常见为不需要进行鉴权行为的路由
-
-
-
-
-
-
-
-
- {{ scope.row.method }} / {{ methodFilter(scope.row.method) }}
-
-
-
-
-
-
- 取消忽略
-
-
-
-
-
-
-
-
-
-
{{ dialogTitle }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
分配角色 - {{ assignApiRow.description }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/authority/authority.vue b/web/src/view/superAdmin/authority/authority.vue
deleted file mode 100644
index b6177b2..0000000
--- a/web/src/view/superAdmin/authority/authority.vue
+++ /dev/null
@@ -1,595 +0,0 @@
-
-
-
-
-
- 新增角色
-
-
-
-
-
-
- 设置权限
- 分配给用户
- 新增子角色
- 拷贝
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
{{ authorityTitleForm }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
分配用户 - {{ assignRow.authorityName }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查 询
- 重 置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/authority/components/apis.vue b/web/src/view/superAdmin/authority/components/apis.vue
deleted file mode 100644
index ea17645..0000000
--- a/web/src/view/superAdmin/authority/components/apis.vue
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
-
-
- 确 定
-
-
-
-
-
-
- {{ data.description }}
-
- {{ data.path }}
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/authority/components/datas.vue b/web/src/view/superAdmin/authority/components/datas.vue
deleted file mode 100644
index 71e4d5b..0000000
--- a/web/src/view/superAdmin/authority/components/datas.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
- 全选
- 本角色
- 本角色及子角色
- 确 定
-
-
-
- {{ item.authorityName }}
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/authority/components/menus.vue b/web/src/view/superAdmin/authority/components/menus.vue
deleted file mode 100644
index 6c9bce9..0000000
--- a/web/src/view/superAdmin/authority/components/menus.vue
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
-
-
- 确 定
-
-
- 默认首页:
-
-
-
-
-
-
-
-
-
-
- {{ node.label }}
-
-
- OpenBtn(data)">
- 分配按钮
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/dictionary/sysDictionary.vue b/web/src/view/superAdmin/dictionary/sysDictionary.vue
deleted file mode 100644
index c676c84..0000000
--- a/web/src/view/superAdmin/dictionary/sysDictionary.vue
+++ /dev/null
@@ -1,924 +0,0 @@
-
-
-
-
-
-
-
- 字典列表
-
-
- 搜索
-
-
-
-
-
-
-
-
-
-
-
- AI
-
-
-
-
-
-
-
-
-
-
- └─
- {{ dictionary.name }}
- ({{ dictionary.type }})
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{
- type === 'create' ? '添加字典' : '修改字典'
- }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
导入字典JSON
-
- 取 消
-
- 确认导入
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
将 JSON 文件拖到此处,或点击选择文件
-
也可以在下方文本框直接编辑
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 粘贴或上传图片后,识别图片内容生成字典。
-
-
-
-
-
- 识图
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue b/web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
deleted file mode 100644
index d4045dc..0000000
--- a/web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
+++ /dev/null
@@ -1,430 +0,0 @@
-
-
-
-
-
字典详细内容
-
-
-
- 搜索
-
-
-
- 新增字典项
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ formatBoolean(scope.row.status) }}
-
-
-
-
-
-
-
-
- 添加子项
-
-
- 变更
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
{{
- type === 'create' ? '添加字典项' : '修改字典项'
- }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/index.vue b/web/src/view/superAdmin/index.vue
deleted file mode 100644
index 4e148d1..0000000
--- a/web/src/view/superAdmin/index.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/menu/components/components-cascader.vue b/web/src/view/superAdmin/menu/components/components-cascader.vue
deleted file mode 100644
index 2370c00..0000000
--- a/web/src/view/superAdmin/menu/components/components-cascader.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
- {{ pathIsSelect ? '手动输入' : '快捷选择' }}
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/menu/icon.vue b/web/src/view/superAdmin/menu/icon.vue
deleted file mode 100644
index d67124e..0000000
--- a/web/src/view/superAdmin/menu/icon.vue
+++ /dev/null
@@ -1,1179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.key }}
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/menu/menu.vue b/web/src/view/superAdmin/menu/menu.vue
deleted file mode 100644
index ff290bf..0000000
--- a/web/src/view/superAdmin/menu/menu.vue
+++ /dev/null
@@ -1,932 +0,0 @@
-
-
-
-
-
- 新增根菜单
-
-
-
-
-
-
-
-
- {{ scope.row.meta.title }}
-
-
-
-
-
-
-
-
- {{ scope.row.meta.icon }}
-
-
-
-
-
-
-
- {{ scope.row.hidden ? '隐藏' : '显示' }}
-
-
-
-
-
-
-
-
- 添加子菜单
-
-
- 编辑
-
-
- 分配角色
-
-
- 删除
-
-
-
-
-
-
-
-
-
{{ dialogTitle }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
基础信息
-
-
-
-
-
-
-
- 如果菜单包含子菜单,请创建router-view二级路由页面或者
-
- 点我设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
路由配置
-
-
-
-
-
-
-
-
-
-
-
- 路由Path
- 添加参数
-
-
-
-
-
-
-
-
-
-
-
-
显示设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
高级配置
-
-
-
-
-
-
- 高亮菜单
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 是否为基础页面
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 路由切换动画
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
菜单参数配置
-
- 新增菜单参数
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
可控按钮配置
-
-
- 新增可控按钮
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
分配角色 - {{ assignMenuRow.meta?.title }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/operation/sysOperationRecord.vue b/web/src/view/superAdmin/operation/sysOperationRecord.vue
deleted file mode 100644
index 27764c1..0000000
--- a/web/src/view/superAdmin/operation/sysOperationRecord.vue
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
- 删除
-
-
-
-
-
-
- {{ scope.row.user.userName }}({{ scope.row.user.nickName }})
-
-
-
-
- {{
- formatDate(scope.row.CreatedAt)
- }}
-
-
-
-
- {{ scope.row.status }}
-
-
-
-
-
-
-
-
-
-
-
-
{{ fmtBody(scope.row.body) }}
-
-
-
-
-
-
-
无
-
-
-
-
-
-
-
-
-
{{ fmtBody(scope.row.resp) }}
-
-
-
-
-
-
无
-
-
-
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/params/sysParams.vue b/web/src/view/superAdmin/params/sysParams.vue
deleted file mode 100644
index f18520c..0000000
--- a/web/src/view/superAdmin/params/sysParams.vue
+++ /dev/null
@@ -1,604 +0,0 @@
-
-
-
-
-
-
-
-
- 创建日期
-
-
-
-
-
-
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
- 展开
- 收起
-
-
-
-
-
- 新增
- 删除
-
-
-
-
-
- {{
- formatDate(scope.row.CreatedAt)
- }}
-
-
-
-
-
-
-
-
- 查看详情
- 变更
- 删除
-
-
-
-
-
-
-
-
-
{{ type === 'create' ? '添加' : '修改' }}
-
- 确 定
- 取 消
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
使用说明
-
- 前端可以通过引入
- import { getParams } from '@/utils/params'
- 然后通过
- await getParams("{{ formData.key }}")
- 来获取对应的参数。
-
-
- 后端需要提前
- import
- "github.com/flipped-aurora/gin-vue-admin/server/service/system"
-
-
- 然后调用
- new(system.SysParamsService).GetSysParam("{{
- formData.key
- }}")
- 来获取对应的 value 值。
-
-
-
-
-
-
-
- {{ detailForm.name }}
-
-
- {{ detailForm.key }}
-
-
- {{ detailForm.value }}
-
-
- {{ detailForm.desc }}
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/superAdmin/user/user.vue b/web/src/view/superAdmin/user/user.vue
deleted file mode 100644
index 3dfe17f..0000000
--- a/web/src/view/superAdmin/user/user.vue
+++ /dev/null
@@ -1,622 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
-
- 重置
-
-
-
-
-
- 新增用户
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- changeAuthority(scope.row, flag, 0)
- }
- "
- @remove-tag="
- (removeAuth) => {
- changeAuthority(scope.row, false, removeAuth)
- }
- "
- />
-
-
-
-
- {
- switchEnable(scope.row)
- }
- "
- />
-
-
-
-
-
- 删除
- 编辑
- 重置密码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 生成随机密码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/system/state.vue b/web/src/view/system/state.vue
deleted file mode 100644
index e54eeb9..0000000
--- a/web/src/view/system/state.vue
+++ /dev/null
@@ -1,192 +0,0 @@
-
-
-
-
-
-
- Runtime
-
-
-
- os:
- {{ state.os.goos }}
-
-
- cpu nums:
- {{ state.os.numCpu }}
-
-
- compiler:
- {{ state.os.compiler }}
-
-
- go version:
- {{ state.os.goVersion }}
-
-
- goroutine nums:
- {{ state.os.numGoroutine }}
-
-
-
-
-
-
-
- Disk
-
-
-
-
-
- MountPoint
- {{ item.mountPoint }}
-
-
- total (MB)
- {{ item.totalMb }}
-
-
- used (MB)
- {{ item.usedMb }}
-
-
- total (GB)
- {{ item.totalGb }}
-
-
- used (GB)
- {{ item.usedGb }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CPU
-
-
-
- physical number of cores:
- {{ state.cpu.cores }}
-
-
- core {{ index }}:
-
-
-
-
-
-
-
-
-
-
- Ram
-
-
-
-
-
- total (MB)
- {{ state.ram.totalMb }}
-
-
- used (MB)
- {{ state.ram.usedMb }}
-
-
- total (GB)
- {{ state.ram.totalMb / 1024 }}
-
-
- used (GB)
- {{
- (state.ram.usedMb / 1024).toFixed(2)
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/aiWrokflow/index.vue b/web/src/view/systemTools/aiWrokflow/index.vue
deleted file mode 100644
index 68fd962..0000000
--- a/web/src/view/systemTools/aiWrokflow/index.vue
+++ /dev/null
@@ -1,2423 +0,0 @@
-
-
-
-
-
-
- AI 需求分析与 Prompt 工作流
-
-
- 会话会自动保存到后端。刷新页面后可以继续查看历史需求、按节点回看结果,并支持回滚到任意
- Assistant 节点后重新续聊。
-
-
-
- 填入示例
-
-
-
-
-
-
-
-
-
-
输入与历史
-
- {{
- currentSession.id
- ? `会话 #${currentSession.id}`
- : '未保存新会话'
- }}
-
-
-
- {{ activeTab === 'analysis' ? '当前:需求分析' : '当前:工作流' }}
-
-
-
-
-
-
-
-
-
- 先选择当前工作模式
-
-
- 很多用户会忽略这里,现在可以直接点下面的大卡片切换。
-
-
-
可随时切换
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.title || '未命名需求' }}
-
-
{{
- item.tab === 'analysis' ? '分析' : '工作流'
- }}
-
-
- {{ item.summary || '暂无摘要' }}
-
-
- 更新时间:{{
- formatTime(item.UpdatedAt || item.updatedAt)
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 自动判断
- package
- plugin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 开始分析
- 带入工作流
- 清空
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 生成
- 复制全部
- 清空
-
-
-
-
-
-
-
- 当前会话会持久化到后端。点击历史需求即可恢复内容,刷新页面后也会自动加载最近一次会话。
-
-
- 新建会话
- 复制会话 ID
-
-
- conversation_id:
- {{
- currentSession.conversationId ||
- '当前会话还没有 conversation_id'
- }}
-
-
- 当前节点:
- {{
- currentSession.currentNodeId || '默认显示最新 Assistant 节点'
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ activeTab === 'analysis' ? '需求分析结果' : '工作流结果' }}
-
-
- {{
- activeTab === 'analysis'
- ? '支持从会话节点回看任意版本的分析结果。'
- : '支持从会话节点回看任意版本的工作流结果。'
- }}
-
-
-
- {{ activeTab === 'analysis' ? '落盘分析' : '落盘 Prompt' }}
- 回滚到当前节点
- 复制结构化结果
- 复制原始结果
-
-
-
-
-
-
-
-
- AI 思考中...
-
-
{{ streamingPreviewText }}
-
等待模型响应...
-
-
-
-
会话记录
- {{ currentSession.messages.length }} 条
-
-
-
-
-
-
- {{ item.role === 'user' ? 'User' : 'Assistant' }}
-
-
- {{ formatTime(item.createdAt) }}
-
-
-
- 查看节点
- 回滚到这里
-
-
-
- {{ item.content }}
-
-
-
-
- 正在流式返回,当前内容实时展开中...
-
- {{ item.content || '...' }}
-
-
-
- {{
- item.display.preview ||
- 'Assistant 返回内容已折叠,按需展开查看。'
- }}
-
-
- Think
- 原始文件
-
-
-
-
-
-
-
-
-
-
-
继续追问
- {{
- currentSession.conversationId
- ? '会自动续用当前 conversation_id'
- : '若已回滚,将基于当前节点结果重新开启会话'
- }}
-
-
-
- 继续追问
- 清空输入
-
-
-
-
-
-
-
- Summary
-
-
- {{
- analysisResult.summary || '未解析到摘要,将保留原始结果。'
- }}
-
-
- 推荐: {{ analysisResult.recommendedPackageType }}
- 模块 {{ analysisResult.modules.length }}
- 客户端页面 {{ analysisClientPages.length }}
- 待确认 {{ analysisResult.missingInfo.length }}
-
-
-
-
- {{ item }}
-
-
-
-
-
-
-
- {{ module.description || '暂无模块说明。' }}
-
-
-
-
-
-
- {{ field.label || field.name }}
-
-
- {{ field.name }}
-
-
-
- {{ field.type || 'string' }}
-
-
-
- {{ field.description || '暂无字段说明。' }}
-
-
-
- 必填
-
-
- 字典: {{ field.dictionary }}
-
-
- 关联: {{ field.relation }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ page.pageType }}
-
-
- {{ moduleName }}
-
-
-
- {{ page.description || '暂无页面说明。' }}
-
-
-
-
-
-
- {{ field.label || field.name }}
-
-
- {{ field.name }}
-
-
-
- {{ field.displayType || 'text' }}
-
-
-
- {{ field.description || '暂无页面字段说明。' }}
-
-
-
- 必填
-
-
- {{ `${field.sourceModule || '-'}.${
- field.sourceField || '-'
- }` }}
-
-
-
-
-
-
页面交互
-
- {{ item }}
-
-
-
-
字段映射关系
-
- {{ item }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Workflow Summary
-
-
- {{ workflowResult.summary || '已生成 Prompt 工作流。' }}
-
-
- 步骤 {{ workflowResult.steps.length }}
-
-
-
-
-
-
-
- {{ index + 1 }}
-
-
-
- {{ step.title || `步骤 ${index + 1}` }}
-
-
- {{ step.goal || '建议按顺序执行这一轮 Prompt。' }}
-
-
-
-
- {{ step.suggestedTool }}
- {{
- step.autoExecutable ? '可自动执行' : '建议人工确认'
- }}
-
-
-
-
- Prompt
-
-
{{ step.prompt || '模型未返回该步骤 Prompt。' }}
-
-
-
- Expected Output
-
-
- {{ step.expectedOutput }}
-
-
-
-
-
-
-
-
-
-
-
- {{ drawerContent }}
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/apiToken/index.vue b/web/src/view/systemTools/apiToken/index.vue
deleted file mode 100644
index 486ba56..0000000
--- a/web/src/view/systemTools/apiToken/index.vue
+++ /dev/null
@@ -1,299 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
- 签发
-
-
-
-
-
- {{ scope.row.user.nickName }} ({{ scope.row.user.userName }})
-
-
-
-
-
-
- {{ scope.row.status ? '有效' : '已作废' }}
-
-
-
-
- {{ formatDate(scope.row.expiresAt) }}
-
-
-
-
- Curl示例
-
- 确定要作废吗?
-
- 取消
- 确定
-
-
- 作废
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 签发JWT
-
-
-
-
-
-
-
-
-
-
- 复制
- 关闭
-
-
-
-
-
-
Header 方式:
-
-
复制
-
-
-
-
Cookie 方式:
-
-
复制
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/component/fieldDialog.vue b/web/src/view/systemTools/autoCode/component/fieldDialog.vue
deleted file mode 100644
index 8f130e7..0000000
--- a/web/src/view/systemTools/autoCode/component/fieldDialog.vue
+++ /dev/null
@@ -1,502 +0,0 @@
-
-
-
-
-
-
-
- 自动填充
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.aliasName }}
- {{
- item.dbName
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 存储:
- {{ value }}
-
-
-
-
- {{ item.isPrimary ? '主 键' : '非主键' }}
-
- {{ item.columnName }}
-
- 类型:{{ item.type }}
- ,字段说明:{{ item.comment }}
-
-
-
-
-
-
-
- 展示:
- {{ value }}
-
-
-
-
- {{ item.isPrimary ? '主 键' : '非主键' }}
-
- {{ item.columnName }}
-
- 类型:{{ item.type }}
- ,字段说明:{{ item.comment }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/component/previewCodeDialog.vue b/web/src/view/systemTools/autoCode/component/previewCodeDialog.vue
deleted file mode 100644
index aa9c030..0000000
--- a/web/src/view/systemTools/autoCode/component/previewCodeDialog.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/index.vue b/web/src/view/systemTools/autoCode/index.vue
deleted file mode 100644
index f6b2442..0000000
--- a/web/src/view/systemTools/autoCode/index.vue
+++ /dev/null
@@ -1,1681 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 【完全免费】前往
插件市场个人中心申请AIPath,填入config.yaml的ai-path属性即可使用。
-
-
-
-
-
-
- 识图
-
-
-
-
-
-
-
-
- 【完全免费】前往
插件市场个人中心申请AIPath,填入config.yaml的ai-path属性即可使用。
-
-
-
-
-
-
- 生成
-
-
-
-
-
-
-
-
从数据库创建
-
-
-
-
-
-
-
- 业务库
-
-
-
-
-
-
- {{ item.aliasName }}
- {{ item.dbName }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 使用此表
-
-
-
-
-
-
-
-
-
-
自动化结构
-
-
-
-
-
-
-
-
-
-
-
-
- 结构简称
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 文件名称
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 业务库
-
-
-
-
-
-
- {{ item.aliasName }}
- {{ item.dbName }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 专家模式
-
-
-
-
- {{ isActive ? '收起' : '展开' }}
-
-
-
-
-
-
基础设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
自动化设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
高级设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
树形结构设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 新增字段
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 高级编辑
-
-
- 删除
-
-
-
-
-
-
-
-
- 导出json
-
-
- 导入json
-
-
- 清除暂存
-
-
- 暂存
-
-
- 生成代码
-
-
- {{ isAdd ? '查看代码' : '预览代码' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/mcp.vue b/web/src/view/systemTools/autoCode/mcp.vue
deleted file mode 100644
index 0113a7b..0000000
--- a/web/src/view/systemTools/autoCode/mcp.vue
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/mcpTest.vue b/web/src/view/systemTools/autoCode/mcpTest.vue
deleted file mode 100644
index fe951a7..0000000
--- a/web/src/view/systemTools/autoCode/mcpTest.vue
+++ /dev/null
@@ -1,615 +0,0 @@
-
-
-
-
-
-
MCP 服务器配置示例
-
-
- 启动
-
-
- 停用
-
-
- 刷新
-
-
-
-
-
-
-
-
-
- {{ statusText }}
- {{ statusHint }}
-
-
-
-
- 服务地址:
- {{
- mcpServiceStatus.baseURL
- }}
-
-
- 健康检查:
- {{
- mcpServiceStatus.healthURL
- }}
-
-
- 启动时间:
- {{
- formatTime(mcpServiceStatus.startedAt)
- }}
-
-
- 最近错误:
- {{
- mcpServiceStatus.lastError
- }}
-
-
-
- {{ mcpServerConfig }}
-
-
-
-
-
-
-
-
-
- {{ tool.name }}
-
-
-
-
-
-
- {{ tool.description }}
-
-
-
- 参数列表
- ({{ Object.keys(tool.inputSchema.properties).length }})
-
-
-
-
-
- {{ propName }}
-
- *
-
-
-
- {{ propDetails.type }}
-
-
-
- {{ propDetails.description || '无描述' }}
-
-
-
-
-
-
- 无输入参数
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
API 返回结果:
-
-
{{ apiDialogResponse }}
-
-
-
-
-
-
{{ apiDialogResponse.content }}
-
-
-
{{ JSON.stringify(apiDialogResponse, null, 2) }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCode/picture.vue b/web/src/view/systemTools/autoCode/picture.vue
deleted file mode 100644
index 56a3b1c..0000000
--- a/web/src/view/systemTools/autoCode/picture.vue
+++ /dev/null
@@ -1,426 +0,0 @@
-
-
-
-
-
-
-
-
-
-
页面用途
-
- 企业官网
- 电商页面
- 个人博客
- 产品介绍
- 活动落地页
- 其他
-
-
-
-
-
-
主要内容板块
-
- Banner轮播图
- 产品/服务介绍
- 功能特点展示
- 客户案例
- 团队介绍
- 联系表单
- 新闻/博客列表
- 价格表
- FAQ/常见问题
- 用户评价
- 数据统计
- 商品列表
- 商品卡片
- 购物车
- 结算页面
- 订单跟踪
- 商品分类
- 热门推荐
- 限时特惠
- 其他
-
-
-
-
-
-
风格偏好
-
- 简约
- 科技感
- 温馨
- 专业
- 创意
- 复古
- 奢华
- 其他
-
-
-
-
-
-
设计布局
-
- 单栏布局
- 双栏布局
- 三栏布局
- 网格布局
- 画廊布局
- 瀑布流
- 卡片式
- 侧边栏+内容布局
- 分屏布局
- 全屏滚动布局
- 混合布局
- 响应式
- 其他
-
-
-
-
-
-
配色方案
-
- 蓝色系
- 绿色系
- 红色系
- 黑白灰
- 纯黑白
- 暖色调
- 冷色调
- 其他
-
-
-
-
-
-
-
-
详细描述(可选)
-
-
-
-
-
-
-
-
-
-
- 生成
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 复制
-
-
{{ htmlFromLLM }}
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoCodeAdmin/index.vue b/web/src/view/systemTools/autoCodeAdmin/index.vue
deleted file mode 100644
index b67e3ac..0000000
--- a/web/src/view/systemTools/autoCodeAdmin/index.vue
+++ /dev/null
@@ -1,620 +0,0 @@
-
-
-
-
-
- 新增
-
-
-
-
-
-
-
- {{ formatDate(scope.row.CreatedAt) }}
-
-
-
-
-
-
-
-
- 已回滚
-
- 未回滚
-
-
-
-
-
-
- 增加方法
-
-
- 增加字段
-
-
- 回滚
-
-
- 复用
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
操作栏
-
-
- 生成
-
-
- 取消
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 当前ai帮写存在不稳定因素,生成代码后请注意手动调整部分内容
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- API路径: [{{ autoFunc.method }}] /{{ autoFunc.abbreviation }}/{{
- autoFunc.router
- }}
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/autoPkg/autoPkg.vue b/web/src/view/systemTools/autoPkg/autoPkg.vue
deleted file mode 100644
index 7a60a75..0000000
--- a/web/src/view/systemTools/autoPkg/autoPkg.vue
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
- 新增
-
-
-
-
-
-
-
-
-
-
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
创建Package
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/exportTemplate/code.js b/web/src/view/systemTools/exportTemplate/code.js
deleted file mode 100644
index 98823ee..0000000
--- a/web/src/view/systemTools/exportTemplate/code.js
+++ /dev/null
@@ -1,32 +0,0 @@
-export const getCode = (templateID) => {
- return `
-
-
-
-
-
-
-
-
-
-
-`
-}
diff --git a/web/src/view/systemTools/exportTemplate/exportTemplate.vue b/web/src/view/systemTools/exportTemplate/exportTemplate.vue
deleted file mode 100644
index 79d5da6..0000000
--- a/web/src/view/systemTools/exportTemplate/exportTemplate.vue
+++ /dev/null
@@ -1,1166 +0,0 @@
-
-
-
-
-
-
-
-
- 创建日期
-
-
-
-
-
-
- —
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
- 新增
-
- 删除
-
-
-
-
- {{
- formatDate(scope.row.CreatedAt)
- }}
-
-
-
- {{ scope.row.dbName || 'GVA库' }}
-
-
-
-
-
-
-
-
- 复制
- 代码和SQL预览
- 变更
- 删除
-
-
-
-
-
-
-
-
-
{{ type === 'create' ? '添加' : '修改' }}
-
- 取 消
- 确 定
-
-
-
-
-
-
-
-
-
- 业务库
-
-
-
-
-
-
- {{ item.aliasName }}
- {{
- item.dbName
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- formData.joinTemplate.splice(key, 1)"
- >删除
-
-
- 添加条件
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- formData.conditions.splice(key, 1)"
- >删除
-
-
- 添加条件
-
-
-
-
-
-
-
-
-
-
-
- 此时导出条件的key必然为 condition = {key1:"value1",key2:"value2"},这里需要和你传入sql语句@key占位符的key一致。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
模板与预览
-
- 关 闭
- 生 成
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询条件
- 该模板暂无条件
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/formCreate/index.vue b/web/src/view/systemTools/formCreate/index.vue
deleted file mode 100644
index 7f3532f..0000000
--- a/web/src/view/systemTools/formCreate/index.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
-
- 解析为 Vue 原生标签
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/index.vue b/web/src/view/systemTools/index.vue
deleted file mode 100644
index 697d431..0000000
--- a/web/src/view/systemTools/index.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/installPlugin/index.vue b/web/src/view/systemTools/installPlugin/index.vue
deleted file mode 100644
index 95d0ce7..0000000
--- a/web/src/view/systemTools/installPlugin/index.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
diff --git a/web/src/view/systemTools/loginLog/index.vue b/web/src/view/systemTools/loginLog/index.vue
deleted file mode 100644
index eb77b0c..0000000
--- a/web/src/view/systemTools/loginLog/index.vue
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
- 删除
-
-
-
-
-
-
-
-
-
- {{ scope.row.status ? '成功' : '失败' }}
-
-
-
-
-
- {{ scope.row.status ? '登录成功' : scope.row.errorMessage }}
-
-
-
-
- {{ formatDate(scope.row.CreatedAt) }}
-
-
-
-
- 确定要删除吗?
-
- 取消
- 确定
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/pubPlug/pubPlug.vue b/web/src/view/systemTools/pubPlug/pubPlug.vue
deleted file mode 100644
index f004e96..0000000
--- a/web/src/view/systemTools/pubPlug/pubPlug.vue
+++ /dev/null
@@ -1,305 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/skills/index.vue b/web/src/view/systemTools/skills/index.vue
deleted file mode 100644
index f06983b..0000000
--- a/web/src/view/systemTools/skills/index.vue
+++ /dev/null
@@ -1,1460 +0,0 @@
-
-
-
-
-
-
- AI 工具
-
-
-
-
-
- 全局约束
- 编辑
-
- 路径: {{ globalConstraintPath }}
-
-
-
-
-
-
-
-
-
-
-
- {{ skill }}
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ activeSkill }}
- Skill
-
-
- 打包
- 保存配置
-
-
-
-
-
-
-
填写指引
-
- - Name 用小写+连字符(kebab-case),作为技能目录名与 /slash 命令。
- - Description 写清触发条件与关键词,这是自动匹配的核心。
- - 正文建议按 Instructions / Examples / Guidelines 组织,写清输入、输出与约束。
- - 需要模板/规范/脚本时,在正文中引用 templates/...、references/...、scripts/...
-
-
-
-
-
-
- Name
-
-
-
-
-
-
- 建议 2-4 个单词,避免空格与中文。
-
-
-
-
- Description
-
-
-
-
-
-
- 建议包含:任务类型、触发场景、关键词。
-
-
-
-
- Allowed Tools
-
-
-
-
-
-
- 可选字段,留空后保存会移除
-
-
-
-
- Context
-
-
-
-
-
-
- 可选字段,留空后保存会移除
-
-
-
-
- Agent
-
-
-
-
-
-
- 可选字段,留空后保存会移除
-
-
-
-
- Markdown 内容
-
-
-
-
-
-
-
- {{ block.label }}
-
- 插入完整模板
-
-
-
- 建议精简正文,把细节放到 templates/references/scripts,并在正文中通过相对路径引用。
-
-
-
-
-
-
-
-
- 适合放可执行逻辑或校验流程,在正文中引用 scripts/文件名 使用(运行需启用 code execution)。
-
-
-
-
-
-
- {{ scope.row.name }}
-
-
-
-
-
- 编辑
- 调用
-
-
-
-
-
-
-
-
-
路径: resources/
-
创建资源
-
-
- 适合补充背景资料或术语表,在正文中引用 resources/文件名 提示模型按需查阅。
-
-
-
-
-
-
- {{ scope.row.name }}
-
-
-
-
-
- 编辑
- 引用
-
-
-
-
-
-
-
-
-
路径: references/
-
创建参考
-
-
- 适合放规范、规则或权威资料,在正文中引用 references/文件名 指定遵循来源。
-
-
-
-
-
-
- {{ scope.row.name }}
-
-
-
-
-
- 编辑
- 引用
-
-
-
-
-
-
-
-
-
路径: templates/
-
创建模板
-
-
- 适合放输出结构或代码骨架,在正文中引用 templates/文件名 作为格式约束。
-
-
-
-
-
-
- {{ scope.row.name }}
-
-
-
-
-
- 编辑
- 引用
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 仅小写字母/数字/连字符(kebab-case)。
-
-
-
- 写清触发条件与关键词,越具体越好。
-
-
-
- 取消
- 创建
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 无需扩展名,会按类型自动补全。
-
-
-
- 取消
- 创建
-
-
-
-
-
-
-
- 自动补全 .md。
-
-
-
- 取消
- 创建
-
-
-
-
-
-
-
- 自动补全 .md。
-
-
-
- 取消
- 创建
-
-
-
-
-
-
-
- 自动补全 .md。
-
-
-
- 取消
- 创建
-
-
-
-
-
-
-
-
-
-
-
- 可下载到单个 AI 工具,也可选择“全部工具”。
-
-
-
- 取消
- 开始下载
-
-
-
-
-
-
-
-
- {{ editorTitle }}
-
-
- 取消
- 保存内容
-
-
-
-
-
-
-
-
-
-
-
-
- 在线 Skills
- 关 闭
-
-
-
-
-
-
-
-
- 查 询
- 重 置
-
-
-
-
-
-
-
-
-
-
-
- {{ row.name }}
-
-
-
-
-
-
-
- 下载
- 去购买
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/sysError/sysError.vue b/web/src/view/systemTools/sysError/sysError.vue
deleted file mode 100644
index 5203917..0000000
--- a/web/src/view/systemTools/sysError/sysError.vue
+++ /dev/null
@@ -1,457 +0,0 @@
-
-
-
-
-
-
-
- 创建日期
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
- 展开
- 收起
-
-
-
-
-
- 删除
-
-
-
-
-
- {{
- formatDate(scope.row.CreatedAt)
- }}
-
-
-
-
-
-
-
- {{ levelLabelMap[scope.row.level] || defaultLevelLabel }}
-
-
-
-
-
-
-
- {{ statusLabelMap[scope.row.status] || defaultStatusLabel }}
-
-
-
-
-
-
-
-
-
-
-
- 方案
-
- 查看
- 删除
-
-
-
-
-
-
-
-
-
- {{ detailForm.form }}
-
-
-
- {{ levelLabelMap[detailForm.level] || defaultLevelLabel }}
-
-
-
-
- {{ statusLabelMap[detailForm.status] || defaultStatusLabel }}
-
-
-
- {{ detailForm.info }}
-
-
- {{ detailForm.solution }}
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/system/system.vue b/web/src/view/systemTools/system/system.vue
deleted file mode 100644
index 4357e62..0000000
--- a/web/src/view/systemTools/system/system.vue
+++ /dev/null
@@ -1,1135 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MinIO
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 生成
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 测试邮件
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MySQL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PostgreSQL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MsSQL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sqlite
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- oracle
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 本地配置
-
-
-
-
-
-
-
-
- 七牛上传配置
-
-
-
-
-
-
-
-
-
-
- 开启
-
-
-
-
-
-
-
-
-
-
-
-
- 腾讯云COS上传配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 阿里云OSS上传配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 华为云OBS上传配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cloudflare R2上传配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MinIO上传配置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 立即更新
- 重载服务
-
-
-
-
-
-
-
diff --git a/web/src/view/systemTools/version/version.vue b/web/src/view/systemTools/version/version.vue
deleted file mode 100644
index f61d1d2..0000000
--- a/web/src/view/systemTools/version/version.vue
+++ /dev/null
@@ -1,998 +0,0 @@
-
-
-
-
-
-
-
- 创建日期
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
- 展开
- 收起
-
-
-
-
-
- 创建发版
- 导入版本
- 删除
-
-
-
-
-
- {{ formatDate(scope.row.CreatedAt) }}
-
-
-
-
-
-
-
-
-
-
- 查看
- 下载发版包
- 删除
-
-
-
-
-
-
-
-
-
- {{ detailForm.versionName }}
-
-
- {{ detailForm.versionCode }}
-
-
- {{ detailForm.description }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.description }}
-
-
- {{ data.path }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.name || data.label }}
-
-
- {{ data.type || (data.value ? `值: ${data.value}` : '') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 将JSON文件拖到此处,或点击上传
-
-
-
- 只能上传JSON文件
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.meta?.title || data.title }}
- {{ data.path }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.description }}
- {{ data.path }} [{{ data.method
- }}]
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.name || data.label }}
-
- {{ data.type || (data.value ? `值: ${data.value}` : '') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/uno.config.js b/web/uno.config.js
deleted file mode 100644
index 779a77e..0000000
--- a/web/uno.config.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { defineConfig } from '@unocss/vite';
-import presetWind3 from '@unocss/preset-wind3';
-import transformerDirectives from '@unocss/transformer-directives'
-
-export default defineConfig({
- theme: {
- backgroundColor: {
- main: '#F5F5F5'
- },
- textColor: {
- active: 'var(--el-color-primary)'
- },
- boxShadowColor: {
- active: 'var(--el-color-primary)'
- },
- borderColor: {
- 'table-border': 'var(--el-border-color-lighter)'
- }
- },
- presets: [
- presetWind3({ dark: 'class' })
- ],
- transformers: [
- transformerDirectives(),
- ],
-})
diff --git a/web/vite.config.js b/web/vite.config.js
deleted file mode 100644
index ddefbb1..0000000
--- a/web/vite.config.js
+++ /dev/null
@@ -1,118 +0,0 @@
-import legacyPlugin from '@vitejs/plugin-legacy'
-import { viteLogo } from './src/core/config'
-import Banner from 'vite-plugin-banner'
-import * as path from 'path'
-import { loadEnv } from 'vite'
-import vuePlugin from '@vitejs/plugin-vue'
-import vueDevTools from 'vite-plugin-vue-devtools'
-import VueFilePathPlugin from './vitePlugin/componentName/index.js'
-import { svgBuilder } from 'vite-auto-import-svg'
-import vueRootValidator from 'vite-check-multiple-dom'
-import { AddSecret } from './vitePlugin/secret'
-import UnoCSS from '@unocss/vite'
-
-// @see https://cn.vitejs.dev/config/
-export default ({ mode }) => {
- AddSecret('')
- const env = loadEnv(mode, process.cwd())
- viteLogo(env)
-
- const timestamp = Date.parse(new Date())
-
- const optimizeDeps = {}
-
- const alias = {
- '@': path.resolve(__dirname, './src'),
- vue$: 'vue/dist/vue.runtime.esm-bundler.js'
- }
-
- const esbuild = {}
-
- const rollupOptions = {
- output: {
- entryFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
- chunkFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
- assetFileNames: 'assets/087AC4D233B64EB0[name].[hash].[ext]'
- }
- }
-
- const base = '/'
- const root = './'
- const outDir = 'dist'
-
- const config = {
- base: base, // 编译后js导入的资源路径
- root: root, // index.html文件所在位置
- publicDir: 'public', // 静态资源文件夹
- resolve: {
- alias
- },
- css: {
- preprocessorOptions: {
- scss: {
- api: 'modern-compiler' // or "modern"
- }
- }
- },
- server: {
- // 如果使用docker-compose开发模式,设置为false
- open: true,
- port: Number(env.VITE_CLI_PORT),
- proxy: {
- // 把key的路径代理到target位置
- // detail: https://cli.vuejs.org/config/#devserver-proxy
- [env.VITE_BASE_API]: {
- // 需要代理的路径 例如 '/api'
- target: `${env.VITE_BASE_PATH}:${env.VITE_SERVER_PORT}/`, // 代理到 目标路径
- changeOrigin: true,
- rewrite: (path) =>
- path.replace(new RegExp('^' + env.VITE_BASE_API), '')
- },
- '/plugin': {
- // 需要代理的路径 例如 '/api'
- target: `https://plugin.gin-vue-admin.com/api/`, // 代理到 目标路径
- changeOrigin: true,
- rewrite: (path) =>
- path.replace(new RegExp('^/plugin'), '')
- }
- }
- },
- build: {
- minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
- manifest: false, // 是否产出manifest.json
- sourcemap: false, // 是否产出sourcemap.json
- outDir: outDir, // 产出目录
- terserOptions: {
- compress: {
- //生产环境时移除console
- drop_console: true,
- drop_debugger: true
- }
- },
- rollupOptions
- },
- esbuild,
- optimizeDeps,
- plugins: [
- env.VITE_POSITION === 'open' &&
- vueDevTools({ launchEditor: env.VITE_EDITOR }),
- legacyPlugin({
- targets: [
- 'Android > 39',
- 'Chrome >= 60',
- 'Safari >= 10.1',
- 'iOS >= 10.3',
- 'Firefox >= 54',
- 'Edge >= 15'
- ]
- }),
- vuePlugin(),
- svgBuilder(['./src/plugin/', './src/assets/icons/'], base, outDir, 'assets', mode),
- [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)],
- VueFilePathPlugin('./src/pathInfo.json'),
- UnoCSS(),
- vueRootValidator()
- ]
- }
- return config
-}
diff --git a/web/vitePlugin/componentName/index.js b/web/vitePlugin/componentName/index.js
deleted file mode 100644
index 5628992..0000000
--- a/web/vitePlugin/componentName/index.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import chokidar from 'chokidar'
-
-const toPascalCase = (str) => {
- return str.replace(/(^\w|-\w)/g, clearAndUpper)
-}
-
-const clearAndUpper = (text) => {
- return text.replace(/-/, '').toUpperCase()
-}
-
-// 递归获取目录下所有的 .vue 文件
-const getAllVueFiles = (dir, fileList = []) => {
- const files = fs.readdirSync(dir)
- files.forEach((file) => {
- const filePath = path.join(dir, file)
- if (fs.statSync(filePath).isDirectory()) {
- getAllVueFiles(filePath, fileList)
- } else if (filePath.endsWith('.vue')) {
- fileList.push(filePath)
- }
- })
- return fileList
-}
-
-// 从 .vue 文件内容中提取组件名称
-const extractComponentName = (fileContent) => {
- const regex = /defineOptions\(\s*{\s*name:\s*["']([^"']+)["']/
- const match = fileContent.match(regex)
- return match ? match[1] : null
-}
-
-// Vite 插件定义
-const vueFilePathPlugin = (outputFilePath) => {
- let root
- let isDev = false
- const generatePathNameMap = () => {
- const vueFiles = [
- ...getAllVueFiles(path.join(root, 'src/view')),
- ...getAllVueFiles(path.join(root, 'src/plugin'))
- ]
- const pathNameMap = vueFiles.reduce((acc, filePath) => {
- const content = fs.readFileSync(filePath, 'utf-8')
- const componentName = extractComponentName(content)
- let relativePath = '/' + path.relative(root, filePath).replace(/\\/g, '/')
- acc[relativePath] =
- componentName || toPascalCase(path.basename(filePath, '.vue'))
- return acc
- }, {})
- const outputContent = JSON.stringify(pathNameMap, null, 2)
- fs.writeFileSync(outputFilePath, outputContent)
- }
-
- const watchDirectoryChanges = () => {
- const watchDirectories = [
- path.join(root, 'src/view'),
- path.join(root, 'src/plugin')
- ]
- const watcher = chokidar.watch(watchDirectories, {
- persistent: true,
- ignoreInitial: true
- })
- watcher.on('all', () => {
- generatePathNameMap()
- })
- }
-
- return {
- name: 'vue-file-path-plugin',
- configResolved(resolvedConfig) {
- root = resolvedConfig.root
- if (resolvedConfig.mode === 'development') {
- isDev = true
- }
- },
- buildStart() {
- generatePathNameMap()
- },
- buildEnd() {
- if (isDev) {
- watchDirectoryChanges()
- }
- }
- }
-}
-
-export default vueFilePathPlugin
diff --git a/web/vitePlugin/secret/index.js b/web/vitePlugin/secret/index.js
deleted file mode 100644
index 1a75852..0000000
--- a/web/vitePlugin/secret/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export function AddSecret(...secrets) {
- if (!secrets || secrets.length < 2) {
- secrets = ['','']
- }
- global['gva-project-name'] = secrets[0]
- global['gva-secret'] = secrets[1]
-}