From 7fd2d8ae2d6d5eb8041e42479cbbfc961c616aca Mon Sep 17 00:00:00 2001 From: net <> Date: Fri, 2 Jun 2023 21:29:46 +0800 Subject: [PATCH] Initial commit --- .editorconfig | 22 + .env | 3 + .env.development | 16 + .env.production | 15 + .env.staging | 18 + .eslintignore | 14 + .eslintrc.js | 199 ++++ .gitignore | 23 + .jsbeautifyrc | 12 + .prettierrc.js | 38 + .vscode/settings.json | 3 + LICENSE | 21 + README.md | 89 ++ bat/build.bat | 12 + bat/package.bat | 12 + bat/run-web.bat | 12 + html/ie.html | 46 + index.html | 139 +++ jsconfig.json | 11 + package.json | 55 ++ public/favicon.ico | Bin 0 -> 41662 bytes public/logo_500.ico | Bin 0 -> 17363 bytes src/App.vue | 56 ++ src/api/business/customers/customer.js | 37 + src/api/business/payments/payment.js | 37 + src/api/common.js | 23 + src/api/monitor/cache.js | 9 + src/api/monitor/job.js | 114 +++ src/api/monitor/jobLog.js | 35 + src/api/monitor/logininfor.js | 35 + src/api/monitor/online.js | 18 + src/api/monitor/operlog.js | 35 + src/api/monitor/server.js | 9 + src/api/system/commonlang.js | 89 ++ src/api/system/config.js | 69 ++ src/api/system/dept.js | 68 ++ src/api/system/dict/data.js | 69 ++ src/api/system/dict/type.js | 69 ++ src/api/system/login.js | 69 ++ src/api/system/menu.js | 84 ++ src/api/system/notice.js | 61 ++ src/api/system/post.js | 54 ++ src/api/system/role.js | 75 ++ src/api/system/thirdaccount.js | 70 ++ src/api/system/user.js | 130 +++ src/api/system/userRoles.js | 37 + src/api/tool/file.js | 69 ++ src/api/tool/gen.js | 114 +++ src/assets/401_images/401.gif | Bin 0 -> 164227 bytes src/assets/404_images/404.png | Bin 0 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes src/assets/iconfont/iconfont.css | 391 ++++++++ src/assets/iconfont/iconfont.js | 1 + src/assets/iconfont/iconfont.json | 667 ++++++++++++++ src/assets/iconfont/iconfont.ttf | Bin 0 -> 27100 bytes src/assets/iconfont/iconfont.woff | Bin 0 -> 17872 bytes src/assets/iconfont/iconfont.woff2 | Bin 0 -> 15424 bytes src/assets/icons/gitee-fill-round.png | Bin 0 -> 6531 bytes src/assets/icons/github-fill.png | Bin 0 -> 7713 bytes src/assets/icons/svg/build.svg | 1 + src/assets/icons/svg/exit-fullscreen.svg | 1 + src/assets/icons/svg/gitee.svg | 1 + src/assets/icons/svg/validCode.svg | 1 + src/assets/icons/wechat-fill.png | Bin 0 -> 6575 bytes src/assets/images/dark.svg | 39 + src/assets/images/light.svg | 39 + src/assets/images/profile.jpg | Bin 0 -> 1865 bytes src/assets/logo/icon.png | Bin 0 -> 3501 bytes src/assets/logo/logo.png | Bin 0 -> 7661 bytes src/assets/logo/logo_500.png | Bin 0 -> 22587 bytes src/assets/styles/btn.scss | 99 ++ src/assets/styles/element-ui.scss | 130 +++ src/assets/styles/index.scss | 276 ++++++ src/assets/styles/login.scss | 73 ++ src/assets/styles/mixin.scss | 66 ++ src/assets/styles/sidebar.scss | 106 +++ src/assets/styles/transition.scss | 48 + src/assets/styles/variables.module.scss | 45 + src/assets/styles/waves.scss | 101 +++ src/auto-import.d.ts | 64 ++ src/components/Breadcrumb/index.vue | 72 ++ src/components/Crontab/day.vue | 172 ++++ src/components/Crontab/hour.vue | 129 +++ src/components/Crontab/index.vue | 280 ++++++ src/components/Crontab/min.vue | 128 +++ src/components/Crontab/month.vue | 143 +++ src/components/Crontab/result.vue | 560 ++++++++++++ src/components/Crontab/second.vue | 130 +++ src/components/Crontab/week.vue | 190 ++++ src/components/Crontab/year.vue | 149 +++ src/components/DictTag/index.vue | 46 + src/components/Echarts/Gauge.vue | 90 ++ src/components/Editor/index.vue | 135 +++ src/components/FileUpload/index.vue | 254 ++++++ src/components/Hamburger/index.vue | 42 + src/components/HeaderSearch/index.vue | 223 +++++ src/components/IconSelect/index.vue | 101 +++ src/components/IconSelect/requireIcons.js | 14 + src/components/ImagePreview/index.vue | 85 ++ src/components/ImageUpload/index.vue | 196 ++++ src/components/LangSelect/index.vue | 45 + src/components/Map/index.vue | 247 +++++ src/components/Notice/Index.vue | 127 +++ src/components/Pagination/index.vue | 112 +++ src/components/ParentView/index.vue | 3 + src/components/RightToolbar/index.vue | 123 +++ src/components/Screenfull/index.vue | 22 + src/components/SizeSelect/index.vue | 54 ++ src/components/SvgIcon/index.vue | 62 ++ src/components/SvgIcon/svgicon.js | 10 + src/components/TopNav/index.vue | 187 ++++ src/components/iFrame/index.vue | 31 + src/components/vue3-cron-core/Index.vue | 851 ++++++++++++++++++ src/directive/index.js | 15 + src/directive/module/clipboard.js | 77 ++ src/directive/module/copyText.js | 66 ++ src/directive/module/drag.js | 121 +++ src/directive/module/waves.js | 52 ++ src/directive/permission/hasPermi.js | 28 + src/directive/permission/hasRole.js | 28 + src/i18n/index.js | 59 ++ src/i18n/lang/en.json | 170 ++++ src/i18n/lang/zh-cn.json | 170 ++++ src/i18n/lang/zh-tw.json | 170 ++++ src/i18n/pages/login/en.json | 15 + src/i18n/pages/login/zh-cn.json | 15 + src/i18n/pages/login/zh-tw.json | 15 + src/i18n/pages/menu/en.js | 23 + src/i18n/pages/menu/zh-cn.js | 23 + src/i18n/pages/menu/zh-tw.js | 23 + src/layout/components/IframeToggle/index.vue | 18 + src/layout/components/InnerLink/index.vue | 19 + src/layout/components/Navbar.vue | 196 ++++ src/layout/components/Settings/index.vue | 348 +++++++ src/layout/components/Sidebar/Link.vue | 40 + src/layout/components/Sidebar/Logo.vue | 81 ++ src/layout/components/Sidebar/SidebarItem.vue | 105 +++ src/layout/components/Sidebar/index.vue | 51 ++ src/layout/components/TagsView/ScrollPane.vue | 100 ++ src/layout/components/TagsView/index.vue | 345 +++++++ src/layout/components/index.js | 4 + src/layout/index.vue | 168 ++++ src/main.js | 77 ++ src/permission.js | 59 ++ src/plugins/auth.js | 60 ++ src/plugins/cache.js | 96 ++ src/plugins/download.js | 72 ++ src/plugins/index.js | 27 + src/plugins/modal.js | 82 ++ src/plugins/tab.js | 65 ++ src/router/index.js | 104 +++ src/settings.js | 83 ++ src/store/index.js | 3 + src/store/modules/app.js | 48 + src/store/modules/permission.js | 132 +++ src/store/modules/settings.js | 39 + src/store/modules/socket.js | 29 + src/store/modules/tagsView.js | 180 ++++ src/store/modules/user.js | 127 +++ src/utils/auth.js | 15 + src/utils/dateOptions.js | 85 ++ src/utils/dict.js | 17 + src/utils/dynamicTitle.js | 14 + src/utils/errorCode.js | 6 + src/utils/index.js | 390 ++++++++ src/utils/jsencrypt.js | 22 + src/utils/request.js | 203 +++++ src/utils/ruoyi.js | 284 ++++++ src/utils/scroll-to.js | 58 ++ src/utils/signalR.js | 119 +++ src/utils/validate.js | 98 ++ src/utils/wartermark.js | 62 ++ .../customers/components/AddDialog.vue | 126 +++ .../customers/components/DetailDialog.vue | 112 +++ .../customers/components/EditDialog.vue | 145 +++ src/views/business/customers/index.vue | 178 ++++ .../payments/components/AddDialog.vue | 144 +++ .../payments/components/DetailDialog.vue | 131 +++ .../payments/components/EditDialog.vue | 168 ++++ src/views/business/payments/index.vue | 171 ++++ src/views/components/CommonMenu/index.vue | 76 ++ src/views/components/dictData.vue | 354 ++++++++ src/views/components/icons/index.vue | 73 ++ src/views/components/starBackground.vue | 58 ++ src/views/dashboard/BarChart.vue | 80 ++ src/views/dashboard/LineChart.vue | 121 +++ src/views/dashboard/PanelGroup.vue | 218 +++++ src/views/dashboard/PieChart.vue | 60 ++ src/views/dashboard/RaddarChart.vue | 115 +++ src/views/dashboard/WordCloud.vue | 96 ++ src/views/error/401.vue | 82 ++ src/views/error/404.vue | 227 +++++ src/views/index.vue | 177 ++++ src/views/login.vue | 193 ++++ src/views/monitor/cache/index.vue | 195 ++++ src/views/monitor/job/index.vue | 660 ++++++++++++++ src/views/monitor/job/log.vue | 260 ++++++ src/views/monitor/logininfor/index.vue | 186 ++++ src/views/monitor/onlineuser/index.vue | 95 ++ src/views/monitor/operlog/index.vue | 337 +++++++ src/views/monitor/server/index.vue | 299 ++++++ src/views/redirect/index.vue | 14 + src/views/register.vue | 209 +++++ src/views/socialLogin.vue | 65 ++ src/views/system/commonLang/index.vue | 418 +++++++++ src/views/system/config/index.vue | 258 ++++++ src/views/system/dept/index.vue | 289 ++++++ src/views/system/dict/index.vue | 323 +++++++ src/views/system/menu/index.vue | 566 ++++++++++++ src/views/system/notice/index.vue | 250 +++++ src/views/system/oauth/thirdAccount.vue | 358 ++++++++ src/views/system/post/index.vue | 251 ++++++ src/views/system/role/index.vue | 616 +++++++++++++ src/views/system/roleusers/index.vue | 300 ++++++ src/views/system/user/index.vue | 580 ++++++++++++ src/views/system/user/profile/index.vue | 122 +++ src/views/system/user/profile/operLog.vue | 122 +++ src/views/system/user/profile/resetPwd.vue | 63 ++ src/views/system/user/profile/userAvatar.vue | 200 ++++ src/views/system/user/profile/userInfo.vue | 70 ++ src/views/tool/build/index.vue | 15 + src/views/tool/email/sendEmail.vue | 133 +++ src/views/tool/file/index.vue | 418 +++++++++ src/views/tool/gen/basicInfoForm.vue | 46 + src/views/tool/gen/editTable.vue | 300 ++++++ src/views/tool/gen/genInfoForm.vue | 426 +++++++++ src/views/tool/gen/importTable.vue | 112 +++ src/views/tool/gen/index.vue | 346 +++++++ src/views/tool/swagger/index.vue | 30 + vite.config.js | 66 ++ vite/plugins/auto-import.js | 12 + vite/plugins/compression.js | 30 + vite/plugins/index.js | 15 + vite/plugins/setup-extend.js | 5 + vite/plugins/svg-icon.js | 10 + 235 files changed, 26833 insertions(+) create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .jsbeautifyrc create mode 100644 .prettierrc.js create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 bat/build.bat create mode 100644 bat/package.bat create mode 100644 bat/run-web.bat create mode 100644 html/ie.html create mode 100644 index.html create mode 100644 jsconfig.json create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 public/logo_500.ico create mode 100644 src/App.vue create mode 100644 src/api/business/customers/customer.js create mode 100644 src/api/business/payments/payment.js create mode 100644 src/api/common.js create mode 100644 src/api/monitor/cache.js create mode 100644 src/api/monitor/job.js create mode 100644 src/api/monitor/jobLog.js create mode 100644 src/api/monitor/logininfor.js create mode 100644 src/api/monitor/online.js create mode 100644 src/api/monitor/operlog.js create mode 100644 src/api/monitor/server.js create mode 100644 src/api/system/commonlang.js create mode 100644 src/api/system/config.js create mode 100644 src/api/system/dept.js create mode 100644 src/api/system/dict/data.js create mode 100644 src/api/system/dict/type.js create mode 100644 src/api/system/login.js create mode 100644 src/api/system/menu.js create mode 100644 src/api/system/notice.js create mode 100644 src/api/system/post.js create mode 100644 src/api/system/role.js create mode 100644 src/api/system/thirdaccount.js create mode 100644 src/api/system/user.js create mode 100644 src/api/system/userRoles.js create mode 100644 src/api/tool/file.js create mode 100644 src/api/tool/gen.js create mode 100644 src/assets/401_images/401.gif create mode 100644 src/assets/404_images/404.png create mode 100644 src/assets/404_images/404_cloud.png create mode 100644 src/assets/iconfont/iconfont.css create mode 100644 src/assets/iconfont/iconfont.js create mode 100644 src/assets/iconfont/iconfont.json create mode 100644 src/assets/iconfont/iconfont.ttf create mode 100644 src/assets/iconfont/iconfont.woff create mode 100644 src/assets/iconfont/iconfont.woff2 create mode 100644 src/assets/icons/gitee-fill-round.png create mode 100644 src/assets/icons/github-fill.png create mode 100644 src/assets/icons/svg/build.svg create mode 100644 src/assets/icons/svg/exit-fullscreen.svg create mode 100644 src/assets/icons/svg/gitee.svg create mode 100644 src/assets/icons/svg/validCode.svg create mode 100644 src/assets/icons/wechat-fill.png create mode 100644 src/assets/images/dark.svg create mode 100644 src/assets/images/light.svg create mode 100644 src/assets/images/profile.jpg create mode 100644 src/assets/logo/icon.png create mode 100644 src/assets/logo/logo.png create mode 100644 src/assets/logo/logo_500.png create mode 100644 src/assets/styles/btn.scss create mode 100644 src/assets/styles/element-ui.scss create mode 100644 src/assets/styles/index.scss create mode 100644 src/assets/styles/login.scss create mode 100644 src/assets/styles/mixin.scss create mode 100644 src/assets/styles/sidebar.scss create mode 100644 src/assets/styles/transition.scss create mode 100644 src/assets/styles/variables.module.scss create mode 100644 src/assets/styles/waves.scss create mode 100644 src/auto-import.d.ts create mode 100644 src/components/Breadcrumb/index.vue create mode 100644 src/components/Crontab/day.vue create mode 100644 src/components/Crontab/hour.vue create mode 100644 src/components/Crontab/index.vue create mode 100644 src/components/Crontab/min.vue create mode 100644 src/components/Crontab/month.vue create mode 100644 src/components/Crontab/result.vue create mode 100644 src/components/Crontab/second.vue create mode 100644 src/components/Crontab/week.vue create mode 100644 src/components/Crontab/year.vue create mode 100644 src/components/DictTag/index.vue create mode 100644 src/components/Echarts/Gauge.vue create mode 100644 src/components/Editor/index.vue create mode 100644 src/components/FileUpload/index.vue create mode 100644 src/components/Hamburger/index.vue create mode 100644 src/components/HeaderSearch/index.vue create mode 100644 src/components/IconSelect/index.vue create mode 100644 src/components/IconSelect/requireIcons.js create mode 100644 src/components/ImagePreview/index.vue create mode 100644 src/components/ImageUpload/index.vue create mode 100644 src/components/LangSelect/index.vue create mode 100644 src/components/Map/index.vue create mode 100644 src/components/Notice/Index.vue create mode 100644 src/components/Pagination/index.vue create mode 100644 src/components/ParentView/index.vue create mode 100644 src/components/RightToolbar/index.vue create mode 100644 src/components/Screenfull/index.vue create mode 100644 src/components/SizeSelect/index.vue create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/components/SvgIcon/svgicon.js create mode 100644 src/components/TopNav/index.vue create mode 100644 src/components/iFrame/index.vue create mode 100644 src/components/vue3-cron-core/Index.vue create mode 100644 src/directive/index.js create mode 100644 src/directive/module/clipboard.js create mode 100644 src/directive/module/copyText.js create mode 100644 src/directive/module/drag.js create mode 100644 src/directive/module/waves.js create mode 100644 src/directive/permission/hasPermi.js create mode 100644 src/directive/permission/hasRole.js create mode 100644 src/i18n/index.js create mode 100644 src/i18n/lang/en.json create mode 100644 src/i18n/lang/zh-cn.json create mode 100644 src/i18n/lang/zh-tw.json create mode 100644 src/i18n/pages/login/en.json create mode 100644 src/i18n/pages/login/zh-cn.json create mode 100644 src/i18n/pages/login/zh-tw.json create mode 100644 src/i18n/pages/menu/en.js create mode 100644 src/i18n/pages/menu/zh-cn.js create mode 100644 src/i18n/pages/menu/zh-tw.js create mode 100644 src/layout/components/IframeToggle/index.vue create mode 100644 src/layout/components/InnerLink/index.vue create mode 100644 src/layout/components/Navbar.vue create mode 100644 src/layout/components/Settings/index.vue create mode 100644 src/layout/components/Sidebar/Link.vue create mode 100644 src/layout/components/Sidebar/Logo.vue create mode 100644 src/layout/components/Sidebar/SidebarItem.vue create mode 100644 src/layout/components/Sidebar/index.vue create mode 100644 src/layout/components/TagsView/ScrollPane.vue create mode 100644 src/layout/components/TagsView/index.vue create mode 100644 src/layout/components/index.js create mode 100644 src/layout/index.vue create mode 100644 src/main.js create mode 100644 src/permission.js create mode 100644 src/plugins/auth.js create mode 100644 src/plugins/cache.js create mode 100644 src/plugins/download.js create mode 100644 src/plugins/index.js create mode 100644 src/plugins/modal.js create mode 100644 src/plugins/tab.js create mode 100644 src/router/index.js create mode 100644 src/settings.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/permission.js create mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/socket.js create mode 100644 src/store/modules/tagsView.js create mode 100644 src/store/modules/user.js create mode 100644 src/utils/auth.js create mode 100644 src/utils/dateOptions.js create mode 100644 src/utils/dict.js create mode 100644 src/utils/dynamicTitle.js create mode 100644 src/utils/errorCode.js create mode 100644 src/utils/index.js create mode 100644 src/utils/jsencrypt.js create mode 100644 src/utils/request.js create mode 100644 src/utils/ruoyi.js create mode 100644 src/utils/scroll-to.js create mode 100644 src/utils/signalR.js create mode 100644 src/utils/validate.js create mode 100644 src/utils/wartermark.js create mode 100644 src/views/business/customers/components/AddDialog.vue create mode 100644 src/views/business/customers/components/DetailDialog.vue create mode 100644 src/views/business/customers/components/EditDialog.vue create mode 100644 src/views/business/customers/index.vue create mode 100644 src/views/business/payments/components/AddDialog.vue create mode 100644 src/views/business/payments/components/DetailDialog.vue create mode 100644 src/views/business/payments/components/EditDialog.vue create mode 100644 src/views/business/payments/index.vue create mode 100644 src/views/components/CommonMenu/index.vue create mode 100644 src/views/components/dictData.vue create mode 100644 src/views/components/icons/index.vue create mode 100644 src/views/components/starBackground.vue create mode 100644 src/views/dashboard/BarChart.vue create mode 100644 src/views/dashboard/LineChart.vue create mode 100644 src/views/dashboard/PanelGroup.vue create mode 100644 src/views/dashboard/PieChart.vue create mode 100644 src/views/dashboard/RaddarChart.vue create mode 100644 src/views/dashboard/WordCloud.vue create mode 100644 src/views/error/401.vue create mode 100644 src/views/error/404.vue create mode 100644 src/views/index.vue create mode 100644 src/views/login.vue create mode 100644 src/views/monitor/cache/index.vue create mode 100644 src/views/monitor/job/index.vue create mode 100644 src/views/monitor/job/log.vue create mode 100644 src/views/monitor/logininfor/index.vue create mode 100644 src/views/monitor/onlineuser/index.vue create mode 100644 src/views/monitor/operlog/index.vue create mode 100644 src/views/monitor/server/index.vue create mode 100644 src/views/redirect/index.vue create mode 100644 src/views/register.vue create mode 100644 src/views/socialLogin.vue create mode 100644 src/views/system/commonLang/index.vue create mode 100644 src/views/system/config/index.vue create mode 100644 src/views/system/dept/index.vue create mode 100644 src/views/system/dict/index.vue create mode 100644 src/views/system/menu/index.vue create mode 100644 src/views/system/notice/index.vue create mode 100644 src/views/system/oauth/thirdAccount.vue create mode 100644 src/views/system/post/index.vue create mode 100644 src/views/system/role/index.vue create mode 100644 src/views/system/roleusers/index.vue create mode 100644 src/views/system/user/index.vue create mode 100644 src/views/system/user/profile/index.vue create mode 100644 src/views/system/user/profile/operLog.vue create mode 100644 src/views/system/user/profile/resetPwd.vue create mode 100644 src/views/system/user/profile/userAvatar.vue create mode 100644 src/views/system/user/profile/userInfo.vue create mode 100644 src/views/tool/build/index.vue create mode 100644 src/views/tool/email/sendEmail.vue create mode 100644 src/views/tool/file/index.vue create mode 100644 src/views/tool/gen/basicInfoForm.vue create mode 100644 src/views/tool/gen/editTable.vue create mode 100644 src/views/tool/gen/genInfoForm.vue create mode 100644 src/views/tool/gen/importTable.vue create mode 100644 src/views/tool/gen/index.vue create mode 100644 src/views/tool/swagger/index.vue create mode 100644 vite.config.js create mode 100644 vite/plugins/auto-import.js create mode 100644 vite/plugins/compression.js create mode 100644 vite/plugins/index.js create mode 100644 vite/plugins/setup-extend.js create mode 100644 vite/plugins/svg-icon.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env b/.env new file mode 100644 index 0000000..bb5bff3 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ + +# 页面标题 +VITE_APP_TITLE = '阿尔文科技' \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..488868c --- /dev/null +++ b/.env.development @@ -0,0 +1,16 @@ +# 开发环境配置 +ENV = 'development' + +VITE_APP_API_HOST = 'http://localhost:8888' + +# 开发环境 +VITE_APP_BASE_API = '/dev-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..069cc48 --- /dev/null +++ b/.env.production @@ -0,0 +1,15 @@ +# 生产环境配置 +ENV = 'production' + + +# 生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..62f968e --- /dev/null +++ b/.env.staging @@ -0,0 +1,18 @@ +# 测试环境配置 +ENV = 'staging' + + +# 测试环境 +VITE_APP_BASE_API = '/stage-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..cafab33 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,14 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +# *.js +# 忽略当前目录下为vue的文件的语法检查 +# *.vue +/node_modules/ +/vite/ +.eslintrc.js +.prettierrc.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..82bbdee --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..308820b --- /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 +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock +/deploy.js diff --git a/.jsbeautifyrc b/.jsbeautifyrc new file mode 100644 index 0000000..d79fae6 --- /dev/null +++ b/.jsbeautifyrc @@ -0,0 +1,12 @@ +{ + "brace_style": "none,preserve-inline", + "indent_size": 2, + "indent_char": " ", + "jslint_happy": true, + "unformatted": [ + "" + ], + "css": { + "indent_size": 2 + } +} \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..fae9475 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,38 @@ +module.exports = { + // 超过最大值换行 + printWidth: 148, + // 使用 2 个空格缩进 + tabWidth: 2, + // 不使用缩进符,而使用空格 + useTabs: false, + // 行尾不需要有分号 + semi: false, + // 使用单引号 + singleQuote: true, + // 对象的 key 仅在必要时用引号 + quoteProps: 'as-needed', + // jsx 不使用单引号,而使用双引号 + jsxSingleQuote: false, + // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none + trailingComma: 'none', + // 在对象,数组括号与文字之间加空格 "{ foo: bar }" + bracketSpacing: true, + // jsx 标签的反尖括号需要换行 + jsxBracketSameLine: true, + bracketSameLine: true, + // 箭头函数,always只有一个参数的时候,也需要括号,'avoid'箭头函数只有一个参数的时候可以忽略括号 + arrowParens: 'always', + // 每个文件格式化的范围是文件的全部内容 + rangeStart: 0, + rangeEnd: Infinity, + // 不需要写文件开头的 @prettier + requirePragma: false, + // 不需要自动在文件开头插入 @prettier + insertPragma: false, + // 使用默认的折行标准 + proseWrap: 'preserve', + // 根据显示样式决定 html 要不要折行 + htmlWhitespaceSensitivity: 'css', + // 换行符使用 lf 结尾是 可选值"" + endOfLine: 'auto' +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..13ee2b0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "nuxt.isNuxtApp": false +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3494239 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 791736813@qq.com zr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9f7d0ab --- /dev/null +++ b/README.md @@ -0,0 +1,89 @@ +

ZRAdmin.NET后台管理系统

+ +

+ + +

