diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..1723ef5 --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +# 页面标题 +VITE_APP_TITLE = AgileBoot管理系统 + +# 开发环境配置 +VITE_APP_ENV = 'development' + +# AgileBoot管理系统/开发环境 +VITE_APP_BASE_API = '/dev-api' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..c081c62 --- /dev/null +++ b/.env.production @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE = AgileBoot管理系统 + +# 生产环境配置 +VITE_APP_ENV = 'production' + +# AgileBoot管理系统/生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..1c58f78 --- /dev/null +++ b/.env.staging @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE = AgileBoot管理系统 + +# 生产环境配置 +VITE_APP_ENV = 'staging' + +# AgileBoot管理系统/生产环境 +VITE_APP_BASE_API = '/stage-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..840c164 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": [ + "plugin:vue/vue3-essential", + "airbnb-base" + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "vue" + ], + "rules": { + } +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..fbcab77 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/README.md b/README.md new file mode 100644 index 0000000..05ac595 --- /dev/null +++ b/README.md @@ -0,0 +1,109 @@ +

+ logo +

+

RuoYi v3.8.2

+

基于SpringBoot+Vue3前后端分离的Java快速开发框架

+

+ + + +

+ +## 平台简介 + +* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。 +* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。 +* 前端技术栈([Vue2](https://cn.vuejs.org) + [Element](https://github.com/ElemeFE/element) + [Vue CLI](https://cli.vuejs.org/zh)),请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue/tree/master/ruoyi-ui)。 +* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)   +* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)   + +## 前端运行 + +```bash +# 克隆项目 +git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git + +# 进入项目目录 +cd RuoYi-Vue3 + +# 安装依赖 +yarn --registry=https://registry.npmmirror.com + +# 启动服务 +yarn dev + +# 构建测试环境 yarn build:stage +# 构建生产环境 yarn build:prod +# 前端访问地址 http://localhost:80 +``` + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 缓存监控:对系统的缓存信息查询,命令统计等。 +17. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 + +## 在线体验 + +- admin/admin123 +- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 + +演示地址:http://vue.ruoyi.vip +文档地址:http://doc.ruoyi.vip + +## 演示图 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +## AgileBoot前后端分离交流群 + +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) 点击按钮入群。 \ No newline at end of file diff --git a/bin/build.bat b/bin/build.bat new file mode 100644 index 0000000..21a1dea --- /dev/null +++ b/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 打包Web工程,生成dist文件。 +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn build:prod + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..28ce921 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 安装Web工程,生成node_modules文件。 +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/bin/run-web.bat b/bin/run-web.bat new file mode 100644 index 0000000..b7041f0 --- /dev/null +++ b/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 使用 Vite 命令运行 Web 工程。 +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn dev + +pause \ No newline at end of file diff --git a/html/ie.html b/html/ie.html new file mode 100644 index 0000000..052ffcd --- /dev/null +++ b/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..f4a5732 --- /dev/null +++ b/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + AgileBoot管理系统 + + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..bcc953c --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "ruoyi", + "version": "3.8.2", + "description": "AgileBoot管理系统", + "author": "valarchie", + "license": "MIT", + "scripts": { + "dev": "vite", + "build:prod": "vite build", + "build:stage": "vite build --mode staging", + "preview": "vite preview", + "fix": "eslint src/**/*.* --fix" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/y_project/RuoYi-Vue.git" + }, + "dependencies": { + "@element-plus/icons-vue": "1.1.4", + "axios": "0.26.1", + "echarts": "5.3.2", + "element-plus": "2.1.8", + "file-saver": "2.0.5", + "fuse.js": "6.5.3", + "js-cookie": "3.0.1", + "jsencrypt": "3.2.1", + "nprogress": "0.2.0", + "vue": "3.2.31", + "vue-cropper": "1.0.3", + "vue-router": "4.0.14", + "vuex": "4.0.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "2.3.1", + "@vue/compiler-sfc": "3.2.31", + "eslint": "^8.21.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.2.4", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-vue": "^9.3.0", + "sass": "1.50.0", + "unplugin-auto-import": "0.6.9", + "vite": "2.6.14", + "vite-plugin-compression": "0.5.1", + "vite-plugin-svg-icons": "1.0.5", + "vite-plugin-vue-setup-extend": "0.4.0" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..724411e --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { encrypt, decrypt } from '@/utils/jsencrypt'; + +// 登录方法 +export function login(username, password, code, uuid) { + const passwordEncrypt = encrypt(password); + + // console.log(passwordEncrypt); + const data = { + username, + password: passwordEncrypt, + code, + uuid, + }; + return request({ + url: '/login', + headers: { + isToken: false, + }, + method: 'post', + data, + }); +} + +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false, + }, + method: 'post', + data, + }); +} + +// 获取用户详细信息 +export function getLoginUserInfo() { + return request({ + url: '/getLoginUserInfo', + method: 'get', + }); +} + +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post', + }); +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false, + }, + method: 'get', + timeout: 20000, + }); +} diff --git a/src/api/menu.js b/src/api/menu.js new file mode 100644 index 0000000..9b9b979 --- /dev/null +++ b/src/api/menu.js @@ -0,0 +1,7 @@ +import request from '@/utils/request'; + +// 获取路由 +export const getRouters = () => request({ + url: '/getRouters', + method: 'get', +}); diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js new file mode 100644 index 0000000..6fd2a58 --- /dev/null +++ b/src/api/monitor/cache.js @@ -0,0 +1,9 @@ +import request from '@/utils/request'; + +// 查询缓存详细 +export function getCacheInfo() { + return request({ + url: '/monitor/cacheInfo', + method: 'get', + }); +} diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js new file mode 100644 index 0000000..31b6b67 --- /dev/null +++ b/src/api/monitor/logininfor.js @@ -0,0 +1,26 @@ +import request from '@/utils/request'; + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/loginInfo/list', + method: 'get', + params: query, + }); +} + +// 删除登录日志 +export function deleteLoginInfo(infoId) { + return request({ + url: `/loginInfo/${infoId}`, + method: 'delete', + }); +} + +// 清空登录日志 +export function cleanLoginInfo() { + return request({ + url: '/loginInfo/clean', + method: 'delete', + }); +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..e10984e --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request'; + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/onlineUser/list', + method: 'get', + params: query, + }); +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: `/monitor/onlineUser/${tokenId}`, + method: 'delete', + }); +} diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js new file mode 100644 index 0000000..63718a6 --- /dev/null +++ b/src/api/monitor/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request'; + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/operationLog/list', + method: 'get', + params: query, + }); +} + +// 删除操作日志 +export function deleteOperationLog(operationId) { + return request({ + url: `/operationLog/${operationId}`, + method: 'delete', + }); +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/operationLog/clean', + method: 'delete', + }); +} diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js new file mode 100644 index 0000000..1572c06 --- /dev/null +++ b/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request'; + +// 获取服务信息 +export function getServerInfo() { + return request({ + url: '/monitor/serverInfo', + method: 'get', + }); +} diff --git a/src/api/system/config.js b/src/api/system/config.js new file mode 100644 index 0000000..88374a6 --- /dev/null +++ b/src/api/system/config.js @@ -0,0 +1,45 @@ +import request from '@/utils/request'; + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query, + }); +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: `/system/config/${configId}`, + method: 'get', + }); +} + +// 根据字典类型查询字典数据信息 +export function getDictType(dictType) { + return request({ + url: `/system/config/dict/${dictType}`, + method: 'get', + }); +} + + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data, + }); +} + + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete', + }); +} diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..672d8b9 --- /dev/null +++ b/src/api/system/dept.js @@ -0,0 +1,68 @@ +import request from '@/utils/request'; + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query, + }); +} + +// 查询部门列表(排除当前自身节点) +export function listDeptExcludeCurrentDeptItself(deptId) { + return request({ + url: `/system/dept/list/exclude/${deptId}`, + method: 'get', + }); +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: `/system/dept/${deptId}`, + method: 'get', + }); +} + +// 查询部门下拉树结构 +export function getDeptSelectTree() { + return request({ + url: '/system/dept/dropdownList', + method: 'get', + }); +} + +// 根据角色ID查询部门树结构 +export function getDeptTreeSelectByRole(roleId) { + return request({ + url: `/system/dept/dropdownList/role/${roleId}`, + method: 'get', + }); +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data, + }); +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data, + }); +} + +// 删除部门 +export function deleteDept(deptId) { + return request({ + url: `/system/dept/${deptId}`, + method: 'delete', + }); +} diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..c07deee --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request'; + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query, + }); +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: `/system/menu/${menuId}`, + method: 'get', + }); +} + +// 查询菜单下拉树结构 +export function getMenuSelectTree() { + return request({ + url: '/system/menu/dropdownList', + method: 'get', + }); +} + +// 根据角色ID查询菜单下拉树结构 +export function getMenuSelectTreeByRole(roleId) { + return request({ + url: `/system/menu/roleMenuTreeSelect/${roleId}`, + method: 'get', + }); +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data, + }); +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data, + }); +} + +// 删除菜单 +export function deleteMenu(menuId) { + return request({ + url: `/system/menu/${menuId}`, + method: 'delete', + }); +} diff --git a/src/api/system/notice.js b/src/api/system/notice.js new file mode 100644 index 0000000..ee6284e --- /dev/null +++ b/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request'; + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query, + }); +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: `/system/notice/${noticeId}`, + method: 'get', + }); +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data, + }); +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data, + }); +} + +// 删除公告 +export function deleteNotice(noticeId) { + return request({ + url: `/system/notice/${noticeId}`, + method: 'delete', + }); +} diff --git a/src/api/system/post.js b/src/api/system/post.js new file mode 100644 index 0000000..7b93454 --- /dev/null +++ b/src/api/system/post.js @@ -0,0 +1,44 @@ +import request from '@/utils/request'; + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query, + }); +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: `/system/post/${postId}`, + method: 'get', + }); +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data, + }); +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data, + }); +} + +// 删除岗位 +export function deletePost(postId) { + return request({ + url: `/system/post/${postId}`, + method: 'delete', + }); +} diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..e76a471 --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,117 @@ +import request from '@/utils/request'; + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query, + }); +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: `/system/role/${roleId}`, + method: 'get', + }); +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data, + }); +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data, + }); +} + +// 角色数据权限 +export function changeDataScope(data) { + const { roleId } = data; + return request({ + url: `/system/role/${roleId}/dataScope`, + method: 'put', + data, + }); +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status, + }; + return request({ + url: `/system/role/${roleId}/status`, + method: 'put', + data, + }); +} + +// 删除角色 +export function deleteRole(roleId) { + return request({ + url: `/system/role/${roleId}`, + method: 'delete', + }); +} + +// 查询角色已授权用户列表 +export function allocatedUserList(query) { + const { roleId } = query; + return request({ + url: `/system/role/${roleId}/allocated/list`, + method: 'get', + params: query, + }); +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + const { roleId } = query; + return request({ + url: `/system/role/${roleId}/unallocated/list`, + method: 'get', + params: query, + }); +} + +// 取消用户授权角色 弃用 +export function deleteRoleOfUser(data) { + const { roleId, userIds } = data; + return request({ + url: `/system/role/users/${userIds}/grant`, + method: 'delete', + data, + }); +} + +// 批量取消用户授权角色 +export function deleteRoleOfSomeUser(data) { + const { roleId, userIds } = data; + return request({ + url: `/system/role/users/${userIds}/grant/bulk`, + method: 'delete', + params: data, + }); +} + +// 授权用户选择 +export function addRoleOfAllUser(data) { + const { roleId, userIds } = data; + return request({ + url: `/system/role/${roleId}/users/${userIds}/grant/bulk`, + method: 'post', + data, + }); +} diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..968bbe0 --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,128 @@ +import request from '@/utils/request'; +import { parseStrEmpty } from '@/utils/ruoyi'; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query, + }); +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: `/system/user/${parseStrEmpty(userId)}`, + method: 'get', + }); +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data, + }); +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data, + }); +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: `/system/user/${userId}`, + method: 'delete', + }); +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password, + }; + return request({ + url: `/system/user/${userId}/password/reset`, + method: 'put', + data, + }); +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status, + }; + return request({ + url: `/system/user/${userId}/status`, + method: 'put', + data, + }); +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile', + method: 'get', + }); +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data, + }); +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword, + }; + return request({ + url: '/system/user/profile/password', + method: 'put', + data, + }); +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data, + }); +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: `/system/user/${userId}/role/`, + method: 'get', + }); +} + +// 保存授权角色 +export function updateAuthRole(data) { + const { userId } = data.userId; + return request({ + url: `/system/user/${userId}/role/`, + method: 'put', + params: data, + }); +} diff --git a/src/assets/401_images/401.gif b/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/src/assets/401_images/401.gif differ diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/src/assets/404_images/404.png differ diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/src/assets/404_images/404_cloud.png differ diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..c69b73a --- /dev/null +++ b/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/bug.svg b/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..545445f --- /dev/null +++ b/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/build.svg b/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..df50fa0 --- /dev/null +++ b/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/button.svg b/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..b6c7cc0 --- /dev/null +++ b/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/cascader.svg b/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..bd68954 --- /dev/null +++ b/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..4f233ad --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/checkbox.svg b/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..aed629d --- /dev/null +++ b/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/clipboard.svg b/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..9cc81c4 --- /dev/null +++ b/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/code.svg b/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..547e244 --- /dev/null +++ b/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/color.svg b/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..8b3f86a --- /dev/null +++ b/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/component.svg b/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..6db5b80 --- /dev/null +++ b/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5b1db14 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/date-range.svg b/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..d3080ee --- /dev/null +++ b/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/date.svg b/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..9ff2dea --- /dev/null +++ b/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/dict.svg b/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..7e40a53 --- /dev/null +++ b/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/documentation.svg b/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..c6be674 --- /dev/null +++ b/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/download.svg b/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..f40ad45 --- /dev/null +++ b/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/drag.svg b/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..58547aa --- /dev/null +++ b/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/druid.svg b/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..ea95efd --- /dev/null +++ b/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..82779ab --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..ac71946 --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/email.svg b/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..b43ec51 --- /dev/null +++ b/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/example.svg b/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..2c6e66b --- /dev/null +++ b/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/excel.svg b/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..3ab9dfd --- /dev/null +++ b/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..fc45add --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/eye-open.svg b/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..b400e4b --- /dev/null +++ b/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/eye.svg b/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..421b122 --- /dev/null +++ b/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/form.svg b/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..635962f --- /dev/null +++ b/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..7b253b7 --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/github.svg b/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..ed7b6ae --- /dev/null +++ b/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/guide.svg b/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..64d9db4 --- /dev/null +++ b/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..80e445e --- /dev/null +++ b/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/input.svg b/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..01fcfab --- /dev/null +++ b/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..a0fe705 --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/job.svg b/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..96caee8 --- /dev/null +++ b/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/language.svg b/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..e3109a4 --- /dev/null +++ b/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..78dc9c9 --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..326a3a1 --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..81bd860 --- /dev/null +++ b/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/log.svg b/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..0bc3742 --- /dev/null +++ b/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/logininfor.svg b/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..53076d1 --- /dev/null +++ b/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..f6c3319 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..f7889f8 --- /dev/null +++ b/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..c688f4f --- /dev/null +++ b/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..a59364a --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/number.svg b/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..9b9bbdf --- /dev/null +++ b/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/online.svg b/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..9e3e124 --- /dev/null +++ b/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/password.svg b/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..9df95c8 --- /dev/null +++ b/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/pdf.svg b/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..7613534 --- /dev/null +++ b/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..bcf4088 --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..739e953 --- /dev/null +++ b/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..55c9ada --- /dev/null +++ b/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/post.svg b/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..068c286 --- /dev/null +++ b/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/qq.svg b/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..53eab84 --- /dev/null +++ b/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/question.svg b/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..64b4501 --- /dev/null +++ b/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/radio.svg b/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..4d8a3fc --- /dev/null +++ b/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/rate.svg b/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..2ff2587 --- /dev/null +++ b/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..d321520 --- /dev/null +++ b/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/row.svg b/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..1aee520 --- /dev/null +++ b/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/search.svg b/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..3c629ee --- /dev/null +++ b/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/select.svg b/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..1138495 --- /dev/null +++ b/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..6455f0c --- /dev/null +++ b/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..0aad3b5 --- /dev/null +++ b/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..135d059 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..0dded9e --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/slider.svg b/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..a7df892 --- /dev/null +++ b/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/star.svg b/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..a9363ad --- /dev/null +++ b/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..367d4d1 --- /dev/null +++ b/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/switch.svg b/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..232713a --- /dev/null +++ b/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/system.svg b/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..513f82c --- /dev/null +++ b/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..0840bd9 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/table.svg b/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..6fef9f7 --- /dev/null +++ b/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/textarea.svg b/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..6b1ffc0 --- /dev/null +++ b/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..b27d237 --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/time-range.svg b/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..333437b --- /dev/null +++ b/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/time.svg b/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..355c82a --- /dev/null +++ b/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/tool.svg b/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..021b4c7 --- /dev/null +++ b/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..9e0015c --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..9112dfb --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/upload.svg b/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..80fef66 --- /dev/null +++ b/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/user.svg b/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..8f4b10a --- /dev/null +++ b/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..6136ca5 --- /dev/null +++ b/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..bd3c8a9 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/zip.svg b/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..ab2dd37 --- /dev/null +++ b/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + diff --git a/src/assets/images/dark.svg b/src/assets/images/dark.svg new file mode 100644 index 0000000..fffb76c --- /dev/null +++ b/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/light.svg b/src/assets/images/light.svg new file mode 100644 index 0000000..800c174 --- /dev/null +++ b/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/login-background.jpg b/src/assets/images/login-background.jpg new file mode 100644 index 0000000..8a89eb8 Binary files /dev/null and b/src/assets/images/login-background.jpg differ diff --git a/src/assets/images/profile.jpg b/src/assets/images/profile.jpg new file mode 100644 index 0000000..b3a940b Binary files /dev/null and b/src/assets/images/profile.jpg differ diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/src/assets/logo/logo.png differ diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..3590d8d --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.module.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..0f175f2 --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,96 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse + > div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} + +.el-dropdown .el-dropdown-link{ + color: var(--el-color-primary) !important; +} \ No newline at end of file diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..29dd2b9 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,193 @@ +@import './variables.module.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; +@import './ruoyi.scss'; + +body { + height: 100%; + margin: 0; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss new file mode 100644 index 0000000..68c7d90 --- /dev/null +++ b/src/assets/styles/ruoyi.scss @@ -0,0 +1,274 @@ + /** + * 通用css样式布局处理 + * Copyright (c) 2019 ruoyi + */ + + /** 基础通用 **/ +.pt5 { + padding-top: 5px; +} +.pr5 { + padding-right: 5px; +} +.pb5 { + padding-bottom: 5px; +} +.mt5 { + margin-top: 5px; +} +.mr5 { + margin-right: 5px; +} +.mb5 { + margin-bottom: 5px; +} +.mb8 { + margin-bottom: 8px; +} +.ml5 { + margin-left: 5px; +} +.mt10 { + margin-top: 10px; +} +.mr10 { + margin-right: 10px; +} +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} +.mt20 { + margin-top: 20px; +} +.mr20 { + margin-right: 20px; +} +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} + +.el-dialog.scrollbar .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} + +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9 !important; + color: #515a6e; + height: 40px !important; + font-size: 13px; + } + } + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size:15px; + color:#6379bb; + border-bottom:1px solid #ddd; + margin:8px 10px 25px 10px; + padding-bottom:5px +} + +/** 表格布局 **/ +.pagination-container { + // position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius:4px; + width: 100%; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media ( max-width : 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--small { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #409EFF; + margin-left: 10px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px !important; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px !important; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost{ + opacity: .8; + color: #fff!important; + background: #42b983!important; +} + +/* 表格右侧工具栏样式 */ +.top-right-btn { + margin-left: auto; +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..0808812 --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,238 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $base-sidebar-width !important; + background-color: $base-menu-background; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .menu-title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + .el-menu-item .el-menu-tooltip__trigger { + display: inline-block !important; + } + + // menu hover + .sub-menu-title-noDropdown, + .el-sub-menu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-sub-menu__title { + color: $base-menu-color-active !important; + } + + & .nest-menu .el-sub-menu>.el-sub-menu__title, + & .el-sub-menu .el-menu-item { + min-width: $base-sidebar-width !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title, + & .theme-dark .el-sub-menu .el-menu-item { + background-color: $base-sub-menu-background !important; + + &:hover { + background-color: $base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .sub-menu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-sub-menu { + overflow: hidden; + + &>.el-sub-menu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-sub-menu { + &>.el-sub-menu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + &>i { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-sub-menu { + min-width: $base-sidebar-width !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$base-sidebar-width, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-sub-menu>.el-sub-menu__title, + .el-menu-item { + &:hover { + // you can use $sub-menuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the sub-menu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/assets/styles/transition.scss b/src/assets/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/assets/styles/variables.module.scss b/src/assets/styles/variables.module.scss new file mode 100644 index 0000000..3dbfaa7 --- /dev/null +++ b/src/assets/styles/variables.module.scss @@ -0,0 +1,65 @@ +// base color +$blue: #324157; +$light-blue: #3A71A8; +$red: #C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow: #FEC171; +$panGreen: #30B08F; + +// 默认菜单主题风格 +$base-menu-color: #bfcbd9; +$base-menu-color-active: #f4f4f5; +$base-menu-background: #304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color: rgba(0, 0, 0, 0.7); +$base-menu-light-background: #ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background: #1f2d3d; +$base-sub-menu-hover: #001528; + +// 自定义暗色菜单风格 +/** +$base-menu-color:hsla(0,0%,100%,.65); +$base-menu-color-active:#fff; +$base-menu-background:#001529; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#000c17; +$base-sub-menu-hover:#001528; +*/ + +$--color-primary: #409EFF; +$--color-success: #67C23A; +$--color-warning: #E6A23C; +$--color-danger: #F56C6C; +$--color-info: #909399; + +$base-sidebar-width: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color; + primaryColor: $--color-primary; + successColor: $--color-success; + dangerColor: $--color-danger; + infoColor: $--color-info; + warningColor: $--color-warning; +} diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..d14e864 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue new file mode 100644 index 0000000..35357c9 --- /dev/null +++ b/src/components/DictTag/index.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue new file mode 100644 index 0000000..48ea8c0 --- /dev/null +++ b/src/components/FileUpload/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..6f9b61e --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..9f7e993 --- /dev/null +++ b/src/components/HeaderSearch/index.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue new file mode 100644 index 0000000..b2e1c81 --- /dev/null +++ b/src/components/IconSelect/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..517458f --- /dev/null +++ b/src/components/IconSelect/requireIcons.js @@ -0,0 +1,8 @@ +const icons = []; +const modules = import.meta.glob('./../../assets/icons/svg/*.svg'); +for (const path in modules) { + const p = path.split('assets/icons/svg/')[1].split('.svg')[0]; + icons.push(p); +} + +export default icons; diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..cdee8a7 --- /dev/null +++ b/src/components/ImagePreview/index.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..c6e9d72 --- /dev/null +++ b/src/components/ImageUpload/index.vue @@ -0,0 +1,188 @@ + + + diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue new file mode 100644 index 0000000..301cab5 --- /dev/null +++ b/src/components/Pagination/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/components/ParentView/index.vue b/src/components/ParentView/index.vue new file mode 100644 index 0000000..7bf6148 --- /dev/null +++ b/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..e57d5f9 --- /dev/null +++ b/src/components/RightToolbar/index.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/components/RuoYi/Doc/index.vue b/src/components/RuoYi/Doc/index.vue new file mode 100644 index 0000000..5ca5948 --- /dev/null +++ b/src/components/RuoYi/Doc/index.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/RuoYi/Git/index.vue b/src/components/RuoYi/Git/index.vue new file mode 100644 index 0000000..9934089 --- /dev/null +++ b/src/components/RuoYi/Git/index.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/Screenfull/index.vue b/src/components/Screenfull/index.vue new file mode 100644 index 0000000..89c3db3 --- /dev/null +++ b/src/components/Screenfull/index.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/components/SizeSelect/index.vue b/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..7331ea3 --- /dev/null +++ b/src/components/SizeSelect/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..e8ba736 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/components/SvgIcon/svgicon.js b/src/components/SvgIcon/svgicon.js new file mode 100644 index 0000000..1035468 --- /dev/null +++ b/src/components/SvgIcon/svgicon.js @@ -0,0 +1,10 @@ +import * as components from '@element-plus/icons-vue'; + +export default { + install: (app) => { + for (const key in components) { + const componentConfig = components[key]; + app.component(componentConfig.name, componentConfig); + } + }, +}; diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue new file mode 100644 index 0000000..8c4f62b --- /dev/null +++ b/src/components/TopNav/index.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/src/components/TreeSelect/index.vue b/src/components/TreeSelect/index.vue new file mode 100644 index 0000000..a90adf7 --- /dev/null +++ b/src/components/TreeSelect/index.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/components/iFrame/index.vue b/src/components/iFrame/index.vue new file mode 100644 index 0000000..3f51bad --- /dev/null +++ b/src/components/iFrame/index.vue @@ -0,0 +1,31 @@ +