From 7e12dbb545ed4cd0253c1c570f380ac569ff1248 Mon Sep 17 00:00:00 2001 From: wangzenghua <1048523306@qq.com> Date: Thu, 13 Feb 2025 07:06:39 +0000 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/package.json | 1 + main/src/apis/login.js | 99 +- main/src/assets/fonts/demo.css | 539 ------ main/src/assets/fonts/demo_index.html | 1499 ----------------- main/src/assets/fonts/iconfont.css | 14 - main/src/assets/fonts/iconfont.js | 1 - main/src/assets/fonts/iconfont.json | 408 ----- main/src/assets/fonts/iconfont.ttf | Bin 21124 -> 0 bytes main/src/assets/fonts/iconfont.woff | Bin 14252 -> 0 bytes main/src/assets/fonts/iconfont.woff2 | Bin 12320 -> 0 bytes main/src/assets/svgs/tree.svg | 1 - main/src/assets/svgs/wechat.svg | 1 - .../components/custom-import-excel/index.vue | 2 +- main/src/config/index.js | 12 + main/src/main.js | 2 +- main/src/micro/actions.js | 1 + main/src/micro/app.js | 16 +- main/src/store/modules/setting.js | 52 - main/src/store/modules/tagsView.js | 104 -- main/src/store/modules/user.js | 8 +- main/src/styles/common/base.scss | 3 +- main/src/styles/global.scss | 14 +- main/src/utils/axios.js | 16 +- main/src/utils/echarts.js | 5 +- main/src/utils/index.js | 295 +--- main/src/utils/permission.js | 3 +- main/src/utils/validate.js | 8 + main/src/views/index.vue | 5 +- main/src/views/login/index.vue | 205 ++- main/yarn.lock | 5 + sub-admin/src/views/login.vue | 10 +- 31 files changed, 377 insertions(+), 2952 deletions(-) delete mode 100644 main/src/assets/fonts/demo.css delete mode 100644 main/src/assets/fonts/demo_index.html delete mode 100644 main/src/assets/fonts/iconfont.css delete mode 100644 main/src/assets/fonts/iconfont.js delete mode 100644 main/src/assets/fonts/iconfont.json delete mode 100644 main/src/assets/fonts/iconfont.ttf delete mode 100644 main/src/assets/fonts/iconfont.woff delete mode 100644 main/src/assets/fonts/iconfont.woff2 delete mode 100644 main/src/assets/svgs/tree.svg delete mode 100644 main/src/assets/svgs/wechat.svg delete mode 100644 main/src/store/modules/tagsView.js diff --git a/main/package.json b/main/package.json index 73cb015..ae10afe 100644 --- a/main/package.json +++ b/main/package.json @@ -25,6 +25,7 @@ "file-saver": "^2.0.5", "js-base64": "^3.7.7", "js-cookie": "^3.0.5", + "jsencrypt": "^3.3.2", "jszip": "^3.10.1", "jszip-utils": "^0.1.0", "lib-flexible-computer": "^1.0.2", diff --git a/main/src/apis/login.js b/main/src/apis/login.js index c8a7abd..6087c83 100644 --- a/main/src/apis/login.js +++ b/main/src/apis/login.js @@ -1,33 +1,94 @@ import request from '@/utils/axios'; -/** - * @Title: 登录 - */ -export function Login(data, token) { - return request('/self/login', { +// 登录方法 +export function Login(data) { + return request({ + url: '/auth/login', + headers: { + isToken: false, + repeatSubmit: false, + }, method: 'POST', data, + }); +} + +// 注册方法 +export function register(data) { + return request({ + url: '/auth/register', headers: { - 'Fairies-Captcha-Token': token, + isToken: false, }, + method: 'post', + data: data, }); } -/** - * @Title: 登出 - */ -export function LogOut() { - return request('/self/logout', { - method: 'POST', +// 刷新方法 +export function refreshToken() { + return request({ + url: '/auth/refresh', + method: 'post', }); } -/** - * @Title: 验证码 - */ -export function GetCaptcha() { - return request('/self/captcha', { - method: 'GET', - responseType: 'arraybuffer', +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/system/user/getInfo', + method: 'get', }); } + +// 退出方法 +export function logout() { + return request({ + url: '/auth/logout', + method: 'delete', + }); +} + +// 获取验证码 +export function GetCodeImg() { + return request({ + url: '/code', + headers: { + isToken: false, + }, + method: 'get', + timeout: 20000, + }); +} + +// /** +// * @Title: 登录 +// */ +// export function Login(data, token) { +// return request('/self/login', { +// method: 'POST', +// data, +// headers: { +// 'Fairies-Captcha-Token': token, +// }, +// }); +// } + +// /** +// * @Title: 登出 +// */ +// export function LogOut() { +// return request('/self/logout', { +// method: 'POST', +// }); +// } + +// /** +// * @Title: 验证码 +// */ +// export function GetCaptcha() { +// return request('/self/captcha', { +// method: 'GET', +// responseType: 'arraybuffer', +// }); +// } diff --git a/main/src/assets/fonts/demo.css b/main/src/assets/fonts/demo.css deleted file mode 100644 index a67054a..0000000 --- a/main/src/assets/fonts/demo.css +++ /dev/null @@ -1,539 +0,0 @@ -/* Logo 字体 */ -@font-face { - font-family: "iconfont logo"; - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); -} - -.logo { - font-family: "iconfont logo"; - font-size: 160px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* tabs */ -.nav-tabs { - position: relative; -} - -.nav-tabs .nav-more { - position: absolute; - right: 0; - bottom: 0; - height: 42px; - line-height: 42px; - color: #666; -} - -#tabs { - border-bottom: 1px solid #eee; -} - -#tabs li { - cursor: pointer; - width: 100px; - height: 40px; - line-height: 40px; - text-align: center; - font-size: 16px; - border-bottom: 2px solid transparent; - position: relative; - z-index: 1; - margin-bottom: -1px; - color: #666; -} - - -#tabs .active { - border-bottom-color: #f00; - color: #222; -} - -.tab-container .content { - display: none; -} - -/* 页面布局 */ -.main { - padding: 30px 100px; - width: 960px; - margin: 0 auto; -} - -.main .logo { - color: #333; - text-align: left; - margin-bottom: 30px; - line-height: 1; - height: 110px; - margin-top: -50px; - overflow: hidden; - *zoom: 1; -} - -.main .logo a { - font-size: 160px; - color: #333; -} - -.helps { - margin-top: 40px; -} - -.helps pre { - padding: 20px; - margin: 10px 0; - border: solid 1px #e7e1cd; - background-color: #fffdef; - overflow: auto; -} - -.icon_lists { - width: 100% !important; - overflow: hidden; - *zoom: 1; -} - -.icon_lists li { - width: 100px; - margin-bottom: 10px; - margin-right: 20px; - text-align: center; - list-style: none !important; - cursor: default; -} - -.icon_lists li .code-name { - line-height: 1.2; -} - -.icon_lists .icon { - display: block; - height: 100px; - line-height: 100px; - font-size: 42px; - margin: 10px auto; - color: #333; - -webkit-transition: font-size 0.25s linear, width 0.25s linear; - -moz-transition: font-size 0.25s linear, width 0.25s linear; - transition: font-size 0.25s linear, width 0.25s linear; -} - -.icon_lists .icon:hover { - font-size: 100px; -} - -.icon_lists .svg-icon { - /* 通过设置 font-size 来改变图标大小 */ - width: 1em; - /* 图标和文字相邻时,垂直对齐 */ - vertical-align: -0.15em; - /* 通过设置 color 来改变 SVG 的颜色/fill */ - fill: currentColor; - /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 - normalize.css 中也包含这行 */ - overflow: hidden; -} - -.icon_lists li .name, -.icon_lists li .code-name { - color: #666; -} - -/* markdown 样式 */ -.markdown { - color: #666; - font-size: 14px; - line-height: 1.8; -} - -.highlight { - line-height: 1.5; -} - -.markdown img { - vertical-align: middle; - max-width: 100%; -} - -.markdown h1 { - color: #404040; - font-weight: 500; - line-height: 40px; - margin-bottom: 24px; -} - -.markdown h2, -.markdown h3, -.markdown h4, -.markdown h5, -.markdown h6 { - color: #404040; - margin: 1.6em 0 0.6em 0; - font-weight: 500; - clear: both; -} - -.markdown h1 { - font-size: 28px; -} - -.markdown h2 { - font-size: 22px; -} - -.markdown h3 { - font-size: 16px; -} - -.markdown h4 { - font-size: 14px; -} - -.markdown h5 { - font-size: 12px; -} - -.markdown h6 { - font-size: 12px; -} - -.markdown hr { - height: 1px; - border: 0; - background: #e9e9e9; - margin: 16px 0; - clear: both; -} - -.markdown p { - margin: 1em 0; -} - -.markdown>p, -.markdown>blockquote, -.markdown>.highlight, -.markdown>ol, -.markdown>ul { - width: 80%; -} - -.markdown ul>li { - list-style: circle; -} - -.markdown>ul li, -.markdown blockquote ul>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown>ul li p, -.markdown>ol li p { - margin: 0.6em 0; -} - -.markdown ol>li { - list-style: decimal; -} - -.markdown>ol li, -.markdown blockquote ol>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown code { - margin: 0 3px; - padding: 0 5px; - background: #eee; - border-radius: 3px; -} - -.markdown strong, -.markdown b { - font-weight: 600; -} - -.markdown>table { - border-collapse: collapse; - border-spacing: 0px; - empty-cells: show; - border: 1px solid #e9e9e9; - width: 95%; - margin-bottom: 24px; -} - -.markdown>table th { - white-space: nowrap; - color: #333; - font-weight: 600; -} - -.markdown>table th, -.markdown>table td { - border: 1px solid #e9e9e9; - padding: 8px 16px; - text-align: left; -} - -.markdown>table th { - background: #F7F7F7; -} - -.markdown blockquote { - font-size: 90%; - color: #999; - border-left: 4px solid #e9e9e9; - padding-left: 0.8em; - margin: 1em 0; -} - -.markdown blockquote p { - margin: 0; -} - -.markdown .anchor { - opacity: 0; - transition: opacity 0.3s ease; - margin-left: 8px; -} - -.markdown .waiting { - color: #ccc; -} - -.markdown h1:hover .anchor, -.markdown h2:hover .anchor, -.markdown h3:hover .anchor, -.markdown h4:hover .anchor, -.markdown h5:hover .anchor, -.markdown h6:hover .anchor { - opacity: 1; - display: inline-block; -} - -.markdown>br, -.markdown>p>br { - clear: both; -} - - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #795da3; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} - -/* 代码高亮 */ -/* PrismJS 1.15.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ -code[class*="language-"], -pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -:not(pre)>code[class*="language-"], -pre[class*="language-"] { - background: #f5f2f0; -} - -/* Inline code */ -:not(pre)>code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - -.token.function, -.token.class-name { - color: #DD4A68; -} - -.token.regex, -.token.important, -.token.variable { - color: #e90; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/main/src/assets/fonts/demo_index.html b/main/src/assets/fonts/demo_index.html deleted file mode 100644 index ae15889..0000000 --- a/main/src/assets/fonts/demo_index.html +++ /dev/null @@ -1,1499 +0,0 @@ - - - - - iconfont Demo - - - - - - - - - - - - - -
-

- - -

- -
-
-
    - -
  • - -
    待付款
    -
    &#xe626;
    -
  • - -
  • - -
    已完成
    -
    &#xe60d;
    -
  • - -
  • - -
    修改密码
    -
    &#xe618;
    -
  • - -
  • - -
    待发货
    -
    &#xe622;
    -
  • - -
  • - -
    待收货
    -
    &#xe611;
    -
  • - -
  • - -
    品牌
    -
    &#xe60f;
    -
  • - -
  • - -
    商品规格
    -
    &#xe607;
    -
  • - -
  • - -
    退出
    -
    &#xe641;
    -
  • - -
  • - -
    商品类型
    -
    &#xe87f;
    -
  • - -
  • - -
    收货地址
    -
    &#xe666;
    -
  • - -
  • - -
    售后
    -
    &#xe63c;
    -
  • - -
  • - -
    商品分类
    -
    &#xe602;
    -
  • - -
  • - -
    文章管理
    -
    &#xe662;
    -
  • - -
  • - -
    销售明细
    -
    &#xe60c;
    -
  • - -
  • - -
    销售明细
    -
    &#xe6be;
    -
  • - -
  • - -
    充值记录
    -
    &#xe614;
    -
  • - -
  • - -
    充值规则
    -
    &#xe628;
    -
  • - -
  • - -
    用户画像
    -
    &#xe783;
    -
  • - -
  • - -
    成就
    -
    &#xe616;
    -
  • - -
  • - -
    我的-段位
    -
    &#xe61a;
    -
  • - -
  • - -
    皮肤
    -
    &#xe790;
    -
  • - -
  • - -
    积分商城
    -
    &#xe996;
    -
  • - -
  • - -
    价值投资
    -
    &#xe661;
    -
  • - -
  • - -
    费用统计
    -
    &#xe632;
    -
  • - -
  • - -
    数据报表
    -
    &#xe64e;
    -
  • - -
  • - -
    游戏管理
    -
    &#xe6d0;
    -
  • - -
  • - -
    banner
    -
    &#xe613;
    -
  • - -
  • - -
    核销码核销
    -
    &#xe601;
    -
  • - -
  • - -
    结算管理
    -
    &#xe6b9;
    -
  • - -
  • - -
    退货退款
    -
    &#xe7af;
    -
  • - -
  • - -
    wechat
    -
    &#xe681;
    -
  • - -
  • - -
    alipay
    -
    &#xe61e;
    -
  • - -
  • - -
    会员
    -
    &#xe67f;
    -
  • - -
  • - -
    我的优惠券
    -
    &#xe65a;
    -
  • - -
  • - -
    会员等级
    -
    &#xe7d8;
    -
  • - -
  • - -
    活动
    -
    &#xe67b;
    -
  • - -
  • - -
    门店
    -
    &#xe60a;
    -
  • - -
  • - -
    会员
    -
    &#xe640;
    -
  • - -
  • - -
    会员充值
    -
    &#xe799;
    -
  • - -
  • - -
    营销
    -
    &#xe765;
    -
  • - -
  • - -
    商品规格
    -
    &#xe6d7;
    -
  • - -
  • - -
    商家入驻
    -
    &#xe62b;
    -
  • - -
  • - -
    小店商品库
    -
    &#xe6c6;
    -
  • - -
  • - -
    商家
    -
    &#xe64a;
    -
  • - -
  • - -
    订单
    -
    &#xe737;
    -
  • - -
  • - -
    权限
    -
    &#xe612;
    -
  • - -
  • - -
    商品
    -
    &#xe889;
    -
  • - -
  • - -
    菜单
    -
    &#xe60e;
    -
  • - -
  • - -
    字典类型
    -
    &#xe652;
    -
  • - -
  • - -
    字典
    -
    &#xe600;
    -
  • - -
  • - -
    角色
    -
    &#xe604;
    -
  • - -
  • - -
    全屏
    -
    &#xe8fa;
    -
  • - -
  • - -
    退出全屏
    -
    &#xe8fb;
    -
  • - -
  • - -
    表格
    -
    &#xe615;
    -
  • - -
  • - -
    测试
    -
    &#xe610;
    -
  • - -
  • - -
    中英文
    -
    &#xe649;
    -
  • - -
  • - -
    文字大小
    -
    &#xe660;
    -
  • - -
-
-

Unicode 引用

-
- -

Unicode 是字体在网页端最原始的应用方式,特点是:

-
    -
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • -
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • -
-
-

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

-
-

Unicode 使用步骤如下:

-

第一步:拷贝项目下面生成的 @font-face

-
@font-face {
-  font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1729754563434') format('woff2'),
-       url('iconfont.woff?t=1729754563434') format('woff'),
-       url('iconfont.ttf?t=1729754563434') format('truetype');
-}
-
-

第二步:定义使用 iconfont 的样式

-
.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-

第三步:挑选相应图标并获取字体编码,应用于页面

-
-<span class="iconfont">&#x33;</span>
-
-
-

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    - 待付款 -
    -
    .icon-pay -
    -
  • - -
  • - -
    - 已完成 -
    -
    .icon-complete -
    -
  • - -
  • - -
    - 修改密码 -
    -
    .icon-edit -
    -
  • - -
  • - -
    - 待发货 -
    -
    .icon-deliver -
    -
  • - -
  • - -
    - 待收货 -
    -
    .icon-receive -
    -
  • - -
  • - -
    - 品牌 -
    -
    .icon-brand -
    -
  • - -
  • - -
    - 商品规格 -
    -
    .icon-sku -
    -
  • - -
  • - -
    - 退出 -
    -
    .icon-exit -
    -
  • - -
  • - -
    - 商品类型 -
    -
    .icon-type -
    -
  • - -
  • - -
    - 收货地址 -
    -
    .icon-address -
    -
  • - -
  • - -
    - 售后 -
    -
    .icon-post-sale -
    -
  • - -
  • - -
    - 商品分类 -
    -
    .icon-category -
    -
  • - -
  • - -
    - 文章管理 -
    -
    .icon-article -
    -
  • - -
  • - -
    - 销售明细 -
    -
    .icon-data4 -
    -
  • - -
  • - -
    - 销售明细 -
    -
    .icon-data5 -
    -
  • - -
  • - -
    - 充值记录 -
    -
    .icon-recharge-record -
    -
  • - -
  • - -
    - 充值规则 -
    -
    .icon-recharge-rule -
    -
  • - -
  • - -
    - 用户画像 -
    -
    .icon-user-profile -
    -
  • - -
  • - -
    - 成就 -
    -
    .icon-achieve -
    -
  • - -
  • - -
    - 我的-段位 -
    -
    .icon-activity-level -
    -
  • - -
  • - -
    - 皮肤 -
    -
    .icon-skins -
    -
  • - -
  • - -
    - 积分商城 -
    -
    .icon-data1 -
    -
  • - -
  • - -
    - 价值投资 -
    -
    .icon-data2 -
    -
  • - -
  • - -
    - 费用统计 -
    -
    .icon-data3 -
    -
  • - -
  • - -
    - 数据报表 -
    -
    .icon-data -
    -
  • - -
  • - -
    - 游戏管理 -
    -
    .icon-game -
    -
  • - -
  • - -
    - banner -
    -
    .icon-banner -
    -
  • - -
  • - -
    - 核销码核销 -
    -
    .icon-verification -
    -
  • - -
  • - -
    - 结算管理 -
    -
    .icon-balance -
    -
  • - -
  • - -
    - 退货退款 -
    -
    .icon-refund -
    -
  • - -
  • - -
    - wechat -
    -
    .icon-wechat -
    -
  • - -
  • - -
    - alipay -
    -
    .icon-alipay -
    -
  • - -
  • - -
    - 会员 -
    -
    .icon-user -
    -
  • - -
  • - -
    - 我的优惠券 -
    -
    .icon-coupon -
    -
  • - -
  • - -
    - 会员等级 -
    -
    .icon-level -
    -
  • - -
  • - -
    - 活动 -
    -
    .icon-activity -
    -
  • - -
  • - -
    - 门店 -
    -
    .icon-shop -
    -
  • - -
  • - -
    - 会员 -
    -
    .icon-member -
    -
  • - -
  • - -
    - 会员充值 -
    -
    .icon-recharge -
    -
  • - -
  • - -
    - 营销 -
    -
    .icon-marketing -
    -
  • - -
  • - -
    - 商品规格 -
    -
    .icon-goods-sku -
    -
  • - -
  • - -
    - 商家入驻 -
    -
    .icon-store -
    -
  • - -
  • - -
    - 小店商品库 -
    -
    .icon-goods-store -
    -
  • - -
  • - -
    - 商家 -
    -
    .icon-storer -
    -
  • - -
  • - -
    - 订单 -
    -
    .icon-order -
    -
  • - -
  • - -
    - 权限 -
    -
    .icon-permission -
    -
  • - -
  • - -
    - 商品 -
    -
    .icon-goods -
    -
  • - -
  • - -
    - 菜单 -
    -
    .icon-menu -
    -
  • - -
  • - -
    - 字典类型 -
    -
    .icon-dict-type -
    -
  • - -
  • - -
    - 字典 -
    -
    .icon-dictionary -
    -
  • - -
  • - -
    - 角色 -
    -
    .icon-role -
    -
  • - -
  • - -
    - 全屏 -
    -
    .icon-fullscreen -
    -
  • - -
  • - -
    - 退出全屏 -
    -
    .icon-exit-fullscreen -
    -
  • - -
  • - -
    - 表格 -
    -
    .icon-table -
    -
  • - -
  • - -
    - 测试 -
    -
    .icon-test -
    -
  • - -
  • - -
    - 中英文 -
    -
    .icon-lang -
    -
  • - -
  • - -
    - 文字大小 -
    -
    .icon-size -
    -
  • - -
-
-

font-class 引用

-
- -

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

-

与 Unicode 使用方式相比,具有如下特点:

-
    -
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • -
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 fontclass 代码:

-
<link rel="stylesheet" href="./iconfont.css">
-
-

第二步:挑选相应图标并获取类名,应用于页面:

-
<span class="iconfont icon-xxx"></span>
-
-
-

" - iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    待付款
    -
    #icon-pay
    -
  • - -
  • - -
    已完成
    -
    #icon-complete
    -
  • - -
  • - -
    修改密码
    -
    #icon-edit
    -
  • - -
  • - -
    待发货
    -
    #icon-deliver
    -
  • - -
  • - -
    待收货
    -
    #icon-receive
    -
  • - -
  • - -
    品牌
    -
    #icon-brand
    -
  • - -
  • - -
    商品规格
    -
    #icon-sku
    -
  • - -
  • - -
    退出
    -
    #icon-exit
    -
  • - -
  • - -
    商品类型
    -
    #icon-type
    -
  • - -
  • - -
    收货地址
    -
    #icon-address
    -
  • - -
  • - -
    售后
    -
    #icon-post-sale
    -
  • - -
  • - -
    商品分类
    -
    #icon-category
    -
  • - -
  • - -
    文章管理
    -
    #icon-article
    -
  • - -
  • - -
    销售明细
    -
    #icon-data4
    -
  • - -
  • - -
    销售明细
    -
    #icon-data5
    -
  • - -
  • - -
    充值记录
    -
    #icon-recharge-record
    -
  • - -
  • - -
    充值规则
    -
    #icon-recharge-rule
    -
  • - -
  • - -
    用户画像
    -
    #icon-user-profile
    -
  • - -
  • - -
    成就
    -
    #icon-achieve
    -
  • - -
  • - -
    我的-段位
    -
    #icon-activity-level
    -
  • - -
  • - -
    皮肤
    -
    #icon-skins
    -
  • - -
  • - -
    积分商城
    -
    #icon-data1
    -
  • - -
  • - -
    价值投资
    -
    #icon-data2
    -
  • - -
  • - -
    费用统计
    -
    #icon-data3
    -
  • - -
  • - -
    数据报表
    -
    #icon-data
    -
  • - -
  • - -
    游戏管理
    -
    #icon-game
    -
  • - -
  • - -
    banner
    -
    #icon-banner
    -
  • - -
  • - -
    核销码核销
    -
    #icon-verification
    -
  • - -
  • - -
    结算管理
    -
    #icon-balance
    -
  • - -
  • - -
    退货退款
    -
    #icon-refund
    -
  • - -
  • - -
    wechat
    -
    #icon-wechat
    -
  • - -
  • - -
    alipay
    -
    #icon-alipay
    -
  • - -
  • - -
    会员
    -
    #icon-user
    -
  • - -
  • - -
    我的优惠券
    -
    #icon-coupon
    -
  • - -
  • - -
    会员等级
    -
    #icon-level
    -
  • - -
  • - -
    活动
    -
    #icon-activity
    -
  • - -
  • - -
    门店
    -
    #icon-shop
    -
  • - -
  • - -
    会员
    -
    #icon-member
    -
  • - -
  • - -
    会员充值
    -
    #icon-recharge
    -
  • - -
  • - -
    营销
    -
    #icon-marketing
    -
  • - -
  • - -
    商品规格
    -
    #icon-goods-sku
    -
  • - -
  • - -
    商家入驻
    -
    #icon-store
    -
  • - -
  • - -
    小店商品库
    -
    #icon-goods-store
    -
  • - -
  • - -
    商家
    -
    #icon-storer
    -
  • - -
  • - -
    订单
    -
    #icon-order
    -
  • - -
  • - -
    权限
    -
    #icon-permission
    -
  • - -
  • - -
    商品
    -
    #icon-goods
    -
  • - -
  • - -
    菜单
    -
    #icon-menu
    -
  • - -
  • - -
    字典类型
    -
    #icon-dict-type
    -
  • - -
  • - -
    字典
    -
    #icon-dictionary
    -
  • - -
  • - -
    角色
    -
    #icon-role
    -
  • - -
  • - -
    全屏
    -
    #icon-fullscreen
    -
  • - -
  • - -
    退出全屏
    -
    #icon-exit-fullscreen
    -
  • - -
  • - -
    表格
    -
    #icon-table
    -
  • - -
  • - -
    测试
    -
    #icon-test
    -
  • - -
  • - -
    中英文
    -
    #icon-lang
    -
  • - -
  • - -
    文字大小
    -
    #icon-size
    -
  • - -
-
-

Symbol 引用

-
- -

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 - 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

-
    -
  • 支持多色图标了,不再受单色限制。
  • -
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • -
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • -
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 symbol 代码:

-
<script src="./iconfont.js"></script>
-
-

第二步:加入通用 CSS 代码(引入一次就行):

-
<style>
-.icon {
-  width: 1em;
-  height: 1em;
-  vertical-align: -0.15em;
-  fill: currentColor;
-  overflow: hidden;
-}
-</style>
-
-

第三步:挑选相应图标并获取类名,应用于页面:

-
<svg class="icon" aria-hidden="true">
-  <use xlink:href="#icon-xxx"></use>
-</svg>
-
-
-
- -
-
- - - diff --git a/main/src/assets/fonts/iconfont.css b/main/src/assets/fonts/iconfont.css deleted file mode 100644 index 67bf623..0000000 --- a/main/src/assets/fonts/iconfont.css +++ /dev/null @@ -1,14 +0,0 @@ -@font-face { - font-family: "iconfont"; /* Project id 4709068 */ - src: url('iconfont.woff2?t=1729754563434') format('woff2'), - url('iconfont.woff?t=1729754563434') format('woff'), - url('iconfont.ttf?t=1729754563434') format('truetype'); -} - -.iconfont { - font-family: "iconfont" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} diff --git a/main/src/assets/fonts/iconfont.js b/main/src/assets/fonts/iconfont.js deleted file mode 100644 index 23f2b9b..0000000 --- a/main/src/assets/fonts/iconfont.js +++ /dev/null @@ -1 +0,0 @@ -window._iconfont_svg_string_4709068='',(h=>{var c=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var a,v,t,z,o,i=function(c,l){l.parentNode.insertBefore(c,l)};if(c&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}a=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_4709068,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?i(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),a()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(t=a,z=h.document,o=!1,M(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}function m(){o||(o=!0,t())}function M(){try{z.documentElement.doScroll("left")}catch(c){return void setTimeout(M,50)}m()}})(window); \ No newline at end of file diff --git a/main/src/assets/fonts/iconfont.json b/main/src/assets/fonts/iconfont.json deleted file mode 100644 index 9e11264..0000000 --- a/main/src/assets/fonts/iconfont.json +++ /dev/null @@ -1,408 +0,0 @@ -{ - "id": "4709068", - "name": "sub-admin", - "font_family": "iconfont", - "css_prefix_text": "icon-", - "description": "react/vue项目后台管理平台", - "glyphs": [ - { - "icon_id": "588769", - "name": "待付款", - "font_class": "pay", - "unicode": "e626", - "unicode_decimal": 58918 - }, - { - "icon_id": "653976", - "name": "已完成", - "font_class": "complete", - "unicode": "e60d", - "unicode_decimal": 58893 - }, - { - "icon_id": "1001767", - "name": "修改密码", - "font_class": "edit", - "unicode": "e618", - "unicode_decimal": 58904 - }, - { - "icon_id": "1068811", - "name": "待发货", - "font_class": "deliver", - "unicode": "e622", - "unicode_decimal": 58914 - }, - { - "icon_id": "1313074", - "name": "待收货", - "font_class": "receive", - "unicode": "e611", - "unicode_decimal": 58897 - }, - { - "icon_id": "2121739", - "name": "品牌", - "font_class": "brand", - "unicode": "e60f", - "unicode_decimal": 58895 - }, - { - "icon_id": "2846231", - "name": "商品规格", - "font_class": "sku", - "unicode": "e607", - "unicode_decimal": 58887 - }, - { - "icon_id": "3978297", - "name": "退出", - "font_class": "exit", - "unicode": "e641", - "unicode_decimal": 58945 - }, - { - "icon_id": "8295386", - "name": "商品类型", - "font_class": "type", - "unicode": "e87f", - "unicode_decimal": 59519 - }, - { - "icon_id": "8875707", - "name": "收货地址", - "font_class": "address", - "unicode": "e666", - "unicode_decimal": 58982 - }, - { - "icon_id": "12797032", - "name": "售后", - "font_class": "post-sale", - "unicode": "e63c", - "unicode_decimal": 58940 - }, - { - "icon_id": "21673621", - "name": "商品分类", - "font_class": "category", - "unicode": "e602", - "unicode_decimal": 58882 - }, - { - "icon_id": "3703028", - "name": "文章管理", - "font_class": "article", - "unicode": "e662", - "unicode_decimal": 58978 - }, - { - "icon_id": "1218184", - "name": "销售明细", - "font_class": "data4", - "unicode": "e60c", - "unicode_decimal": 58892 - }, - { - "icon_id": "2230090", - "name": "销售明细", - "font_class": "data5", - "unicode": "e6be", - "unicode_decimal": 59070 - }, - { - "icon_id": "6882983", - "name": "充值记录", - "font_class": "recharge-record", - "unicode": "e614", - "unicode_decimal": 58900 - }, - { - "icon_id": "34611004", - "name": "充值规则", - "font_class": "recharge-rule", - "unicode": "e628", - "unicode_decimal": 58920 - }, - { - "icon_id": "15562252", - "name": "用户画像", - "font_class": "user-profile", - "unicode": "e783", - "unicode_decimal": 59267 - }, - { - "icon_id": "18747445", - "name": "成就", - "font_class": "achieve", - "unicode": "e616", - "unicode_decimal": 58902 - }, - { - "icon_id": "33848542", - "name": "我的-段位", - "font_class": "activity-level", - "unicode": "e61a", - "unicode_decimal": 58906 - }, - { - "icon_id": "20406821", - "name": "皮肤", - "font_class": "skins", - "unicode": "e790", - "unicode_decimal": 59280 - }, - { - "icon_id": "2214847", - "name": "积分商城", - "font_class": "data1", - "unicode": "e996", - "unicode_decimal": 59798 - }, - { - "icon_id": "14233304", - "name": "价值投资", - "font_class": "data2", - "unicode": "e661", - "unicode_decimal": 58977 - }, - { - "icon_id": "23059951", - "name": "费用统计", - "font_class": "data3", - "unicode": "e632", - "unicode_decimal": 58930 - }, - { - "icon_id": "2199049", - "name": "数据报表", - "font_class": "data", - "unicode": "e64e", - "unicode_decimal": 58958 - }, - { - "icon_id": "36257316", - "name": "游戏管理", - "font_class": "game", - "unicode": "e6d0", - "unicode_decimal": 59088 - }, - { - "icon_id": "11913396", - "name": "banner", - "font_class": "banner", - "unicode": "e613", - "unicode_decimal": 58899 - }, - { - "icon_id": "35264323", - "name": "核销码核销", - "font_class": "verification", - "unicode": "e601", - "unicode_decimal": 58881 - }, - { - "icon_id": "6514128", - "name": "结算管理", - "font_class": "balance", - "unicode": "e6b9", - "unicode_decimal": 59065 - }, - { - "icon_id": "12025983", - "name": "退货退款", - "font_class": "refund", - "unicode": "e7af", - "unicode_decimal": 59311 - }, - { - "icon_id": "1207908", - "name": "wechat", - "font_class": "wechat", - "unicode": "e681", - "unicode_decimal": 59009 - }, - { - "icon_id": "27188513", - "name": "alipay", - "font_class": "alipay", - "unicode": "e61e", - "unicode_decimal": 58910 - }, - { - "icon_id": "11111017", - "name": "会员", - "font_class": "user", - "unicode": "e67f", - "unicode_decimal": 59007 - }, - { - "icon_id": "630079", - "name": "我的优惠券", - "font_class": "coupon", - "unicode": "e65a", - "unicode_decimal": 58970 - }, - { - "icon_id": "2046370", - "name": "会员等级", - "font_class": "level", - "unicode": "e7d8", - "unicode_decimal": 59352 - }, - { - "icon_id": "2569868", - "name": "活动", - "font_class": "activity", - "unicode": "e67b", - "unicode_decimal": 59003 - }, - { - "icon_id": "2681698", - "name": "门店", - "font_class": "shop", - "unicode": "e60a", - "unicode_decimal": 58890 - }, - { - "icon_id": "2811147", - "name": "会员", - "font_class": "member", - "unicode": "e640", - "unicode_decimal": 58944 - }, - { - "icon_id": "4560182", - "name": "会员充值", - "font_class": "recharge", - "unicode": "e799", - "unicode_decimal": 59289 - }, - { - "icon_id": "5880283", - "name": "营销", - "font_class": "marketing", - "unicode": "e765", - "unicode_decimal": 59237 - }, - { - "icon_id": "6982618", - "name": "商品规格", - "font_class": "goods-sku", - "unicode": "e6d7", - "unicode_decimal": 59095 - }, - { - "icon_id": "7307041", - "name": "商家入驻", - "font_class": "store", - "unicode": "e62b", - "unicode_decimal": 58923 - }, - { - "icon_id": "11639867", - "name": "小店商品库", - "font_class": "goods-store", - "unicode": "e6c6", - "unicode_decimal": 59078 - }, - { - "icon_id": "13872198", - "name": "商家", - "font_class": "storer", - "unicode": "e64a", - "unicode_decimal": 58954 - }, - { - "icon_id": "577335", - "name": "订单", - "font_class": "order", - "unicode": "e737", - "unicode_decimal": 59191 - }, - { - "icon_id": "736503", - "name": "权限", - "font_class": "permission", - "unicode": "e612", - "unicode_decimal": 58898 - }, - { - "icon_id": "1727271", - "name": "商品", - "font_class": "goods", - "unicode": "e889", - "unicode_decimal": 59529 - }, - { - "icon_id": "7587933", - "name": "菜单", - "font_class": "menu", - "unicode": "e60e", - "unicode_decimal": 58894 - }, - { - "icon_id": "12758820", - "name": "字典类型", - "font_class": "dict-type", - "unicode": "e652", - "unicode_decimal": 58962 - }, - { - "icon_id": "13768112", - "name": "字典", - "font_class": "dictionary", - "unicode": "e600", - "unicode_decimal": 58880 - }, - { - "icon_id": "37734141", - "name": "角色", - "font_class": "role", - "unicode": "e604", - "unicode_decimal": 58884 - }, - { - "icon_id": "1727563", - "name": "全屏", - "font_class": "fullscreen", - "unicode": "e8fa", - "unicode_decimal": 59642 - }, - { - "icon_id": "1727566", - "name": "退出全屏", - "font_class": "exit-fullscreen", - "unicode": "e8fb", - "unicode_decimal": 59643 - }, - { - "icon_id": "11641852", - "name": "表格", - "font_class": "table", - "unicode": "e615", - "unicode_decimal": 58901 - }, - { - "icon_id": "20104468", - "name": "测试", - "font_class": "test", - "unicode": "e610", - "unicode_decimal": 58896 - }, - { - "icon_id": "26686335", - "name": "中英文", - "font_class": "lang", - "unicode": "e649", - "unicode_decimal": 58953 - }, - { - "icon_id": "37702310", - "name": "文字大小", - "font_class": "size", - "unicode": "e660", - "unicode_decimal": 58976 - } - ] -} diff --git a/main/src/assets/fonts/iconfont.ttf b/main/src/assets/fonts/iconfont.ttf deleted file mode 100644 index b6cff56fe07d521cf490d7b566b097c11dfd65fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21124 zcmd^nd4L>MoqxSoS0B}9b$9iBA9EjlOlR&+GD&8VOil<12_cioOfn%ClL-)xkbtX# zu7W5U7CBbI6%-Uig>@k+qNt0ktLufDMYn^ixa)djy7K$Hsu@Vo-QWK4`|sCX@6~&+ zUcFcS-uM1~t2x4PoSi$)@m$x6jTbLTz9V-n$B{*7y=d*m&f-8|^%bbU6ZIXF`zH=1 z$jg^;9Q_u@iJ#rQ@96aB*6u}rtH5z1r}j)u>}r|3?I!d+jnuOT4VDiJFQWW8r0kyk zbJzSVdQQi9zd-$!eFrBeQrEa`9A{zUU$uYYnnPro%}s)+Cl5^QpK^a_;1e7-{w(I) zedyrfxgUC7!2RpmP~XJi+4tOv)x#GOF53s-}(3IE@vbLaljSfcjkIsS6LzjW`Pwc+`V zwuSTg&yOAXv;Onfal#q`qB#z5!n)D3=30>7p_Q#l8_w8GvjU7Z>qP}i}iu};`++^n)-(NrS+Zl>H2l`8|x?PPu8EVKUaUT{+%<` zGgD`7K6BfdlV=`1^W9f&eC3u`{`9ju&jDKM-29lzUl_AiADbU@$Ny@~*UT~T#Q!fp z1iydN{C6++=ihzYf%)$&_rLkh;o*v0lvB78Cv!Q@3DE5VlvlCF9bANSb3L4j9q@5U z><-~PTniTj70Lq}7GZBfTsQEpm(w^0b}7rHxC9sDTwE*gtC?%(nm8}#=L%e$%Wzh% zlPhx-E&y<6c=Z4KM_~&<8NFqnUIu?=!j5otz&=aZ8?FuvVhOth2sIP-i>u3K!p?DZ z;0R0DL$1#HvC*A4JIutWWu4WLu)|#4WhO?^>TWY(*SWgKObjpUUNZp_xVma4zyw$K znF-Lr)%|7yoN#sQEK7hGt`5Gy62t9!*i3*Tt{yiN;EAiJ&BXA&o;MT2`FfL?0Bu~o z)l7gpuFlp42@uHD2h0Rm8&eeCC3GmLr0$yCSV+Q z=A@Z`d)%2v%>*pu&V1KQz(?*CJSR)QOzxFi%mf_eUU|(-z*g>+KbZ-53!Y^rhQYw$ zW8|y!Qu!|fTw&k|d_RlHrbyytVbbi}uY}iy>yghz^U+sgdt$$dcf?O84kW&tT$8*h z`KgpUwJ9A;@4%$knRBQ3yZIW{Ex|42R&cAhw{o{~@8aIW-O1g>-NXGY_aOIC?&I7i zxhJ^Ka(~Y~&3%D;j(eW_I`<;?E$+MAOOSYe%AMi0$M=BFvI8)@Oy9< zx-E=XN>!ai&X|MulZxc`X{4*tT}UH!6_9!fhHE88>LoHeOQ>e#Ojo8`PIqVIG!8i< zWn>?_j)W&q`!(avUc$~7rtX}Rq&sMNh!*42Cl!i4>^D_=I*8;Vg%0AxGvkSTfqvp& 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

1zmdKEV@Y5 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 Y+&3l6O&y*S@SAoEhi9&xVgU4i0PG&FF#rGn diff --git a/main/src/assets/fonts/iconfont.woff b/main/src/assets/fonts/iconfont.woff deleted file mode 100644 index 7a6054d137ff243071140ce833fbb217773ed347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14252 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

tFLWSU0P`Z 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 diff --git a/main/src/assets/fonts/iconfont.woff2 b/main/src/assets/fonts/iconfont.woff2 deleted file mode 100644 index 90756070cd156c3b195fd02069340c040c498148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12320 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 GPXGX*;of`z diff --git a/main/src/assets/svgs/tree.svg b/main/src/assets/svgs/tree.svg deleted file mode 100644 index dd4b7dd..0000000 --- a/main/src/assets/svgs/tree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/main/src/assets/svgs/wechat.svg b/main/src/assets/svgs/wechat.svg deleted file mode 100644 index c586e55..0000000 --- a/main/src/assets/svgs/wechat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/main/src/components/custom-import-excel/index.vue b/main/src/components/custom-import-excel/index.vue index 3d86bea..7abd779 100644 --- a/main/src/components/custom-import-excel/index.vue +++ b/main/src/components/custom-import-excel/index.vue @@ -35,7 +35,7 @@ const props = defineProps({ default: '提示:导入前请先下载模板填写信息,然后再导入!', }, templateUrl: { - type: String, + type: [String, URL], default: '', }, // options: { diff --git a/main/src/config/index.js b/main/src/config/index.js index 0e4f584..3ecdd74 100644 --- a/main/src/config/index.js +++ b/main/src/config/index.js @@ -7,4 +7,16 @@ export const GenKey = (key, prefix = `${VITE_APP_NAME}_`) => { export const CONSTANTS = { PREFIX: `${VITE_APP_NAME}_`, PRIMARY: '#409eff', + // 密钥对生成 http://web.chacuo.net/netrsakeypair + JS_PUBLICKEY: + 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==', + JS_PRIVATEKEY: + 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=', }; diff --git a/main/src/main.js b/main/src/main.js index eaa2e9c..9105699 100644 --- a/main/src/main.js +++ b/main/src/main.js @@ -4,7 +4,7 @@ import App from './App.vue'; import router from './router'; import pinia from './store'; import ElementPlus from 'element-plus'; -// import 'element-plus/dist/index.css'; +import 'element-plus/dist/index.css'; import { registerGlobalMicroApps } from './micro'; import { registerElIcons } from './plugins/icon'; import './utils/permission'; diff --git a/main/src/micro/actions.js b/main/src/micro/actions.js index 752c940..6ece597 100644 --- a/main/src/micro/actions.js +++ b/main/src/micro/actions.js @@ -2,6 +2,7 @@ import { initGlobalState } from 'qiankun'; import { reactive } from 'vue'; const initialState = reactive({ + token: null, user: { name: 'admin', }, diff --git a/main/src/micro/app.js b/main/src/micro/app.js index 287eb5d..109f7ae 100644 --- a/main/src/micro/app.js +++ b/main/src/micro/app.js @@ -10,13 +10,13 @@ export const leftApps = [ // title: '运营服务', // icon: 'images/platform/icon-home.png', // }, - { - name: 'sub-admin', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-admin/', - title: '管理后台', - icon: 'images/platform/icon-admin.png', - }, + // { + // name: 'sub-admin', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-admin/', + // title: '管理后台', + // icon: 'images/platform/icon-admin.png', + // }, // { // name: 'sub-app', // entry: VITE_APP_SUB_ADMIN, @@ -81,7 +81,7 @@ const apps = microApps.map((item) => { container: '#app', props: { routerBase: item.activeRule, - getGlobalState: actions.getGlobalState, + globalState: actions.getGlobalState(), }, }; }); diff --git a/main/src/store/modules/setting.js b/main/src/store/modules/setting.js index b12e32d..35aef83 100644 --- a/main/src/store/modules/setting.js +++ b/main/src/store/modules/setting.js @@ -1,64 +1,12 @@ import { defineStore } from 'pinia'; -import { CONSTANTS } from '@/config'; export const useSettingStore = defineStore({ id: 'settingStore', state: () => ({ - // menu 是否收缩 - isCollapse: true, - // - withoutAnimation: false, - device: 'desktop', - // 刷新当前页 isReload: true, - // 主题设置 - themeConfig: { - // 显示设置 - showSetting: false, - // 菜单展示模式 默认 vertical horizontal / vertical /columns - mode: 'vertical', - // tagsView 是否展示 默认展示 - showTag: true, - // 页脚 - footer: true, - // 深色模式 切换暗黑模式 - isDark: false, - // 显示侧边栏Logo - showLogo: true, - // 主题颜色 - primary: CONSTANTS.PRIMARY, - // element组件大小 - globalComSize: 'default', - // 是否只保持一个子菜单的展开 - uniqueOpened: true, - // 固定header - fixedHeader: true, - // 灰色模式 - gray: false, - // 色弱模式 - weak: false, - }, }), getters: {}, actions: { - // 设置主题 - setThemeConfig({ key, val }) { - this.themeConfig[key] = val; - }, - // 切换 Collapse - setCollapse(value) { - this.isCollapse = value; - this.withoutAnimation = false; - }, - // 关闭侧边栏 - closeSideBar({ withoutAnimation }) { - this.isCollapse = false; - this.withoutAnimation = withoutAnimation; - }, - toggleDevice(device) { - this.device = device; - }, - // 刷新 setReload() { this.isReload = false; setTimeout(() => { diff --git a/main/src/store/modules/tagsView.js b/main/src/store/modules/tagsView.js deleted file mode 100644 index 627c84a..0000000 --- a/main/src/store/modules/tagsView.js +++ /dev/null @@ -1,104 +0,0 @@ -import { defineStore } from 'pinia'; -import router from '@/router'; - -export const useTagsViewStore = defineStore({ - id: 'tagsViewStore', - state: () => ({ - activeTabsValue: '/home', - visitedViews: [], - cachedViews: [], - }), - getters: {}, - actions: { - setTabsMenuValue(val) { - this.activeTabsValue = val; - }, - addView(view) { - this.addVisitedView(view); - }, - removeView(routes) { - return new Promise((resolve) => { - this.visitedViews = this.visitedViews.filter((item) => !routes.includes(item.path)); - resolve(null); - }); - }, - addVisitedView(view) { - this.setTabsMenuValue(view.path); - if (this.visitedViews.some((v) => v.path === view.path)) return; - - this.visitedViews.push( - Object.assign({}, view, { - title: view.meta.title || 'no-name', - }) - ); - if (view.meta.keepAlive) { - this.cachedViews.push(view.name); - } - }, - delView(activeTabPath) { - return new Promise((resolve) => { - this.delVisitedView(activeTabPath); - this.delCachedView(activeTabPath); - resolve({ - visitedViews: [...this.visitedViews], - cachedViews: [...this.cachedViews], - }); - }); - }, - toLastView(activeTabPath) { - const index = this.visitedViews.findIndex((item) => item.path === activeTabPath); - const nextTab = this.visitedViews[index + 1] || this.visitedViews[index - 1]; - if (!nextTab) return; - router.push(nextTab.path); - this.addVisitedView(nextTab); - }, - delVisitedView(path) { - return new Promise((resolve) => { - this.visitedViews = this.visitedViews.filter((v) => { - return v.path !== path || v.meta.affix; - }); - this.cachedViews = this.cachedViews.filter((v) => { - return v.path !== path || v.meta.affix; - }); - resolve([...this.visitedViews]); - }); - }, - delCachedView(view) { - return new Promise((resolve) => { - const index = this.cachedViews.indexOf(view.name); - index > -1 && this.cachedViews.splice(index, 1); - resolve([...this.cachedViews]); - }); - }, - clearVisitedView() { - this.delAllViews(); - }, - delAllViews() { - return new Promise((resolve) => { - this.visitedViews = this.visitedViews.filter((v) => v.meta.affix); - this.cachedViews = this.visitedViews.filter((v) => v.meta.affix); - resolve([...this.visitedViews]); - }); - }, - delOtherViews(path) { - this.visitedViews = this.visitedViews.filter((item) => { - return item.path === path || item.meta.affix; - }); - this.cachedViews = this.visitedViews.filter((item) => { - return item.path === path || item.meta.affix; - }); - }, - goHome() { - this.activeTabsValue = '/home'; - router.push({ path: '/home' }); - }, - updateVisitedView(view) { - for (let v of this.visitedViews) { - if (v.path === view.path) { - v = Object.assign(v, view); - break; - } - } - }, - }, -}); diff --git a/main/src/store/modules/user.js b/main/src/store/modules/user.js index 8e96ab0..0f1d48e 100644 --- a/main/src/store/modules/user.js +++ b/main/src/store/modules/user.js @@ -3,7 +3,7 @@ import { GenKey } from '@/config'; import { isEmpty, encode, decode } from '@/utils'; export const useUserStore = defineStore({ - id: GenKey('USER_STATE'), + id: GenKey('user_store'), state: () => ({ token: null, userInfo: {}, @@ -52,14 +52,14 @@ export const useUserStore = defineStore({ this.currentOrg = null; this.orgList = []; this.menus = []; - localStorage.removeItem(GenKey('USER_STATE')); + localStorage.removeItem(GenKey('user_store')); }, clear() { - localStorage.removeItem(GenKey('USER_STATE')); + localStorage.removeItem(GenKey('user_store')); }, }, persist: { - key: GenKey('USER_STATE'), + key: GenKey('user_store'), storage: window.localStorage, }, }); diff --git a/main/src/styles/common/base.scss b/main/src/styles/common/base.scss index 0873dda..366b369 100644 --- a/main/src/styles/common/base.scss +++ b/main/src/styles/common/base.scss @@ -77,7 +77,8 @@ body { width: 100%; height: 100%; font-size: 12px; - font-family: 'Source Han Sans CN, Source Han Sans CN-Regular', 'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif; + font-family: 'Source Han Sans CN, Source Han Sans CN-Regular', 'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', + 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif; color: #323232; // background: #000; diff --git a/main/src/styles/global.scss b/main/src/styles/global.scss index 42cb957..a74e175 100644 --- a/main/src/styles/global.scss +++ b/main/src/styles/global.scss @@ -29,28 +29,28 @@ $color-types: ( primary: ( $color-primary, #4db3ff, - #1d90e6 + #1d90e6, ), info: ( $color-info, #73ccff, - #48ace6 + #48ace6, ), success: ( $color-success, #42d885, - #11b95c + #11b95c, ), warning: ( $color-warning, #f9c855, - #dea726 + #dea726, ), danger: ( $color-danger, #ff6d6d, - #e64242 - ) + #e64242, + ), ); -@import "utils/utils"; +@import 'utils/utils'; diff --git a/main/src/utils/axios.js b/main/src/utils/axios.js index 5a3f787..4268d50 100644 --- a/main/src/utils/axios.js +++ b/main/src/utils/axios.js @@ -2,12 +2,13 @@ * @Descripttion: * @Author: zenghua.wang * @Date: 2022-02-23 21:12:37 - * @LastEditors: wzh 1048523306@qq.com - * @LastEditTime: 2024-12-18 15:10:48 + * @LastEditors: zenghua.wang + * @LastEditTime: 2025-02-13 14:46:34 */ import axios from 'axios'; import { ElNotification } from 'element-plus'; import router from '@/router'; +import { isEmpty } from '@/utils'; import { useUserStore } from '@/store/modules/user'; const { VITE_APP_BASE_API, VITE_APP_UPLOAD_API } = import.meta.env; @@ -45,14 +46,10 @@ const errorHandler = async (error) => { */ publicAxios.interceptors.request.use(async (config) => { const UserStore = useUserStore(); - config.baseURL = config?.isUpload ? VITE_APP_UPLOAD_API : config?.isLocal ? '' : VITE_APP_BASE_API; if (UserStore.hasToken()) { - config.headers['fairies-auth-token'] = UserStore.token; + config.headers['authorization'] = config.headers['authorization'] ?? UserStore.token; config.headers['cache-control'] = 'no-cache'; config.headers.Pragma = 'no-cache'; - if (config?.isUpload) { - config.headers['Content-Type'] = config.uploadType; - } } if (config.method === 'POST' || config.method === 'DELETE') { config.headers.Accept = 'application/json'; @@ -89,6 +86,11 @@ publicAxios.interceptors.response.use((response) => { if (config?.responseType) { return response; } + const token = response?.headers['authorization']; + if (!isEmpty(token)) { + const UserStore = useUserStore(); + UserStore.setToken(token); + } const result = formatResult(response); if (result) { return result; diff --git a/main/src/utils/echarts.js b/main/src/utils/echarts.js index 9b40020..72ceb57 100644 --- a/main/src/utils/echarts.js +++ b/main/src/utils/echarts.js @@ -19,9 +19,7 @@ import { GraphicComponent, } from 'echarts/components'; -// TODO 如果想换成SVG渲染,就导出SVGRenderer, -// 并且放到 echarts.use 里,注释掉 CanvasRenderer -import { /*SVGRenderer*/ CanvasRenderer } from 'echarts/renderers'; +import { CanvasRenderer } from 'echarts/renderers'; echarts.use([ LegendComponent, @@ -36,7 +34,6 @@ echarts.use([ PieChart, MapChart, RadarChart, - // TODO 因为要兼容Online图表自适应打印,所以改成 CanvasRenderer,可能会模糊 CanvasRenderer, PictorialBarChart, RadarComponent, diff --git a/main/src/utils/index.js b/main/src/utils/index.js index 912d447..510ab02 100644 --- a/main/src/utils/index.js +++ b/main/src/utils/index.js @@ -3,44 +3,13 @@ * @Author: zenghua.wang * @Date: 2022-02-23 21:12:37 * @LastEditors: zenghua.wang - * @LastEditTime: 2025-02-10 14:47:12 + * @LastEditTime: 2025-02-13 11:28:46 */ import lodash from 'lodash'; -import dayjs from 'dayjs'; import { Base64 } from 'js-base64'; +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'; +import { CONSTANTS } from '@/config'; -/** - * @Title 防抖:指在一定时间内,多次触发同一个事件,只执行最后一次操作 - * @param {*} fn - * @param {*} delay - * @returns - */ -export function debounce(fn, delay) { - let timer = null; - return function (...args) { - clearTimeout(timer); - timer = setTimeout(() => { - fn.apply(this, args); - }, delay); - }; -} -/** - * @Title 节流:指在一定时间内,多次触发同一个事件,只执行第一次操作 - * @param {*} fn - * @param {*} delay - * @returns - */ -export function throttle(fn, delay) { - let timer = null; - return function (...args) { - if (!timer) { - timer = setTimeout(() => { - fn.apply(this, args); - timer = null; - }, delay); - } - }; -} /** * @Title 判断是否 empty,返回ture * @param {*} val:null 'null' undefined 'undefined' 0 '0' "" 返回true @@ -79,78 +48,6 @@ export const setPx = (val) => { } return val; }; -/** - * @Tilte 设置属性默认值 - * @param {*} options - * @param {*} prop - * @param {*} defaultVal - * @returns - */ -export const setDefaultOption = (options, prop, defaultVal) => { - return options[prop] === undefined ? defaultVal : options.prop; -}; -/** - * @Title 设置字典值 - * @param {*} columns - * @param {*} key - * @param {*} data - * @returns - */ -export const setDicData = (columns, key, data = []) => { - if (isEmpty(data)) return; - const len = columns.length; - for (let i = 0; i < len; i++) { - if (columns[i]?.prop === key) { - columns[i]['dicData'] = data; - break; - } - } -}; -/** - * @Title 求字段lable - * @param {*} tree - * @returns - */ -export const setDicLabel = (dicData, value) => { - let label = value; - if (isEmpty(dicData)) return label; - const len = dicData.length; - for (let i = 0; i < len; i++) { - if (dicData[i]?.value === value) { - label = dicData[i].label; - break; - } - } - return label; -}; -/** - * @Title 数组交集 - * @param {*} arr1 - * @param {*} arr2 - * @returns - */ -export const intersectionArray = (arr1 = [], arr2 = []) => { - return arr1.filter((item) => arr2.includes(item)); -}; -/** - * @Title 数组并集 - * @param {*} arr1 - * @param {*} arr2 - * @returns - */ -export const unionArray = (arr1 = [], arr2 = []) => { - return Array.from(new Set([...arr1, ...arr2])); -}; -/** - * @Title 数组差集 - * @param {*} arr1 - * @param {*} arr2 - * @returns - */ -export const differenceArray = (arr1 = [], arr2 = []) => { - const s = new Set(arr2); - return arr1.filter((x) => !s.has(x)); -}; /** * @Title 加密 * @param {*} n @@ -195,6 +92,29 @@ export const decode = (e, flag = false) => { } return e; }; + +/** + * @Title 加密 + * @param {*} txt + * @returns + */ +export const encrypt = (txt) => { + const encryptor = new JSEncrypt(); + encryptor.setPublicKey(CONSTANTS.JS_PUBLICKEY); // 设置公钥 + return encryptor.encrypt(txt); // 对数据进行加密 +}; + +/** + * @Title 解密 + * @param {*} txt + * @returns + */ +export const decrypt = (txt) => { + const encryptor = new JSEncrypt(); + encryptor.setPrivateKey(CONSTANTS.JS_PRIVATEKEY); // 设置私钥 + return encryptor.decrypt(txt); // 对数据进行解密 +}; + /** * @Title 图片转base64 * @param {*} file @@ -293,166 +213,3 @@ export const obj2Param = (json) => { export const getAssetsFile = (url) => { return new URL(`../assets/${url}`, import.meta.url); }; -/** - * @Title: 下载文件 - * @param {void} url: - * @param {void} fileName: - * @param {void} fileType: - * @return {void} - */ -export const downloadFile = async (url, fileName, fileType) => { - let blob = null; - try { - switch (fileType) { - case 'image': { - const img = new Image(); - img.crossOrigin = 'Anonymous'; - img.src = url; - await new Promise((resolve, reject) => { - img.onload = resolve; - img.onerror = reject; - }); - const canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - const ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - blob = await new Promise((resolve) => { - canvas.toBlob(resolve, 'image/jpeg'); - }); - break; - } - case 'blob': { - blob = new Blob([url]); - break; - } - } - if ('download' in document.createElement('a')) { - const elink = document.createElement('a'); - elink.download = fileName; - elink.style.display = 'none'; - elink.href = blob ? URL.createObjectURL(blob) : url; - document.body.appendChild(elink); - elink.click(); - blob && URL.revokeObjectURL(elink.href); - document.body.removeChild(elink); - } else { - navigator.msSaveBlob(blob, fileName); - } - } catch (error) { - console.error('下载出错:', error); - } -}; -/** - * @Title 模拟休眠 - * @param {*} duration - * @returns - */ -export const sleep = (duration = 0) => - new Promise((resolve) => { - setTimeout(resolve, duration); - }); -/** - * @Title 创建id - * @param {*} prefix - * @returns - */ -export const createId = (prefix) => { - const val = Date.now() + Math.ceil(Math.random() * 99999); - return isEmpty(prefix) ? val : prefix + '-' + val; -}; -/** - * @Title 生成数据 - * @param {*} duration - * @returns - */ -export const mockData = (item = {}, len = 1) => { - const list = []; - for (let i = 0; i < len; i++) { - let temp = { ...item, id: createId() }; - list.push(temp); - } - return list; -}; -/** - * @Title 日期格式化 - * @param {*} date - * @param {*} format - * @returns - */ -export const dateFormat = (datetime, formater = 'YYYY-MM-DD hh:mm:ss') => { - if (datetime instanceof Date || datetime) { - return dayjs(datetime).format(formater); - } else { - return null; - } -}; -/** - * @Title 字符串转日期 - * @param {*} str - * @returns - */ -export const toDate = (str) => { - return !isEmpty(str) ? dayjs(str) : dayjs(); -}; -/** - * @Title 字符串转日期 - * @param {*} str - * @returns - */ -export const getDate = (num, type, formater = 'YYYY-MM-DD', start = true) => { - const date = dayjs().subtract(num, type); - return start ? date.startOf(type).format(formater) : date.endOf(type).format(formater); -}; -/** - * @Title: 获取时间差 - * @param start - * @param end - * @param type - * @returns - */ -export const getDiffTime = (start, end, type) => { - const startTime = dayjs(start); - const endTime = dayjs(end); - const duration = endTime.diff(startTime); - let diff = 0; - switch (type) { - case 'DD': { - diff = duration / (1000 * 60 * 60 * 24); - break; - } - case 'HH': { - diff = duration / (1000 * 60 * 60); - break; - } - case 'mm': { - diff = duration / (1000 * 60); - break; - } - } - return Math.round(diff); -}; -/** - * @Title: 开始日期 - * @param last - * @param type - * @param formater - * @returns - */ -export const startDate = (num, type = 'month', formater = 'YYYY-MM-DD HH:mm:ss') => { - if (num === 'now') return dayjs().format(formater); - if (typeof num === 'string') return dayjs(num).startOf(type).format(formater); - return num === 0 ? dayjs().startOf(type).format(formater) : dayjs().subtract(num, type).startOf(type).format(formater); -}; -/** - * @Title: 结束日期 - * @param num - * @param type - * @param formater - * @returns - */ -export const endDate = (num = 0, type = 'month', formater = 'YYYY-MM-DD HH:mm:ss') => { - if (num === 'now') return dayjs().format(formater); - if (typeof num === 'string') return dayjs(num).endOf(type).format(formater); - return num === 0 ? dayjs().endOf(type).format(formater) : dayjs().subtract(num, type).endOf(type).format(formater); -}; diff --git a/main/src/utils/permission.js b/main/src/utils/permission.js index 8501768..fedd747 100644 --- a/main/src/utils/permission.js +++ b/main/src/utils/permission.js @@ -23,7 +23,7 @@ router.beforeEach(async (to, from, next) => { } const userStore = useUserStore(); - const hasToken = true; //userStore.hasToken(); + const hasToken = userStore.hasToken(); if (hasToken) { if (to.path === '/login') { @@ -36,7 +36,6 @@ router.beforeEach(async (to, from, next) => { accessRoutes.forEach((item) => router.addRoute(item)); next({ ...to, replace: true }); } else { - // 子应用跳转回主应用时判断#app是否还有渲染的子应用,如若没有则重新渲染主应用 if (from.path.includes('/sub') && !to.path.includes('/sub')) { window.location.reload(); return; diff --git a/main/src/utils/validate.js b/main/src/utils/validate.js index a437688..d2413e2 100644 --- a/main/src/utils/validate.js +++ b/main/src/utils/validate.js @@ -1,3 +1,11 @@ +/** + * @Description: + * @Author: zenghua.wang + * @Date: 2022-01-26 21:55:58 + * @LastEditors: zenghua.wang + * @LastEditTime: 2024-04-14 11:03:08 + */ + /** * 路径匹配器 * @param {string} pattern diff --git a/main/src/views/index.vue b/main/src/views/index.vue index 5977d02..f903c5f 100644 --- a/main/src/views/index.vue +++ b/main/src/views/index.vue @@ -40,7 +40,7 @@ const gotoPage = (row) => { // actions.setGlobalState({ // curentApp, // }); - console.log('===', actions.getGlobalState('user')); + // console.log('===', actions.getGlobalState('user')); window.history.pushState({}, row.name, row.activeRule); }; @@ -50,8 +50,7 @@ const gotoPage = (row) => { height: 100%; background-image: url('@/assets/images/platform/bg.png'); background-size: cover; - background-repeat: no-repeat; - background-position: center; + // background-position: center; &-title { width: 1200px; diff --git a/main/src/views/login/index.vue b/main/src/views/login/index.vue index 87e5468..8222173 100644 --- a/main/src/views/login/index.vue +++ b/main/src/views/login/index.vue @@ -1,5 +1,206 @@ - + + diff --git a/main/yarn.lock b/main/yarn.lock index c4f81d6..7cefbf8 100644 --- a/main/yarn.lock +++ b/main/yarn.lock @@ -3862,6 +3862,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsencrypt@^3.3.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz#b0f1a2278810c7ba1cb8957af11195354622df7c" + integrity sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A== + jsesc@^3.0.2: version "3.1.0" resolved "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" diff --git a/sub-admin/src/views/login.vue b/sub-admin/src/views/login.vue index e339322..80dfaf1 100644 --- a/sub-admin/src/views/login.vue +++ b/sub-admin/src/views/login.vue @@ -12,12 +12,12 @@ - +

记住密码 @@ -26,15 +26,15 @@ 登 录 登 录 中... -
+
立即注册
-