+ +## 🍟概述 +* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。 +* 配套后端代码仓库地址[ZRAdmin.NET](https://gitee.com/izory/ZrAdminNetCore/) 版本。 +* 前端采用Vue3.0、Element UI Plus、vite、compisition api、Pinia等。 +* 支持加载动态权限菜单,多方式轻松权限控制 +* 腾讯云秒杀场:[点我进入](https://curl.qcloud.com/4yEoRquq)。 +* 腾讯云优惠券:[点我领取](https://curl.qcloud.com/5J4nag8D)。 +* 七牛云通用云产品优惠券:[点我进入](https://s.qiniu.com/FzEfay)。 +``` +如果对您有帮助,您可以点右上角 “Star” 收藏一下 ,这样作者才有继续免费下去的动力,谢谢!~ +``` + +## 🍿在线体验 +- 官方文档:http://www.izhaorui.cn/doc +- 体验地址:http://www.izhaorui.cn/vue3 +- 管理员:admin +- 密 码:123456 + +``` +由于是个人项目,资金有限,体验服是低配,请大家爱惜,轻戳,不胜感激!!! +``` +## 🍁前端运行 + +```bash +# 克隆项目 +git clone https://gitee.com/izory/ZRAdmin-vue.git + +# 进入项目目录 +cd ZRAdmin-vue + +# 安装依赖 +yarn --registry=https://registry.npm.taobao.org + +# 启动服务 +yarn dev + +# 构建测试环境 yarn build:stage +# 构建生产环境 yarn build:prod +# 前端访问地址 http://localhost:8887 +``` + + +## 🍖内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。(支持多语言) +5. 角色管理:角色菜单权限分配。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +8. 登录日志:系统登录日志记录查询包含登录异常。 +9. 系统接口:使用swagger生成相关api接口文档。 +10. 参数设置:常用参数配置 +11. 发送邮件:可以对多个用户进行发送邮件 +12. 任务系统:基于Quartz.NET,可以在线(添加、修改、删除、手动执行)任务调度包含执行结果日志。 +13. 文章管理:可以写文章记录。 +14. 代码生成:可以一键生成前后端代码(.cs、.vue、.js、SQL文件等),支持下载,自定义配置前端展示控件、让开发更快捷高效。 +15. 文件管理:可以进行上传文件管理,目前支持上传到本地、阿里云 +16. 通知管理:系统通知公告信息发布维护 +17. 参数管理:对系统动态配置常用参数。 +18. 多语言管理:动态修改多语言翻译 + +## 🎉优势 + +1. 前台系统不用编写登录、授权、认证模块;只负责编写业务模块即可 +2. 后台系统无需任何二次开发,直接发布即可使用 +3. 前台与后台系统分离,分别为不同的系统(域名可独立) +4. 全局异常统一处理 +5. 自定义的代码生成功能 +6. 国际化 + +## 💐 特别鸣谢 +- 👉Ruoyi.vue:[Ruoyi](http://www.ruoyi.vip/) + +## 🎀捐赠 +如果这个项目对您有所帮助,请扫下方二维码打赏作者喝杯咖啡。 + + +## 源码地址 +- [Gitee](https://gitee.com/izory/ZrAdminNetCore/) +- [Github](https://github.com/izhaorui/ZrAdmin.NET/) \ No newline at end of file diff --git a/bat/build.bat b/bat/build.bat new file mode 100644 index 0000000..ecbb454 --- /dev/null +++ b/bat/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn build:prod + +pause \ No newline at end of file diff --git a/bat/package.bat b/bat/package.bat new file mode 100644 index 0000000..965883a --- /dev/null +++ b/bat/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn --registry=https://registry.npm.taobao.org + +pause \ No newline at end of file diff --git a/bat/run-web.bat b/bat/run-web.bat new file mode 100644 index 0000000..d2fe397 --- /dev/null +++ b/bat/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..23f9e40 --- /dev/null +++ b/index.html @@ -0,0 +1,139 @@ + + + + + + + + + + 阿尔文科技后台 + + + + + +
+
+
+ +
+
Loading...
+
+
+ + + + \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..86b1741 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,11 @@ +/* 主要作用是vscode导入使用别名时可以自动化提示文件路径 */ +{ + "compilerOptions": { + "experimentalDecorators": true, + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist", ".vscode"] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..dafe052 --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "arw.admin", + "version": "3.8.2", + "description": "阿尔文后台管理系统", + "author": "Aerwen", + "license": "MIT", + "scripts": { + "dev": "vite", + "build:prod": "vite build", + "build:stage": "vite build --mode staging", + "preview": "vite preview" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/izory/ZrAdminNetCore" + }, + "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@element-plus/icons-vue": "^0.2.7", + "@microsoft/signalr": "^6.0.5", + "@vueuse/core": "^8.9.4", + "@wangeditor/editor": "^5.1.1", + "@wangeditor/editor-for-vue": "^5.1.11", + "axios": "^0.27.2", + "countup.js": "^2.1.0", + "echarts": "5.2.2", + "element-plus": "^2.3.2", + "file-saver": "2.0.5", + "fuse.js": "6.4.6", + "highlight.js": "^11.5.1", + "js-cookie": "3.0.1", + "js-md5": "^0.7.3", + "jsencrypt": "3.2.1", + "md-editor-v3": "^1.11.11", + "nprogress": "0.2.0", + "pinia": "^2.0.33", + "qs": "^6.11.0", + "sortablejs": "^1.15.0", + "vue": "^3.2.47", + "vue-clipboard3": "^2.0.0", + "vue-cropper": "1.0.2", + "vue-i18n": "^9.2.2", + "vue-router": "^4.1.6" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.1.0", + "@vue/compiler-sfc": "^3.2.47", + "sass": "1.45.0", + "unplugin-auto-import": "0.5.3", + "vite": "^4.2.1", + "vite-plugin-compression": "^0.3.6", + "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 0000000000000000000000000000000000000000..3c476d4588158e238a0010b0f648a103f5adadb4 GIT binary patch literal 41662 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 Z|7U5O^U!!F4?32E!PC{xWt~$(6978CqJ01W literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..c5ab5ef --- /dev/null +++ b/src/App.vue @@ -0,0 +1,56 @@ + + diff --git a/src/api/business/customers/customer.js b/src/api/business/customers/customer.js new file mode 100644 index 0000000..9e1df9e --- /dev/null +++ b/src/api/business/customers/customer.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 小程序客户分页查询列表 +export function customerList(query) { + return request({ + url: '/business/Customer/getCustomerList', + method: 'get', + params: query + }) +} + + +// 小程序客户新增或修改 +export function addOrUpdateCustomer(data) { + return request({ + url: '/business/Customer/addOrUpdateCustomer', + method: 'post', + data: data, + }) +} + +// 小程序客户删除 +export function delCustomer(ids) { + return request({ + url: '/business/Customer/'+ ids, + method: 'delete' + }) +} + +// 小程序客户导出 +export function exportCustomer(query) { + return request({ + url: 'business/Customer/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/business/payments/payment.js b/src/api/business/payments/payment.js new file mode 100644 index 0000000..1c144be --- /dev/null +++ b/src/api/business/payments/payment.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 支付订单分页查询列表 +export function paymentList(query) { + return request({ + url: '/business/Payment/getPaymentList', + method: 'get', + params: query + }) +} + + +// 支付订单新增或修改 +export function addOrUpdatePayment(data) { + return request({ + url: '/business/Payment/addOrUpdatePayment', + method: 'post', + data: data, + }) +} + +// 支付订单删除 +export function delPayment(ids) { + return request({ + url: '/business/Payment/'+ ids, + method: 'delete' + }) +} + +// 支付订单导出 +export function exportPayment(query) { + return request({ + url: 'business/Payment/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/common.js b/src/api/common.js new file mode 100644 index 0000000..c57228f --- /dev/null +++ b/src/api/common.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +export function upload(data) { + return request({ + url: '/common/UploadFile', + method: 'POST', + data: data, + headers: { "Content-Type": "multipart/form-data" }, + }) +} + +/** + * 发送邮件 + * @param {*} data + * @returns + */ +export function sendEmail(data) { + return request({ + url: '/common/SendEmail', + method: 'POST', + data: data, + }) +} diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js new file mode 100644 index 0000000..59d3505 --- /dev/null +++ b/src/api/monitor/cache.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js new file mode 100644 index 0000000..d40b293 --- /dev/null +++ b/src/api/monitor/job.js @@ -0,0 +1,114 @@ +import request from '@/utils/request' + +export function queryTasks(data) { + return request({ + url: '/system/tasks/list', + method: 'get', + params: data + }) +} + +export function getTasks(id) { + return request({ + url: '/system/tasks/get?id=' + id, + method: 'get' + }) +} + +/** + * + * 获取所有任务 + * @returns + */ +export function getAllTasks() { + return request({ + url: '/system/tasks/getAll', + method: 'get' + }) +} + +/** + * 创建任务 + * @param {*} data + * @returns + */ +export function createTasks(data) { + return request({ + url: '/system/tasks/create', + method: 'post', + data + }) +} + +/** + * 更新任务 + * @param {*} data + * @returns + */ +export function updateTasks(data) { + return request({ + url: '/system/tasks/update', + method: 'post', + data + }) +} + +/** + * 删除任务 + * @param {*} id + * @returns + */ +export function deleteTasks(id) { + return request({ + url: '/system/tasks/delete?id=' + id, + method: 'delete' + }) +} + +/** + * 启动任务 + * @param {*} id + * @returns + */ +export function startTasks(id) { + return request({ + url: '/system/tasks/start?id=' + id, + method: 'get' + }) +} + +/** + * 停止任务 + * @param {*} id + * @returns + */ +export function stopTasks(id) { + return request({ + url: '/system/tasks/stop?id=' + id, + method: 'get' + }) +} + +/** + * 运行一次 + * @param {*} id + * @returns + */ +export function runTasks(id) { + return request({ + url: '/system/tasks/run?id=' + id, + method: 'get' + }) +} +/** + * 导出 + * @returns + */ +export function exportTasks() { + return request({ + url: '/system/tasks/export', + method: 'get' + }) +} + +export default { queryTasks, getTasks, getAllTasks, createTasks, updateTasks, deleteTasks, startTasks, stopTasks, runTasks, exportTasks } diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js new file mode 100644 index 0000000..be1fffd --- /dev/null +++ b/src/api/monitor/jobLog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} + +// 导出调度日志 +export function exportJobLog(query) { + return request({ + url: '/monitor/jobLog/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js new file mode 100644 index 0000000..7ff412d --- /dev/null +++ b/src/api/monitor/logininfor.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} + +// 导出登录日志 +export function exportLogininfor(query) { + return request({ + url: '/monitor/logininfor/export', + method: 'get', + params: query + }) +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..a6d20ec --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function listOnline(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js new file mode 100644 index 0000000..07e27ab --- /dev/null +++ b/src/api/monitor/operlog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} + +// 导出操作日志 +export function exportOperlog(query) { + return request({ + url: '/monitor/operlog/export', + method: 'get', + params: query + }) +} diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js new file mode 100644 index 0000000..bdcc62b --- /dev/null +++ b/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询服务器详细 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} diff --git a/src/api/system/commonlang.js b/src/api/system/commonlang.js new file mode 100644 index 0000000..28b5b34 --- /dev/null +++ b/src/api/system/commonlang.js @@ -0,0 +1,89 @@ +import request from '@/utils/request' + +/** + * 多语言配置分页查询 + * @param {查询条件} data + */ +export function listCommonLang(query) { + return request({ + url: 'system/CommonLang/list', + method: 'get', + params: query, + }) +} +/** + * 多语言配置查询 + * @param {查询条件} data + */ +export function listLangByLocale(locale) { + return request({ + url: 'system/CommonLang/list/' + locale, + method: 'get', + }) +} + +/** + * 新增多语言配置 + * @param data + */ +export function addCommonLang(data) { + return request({ + url: 'system/CommonLang', + method: 'post', + data: data, + }) +} + +/** + * 修改多语言配置 + * @param data + */ +export function updateCommonLang(data) { + return request({ + url: 'system/CommonLang', + method: 'PUT', + data: data, + }) +} + +/** + * 获取多语言配置详情 + * @param {Id} + */ +export function getCommonLang(id) { + return request({ + url: 'system/CommonLang/' + id, + method: 'get' + }) +} +/** + * 获取多语言配置详情 + * @param {key} + */ +export function getCommonLangByKey(key) { + return request({ + url: 'system/CommonLang/key/' + key, + method: 'get' + }) +} + + +/** + * 删除多语言配置 + * @param {主键} pid + */ +export function delCommonLang(pid) { + return request({ + url: 'system/CommonLang/' + pid, + method: 'delete' + }) +} + +// 导出多语言配置 +export function exportCommonLang(query) { + return request({ + url: 'system/CommonLang/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/system/config.js b/src/api/system/config.js new file mode 100644 index 0000000..3633ba1 --- /dev/null +++ b/src/api/system/config.js @@ -0,0 +1,69 @@ +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 getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} + +// 导出参数 +// export function exportConfig(query) { +// return request({ +// url: '/system/config/export', +// method: 'get', +// params: query +// }) +// } diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..2804676 --- /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 listDeptExcludeChild(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 treeselect() { + return request({ + url: '/system/dept/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询部门树结构 +export function roleDeptTreeselect(roleId) { + return request({ + url: '/system/dept/roleDeptTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/dict/data.js b/src/api/system/dict/data.js new file mode 100644 index 0000000..0351dd6 --- /dev/null +++ b/src/api/system/dict/data.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/info/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + if (typeof (dictType) === "object") { + return request({ + url: '/system/dict/data/types', + data: dictType, + method: 'post' + }) + } else { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) + } +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} + +// 导出字典数据 +export function exportData(query) { + return request({ + url: '/system/dict/data/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/system/dict/type.js b/src/api/system/dict/type.js new file mode 100644 index 0000000..27ae18f --- /dev/null +++ b/src/api/system/dict/type.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type/edit', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type/edit', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 清理参数缓存 +export function clearCache() { + return request({ + url: '/system/dict/type/clearCache', + method: 'delete' + }) +} + +// 导出字典类型 +export function exportType(query) { + return request({ + url: '/system/dict/type/export', + method: 'get', + params: query + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} diff --git a/src/api/system/login.js b/src/api/system/login.js new file mode 100644 index 0000000..303333a --- /dev/null +++ b/src/api/system/login.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + return request({ + url: '/login', + method: 'POST', + data: data, + headers: { + userName: username + } + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/LogOut', + method: 'POST' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + method: 'get' + }) +} +/** + * 注册 + * @returns + */ +export function register(data) { + return request({ + url: '/register', + method: 'post', + data: data + }) +} + +/** + * 三方授权回调 + * @param {*} data + * @param {*} params + * @returns + */ +export function oauthCallback(data, params) { + return request({ + url: '/auth/callback', + method: 'post', + data: data, + params: params + }) +} diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..47d3ab1 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,84 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} +// 查询菜单列表 +export function listMenuById(menuId) { + return request({ + url: '/system/menu/list/' + menuId, + method: 'get', + }) +} +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get', + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/Menu/treeSelect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get', + }) +} + +// 新增菜单 +export const addMenu = (data) => { + return request({ + url: '/system/menu/add', + method: 'put', + data: data, + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/Menu/edit', + method: 'post', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/Menu/' + menuId, + method: 'delete' + }) +} + +//排序 +export function changeMenuSort(data) { + return request({ + url: '/system/Menu/ChangeSort', + method: 'GET', + params: data + }) +} + +// 获取路由 +export const getRouters = (query) => { + return request({ + url: '/getRouters', + method: 'get', + params: query + }) +} diff --git a/src/api/system/notice.js b/src/api/system/notice.js new file mode 100644 index 0000000..fc80afb --- /dev/null +++ b/src/api/system/notice.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 导航栏查询公告列表 +export function queryNotice(query) { + return request({ + url: '/system/notice/queryNotice', + method: 'get', + params: query + }) +} + +// 查询公告列表 +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: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} + +// 发送通知公告 +export function sendNotice(noticeId) { + return request({ + url: '/system/notice/send/' + noticeId, + method: 'PUT' + }) +} \ No newline at end of file diff --git a/src/api/system/post.js b/src/api/system/post.js new file mode 100644 index 0000000..8b9aff8 --- /dev/null +++ b/src/api/system/post.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' +import { downFile } 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: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} + +// 导出岗位 +export async function exportPost(query) { + // return request({ + // url: '/system/post/export', + // method: 'get', + // params: query + // }) + await downFile('/system/post/export', query) +} diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..25b8d1e --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,75 @@ +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 const addRole = (data) => { + return request({ + url: '/system/role/edit', + method: 'post', + data: data, + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role/edit', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 导出角色 +export function exportRole(query) { + return request({ + url: '/system/role/export', + method: 'get', + params: query + }) +} diff --git a/src/api/system/thirdaccount.js b/src/api/system/thirdaccount.js new file mode 100644 index 0000000..7637df3 --- /dev/null +++ b/src/api/system/thirdaccount.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +/** +* 三方账号绑定分页查询 +* @param {查询条件} data +*/ +export function listThirdAccount(query) { + return request({ + url: 'system/ThirdAccount/list', + method: 'get', + params: query, + }) +} + + +/** +* 新增三方账号绑定 +* @param data +*/ +export function addThirdAccount(data) { + return request({ + url: 'system/ThirdAccount', + method: 'post', + data: data, + }) +} + +/** +* 修改三方账号绑定 +* @param data +*/ +export function updateThirdAccount(data) { + return request({ + url: 'system/ThirdAccount', + method: 'PUT', + data: data, + }) +} + +/** +* 获取三方账号绑定详情 +* @param {Id} +*/ +export function getThirdAccount(id) { + return request({ + url: 'system/ThirdAccount/' + id, + method: 'get' + }) +} + +/** +* 删除三方账号绑定 +* @param {主键} pid +*/ +export function delThirdAccount(pid) { + return request({ + url: 'system/ThirdAccount/' + pid, + method: 'delete' + }) +} + +// 导出三方账号绑定 +export function exportThirdAccount(query) { + return request({ + url: 'system/ThirdAccount/export', + method: 'get', + params: query + }) +} + diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..c660261 --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,130 @@ +import request from '@/utils/request' +import { praseStrZero } from '@/utils/ruoyi' +import { downFile } from '@/utils/request' + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + praseStrZero(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user/edit', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user/edit', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 导出用户 +export async function exportUser(query) { + // return request({ + // url: '/system/User/export', + // method: 'get', + // params: query + // }) + await downFile('/system/user/export', { ...query }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: 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: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data + }) +} + +// 下载用户导入模板 +export function importTemplate() { + return request({ + url: '/system/user/importTemplate', + method: 'get', + responseType: 'blob' //1.首先设置responseType对象格式为 blob: + }) +} diff --git a/src/api/system/userRoles.js b/src/api/system/userRoles.js new file mode 100644 index 0000000..d5d94b3 --- /dev/null +++ b/src/api/system/userRoles.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 查询角色用户 +export function getRoleUsers(query) { + return request({ + url: '/system/userRole/list', + method: 'get', + params: query, + }) +} + +// 添加角色用户 +export function createRoleUsers(data) { + return request({ + url: '/system/userRole/create', + method: 'post', + data + }) +} +// 删除角色用户 +export function deleteRoleUsers(data) { + return request({ + url: '/system/userRole/delete', + method: 'post', + data + }) +} +// 查询角色未添加用户列表 +export function getExcludeUsers(query) { + return request({ + url: '/system/userRole/getExcludeUsers', + method: 'get', + params: query, + }) +} + +// export default { getRoleUsers, getExcludeUsers } diff --git a/src/api/tool/file.js b/src/api/tool/file.js new file mode 100644 index 0000000..03b64a8 --- /dev/null +++ b/src/api/tool/file.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +/** +* 文件存储分页查询 +* @param {查询条件} data +*/ +export function listSysfile(query) { + return request({ + url: 'tool/file/list', + method: 'get', + params: query, + }) +} + +/** +* 新增文件存储 +* @param data +*/ +export function addSysfile(data) { + return request({ + url: 'tool/file', + method: 'post', + data: data, + }) +} + +/** +* 修改文件存储 +* @param data +*/ +export function updateSysfile(data) { + return request({ + url: 'tool/file', + method: 'PUT', + data: data, + }) +} + +/** +* 获取文件存储详情 +* @param {Id} +*/ +export function getSysfile(id) { + return request({ + url: 'tool/file/' + id, + method: 'get' + }) +} + +/** +* 删除文件存储 +* @param {主键} pid +*/ +export function delSysfile(pid) { + return request({ + url: 'tool/file/' + pid, + method: 'delete' + }) +} + +// 导出文件存储 +export function exportSysfile(query) { + return request({ + url: 'tool/file/export', + method: 'get', + params: query + }) +} + diff --git a/src/api/tool/gen.js b/src/api/tool/gen.js new file mode 100644 index 0000000..a7650ab --- /dev/null +++ b/src/api/tool/gen.js @@ -0,0 +1,114 @@ +import request from '@/utils/request'; + +/** + * 获取数据库 + */ +export function codeGetDBList() { + return request({ + url: 'tool/gen/getDbList', + method: 'get', + }) +} +/** + * 获取数据库表 + */ +export function listDbTable(data) { + return request({ + url: 'tool/gen/getTableList', + method: 'get', + params: data, + }) +} +/** + * 生成代码 + */ +export async function codeGenerator(data) { + return await request({ + url: 'tool/gen/genCode', + method: 'POST', + data: data, + }) +} + +/** + * 前端接口 + */ +export async function codeGeneratorApi(data) { + return await request({ + url: 'tool/gen/genCodeApi', + method: 'POST', + data: data, + }) +} + +/** + * 获取表格列信息 + * @param {*} data + * @returns + */ +export function queryColumnInfo(tableId) { + return request({ + url: 'tool/gen/Column/' + tableId, + method: 'GET', + }) +} + +// 查询生成表数据 +export function listTable(params) { + return request({ + url: 'tool/gen/list', + method: 'get', + params: params + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 修改代码生成表信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen/', + method: 'put', + data: data + }) +} + +// 预览生成代码 +export function previewTable(tableId, data) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'post', + params: data + }) +} + +// 同步数据库 +export function synchDb(tableId, data) { + return request({ + url: '/tool/gen/synchDb/' + tableId, + method: 'get', + params: data + }) +} \ No newline at end of file diff --git a/src/assets/401_images/401.gif b/src/assets/401_images/401.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000 GIT binary patch literal 164227 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⋘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 GY5fOuZZib{ literal 0 HcmV?d00001 diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..188f4de --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,391 @@ +@font-face { + font-family: "iconfont"; /* Project id 4017520 */ + src: url('iconfont.woff2?t=1681548759797') format('woff2'), + url('iconfont.woff?t=1681548759797') format('woff'), + url('iconfont.ttf?t=1681548759797') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-tree-table:before { + content: "\e637"; +} + +.icon-unlock:before { + content: "\e654"; +} + +.icon-zujian:before { + content: "\e655"; +} + +.icon-theme:before { + content: "\e659"; +} + +.icon-swagger:before { + content: "\e65c"; +} + +.icon-star:before { + content: "\e661"; +} + +.icon-time:before { + content: "\e662"; +} + +.icon-upload:before { + content: "\e663"; +} + +.icon-weixin:before { + content: "\e664"; +} + +.icon-system:before { + content: "\e667"; +} + +.icon-web:before { + content: "\e668"; +} + +.icon-tree:before { + content: "\e669"; +} + +.icon-user:before { + content: "\e66a"; +} + +.icon-tool:before { + content: "\e66b"; +} + +.icon-zip:before { + content: "\e66c"; +} + +.icon-link:before { + content: "\e636"; +} + +.icon-list:before { + content: "\e638"; +} + +.icon-international:before { + content: "\e639"; +} + +.icon-language:before { + content: "\e63a"; +} + +.icon-index:before { + content: "\e63b"; +} + +.icon-ipvisits:before { + content: "\e63c"; +} + +.icon-money:before { + content: "\e63d"; +} + +.icon-message:before { + content: "\e63e"; +} + +.icon-login:before { + content: "\e63f"; +} + +.icon-lock:before { + content: "\e640"; +} + +.icon-menu:before { + content: "\e641"; +} + +.icon-log:before { + content: "\e643"; +} + +.icon-logininfor:before { + content: "\e644"; +} + +.icon-mnt:before { + content: "\e645"; +} + +.icon-password:before { + content: "\e646"; +} + +.icon-peoples:before { + content: "\e647"; +} + +.icon-post:before { + content: "\e648"; +} + +.icon-permission:before { + content: "\e649"; +} + +.icon-phone:before { + content: "\e64a"; +} + +.icon-people:before { + content: "\e64b"; +} + +.icon-online:before { + content: "\e64d"; +} + +.icon-pdf:before { + content: "\e64f"; +} + +.icon-redis:before { + content: "\e650"; +} + +.icon-size:before { + content: "\e651"; +} + +.icon-search:before { + content: "\e652"; +} + +.icon-server:before { + content: "\e653"; +} + +.icon-select:before { + content: "\e656"; +} + +.icon-question:before { + content: "\e657"; +} + +.icon-rate:before { + content: "\e658"; +} + +.icon-monitor:before { + content: "\e65a"; +} + +.icon-source:before { + content: "\e65b"; +} + +.icon-role:before { + content: "\e65d"; +} + +.icon-shopping:before { + content: "\e65e"; +} + +.icon-skill:before { + content: "\e65f"; +} + +.icon-number:before { + content: "\e660"; +} + +.icon-a-404:before { + content: "\e622"; +} + +.icon-email:before { + content: "\e623"; +} + +.icon-example:before { + content: "\e624"; +} + +.icon-error:before { + content: "\e625"; +} + +.icon-excel:before { + content: "\e626"; +} + +.icon-education:before { + content: "\e627"; +} + +.icon-eye-open:before { + content: "\e628"; +} + +.icon-eye:before { + content: "\e629"; +} + +.icon-github:before { + content: "\e62b"; +} + +.icon-guide:before { + content: "\e62c"; +} + +.icon-gonggao:before { + content: "\e62d"; +} + +.icon-icon1:before { + content: "\e62e"; +} + +.icon-fullscreen:before { + content: "\e62f"; +} + +.icon-icon:before { + content: "\e630"; +} + +.icon-image:before { + content: "\e631"; +} + +.icon-form:before { + content: "\e632"; +} + +.icon-job:before { + content: "\e635"; +} + +.icon-cascader:before { + content: "\e603"; +} + +.icon-alipay:before { + content: "\e604"; +} + +.icon-anq:before { + content: "\e605"; +} + +.icon-backup:before { + content: "\e606"; +} + +.icon-bug:before { + content: "\e607"; +} + +.icon-button:before { + content: "\e609"; +} + +.icon-chain:before { + content: "\e60b"; +} + +.icon-chart:before { + content: "\e60c"; +} + +.icon-checkbox:before { + content: "\e60d"; +} + +.icon-clipboard:before { + content: "\e60e"; +} + +.icon-codeConsole:before { + content: "\e60f"; +} + +.icon-code:before { + content: "\e610"; +} + +.icon-color:before { + content: "\e611"; +} + +.icon-database:before { + content: "\e612"; +} + +.icon-component:before { + content: "\e613"; +} + +.icon-dashboard:before { + content: "\e614"; +} + +.icon-date:before { + content: "\e615"; +} + +.icon-deploy:before { + content: "\e616"; +} + +.icon-develop:before { + content: "\e617"; +} + +.icon-dept:before { + content: "\e619"; +} + +.icon-dictionary:before { + content: "\e61a"; +} + +.icon-documentation:before { + content: "\e61b"; +} + +.icon-doc:before { + content: "\e61c"; +} + +.icon-download:before { + content: "\e61d"; +} + +.icon-dict:before { + content: "\e61e"; +} + +.icon-edit:before { + content: "\e620"; +} + +.icon-app:before { + content: "\e602"; +} + diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js new file mode 100644 index 0000000..8706d38 --- /dev/null +++ b/src/assets/iconfont/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_4017520='',function(a){var c=(c=document.getElementsByTagName("script"))[c.length-1],h=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var l,v,o,t,m,z=function(c,h){h.parentNode.insertBefore(c,h)};if(h&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}l=function(){var c,h=document.createElement("div");h.innerHTML=a._iconfont_svg_string_4017520,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(c=document.body).firstChild?z(h,c.firstChild):c.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),l()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(o=l,t=a.document,m=!1,s(),t.onreadystatechange=function(){"complete"==t.readyState&&(t.onreadystatechange=null,i())})}function i(){m||(m=!0,o())}function s(){try{t.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}i()}}(window); \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json new file mode 100644 index 0000000..e47791c --- /dev/null +++ b/src/assets/iconfont/iconfont.json @@ -0,0 +1,667 @@ +{ + "id": "4017520", + "name": "admin", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "35076965", + "name": "tree-table", + "font_class": "tree-table", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "35076967", + "name": "unlock", + "font_class": "unlock", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "35076968", + "name": "zujian", + "font_class": "zujian", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "35076969", + "name": "theme", + "font_class": "theme", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "35076970", + "name": "swagger", + "font_class": "swagger", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "35076971", + "name": "star", + "font_class": "star", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "35076972", + "name": "time", + "font_class": "time", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "35076973", + "name": "upload", + "font_class": "upload", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "35076974", + "name": "weixin", + "font_class": "weixin", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "35076977", + "name": "system", + "font_class": "system", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "35076979", + "name": "web", + "font_class": "web", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "35076980", + "name": "tree", + "font_class": "tree", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "35076981", + "name": "user", + "font_class": "user", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "35076982", + "name": "tool", + "font_class": "tool", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "35076986", + "name": "zip", + "font_class": "zip", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "35076492", + "name": "link", + "font_class": "link", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "35076494", + "name": "list", + "font_class": "list", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "35076495", + "name": "international", + "font_class": "international", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "35076496", + "name": "language", + "font_class": "language", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "35076497", + "name": "index", + "font_class": "index", + "unicode": "e63b", + "unicode_decimal": 58939 + }, + { + "icon_id": "35076498", + "name": "ipvisits", + "font_class": "ipvisits", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "35076499", + "name": "money", + "font_class": "money", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "35076500", + "name": "message", + "font_class": "message", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "35076501", + "name": "login", + "font_class": "login", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "35076502", + "name": "lock", + "font_class": "lock", + "unicode": "e640", + "unicode_decimal": 58944 + }, + { + "icon_id": "35076503", + "name": "menu", + "font_class": "menu", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "35076505", + "name": "log", + "font_class": "log", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "35076506", + "name": "logininfor", + "font_class": "logininfor", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "35076507", + "name": "mnt", + "font_class": "mnt", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "35076509", + "name": "password", + "font_class": "password", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "35076510", + "name": "peoples", + "font_class": "peoples", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "35076511", + "name": "post", + "font_class": "post", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "35076512", + "name": "permission", + "font_class": "permission", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "35076513", + "name": "phone", + "font_class": "phone", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "35076514", + "name": "people", + "font_class": "people", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "35076516", + "name": "online", + "font_class": "online", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "35076518", + "name": "pdf", + "font_class": "pdf", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "35076519", + "name": "redis", + "font_class": "redis", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "35076520", + "name": "size", + "font_class": "size", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "35076521", + "name": "search", + "font_class": "search", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "35076522", + "name": "server", + "font_class": "server", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "35076525", + "name": "select", + "font_class": "select", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "35076526", + "name": "question", + "font_class": "question", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "35076527", + "name": "rate", + "font_class": "rate", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "35076529", + "name": "monitor", + "font_class": "monitor", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "35076530", + "name": "source", + "font_class": "source", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "35076532", + "name": "role", + "font_class": "role", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "35076533", + "name": "shopping", + "font_class": "shopping", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "35076534", + "name": "skill", + "font_class": "skill", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "35076535", + "name": "number", + "font_class": "number", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "35076366", + "name": "404", + "font_class": "a-404", + "unicode": "e622", + "unicode_decimal": 58914 + }, + { + "icon_id": "35076470", + "name": "email", + "font_class": "email", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "35076471", + "name": "example", + "font_class": "example", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "35076472", + "name": "error", + "font_class": "error", + "unicode": "e625", + "unicode_decimal": 58917 + }, + { + "icon_id": "35076473", + "name": "excel", + "font_class": "excel", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "35076474", + "name": "education", + "font_class": "education", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "35076475", + "name": "eye-open", + "font_class": "eye-open", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "35076476", + "name": "eye", + "font_class": "eye", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "35076480", + "name": "github", + "font_class": "github", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "35076481", + "name": "guide", + "font_class": "guide", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "35076482", + "name": "gonggao", + "font_class": "gonggao", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "35076483", + "name": "icon1", + "font_class": "icon1", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "35076484", + "name": "fullscreen", + "font_class": "fullscreen", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "35076485", + "name": "icon", + "font_class": "icon", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "35076486", + "name": "image", + "font_class": "image", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "35076487", + "name": "form", + "font_class": "form", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "35076491", + "name": "job", + "font_class": "job", + "unicode": "e635", + "unicode_decimal": 58933 + }, + { + "icon_id": "35076284", + "name": "cascader", + "font_class": "cascader", + "unicode": "e603", + "unicode_decimal": 58883 + }, + { + "icon_id": "35076315", + "name": "alipay", + "font_class": "alipay", + "unicode": "e604", + "unicode_decimal": 58884 + }, + { + "icon_id": "35076316", + "name": "anq", + "font_class": "anq", + "unicode": "e605", + "unicode_decimal": 58885 + }, + { + "icon_id": "35076317", + "name": "backup", + "font_class": "backup", + "unicode": "e606", + "unicode_decimal": 58886 + }, + { + "icon_id": "35076318", + "name": "bug", + "font_class": "bug", + "unicode": "e607", + "unicode_decimal": 58887 + }, + { + "icon_id": "35076321", + "name": "button", + "font_class": "button", + "unicode": "e609", + "unicode_decimal": 58889 + }, + { + "icon_id": "35076323", + "name": "chain", + "font_class": "chain", + "unicode": "e60b", + "unicode_decimal": 58891 + }, + { + "icon_id": "35076324", + "name": "chart", + "font_class": "chart", + "unicode": "e60c", + "unicode_decimal": 58892 + }, + { + "icon_id": "35076325", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e60d", + "unicode_decimal": 58893 + }, + { + "icon_id": "35076326", + "name": "clipboard", + "font_class": "clipboard", + "unicode": "e60e", + "unicode_decimal": 58894 + }, + { + "icon_id": "35076327", + "name": "codeConsole", + "font_class": "codeConsole", + "unicode": "e60f", + "unicode_decimal": 58895 + }, + { + "icon_id": "35076328", + "name": "code", + "font_class": "code", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "35076329", + "name": "color", + "font_class": "color", + "unicode": "e611", + "unicode_decimal": 58897 + }, + { + "icon_id": "35076330", + "name": "database", + "font_class": "database", + "unicode": "e612", + "unicode_decimal": 58898 + }, + { + "icon_id": "35076331", + "name": "component", + "font_class": "component", + "unicode": "e613", + "unicode_decimal": 58899 + }, + { + "icon_id": "35076332", + "name": "dashboard", + "font_class": "dashboard", + "unicode": "e614", + "unicode_decimal": 58900 + }, + { + "icon_id": "35076333", + "name": "date", + "font_class": "date", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "35076334", + "name": "deploy", + "font_class": "deploy", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "35076335", + "name": "develop", + "font_class": "develop", + "unicode": "e617", + "unicode_decimal": 58903 + }, + { + "icon_id": "35076337", + "name": "dept", + "font_class": "dept", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "35076340", + "name": "dictionary", + "font_class": "dictionary", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "35076341", + "name": "documentation", + "font_class": "documentation", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "35076342", + "name": "doc", + "font_class": "doc", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "35076343", + "name": "download", + "font_class": "download", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "35076344", + "name": "dict", + "font_class": "dict", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "35076351", + "name": "edit", + "font_class": "edit", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "35075963", + "name": "app", + "font_class": "app", + "unicode": "e602", + "unicode_decimal": 58882 + } + ] +} diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..43c355744eaaefde9b53c1e6c46b275c3e1d419d GIT binary patch literal 27100 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 literal 0 HcmV?d00001 diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..bec21a30696f3bfe30734538d0be7f4f1f98ef8c GIT binary patch literal 17872 zcmV)tK$pLFPew)n0RR9107cLM3jhEB0BPI+0RR91000000000000000000000000- zQ&mC$009U90027x002}VizRwbQ!g?A00Be*002Y)003Y-97#`OZDDW#00D>q00Nc( z00!RteBD@QYJ09Xk}pl z06_2n001BW001Nl*$3QcZFG1506`D{002Ay00DS@^Z)W}Z)0Hq06|Ou006!K006!m zv;(4TVR&!=0747^0018V001BXbpcmyVQpmq075JP00BS%00L(aqdc&1Z*z1207Gm5 z00LwH00UbCKXg8LoMT{QU|`^4FkrA_U~+Nu31Q&NNi4}@kYZqAfB=v@GMh0cGd+=k z1I7c&v4Cj~AZCMz0stmE1xNsRoMT{N5oVmgz{@2c9uK%VBQ#-@w4Ye21YGD9nhWhzS680SxANoaNQ|R*i8O#qsZ{Q%O;T zWJoe58B*pc36+G0Lvw~9@n&QgZ;Gq>k6EAeOjIOw>q8o-TV2yKpW6%C#?xB zA87bD8n1n}v2nhY%^T;NjS0WsLvNi?hdR}-K@Dj{vIL-tvQ=K7M&^o!iX#>|O3L%N+CEXMqtOu*gFm@t7t5 z#Z#WK%nGZl@thZ&V}eP}bAgLo;xbqK+1I$v4Q?{UEv9`P4YskJK6bE^UG%e?0e_FZ z>|;NJ9AJop40Fie>j+0V#&Q4G7GM1dMtxtJjB(2M?=)vP%Q)?Hu!&CJtuDIR!d7~G zVeS9C=Ktr_T|b)N|Gs-!4GCw9TEi)$W;k!u7ET_uhdY2e!fimE;a;Gwa6?dcxGQK& zxHV{NxId^ToGI!JcM5F_w+n3#_YC!g8;5p;yN7m$TZndr`-u9(%|rv?j-ox`wxYe^ z-lBcs2BZDqE~CM4tI<%n-)K18baW`(d2~43esm-}2k2;cBG9q$Y@p-eDM2IQc|oJ$ z$w4Q>Gla&%(}Yfi=L($;PZ&BAo;7qfJauS1Jb!31Jc;OhP&r(P+I@5}s7x*emC5Cx zGPx2|CRc;XgUaW2Q2ERRmCv1^^0^z{Gtj-DvYHL= zBWNzD+~$MIZ6T=K7K6&|VNkg}3M#k9LFKj-8y$WU)NDPC+S&CiylbK5pt4XifnTHP8@25F~yF>V9~Kc481e zf30@}RpQ7rtV+GsTgVskX^!RK2{UQdY&~I3>&-(AHk}_vB~(oo|t_i@bdBj3u4{-s!Z`H(@f-$Fs zDYa<~g84D5M%BzPnVGy4&a0+o+Ej5HE>o-O<+n5(L}zylom5933TZcMA@qh%*L@D} zCLRL#wL^!<`@AxT$7Se^*<~-zs_L87Me|#@T@Rks9zCqj09&VCe5Xujx@sig0f7kQ z;;})ePoKUL*4>Q+AO*7H2+s_wA_dvHr64?CFmol;(ChhbKv0;Y5rlshSv$l9l{f7e zseMTl$WA&`G+*?^eJ`5D5Zy@%;+Hfs8hld;a)-puPHOXON`TDMxgPCNDW*Dah6+CE zDvrBK@)bgeQDf4hT2GG7lL6&5+wTXg#Q6CH%$c9a5d-jS)rw_c6v|^{fki^4@q+4Y z)Eo7RZP}KAmsX*I(`S~NflEmKDLj0yLJ-#ZEB5Rh8Xg|nx#zFbz!iHotgZI;R@ZKL zb{asFP!%R)05@!|KC8M5jGk591@QVO2XLXtXjg+Qr6 ziC&<}j2s}xd0V78#L-uBW^m3$lYx<)gL5tz?Z7Y4*0Z8iKBr7d0ZJU*RO{b9!XUrg zK0i-(EiIOCjndGbIaKMKUU~9z^d)*fA2b-28g^cm0wjW!g+jx)Yrz(neH@7vR5uK; zV|%XNKbL}GB70VBUfHckmE~Q%8|tzjFV*aqEiJixx~yE?BfWT8-~Y4kt6tE+rUL^sp#@Mhynl zK!k}n?dLyKuH>_e^Hcs~8;Ml6#YA2+a;cym4!^c=WNg*eN*GxvAd2qFgQe)M%e0$103)&JP9x324+YI3GG~mn9{I8~J=m%S!ru&`8uGs??#mjYOJG1hmlnp!4eBj=|2A z!>NHCN45i_76C7RL_JJ(0w?qlCJ`o*M4l)SRid9*4)XwmRJ9BhhOeriLI!9KB&mF% z%2F9vj4V~PY*?8%9|(?a*_k?%$rs`%cZLR?p-bdfS@t$bdOl}fli0H0I~?~NZhv3s zfzYq6ifzc_(7nR9+I;U=CI{i3NZbABMH%dw303@ZvO zP0<`DFcYeT&R?dQrV6zLQ<*?(By~dhjI6$M^ug0e2Y>JQ$b$v=Zkw`v&>bs(t02n)nuHMjxAO=u%RD*< zLg#%KVHgKH7cF865wa6Hi!^@}DUdfRV)IA1SF%%7Xj#~a``(HB*@^1_GLm7N0W@dXvI+QGw#dFo^5Qa5N)vjTiJ zL)$l!WR?yeM`Qtg7ag?F67)R=AwM5hlllq-YcY`UBh()E$MwYA#L9&8U}yY_WP5w^ zig@SoU07Ukbrw910*tAS@ypW!w5o2SLM~Iw)Kb(vr*@)eocEDG+RlwT1LI`s{GXuy zYpHv-H#^XNGCb}KF8K7*+oxsiV=f)xL8nL&Wsu#LfUJ#GAUsyNl&7I#e8qT*{(l$v zItDu6qF!otbE3$RKi~!Nl-x1c-agntz1S>qg2-<@soWS>W;wTmZshe-2l1saf`Gi>=9v0mmVr47ra&A^en{Wr zBN0Qff)%O+{fY#1Gmrv`9PpEfG_Coo0}LtMy?@(4m*M9{&}egkga`=1atb7UVz^z< z>4eW_c#=}spfdIa=lr(9t(&$yyJgd@g|=DXqS67y@5?d)K^6p_W@w2Eh;e|0U_eeV z`9<-;SgI6?QvU8#ITqqY5+NYc5hWP5qnZ*IMPF7UX%HHD*$U>fipeZm?zHcD>wR1h z#+I4ELl!VG1}pd&P+&}S>kU*b0O3*)tlKyOG;o)63BMIyvH3KN5!sD0-ne>sg|aIZ z;vv-WFk)#3>j`lZkF9Q*tUGrshb7Gh20=%Ik#4{ZVIjk4<6DytDyEsLCYz5ucrICN zqV!-IF7kAGFq0Z^9uP!M231{TX_lqJzYKFCOVJ`5;3d{4(KJhO)Xfn3SXR;`Hq1%^ ziGk=AokizVItrP2dyW1=S27!n2&13oLYyIlh5JU8?r1jGSs~XK)7eyYtMiRtqT_Ja zCgI(kA~FN%Q{NFtlBGF;lXZ6CLe*9n$e>A1VmLwead3xS&|!#!d54K11xetlx^rJ% z=Uxni?D)J`QZ?*kw$N1yiCqGxW{qUexzVH%R9d{}Ntz)40BcwSjk!qFfV!?Ehz4Gd zcwOq#fZYJez!gh5Hjd@Xd~Ui3O#{qKWf0{vsWhIL5wa2|pYIs%>>Tbm&^goz*WdbS ze>6-Fr0arQTDL+HLTEFTLLKLJuLdH#_{)=`aq0y_oSc03d&ZRy12qF71MJItqM0MAnxp3;U!;s-?f@{&HMK}_MXYf_dEvgEyH_XPdU_e z#9rcZ;@!ku#K(xwA`yjA9#sH=fR2F-4k!l7u{HhQTKffe3Aa$N+;B0kRaC|5Y1~!k zS`?trTJMcngu`9)Koa^M6Xee-cVBOWoXK%XSpv1jAdMdlmaJ>;nuc-7S#VlK=$oAz zGIQGU9U^Orh82#*O6P`syoeCbhty~yUQC-IkRm9`C&_X^*6ncIR!7QRahuBr{h>sn zvoSDGPGroe0D@DvV_B|I>5Qe?GKsRx0L~|@h4WZO@#$)NAir%EwZXti+Onzo4gLk$@cuS?xZNqPSEw zh)7U~cr#{Eh^Bb{D~Lq25Y`2F{F`Z-5BMZTW)H$Mk&I82Se0MSvNFx_u*!9TyqTvZ zqmaLBqGvRb0vf^y(WI)IddL9PlNV?dUCs>`ElDIvUef%Pxabp9Dq*Cy34-Ofg<#xF%eF5TJ1p>~-}g)|oAajPVXmM;iIiA`%8I9`)X(81`i&-oWh_k~8z>5k^2R*0ffp-9Lt z`9zMFZ6#v+{HhohWKQBi(npkSt}H59za%T7BJ2K0vb}F0ITkH-7y*@|5u$0^?^8)S zz%AxDzc0YsGH>ykXjvgi4#_rBg}fev+lv8?;hC^+6m(Kv6?ul#h1D?9EXbIok9Bn( zPgV&71FEIGe^f=7>F8Aia*+FvKI`0s4#Tg~~*56=Rh<0tD*rsiP4BrN_5D~)m)Inr7X1G`eb2fxc7Fbv> zybWj{@AwV>B0?SG?Ep3_5R-Rw40XWu3orU<2d0W0 zmrCyHnMx(&d=jmJ z-@{)18nn8SX?`+OSxv6-bf;rLJFf-aU4T9_|4;Vr%#3B6dTdUuvUdHm>(^9!MLm+1Iy*ZSE?GU9u$pgJ@wi3uR${V$Yd>7B{0hN+6w$I{ z6Z-V5!T(lj^wbkGKjMk4@K4~k#;{ZzqYPs@f-Nw{4^Eye0^rLO0*d3PY$EzkBF{Ad;cR}fWX~TFbx|AmJa1{Qh^)hsj1b0P$vUP_tC>Ldz12VRx?th(H3(0S4_N zl4s>h+qk4tNDZ@oJ^VMvfK!_Ay4gj8JetQ{{`s`Xb|3gipckpx#Cddvx|2)Sc8QXq;`tAj|=_onpdD;?XAY zXplf8 zDx1q?uUZUX^Pa;V-30uZB67rh;6kk@bhkCIUIOb0s7S@a>LlLb@PxCfyPxQ4i^F)I zE|cbF%HxP^=EBYEfsUpI`bYbc=}a1kX)2RSHAede(%EybHDb~5+Hyy=w!UWQLBr}E z=q(S|Kq`)pkB`=>(ZcAwiN!1C&s)BH-uxAdC+3Y7qSe~y_*gPntCv@p@tuQxL%WBV zfw9Gt10$tCZ{-$Oe|w4g2$gX668nIbZp1rm9{tDzJ+VDPf(Z+#xYJfc*CIF_&)N`8 zx1`wy;4`-DS4;y?+%gTArv_I5Ir&}7{kH92?zgNPapb}_d7ydJOcXGeD0pGQB;REw z63*xOCGm7M6kY}TGpqf;W>!?I>G;wIqD%LH2>6VZ0-~9+zNJ}K%0?EMO_<+`cgC-S z-?z+o+$4W&CYoJ&Bgp$czhUhjmZMpTW%qpU3nCvh3eC1ZeTwz=tiIvysV0D@90wYZ zskw>)=NS%xo1AURDD;$FaU9+c&u@k?JXt@58)4g$XB)uwc^4n5Es?xjH7$3muIi$L zX-uoW-oN3QA*NLd6FrbY2|K3;&_FWC(D3H3F^2?$otFrT` z1fm#9<_cj!X zCLgaaDnvP&%tks*v#v@{N~#;wWi=iM$)P#*FPnbZ6`o064E+1%OEU?B@v%bC)Fhsz z$caKGX9p=nhU`W836f$#G))LSbUTZK&Fm%i)^%^c$Y2|9Ar2b(kLDY}OeRS3!F1aB{P_&WF*vB(i9}a2 z`DaabI((YuLqC=^>gsgx)a6hwNSz3#2RM=EMefv|WHAZX=df!5IfcXK)U>U`l{>qM z<-}TIH*pBt+}(-HxQvob7F;fw@fN|1EdyIHyk!9V!Be+dyJ6l2gC}%lFs@C%76*LC z-Qj7(fg?Ap+;jmow-Sj_Yp9;i!_MCiclH1nja1fEdS_W@dMnPZ{@qJcy~$j_nAtBd z0=Z-@xpdEagQ-+cD%D$Bv1vs~HCF9eWvI@rklCG1A20O}js^mTzqTb;ujjVZ{6-)! zI@n(tTC;BZx)l>glIe8v$ixartU(_TSR~4^WZ#a}tICy1dDZG2eaVkC9Z+-EP+rBV^%^ldoWcPqda#e ze|p0aa#3DEc)b{&a$ogK|CG05^VXs|klmVV_=WZ`Pj;#SbLNTby>-qd*JwwzudgaF zk|_*jvf0cKHpMW^&hcf-#syk7gvoX5CRtwLSem2-Q)YNv0*eZ=xRvYHt;prl!-6R> zg4YjdS{yt4m~J*!G|WK0gpfgYZw`dRAQR2!dPaJ%o?!w8n}D8@xP;Dq z($^L&G#Z6qo6o zuqshQcw-yr{0P~b&w*UYC?upaAYaBw!%euLX*4`}8%mg2O$yY`=fX~g{9f~$ydjp$ zqTv?==WosrXa3&qrMD!n0+w@?hk|7_yuSoty(TP`bK;LTK5 zMt0@AZv&t11KK`^IFHyy?1EJbc;;Dk0X13{5pOll*oA7^|64hrSQcv$EQ2}3*`>pX zX>d6eG_+j7Zg94Wx)JB?)54m@vLy}bTjZmkNfd{(!H+*0ZA0zRM<24Y!^OmBJ{oD8 zDYHNRRk!S`A9u?>`!A8U_OSEWNPD%r-}wSAiamO!sCn?UMQHcU>dkjMf3gb!C?1-hz z_*!9mF$a_$Yke6F{!t1-ti+=)-hT3Ss_DFRxAPMDQ}pER&Jy$`^rcgGQWxA#wDvuo zq#mON015)-Aab1DK<~6)`;LAlRD0r%gd^?SxURQW>s`0;xoKeEc`H|R_4IVDSoyV; z%S+werR6KHO5B;GChOH%wE(Ero5`N8<&!hjzBakMtH*t={{b0-hqr0~J$oDPqA=sC zc}iABbEyzkSiSTt_C>Y)m9PXxUD1?d?d>u0uMie&ZOTsDD_g%Q&9*i2HqHKua~lTH zAqXkHJ?6Mg5HxANq1nH~WxqpxIC8%85RM*#%5Ib9S3FOw>2ZCW`X)6-7(_eBfrS2+ zk#k2g_ZANwceHb^w$s4O37a=ZMh187{p;RcgJ%G0(OF~d0?q4uI`@MgaJr9s{dEpa zU2#?m3|#T{S^ApbV}I~0=hN9g{fTv-`6=r2RL!+>UygVDJ!XmpYj3kA4nk`o-!kWV z0#})BZ3bJeFxRMaGdosqdAq8IOpsHa-kz9+Ptcjkx+-#`TqnokO3Rm`uM6!&oQboTRPPNa?4)*v|O%+7iFK{}aG=sIynC{aR zUJaO$e$nR>`wc~U(sgk(esI~Y?fpYT{o8lFhJm2n!KxCQ)6IHqy>|l)T(EsLqDWri zn5{%>oqm&g8Tdnp7;5=MVM(3^LdNE?YFnQ}!ax)_U;`kwQm!GzwnoST<#Opl4&>i7 zOI{)TnxmNqI*`OY^<7p**#{Y#`_*2v--KQQGGa~~qe)2@ko6r- z*JYGDC5VzIvtfUg{oRcM+H;>IxYbI5qkNIof;z z5u>9CRPS+`pSz`Z69qZs=xB5FiBU9qnn26Z<__leJl+;liqOg&GFHh0$>ro|e^b zqCP+!c6~B;6Z?r1kcqik#rD+OM#g1=o*RZM+QNEt&7-c)%X%Ul7Q-^O>lkKZl9w-J zC|jFeYMENqtm2=UnY}-#Qw=I-V67AMfMMtj)-d*30bLAhrY5uimk+?ZlKSUd9Afkzsa>2q2 zD21dMPW1T`8c!w@7uC^1@_ee3I-jE4h?L<@Nh+R7bTijxJ4+Q+jK-s)KU0bobdC2( zyk;&c)`UnRBKRvCGFO*CmwzUd?V-?3+tFZ$p(e~w$mjFPpuPD;IdACA52Lmn&ZQ0L z{LHPqy?$5k@DnNG9N>9a{8GqtiR>LAnb`@wg1taVJir-1Z&1Ina#Vsv2?Gjot>x1L zdS-$|YmH1qRU?_UOhi#48T5bjY%3l1`@@-U#*zw2`ARaYw8xvj^pj%6h&5j_qq<0! z_0V$FRG4URuNhP+O!BzZ{%E1I5Y@D3TSp=4C*5SsuerH?^0*d?i5<7+tgg)NlASWr zxd4h>a*Gy>NOoK?WL?lwofyBwmTl!2L4%yCfLuBN^nHw2M64mU6GS6r*{NF9#gKX< zgUo3Kuz@YUn(L=jZ`824n$xD0_Iv?BAyutqu&A0VaCp7XcuHfdUS>u(gYj{Y6tJA9 zU*@P^yg+lmNB?T6&F`z$SI@r#?N==;TFp8a|8F%zmb2A}?I@$IKk}Kvj`fLS|Co2l ziHqmWyZFQ<^D4DX7jCTAH(t1@_WoG#J>lr8SjgF4(t<&aeDI;q)e&uL_i^<53XPYV zbFsjlp*i&7y7Ox7rurkvTb6e2-@W+iMT@S!{i?-_uUb5~eQfN?)U z{=)UWFB4m_^%AQy8P_(cgGl9irq=2WWTt9Z`6(eRZg_5k*k7H?VKXnb`FyLJX*k+!Eng0MG9>TdgcwbWoNCA5zoH^ znJqJ0%K;;X8da`ZYk6i(S39T;|xS zHCx1If7-amIehNqi7iGll;cSXQ52}2f&}7#5t&+l?ty22I(WD9NI?HDJq^T9zTV~q zfnW3iw$s3AAH&^V#W_3PB`KOd?YqjXfwjhB&L|*QHEB*j>{<5i0{JO&O)&iC7eh9= zwz*r+4rl455Cl+?Tq6q2GWo$|t|>weT;$)g34)%P6A`q_q zF~psMjDm6*&q`V=fh6*#JUVClt|Kcha(;T*t{rnmr8m`!zjzcw@|)Vl&XsRUqjPrb zK00|Z`r=IaF*kG9Wy>#igg2$R0A4H+@ zt(_=*rb5FCuDjWR<%SgYfIWyhqc}rzdm_plldqqR82RUS5 zUx-@1p<$mfkOnl1!&qUb$Zsbzg-C+4O_`5J3YnzyZM3SsF%sEWN2{8@w)C;A^J_#5 z<@z;*(65|dXUB94A+0|*got65SNs;T{0h%ej}4Z~gQw<^|C39^)2F_TI60B)93xlV zkd6W7etKR+C%0)Wr{Mak&$!C~wFFJ7 zTA70^n_}H(cowL71C&ARp^ld__eZ~A1qXGM>)E{PruRJjz&#J&bj$8- z+w#wn`BNnU1+ZA<_RvPd0s#u&SQ)%W3QiS!#-vY9B7iR1-QkKNWycaD-}PoGa&G& zkcwIw_O?(hnKu!Vt4o`-}5b zK|;I`*mZBQKDG7=o3prb&6`lp1H0+bBH0AHIc_UmN z*tBv$j}*HQq8L%JG_74^=&oW!A6U6*pd2`A%Cr_dk$4II9)cZj|rFJ!6r&Pu1 z`PiJ6PT|^v|LEFJ77}ZTb>5D)cPy~wTZ(sCpe^14fP8oRB|)|vx?o;3*Rjcty9b@T z(-!zVl#AY$ccucL$)G;;DeQ~>DHYITTXf^P0>ub|8rj*=u`{9y0z-A|SP_y{T~-iM zB}2J`3yQah49B$Mk{AS-0k{>ThfPJoT}q0H%2r=JO4Fe9w*93YbX}TGjFxqtqD5bt z+?A09n*OZJ@JIQWEI@oji29s+cm@(N;fNRWM?GH$cYGz#z;hto4Ffe=i{;;3Ei=P- z8Z$!cAWEBdtvX|5EX;7GPDGiR8Ohd$9EEhfS<@4K=cy=`}Z$|cALq6>KI);H-6PRy@R2&_gicfWX(zyhp&WF)0=YO(eD!#holjlPkE=ZD{IDWXZ^I^z4%WkO=6-+hb zq^Zr?c|zWfX}#w8USv`&Ukt-CUAK%Xb(fKk`ujUiJ>A{k*G*)>F)Jv|8A44ZV|eSqt^C%k$ofAhsoJQFo+zbJ}Ifbv5} zj@Mf!!o4@Ay#7$D-)CFhK`@2;3+v8})aP^^Iy8<;VO>0aT-1X;=npz?jmx#}Tm?X1 z9tSSBAJg~}i4T8bPhu*D^tgKztAJ(CIOxy~4y(y{d`Ns&6rbJGxO#1RCac;Rt87Nc z9z(WDDm2ID8zbHUE%H8DlUPdB!r5p%tJ7biNjX5%=cz33OPFEjnvnk|&eLY4GiK(x zL+BGqq$}~j2j%vdvlSmaz&~`KYwT6`^bBqOPg&-C(P)J82_!zjM^P;K4ZmUXSJP_L z3Z;U6R&x@3NYZF>jm$C+Kf9BC$Dr zKxO7M%PbEV?w`QS3=INwq-M*`_N-c&GdD6=>f_Cjq^g!me!e*Ykt&fdL%P|xOi~o- zGQ2na4iH*0c5n>n)}gVnLu2lt=e_Hy)pgmmxE2o1cl%T?SEa{r)<>!1cjEXF>`HTL zp`?<>J^z+Zc+p3^XtdSk4F|{2=d0_zL(}W4KlMsg(d%ART^aIc)LtqND{`DzLu>)s zl*U7Wb?g+DnMP2{MxCmqD$~9oc;Uu8KSRw8XKK#uQRZsikmIqzqzBDx3Ny*7^u1_z z6jh{ZGE$1b1v$<$Xv|AE^S!vQYkBE=GgTB_kLr5!SGt0}2C(AHS9G$|%Y7ghhyJ$3 za*?h^DV&Sl2=xzo&2Z%Wq_n&%o{N;~rO0=ThymB{58^&>(EKmlLsa+Z=GR@{itCBn zu+O4D;Unlla#=b9}inQ{RI#HdKW%*T`3viMiwt6=uWa{z{eW?HLyN~>s^+jT(!oY&D z{<(94#_D;AE<-cqSkkhae<=7xSuUAgr88NfMGJ$x&WQ{wg=!-;pE|H;(SX_?2#dTl zxOJ#*g?h4nPT&kV1vhxZkTX6#5)MSC&l5ckG!vhr%(^ygg$7PgVrp6=$K(o()=p|8 zOpSW1xOmgn^=U~=Z`!_PX(@|7gdT9tW1RcZ4s^bAZ+de1qP`T>(foV&=C#X*+c}ct z+J~2~-P}!z%;Y44<~Uz=ihR1%KX*Jg%TCY@E9EfuzG2ShR5PdHTvBY#SoB&nLP3pb z>e2F1oppe2wi6#rJA!%7fs_M%df0@SfI@Qk!wt4;;{u7w)%1rEdA#|8hwWq<0y}NX zeDei-kc~|9G9)9VH!s7xXqVwUT;k?=wId}buFB2}K0so@Hhtq)m(CNSA(;-F7v8(k z{`+ILws2}&WX>lxYW5Uv^daw73EW}A?Qjub#gEkwN~|1KE?j?dy>P2$qYiwV+P2ZLg|>DsG27>N%>7;m-kCHw+w(|N zXuKht#wT;IHdumj%GX*WTq}5 zu}u&T`vPi^l#b=zi*26oJ&0=@AR`ClR8T(fUVq4W+SzmDlSfcP3m%$ymoFWZr)VK! zYUHBkR|3JXAe``7Y2Teo_6F0TCl2BAi!Opbe21P0Y3S&hE3WX~=X2B!YB>=kJ`B3Z zTOC+E-&NLP(j4GNnsfIcJVy|`MdNN1maQ|+SFTE%ZyiQ*9obx>Q}w=g;W9jH76!f( zJlnYo8ds(bjV1J3NvWK>eN|aCl{x#a**}6*a*n3-X03qK8Pffg@$v$t7PJLXG84mt zyueEwCHrWBr)5hLYJD*iaVn?M7f~_?>PE~^Ox1{6(48K$Aq<2WhG9jYmiLjeNDB(` zr6Zb1qBe4wDpt;|lvhq0c*;|4Dq>O(q5Bj!<-S0waB_mddE#$2~w(GA}gQB|Y?C7^qdt^_3BM~BkM zuGFHXqMt;vFmG<};$kRY^7L&r!y4;zZoR;wE)@{!2WUAyvVUJLN$!@gDv zv<4a%i(wC+<~&r&(V|3FH^Zw&(p-I>Am)!Q4fNApo890`)4xyTYO$U7h!xds1D4J zLo7Aad{?X|1{ZnMje`lR`7SGwu*joU!l`M}V6n<2R_UDm6>D5hQRXFY$+ zWArBaGD-ZwPCkFT#5o6eN#fD%oOJuc52IYtZvNa(I#1fkq)i^MlCto7zuiCwlJ;vK z%W;y#<#_su>f*4kC@4v@9P8Ejl)Gj5@GtntjrGtYv7 zC6!#Ij-?|ISEfZf+jCAZteG5rR?dhgW}jUL@Pm9+2`6}7H@L*a!foem-Zp<(BovM; z8<<%7k%fzUhl;8g3)i!mC?ZoUqk)Tf$}%e1Vv#ep4{cbxar69nHvEkZOitWCG8T8b zQzcZI3%{h~_gjAdkz@&yr4&x7>cuHH1!YKu!r#v>ME<7{iO7h)xwo64^MxhL_wCxf zZ~0I%ffC7)@rz5DNH7LEoi7%wlGOH8$cpNA!J2z`JP4xC`25WqHf&ljl1^uGuuiJBEmcG?#bO+ z!JUw#JB=Vwwx-3*)c#36KHryg=WkYpI+~Rz&#Fy5f-c>*<99o@U5evZAnxatWbY-; zvzPQH6`pJC*!|btI~v?OW;TnEiF({jUP)D_EAZt1H9I*|pL`xUG^EGfa1Lg^mw8-5$Fzi8(msLR18@*MIOaWXUvG{rBDt^MzWQ*m~k)582$ju zP>iLhZ3FF^V$u}DnE~^N8FTNV=&BgkqV4VIli9tA-Z+}+xmrN*V3*pu#d+=9``i7h zNs}}W?eBxS@GvK}Kz4ZXaQ1t%N{m>{n9k4aF=I#&b$A9 z6c@O|=ayS_-tgj`t*S3Qe!pqn_w^fIe`L>|M_$KxjD2EX2ARZk z_tOW71)#a_Cys#T`d;@tR`uzl5cVt>O*`?WW}Nw2yu9&tUXBkcVnMpKft+f^t{6S5 z&)h6HH4A2D-}l8)Rnye719WIA5Yrq-iv^}K`1DhTybi|$v9?h2ns9-lPn~KD;W~)K zb;5<_hrPy1Ab@Vep@P%SE$@_zlF$a)UKzkqfb2=)lB5@=`xB0s8Awv;z9jlP1kKxm zZP_R~JUTbnmc+d!y)YMXmUtap>2-Hjr>$?=03Sa^K8LNkn1qmkW_g7)ZH06VbD4&X zeUL}U5~2=tt=xZbM=pQP{5+~mv`e ziZHx!$GP2zc=p-TMCY*o=~TVy%KJ6V}Sx`3!0;_L>gB~~YzA3~pc18s6X^sI9a z)&7^nU(g}Q-F=#HR)JWz3+?z3QXzL*zIzJrs771{xbtP`4_Hisbid>jC-Ip>s(!|n zfj=tde%Z<0pdh`EMtP!eH|c&bs)UayzU@O&Wa}GJ-Pi|y`omEM+nDWU>>{Tpp1tJ= zODCE!CB3BtE#^5EF&wROf@Ev>qzB_uRE1(#BWM6UQ#e&&8Iqz{&6WgEMSyLv952eU z_zo>WS^4Kpd1|`pr(=~^tTKQD^wn!(x|1`a$5adChk)NS{a30IdS3KjgJBead~%GY zeY~PVrzG@d$pWYFEX}b3ehvZ4$1J08f^5NaknjMi0?G)@8X<$7ZaMQD3Qw`0>rBLHPMhx+@;P3;kS_ zB+<#{YqdQ3IhL56YzF&&_d)terxEU6j5E=fc~Rv5Fh?W7^>Hk%X~LZJ!gndaSQF6Q^gawb)dc1KQq zf7h<3cI_f&_Faxq$K3nDy)<3J_6iOA8oJH|Nv%d*<@|c|8e@?X_mqsDcwYsSPFf%WE9ULT{Yny+)wp+ANqs0 zs(GRYYWao~THf0Q%-&!UEAHw{a}=@Q@J*L3@V@FfdT^0i+A^YSJbu^l4a&%tE@jcd z(Hb^GH@`PJik=u9{g@usvqD4{Hws~KgNOnV0lheWc)^0h+>(5PGBOpT6?>S)4MzdxT9^sul|#J%Xiz=YGMPv1^c)B(^^_7iszA13Z6 zK1O_k_%!iZ>??0t2IrnQ?S^${TY!leXqof#1wc*L;8WmO_mhz|(6wtVFV=da;OU>( zx6ZY8Sa!oRp#gw((!y+;K9!j^*m=rL6*P!K3h$ezY{24CKe(U~F zsy6day^>yc5Hv-P6BpT?)q>M7j-bECdM}-{XIkCBO zx%-Fy4%qzo^zQ>AE&CLSvV$@$8ERAvsk9gs=`{X)RN4jAkQh}BiI#&FEwYlVAd$9% z5-plaL<%Xi7!l|+K980HP^6WR6bWb|Ed}j`vGPDU8igQ6?(|!>cIwvwTMw(cT1ioy zqEXpgX;rc+qfa;+74(e|FFTEic@sm+ox9xVY~4Kq_}&XNh;WaEV=tWg*(OzNJ=L*3 zH2YjUEM=~N>;?xck(%^d%``gcw=BPN5Pz_hd?C?gy=#>{YB}p@Y9GTWhWIASpoc8v zXm^aDj#Zb>TQ#;C?SclkkS|zCt1Hn=yPtZ!#BZU0U1i(OdWL;dG*p`22h8B(_8e!< z$nB_O_2u(ckFD}}>2c~msVhJti@|y&&{>YtEr)7ACnm>eOs?f`?d}eoal%GF(u+E} z#g7!4x$GDUi#c~&Uw#0hmQJ1;lv4EjHiX;&R_AFb0i-Z(lF%zH|_V`EdT%jc${Nk zWME(bV&=ME@$vjNUm3Vr7(n1bf>=0={{QQLH3tK8E0D{Oj*Z*G}3=BXK6c7ghp)m%;c${NlU|?XuivRyd;oBhbIndNHVo{G5 zL)9`8p#~l6Vi7|!hcy(tJ`QFA=2D1R*wL47v?m4jvAC4&V=B z5F`+G5gZZR5>OKu6F3uu6XX;=6zmmH6@nG|7P1#A7rq!m7~mNU8CV&@8VDL_8rmCN z8~hw39IPEY9dsSO9!ehOABrFlAmkw+A=)BBBOD`qBbp=fBt|51B~&H?Cgvw*C@Lso zD2geLDflWdDp)GWE6^-3EQ$aCc${NkWME*3WAtX=WdH#tAm#!>28RD&J_7(6%mK~- zc$|fiJ#NB45QU$?kOY({N~APtRw*bF$^4W^sZgM&pa-+&N4D2mFG$omO^%Qg4xWF-tc7=B54ZRbuHXir!d2>D!an(1xP}M(2-m6q3O6wEu7#UudEvn7 zsnc^c+o@G((#WLlc#idA6Ho1_Jkd5^nN)Ry&QTiaRNG^le7op57pcgaL=AbXTV4*REW1K@_h8^PyAq-MPMRaHRnC=BOh*@d>bx-KF$f+N4 zg)Rbg&Riq9(!zNrr)dD{jl0gfx^|%}HXi;txFBt*M0611yWG41Kh@q7#2m z%#i#6*pqKpc${rgSDPCt5L9`X(Ma|>hdbw-*WtY9oO8}OtUm^NM_3GCU{=!pdL!+t zd1z?5y1OX4v!=7U`klY8MXW&vh8zXDDA7Y7Yq1VaRz5`4(IV7E?@!w<03BMGOpk%uHiav z;3jV2Htygq?%_Tj;2|F2F`nQlp5ZxO;3Zz+HQwMY-r+qy;3GcaGrr&}zTrE5U=cq% z{pgA2Bd;_StbjH3{Xk<+2!&8Y@$TNr=>BBdXZ6 z5^F;OM{9Mqq8!u843i0QPMJvF@Tjcey42j%Ew3q8M$))cZdnBtL*7_JlWs#HOoQ6i z%CIRX){tql^t&}3L*8%-5`}LR-=VAi4bK@ zF6Ex23M{A;H9;usnsc2Kswq6kPR#O=U);VSBJPeiA zg=w3Le9q?=&MoBBaHYF6=1ppwllRu=G!~?LBwI04p`;1TTSq2KhoV+-&{lcfDoNei zn!4sTSHha}{iRmxAd7TDkP-| zm~3X9tE`8^l&M|f&| zz1~BTq6yD`_u74J{-k!R)dL<126c_sY{B>V41wD^#1ugp3d&O0DmV~OK~b3^3Wx*8 z4ix9WQ8{L5|7vSmeM74stz~0d*%<3fZH@mVs2}_76Fh4oBtjz+BA+CpokOgfPG<;_ zlxRfl3<0odL+#6E4@;21P(Tj-cYG()*76nrlw<^8%#aw3-)-XY$2?|8QP-nsrWD^DhH z*>}!lQdxOYgL1_^f?UBCu6lox-{f~DlP1WO*1?OmP-Imi|Ias7ec!3L+-2A`EJ>fT z{PY2fdF(l=yI-jL!MrAfWCpoXudQ zHW46KX4aGeB3tIZz*&}+!u**4rnfvI5V=UWSF6kGzb5F}#sGe!11!aALc9%TYR@3S+gI_!XLvMoY3<@sLBo&z@?sJ!vX z3>fmji^>KbAP|ytT!9qfh{wB_lL1X*D|q`$_V4%q1-#hP#yX#*Szbi`tGa2sei)~D zS+_lQc5!uc_we-c_VM-OS4b5KC@3l^tEj4}YiMd|>*(s~8yFfHo0yuJTL=nST3HL* z*oxTMJ2;ApiAzXINz2H}F)#|i;xr8ZmFIuR#>O5&@tAD!gl6C=+2I-4<2gCt1tIW~ z9Px^r@S2c#LnxdeG~N;h@5mYN$ps$>i;slECvwGSa>ExQ;42aFjY#-TWc(m^{3H+j zA}W3p9hZoK%f!SLV&N*Wag982oxE^^ym6DbxJ5p=O}@B8ez;5ixJNwPrvN-4J|0pa z9#IhHDHsDJ!UBo0NFi9FP%M)KD-?!R3db5nV4bAcAQ?7Efh|&En^f4LNbHgt`zQ+g zNrM9vje`_}L!`rDip3E!;3&o67{%i_C8WbQO9U7sBZepmCn*`HCRAG?^MC6qXkK1R|jdM#vO*mFj*tpqg38bUA40P$+wfSXNHT zA2x+)2s=gSLnoP2L=0>bXbU8-4H5*h6j*D;eBR);i0DVD{K=*hJpzK!L<9{xEz#Q< zqCqcMS%r%%P%uaoPpB9NpqwFS&1SrYv`rI2 zA+Az+oG~uqg)iHT#$w09HSfI zTxE8XO=MFdgZ;T+P+>OUlqi-BA|S+dQTqI;4B4$@^g$5**C`!8$bMvRN(gA=(VQEM zM#Isw=Q?N-6=mFT7Xf^~N{HDa$r}LZi<$t@cjX7>=_P}P5f!e>IM<~d4WnKt5{+o+L!t;EK%5+?8JXTnZmj37dq7`B>z3(in$fgyJ6mjn zqcEYkE~<6?W1bvJo&+Yygwvz6s>&N&Lw}~@WxU7F(B~vUpdpCWjejbBf$&|Z3tAQA z;@o6LBDT<kZ6`aQ2ztpr#rs;6#Nxe=pbYM~7? z>$I-~O{5vq`NBw+km+=IbEDJhQHx|t%P-ZzQ*1`QwY)(-s3YZ`(3_!#|c6kqJ0OB5{c@*7vz3aSA zRQsYW`r$`HiiS%wBEJm8x0Q;*u|1?)fvtIf59dBmYq zxf%-4;d}`y$e}VhSI7^6hvfzBajujdsD zTc?04vUK_7vOv?03e^YsUOj|-lyauLTu&{WbYj1m@|D(%jR-2F))IvXiP+Idw~Z`3 z|ClwDK|ZzAOVR#0?tJu8{nlfi z>N(%g%XiI~Q4HPN{&T#+AfLAAQP9 za6h;-9z7v>HOYqkMr?8kbA4=lzUEb4Xl!|U>fZdFbKTYCYFNPHZl;JiJyxoeXgpHr zwGj|?(Ir?eW2oseufo}}ZNJoRWk{lsXuNc8_*(hC3G82|R_;Eq&6m$t6(3xEw0JYF zS_cRKhTT&OEKBODi_J%?$D72+WJbK8A9%1BrO+agPV{0&bkpUi!J?996JS%ICp3a` znjvAg@NMy8*5)1-+P#&`Myj+EbKF9j07464!nJ|d7ArNw4e_1vz{X-Fybi8+#N;LsiEg~asMx;;=xR^?k*z#%&ol;Qmd%Wi~;~ThY=6erWt(+%e9!2caRGgfX75 zJ@;GDsp>YghEX6SG%WxG{$!W8lU?O@>|>>NCU=Y=iR3928{jM_>VJNt%C9S`tb)8$ z853lxP0f&@@P*6<$ch><@KciXB&CEX23GJC+2zmGE(s?Wmi}bt zU)sJXy z@DJKzD`=n5q}{=bV>jD;T|=FG-*V933^@!Hza*A8+C7U;L{;&6edERY&&$mYT9Yo- zf4-wmB?e*QDlu-*A5O^jak{}3mj5j|hIcVN`4VOkBUFg6{#H+XNUUEVPWcoC0WM?Y)Vfz?7Mmok{K@ar9^oLJls<;PAy#YX_H^t2-lyT8F>5Txs~i(UPuKr?g?a zwEi7q5aWaXoKBG_L9C@U|F*7&L)R&YXdkb^gqea=z+C1M-R@*z(1UBlg z%MX?QpS^ab_QIV+L(me!Y9)W>U~a;%(FG9pNV$r@_+Tb9PtJtv{<_) zCJwTCyPW-vfqQcLTNo_sGiQ|#hP^b)RG__-y$ zR|`mxtTK~oNK<H^s@gJ4r3Ckf8QUP0I{huIOf)y!tFMbAV- z%z8spSyAAqjif#!HBwpz_S#B%v}`7ai%VP%i;1DaZw4A7wyS?$7^bE;%3NUC!6Vj} z@0Td`Rls-Eu4Sw6)u|Z(KMzCdwocCX%tNU}SlRU0*@7a?-g9Oz*ze+kUj${jQaH;s zxWqIs6*ycRzMdgadYl*pWXRrYa5HTce3ugg9}cU1qZ&j5ZV>>tFi)e(QK!eiaVIMq z##U`wpQ*18KWu2QkIfavg^o*;k;(b_%!*98n1!j-=BHx=fq_zU96Dbw<^|SZ@re^^ z=acRZK*jN1i^J0VpJ00vB%Vm6Tpt z<(E61_Z))<(cD2d@yh+K-CSPMIbvRh|ude%{jmW_hOp^foIy62iS_98ZFLo zv3NyD@Q(ux5X}WR^@o62zE4^Pwt8LrsM#FX`eSlDg53Eh= z58KVhLvP`EK&c;g0Mwj^CtVe!ls!b?Bx|%*9|lp@u!Ys3zCv|D$aC92m*9Yr`0*!7 z0T}1ZCOhVy9G^Q_FU)oD9%!o<=6n7s*RwAS+i(wdv=4M?k~cVG<7AJew3T`M90e~L9~0Tifxq;q!BOCB?MG~WZton6>GzkLzZ0DK{R=FgGW`G|3bmjc z!MVE(FDBhTd)PA*wVr7tac=lQn_JDec5VssX!rJ$H^-!kpGS+lW>sJJO)e#Qvl$=s zo$b$W^D35CVgsR-t7iMJ9woHxY_8)4zQoif)$nvrxj;!|qDWn*6u{Dp zs}Ij)gZfM5`<&l*V$*kv%(&b~FT1|$HDv+J9k(MlSv<4&%7#Rvd2UD(Xgb_dg(3F! zuMhwH$uMPN?iWJnX;sMyqeQB3#&|{YYSE--D1o5V1S$mElq-V*Sska2PGc)U65{2!~mP1m3(L)3PXj?jHr%?Ik;+=13B*0R#*1STa51h`?cklMb~{g}8wIAgBx- zYoQ8NQC7te^Z}WwdsxY)2(IbnBBS^#9)GNSN3OicoPui(H$=a2izj?ro}t~UmjK(` zbYg3HVO)V8SSdAcpt2o9F*B^2+U&*$+nV>Vg(fU`bBQpCM)tvVs4~E~n(#$U9XQSje07#3)&F<=Um2&!N9%Tqp=(VK9Vs*$Ar4G5Y z@(aYg&~EbHgemH}Nl|_Yhz%$&S>f$j_uBSZL)+B$ZUt(;ObTHjV(oG%SEl~TT|APR zNjY6fD!35Xa%hg%BtLzs|#rnnyyWo26NbtXKR2kaQgP=(!FK9o{yX$XcO}Fg3&2IsMW=`Yj;|nnFiF=Ot~H z%d6++@J>4lmhSbnKrKeiKB{47cI&)lmhZ!k$S99TODi7q7BZVAHpY`W0v`kHLb_g0 z5h@5K6GOYA&cvs8a$~L8#Y3TQQQM0}5@?i&QPV}W{@0&7=eBaCmItwY%S1awsX$|h z+7`*I7(k3~xY{?}S>NaCw4avh{+5r6A2J#e4XZBfP*Otx3Yx>oVQ;_YNR+eHgPVsP)3ybU39Q9Ko+|h&5c`_kMtVy} zo!vWjA69acoTFOfniqA}c?PCXha`(t0i#7Gt|xlmqjrBa+@JepU?eAXtDhr61k))M zS2tHRj}V~%nP*SgEW&J&F^tC#mfab~TYDVc4b-t^#V|@W2T&D>8w)Kc$U@3>YF7$? zsz}}byk@KB#lOMg;t%tF)R|WUCl)@QB|A$;2j_jWp>irt-Bn3y@%LU8SE@4HH z20ArwKLc7yK-X&^9_!i$kA-NOIt2L$>tsuP4d8{R{QPw1+%k=gmcX?Yz@KpY@>h_W z4ZBa>VTYpN35-dTfV!R2=g%F6V+*Oc)oRkrW8&*3$`}Ew4Pa8h7F>8kj~B{4wtdht zDq3ODEcDTwnt^f;a8yGN{t?!A$VT0C9xmaYLgGatOJ!ESR!7WQu?L7PcEyK*rHkO9 zooC}gSM0H16oqb1N|<@gVlunAG&0rb!_1kjj6WD(puyB+w_sCJ5g0Zf?>`6mWR=f8 z-YV{}a0&P=(Jt zS98m3cltrPJ4tR{Z9e4?U>O z4OTDW3SbMBwshEZGck@#3)3qVq%6ojApBU$J9LmZ=yDKwDVY<1Grlx1r{p3BS9Qms zk2;I|fIN%Z=WwSA$GQ0LJOia5V$EhAwinZf>BaKCInjx9r*HMl<}dc!?249(H4hPQ z{V*Glw<6J;;?!v*x+Kbl0!Bh+`PZjp+)AVjHuunQVG{{Wg+>q!;6ZgA2^e7W4+$%{eAVByx2Iu02_omXCOkC z?h`0B3BpoUi0QvN6h17K7mVN&8SUlchaQ-pBwrM6<~RiUrpHBuAf$$Z`cNPR6Y4|D z=c{6kYPynUs2?y`{bJM%BiZ|Qo`8}t_JO^u0BI##kuHlV%MSd78s02W&KptsjW?c~ zHpTIj0qR6;x;To*Drt^*e`>?!cr3MmEX2eb+EuJbwvmcZrFyQAUHpK3&4&3WV-=ex zuo^ZD@3Pc$DNwXtq&|eYe2*f+2GYLFn0w)1*Db}XuB{iA&G?cw`tSeX z?p~R+0wyPFU{L5o8rn_ihM_%Z!44WCOwlZr?!9{_tUp%EvV#Xv$+(nJ6B2Q$W52+i zebO-pIXv|{_khF4Ai0E?L&WA#E;V*cPvwT1#Mj`gVv{KZ?Bf`s4E-bVBX=g4kyyi= zXIXmX?K35D#b{74jldg_(f2 z{($RN+L!FHXYA7<)u;)0+jsZ{`1e8h1nLu@-RF;Zr+zY>!pYWK>;MH;KqmR#!Rw zh~Byy{~`aHc97n@C_!`zmciSW4z23?(0VM*_ArlzO%X)%qKw{2Tp;4jAdxI2E-B9$ z$yn@@BrtWtC*WN8B%B0)V71+c{|kj3aL9WY;;pZh=P-g%0Ech!#10&QI>i;Z1wQ&F z9yS826_r;$47P`Y25 zI^0X^q1B>v9y+bFmZFtGv^G{p(Z!@v&UrXBP`^pOQ9YT*ek#6`Z{Y*+X!DAd7tO^t zt{0oP)MToYCsa!6R?~%>W-$O)DV|G0mc){XaJ1;M{VIn+hn4o1VSO_Zd}V~}v)7W) z?%3|oCE-AH#eP1_N3**U;j_Y4g;&8mL$*5%{2C58tOCo_zWJpWD2|F5w3ObI9=GaG zSBEWs7rG-LqFeZ{7zAYo4y(>ogd~#DI{b*k4s>yjU;n7&n|0aW0LWclEZ5mPBo&X( zUbXM+$^|X04Bm_5`7yO_tgD$d*JSD)x>Yv{JhRy8^XI3tvpmO1M9#-&r+a3N2V4yJ zBjv740qB(MxbThf54fGv^dTZ0(1}BI$#LQ`90qVtMLh#E9kE6R+&(2JJ)T8~e8}IJ zvc;K9(LkItY<=7*Ff0smaLizvSiN~cDeN;zN!#p)3`D~aemE*=FupIF<&qTl5VO?c zE0-6LBYrcVntrd_I$uiIR@he%^xJ~=wN&XtzxV?YicRj|&V z40HOibZoz2_TmD=!JfH?4C5sFEi)VhM|(G=LODgp~+Y}?v%}LmD#d!{Ps<0dz7Uk}A(hiMoD?{i?fkr;K!? zPph@5!P_%qE%QoK_oR6Rl8V#sU~qPR2#9y%73p7r{&*(qu&+k*hZDZu?r!blilwQR z{Bceq`S$hd)UB3`VNwCnaewW{(a5lZ zt$Ti6T9psyx&76LS0Nmg&riY6tzHE8U=V$kWR-$V-J{CPt?V|%HaA#0TwHwMN=H60 z7ZH*Y6O$Mi1}z(tEE0rX{umKw6lww@le|+n<4j`o=0^%N#yBZS?+SC(k!F!}^epvv ze#MEE*)^hhwIW5f7-UaxN2NJ5DHzubNCx_RR@fETevy0`ZE{-SBN-_1T4&MXJH`4Y z+XB0iTjI0AscCdm=+6l9XS`809$CCdiBmstr5^ZLbyH(fmMsm0%igi;^@cD@;pqpK zqQUi`s4l;-uuk!pFu^Er1R^LfI`=SooH;GSEgT6dbH2{1VFH=rT5%?wxGr)Xk)FjIvDk#j_VNtND;ps;iJg1;IZn?SIxw0gIw$8I5R_vX z<3xIUsW>kc7;*=d2Vq#d>ZO$eTq+Gyi3x z>1;Yh#Gufl>qXgt!RbNKnwX}KGUigsAJ>31(LurKS%EI*=-O!TpU@+kIGYsh5y@1c z7PkGYo6gB~npnC*K{dL0wK}Stu87rG-(i&HXVpRqLlrM;#$Lh)?&?p{+pgm0hKeLY zOG;=Umf0ZJ#ECN}1_TgEALzcIN9WP<(E4{tG-Jmxj0BapSb3$4o|$|2aZlI#-21Mc zZNff|o51z3pTHZqN$nMwhIQ2q=EVO8pGrtd$j8|!jF`)A2s@QNpZ_<12OQ>hHJUy2 z-=65H{1Fxk3>{(w0riXGNCpNH^0Bc|XdA?K{DnA+_~jVsh=ku<$BM(GscYkB+Bs=0gF83A90Ujm zW^bKPo#&*rn`x?5r(tO8e_y}2RBi4q-G%PzJMO6?{}Yy9Er16k1;F{=T1YMMIYWDgN)Aiw zV@YyLgnKJV->{aBN^P9+nbzdqM1DjUGAVDZ^W^mb^>q>MXTx+WCfs~?iky}R|MIO` z0i+PJlX=_v$UkGIb{`99+^E_cbFdm&fNVds&S8_Ph<9xF)SofyRoiM%D5u=5n6aXb z%6-~~Q$DKg5XjY0#5=lY>aUn}q%RKn`%-=TmfvWP+GASxHzW01FYJYEBv064R2aB%m)?!k!5 zyD23rN+^T30l$CN2t;WiD6I!N9RJ;A4c^Y#^T;(fU$I)q zb?1+nz^c<(L)S=R_&t{~xETBYaKag+fUK~33!abHh2)7%CQ)waB#GvTO`&-cp`Ht| zY7}lV*9H}8KiUYegC}Ig>4B+2K}ulyO(WJw6{ZK?gq|W4(%*s-vri(##s)TwT#N<0 zY|t>H?Wuc?L^-t1`;pyd^ZER;qKTLQ&?(}I3KmJX>8?)u7$N~G~4hMAZ5&`KbJ91<==;@6VNIi6c z8Q*Q_f8XyrB}{Jxv|I?1L8d!FUv=#+JiU1L>y8&4yB8NhiVJtIP}+6!?6_mIN6B4? zzpR3&y@fm)4mrLJbt>-osn@73)N5Go0Vc>nJgE7}7K%|&4{7+}o!U7&+V9-wqcnFt z6r?Q?SHdz*k+2`u!rr>vaqG8rVRO_YOt0mX{V8ZZDRpp%b{2VpC#Qi61OegHRIiPD z;Jk8Es8}%ROhPX7LJ~@x)J`RL1TPUu3XdsYb{y1P4vrfkY1W{azg|%~f|VF|u?(;5&$=uv|;`aAt)I z7@-)A4a68iLDI#gOZ-`1n3Chn80K*abAKN^0FSooC!#hYFWhVj&x@#o|I{NZD%mYR zYvFkj=J0THL>|2MCsJ2gx%10UD?Cr?9YfUrL>rnNM}ESs$=c1~mIy22rvZ&`FF>x( z3Edf*xg%s}$P%lQ#HpSkVdN;@^T3?4uL$k6b0o}kVr0t9K8A9)>wbZm}G|}z9Ojnp$Oy#s@QsEd+KkWrBI}_1o)tz zu~TdJSM1D`S{2sRiodOgvQ)FcDG8O8zilcH;)ZjqeYh>3O%)$X3`z@GyB0$WN<2jR z!picM(U@d0_$#s($$|q};*)kVQ%3X2W+ec*0~<9@eN}yB)7ds}vmz-jG>)rSxG+O> z)j3GH!XQcTE+7W`^9D|y%?!S_S+$(wLdhRWeV>t?r=M3cS27&4Zso9cURYnL zB{nAq5(7L>?1M@@qYitXUv_QZrAQlTVoVdtJ^A#5wRIy>Ew19sO;M(dj6GJ+eT zb&hIrL-KE(X^wFok*=vbaVI(Cu#@M$OBou2ab7y0LaPgI|1*8RONHgWW^T^v-*c%h zJ#~&CyTIn}G}wiu>7r*z`>TP@e#X#W@0X1ggDVUh|BQ`t`yF$~#Tf=o6_HD>So=iS zZ~^zIWAx1J-1UIWC01z+8RGG|JLGl~om*(2&#|t@C6Bu5cW#caxxDc4L#A&)0HLS0 z_{0AdR4tl$l8shaBH~dd{p`X^{Tuqjfp}FSjf+Pf5t)#eC2uWip0#=d(Hi_M$Of~$jn71u23vo6sVM-_c_OJhoW z%}Z*OP1>a*fUXx9tXj9$N5kc4Qkd0nQkb`9^)_VXWzr60rR5!eVYyWP5z^4vux=eD z%hedD<~2IX;q`X0GvcMJ9n@agvihNRP$rFN_InT96HT0vVXmpU`F>fmO*q@c86M{J zaYha9$Ow1-Fos7s+JOV{f@WU!flsb{pSfItf3KgvcauL|k&k0gm^d|LhBOLi>tTx{ z;XZkM!pWpIkw%KcQe1E#0E(t^H5`tH`-p4Ga;|bxVKZ^XJ|dO4Zw2v@WT;C`S!k+| zYlPa6m)hr`jqE(&DPFkBs#uN`TYsqxpN5|=}ZJ`MjcV> z6JfKVaOmpLUAK6i5q6kekAm_0(Sm?X;~QhmxhI-sttEt?H!cWpuIn!m_qgg+uLxV3 zvG@KsLs=KUr2mKusndO}du?Eido#!C(E!^6JKZ7E6Cvm4t_+2&rgziI_wj>awdj8+LTxkUZ)H+RceVy^yG^1pxAHsXq&wS4<)m$QNC%}Q^7ivN6E*zKZ^MOc z3)*&vcpAwdG05x%UX>&1$b*vD#PL+g-3TE1$L`Rzd3|AbmniUB_E>T^d|vOhLr-02 z0-yTs=ncP6^P34PI!cL<C6)3CtM%>vgr|)=%C_{2&p<>zdT2Z3EoH2DuWG6T< z3O?fU{x)E~dVXBNIB3HV4X0MdfY7TPxIZ@|Dk)u;ElKfm9U5>=_cBScbkRw^8UAqL zGQ&`&x0PmvYjRDdYi`-qx&G;N zK8h;E>}lxfsp%SXM%7}rwk%+33V+8~>Ghc3N6X5QwbBX_;~bz_=?6>8M}J56VEERh zNp%gw?Kd4fk3l?u^8@1J1I!6LUIHIJiF*K#2rnuOn^P1PRuthd8U7k`oyKFj693pj zaQU*7PKiX(GnEzBqMM34myH1Rlw?+jyl!se_A<{sP66#zq62ALyFhes?RhmYy)Zu# zR_tZ%u}9oT>~fO3^PR|u`?v{&7|HiYaLUeU?tMfElICt2{TRC-F~n%KlWkPonlZpq zJ4O?Z4DcN8!W`u^>3Ve33jB=OAn0}K!jJ=#SmXZ&gWocNxJ6N5H>$Sgw zv)rpm^&OjzNJ#W6zmQH zWs`2xZWDJ0Hn8l6?FV5ESFrm{?4z^QldRpgGi4kN?53hTRAa!Zb=58zR!_tAItySxx&WYL`?}K@ptdebCH^A zLRG15Np5NQ47@@mSGZ=lrgl@N%ap4OG%aoDij3*58n@8y1KE9$ZA0j(u{gV%o#S3&6H}PI`VHX zAw~45=EkqkDgw`XhyJ=z1F>%^Hlr=*PmSn(6*t-crQwFwp%$QuhwQIDDSU?OwYArg zT*qraZm+&2upiAb;ix?j{5>o%7gC=3J^}^r{Rm9S)u^-M?~H)G5aQu?g#th|yJ}J7 ziDS&q^B-W`d&E8Nn1`#MG5$Utys*`FEudTtqa3D$J*5nw9}_OB<7p(v8RsxltFH}tad>^DNZ)<>RodjjKb4e55rAaCpV zJ~6o(H>p+6a5ZCoarN;l%;zf~V#qB3|A}qUC6^bcuh=tBpQp3vEx|z=temHT%JsE( zD1-Ok6z5iubHz6gP~s2qkW*K`$|-ejl6bE@4qMh~pS2$E_;MM8}2No`>ac~QPFy#J)P?L?l`FLci} zckz8T5M0 zFd-o5@hC*(V~N!kvCHht0nu4;Fohp0%G(LAm3XGX%t7%+Kf!y@f2lLbe(;``zzL3V z$|9%8Nll&orC|R{R!(LYw_{`M0E)N*F zUaq>+*Pq^CMWu$~LsO$zH*%g|Pt>`3ag88vU90I?V42Q7!(6>+2Vuvec$;UoZAs$1 z9n0OzUkNN9%F#R01VDR@a>IkCHw5%v&5%SsrFmYTkQA1mZ6uyKsY`-3x7!aYfeBO zPAHio{7;K9>Z*x086;#zw?&=Eg<-qluXD@vCS(tRUcY+h;?nV9jg&EZtVCE zO#i2{rbgLYtJIRncS+(2rP8txbv|;AZ%tOheW&O&Yo}rv%c<6LiU(QoJ~d8r)RwYP zsWkAsh@#8Q(qKm-Y;%LN?vsY!be*7wL?P{$|_kflDL#IHshySFDKSfojtHVRpV zKQxL5f(1VcQz7n19wjQ4!y(DEb zeqDoah?#vgm34OOR_pJCSD(7D=%s^G>#Gl)j<1Jg$Cb9VobCSlIz9DY|NnaPPoT5} z0&Oj9b!gY9qeZr>*?~pN5g!-XbYK%k?bMM3cmc4F0>M*32!UNK3DfReH-ej`nA9F{ zqFBNCX}d`CP^Up@)d@*NIv#Ym-Cw>_!34oHMA3jC(5bWP$TPN>T5QR4s<6}LsD*i9 zt4hInYz<0~IBQOuf#zgkzHI|JaKA(pcpAG@WXi6y4hg}pNqCrj*keUb>@hn8LiU)K z!Yqy+Q2vpSz{rB>7Tz3zSxo#n|+TI3Q2*DT^f&a6_3)07gkZNMVMd1T4Xq7qD2 zr^H(h+l-jneCIDr7LtnHCi6AU9feT#suX8^Pm7056Bp%YEdQ7b)z6x7$42Z6fc@s3 z<_+_ce&j{l@i&oMTbhC|lc+dq{tp(-$T4#o`lK`uaTUw0+1_6#X9uMg_F$mUGIFTP zE2Z(DcH#Wb`H`KClKhdjfIRTGtbk;pO&QqHAyY&Xi_?x8fk8Fgk0<(L-4_DBwgA{` zmuYqPfo`q1mzS_lol4}DP5LJ!FR!0GHj6hP8cE)mT(W#N*&7vovt?RT()6=9n=q)7h1u9Z^qxlgZ8F9`mZno&<^h`*l0n-P7P*uz!Q^fQ@` z*mYzo!ACp7+0&Z9E}ze&+k#b}@-L*lgu326X=iofV*wJH#b!8f6w^0}f8s8Wul<2w zC>)8#;)!G`oyq3%g<`2(sn+U^W~<%l_WFb2=&vl_-RW$;SgzKat&mC^>wJ=Cc~Mq% z({}yvhnMg8ysX=PoR{i1NmJm_XpR_Lj^a+^y&akIU@H=~^+F*)`)Z`UaYAq<9r^JB zzH%Pxtr}8y!Q5wJ^{t{AC=$Cnmp*bn*}bbha5iWrV`*y=cad^v6fki1xbC=|xw6$E zNycrPP-}=MO5og^s0mNCAlVxXqU3>3e|cM_1gj|5w$N;?NFeJ>y9vcD63?Q z8hw;JF-g%CzYGe`wXb}~SV8L6ep$~1=!|f-`)a5Ys`R@KZcWnJBxLx~)S*|2*ws}^ z;T(o~;uy!=(hMEw@#E!VKq8J?Tq(6yAD}8a;OY?f@XalNfE{jll!Dw1qQ=0sws{DR zJ+=YO5J-k?IQ;dnv>2;XAos2~11AdT7tz!mW!^ceL_g6nDRQA(NBL`<$(>s1<`%{- z8)oFet;9U5w)4TAX1VSi`Z=40)b~z21}9N;=gDZMioKImBqQ72Q(Z9-(jTKoiE`U| qoDrq;PR91%lz@N%1Sv|S zMnjR%%LOS?MUY-z?)TpM{y68Xb=Is|Gkee8zcO(q#(GQ)JPZH;Fd670%qZX9{~mf; z${S}{Q%L!M{LS=k12x~T{Q`ii8U_gM2O)Nw1x)X6=mhqVe$8yOr+tlY(RE@yx(N!# zy(bK#Sv94o13%LrX1>t5WWs~5&j?)E(+Mcv+AOU4S{$dV&BS78;!^Tn=v&-W1tK;8^Q#3qBStKHnxUX=JpO<)7 zJ**uJNdb{!B?p*w35&bxT1>!C|3kEJrRJ#!@TApjEy%T9%^1e?*j;WS=gNg%ZUPfkyLjpsGOO%A~OOAuwqP?xrHS?Rn8AFJ0U z5<~@|VGeC!XY9N}RHy4-HsExDfjscYDryWkez1qVhBS9V!+E5T_w7+l!IA6JVj#6n zr*LJR)wjUsI^?!GQ5~0&TUc7xj{uw!Q>$X&bxJR;$fCKG86}bH_dorbw!ubL*l$o{7(1kgy81(KA)tH&YdjKAmMs4Hx?B+Y!_?;UpzT>HlYADS>e+hg zO{&>$;+V8my-UlGyE>2Sl@>h>bF`(G%x%Iz&e6xk9|mte&_MW|mYEO%fugc9oGX^V z@Z+YjpP^A#f&5m>=ZkX^rt`vYf4tN!sl&7RFc(m>U}S|;t8``6$ZsAD?V%ZZHx`+Y z>)xGVcGvkNq1`$EFy3^DdLVf&4&801&X78PIj&Ye5A@aFC7brD2wpP%ZIE;ovSe5< zV35{xXBa99pWNL46}TKLP`MGETwwp#!5n%^jl}5P=zahjCLb@!jx#u%D^n5 zZ+Vh*7s+x-Ssnw{@M`=vHTocHV%&Yennqfr_~3}UAQ;W<%&dp_=-GRmXeq1*!kWzu zA_sWFeBv!Av9bpPMb!d=80G77|3;shhz0tV3?1gmsD@Bssy8I&Eq^7b$i70dA1VSi zw-H4(Ur#iR+W-RcgcfLK1~OQR3EXQI0Ax(Wzz;Q(`hyuGyX*t;^>%$qo_VwQlOJ*~ zP3W8I)B_19d9n%A8N0>~J>Itlxwad6MH<+el43$su!&GZu^?HE_-084| z)^+zMdsnN$));-WHglvnozOr%Blc)9vr$f!my1Tz0KsKGkz)w*Xqs}PB-1*RDY3oV zINDG|)tpwpuJhM^-FnUVYgP6`30O-zLr*5)gwp^4?RGlPiydsMv z+`a>1u1o#u7tL8+54Uw%JBju87bR@IfrDr<`28{!lt$ra4l(EnR;4d)nL4F;yrOsn z)`G1?r|Vd}r81LDFIc^2u@GvV3^uI5qh#i!I9LtdcM{WvZ@f}lyQL>QvrdHx3B$%g z`)Pk3=R~>;lZL{kWG2kggi`h%$r@>VUA+OI z^#FLg^MoD!&EE|hY4AD_Ypk+5MEisJY3If;Gc;XWN)R8 z2|YK$9Zu6u#_GROJRsp zhcux%2H8UsXQl4^L`?7x){8~MiYu`b^1h;!A}L}D=ptS?E+^p0d7i7KaluxC(Bd-_ ztSK!mq7g}pt^#jtZm)z!88l3MQtKS=f&I({L6~It0ut7u0m`AHlih6tZQY4dgR})m zey>OKnkqxD87RO8Vuf?EufFtq&+*F5^gb%+@J`S0Jg>5ORT{7U4)wynI!?7hMEu~ zenQFK;X93tHCx-$EfHwYb>1-nk$~tZHj)$rrNns)-XP9e6kKhtta@3#BZ#8=7#P>q0Y%;pVO*a-D7k**L~QX}*EP zh@_QovpR^574dE-`1xat{Sw;_4mg1^O$fV1iJAHEQSS&((LgO`mBofyG}$kBYx;

%XdGX{1 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 C-BKI? literal 0 HcmV?d00001 diff --git a/src/assets/icons/github-fill.png b/src/assets/icons/github-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..418b4bc3c2f16b2e54cfb66e85ae1ab0b931ca0a GIT binary patch literal 7713 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 O0$OVN7_y2D;eP-=qIgmO literal 0 HcmV?d00001 diff --git a/src/assets/icons/svg/build.svg b/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/gitee.svg b/src/assets/icons/svg/gitee.svg new file mode 100644 index 0000000..e2ffd2e --- /dev/null +++ b/src/assets/icons/svg/gitee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/wechat-fill.png b/src/assets/icons/wechat-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..c32e4f18b18331264e643da855c8dde19db456eb GIT binary patch literal 6575 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 L^$F#8n~47b*jF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/light.svg b/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/profile.jpg b/src/assets/images/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..997732a452cdf6273ec7cd444dab69f1a4db4e48 GIT binary patch literal 1865 zcmZ`)c{tQtAODTza*@X1N<*aVWTtDs?k%!jYoY}WLiX#HElY(Ex>s3Bwz^c7C|g8? z;b+D&Gxl}JF!ptZGRzore|q14-ap>wIp_QRe3#GXoaa2}IVai9#_Wi|aRC4Tj#!u* z+e7}&;pFFrtneos1#&#zhSr7vQ1w`F-<=nVWj)O8tpOlX0RUp+0e}gmVwM0P6a@e) zZUCVF8~`N#%=>iF003aFc2*81P{Z`}G!{o_>mXq}h^-w&$bKIL2)A|+4l$mH#r-!= zAP}%P5*8%1f&?;|j0K@Q)Y%JxR*=|^?}cnDp45&%q~mbI{}JSHIN0t%NUE)aaEL*u z)OV;162Q(w1!#3h5DLF1ziWa7QvcZO+|nj(>)Q@ve}5k;O-)nx_Lz{u(C8#%caJi= zu)MO)V(rh)EwO(}N?EEEcPqIJCY&TU)1% zO-#4rNxQpy)cNHe(lDESu(-UovbxdH)i*Ug$6)Nzx4v#|f9oF{pPrfD+Wy)}8067L z2}4KxbBMjoC4gVuA*!&xV_X2x>YyQew!>{XkiHnIhi8sMb%8Z5G#cQ99jChoe)cI+=tDU$U#pbw*z+#CC8P=$~EobKL z=6ZU6$+Z$o5Lef3Y+t_pF>ZCMx;fa2` zW7kY|HT}}U2o-W?N)FJfO;ph&q$qW*DMJMTgr=v3sUS>^;Hg$sG#j%tlyR}-ZLAO? zN%GH~=ZvI z%3ipaV_Ex(faW=BW~>Y$cTlJk##zBHsnU!qe2@Kd7ND;W@gMtlm8a0)YTv~* zuUQ~+tkg92wzP86iLl@TH${)%UPs#?DefE99ukizBJlGmODZDaHT>EKPp-X%J<~ME zu%EL<$WOkF(hx<5J2gG{Xx`MRkgAt(Ub0!P>fyy_+ZHd+8l(&iVEy>-fSB6mslu_b zcjl>#yN@cXc>L}ex+338UtY^H5xm6xaQ1@_TkUzBlkQX9^tgJ&(+g6LPV?}OXYof3 zX-WZJFYvjxTf2(3FRR33Gqn?4gMPhV;7fKMGb67yNGBFd97_skgaju9mn9EG{UQWX zN=Xv@^eQQn8jYDtMSP)y~~w$$XsMrgg@)x+Kd)0m`id< zCn(vd&gN^;W7$)m#3d+K@QR@3*b@cYFR;WA!*sCdkIt6bp1h#w@|K6Ee~ff87(k~` z?`8W-)VJ-!p8Qm5M4_D;ub{XPnTns_|5&_a$C)~W-&xNpFcR(FfN z9jeTdW$_E7nXqiMpbO4Br^zw;wM^dqlVtl~a?Y>CKSmZNG{`nwP|vDy;@+~iB45cj zFV8sPdcxic*;Rz`mD)9}D&_HL4sN>;y_bK3z`jgC@tjk7!@oV-qa|}I);=1ot~0M? zBbC-;T{IKj}RiTaFBbVESTn0$!I z)eukj5HEd?+g^|Z&Z5wI>Sz=+98hQVwe<8gbyZO)eH1Fd=cU8{5CVfdeQ!qme}c4@ SBJ}40fQ5;T@p~h;xPJj%?#LPd literal 0 HcmV?d00001 diff --git a/src/assets/logo/icon.png b/src/assets/logo/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8788984aab910fcd585af157e80dda7071d767 GIT binary patch literal 3501 zcmV;e4N~%nP)9~ewDi7$LbO%xwk0-{DiqJp9kX22|>(L}K!64;pq_s%ZZ zB=Qiyp6@QZF6^)?JF_#pW`5^Coph1HM z4H`6PkPQZo`#EbiJ;w95@2Pdbj+G-pnBO&d&KtQGS)~^|X&s9Ss*oV*<)YjS# z<8L0OEYyGxPDr87-%&&OR7T)h)vkEf6EOm3VhKORQ+cpAg$8^e8SNE8gjD|a37x;9 z3~v66YK0$EHaj$8_A|}RkGU%w?P-+{D?*#mCxw1ZMvc|<2bS=c)UI6CYf^XvYc)Nk zdlXPDnDnf`8`Z8ViAphAqEcIg=#)6IFpQ-&1pP{WPa8=kz)NEzASQS?WXAp(R;*YG z`$~_%>4vMa5PAjrkLh4~n6CGl!W*#6>al@+?&y>_8!0Kx!o;bu&i5F?ZS%Hp z__oFb4~K#sxv**F5}5JAbM!k(^0;SUZe}_xTecY9-@E}n$ln9|OOL|AQ>FB|!|XYF z#qan#-hVH5Jq?e~;q&&mFy2ksOQ2xqX8K*CmLMs)I)5F3ODWizb!%bD*a+zEB5?Qn zR_MKF1>>!2P<8qfIJkWya*JPF1%dvXG-Uhoh4eAVe=U~IZZ5!!!QF7Vwh}rl z&Ga4$64q*LpcUMB!vHs~vh<4I@%PRj+8kl+a;dr;_HB6|_HKR;a$bLhl7i`Bx{?VI zxK{Mf>HGy!nktmarkfBKqK6ZOdtEA$v^GLr)oD1gZzrwL{B0Xx|CV*MVh?Ox4+dd3l5joCBODw>~9a|t)Kf=)^?Nw0F$YZ*gKITIXLahhQbf~>579$>m>yQYyIQtpiy_=n#R*{r{)QZxFRVQ6 z7|bPvh0<$m$OxF9k_1~^JXKYPK**AZO4V`>GfoBz9d3Q3-WS2<(+b7zVO_GW-G=?(Aci}=RCJ$^mG%L7Cjyk$ArTF+Kn#vKV0`Vy)K;j*Fn=L z`@$eQA&kJCRc_%k;X7r`JmDa1(nQe;L$`@LLa@7RZ;na|@?4v%kMpRL65|nze|Gv* z`L)BQA)TI9tH=Ueh3<<2h&5Z&pO1F2eNG4~@Ed)R`GL(=Tu3n7=5M+s)R2pHW5tX+ zX={Yyybox+Qzwjr88629Ry%CvX;gp^Uhowm=echnF?|8?GP@4K<_W6gXv+q0o`Od8+Ez6ys6KQ z6J5gNENEZs#v2zYc+#eUg3T4WQ!pJ&57P~Bqb`59x2m-nrc4+IJKlZEZDpbxC3Dh5 zNQ#Vr_|TDb_2Eznu^V^1?pV7Dri_n-3#O*P?e_X&VEAESK7H$NHPk<(BXKw+PZ$eX ziE&;La^`p;+`Lu`P5-@2HEmbX!2li@`oMKE|K;hhV8%3$6^SbjlOo3S>rvrig`pCH z-DX@who2W@PJ{V>n;yWf6PcZhC$1W37xdJTgB~4;31K0Q=~t8&M~BkYir#1m+9K?Q zojROPwd8~k=0p^6F81w=k}cCYYjWrU>VaLYe|?2sarHd){vIoqjSxoQ z&L~0#B?ON+k|EQt&YlUW<0I*~z@5B_>!(KcpNMjv$Vwg?;V}+Rg89Jw$fhBLU#1)( z#1ttERMT>A%tHp zHRF4aA6A`&7)R5mhm&8{%R>m^mMBk%)%29q#n$LDncTPYR&9B0Ue=KEe*KOBUA_0H z;AbZ?dM{YG-|5razkL%P1Zflde=@a)D zszpY^s4!V};j)D5VJ$5qb^ZWW;I~LA%z?6Fsu8ke(Hqjqpu%m?`P0Dx^e`3)KCR>l z<5VF8kL8f#a5IC&@++M`0S}CnQYd^=V-zN1mK>)z5bl1BnVYQhM@VV9u-h3kgvy*V zJxwwpI|}y6(OhlR`T5DC2Cv>Ua|@kUf0&A#92pK3jbB0HfZ4;L2u=Y@ol9o~?(=JK z?Wa0_09>5*WVa!`xVtX>PM;j@yqNhkj^MquCp!!FL(V&^JPOXiV|Z-;@kl0bN3Dtx((?Tyhl$WeMFD=`>Le^zP~)Tx2tYOYtN-=qDLGm4%Cc+ zWH?BvOQ$Cp;O-$jFjDObWIafowGFJ@ozUIe3zn|CV6e8j4gX#J-1`s8n&EQ9p(?;8 z$_*hM&fBLM!V|SCopmGa-JReJq3iD8;R$c;G|adiV1#7!`$vFU!4%90e2dx@&kiE@ z?%(f62x^L0I6R;Y|5gK=scu7h3zE@Om)`G)L)Cx=+zlaxqON)`dta==8e-`d(-7{W z-xzQ)U~dWyxJYwF;7X?GA@l}-pWr{*$Z?z#E2CVpwoy`0Q_z;6P3fl@gx~2mU0csR zt@I+a88*o%bS7i41DEl@NU7&DvdReOwPkfgL^K} z?y!Wf@B8aj!T#5)=oRSut={(EgxorO23Mggw(wbl1`QfCXwaZRg9Z&6G-%MEL4yX} bj|2Y)ncg$8nQjqy00000NkvXXu0mjfz4f-j literal 0 HcmV?d00001 diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..419a17bed73cf0674b8e6dcaad3ea1c493c7a29c GIT binary patch literal 7661 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 literal 0 HcmV?d00001 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..ebd10da --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,130 @@ +// cover some element-ui styles + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +// table 里面操作按钮样式覆盖 +.el-table__cell .cell { + .el-button.is-text { + padding: 8px 5px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} +// fix 2.2.0 版本label标签不居中 +// .el-form-item--small .el-form-item__label { +// line-height: 32px !important; +// } + +// element ui 移动端组件适配 +.el-icon { + vertical-align: middle; +} + +.el-header { + --el-header-padding: 0 0px !important; + // --el-header-height: 50px !important; +} +// el 2.2.0 text button +.el-button.is-text { + color: var(--el-color-primary) !important; +} +@media screen and (max-width: 500px) { + .el-message { + min-width: 300px !important; + } +} + +@media screen and (max-width: 500px) { + .el-message-box { + width: 300px !important; + } + + .el-pagination__jump { + display: none !important; + } + + .el-pagination__sizes { + display: none !important; + } +} + +// dialog +@media screen and (max-width: 700px) { + .el-dialog { + --el-dialog-width: 100% !important; + // --el-dialog-margin-top: 0 !important; + } + // .el-dialog:not(.is-fullscreen) { + // margin-top: 0 !important; + // } + .el-drawer { + width: 85% !important; + } +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #409eff; + margin-left: 5px; +} + +.el-table .el-dropdown, +.el-icon-arrow-down { + font-size: 12px; +} + +//适配完毕 + +// 隐藏picture-card 上传按钮 +.hide .el-upload--picture-card { + display: none; +} + +// 禁止菜单选中 +.el-sub-menu .el-sub-menu__title span, +.el-menu .el-menu-item { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +// fix 侧边栏二级导航缩小图标消失问题 +.el-sub-menu__title { + padding-right: unset !important; +} + +// fix 顶部导航更多样式问题 +.el-menu--horizontal .el-sub-menu .el-sub-menu__icon-arrow { + right: calc(0px - var(--el-menu-base-level-padding)) !important; +} + +// 弹出搜索框 +.header-search-select { + .el-select-dropdown__item { + height: unset !important; + line-height: unset !important; + margin-bottom: 5px; + display: flex; + align-items: center; + justify-content: space-between; + } +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..3615249 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,276 @@ +@import './variables.module.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; +@import './waves.scss'; + +html, +body, +#app { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif; + font-weight: 400; + -webkit-font-smoothing: antialiased; + -webkit-tap-highlight-color: transparent; + background-color: var(--base-bg-main); + // overflow: hidden; + position: relative; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0 !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; + } +} + +.text-center { + text-align: center; +} + +.link-type, +.link-type:focus { + color: var(--el-color-primary); + cursor: pointer; + + &:hover { + // color: rgb(32, 160, 255); + opacity: 0.3; + } +} + +/** 基础通用 **/ +.pt5 { + padding-top: 5px; +} + +.pr5 { + padding-right: 5px; +} + +.pb5 { + padding-bottom: 5px; +} +.pb20 { + padding-bottom: 20px; +} + +.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; +} + +.ml { + margin-left: auto; +} + +.mr { + margin-right: auto; +} + +.mt { + margin-top: auto; +} + +.mb { + margin-bottom: auto; +} +.w20 { + width: 20%; +} +.w100 { + width: 100%; +} + +.pull-right { + float: right !important; +} + +/* text color */ +.text-navy { + color: #1ab394; +} +.text-pink { + color: pink; +} +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ff0000; +} + +.text-muted { + color: #888888; +} + +.text-orange { + color: #ff7d00; +} + +.text-hotpink { + color: hotpink; +} + +.text-green { + color: green; +} + +.text-greenyellow { + color: greenyellow; +} +.text-purple { + color: #ff00ff; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +.icon { + width: 100px; +} + +.table-td-thumb { + width: 56px; +} + +.flex-center { + flex-direction: column; + overflow: hidden; +} diff --git a/src/assets/styles/login.scss b/src/assets/styles/login.scss new file mode 100644 index 0000000..4c6580f --- /dev/null +++ b/src/assets/styles/login.scss @@ -0,0 +1,73 @@ +.login { + background: radial-gradient(220% 105% at top center, #1b2947 10%, #4b76a7 40%, #81acae 65%, #f7f7b6); + background-attachment: fixed; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + // background-image: url('@/assets/images/login-bg.jpg'); + background-size: cover; +} + +.title { + margin: 0px auto 30px auto; + text-align: center; + // color: #fff; +} + +.login-form { + border-radius: 6px; + background: #ffffff; + // background-color: hsla(0, 0%, 100%, 0.3); + width: var(--base-login-width); + padding: 25px 15px 5px 15px; + position: relative; + + .input-icon { + height: 39px; + width: 14px; + margin-left: 0px; + } +} + +.login-tip { + font-size: 13px; + text-align: center; + color: #bfbfbf; +} + +.login-code { + width: 33%; + height: 40px; + float: right; + + img { + width: 100%; + cursor: pointer; + vertical-align: middle; + } +} + +.el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial; + font-size: 12px; + letter-spacing: 1px; +} + +.login-code-img { + height: 40px; + padding-left: 12px; +} +.langSet { + position: absolute; + right: 20px; + top: 10px; +} 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/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..d399128 --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,106 @@ +#app { + .sidebar { + position: relative; + overflow-y: hidden; + z-index: 1001; + transition: width 0.28s ease; + background-color: var(--base-menu-background); + height: 100%; + display: flex; + flex-direction: column; + -webkit-box-shadow: 2px 0 14px rgb(0 21 41 / 10%); + box-shadow: 2px 0 14px rgb(0 21 41 / 10%); + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + // 去掉el-menu边框 + .el-menu { + border: none; + } + + [class^='el-icon'] { + width: 1em; + height: 1em; + font-size: unset; + } + } + + // 展开sidebar状态设置svg-icon边距 + .openSidebar { + .sidebar { + transform: translate(0); + } + .sidebar .svg-icon { + margin-right: 5px; + } + } + + // 隐藏侧边栏样式 + .hideSidebar { + .el-aside { + --el-aside-width: 60px; + } + // 隐藏箭头 + .el-sub-menu { + overflow: hidden; + + & > .el-sub-menu__title { + .el-sub-menu__icon-arrow { + display: none; + } + } + } + // 折叠状态下 + .el-menu--collapse { + [class^='el-icon'] { + width: auto; + font-size: medium; + margin-right: 0; + } + .el-sub-menu { + & > .el-sub-menu__title { + & > span { + height: 3000px; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar { + transition: transform 0.28s; + position: fixed; + // background: var(--base-menu-background, #fff); + } + + &.hideSidebar { + .sidebar { + display: none; + } + } + } +} + +// when menu collapsed +.el-menu--vertical { + // the scroll bar appears when the subMenu is too long + > .el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar { + width: 6px; + } + } +} 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..168ba7e --- /dev/null +++ b/src/assets/styles/variables.module.scss @@ -0,0 +1,45 @@ +// base color +$blue: #324157; +$light-blue: #3a71a8; +$red: #c03639; +$pink: #e65d6e; +$green: #30b08f; +$tiffany: #4ab7bd; +$yellow: #fec171; +$panGreen: #30b08f; + +// 默认菜单主题风格 +:root { + --base-text-color-rgba: rgba(0, 0, 0, 0.85); + --base-sidebar-width: 220px; + // 左侧菜单宽度 + --el-aside-width: 220px; + //底部高度 + --base-footer-height: 30px; + --base-tags-height: 34px; + --base-header-height: 50px; + //登录框宽度 + --base-login-width: 280px; +} + +/***侧边栏深色配置***/ +[data-theme='theme-dark'] { + --base-menu-background: #324157; + --base-logo-title-color: #ffffff; + // // el-ement ui 设置 + // --el-fill-color-blank: #304156; + --el-text-color-primary: #e5eaf3; + --el-menu-text-color: var(--el-text-color-primary); +} +html.dark { + /* custom dark bg color */ + // --el-bg-color: #141414; + --base-color-white: #ffffff; + --base-text-color-rgba: #ffffff; +} +html.cafe { + filter: sepia(0.9) hue-rotate(315deg) brightness(0.9); +} +html.contrast { + filter: contrast(2); +} diff --git a/src/assets/styles/waves.scss b/src/assets/styles/waves.scss new file mode 100644 index 0000000..23add2c --- /dev/null +++ b/src/assets/styles/waves.scss @@ -0,0 +1,101 @@ +/* Waves v0.6.0 +* http://fian.my.id/Waves +* +* Copyright 2014 Alfiana E. Sibuea and other contributors +* Released under the MIT license +* https://github.com/fians/Waves/blob/master/LICENSE +*/ +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + will-change: opacity, transform; + transition: all 0.3s ease-out; +} +.waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + transition: all 0.7s ease-out; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-transform: scale(0); + transform: scale(0); + pointer-events: none; +} +.waves-effect.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); +} +.waves-effect.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, 0.7); +} +.waves-effect.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, 0.7); +} +.waves-effect.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, 0.7); +} +.waves-effect.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.7); +} +.waves-effect.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.7); +} +.waves-effect.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.7); +} +.waves-effect input[type='button'], +.waves-effect input[type='reset'], +.waves-effect input[type='submit'] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; +} +.waves-notransition { + transition: none !important; +} +.waves-circle { + -webkit-transform: translateZ(0); + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, #fff 100%, #000 100%); +} +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; +} +.waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; +} +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; +} +.waves-block { + display: block; +} +a.waves-effect .waves-ripple { + z-index: -1; +} diff --git a/src/auto-import.d.ts b/src/auto-import.d.ts new file mode 100644 index 0000000..5f28183 --- /dev/null +++ b/src/auto-import.d.ts @@ -0,0 +1,64 @@ +// Generated by 'unplugin-auto-import' +// We suggest you to commit this file into source control +declare global { + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const createPinia: typeof import('pinia')['createPinia'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const defineStore: typeof import('pinia')['defineStore'] + const effectScope: typeof import('vue')['effectScope'] + const EffectScope: typeof import('vue')['EffectScope'] + const getActivePinia: typeof import('pinia')['getActivePinia'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSlots: typeof import('vue')['useSlots'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] +} +export {} diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..98e6f71 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/Crontab/day.vue b/src/components/Crontab/day.vue new file mode 100644 index 0000000..4c82e45 --- /dev/null +++ b/src/components/Crontab/day.vue @@ -0,0 +1,172 @@ + + + + diff --git a/src/components/Crontab/hour.vue b/src/components/Crontab/hour.vue new file mode 100644 index 0000000..a5839aa --- /dev/null +++ b/src/components/Crontab/hour.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/src/components/Crontab/index.vue b/src/components/Crontab/index.vue new file mode 100644 index 0000000..0fc068d --- /dev/null +++ b/src/components/Crontab/index.vue @@ -0,0 +1,280 @@ + + + + + diff --git a/src/components/Crontab/min.vue b/src/components/Crontab/min.vue new file mode 100644 index 0000000..1bfac91 --- /dev/null +++ b/src/components/Crontab/min.vue @@ -0,0 +1,128 @@ + + + + diff --git a/src/components/Crontab/month.vue b/src/components/Crontab/month.vue new file mode 100644 index 0000000..dd9d7ac --- /dev/null +++ b/src/components/Crontab/month.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/components/Crontab/result.vue b/src/components/Crontab/result.vue new file mode 100644 index 0000000..e3eb757 --- /dev/null +++ b/src/components/Crontab/result.vue @@ -0,0 +1,560 @@ + + + diff --git a/src/components/Crontab/second.vue b/src/components/Crontab/second.vue new file mode 100644 index 0000000..99b5939 --- /dev/null +++ b/src/components/Crontab/second.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/components/Crontab/week.vue b/src/components/Crontab/week.vue new file mode 100644 index 0000000..d3d83da --- /dev/null +++ b/src/components/Crontab/week.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/components/Crontab/year.vue b/src/components/Crontab/year.vue new file mode 100644 index 0000000..b560bb4 --- /dev/null +++ b/src/components/Crontab/year.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue new file mode 100644 index 0000000..8545d0e --- /dev/null +++ b/src/components/DictTag/index.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/Echarts/Gauge.vue b/src/components/Echarts/Gauge.vue new file mode 100644 index 0000000..25960e9 --- /dev/null +++ b/src/components/Echarts/Gauge.vue @@ -0,0 +1,90 @@ + + + diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue new file mode 100644 index 0000000..058ac5a --- /dev/null +++ b/src/components/Editor/index.vue @@ -0,0 +1,135 @@ + + \ No newline at end of file diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue new file mode 100644 index 0000000..d7bf228 --- /dev/null +++ b/src/components/FileUpload/index.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..01cb87f --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..b6dfe92 --- /dev/null +++ b/src/components/HeaderSearch/index.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue new file mode 100644 index 0000000..ee5e9a1 --- /dev/null +++ b/src/components/IconSelect/index.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..8286a05 --- /dev/null +++ b/src/components/IconSelect/requireIcons.js @@ -0,0 +1,14 @@ +let 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) +} + +// iconfont +import iconList from '@/assets/iconfont/iconfont.json' + +iconList.glyphs.forEach((element) => { + icons.push(element.name) +}) +export default icons diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..30fd088 --- /dev/null +++ b/src/components/ImagePreview/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..4191cd7 --- /dev/null +++ b/src/components/ImageUpload/index.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/src/components/LangSelect/index.vue b/src/components/LangSelect/index.vue new file mode 100644 index 0000000..4c966b8 --- /dev/null +++ b/src/components/LangSelect/index.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/components/Map/index.vue b/src/components/Map/index.vue new file mode 100644 index 0000000..c7dadd4 --- /dev/null +++ b/src/components/Map/index.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/components/Notice/Index.vue b/src/components/Notice/Index.vue new file mode 100644 index 0000000..3864a17 --- /dev/null +++ b/src/components/Notice/Index.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue new file mode 100644 index 0000000..9a25ecd --- /dev/null +++ b/src/components/Pagination/index.vue @@ -0,0 +1,112 @@ + + + + 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..6571ac9 --- /dev/null +++ b/src/components/RightToolbar/index.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/components/Screenfull/index.vue b/src/components/Screenfull/index.vue new file mode 100644 index 0000000..61e2186 --- /dev/null +++ b/src/components/Screenfull/index.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/components/SizeSelect/index.vue b/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..565d780 --- /dev/null +++ b/src/components/SizeSelect/index.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..44580f8 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/components/SvgIcon/svgicon.js b/src/components/SvgIcon/svgicon.js new file mode 100644 index 0000000..bb68b67 --- /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); + } + }, +}; \ No newline at end of file diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue new file mode 100644 index 0000000..9a8300a --- /dev/null +++ b/src/components/TopNav/index.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/components/iFrame/index.vue b/src/components/iFrame/index.vue new file mode 100644 index 0000000..091b1a2 --- /dev/null +++ b/src/components/iFrame/index.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..70446a6 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue new file mode 100644 index 0000000..ef6264c --- /dev/null +++ b/src/layout/components/Settings/index.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..5566eee --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..0e6e10f --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..d0a08c4 --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,105 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..7683035 --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..a765e91 --- /dev/null +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..3349a48 --- /dev/null +++ b/src/layout/components/TagsView/index.vue @@ -0,0 +1,345 @@ + + + + + + + diff --git a/src/layout/components/index.js b/src/layout/components/index.js new file mode 100644 index 0000000..422accd --- /dev/null +++ b/src/layout/components/index.js @@ -0,0 +1,4 @@ +// export { default as AppMain } from './AppMain' +export { default as Navbar } from './Navbar' +export { default as Settings } from './Settings' +export { default as TagsView } from './TagsView/index.vue' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..de11d22 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..71ea075 --- /dev/null +++ b/src/main.js @@ -0,0 +1,77 @@ +import { createApp } from 'vue' +// import Cookies from 'js-cookie' + +import ElementPlus from 'element-plus' +import 'dayjs/locale/zh-cn' +import '@/assets/styles/index.scss' // global css + +import App from './App' +import router from './router' +import directive from './directive' // directive +// 注册指令 +import plugins from './plugins' // plugins +import { downFile } from '@/utils/request' +import signalR from '@/utils/signalR' +import vueI18n from './i18n/index' +import pinia from '@/store/index' + +// svg图标 +import '@/assets/iconfont/iconfont.js' //iconfont +import 'virtual:svg-icons-register' +import SvgIcon from '@/components/SvgIcon/index.vue' +import elementIcons from '@/components/SvgIcon/svgicon' + +import './permission' // permission control + +import { getConfigKey } from '@/api/system/config' +import { getDicts } from '@/api/system/dict/data' +import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, download } from '@/utils/ruoyi' + +// 分页组件 +import Pagination from '@/components/Pagination' +// 自定义表格工具组件 +import RightToolbar from '@/components/RightToolbar' +// 文件上传组件 +import FileUpload from '@/components/FileUpload' +// 图片上传组件 +import ImageUpload from '@/components/ImageUpload' +// 图片预览组件 +import ImagePreview from '@/components/ImagePreview' +// 字典标签组件 +import DictTag from '@/components/DictTag' +// el-date-picker 快捷选项 +import dateOptions from '@/utils/dateOptions' +// 富文本 +import Editor from '@/components/Editor' +// 地图 +import Map from '@/components/Map/index.vue' + +const app = createApp(App) +signalR.init(import.meta.env.VITE_APP_SOCKET_API) +app.config.globalProperties.signalr = signalR +// 全局方法挂载 +app.config.globalProperties.getConfigKey = getConfigKey +app.config.globalProperties.getDicts = getDicts +app.config.globalProperties.download = download +app.config.globalProperties.downFile = downFile +app.config.globalProperties.parseTime = parseTime +app.config.globalProperties.resetForm = resetForm +app.config.globalProperties.handleTree = handleTree +app.config.globalProperties.addDateRange = addDateRange +app.config.globalProperties.selectDictLabel = selectDictLabel +app.config.globalProperties.dateOptions = dateOptions + +// 全局组件挂载 +app.component('DictTag', DictTag) +app.component('Pagination', Pagination) +app.component('UploadFile', FileUpload) +app.component('UploadImage', ImageUpload) +app.component('ImagePreview', ImagePreview) +app.component('RightToolbar', RightToolbar) +app.component('svg-icon', SvgIcon) +app.component('editor', Editor) +app.component('Map', Map) + +directive(app) + +app.use(pinia).use(router).use(plugins).use(ElementPlus, {}).use(elementIcons).use(vueI18n).mount('#app') diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..31fe0e1 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,59 @@ +import router from './router' +import { ElMessage } from 'element-plus' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isHttp } from '@/utils/validate' +import useUserStore from '@/store/modules/user' +import useSettingsStore from '@/store/modules/settings' +import usePermissionStore from '@/store/modules/permission' +NProgress.configure({ showSpinner: false }); + +const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/socialLogin']; + +router.beforeEach((to, from, next) => { + NProgress.start() + if (getToken()) { + to.meta.title && useSettingsStore().setTitle(to.meta.title) + /* has token*/ + if (to.path === '/login') { + next({ path: '/' }) + NProgress.done() + } else { + if (useUserStore().roles.length === 0) { + // 判断当前用户是否已拉取完user_info信息 + useUserStore().getInfo().then(() => { + usePermissionStore().generateRoutes().then(accessRoutes => { + // 根据roles权限生成可访问的路由表 + accessRoutes.forEach(route => { + if (!isHttp(route.path)) { + router.addRoute(route) // 动态添加可访问路由表 + } + }) + next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + }) + }).catch(err => { + useUserStore().logOut().then(() => { + ElMessage.error(err != undefined ? err : '登录失败') + next({ path: '/' }) + }) + }) + } else { + next() + } + } + } else { + // 没有token + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) \ No newline at end of file diff --git a/src/plugins/auth.js b/src/plugins/auth.js new file mode 100644 index 0000000..1ec8c41 --- /dev/null +++ b/src/plugins/auth.js @@ -0,0 +1,60 @@ +import useUserStore from '@/store/modules/user' + +function authPermission(permission) { + const all_permission = "*:*:*"; + const permissions = useUserStore() && useUserStore().permissions + if (permission && permission.length > 0) { + return permissions.some(v => { + return all_permission === v || v === permission + }) + } else { + return false + } +} + +function authRole(role) { + const super_admin = "admin"; + const roles = useUserStore().roles + if (role && role.length > 0) { + return roles.some(v => { + return super_admin === v || v === role + }) + } else { + return false + } +} + +export default { + // 验证用户是否具备某权限 + hasPermi(permission) { + return authPermission(permission); + }, + // 验证用户是否含有指定权限,只需包含其中一个 + hasPermiOr(permissions) { + return permissions.some(item => { + return authPermission(item) + }) + }, + // 验证用户是否含有指定权限,必须全部拥有 + hasPermiAnd(permissions) { + return permissions.every(item => { + return authPermission(item) + }) + }, + // 验证用户是否具备某角色 + hasRole(role) { + return authRole(role); + }, + // 验证用户是否含有指定角色,只需包含其中一个 + hasRoleOr(roles) { + return roles.some(item => { + return authRole(item) + }) + }, + // 验证用户是否含有指定角色,必须全部拥有 + hasRoleAnd(roles) { + return roles.every(item => { + return authRole(item) + }) + } +} \ No newline at end of file diff --git a/src/plugins/cache.js b/src/plugins/cache.js new file mode 100644 index 0000000..492170d --- /dev/null +++ b/src/plugins/cache.js @@ -0,0 +1,96 @@ +const sessionCache = { + set(key, value) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get(key) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON(key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON(key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove(key) { + sessionStorage.removeItem(key); + } +} +const localCache = { + set(key, value) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get(key) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON(key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON(key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove(key) { + localStorage.removeItem(key); + } +} +import Cookies from 'js-cookie' + +const cookie = { + set(key, data, expires) { + Cookies.set(key, data, { expires: expires }) + }, + set(key, data) { + Cookies.set(key, data) + }, + remove(key) { + Cookies.remove(key) + }, + get(key) { + Cookies.get(key) + } +} +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache, + /** + * cookie存储 + */ + cookie: cookie +} \ No newline at end of file diff --git a/src/plugins/download.js b/src/plugins/download.js new file mode 100644 index 0000000..c31a064 --- /dev/null +++ b/src/plugins/download.js @@ -0,0 +1,72 @@ +import axios from 'axios' +import { ElMessage } from 'element-plus' +import { saveAs } from 'file-saver' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { blobValidate } from '@/utils/ruoyi' + +const baseURL = import.meta.env.VITE_APP_BASE_API + +export default { + name(name, isDelete = true) { + var url = baseURL + "/common/download?fileName=" + encodeURI(name) + "&delete=" + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + resource(resource) { + var url = baseURL + "/common/download/resource?resource=" + encodeURI(resource); + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + zip(url, name) { + var url = baseURL + url + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + this.printErrMsg(res.data); + } + }) + }, + saveAs(text, name, opts) { + saveAs(text, name, opts); + }, + async printErrMsg(data) { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + ElMessage.error(errMsg); + } +} + diff --git a/src/plugins/index.js b/src/plugins/index.js new file mode 100644 index 0000000..bc20928 --- /dev/null +++ b/src/plugins/index.js @@ -0,0 +1,27 @@ +import tab from './tab' +import auth from './auth' +import cache from './cache' +import modal from './modal' +import download from './download' + +export default function installPlugins(app) { + // 页签操作 + app.config.globalProperties.$tab = tab + // 认证对象 + app.config.globalProperties.$auth = auth + // 缓存对象 + app.config.globalProperties.$cache = cache + // 模态框对象 + app.config.globalProperties.$modal = modal + // 下载文件 + app.config.globalProperties.$download = download + + Array.prototype.showColumn = function (column) { + var item = this.find((x) => x.prop == column) + // console.log('showColumn方法', this, column, item) + if (item) { + return item.visible + } + return true + } +} diff --git a/src/plugins/modal.js b/src/plugins/modal.js new file mode 100644 index 0000000..e1d71be --- /dev/null +++ b/src/plugins/modal.js @@ -0,0 +1,82 @@ +import { ElMessage, ElMessageBox, ElNotification, ElLoading } from 'element-plus' + +let loadingInstance; + +export default { + // 消息提示 + msg(content) { + ElMessage.info(content) + }, + // 错误消息 + msgError(content) { + ElMessage.error(content) + }, + // 成功消息 + msgSuccess(content) { + ElMessage.success(content) + }, + // 警告消息 + msgWarning(content) { + ElMessage.warning(content) + }, + // 弹出提示 + alert(content) { + ElMessageBox.alert(content, "系统提示") + }, + // 错误提示 + alertError(content) { + ElMessageBox.alert(content, "系统提示", { type: 'error' }) + }, + // 成功提示 + alertSuccess(content) { + ElMessageBox.alert(content, "系统提示", { type: 'success' }) + }, + // 警告提示 + alertWarning(content) { + ElMessageBox.alert(content, "系统提示", { type: 'warning' }) + }, + // 通知提示 + notify(content) { + ElNotification.info(content) + }, + // 错误通知 + notifyError(content) { + ElNotification.error(content); + }, + // 成功通知 + notifySuccess(content) { + ElNotification.success(content) + }, + // 警告通知 + notifyWarning(content) { + ElNotification.warning(content) + }, + // 确认窗体 + confirm(content) { + return ElMessageBox.confirm(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 提交内容 + prompt(content) { + return ElMessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 打开遮罩层 + loading(content) { + loadingInstance = ElLoading.service({ + lock: true, + text: content, + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close(); + } +} \ No newline at end of file diff --git a/src/plugins/tab.js b/src/plugins/tab.js new file mode 100644 index 0000000..76f1eed --- /dev/null +++ b/src/plugins/tab.js @@ -0,0 +1,65 @@ +import useTagsViewStore from '@/store/modules/tagsView' +import router from '@/router' + +export default { + // 刷新当前tab页签 + refreshPage(obj) { + const { path, query, matched } = router.currentRoute.value; + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path, query: query }; + } + } + }); + } + return useTagsViewStore().delCachedView(obj).then(() => { + const { path, query } = obj + router.replace({ + path: '/redirect' + path, + query: query + }) + }) + }, + // 关闭当前tab页签,打开新页签 + closeOpenPage(obj) { + useTagsViewStore().delView(router.currentRoute.value); + if (obj !== undefined) { + return router.push(obj); + } + }, + // 关闭指定tab页签 + closePage(obj) { + if (obj === undefined) { + return useTagsViewStore().delView(router.currentRoute.value).then(({ lastPath }) => { + return router.push(lastPath || '/index'); + }); + } + return useTagsViewStore().delView(obj); + }, + // 关闭所有tab页签 + closeAllPage() { + return useTagsViewStore().delAllViews(); + }, + // 关闭左侧tab页签 + closeLeftPage(obj) { + return useTagsViewStore().delLeftTags(obj || router.currentRoute.value); + }, + // 关闭右侧tab页签 + closeRightPage(obj) { + return useTagsViewStore().delRightTags(obj || router.currentRoute.value); + }, + // 关闭其他tab页签 + closeOtherPage(obj) { + return useTagsViewStore().delOthersViews(obj || router.currentRoute.value); + }, + // 打开tab页签 + openPage(url) { + return router.push(url); + }, + // 修改tab页签 + updatePage(obj) { + return useTagsViewStore().updateVisitedView(obj); + } +} \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..5169aca --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,104 @@ +import { createWebHistory, createRouter } from 'vue-router' +import Layout from '@/layout' + +/** + * Note: 路由配置项 + * + * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 + * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 + * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 + * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 + * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 + * meta : { + noCache: true // 如果设置为true,则不会被 缓存(默认 false) + title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 + icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg + breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 + } + */ + +// 公共路由 +export const constantRoutes = [ + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect/index.vue') + } + ] + }, + { + path: '/login', + component: () => import('@/views/login'), + hidden: true + }, + { + path: '/sociallogin', + component: () => import('@/views/socialLogin'), + hidden: true + }, + { + path: '/register', + component: () => import('@/views/register'), + hidden: true + }, + { + path: '/:pathMatch(.*)*', + component: () => import('@/views/error/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true + }, + { + path: '', + component: Layout, + redirect: '/index', + children: [ + { + path: '/index', + component: () => import('@/views/index'), + name: 'Index', + meta: { title: '首页', icon: 'dashboard', affix: true, titleKey: 'menu.home' } + } + ] + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index'), + name: 'Profile', + meta: { title: '个人中心', icon: 'user', titleKey: 'menu.personalCenter' } + } + ] + }, + +] + +const router = createRouter({ + history: createWebHistory(import.meta.env.VITE_APP_ROUTER_PREFIX), + routes: constantRoutes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } else { + return { top: 0 } + } + } +}) + +export default router diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..bb00c31 --- /dev/null +++ b/src/settings.js @@ -0,0 +1,83 @@ +export default { + /** + * 框架版本号 + */ + version: '3.8.2', + /** + * 网页标题 + */ + title: import.meta.env.VITE_APP_TITLE, + /** + * 侧边栏主题 深色主题theme-dark,浅色主题theme-light + */ + sideTheme: 'theme-dark', + /** + * 框架主题颜色值 + */ + theme: '#109DEA', + /** + * 是否系统布局配置 + */ + showSettings: false, + + /** + * 是否显示顶部导航 + */ + topNav: false, + + /** + * 是否显示 tagsView + */ + tagsView: true, + + /** + * 是否固定头部 + */ + fixedHeader: false, + + /** + * 是否显示logo + */ + sidebarLogo: true, + + /** + * 是否显示动态标题 + */ + dynamicTitle: false, + + /** + * @type {string | array} 'production' | ['production', 'development'] + * @description Need show err logs component. + * The default is only used in the production env + * If you want to also use it in dev, you can pass ['production', 'development'] + */ + errorLog: 'production', + /** + * 版权信息 + */ + copyright: 'Copyright ©2023 阿尔文 All Rights Reserved.', + /** + * 是否显示底部栏 + */ + showFooter: true, + /** + * 是否显示水印 + */ + showWatermark: false, + /** + * 水印文案 + */ + watermarkText: 'ARWAdmin.NET', + /** + * 是否显示其他登录 + */ + showOtherLogin: false, + /** + * 默认大小 + */ + defaultSize: 'default', + /** + * 默认语言 + */ + defaultLang: 'zh-cn' +} \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..f10f389 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,3 @@ +const store = createPinia() + +export default store \ No newline at end of file diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..567f0e4 --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,48 @@ +import Cookies from 'js-cookie' +import cache from '@/plugins/cache' +import defaultSettings from '@/settings' +const useAppStore = defineStore('app', { + state: () => ({ + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + // withoutAnimation: false, + hide: false + }, + device: 'desktop', + size: cache.local.get('size') || defaultSettings.defaultSize, + lang: cache.local.get('lang') || defaultSettings.defaultLang + }), + actions: { + toggleSideBar() { + if (this.sidebar.hide) { + return false + } + this.sidebar.opened = !this.sidebar.opened + if (this.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + closeSideBar() { + Cookies.set('sidebarStatus', 0) + this.sidebar.opened = false + }, + toggleDevice(device) { + this.device = device + }, + setSize(size) { + this.size = size + cache.local.set('size', size) + }, + toggleSideBarHide(status) { + this.sidebar.hide = status + }, + setLang(lang) { + this.lang = lang + cache.local.set('lang', lang) + } + } +}) + +export default useAppStore diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js new file mode 100644 index 0000000..ca4bcea --- /dev/null +++ b/src/store/modules/permission.js @@ -0,0 +1,132 @@ +import { constantRoutes } from '@/router' +import { getRouters } from '@/api/system/menu' +import Layout from '@/layout/index' +import ParentView from '@/components/ParentView' +import InnerLink from '@/layout/components/InnerLink' +import cache from '@/plugins/cache' + +// 匹配views里面所有的.vue文件 +const modules = import.meta.glob('./../../views/**/*.vue') + +const usePermissionStore = defineStore('permission', { + state: () => ({ + routes: [], + defaultRoutes: [], + topbarRouters: [], + sidebarRouters: [], + commonlyUsedRoutes: [] //常用路由 + }), + actions: { + setRoutes(routes) { + this.addRoutes = routes + this.routes = constantRoutes.concat(routes) + }, + setDefaultRoutes(routes) { + this.defaultRoutes = constantRoutes.concat(routes) + }, + setTopbarRoutes(routes) { + this.topbarRouters = routes + }, + setSidebarRouters(routes) { + this.sidebarRouters = routes + }, + // 生成路由 + generateRoutes() { + return new Promise((resolve) => { + // 向后端请求路由数据 + getRouters().then((res) => { + const sdata = JSON.parse(JSON.stringify(res.data)) + const rdata = JSON.parse(JSON.stringify(res.data)) + const defaultData = JSON.parse(JSON.stringify(res.data)) + const sidebarRoutes = filterAsyncRouter(sdata) + const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const defaultRoutes = filterAsyncRouter(defaultData) + this.setRoutes(rewriteRoutes) + this.setSidebarRouters(constantRoutes.concat(sidebarRoutes)) + this.setDefaultRoutes(sidebarRoutes) + this.setTopbarRoutes(defaultRoutes) + this.setCommonlyUsedRoutes() + resolve(rewriteRoutes) + }) + }) + }, + // 设置常用路由 + setCommonlyUsedRoutes() { + var arraryObjectLocal = cache.local.getJSON('commonlyUseMenu') || [] + this.commonlyUsedRoutes = arraryObjectLocal + }, + // 移除常用路由 + removeCommonlyUsedRoutes(item) { + var routes = this.commonlyUsedRoutes + + const fi = routes.findIndex((v) => v.path === item.path) + routes.splice(fi, 1) + cache.local.setJSON('commonlyUseMenu', routes) + } + } +}) + +// 遍历后台传来的路由字符串,转换为组件对象 +function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { + return asyncRouterMap.filter((route) => { + if (type && route.children) { + route.children = filterChildren(route.children) + } + if (route.component) { + // Layout ParentView 组件特殊处理 + if (route.component === 'Layout') { + route.component = Layout + } else if (route.component === 'ParentView') { + route.component = ParentView + } else if (route.component === 'InnerLink') { + route.component = InnerLink + } else { + route.component = loadView(route.component) + } + } + if (route.children != null && route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, route, type) + } else { + delete route['children'] + delete route['redirect'] + } + return true + }) +} + +function filterChildren(childrenMap, lastRouter = false) { + var children = [] + childrenMap.forEach((el, index) => { + if (el.children && el.children.length) { + if (el.component === 'ParentView' && !lastRouter) { + el.children.forEach((c) => { + c.path = el.path + '/' + c.path + if (c.children && c.children.length) { + children = children.concat(filterChildren(c.children, c)) + return + } + children.push(c) + }) + return + } + } + if (lastRouter) { + el.path = lastRouter.path + '/' + el.path + } + children = children.concat(el) + }) + return children +} + +export const loadView = (view) => { + let res + for (const path in modules) { + const dir = path.split('views/')[1].split('.vue')[0] + if (dir === view) { + res = () => modules[path]() + } + } + return res +} + +export default usePermissionStore diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js new file mode 100644 index 0000000..82daafa --- /dev/null +++ b/src/store/modules/settings.js @@ -0,0 +1,39 @@ +import defaultSettings from '@/settings' +import { useDynamicTitle } from '@/utils/dynamicTitle' + +const { sideTheme, theme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, showFooter, showWatermark, watermarkText } = + defaultSettings + +const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' +const useSettingsStore = defineStore('settings', { + state: () => ({ + title: '', + theme: storageSetting.theme || theme, + sideTheme: storageSetting.sideTheme || sideTheme, + showSettings: showSettings, + topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, + tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, + fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, + sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, + dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle, + showFooter: storageSetting.showFooter === undefined ? showFooter : storageSetting.showFooter, + showWatermark: storageSetting.showWatermark === undefined ? showWatermark : storageSetting.showWatermark, + watermarkText: storageSetting.watermarkText === undefined ? watermarkText : storageSetting.watermarkText + }), + actions: { + // 修改布局设置 + changeSetting(data) { + const { key, value } = data + // if (this.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(this.$state, key)) { + this[key] = value + } + }, + // 设置网页标题 + setTitle(title) { + this.title = title + useDynamicTitle() + } + } +}) +export default useSettingsStore diff --git a/src/store/modules/socket.js b/src/store/modules/socket.js new file mode 100644 index 0000000..998e9d0 --- /dev/null +++ b/src/store/modules/socket.js @@ -0,0 +1,29 @@ +const useSocketStore = defineStore('socket', { + state: () => ({ + onlineNum: 0, + onlineUsers: [], + noticeList: [], + noticeDot: false + }), + actions: { + //更新在线人数 + setOnlineUserNum(num) { + this.onlineNum = num + }, + // 更新系统通知 + setNoticeList(data) { + this.noticeList = data + this.noticeDot = data.length > 0 + }, + // setOnlineUsers(data) { + // const { onlineNum, users } = data + // this.onlineUsers = users + // this.onlineNum = onlineNum + // }, + sendChat(data) { + const { proxy } = getCurrentInstance() + console.log(data) + } + } +}) +export default useSocketStore diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js new file mode 100644 index 0000000..93ae11a --- /dev/null +++ b/src/store/modules/tagsView.js @@ -0,0 +1,180 @@ +const useTagsViewStore = defineStore('tagsView', { + state: () => ({ + visitedViews: [], + cachedViews: [], + iframeViews: [] + }), + actions: { + addView(view) { + this.addVisitedView(view) + this.addCachedView(view) + }, + addIframeView(view) { + if (this.iframeViews.some((v) => v.path === view.path)) return + this.iframeViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + addVisitedView(view) { + if (this.visitedViews.some((v) => v.path === view.path)) return + this.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + addCachedView(view) { + if (this.cachedViews.includes(view.name)) return + if (!view.meta.noCache) { + this.cachedViews.push(view.name) + } + }, + delView(view) { + return new Promise((resolve) => { + this.delVisitedView(view) + this.delCachedView(view) + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews] + }) + }) + }, + delVisitedView(view) { + return new Promise((resolve) => { + for (const [i, v] of this.visitedViews.entries()) { + if (v.path === view.path) { + this.visitedViews.splice(i, 1) + break + } + } + this.iframeViews = this.iframeViews.filter((item) => item.path !== view.path) + resolve([...this.visitedViews]) + }) + }, + delIframeView(view) { + return new Promise((resolve) => { + this.iframeViews = this.iframeViews.filter((item) => item.path !== view.path) + resolve([...this.iframeViews]) + }) + }, + delCachedView(view) { + return new Promise((resolve) => { + const index = this.cachedViews.indexOf(view.name) + index > -1 && this.cachedViews.splice(index, 1) + resolve([...this.cachedViews]) + }) + }, + delOthersViews(view) { + return new Promise((resolve) => { + this.delOthersVisitedViews(view) + this.delOthersCachedViews(view) + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews] + }) + }) + }, + delOthersVisitedViews(view) { + return new Promise((resolve) => { + this.visitedViews = this.visitedViews.filter((v) => { + return v.meta.affix || v.path === view.path + }) + this.iframeViews = this.iframeViews.filter((item) => item.path === view.path) + resolve([...this.visitedViews]) + }) + }, + delOthersCachedViews(view) { + return new Promise((resolve) => { + const index = this.cachedViews.indexOf(view.name) + if (index > -1) { + this.cachedViews = this.cachedViews.slice(index, index + 1) + } else { + this.cachedViews = [] + } + resolve([...this.cachedViews]) + }) + }, + delAllViews(view) { + return new Promise((resolve) => { + this.delAllVisitedViews(view) + this.delAllCachedViews(view) + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews] + }) + }) + }, + delAllVisitedViews(view) { + return new Promise((resolve) => { + const affixTags = this.visitedViews.filter((tag) => tag.meta.affix) + this.visitedViews = affixTags + this.iframeViews = [] + resolve([...this.visitedViews]) + }) + }, + delAllCachedViews(view) { + return new Promise((resolve) => { + this.cachedViews = [] + resolve([...this.cachedViews]) + }) + }, + updateVisitedView(view) { + for (let v of this.visitedViews) { + if (v.path === view.path) { + v = Object.assign(v, view) + break + } + } + }, + delRightTags(view) { + return new Promise((resolve) => { + const index = this.visitedViews.findIndex((v) => v.path === view.path) + if (index === -1) { + return + } + this.visitedViews = this.visitedViews.filter((item, idx) => { + if (idx <= index || (item.meta && item.meta.affix)) { + return true + } + const i = this.cachedViews.indexOf(item.name) + if (i > -1) { + this.cachedViews.splice(i, 1) + } + if (item.meta.link) { + const fi = this.iframeViews.findIndex((v) => v.path === item.path) + this.iframeViews.splice(fi, 1) + } + return false + }) + resolve([...this.visitedViews]) + }) + }, + delLeftTags(view) { + return new Promise((resolve) => { + const index = this.visitedViews.findIndex((v) => v.path === view.path) + if (index === -1) { + return + } + this.visitedViews = this.visitedViews.filter((item, idx) => { + if (idx >= index || (item.meta && item.meta.affix)) { + return true + } + const i = this.cachedViews.indexOf(item.name) + if (i > -1) { + this.cachedViews.splice(i, 1) + } + if (item.meta.link) { + const fi = this.iframeViews.findIndex((v) => v.path === item.path) + this.iframeViews.splice(fi, 1) + } + return false + }) + resolve([...this.visitedViews]) + }) + } + } +}) + +export default useTagsViewStore diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..d602d49 --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,127 @@ +import { login, logout, getInfo, oauthCallback } from '@/api/system/login' +import { getToken, setToken, removeToken } from '@/utils/auth' +import defAva from '@/assets/images/profile.jpg' +import md5 from 'js-md5' +const useUserStore = defineStore('user', { + state: () => ({ + userInfo: '', + token: getToken(), + name: '', + avatar: '', + roles: [], + permissions: [], + userId: 0, + authSource: '', + userName: '' + }), + actions: { + setAuthSource(source) { + this.authSource = source + }, + // 登录 + login(userInfo) { + const username = userInfo.username.trim() + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + return new Promise((resolve, reject) => { + login(username, password, code, uuid) + .then((res) => { + if (res.code == 200) { + setToken(res.data) + this.token = res.data + resolve() //then处理 + } else { + console.log('login error ', res) + reject(res) //catch处理 + } + }) + .catch((error) => { + reject(error) + }) + }) + }, + /** + * 三方授权登录 + * @param {*} data + * @param {*} param { authSource : ''} + * @returns + */ + oauthLogin(data, param) { + return new Promise((resolve, reject) => { + oauthCallback(data, param) + .then((res) => { + const { code, data } = res + if (code == 200) { + setToken(data.token) + this.token = data.token + // Cookies.set('username', data.userName, { expires: 30 }) + // Cookies.set('password', encrypt(data.password), { expires: 30 }) + // Cookies.set('rememberMe', true, { expires: 30 }) + resolve(res) //then处理 + } else { + console.log('login error ', res) + reject(res) //catch处理 + } + }) + .catch((err) => { + reject(err) + }) + }) + }, + // 获取用户信息 + getInfo() { + return new Promise((resolve, reject) => { + getInfo() + .then((res) => { + const data = res.data + const avatar = data.user.avatar == '' ? defAva : data.user.avatar + + if (data.roles && data.roles.length > 0) { + // 验证返回的roles是否是一个非空数组 + this.roles = data.roles + this.permissions = data.permissions + } else { + this.roles = ['ROLE_DEFAULT'] + } + + this.name = data.user.nickName + this.avatar = avatar + this.userInfo = data.user //新加 + this.userId = data.user.userId //新加 + this.userName = data.user.userName //新加 + resolve(res) + }) + .catch((error) => { + console.error(error) + reject('获取用户信息失败') + }) + }) + }, + // 退出系统 + logOut() { + return new Promise((resolve, reject) => { + logout(this.token) + .then((res) => { + this.token = '' + this.roles = [] + this.permissions = [] + removeToken() + resolve(res) + }) + .catch((error) => { + reject(error) + }) + }) + }, + // 前端 登出 + fedLogOut() { + return new Promise((resolve) => { + this.token = '' + removeToken() + resolve() + }) + } + } +}) +export default useUserStore diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..fa92d24 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,15 @@ +// import Cookies from 'js-cookie' + +const TokenKey = 'ZR-Token' + +export function getToken() { + return localStorage.getItem(TokenKey) +} + +export function setToken(token) { + return localStorage.setItem(TokenKey, token) +} + +export function removeToken() { + return localStorage.removeItem(TokenKey) +} diff --git a/src/utils/dateOptions.js b/src/utils/dateOptions.js new file mode 100644 index 0000000..d886440 --- /dev/null +++ b/src/utils/dateOptions.js @@ -0,0 +1,85 @@ +// dayjs 参考:https://www.cnblogs.com/Airon-wei/p/14362160.html +import dayjs from 'dayjs' + +const dateOptions = [ + { + text: '昨天', + value: () => { + const start = dayjs().subtract(1, 'day').format('YYYY-MM-DD') + const end = start + ' 23:59:59' + + return [start, dayjs(end).toISOString()] + } + }, + { + text: '今天', + value: () => { + const start = dayjs().format('YYYY-MM-DD') + const end = start + ' 23:59:59' + + return [start, end] + } + }, + { + text: '本周', + value: () => { + const end = dayjs().endOf('week').add(1, 'day').format('YYYY-MM-DD') + ' 23:59:59' + const start = dayjs().startOf('week').add(1, 'day').format('YYYY-MM-DD') + return [start, end] + } + }, + { + text: '上周', + value: () => { + const start = dayjs().add(-1, 'week').startOf('week').add(1, 'day').format('YYYY-MM-DD') + const end = dayjs().add(-1, 'week').endOf('week').add(1, 'day').format('YYYY-MM-DD') + ' 23:59:59' + return [start, end] + } + }, + { + text: '本月', + value: () => { + const end = dayjs().endOf('month').format('YYYY-MM-DD') + const start = dayjs().startOf('month').format('YYYY-MM-DD') + + return [start, end + ' 23:59:59'] + } + }, + { + text: '上月', + value: () => { + const end = dayjs().startOf('month').format('YYYY-MM-DD') + const start = dayjs().add(-1, 'month').startOf('month').format('YYYY-MM-DD') + + return [start, end] + } + }, + { + text: '最近一周', + value: () => { + const end = dayjs().format('YYYY-MM-DD') + ' 23:59:59' + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7) + return [dayjs(start).format('YYYY-MM-DD'), end] + } + }, + { + text: '最近一个月', + value: () => { + const end = dayjs().format('YYYY-MM-DD') + ' 23:59:59' + // const start = new Date() + //start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) + return [dayjs().day(-30).format('YYYY-MM-DD'), end] + } + }, + { + text: '最近三个月', + value: () => { + const end = dayjs().format('YYYY-MM-DD') + ' 23:59:59' + // const start = new Date() + // start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) + return [dayjs().day(-90).format('YYYY-MM-DD'), end] + } + } +] +export default dateOptions diff --git a/src/utils/dict.js b/src/utils/dict.js new file mode 100644 index 0000000..44eb728 --- /dev/null +++ b/src/utils/dict.js @@ -0,0 +1,17 @@ +import { getDicts } from '@/api/system/dict/data' + +/** + * 获取字典数据 + */ +export function useDict(...args) { + const res = ref({}); + return (() => { + args.forEach((d, index) => { + res.value[d] = []; + getDicts(d).then(resp => { + res.value[d] = resp.data.map(p => ({ label: p.dictLabel, value: p.dictValue, listClass: p.listClass, cssClass: p.cssClass })) + }) + }) + return toRefs(res.value); + })() +} \ No newline at end of file diff --git a/src/utils/dynamicTitle.js b/src/utils/dynamicTitle.js new file mode 100644 index 0000000..449d899 --- /dev/null +++ b/src/utils/dynamicTitle.js @@ -0,0 +1,14 @@ +import defaultSettings from '@/settings' +import useSettingsStore from '@/store/modules/settings' + +/** + * 动态修改标题 + */ +export function useDynamicTitle() { + const settingsStore = useSettingsStore() + if (settingsStore.dynamicTitle) { + document.title = settingsStore.title + ' - ' + defaultSettings.title; + } else { + document.title = defaultSettings.title; + } +} \ No newline at end of file diff --git a/src/utils/errorCode.js b/src/utils/errorCode.js new file mode 100644 index 0000000..d2111ee --- /dev/null +++ b/src/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..59f0c5b --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,390 @@ +import { parseTime } from './ruoyi' +import { useWebNotification } from '@vueuse/core' + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * 清空数组 + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * @param {Object} json + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * @param {string} val + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * @param {HTMLElement} element + * @param {string} className + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function () { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function (...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + +export function makeMap(str, expectsLowerCase) { + const map = Object.create(null) + const list = str.split(',') + for (let i = 0; i < list.length; i++) { + map[list[i]] = true + } + return expectsLowerCase ? + val => map[val.toLowerCase()] : + val => map[val] +} + +// 首字母大小 +export function titleCase(str) { + return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) +} + +// 下划转驼峰 +export function camelCase(str) { + return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()) +} + +// 是否数字 +export function isNumberStr(str) { + return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) +} + +/** + * 变浅颜色值 + * @param color 颜色值字符串 + * @param level 加深的程度,限0-1之间 + * @returns 返回处理后的颜色值 + */ +export function getLightColor(color, level) { + let reg = /^\#?[0-9A-Fa-f]{6}$/; + if (!reg.test(color)) return color; + let rgb = hexToRgb(color); + for (let i = 0; i < 3; i++) rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i]); + return rgbToHex(rgb[0], rgb[1], rgb[2]); +} + +/** + * hex颜色转rgb颜色 + * @param str 颜色值字符串 + * @returns 返回处理后的颜色值 + */ +export function hexToRgb(str) { + let hexs = ''; + let reg = /^\#?[0-9A-Fa-f]{6}$/; + if (!reg.test(str)) return str; + str = str.replace('#', ''); + hexs = str.match(/../g); + for (let i = 0; i < 3; i++) hexs[i] = parseInt(hexs[i], 16); + return hexs; +} + +/** + * rgb颜色转Hex颜色 + * @param r 代表红色 + * @param g 代表绿色 + * @param b 代表蓝色 + * @returns 返回处理后的颜色值 + */ +export function rgbToHex(r, g, b) { + let reg = /^\d{1,3}$/; + if (!reg.test(r) || !reg.test(g) || !reg.test(b)) return ""; + let hexs = [r.toString(16), g.toString(16), b.toString(16)]; + for (let i = 0; i < 3; i++) + if (hexs[i].length == 1) hexs[i] = `0${hexs[i]}`; + return `#${hexs.join('')}`; +} + +/** + * 浏览器Web通知 + * @param { title: 'title' } optinos + */ +export function webNotify(optinos) { + const { show, isSupported } = useWebNotification({ + title: optinos.title, + dir: 'auto', + lang: 'en', + renotify: true, + tag: 'tag', + body: optinos.body + }) + if (isSupported) { + show() + } +} + +/** + * 是否空对象 + * @param {Object} value + * @return {Boolean} + */ +export function isEmptyObject(value) { + return JSON.stringify(value) == '{}'; +} \ No newline at end of file diff --git a/src/utils/jsencrypt.js b/src/utils/jsencrypt.js new file mode 100644 index 0000000..a758068 --- /dev/null +++ b/src/utils/jsencrypt.js @@ -0,0 +1,22 @@ +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' + +// 密钥对生成 http://web.chacuo.net/netrsakeypair + +const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALj0zjON+EVdBsnMcR4Uj+jOYgp5ZipftQZ1utW8KvVioz+RSaotF1JHt59q9SC/mZcWWpbpcEqQ3WyyyCC33msCAwEAAQ==' + +const privateKey = + 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAuPTOM434RV0GycxxHhSP6M5iCnlmKl+1BnW61bwq9WKjP5FJqi0XUke3n2r1IL+ZlxZalulwSpDdbLLIILfeawIDAQABAkB5PYAtq1KjpWddwPYlkbUEFsWNuCaQgExZ/7KJiN9gGjo/UfUZ3W39Orb8PITIYf1NbasReqgddAcsfJNyoDWBAiEA7K89DyTmbjNSmekdD3rejRDdMzzXYtcbo69ZjHoowMUCIQDIDN8eg6PcWk4kiRcRYcNEfriUJR7Fg07ellSPv821bwIhAJA5TEyxIJUgQwI0cZfgOELfdtrlBR5ek6IPlNKsEa89AiBbMVroexPQWC41A3VLjChKagXUKpO7b98dIqRLnyCz6wIgP3qpvnO4IOxY7f5XarfCVyIHZJAMt/R1f16P5OkKv+A=' + +// 加密 +export function encrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 +} + +// 解密 +export function decrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..db6f329 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,203 @@ +import axios from 'axios' +import { ElMessageBox, ElMessage, ElLoading } from 'element-plus' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import useUserStore from '@/store/modules/user' +import { blobValidate } from '@/utils/ruoyi' +import { saveAs } from 'file-saver' + +let downloadLoadingInstance +// 解决后端跨域获取不到cookie问题 +// axios.defaults.withCredentials = true +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: import.meta.env.VITE_APP_BASE_API, + // 超时 + timeout: 30000 +}) + +// request拦截器 +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + if (getToken()) { + //将token放到请求头发送给服务器,将tokenkey放在请求头中 + config.headers['Authorization'] = 'Bearer ' + getToken() + config.headers['userid'] = useUserStore().userId + config.headers['userName'] = useUserStore().userName + } + return config + }, + (error) => { + console.log(error) + Promise.reject(error) + } +) + +// 响应拦截器 +service.interceptors.response.use( + (res) => { + if (res.status !== 200) { + Promise.reject('network error') + return + } + // 未设置状态码则默认成功状态 + const { code, msg } = res.data + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res + } + if (code == 401) { + ElMessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { + confirmButtonText: '重新登陆', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + useUserStore() + .logOut() + .then(() => { + location.href = import.meta.env.VITE_APP_ROUTER_PREFIX + 'index' + }) + }) + + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code == 0 || code == 1 || code == 110 || code == 101 || code == 403 || code == 500 || code == 429) { + ElMessage({ + message: msg, + type: 'error' + }) + return Promise.reject(res.data) + } else { + //返回标准 code/msg/data字段 + return res.data + } + }, + (error) => { + console.log('axios err', error) + let { message } = error + if (message == 'Network Error') { + message = '后端接口连接异常' + } else if (message.includes('timeout')) { + message = '系统接口请求超时' + } else if (message.includes('Request failed with status code 429')) { + message = '请求过于频繁,请稍后再试' + } else if (message.includes('Request failed with status code')) { + message = '系统接口' + message.substr(message.length - 3) + '异常,请联系管理员' + } + ElMessage({ + message: message, + type: 'error', + duration: 3 * 1000, + grouping: true + }) + return Promise.reject(error) + } +) + +/** + * get方法,对应get请求 + * @param {String} url [请求的url地址] + * @param {Object} params [请求时携带的参数] + */ +export function get(url, params) { + return new Promise((resolve, reject) => { + axios + .get(url, { + params: params + }) + .then((res) => { + resolve(res.data) + }) + .catch((err) => { + reject(err) + }) + }) +} + +export function post(url, params) { + return new Promise((resolve, reject) => { + axios + .post(url, { + params: params + }) + .then((res) => { + resolve(res.data) + }) + .catch((err) => { + reject(err) + }) + }) +} + +/** + * 提交表单 + * @param {*} url + * @param {*} data + */ +export function postForm(url, data, config) { + return new Promise((resolve, reject) => { + axios + .post(url, data, config) + .then((res) => { + resolve(res.data) + }) + .catch((err) => { + reject(err) + }) + }) +} + +/** + * 通用下载方法 + * @param {*} url 请求地址 + * @param {*} params 请求参数 + * @param {*} config 配置 + * @returns + */ +export async function downFile(url, params, config) { + downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' }) + + service + .get(url, { + params, + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config + }) + .then(async (resp) => { + const { data } = resp + + const isLogin = await blobValidate(data) + if (isLogin) { + var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*') + var contentDisposition = decodeURI(resp.headers['content-disposition']) + var result = patt.exec(contentDisposition) + var fileName = result[1] + fileName = fileName.replace(/\"/g, '') + + const blob = new Blob([data]) + saveAs(blob, fileName) + } else { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + + ElMessage({ + message: errMsg, + type: 'error' + }) + } + downloadLoadingInstance.close() + }) + .catch((err) => { + ElMessage({ + message: '下载文件出现错误,请联系管理员!', + type: 'error' + }) + downloadLoadingInstance.close() + }) +} + +export default service diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js new file mode 100644 index 0000000..54fbb5d --- /dev/null +++ b/src/utils/ruoyi.js @@ -0,0 +1,284 @@ +const baseURL = import.meta.env.VITE_APP_BASE_API +import dayjs from 'dayjs' +/** + * 通用js方法封装处理 + * Copyright (c) 2019 ruoyi + */ + +/** + * 日期格式化 + * @param {*} time + * @param {* } pattern 'YYYY-MM-DD HH:mm:ss' + * @returns + */ +export function parseTime(time, pattern = 'YYYY-MM-DD HH:mm:ss') { + if (arguments.length === 0 || !time) { + return null + } + + return dayjs(time).format(pattern) +} + +// 表单重置 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields() + } +} + +/** + * 添加日期范围 + * @param { beginTime: '', endTime: '', page: 1} params + * @param {*} dateRange 日期范围数组 + * @param {*} propName C#属性名首字母大写 + * @returns + */ +// 添加日期范围 +export function addDateRange(params, dateRange, propName) { + let search = params + search = typeof search === 'object' && search !== null && !Array.isArray(search) ? search : {} + dateRange = Array.isArray(dateRange) ? dateRange : [] + if (typeof propName === 'undefined') { + search['beginTime'] = dateRange[0] + search['endTime'] = dateRange[1] + } else { + search['begin' + propName] = dateRange[0] + search['end' + propName] = dateRange[1] + } + return search +} + +// 回显数据字典 +export function selectDictLabel(datas, value) { + if (value === undefined) { + return '' + } + var actions = [] + Object.keys(datas).some((key) => { + if (datas[key].dictValue == '' + value) { + actions.push(datas[key].dictLabel) + return true + } + }) + if (actions.length === 0) { + actions.push(value) + } + return actions.join('') +} + +// 回显数据字典(字符串数组) +export function selectDictLabels(datas, value, separator) { + if (value === undefined) { + return '' + } + var actions = [] + var currentSeparator = undefined === separator ? ',' : separator + var temp = value.split(currentSeparator) + Object.keys(value.split(currentSeparator)).some((val) => { + Object.keys(datas).some((key) => { + if (datas[key].value == '' + temp[val]) { + actions.push(datas[key].label + currentSeparator) + } + }) + }) + return actions.join('').substring(0, actions.join('').length - 1) +} +// 通用下载方法 +export function download(fileName) { + // window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true; + // window.open(baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true) + window.open(baseURL + fileName) +} + +// 字符串格式化(%s ) +export function sprintf(str) { + var args = arguments, + flag = true, + i = 1 + str = str.replace(/%s/g, function () { + var arg = args[i++] + if (typeof arg === 'undefined') { + flag = false + return '' + } + return arg + }) + return flag ? str : '' +} + +// 转换字符串,undefined,null等转化为"" +export function parseStrEmpty(str) { + if (!str || str == 'undefined' || str == 'null') { + return '' + } + return str +} + +// 数据合并 +export function mergeRecursive(source, target) { + for (var p in target) { + try { + if (target[p].constructor == Object) { + source[p] = mergeRecursive(source[p], target[p]) + } else { + source[p] = target[p] + } + } catch (e) { + source[p] = target[p] + } + } + return source +} + +/** + * 构造树型结构数据 + * @param {*} data 数据源 + * @param {*} id id字段 默认 'id' + * @param {*} parentId 父节点字段 默认 'parentId' + * @param {*} children 孩子节点字段 默认 'children' + */ +export function handleTree(data, id, parentId, children) { + let config = { + id: id || 'id', + parentId: parentId || 'parentId', + childrenList: children || 'children' + } + + var childrenListMap = {} + var nodeIds = {} + var tree = [] + + for (let d of data) { + let parentId = d[config.parentId] + if (childrenListMap[parentId] == null) { + childrenListMap[parentId] = [] + } + nodeIds[d[config.id]] = d + childrenListMap[parentId].push(d) + } + + for (let d of data) { + let parentId = d[config.parentId] + if (nodeIds[parentId] == null) { + tree.push(d) + } + } + + for (let t of tree) { + adaptToChildrenList(t) + } + + function adaptToChildrenList(o) { + if (childrenListMap[o[config.id]] !== null) { + o[config.childrenList] = childrenListMap[o[config.id]] + } + if (o[config.childrenList]) { + for (let c of o[config.childrenList]) { + adaptToChildrenList(c) + } + } + } + return tree +} + +/** + * 参数处理 + * @param {*} params 参数 + */ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName] + var part = encodeURIComponent(propName) + '=' + if (value !== null && typeof value !== 'undefined') { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && typeof value[key] !== 'undefined') { + let params = propName + '[' + key + ']' + var subPart = encodeURIComponent(params) + '=' + result += subPart + encodeURIComponent(value[key]) + '&' + } + } + } else { + result += part + encodeURIComponent(value) + '&' + } + } + } + return result +} + +// 返回项目路径 +export function getNormalPath(p) { + if (p.length === 0 || !p || p == 'undefined') { + return p + } + let res = p.replace('//', '/') + if (res[res.length - 1] === '/') { + return res.slice(0, res.length - 1) + } + return res +} + +// 验证是否为blob格式 +export async function blobValidate(data) { + try { + const text = await data.text() + JSON.parse(text) + return false + } catch (error) { + return true + } +} + +// 转换字符串,undefined,null等转化为"" +export function praseStrEmpty(str) { + if (!str || str == 'undefined' || str == 'null') { + return '' + } + return str +} +export function praseStrZero(str) { + if (!str || str == 'undefined' || str == 'null') { + console.log('zero') + return 0 + } + return str +} + +/** + * 字符串是否为空 + * @param {*} obj + * @returns + */ +export function isEmpty(obj) { + if (typeof obj == 'undefined' || obj == null || obj === '') { + return true + } else { + return false + } +} + +/** + * 查找对象的唯一键值对(比如id)去判断是否存在某个数据中 + * @param {*} arr 数组 + * @param {*} key 对象键值名 + * @param {*} val + * @returns + */ +export function findItem(arr, key, val) { + for (let i = 0; i < arr.length; i++) { + if (arr[i][key] == val) { + return i + } + } + return -1 +} + +export function color16() { + //十六进制颜色随机 + const r = Math.floor(Math.random() * 256) + const g = Math.floor(Math.random() * 256) + const b = Math.floor(Math.random() * 256) + const color = `#${r.toString(16)}${g.toString(16)}${b.toString(16)}` + return color +} diff --git a/src/utils/scroll-to.js b/src/utils/scroll-to.js new file mode 100644 index 0000000..c5d8e04 --- /dev/null +++ b/src/utils/scroll-to.js @@ -0,0 +1,58 @@ +Math.easeInOutQuad = function(t, b, c, d) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +var requestAnimFrame = (function() { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount) { + document.documentElement.scrollTop = amount + document.body.parentNode.scrollTop = amount + document.body.scrollTop = amount +} + +function position() { + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export function scrollTo(to, duration, callback) { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + var animateScroll = function() { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + var val = Math.easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + if (callback && typeof (callback) === 'function') { + // the animation is done so lets callback + callback() + } + } + } + animateScroll() +} diff --git a/src/utils/signalR.js b/src/utils/signalR.js new file mode 100644 index 0000000..e4cbe60 --- /dev/null +++ b/src/utils/signalR.js @@ -0,0 +1,119 @@ +// 官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/javascript-client?view=aspnetcore-6.0&viewFallbackFrom=aspnetcore-2.2&tabs=visual-studio +import * as signalR from '@microsoft/signalr' +import { getToken } from '@/utils/auth' +import { ElNotification, ElMessage } from 'element-plus' +import useSocketStore from '@/store/modules/socket' +import { webNotify } from './index' +export default { + // signalR对象 + SR: {}, + // 失败连接重试次数 + failNum: 4, + baseUrl: '', + init(url) { + var socketUrl = window.location.origin + url + const connection = new signalR.HubConnectionBuilder() + .withUrl(socketUrl, { accessTokenFactory: () => getToken() }) + .withAutomaticReconnect() //自动重新连接 + .configureLogging(signalR.LogLevel.Warning) + .build() + this.SR = connection + // 断线重连 + connection.onclose(async () => { + console.log('断开连接了') + console.assert(connection.state === signalR.HubConnectionState.Disconnected) + // 建议用户重新刷新浏览器 + await this.start() + }) + + connection.onreconnected(() => { + ElMessage({ + message: '与服务器通讯已连接成功', + type: 'success', + duration: 2000 + }) + console.log('断线重新连接成功') + }) + + connection.onreconnecting(async () => { + console.log('断线重新连接中... ') + + await this.start() + }) + + this.receiveMsg(connection) + // 启动 + // this.start(); + }, + /** + * 调用 this.signalR.start().then(async () => { await this.SR.invoke("method")}) + * @returns + */ + async start() { + try { + console.log('signalR-1', this.SR.state) + //使用async和await 或 promise的then 和catch 处理来自服务端的异常 + if (this.SR.state === signalR.HubConnectionState.Disconnected) { + await this.SR.start() + } + + console.log('signalR-2', this.SR.state) + return true + } catch (error) { + console.error(error) + this.failNum-- + // console.log(`失败重试剩余次数${that.failNum}`, error) + if (this.failNum > 0 && this.SR.state.Disconnected) { + setTimeout(async () => { + await this.start() + }, 5000) + } + return false + } + }, + // 接收消息处理 + receiveMsg(connection) { + connection.on('onlineNum', (data) => { + useSocketStore().setOnlineUserNum(data) + }) + // 接收欢迎语 + connection.on('welcome', (data) => { + ElNotification.info(data) + }) + // 接收后台手动推送消息 + connection.on('receiveNotice', (title, data) => { + ElNotification({ + type: 'info', + title: title, + message: data, + dangerouslyUseHTMLString: true, + duration: 0 + }) + webNotify({ title: title, body: data }) + }) + // 接收系统通知/公告 + connection.on('moreNotice', (data) => { + if (data.code == 200) { + useSocketStore().setNoticeList(data.data) + } + }) + + // 接收在线用户 + // connection.on('onlineUser', (data) => { + // useSocketStore().setOnlineUsers(data) + // }) + + // 接收聊天数据 + connection.on('receiveChat', (data) => { + const title = `来自${data.userName}的消息通知` + ElNotification({ + title: title, + message: data.message, + type: 'success', + duration: 0 + }) + + webNotify({ title: title, body: data.message }) + }) + } +} diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..b667bc3 --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,98 @@ +/** + * 判断url是否是http或https + * @param {string} path + * @returns {Boolean} + */ +export function isHttp(url) { + if (url) { + return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1 + } + return false +} + +/** + * 判断path是否为外链 + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param {string} url + * @returns {Boolean} + */ +export function validURL(url) { + const reg = + /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validLowerCase(str) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUpperCase(str) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validAlphabets(str) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param {string} email + * @returns {Boolean} + */ +export function validEmail(email) { + const reg = + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function isString(str) { + if (typeof str === 'string' || str instanceof String) { + return true + } + return false +} + +/** + * @param {Array} arg + * @returns {Boolean} + */ +export function isArray(arg) { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} diff --git a/src/utils/wartermark.js b/src/utils/wartermark.js new file mode 100644 index 0000000..5d97e2a --- /dev/null +++ b/src/utils/wartermark.js @@ -0,0 +1,62 @@ +export const getmark = () => { + const setWatermark = (str) => { + const id = "1.23452384164.123412416"; + + if (document.getElementById(id) !== null) { + document.body.removeChild(document.getElementById(id)); + } + + //创建一个画布 + const can = document.createElement("canvas"); + //设置画布的长宽 + can.width = 150; + can.height = 120; + + const cans = can.getContext("2d"); + //旋转角度 + cans.rotate((-15 * Math.PI) / 180); + cans.font = "18px Vedana"; + //设置填充绘画的颜色、渐变或者模式 + cans.fillStyle = "rgba(200, 200, 200, 0.40)"; + //设置文本内容的当前对齐方式 + cans.textAlign = "left"; + //设置在绘制文本时使用的当前文本基线 + // cans.textBaseline = "Middle"; + //在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置) + cans.fillText(str, can.width / 8, can.height / 2); + + const div = document.createElement("div"); + div.id = id; + div.style.pointerEvents = "none"; + div.style.top = "30px"; + div.style.left = "0px"; + div.style.position = "fixed"; + div.style.zIndex = "100000"; + div.style.width = document.documentElement.clientWidth + "px"; + div.style.height = document.documentElement.clientHeight + "px"; + div.style.background = + "url(" + can.toDataURL("image/png") + ") left top repeat"; + document.body.appendChild(div); + return id; + }; + + // 该方法只允许调用一次 + const watermark = (str) => { + let id = setWatermark(str); + setInterval(() => { + if (document.getElementById(id) === null) { + id = setWatermark(str); + } + }, 500); + window.onresize = () => { + setWatermark(str); + }; + }; + const removeWatermark = () => { + const id = "1.23452384164.123412416"; + if (document.getElementById(id) !== null) { + document.body.removeChild(document.getElementById(id)); + } + } + return { setWatermark, watermark, removeWatermark }; +}; \ No newline at end of file diff --git a/src/views/business/customers/components/AddDialog.vue b/src/views/business/customers/components/AddDialog.vue new file mode 100644 index 0000000..09918f6 --- /dev/null +++ b/src/views/business/customers/components/AddDialog.vue @@ -0,0 +1,126 @@ + + + + \ No newline at end of file diff --git a/src/views/business/customers/components/DetailDialog.vue b/src/views/business/customers/components/DetailDialog.vue new file mode 100644 index 0000000..2149cc2 --- /dev/null +++ b/src/views/business/customers/components/DetailDialog.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/business/customers/components/EditDialog.vue b/src/views/business/customers/components/EditDialog.vue new file mode 100644 index 0000000..7910cd1 --- /dev/null +++ b/src/views/business/customers/components/EditDialog.vue @@ -0,0 +1,145 @@ + + + diff --git a/src/views/business/customers/index.vue b/src/views/business/customers/index.vue new file mode 100644 index 0000000..792dde3 --- /dev/null +++ b/src/views/business/customers/index.vue @@ -0,0 +1,178 @@ + + + diff --git a/src/views/business/payments/components/AddDialog.vue b/src/views/business/payments/components/AddDialog.vue new file mode 100644 index 0000000..cecc29f --- /dev/null +++ b/src/views/business/payments/components/AddDialog.vue @@ -0,0 +1,144 @@ + + + + \ No newline at end of file diff --git a/src/views/business/payments/components/DetailDialog.vue b/src/views/business/payments/components/DetailDialog.vue new file mode 100644 index 0000000..f8c5cca --- /dev/null +++ b/src/views/business/payments/components/DetailDialog.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/business/payments/components/EditDialog.vue b/src/views/business/payments/components/EditDialog.vue new file mode 100644 index 0000000..b71469c --- /dev/null +++ b/src/views/business/payments/components/EditDialog.vue @@ -0,0 +1,168 @@ + + + diff --git a/src/views/business/payments/index.vue b/src/views/business/payments/index.vue new file mode 100644 index 0000000..4e4eef5 --- /dev/null +++ b/src/views/business/payments/index.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/views/components/CommonMenu/index.vue b/src/views/components/CommonMenu/index.vue new file mode 100644 index 0000000..5aff0a6 --- /dev/null +++ b/src/views/components/CommonMenu/index.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/views/components/dictData.vue b/src/views/components/dictData.vue new file mode 100644 index 0000000..5246ff3 --- /dev/null +++ b/src/views/components/dictData.vue @@ -0,0 +1,354 @@ + + diff --git a/src/views/components/icons/index.vue b/src/views/components/icons/index.vue new file mode 100644 index 0000000..8a28fe1 --- /dev/null +++ b/src/views/components/icons/index.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/views/components/starBackground.vue b/src/views/components/starBackground.vue new file mode 100644 index 0000000..8456a24 --- /dev/null +++ b/src/views/components/starBackground.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/dashboard/BarChart.vue b/src/views/dashboard/BarChart.vue new file mode 100644 index 0000000..91335e0 --- /dev/null +++ b/src/views/dashboard/BarChart.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/dashboard/LineChart.vue b/src/views/dashboard/LineChart.vue new file mode 100644 index 0000000..5bbb456 --- /dev/null +++ b/src/views/dashboard/LineChart.vue @@ -0,0 +1,121 @@ + + + diff --git a/src/views/dashboard/PanelGroup.vue b/src/views/dashboard/PanelGroup.vue new file mode 100644 index 0000000..847ef74 --- /dev/null +++ b/src/views/dashboard/PanelGroup.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/views/dashboard/PieChart.vue b/src/views/dashboard/PieChart.vue new file mode 100644 index 0000000..b06bdf2 --- /dev/null +++ b/src/views/dashboard/PieChart.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/views/dashboard/RaddarChart.vue b/src/views/dashboard/RaddarChart.vue new file mode 100644 index 0000000..1d9dd30 --- /dev/null +++ b/src/views/dashboard/RaddarChart.vue @@ -0,0 +1,115 @@ + + + diff --git a/src/views/dashboard/WordCloud.vue b/src/views/dashboard/WordCloud.vue new file mode 100644 index 0000000..9b9bbb5 --- /dev/null +++ b/src/views/dashboard/WordCloud.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/views/error/401.vue b/src/views/error/401.vue new file mode 100644 index 0000000..1ba3792 --- /dev/null +++ b/src/views/error/401.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/error/404.vue b/src/views/error/404.vue new file mode 100644 index 0000000..f205303 --- /dev/null +++ b/src/views/error/404.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..fd040bf --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/login.vue b/src/views/login.vue new file mode 100644 index 0000000..9e61228 --- /dev/null +++ b/src/views/login.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/views/monitor/cache/index.vue b/src/views/monitor/cache/index.vue new file mode 100644 index 0000000..b0e2744 --- /dev/null +++ b/src/views/monitor/cache/index.vue @@ -0,0 +1,195 @@ + + + diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue new file mode 100644 index 0000000..fab5cbd --- /dev/null +++ b/src/views/monitor/job/index.vue @@ -0,0 +1,660 @@ + + + diff --git a/src/views/monitor/job/log.vue b/src/views/monitor/job/log.vue new file mode 100644 index 0000000..be63b78 --- /dev/null +++ b/src/views/monitor/job/log.vue @@ -0,0 +1,260 @@ + + + diff --git a/src/views/monitor/logininfor/index.vue b/src/views/monitor/logininfor/index.vue new file mode 100644 index 0000000..dfaf2f8 --- /dev/null +++ b/src/views/monitor/logininfor/index.vue @@ -0,0 +1,186 @@ + + + diff --git a/src/views/monitor/onlineuser/index.vue b/src/views/monitor/onlineuser/index.vue new file mode 100644 index 0000000..9465ef4 --- /dev/null +++ b/src/views/monitor/onlineuser/index.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue new file mode 100644 index 0000000..aca155a --- /dev/null +++ b/src/views/monitor/operlog/index.vue @@ -0,0 +1,337 @@ + + + diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue new file mode 100644 index 0000000..279f814 --- /dev/null +++ b/src/views/monitor/server/index.vue @@ -0,0 +1,299 @@ + + + + diff --git a/src/views/redirect/index.vue b/src/views/redirect/index.vue new file mode 100644 index 0000000..ff34a98 --- /dev/null +++ b/src/views/redirect/index.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/views/register.vue b/src/views/register.vue new file mode 100644 index 0000000..6029890 --- /dev/null +++ b/src/views/register.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/views/socialLogin.vue b/src/views/socialLogin.vue new file mode 100644 index 0000000..bc0b0e7 --- /dev/null +++ b/src/views/socialLogin.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/views/system/commonLang/index.vue b/src/views/system/commonLang/index.vue new file mode 100644 index 0000000..08d9f1d --- /dev/null +++ b/src/views/system/commonLang/index.vue @@ -0,0 +1,418 @@ + + + + diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue new file mode 100644 index 0000000..81d193c --- /dev/null +++ b/src/views/system/config/index.vue @@ -0,0 +1,258 @@ + + + diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue new file mode 100644 index 0000000..60ddf02 --- /dev/null +++ b/src/views/system/dept/index.vue @@ -0,0 +1,289 @@ + + + diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue new file mode 100644 index 0000000..27cafa9 --- /dev/null +++ b/src/views/system/dict/index.vue @@ -0,0 +1,323 @@ + + + diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue new file mode 100644 index 0000000..0b9b1c2 --- /dev/null +++ b/src/views/system/menu/index.vue @@ -0,0 +1,566 @@ + + + diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue new file mode 100644 index 0000000..38bd0b1 --- /dev/null +++ b/src/views/system/notice/index.vue @@ -0,0 +1,250 @@ + + + diff --git a/src/views/system/oauth/thirdAccount.vue b/src/views/system/oauth/thirdAccount.vue new file mode 100644 index 0000000..78a0c80 --- /dev/null +++ b/src/views/system/oauth/thirdAccount.vue @@ -0,0 +1,358 @@ + + + + diff --git a/src/views/system/post/index.vue b/src/views/system/post/index.vue new file mode 100644 index 0000000..8e106bf --- /dev/null +++ b/src/views/system/post/index.vue @@ -0,0 +1,251 @@ + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..0c5047b --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,616 @@ + + + + diff --git a/src/views/system/roleusers/index.vue b/src/views/system/roleusers/index.vue new file mode 100644 index 0000000..dbac283 --- /dev/null +++ b/src/views/system/roleusers/index.vue @@ -0,0 +1,300 @@ + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..aa25851 --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,580 @@ + + + diff --git a/src/views/system/user/profile/index.vue b/src/views/system/user/profile/index.vue new file mode 100644 index 0000000..e6ad942 --- /dev/null +++ b/src/views/system/user/profile/index.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/views/system/user/profile/operLog.vue b/src/views/system/user/profile/operLog.vue new file mode 100644 index 0000000..b1bcdaf --- /dev/null +++ b/src/views/system/user/profile/operLog.vue @@ -0,0 +1,122 @@ + + + diff --git a/src/views/system/user/profile/resetPwd.vue b/src/views/system/user/profile/resetPwd.vue new file mode 100644 index 0000000..dcb6463 --- /dev/null +++ b/src/views/system/user/profile/resetPwd.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/views/system/user/profile/userAvatar.vue b/src/views/system/user/profile/userAvatar.vue new file mode 100644 index 0000000..148e1e0 --- /dev/null +++ b/src/views/system/user/profile/userAvatar.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/src/views/system/user/profile/userInfo.vue b/src/views/system/user/profile/userInfo.vue new file mode 100644 index 0000000..1625e6a --- /dev/null +++ b/src/views/system/user/profile/userInfo.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/views/tool/build/index.vue b/src/views/tool/build/index.vue new file mode 100644 index 0000000..d07effb --- /dev/null +++ b/src/views/tool/build/index.vue @@ -0,0 +1,15 @@ + + diff --git a/src/views/tool/email/sendEmail.vue b/src/views/tool/email/sendEmail.vue new file mode 100644 index 0000000..d3083ad --- /dev/null +++ b/src/views/tool/email/sendEmail.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/views/tool/file/index.vue b/src/views/tool/file/index.vue new file mode 100644 index 0000000..2cd6eee --- /dev/null +++ b/src/views/tool/file/index.vue @@ -0,0 +1,418 @@ + + + diff --git a/src/views/tool/gen/basicInfoForm.vue b/src/views/tool/gen/basicInfoForm.vue new file mode 100644 index 0000000..695e995 --- /dev/null +++ b/src/views/tool/gen/basicInfoForm.vue @@ -0,0 +1,46 @@ + + diff --git a/src/views/tool/gen/editTable.vue b/src/views/tool/gen/editTable.vue new file mode 100644 index 0000000..de782f3 --- /dev/null +++ b/src/views/tool/gen/editTable.vue @@ -0,0 +1,300 @@ + + diff --git a/src/views/tool/gen/genInfoForm.vue b/src/views/tool/gen/genInfoForm.vue new file mode 100644 index 0000000..6e89d13 --- /dev/null +++ b/src/views/tool/gen/genInfoForm.vue @@ -0,0 +1,426 @@ + + + diff --git a/src/views/tool/gen/importTable.vue b/src/views/tool/gen/importTable.vue new file mode 100644 index 0000000..7a5f4ef --- /dev/null +++ b/src/views/tool/gen/importTable.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/tool/gen/index.vue b/src/views/tool/gen/index.vue new file mode 100644 index 0000000..ba77b06 --- /dev/null +++ b/src/views/tool/gen/index.vue @@ -0,0 +1,346 @@ + + + + diff --git a/src/views/tool/swagger/index.vue b/src/views/tool/swagger/index.vue new file mode 100644 index 0000000..0e82527 --- /dev/null +++ b/src/views/tool/swagger/index.vue @@ -0,0 +1,30 @@ +