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 @@ - - - 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 @@ - - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - - 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 @@ - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - - 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 @@ - - - - - - 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 @@ - - - - - - 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 @@ - - - - - \ 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - - 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 @@ - - - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - 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 @@ - - - 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 @@ - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - - 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 @@ - - - - - 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 @@ - - - - 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 @@ - - - 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 @@ - - - - - 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 @@ - - - - - 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] -}