diff --git a/404.html b/404.html index aca24650..e4c68b93 100644 --- a/404.html +++ b/404.html @@ -11,11 +11,11 @@ - + -
404
这里什么都没有。
返回首页
- +
404
看来我们的链接坏掉了~
返回首页
+ diff --git a/archives/index.html b/archives/index.html index 0b6d6f25..24bbd62a 100644 --- a/archives/index.html +++ b/archives/index.html @@ -11,7 +11,7 @@ - + @@ -108,17 +108,17 @@ data-full-width-responsive="true">

+

归档

总共 0 篇文章 -
    - + diff --git a/assets/js/10.94b31f21.js b/assets/js/10.36d6c834.js similarity index 65% rename from assets/js/10.94b31f21.js rename to assets/js/10.36d6c834.js index c0d47c30..a698b060 100644 --- a/assets/js/10.94b31f21.js +++ b/assets/js/10.36d6c834.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{377:function(a,t,s){a.exports=s.p+"assets/img/vertical.c3595dbf.jpg"},378:function(a,t,s){a.exports=s.p+"assets/img/vertical-detail.6798924b.jpg"},379:function(a,t,s){a.exports=s.p+"assets/img/horizontal.1b2d999f.jpg"},380:function(a,t,s){a.exports=s.p+"assets/img/horizontal-detail.ffab1d66.jpg"},381:function(a,t,s){a.exports=s.p+"assets/img/mixNav.3e8ec1ba.jpg"},382:function(a,t,s){a.exports=s.p+"assets/img/mixNav-detail.a5429f92.jpg"},383:function(a,t,s){a.exports=s.p+"assets/img/double.461f37a3.jpg"},533:function(a,t,s){"use strict";s.r(t);var i=s(8),l=Object(i.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h2",{attrs:{id:"左侧菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#左侧菜单模式"}},[a._v("#")]),a._v(" 左侧菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(377),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(378),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"顶部菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#顶部菜单模式"}},[a._v("#")]),a._v(" 顶部菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(379),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(380),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"混合菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#混合菜单模式"}},[a._v("#")]),a._v(" 混合菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(381),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(382),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"双栏菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#双栏菜单模式"}},[a._v("#")]),a._v(" 双栏菜单模式")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin-max?tab=readme-ov-file#vue-pure-admin-max-%E4%B8%8E-vue-pure-admin-%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E5%A6%82%E4%BD%95%E6%8B%A5%E6%9C%89-max-%E7%89%88%E6%9C%AC",target:"_blank",rel:"noopener noreferrer"}},[a._v("仅 max 版支持"),t("OutboundLink")],1)]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(383),loading:"lazy"}})])])}),[],!1,null,null,null);t.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{375:function(a,t,s){a.exports=s.p+"assets/img/vertical.c3595dbf.jpg"},376:function(a,t,s){a.exports=s.p+"assets/img/vertical-detail.6798924b.jpg"},377:function(a,t,s){a.exports=s.p+"assets/img/horizontal.1b2d999f.jpg"},378:function(a,t,s){a.exports=s.p+"assets/img/horizontal-detail.ffab1d66.jpg"},379:function(a,t,s){a.exports=s.p+"assets/img/mixNav.3e8ec1ba.jpg"},380:function(a,t,s){a.exports=s.p+"assets/img/mixNav-detail.a5429f92.jpg"},381:function(a,t,s){a.exports=s.p+"assets/img/double.461f37a3.jpg"},532:function(a,t,s){"use strict";s.r(t);var i=s(8),l=Object(i.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h2",{attrs:{id:"左侧菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#左侧菜单模式"}},[a._v("#")]),a._v(" 左侧菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(375),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(376),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"顶部菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#顶部菜单模式"}},[a._v("#")]),a._v(" 顶部菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(377),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(378),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"混合菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#混合菜单模式"}},[a._v("#")]),a._v(" 混合菜单模式")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(379),loading:"lazy"}})]),a._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[a._v("查看介绍")]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(380),loading:"lazy"}})])]),a._v(" "),t("h2",{attrs:{id:"双栏菜单模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#双栏菜单模式"}},[a._v("#")]),a._v(" 双栏菜单模式")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin-max?tab=readme-ov-file#vue-pure-admin-max-%E4%B8%8E-vue-pure-admin-%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E5%A6%82%E4%BD%95%E6%8B%A5%E6%9C%89-max-%E7%89%88%E6%9C%AC",target:"_blank",rel:"noopener noreferrer"}},[a._v("仅 max 版支持"),t("OutboundLink")],1)]),a._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(381),loading:"lazy"}})])])}),[],!1,null,null,null);t.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/11.0b7ac1be.js b/assets/js/11.c015e602.js similarity index 87% rename from assets/js/11.0b7ac1be.js rename to assets/js/11.c015e602.js index d2691599..e588c7dd 100644 --- a/assets/js/11.0b7ac1be.js +++ b/assets/js/11.c015e602.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{495:function(t,e,r){t.exports=r.p+"assets/img/full.5e2f69dd.jpg"},496:function(t,e,r){t.exports=r.p+"assets/img/1.6de0d9f0.jpg"},497:function(t,e,r){t.exports=r.p+"assets/img/2.bb8507e8.jpg"},498:function(t,e,r){t.exports=r.p+"assets/img/3.9bbe1f9b.jpg"},499:function(t,e,r){t.exports=r.p+"assets/img/4.81572176.jpg"},500:function(t,e,r){t.exports=r.p+"assets/img/5.6c2d9065.jpg"},501:function(t,e,r){t.exports=r.p+"assets/img/6.ae5807f4.jpg"},555:function(t,e,r){"use strict";r.r(e);var a=r(8),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h3",{attrs:{id:"介绍"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#介绍"}},[t._v("#")]),t._v(" 介绍")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本即"),e("code",[t._v("pure-admin-thin-js")]),t._v(",它是 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 的"),e("code",[t._v("js")]),t._v("版本,同时拥有"),e("code",[t._v("国际化")]),t._v("和"),e("code",[t._v("非国际化")]),t._v("两个版本并且会"),e("code",[t._v("永久同步更新")]),t._v("代码。"),e("code",[t._v("JS")]),t._v("版本将之前所有使用"),e("code",[t._v("TypeScript")]),t._v("语法的代码或文件全量替换为"),e("code",[t._v("JavaScript")]),t._v("语法,也就意味着您在编写代码时可以更加地随意,无需编写"),e("code",[t._v("ts")]),t._v("类型。"),e("code",[t._v("JS")]),t._v("版本"),e("code",[t._v("快速易上手")]),t._v("、更适合需要"),e("code",[t._v("快速开发上线")]),t._v("的项目、更适合"),e("code",[t._v("二次开发")]),t._v("、更容易"),e("code",[t._v("同步更新代码")]),t._v("、它也避免了开发人员将 "),e("code",[t._v("TypeScript")]),t._v(" 和 "),e("code",[t._v("JavaScript")]),t._v(" 混用带来后续难以维护的问题。对于初学者、小团队或者想要学习源码的朋友,推荐首选"),e("code",[t._v("JS")]),t._v("版本!")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-pure-admin"),e("OutboundLink")],1),t._v(" 每次发版后,"),e("code",[t._v("JS")]),t._v("版本将优先同步更新,最晚一周内同步更新完成,而 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 版本最晚一个月内同步更新完成。")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本让精简版更加精简,让代码编写更加顺手,让项目交付更加快速!")]),t._v(" "),e("h3",{attrs:{id:"价格"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#价格"}},[t._v("#")]),t._v(" 价格")]),t._v(" "),e("p",[t._v("永久价格:"),e("code",[t._v("¥268")])]),t._v(" "),e("h3",{attrs:{id:"如何购买"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#如何购买"}},[t._v("#")]),t._v(" 如何购买")]),t._v(" "),e("p",[t._v("加微信号: "),e("code",[t._v("pureadmin")]),t._v(" 或扫下方二维码,添加时请备注"),e("code",[t._v("js")]),t._v(",无备注会被忽略")]),t._v(" "),e("img",{attrs:{src:t.$withBase("/img/support/addWx.jpg"),width:"180px",height:"180px"}}),t._v(" "),e("h3",{attrs:{id:"温馨提示"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#温馨提示"}},[t._v("#")]),t._v(" 温馨提示")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本代码存放于 "),e("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("github"),e("OutboundLink")],1),t._v(",添加上方微信后请提供您的 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#github账号在哪里看"}},[t._v("github 账号")]),t._v(" ,我会拉您进"),e("code",[t._v("pure-admin-thin-js")]),t._v("私有仓库")],1),t._v(" "),e("h3",{attrs:{id:"超低成本切换js版本教程"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#超低成本切换js版本教程"}},[t._v("#")]),t._v(" 超低成本切换"),e("code",[t._v("JS")]),t._v("版本教程")]),t._v(" "),e("p",[t._v("用户疑问:"),e("code",[t._v("pure-admin-thin-js")]),t._v("是 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 的"),e("code",[t._v("js")]),t._v("版本,那如果需要 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("完整版"),e("OutboundLink")],1),t._v(" 的一些业务页面或组件,比如 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/views/system",target:"_blank",rel:"noopener noreferrer"}},[t._v("系统管理"),e("OutboundLink")],1),t._v(" 里的所有页面还有"),e("code",[t._v("src/components")]),t._v("文件夹里的一些组件,比如 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/components/ReVxeTableBar",target:"_blank",rel:"noopener noreferrer"}},[t._v("ReVxeTableBar"),e("OutboundLink")],1),t._v(",它们该怎么切换为"),e("code",[t._v("js")]),t._v("版本呢?")]),t._v(" "),e("p",[t._v("平台回答:我们会提供免费的教学视频,会演示如何将系统管理里的所有页面和"),e("code",[t._v("src/components")]),t._v("里的组件改为"),e("code",[t._v("js")]),t._v("版本并放到"),e("code",[t._v("pure-admin-thin-js")]),t._v("中")]),t._v(" "),e("p",[t._v("教程地址:"),e("a",{attrs:{href:"https://www.bilibili.com/video/BV1Wr421F7oj/",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击观看教程"),e("OutboundLink")],1)]),t._v(" "),e("p",[e("span",{staticStyle:{color:"red"}},[t._v("当然我们还提供了"),e("code",[t._v("full")]),t._v("分支,该分支迁移了完整版中 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/views/system",target:"_blank",rel:"noopener noreferrer"}},[t._v("系统管理"),e("OutboundLink")],1),t._v(" 的所有页面和 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/components",target:"_blank",rel:"noopener noreferrer"}},[t._v("/src/components"),e("OutboundLink")],1),t._v(" 文件夹中所有的组件,如下图:")])]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(495),loading:"lazy"}})]),t._v(" "),e("h3",{attrs:{id:"相关截图"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#相关截图"}},[t._v("#")]),t._v(" 相关截图")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(496),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(497),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(498),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(499),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(500),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(501),loading:"lazy"}})])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{496:function(t,e,r){t.exports=r.p+"assets/img/full.5e2f69dd.jpg"},497:function(t,e,r){t.exports=r.p+"assets/img/1.6de0d9f0.jpg"},498:function(t,e,r){t.exports=r.p+"assets/img/2.bb8507e8.jpg"},499:function(t,e,r){t.exports=r.p+"assets/img/3.9bbe1f9b.jpg"},500:function(t,e,r){t.exports=r.p+"assets/img/4.81572176.jpg"},501:function(t,e,r){t.exports=r.p+"assets/img/5.6c2d9065.jpg"},502:function(t,e,r){t.exports=r.p+"assets/img/6.ae5807f4.jpg"},556:function(t,e,r){"use strict";r.r(e);var a=r(8),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h3",{attrs:{id:"介绍"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#介绍"}},[t._v("#")]),t._v(" 介绍")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本即"),e("code",[t._v("pure-admin-thin-js")]),t._v(",它是 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 的"),e("code",[t._v("js")]),t._v("版本,同时拥有"),e("code",[t._v("国际化")]),t._v("和"),e("code",[t._v("非国际化")]),t._v("两个版本并且会"),e("code",[t._v("永久同步更新")]),t._v("代码。"),e("code",[t._v("JS")]),t._v("版本将之前所有使用"),e("code",[t._v("TypeScript")]),t._v("语法的代码或文件全量替换为"),e("code",[t._v("JavaScript")]),t._v("语法,也就意味着您在编写代码时可以更加地随意,无需编写"),e("code",[t._v("ts")]),t._v("类型。"),e("code",[t._v("JS")]),t._v("版本"),e("code",[t._v("快速易上手")]),t._v("、更适合需要"),e("code",[t._v("快速开发上线")]),t._v("的项目、更适合"),e("code",[t._v("二次开发")]),t._v("、更容易"),e("code",[t._v("同步更新代码")]),t._v("、它也避免了开发人员将 "),e("code",[t._v("TypeScript")]),t._v(" 和 "),e("code",[t._v("JavaScript")]),t._v(" 混用带来后续难以维护的问题。对于初学者、小团队或者想要学习源码的朋友,推荐首选"),e("code",[t._v("JS")]),t._v("版本!")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-pure-admin"),e("OutboundLink")],1),t._v(" 每次发版后,"),e("code",[t._v("JS")]),t._v("版本将优先同步更新,最晚一周内同步更新完成,而 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 版本最晚一个月内同步更新完成。")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本让精简版更加精简,让代码编写更加顺手,让项目交付更加快速!")]),t._v(" "),e("h3",{attrs:{id:"价格"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#价格"}},[t._v("#")]),t._v(" 价格")]),t._v(" "),e("p",[t._v("永久价格:"),e("code",[t._v("¥268")])]),t._v(" "),e("h3",{attrs:{id:"如何购买"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#如何购买"}},[t._v("#")]),t._v(" 如何购买")]),t._v(" "),e("p",[t._v("加微信号: "),e("code",[t._v("pureadmin")]),t._v(" 或扫下方二维码,添加时请备注"),e("code",[t._v("js")]),t._v(",无备注会被忽略")]),t._v(" "),e("img",{attrs:{src:t.$withBase("/img/support/addWx.jpg"),width:"180px",height:"180px"}}),t._v(" "),e("h3",{attrs:{id:"温馨提示"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#温馨提示"}},[t._v("#")]),t._v(" 温馨提示")]),t._v(" "),e("p",[e("code",[t._v("JS")]),t._v("版本代码存放于 "),e("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("github"),e("OutboundLink")],1),t._v(",添加上方微信后请提供您的 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#github账号在哪里看"}},[t._v("github 账号")]),t._v(" ,我会拉您进"),e("code",[t._v("pure-admin-thin-js")]),t._v("私有仓库")],1),t._v(" "),e("h3",{attrs:{id:"超低成本切换js版本教程"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#超低成本切换js版本教程"}},[t._v("#")]),t._v(" 超低成本切换"),e("code",[t._v("JS")]),t._v("版本教程")]),t._v(" "),e("p",[t._v("用户疑问:"),e("code",[t._v("pure-admin-thin-js")]),t._v("是 "),e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin-thin"),e("OutboundLink")],1),t._v(" 的"),e("code",[t._v("js")]),t._v("版本,那如果需要 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("完整版"),e("OutboundLink")],1),t._v(" 的一些业务页面或组件,比如 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/views/system",target:"_blank",rel:"noopener noreferrer"}},[t._v("系统管理"),e("OutboundLink")],1),t._v(" 里的所有页面还有"),e("code",[t._v("src/components")]),t._v("文件夹里的一些组件,比如 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/components/ReVxeTableBar",target:"_blank",rel:"noopener noreferrer"}},[t._v("ReVxeTableBar"),e("OutboundLink")],1),t._v(",它们该怎么切换为"),e("code",[t._v("js")]),t._v("版本呢?")]),t._v(" "),e("p",[t._v("平台回答:我们会提供免费的教学视频,会演示如何将系统管理里的所有页面和"),e("code",[t._v("src/components")]),t._v("里的组件改为"),e("code",[t._v("js")]),t._v("版本并放到"),e("code",[t._v("pure-admin-thin-js")]),t._v("中")]),t._v(" "),e("p",[t._v("教程地址:"),e("a",{attrs:{href:"https://www.bilibili.com/video/BV1Wr421F7oj/",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击观看教程"),e("OutboundLink")],1)]),t._v(" "),e("p",[e("span",{staticStyle:{color:"red"}},[t._v("当然我们还提供了"),e("code",[t._v("full")]),t._v("分支,该分支迁移了完整版中 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/views/system",target:"_blank",rel:"noopener noreferrer"}},[t._v("系统管理"),e("OutboundLink")],1),t._v(" 的所有页面和 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/components",target:"_blank",rel:"noopener noreferrer"}},[t._v("/src/components"),e("OutboundLink")],1),t._v(" 文件夹中所有的组件,如下图:")])]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(496),loading:"lazy"}})]),t._v(" "),e("h3",{attrs:{id:"相关截图"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#相关截图"}},[t._v("#")]),t._v(" 相关截图")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(497),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(498),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(499),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(500),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(501),loading:"lazy"}}),t._v(" "),e("br")]),t._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(502),loading:"lazy"}})])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/13.8fd5c0d9.js b/assets/js/13.e45eaaa0.js similarity index 97% rename from assets/js/13.8fd5c0d9.js rename to assets/js/13.e45eaaa0.js index 06b52aea..2b364262 100644 --- a/assets/js/13.8fd5c0d9.js +++ b/assets/js/13.e45eaaa0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{439:function(t,s,a){t.exports=a.p+"assets/img/i18nAlly.5125221b.jpg"},440:function(t,s,a){t.exports=a.p+"assets/img/vscode.82274ec8.png"},441:function(t,s,a){t.exports=a.p+"assets/img/i18n.a8232d8f.jpg"},442:function(t,s,a){t.exports=a.p+"assets/img/i18nVue.04302f75.png"},443:function(t,s,a){t.exports=a.p+"assets/img/i18nRouter.a8b2498d.jpg"},539:function(t,s,a){"use strict";a.r(s);var n=a(8),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("平台内置了国际化,支持自定义国际化、"),s("code",[t._v("element-plus")]),t._v(" 国际化")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin 完整版"),s("OutboundLink")],1),t._v(" 只有国际化版本"),s("br"),t._v("\n精简版有 "),s("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/tree/i18n/",target:"_blank",rel:"noopener noreferrer"}},[t._v("国际化版本"),s("OutboundLink")],1),t._v(" 和 "),s("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("非国际化版本"),s("OutboundLink")],1),t._v(",实际项目开发推荐使用 "),s("RouterLink",{attrs:{to:"/pages/FAQ/#精简版是干啥的"}},[t._v("精简版")])],1),t._v(" "),s("h2",{attrs:{id:"vscode-插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vscode-插件"}},[t._v("#")]),t._v(" "),s("code",[t._v("vscode")]),t._v(" 插件")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v("vscode")]),t._v(" 插件商店搜 "),s("code",[t._v("lokalise.i18n-ally")]),t._v(" 进行安装,可以带来更友好的国际化提示")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(439),loading:"lazy"}})]),t._v(" "),s("p",[t._v("当然不要忘记把下面的 "),s("code",[t._v("json")]),t._v(" 代码添加到您 "),s("code",[t._v("vscode")]),t._v(" 的 "),s("code",[t._v("settings.json")]),t._v(" 中")]),t._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.localesPaths"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"locales"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.keystyle"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nested"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sortKeys"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.namespace"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledParsers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yaml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sourceLanguage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"en"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.displayLanguage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"zh-CN"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledFrameworks"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(440),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"注入国际化"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#注入国际化"}},[t._v("#")]),t._v(" 注入国际化")]),t._v(" "),s("p",[t._v("平台使用 "),s("a",{attrs:{href:"https://www.npmjs.com/package/@intlify/unplugin-vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("@intlify/unplugin-vue-i18n"),s("OutboundLink")],1),t._v(" 这款国际化 "),s("code",[t._v("vite")]),t._v(" 插件配合 "),s("a",{attrs:{href:"https://www.npmjs.com/package/vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n"),s("OutboundLink")],1),t._v("来实现国际化,国际化文件采用了 "),s("code",[t._v("yaml")]),t._v(" 格式 "),s("a",{attrs:{href:"https://github.com/intlify/bundle-tools/blob/main/packages/vite-plugin-vue-i18n/README.md#include",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击查看更多格式"),s("OutboundLink")],1)]),t._v(" "),s("p",[t._v("中文添加到 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/locales/zh-CN.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("zh-CN.yaml"),s("OutboundLink")],1),t._v(" 文件里,英文添加到 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/locales/en.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("en.yaml"),s("OutboundLink")],1),t._v(" 文件里,支持嵌套结构,嵌套层级越深性能越低,如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(441),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"基础用法"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("① 使用 "),s("code",[t._v("vue-i18n")]),t._v(" 中 "),s("code",[t._v("useI18n")]),t._v(" 函数")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ t("buttons.hsLoginOut") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("p",[t._v("② 使用平台提供的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L77",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),s("OutboundLink")],1),t._v(" 函数")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ transformI18n("buttons.hsLoginOut") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("h3",{attrs:{id:"ts-文件中使用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v(".ts")]),t._v(" 文件中推荐使用平台提供的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L77",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),s("OutboundLink")],1),t._v(" 函数,因为 "),s("code",[t._v("useI18n")]),t._v(" 必须在 "),s("code",[t._v("setup")]),t._v(" 中使用,具体原因请看 "),s("a",{attrs:{href:"https://vue-i18n.intlify.dev/guide/advanced/composition.html#basic-usage",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n 文档"),s("OutboundLink")],1)]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transformI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"buttons.hsLoginOut"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),s("p",[s("code",[t._v("transformI18n")]),t._v(" 会自动读取 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/locales",target:"_blank",rel:"noopener noreferrer"}},[t._v("locales"),s("OutboundLink")],1),t._v(" 下的国际化语言,如果匹配到则返回,匹配不到的话就是您传什么就返回什么,这样避免报错。这也是为什么平台路由的 "),s("code",[t._v("title")]),t._v(" 字段支持传 "),s("code",[t._v("国际化")]),t._v(" 和 "),s("code",[t._v("非国际化")]),t._v(" 两种写法的原因")])]),t._v(" "),s("h2",{attrs:{id:"平台提供的-t"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#平台提供的-t"}},[t._v("#")]),t._v(" 平台提供的 "),s("code",[t._v("$t")])]),t._v(" "),s("p",[t._v("这里的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L102",target:"_blank",rel:"noopener noreferrer"}},[t._v("$t"),s("OutboundLink")],1),t._v(" 是指平台提供的函数,是配合 "),s("code",[t._v("i18n Ally")]),t._v(" 插件在 "),s("code",[t._v("vscode")]),t._v(" 里带来智能提示,无实际意义,只对提示起作用,而非 "),s("code",[t._v("vue-i18n")]),t._v(" 里的")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-2"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("对于 "),s("code",[t._v("i18n Ally")]),t._v(" 插件来说要想得到智能提示必须使用带有 "),s("code",[t._v("t")]),t._v(" 的别名而且 "),s("code",[t._v("t")]),t._v(" 永远在最后一位,例如 "),s("code",[t._v("$$t")]),t._v(" 、 "),s("code",[t._v("&t")]),t._v(" 类似格式都是生效的,而 "),s("code",[t._v("$t$")]),t._v(" 、 "),s("code",[t._v("t&")]),t._v(" 不生效")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ $t("login.usernameReg") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("p",[t._v("效果如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(442),loading:"lazy"}})]),t._v(" "),s("h3",{attrs:{id:"ts-文件中使用-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-2"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("$t")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"menus.hslogin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("p",[t._v("效果如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(443),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"当前的国际化环境"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#当前的国际化环境"}},[t._v("#")]),t._v(" 当前的国际化环境")]),t._v(" "),s("p",[t._v("当前的国际化环境是指当前系统正在使用中文还是英文("),s("code",[t._v("zh")]),t._v(":中文、"),s("code",[t._v("en")]),t._v(":英文)")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-3"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" locale "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br")])]),s("h3",{attrs:{id:"ts-文件中使用-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-3"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("因为 "),s("code",[t._v("useI18n")]),t._v(" 只能在 "),s("code",[t._v("setup")]),t._v(" 中使用,所以平台将当前的国际化环境在 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/responsive.ts#L12",target:"_blank",rel:"noopener noreferrer"}},[t._v("localStorage"),s("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" StorageConfigs "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/#/index"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" storageLocal "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@pureadmin/utils"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" locale "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n storageLocal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token generic-function"}},[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getItem")]),s("span",{pre:!0,attrs:{class:"token generic class-name"}},[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("StorageConfigs"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responsive-locale"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{443:function(t,s,a){t.exports=a.p+"assets/img/i18nAlly.5125221b.jpg"},444:function(t,s,a){t.exports=a.p+"assets/img/vscode.82274ec8.png"},445:function(t,s,a){t.exports=a.p+"assets/img/i18n.a8232d8f.jpg"},446:function(t,s,a){t.exports=a.p+"assets/img/i18nVue.04302f75.png"},447:function(t,s,a){t.exports=a.p+"assets/img/i18nRouter.a8b2498d.jpg"},540:function(t,s,a){"use strict";a.r(s);var n=a(8),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("平台内置了国际化,支持自定义国际化、"),s("code",[t._v("element-plus")]),t._v(" 国际化")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin 完整版"),s("OutboundLink")],1),t._v(" 只有国际化版本"),s("br"),t._v("\n精简版有 "),s("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/tree/i18n/",target:"_blank",rel:"noopener noreferrer"}},[t._v("国际化版本"),s("OutboundLink")],1),t._v(" 和 "),s("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[t._v("非国际化版本"),s("OutboundLink")],1),t._v(",实际项目开发推荐使用 "),s("RouterLink",{attrs:{to:"/pages/FAQ/#精简版是干啥的"}},[t._v("精简版")])],1),t._v(" "),s("h2",{attrs:{id:"vscode-插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vscode-插件"}},[t._v("#")]),t._v(" "),s("code",[t._v("vscode")]),t._v(" 插件")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v("vscode")]),t._v(" 插件商店搜 "),s("code",[t._v("lokalise.i18n-ally")]),t._v(" 进行安装,可以带来更友好的国际化提示")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(443),loading:"lazy"}})]),t._v(" "),s("p",[t._v("当然不要忘记把下面的 "),s("code",[t._v("json")]),t._v(" 代码添加到您 "),s("code",[t._v("vscode")]),t._v(" 的 "),s("code",[t._v("settings.json")]),t._v(" 中")]),t._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.localesPaths"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"locales"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.keystyle"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nested"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sortKeys"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.namespace"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledParsers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yaml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sourceLanguage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"en"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.displayLanguage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"zh-CN"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledFrameworks"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(444),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"注入国际化"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#注入国际化"}},[t._v("#")]),t._v(" 注入国际化")]),t._v(" "),s("p",[t._v("平台使用 "),s("a",{attrs:{href:"https://www.npmjs.com/package/@intlify/unplugin-vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("@intlify/unplugin-vue-i18n"),s("OutboundLink")],1),t._v(" 这款国际化 "),s("code",[t._v("vite")]),t._v(" 插件配合 "),s("a",{attrs:{href:"https://www.npmjs.com/package/vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n"),s("OutboundLink")],1),t._v("来实现国际化,国际化文件采用了 "),s("code",[t._v("yaml")]),t._v(" 格式 "),s("a",{attrs:{href:"https://github.com/intlify/bundle-tools/blob/main/packages/vite-plugin-vue-i18n/README.md#include",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击查看更多格式"),s("OutboundLink")],1)]),t._v(" "),s("p",[t._v("中文添加到 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/locales/zh-CN.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("zh-CN.yaml"),s("OutboundLink")],1),t._v(" 文件里,英文添加到 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/locales/en.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("en.yaml"),s("OutboundLink")],1),t._v(" 文件里,支持嵌套结构,嵌套层级越深性能越低,如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(445),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"基础用法"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("① 使用 "),s("code",[t._v("vue-i18n")]),t._v(" 中 "),s("code",[t._v("useI18n")]),t._v(" 函数")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ t("buttons.hsLoginOut") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("p",[t._v("② 使用平台提供的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L77",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),s("OutboundLink")],1),t._v(" 函数")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ transformI18n("buttons.hsLoginOut") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("h3",{attrs:{id:"ts-文件中使用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v(".ts")]),t._v(" 文件中推荐使用平台提供的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L77",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),s("OutboundLink")],1),t._v(" 函数,因为 "),s("code",[t._v("useI18n")]),t._v(" 必须在 "),s("code",[t._v("setup")]),t._v(" 中使用,具体原因请看 "),s("a",{attrs:{href:"https://vue-i18n.intlify.dev/guide/advanced/composition.html#basic-usage",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n 文档"),s("OutboundLink")],1)]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transformI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"buttons.hsLoginOut"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),s("p",[s("code",[t._v("transformI18n")]),t._v(" 会自动读取 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/locales",target:"_blank",rel:"noopener noreferrer"}},[t._v("locales"),s("OutboundLink")],1),t._v(" 下的国际化语言,如果匹配到则返回,匹配不到的话就是您传什么就返回什么,这样避免报错。这也是为什么平台路由的 "),s("code",[t._v("title")]),t._v(" 字段支持传 "),s("code",[t._v("国际化")]),t._v(" 和 "),s("code",[t._v("非国际化")]),t._v(" 两种写法的原因")])]),t._v(" "),s("h2",{attrs:{id:"平台提供的-t"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#平台提供的-t"}},[t._v("#")]),t._v(" 平台提供的 "),s("code",[t._v("$t")])]),t._v(" "),s("p",[t._v("这里的 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/plugins/i18n.ts#L102",target:"_blank",rel:"noopener noreferrer"}},[t._v("$t"),s("OutboundLink")],1),t._v(" 是指平台提供的函数,是配合 "),s("code",[t._v("i18n Ally")]),t._v(" 插件在 "),s("code",[t._v("vscode")]),t._v(" 里带来智能提示,无实际意义,只对提示起作用,而非 "),s("code",[t._v("vue-i18n")]),t._v(" 里的")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-2"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("对于 "),s("code",[t._v("i18n Ally")]),t._v(" 插件来说要想得到智能提示必须使用带有 "),s("code",[t._v("t")]),t._v(" 的别名而且 "),s("code",[t._v("t")]),t._v(" 永远在最后一位,例如 "),s("code",[t._v("$$t")]),t._v(" 、 "),s("code",[t._v("&t")]),t._v(" 类似格式都是生效的,而 "),s("code",[t._v("$t$")]),t._v(" 、 "),s("code",[t._v("t&")]),t._v(" 不生效")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ $t("login.usernameReg") }}'),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("p",[t._v("效果如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(446),loading:"lazy"}})]),t._v(" "),s("h3",{attrs:{id:"ts-文件中使用-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-2"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/@/plugins/i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("$t")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"menus.hslogin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("p",[t._v("效果如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(447),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"当前的国际化环境"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#当前的国际化环境"}},[t._v("#")]),t._v(" 当前的国际化环境")]),t._v(" "),s("p",[t._v("当前的国际化环境是指当前系统正在使用中文还是英文("),s("code",[t._v("zh")]),t._v(":中文、"),s("code",[t._v("en")]),t._v(":英文)")]),t._v(" "),s("h3",{attrs:{id:"vue-文件中使用-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-3"}},[t._v("#")]),t._v(" "),s("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),s("div",{staticClass:"language-Vue line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-vue"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" locale "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br")])]),s("h3",{attrs:{id:"ts-文件中使用-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-3"}},[t._v("#")]),t._v(" "),s("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),s("p",[t._v("因为 "),s("code",[t._v("useI18n")]),t._v(" 只能在 "),s("code",[t._v("setup")]),t._v(" 中使用,所以平台将当前的国际化环境在 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/responsive.ts#L12",target:"_blank",rel:"noopener noreferrer"}},[t._v("localStorage"),s("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),s("div",{staticClass:"language-ts line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-ts"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" StorageConfigs "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/#/index"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" storageLocal "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@pureadmin/utils"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" locale "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n storageLocal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token generic-function"}},[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getItem")]),s("span",{pre:!0,attrs:{class:"token generic class-name"}},[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("StorageConfigs"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responsive-locale"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/14.5491c3d1.js b/assets/js/14.504f842b.js similarity index 98% rename from assets/js/14.5491c3d1.js rename to assets/js/14.504f842b.js index cde3b293..02deb55a 100644 --- a/assets/js/14.5491c3d1.js +++ b/assets/js/14.504f842b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{445:function(t,a,s){t.exports=s.p+"assets/img/rbac.078e7dea.jpg"},446:function(t,a,s){t.exports=s.p+"assets/img/roles.fb0573d2.jpg"},447:function(t,a,s){t.exports=s.p+"assets/img/auths.a7fbba68.jpg"},448:function(t,a,s){t.exports=s.p+"assets/img/permissions.09ee098d.jpg"},541:function(t,a,s){"use strict";s.r(a);var e=s(8),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("p",[t._v("所谓 "),a("code",[t._v("RBAC")]),t._v("(Role Based Access Control)权限指的是基于角色的访问控制")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(445),loading:"lazy"}})]),t._v(" "),a("h2",{attrs:{id:"用户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户"}},[t._v("#")]),t._v(" 用户")]),t._v(" "),a("p",[t._v("平台用 "),a("code",[t._v("mock")]),t._v(" 模拟出两个账号,一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L14",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),a("OutboundLink")],1),t._v(",另一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L30",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),a("OutboundLink")],1),t._v(",用户名字段为 "),a("code",[t._v("username")]),t._v(" ,为字符串类型,当然平台将用户名在 "),a("code",[t._v("pinia")]),t._v(" 的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/user.ts#L25",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),a("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),a("h2",{attrs:{id:"角色"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#角色"}},[t._v("#")]),t._v(" 角色")]),t._v(" "),a("p",[t._v("平台用 "),a("code",[t._v("mock")]),t._v(" 模拟出两个角色,一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L17",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),a("OutboundLink")],1),t._v(",另一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L32",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),a("OutboundLink")],1),t._v(",角色存放在 "),a("code",[t._v("roles")]),t._v(" 字段中,为数组类型,可支持多个角色,当然平台将 "),a("code",[t._v("当前登录用户的角色")]),t._v(" 在 "),a("code",[t._v("pinia")]),t._v(" 的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/user.ts#L29",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),a("OutboundLink")],1),t._v(" 里也存了一份")]),t._v(" "),a("h2",{attrs:{id:"权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#权限"}},[t._v("#")]),t._v(" 权限")]),t._v(" "),a("p",[t._v("整体分为 "),a("a",{attrs:{href:"#%E7%B2%97%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("粗粒度权限")]),t._v(" 和 "),a("a",{attrs:{href:"#%E7%BB%86%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("细粒度权限")])]),t._v(" "),a("h3",{attrs:{id:"粗粒度权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#粗粒度权限"}},[t._v("#")]),t._v(" 粗粒度权限")]),t._v(" "),a("h4",{attrs:{id:"菜单权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#菜单权限"}},[t._v("#")]),t._v(" 菜单权限")]),t._v(" "),a("h5",{attrs:{id:"实现原理、代码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),a("p",[t._v("页面整体的菜单存放在 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/permission.ts#L21",target:"_blank",rel:"noopener noreferrer"}},[t._v("wholeMenus"),a("OutboundLink")],1),t._v(",所以我们只需要控制 "),a("code",[t._v("wholeMenus")]),t._v(" 就能控制菜单的显示、隐藏。通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L85",target:"_blank",rel:"noopener noreferrer"}},[t._v("filterNoPermissionTree"),a("OutboundLink")],1),t._v(" 函数从菜单中过滤无权限的菜单")]),t._v(" "),a("h5",{attrs:{id:"如何配置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何配置"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),a("p",[t._v("只需要通过返回路由的 "),a("code",[t._v("roles")]),t._v(" 配置项,赋予该菜单权限即可,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(446),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("实现细节")]),t._v(" "),a("p",[t._v("将菜单与路由解藕,这样可以更灵活的控制二者,不会造成一方改动必会影响另一方")])]),t._v(" "),a("h4",{attrs:{id:"url-链接权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#url-链接权限"}},[t._v("#")]),t._v(" "),a("code",[t._v("url")]),t._v(" 链接权限")]),t._v(" "),a("h5",{attrs:{id:"实现原理、代码-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-2"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),a("p",[t._v("平台在路由的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/index.ts#L109",target:"_blank",rel:"noopener noreferrer"}},[t._v("beforeEach"),a("OutboundLink")],1),t._v(" 钩子函数中,通过对比当前用户的角色和当前路由中 "),a("code",[t._v("roles")]),t._v(" 字段来判断是否有无权限,无权限跳转 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/error/403.vue",target:"_blank",rel:"noopener noreferrer"}},[t._v("403"),a("OutboundLink")],1),t._v(" 页面")]),t._v(" "),a("h5",{attrs:{id:"如何配置-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-2"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),a("p",[t._v("您不需要做任何配置,只需要像上图一样配置好权限就行,平台会根据有无权限自行判断,当有 "),a("code",[t._v("admin")]),t._v(" 权限时可以看到系统管理目录以及里面的菜单页面并且可以通过 "),a("code",[t._v("url")]),t._v(" 跳转,当然也可以在 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/layout/components/lay-search",target:"_blank",rel:"noopener noreferrer"}},[t._v("菜单搜索"),a("OutboundLink")],1),t._v(" 中找到,当无 "),a("code",[t._v("admin")]),t._v(" 权限时反之")]),t._v(" "),a("h4",{attrs:{id:"按钮、组件、类方法权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按钮、组件、类方法权限"}},[t._v("#")]),t._v(" 按钮、组件、类方法权限")]),t._v(" "),a("p",[t._v("针对这三类权限,平台提供两种模式,它们都有"),a("code",[t._v("组件方式判断权限")]),t._v("、"),a("code",[t._v("函数方式判断权限")]),t._v("、"),a("code",[t._v("指令方式判断权限")]),t._v(" 三种方法")]),t._v(" "),a("h5",{attrs:{id:"第一种模式-路由返回按钮级别权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#第一种模式-路由返回按钮级别权限"}},[t._v("#")]),t._v(" 第一种模式,路由返回按钮级别权限")]),t._v(" "),a("p",[t._v("通过路由的 "),a("code",[t._v("auths")]),t._v(" 配置项,赋予对应页面按钮级别权限,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(447),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("单个路由的 "),a("code",[t._v("auths")]),t._v(" 字段中按钮级别权限标识必须保持唯一,而在不同路由的 "),a("code",[t._v("auths")]),t._v(" 字段中可以重复使用相同的权限标识")])]),t._v(" "),a("h6",{attrs:{id:"组件方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#组件方式判断权限"}},[t._v("#")]),t._v(" 组件方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数,进行权限组件的封装,使用 "),a("code",[t._v("Vue")]),t._v(" 提供的 "),a("a",{attrs:{href:"https://cn.vuejs.org/guide/extras/rendering-mechanism.html#patch-flags",target:"_blank",rel:"noopener noreferrer"}},[t._v("Fragment"),a("OutboundLink")],1),t._v(" 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/components/ReAuth/src/auth.tsx",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L25-L46",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Auth")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("btn_add"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" 拥有code:'btn_add' 权限可见 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("平台已经全局注册 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/main.ts#L48",target:"_blank",rel:"noopener noreferrer"}},[t._v("Auth"),a("OutboundLink")],1),t._v(" 组件,无需重复注册")])]),t._v(" "),a("h6",{attrs:{id:"函数方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数方式判断权限"}},[t._v("#")]),t._v(" 函数方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件、类方法权限都可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数判断某些按钮、组件、类方法是否有按钮级别的权限")]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L55-L74",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hasAuth('btn_add')"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hasAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"btn_add"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"显示"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"隐藏"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h6",{attrs:{id:"指令方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#指令方式判断权限"}},[t._v("#")]),t._v(" 指令方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用。指令方式不能动态修改权限")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数,进行权限指令的封装。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/directives/auth/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L85-L102",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-auth")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("btn_add'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h5",{attrs:{id:"第二种模式-登录接口返回按钮级别权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#第二种模式-登录接口返回按钮级别权限"}},[t._v("#")]),t._v(" 第二种模式,登录接口返回按钮级别权限")]),t._v(" "),a("p",[t._v("通过登录接口的"),a("code",[t._v("permissions")]),t._v("字段返回按钮级别权限,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(448),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[a("code",[t._v("permissions")]),t._v("字段里的按钮级别权限标识需保持唯一")])]),t._v(" "),a("h6",{attrs:{id:"组件方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#组件方式判断权限-2"}},[t._v("#")]),t._v(" 组件方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数,进行权限组件的封装,使用 "),a("code",[t._v("Vue")]),t._v(" 提供的 "),a("a",{attrs:{href:"https://cn.vuejs.org/guide/extras/rendering-mechanism.html#patch-flags",target:"_blank",rel:"noopener noreferrer"}},[t._v("Fragment"),a("OutboundLink")],1),t._v(" 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/components/RePerms/src/perms.tsx",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L31-L52",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Perms")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("permission:btn:add"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" 拥有code:'permission:btn:add' 权限可见 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("平台已经全局注册 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/main.ts#L49",target:"_blank",rel:"noopener noreferrer"}},[t._v("Perms"),a("OutboundLink")],1),t._v(" 组件,无需重复注册")])]),t._v(" "),a("h6",{attrs:{id:"函数方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数方式判断权限-2"}},[t._v("#")]),t._v(" 函数方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件、类方法权限都可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数判断某些按钮、组件、类方法是否有按钮级别的权限")]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L61-L84",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hasPerms('permission:btn:add')"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'permission:btn:add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hasPerms")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"btn_add"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"显示"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"隐藏"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h6",{attrs:{id:"指令方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#指令方式判断权限-2"}},[t._v("#")]),t._v(" 指令方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用。指令方式不能动态修改权限")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数,进行权限指令的封装。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/directives/perms/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L95-L112",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-perms")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("permission:btn:add'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'permission:btn:add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h3",{attrs:{id:"细粒度权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#细粒度权限"}},[t._v("#")]),t._v(" 细粒度权限")]),t._v(" "),a("h4",{attrs:{id:"数据权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据权限"}},[t._v("#")]),t._v(" 数据权限")]),t._v(" "),a("p",[t._v("数据权限对页面的要求就非常简单了,比如可以将数据权限的配置功能放在 "),a("code",[t._v("角色管理")]),t._v(" 页面进行配置即可")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{439:function(t,a,s){t.exports=s.p+"assets/img/rbac.078e7dea.jpg"},440:function(t,a,s){t.exports=s.p+"assets/img/roles.fb0573d2.jpg"},441:function(t,a,s){t.exports=s.p+"assets/img/auths.a7fbba68.jpg"},442:function(t,a,s){t.exports=s.p+"assets/img/permissions.09ee098d.jpg"},539:function(t,a,s){"use strict";s.r(a);var e=s(8),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("p",[t._v("所谓 "),a("code",[t._v("RBAC")]),t._v("(Role Based Access Control)权限指的是基于角色的访问控制")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(439),loading:"lazy"}})]),t._v(" "),a("h2",{attrs:{id:"用户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户"}},[t._v("#")]),t._v(" 用户")]),t._v(" "),a("p",[t._v("平台用 "),a("code",[t._v("mock")]),t._v(" 模拟出两个账号,一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L14",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),a("OutboundLink")],1),t._v(",另一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L30",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),a("OutboundLink")],1),t._v(",用户名字段为 "),a("code",[t._v("username")]),t._v(" ,为字符串类型,当然平台将用户名在 "),a("code",[t._v("pinia")]),t._v(" 的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/user.ts#L25",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),a("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),a("h2",{attrs:{id:"角色"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#角色"}},[t._v("#")]),t._v(" 角色")]),t._v(" "),a("p",[t._v("平台用 "),a("code",[t._v("mock")]),t._v(" 模拟出两个角色,一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L17",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),a("OutboundLink")],1),t._v(",另一个是 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/mock/login.ts#L32",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),a("OutboundLink")],1),t._v(",角色存放在 "),a("code",[t._v("roles")]),t._v(" 字段中,为数组类型,可支持多个角色,当然平台将 "),a("code",[t._v("当前登录用户的角色")]),t._v(" 在 "),a("code",[t._v("pinia")]),t._v(" 的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/user.ts#L29",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),a("OutboundLink")],1),t._v(" 里也存了一份")]),t._v(" "),a("h2",{attrs:{id:"权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#权限"}},[t._v("#")]),t._v(" 权限")]),t._v(" "),a("p",[t._v("整体分为 "),a("a",{attrs:{href:"#%E7%B2%97%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("粗粒度权限")]),t._v(" 和 "),a("a",{attrs:{href:"#%E7%BB%86%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("细粒度权限")])]),t._v(" "),a("h3",{attrs:{id:"粗粒度权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#粗粒度权限"}},[t._v("#")]),t._v(" 粗粒度权限")]),t._v(" "),a("h4",{attrs:{id:"菜单权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#菜单权限"}},[t._v("#")]),t._v(" 菜单权限")]),t._v(" "),a("h5",{attrs:{id:"实现原理、代码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),a("p",[t._v("页面整体的菜单存放在 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/store/modules/permission.ts#L21",target:"_blank",rel:"noopener noreferrer"}},[t._v("wholeMenus"),a("OutboundLink")],1),t._v(",所以我们只需要控制 "),a("code",[t._v("wholeMenus")]),t._v(" 就能控制菜单的显示、隐藏。通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L85",target:"_blank",rel:"noopener noreferrer"}},[t._v("filterNoPermissionTree"),a("OutboundLink")],1),t._v(" 函数从菜单中过滤无权限的菜单")]),t._v(" "),a("h5",{attrs:{id:"如何配置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何配置"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),a("p",[t._v("只需要通过返回路由的 "),a("code",[t._v("roles")]),t._v(" 配置项,赋予该菜单权限即可,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(440),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("实现细节")]),t._v(" "),a("p",[t._v("将菜单与路由解藕,这样可以更灵活的控制二者,不会造成一方改动必会影响另一方")])]),t._v(" "),a("h4",{attrs:{id:"url-链接权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#url-链接权限"}},[t._v("#")]),t._v(" "),a("code",[t._v("url")]),t._v(" 链接权限")]),t._v(" "),a("h5",{attrs:{id:"实现原理、代码-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-2"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),a("p",[t._v("平台在路由的 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/index.ts#L109",target:"_blank",rel:"noopener noreferrer"}},[t._v("beforeEach"),a("OutboundLink")],1),t._v(" 钩子函数中,通过对比当前用户的角色和当前路由中 "),a("code",[t._v("roles")]),t._v(" 字段来判断是否有无权限,无权限跳转 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/error/403.vue",target:"_blank",rel:"noopener noreferrer"}},[t._v("403"),a("OutboundLink")],1),t._v(" 页面")]),t._v(" "),a("h5",{attrs:{id:"如何配置-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-2"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),a("p",[t._v("您不需要做任何配置,只需要像上图一样配置好权限就行,平台会根据有无权限自行判断,当有 "),a("code",[t._v("admin")]),t._v(" 权限时可以看到系统管理目录以及里面的菜单页面并且可以通过 "),a("code",[t._v("url")]),t._v(" 跳转,当然也可以在 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/tree/main/src/layout/components/lay-search",target:"_blank",rel:"noopener noreferrer"}},[t._v("菜单搜索"),a("OutboundLink")],1),t._v(" 中找到,当无 "),a("code",[t._v("admin")]),t._v(" 权限时反之")]),t._v(" "),a("h4",{attrs:{id:"按钮、组件、类方法权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按钮、组件、类方法权限"}},[t._v("#")]),t._v(" 按钮、组件、类方法权限")]),t._v(" "),a("p",[t._v("针对这三类权限,平台提供两种模式,它们都有"),a("code",[t._v("组件方式判断权限")]),t._v("、"),a("code",[t._v("函数方式判断权限")]),t._v("、"),a("code",[t._v("指令方式判断权限")]),t._v(" 三种方法")]),t._v(" "),a("h5",{attrs:{id:"第一种模式-路由返回按钮级别权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#第一种模式-路由返回按钮级别权限"}},[t._v("#")]),t._v(" 第一种模式,路由返回按钮级别权限")]),t._v(" "),a("p",[t._v("通过路由的 "),a("code",[t._v("auths")]),t._v(" 配置项,赋予对应页面按钮级别权限,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(441),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("单个路由的 "),a("code",[t._v("auths")]),t._v(" 字段中按钮级别权限标识必须保持唯一,而在不同路由的 "),a("code",[t._v("auths")]),t._v(" 字段中可以重复使用相同的权限标识")])]),t._v(" "),a("h6",{attrs:{id:"组件方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#组件方式判断权限"}},[t._v("#")]),t._v(" 组件方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数,进行权限组件的封装,使用 "),a("code",[t._v("Vue")]),t._v(" 提供的 "),a("a",{attrs:{href:"https://cn.vuejs.org/guide/extras/rendering-mechanism.html#patch-flags",target:"_blank",rel:"noopener noreferrer"}},[t._v("Fragment"),a("OutboundLink")],1),t._v(" 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/components/ReAuth/src/auth.tsx",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L25-L46",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Auth")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("btn_add"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" 拥有code:'btn_add' 权限可见 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("平台已经全局注册 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/main.ts#L48",target:"_blank",rel:"noopener noreferrer"}},[t._v("Auth"),a("OutboundLink")],1),t._v(" 组件,无需重复注册")])]),t._v(" "),a("h6",{attrs:{id:"函数方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数方式判断权限"}},[t._v("#")]),t._v(" 函数方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件、类方法权限都可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数判断某些按钮、组件、类方法是否有按钮级别的权限")]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L55-L74",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hasAuth('btn_add')"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hasAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"btn_add"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"显示"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"隐藏"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h6",{attrs:{id:"指令方式判断权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#指令方式判断权限"}},[t._v("#")]),t._v(" 指令方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用。指令方式不能动态修改权限")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/router/utils.ts#L359",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),a("OutboundLink")],1),t._v(" 函数,进行权限指令的封装。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/directives/auth/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/index.vue#L85-L102",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-auth")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("btn_add'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h5",{attrs:{id:"第二种模式-登录接口返回按钮级别权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#第二种模式-登录接口返回按钮级别权限"}},[t._v("#")]),t._v(" 第二种模式,登录接口返回按钮级别权限")]),t._v(" "),a("p",[t._v("通过登录接口的"),a("code",[t._v("permissions")]),t._v("字段返回按钮级别权限,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":s(442),loading:"lazy"}})]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[a("code",[t._v("permissions")]),t._v("字段里的按钮级别权限标识需保持唯一")])]),t._v(" "),a("h6",{attrs:{id:"组件方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#组件方式判断权限-2"}},[t._v("#")]),t._v(" 组件方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数,进行权限组件的封装,使用 "),a("code",[t._v("Vue")]),t._v(" 提供的 "),a("a",{attrs:{href:"https://cn.vuejs.org/guide/extras/rendering-mechanism.html#patch-flags",target:"_blank",rel:"noopener noreferrer"}},[t._v("Fragment"),a("OutboundLink")],1),t._v(" 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/components/RePerms/src/perms.tsx",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L31-L52",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Perms")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("permission:btn:add"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" 拥有code:'permission:btn:add' 权限可见 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),a("p",[t._v("平台已经全局注册 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/main.ts#L49",target:"_blank",rel:"noopener noreferrer"}},[t._v("Perms"),a("OutboundLink")],1),t._v(" 组件,无需重复注册")])]),t._v(" "),a("h6",{attrs:{id:"函数方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数方式判断权限-2"}},[t._v("#")]),t._v(" 函数方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件、类方法权限都可用")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数判断某些按钮、组件、类方法是否有按钮级别的权限")]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L61-L84",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hasPerms('permission:btn:add')"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'permission:btn:add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hasPerms")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"btn_add"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"显示"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"隐藏"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h6",{attrs:{id:"指令方式判断权限-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#指令方式判断权限-2"}},[t._v("#")]),t._v(" 指令方式判断权限")]),t._v(" "),a("p",[t._v("按钮、组件权限可用。指令方式不能动态修改权限")]),t._v(" "),a("ul",[a("li",[t._v("实现原理、代码")])]),t._v(" "),a("p",[t._v("通过 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L131",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasPerms"),a("OutboundLink")],1),t._v(" 函数,进行权限指令的封装。"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/directives/perms/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[t._v("如何配置")])]),t._v(" "),a("p",[t._v("具体参考 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/permission/button/perms.vue#L95-L112",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/perms.vue"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-Vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-perms")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("permission:btn:add'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("plain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("warning"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'permission:btn:add' 权限可见\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h3",{attrs:{id:"细粒度权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#细粒度权限"}},[t._v("#")]),t._v(" 细粒度权限")]),t._v(" "),a("h4",{attrs:{id:"数据权限"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据权限"}},[t._v("#")]),t._v(" 数据权限")]),t._v(" "),a("p",[t._v("数据权限对页面的要求就非常简单了,比如可以将数据权限的配置功能放在 "),a("code",[t._v("角色管理")]),t._v(" 页面进行配置即可")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/15.096c8b0f.js b/assets/js/15.521ba0d4.js similarity index 97% rename from assets/js/15.096c8b0f.js rename to assets/js/15.521ba0d4.js index ca5c9069..8e61473b 100644 --- a/assets/js/15.096c8b0f.js +++ b/assets/js/15.521ba0d4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{457:function(e,t,r){e.exports=r.p+"assets/img/buildgood.1a9db1bb.jpg"},458:function(e,t,r){e.exports=r.p+"assets/img/no-output.90d47bbf.jpg"},459:function(e,t,r){e.exports=r.p+"assets/img/output.28badfe6.jpg"},544:function(e,t,r){"use strict";r.r(t);var a=r(8),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("打包优化关联着网站的稳定与加载速度,在开发中也是非常重要的一项")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(457),loading:"lazy"}})]),e._v(" "),t("h2",{attrs:{id:"vite-自身的构建优化"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vite-自身的构建优化"}},[e._v("#")]),e._v(" "),t("code",[e._v("vite")]),e._v(" 自身的构建优化")]),e._v(" "),t("p",[e._v("点击查看 "),t("a",{attrs:{href:"https://cn.vitejs.dev/guide/features.html#build-optimizations",target:"_blank",rel:"noopener noreferrer"}},[e._v("build-optimizations"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vite官方文档"}})],1),e._v(" "),t("h2",{attrs:{id:"css-优化"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css-优化"}},[e._v("#")]),e._v(" "),t("code",[e._v("css")]),e._v(" 优化")]),e._v(" "),t("p",[e._v("分两步优化")]),e._v(" "),t("h3",{attrs:{id:"​-压缩-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#​-压缩-css"}},[e._v("#")]),e._v(" ​ 压缩 "),t("code",[e._v("css")])]),e._v(" "),t("p",[e._v("使用 "),t("RouterLink",{attrs:{to:"/pages/tailwindcss/#cssnano"}},[e._v("cssnano")]),e._v(" 去压缩 "),t("code",[e._v("css")])],1),e._v(" "),t("h3",{attrs:{id:"​-自动添加浏览器前缀"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#​-自动添加浏览器前缀"}},[e._v("#")]),e._v(" ​ 自动添加浏览器前缀")]),e._v(" "),t("p",[e._v("使用 "),t("RouterLink",{attrs:{to:"/pages/tailwindcss/#autoprefixer"}},[e._v("Autoprefixer")]),e._v(" 自动添加浏览器前缀")],1),e._v(" "),t("h2",{attrs:{id:"组件、工具库"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#组件、工具库"}},[e._v("#")]),e._v(" 组件、工具库")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("无论是组件(如 "),t("code",[e._v("element-plus")]),e._v("),还是工具库(如 "),t("code",[e._v("lodash")]),e._v("、"),t("code",[e._v("axios")]),e._v(")我们都应该尽可能的按需引入,使其有良好的  "),t("code",[e._v("tree-shaking")]),e._v(" 效果,这样项目整体打包出来的无用代码就少之又少了")])]),e._v(" "),t("li",[t("p",[e._v("拿 "),t("code",[e._v("lodash")]),e._v(" 举例,"),t("code",[e._v("lodash")]),e._v(" 默认是 "),t("code",[e._v("cjs")]),e._v(" 格式,不支持 "),t("code",[e._v("es6")]),e._v(" 的 "),t("code",[e._v("import")]),e._v(" 语法,那么我们就可以去 "),t("code",[e._v("github")]),e._v(" 或者某些搜索引擎去寻找替代品,最终平台找到了 "),t("code",[e._v("lodash-unified")]),e._v(",它完全兼容 "),t("code",[e._v("lodash")]),e._v(" 的全部语法并且既支持 "),t("code",[e._v("esm")]),e._v(" 又支持 "),t("code",[e._v("cjs")]),e._v(",这使得它无论在浏览器还是 "),t("code",[e._v("node")]),e._v(" 环境中表现都很良好。当然如果遇到那种只支持 "),t("code",[e._v("cjs")]),e._v(" 格式,网上找遍了都找不到兼容 "),t("code",[e._v("esm")]),e._v(" 格式的咋办呢,这时你可以参考 "),t("code",[e._v("lodash-unified")]),e._v(",看看别人是如何转换的 😊")])]),e._v(" "),t("li",[t("p",[e._v("平台精简版首次启动时间我这边测试是 "),t("code",[e._v("6")]),e._v(" 秒,刷新页面的话开启 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/public/platform-config.json#L23",target:"_blank",rel:"noopener noreferrer"}},[e._v("CachingAsyncRoutes"),t("OutboundLink")],1),e._v(" 可能连 "),t("code",[e._v("1")]),e._v(" 秒都不要。如果您使用 "),t("code",[e._v("pure-admin")]),e._v(" 且当前网页"),t("code",[e._v("首启动")]),e._v("和"),t("code",[e._v("刷新页面")]),e._v("的等待时间远远大于前面的数字,也该考虑优化了。当项目具有一定规模的时候,优化并没有那么容易,所以您在写代码前就应该遵循我上面的说法,按需引入才是 "),t("code",[e._v("yyds")]),e._v(" 😄")])])]),e._v(" "),t("ul",[t("li",[t("code",[e._v("vite")]),e._v(" 目前最大的性能瓶颈是大量模块的首页加载,可看 "),t("a",{attrs:{href:"https://github.com/vitejs/vite/issues/1309#issue-777569758",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-issues"),t("OutboundLink")],1),e._v(",值得期待的是这个 "),t("a",{attrs:{href:"https://github.com/vitejs/vite/pull/10671",target:"_blank",rel:"noopener noreferrer"}},[e._v("pr"),t("OutboundLink")],1),e._v(" 可能会缓解这个麻烦")])]),e._v(" "),t("h2",{attrs:{id:"压缩-gzip、brotli-格式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩-gzip、brotli-格式"}},[e._v("#")]),e._v(" 压缩 "),t("code",[e._v("gzip")]),e._v("、"),t("code",[e._v("brotli")]),e._v(" 格式")]),e._v(" "),t("p",[e._v("使用 "),t("a",{attrs:{href:"https://github.com/vbenjs/vite-plugin-compression",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-compression"),t("OutboundLink")],1),e._v(" 对平台进行 "),t("code",[e._v("gzip")]),e._v(" 或者 "),t("code",[e._v("brotli")]),e._v(" 压缩,"),t("code",[e._v("nginx")]),e._v(" 对这两种压缩模式都支持,压缩后部署到 "),t("code",[e._v("nginx")]),e._v(" 将极大提高网页加载速度")]),e._v(" "),t("h3",{attrs:{id:"如何开启压缩"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何开启压缩"}},[e._v("#")]),e._v(" 如何开启压缩")]),e._v(" "),t("p",[e._v("来到 "),t("code",[e._v(".env.production")]),e._v(" 文件,设置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.env.production#L13",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_COMPRESSION"),t("OutboundLink")],1),e._v(" 即可。设置总体分为下面两种 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/compress.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("具体实现代码"),t("OutboundLink")],1)]),e._v(" "),t("h4",{attrs:{id:"两种总体设置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#两种总体设置"}},[e._v("#")]),e._v(" 两种总体设置")]),e._v(" "),t("ol",[t("li",[e._v("压缩时不删除原始文件的配置")]),e._v(" "),t("li",[e._v("压缩时删除原始文件的配置")])]),e._v(" "),t("h5",{attrs:{id:"压缩时不删除原始文件的配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩时不删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时不删除原始文件的配置")]),e._v(" "),t("div",{staticClass:"language-.env.production line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('开启 gzip 压缩\nVITE_COMPRESSION = "gzip"\n\n开启 brotli 压缩\nVITE_COMPRESSION = "brotli"\n\n# 同时开启 gzip 与 brotli 压缩\nVITE_COMPRESSION = "both"\n\n# 不开启压缩,默认\nVITE_COMPRESSION = "none"\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("h5",{attrs:{id:"压缩时删除原始文件的配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩时删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时删除原始文件的配置")]),e._v(" "),t("div",{staticClass:"language-.env.production line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('开启 gzip 压缩\nVITE_COMPRESSION = "gzip-clear"\n\n开启 brotli 压缩\nVITE_COMPRESSION = "brotli-clear"\n\n# 同时开启 gzip 与 brotli 压缩\nVITE_COMPRESSION = "both-clear"\n\n# 不开启压缩,默认\nVITE_COMPRESSION = "none"\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("h2",{attrs:{id:"采用-cdn-模式替换本地依赖"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#采用-cdn-模式替换本地依赖"}},[e._v("#")]),e._v(" 采用 "),t("code",[e._v("cdn")]),e._v(" 模式替换本地依赖")]),e._v(" "),t("h3",{attrs:{id:"vite-插件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vite-插件"}},[e._v("#")]),e._v(" "),t("code",[e._v("vite")]),e._v(" 插件")]),e._v(" "),t("p",[e._v("使用 "),t("a",{attrs:{href:"https://github.com/MMF-FE/vite-plugin-cdn-import/blob/master/README.zh-CN.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-cdn-import"),t("OutboundLink")],1),e._v(" 插件,在打包时将指定的 "),t("code",[e._v("modules")]),e._v(" 替换成 "),t("code",[e._v("cdn")]),e._v(" 链接,从而减少构建时间,提高生产环境中页面加载速度。")]),e._v(" "),t("h3",{attrs:{id:"cdn-厂商-免费"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cdn-厂商-免费"}},[e._v("#")]),e._v(" "),t("code",[e._v("cdn")]),e._v(" 厂商(免费)")]),e._v(" "),t("p",[e._v("平台 "),t("code",[e._v("cdn")]),e._v(" 采用的是国内 "),t("a",{attrs:{href:"https://www.bootcdn.cn",target:"_blank",rel:"noopener noreferrer"}},[e._v("bootcdn"),t("OutboundLink")],1),e._v(",主要是稳定并且快,当然您也可以选择 "),t("a",{attrs:{href:"https://unpkg.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("unpkg"),t("OutboundLink")],1),e._v(" 或者 "),t("a",{attrs:{href:"https://www.jsdelivr.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("jsdelivr"),t("OutboundLink")],1),e._v(",这两个 "),t("code",[e._v("cdn")]),e._v(" 是国外的")]),e._v(" "),t("h3",{attrs:{id:"如何启动-cdn-替换"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何启动-cdn-替换"}},[e._v("#")]),e._v(" 如何启动 "),t("code",[e._v("cdn")]),e._v(" 替换")]),e._v(" "),t("p",[e._v("来到 "),t("code",[e._v(".env.production")]),e._v(" 文件,将 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.env.production#L8",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_CDN"),t("OutboundLink")],1),e._v(" 设置成 "),t("code",[e._v("true")]),e._v(" 即可")]),e._v(" "),t("h3",{attrs:{id:"默认启动-cdn-替换的模块有哪些"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#默认启动-cdn-替换的模块有哪些"}},[e._v("#")]),e._v(" 默认启动 "),t("code",[e._v("cdn")]),e._v(" 替换的模块有哪些")]),e._v(" "),t("p",[t("code",[e._v("vue")]),e._v("、"),t("code",[e._v("vue-router")]),e._v("、"),t("code",[e._v("vue-i18n")]),e._v("、"),t("code",[e._v("vue-demi")]),e._v("、"),t("code",[e._v("pinia")]),e._v("、"),t("code",[e._v("element-plus")]),e._v("、"),t("code",[e._v("axios")]),e._v("、"),t("code",[e._v("dayjs")]),e._v("、"),t("code",[e._v("echarts")]),e._v(" 具体代码 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/cdn.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("build/cdn.ts"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"生产环境删除-console-log"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#生产环境删除-console-log"}},[e._v("#")]),e._v(" 生产环境删除 "),t("code",[e._v("console.log")])]),e._v(" "),t("p",[e._v("使用平台开发的 "),t("a",{attrs:{href:"https://github.com/xiaoxian521/vite-plugin-remove-console",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-remove-console"),t("OutboundLink")],1),e._v(" 插件,在打包构建时移除平台中所有的 "),t("code",[e._v("console.log")])]),e._v(" "),t("h2",{attrs:{id:"静态资源分类打包"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#静态资源分类打包"}},[e._v("#")]),e._v(" 静态资源分类打包")]),e._v(" "),t("p",[t("code",[e._v("vite")]),e._v(" 是基于 "),t("code",[e._v("esbuild")]),e._v(" 和 "),t("code",[e._v("rollup")]),e._v(" 构建的,在打包时如果不进行 "),t("code",[e._v("output")]),e._v(" 的配置,打包出来的效果如下图(这也是 "),t("code",[e._v("vite")]),e._v(" 默认打包出来的效果,可以看到所有文件都混在一起)")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(458),loading:"lazy"}})]),e._v(" "),t("p",[e._v("下图是我们配置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/vite.config.ts#L50-L54",target:"_blank",rel:"noopener noreferrer"}},[e._v("output"),t("OutboundLink")],1),e._v(" 后的效果,可以看到文件都进行了分类存放,这也方便我们查找文件")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(459),loading:"lazy"}})]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("相关推荐")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/sanyuan0704/vite-plugin-chunk-split/blob/master/README-CN.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite 代码拆包插件。支持多种拆包策略,可避免手动操作 manualChunks 潜在的循环依赖问题"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"svg-压缩"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#svg-压缩"}},[e._v("#")]),e._v(" "),t("code",[e._v("svg")]),e._v(" 压缩")]),e._v(" "),t("p",[e._v("一般下载的 "),t("code",[e._v("svg")]),e._v(" 或者复制的 "),t("code",[e._v("svg")]),e._v(" 代码,里面存在一些无关紧要的元素,可以将其剔除,毫无影响地降低 "),t("code",[e._v("svg")]),e._v(" 大小"),t("br"),e._v("\n平台使用了 "),t("a",{attrs:{href:"https://www.npmjs.com/package/svgo",target:"_blank",rel:"noopener noreferrer"}},[e._v("svgo"),t("OutboundLink")],1),e._v(" 工具对所有 "),t("code",[e._v("svg")]),e._v(" 进行了压缩,您拉取平台代码时所有 "),t("code",[e._v("svg")]),e._v(" 都已经最简了哦。当然您会问自己新加的 "),t("code",[e._v("svg")]),e._v(" 如何精简呢,来到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/package.json#L15",target:"_blank",rel:"noopener noreferrer"}},[e._v("main/package.json"),t("OutboundLink")],1),e._v(",可以看到平台默认使用 "),t("code",[e._v("svgo")]),e._v(" 工具对所有 "),t("code",[e._v(".svg")]),e._v(" 文件进行压缩。"),t("br"),e._v("\n温馨提示:只需要运行 "),t("code",[e._v("pnpm svgo")]),e._v(" 命令即可对所有 "),t("code",[e._v(".svg")]),e._v(" 文件进行压缩。")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("推荐阅读")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://cn.vuejs.org/guide/best-practices/performance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("性能优化"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vue文档"}})],1),e._v(" "),t("li",[t("a",{attrs:{href:"https://router.vuejs.org/zh/guide/advanced/lazy-loading.html#%E4%BD%BF%E7%94%A8-vite",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite 中组件按组分块打包"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vue-router文档"}})],1)])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{458:function(e,t,r){e.exports=r.p+"assets/img/buildgood.1a9db1bb.jpg"},459:function(e,t,r){e.exports=r.p+"assets/img/no-output.90d47bbf.jpg"},460:function(e,t,r){e.exports=r.p+"assets/img/output.28badfe6.jpg"},545:function(e,t,r){"use strict";r.r(t);var a=r(8),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("打包优化关联着网站的稳定与加载速度,在开发中也是非常重要的一项")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(458),loading:"lazy"}})]),e._v(" "),t("h2",{attrs:{id:"vite-自身的构建优化"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vite-自身的构建优化"}},[e._v("#")]),e._v(" "),t("code",[e._v("vite")]),e._v(" 自身的构建优化")]),e._v(" "),t("p",[e._v("点击查看 "),t("a",{attrs:{href:"https://cn.vitejs.dev/guide/features.html#build-optimizations",target:"_blank",rel:"noopener noreferrer"}},[e._v("build-optimizations"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vite官方文档"}})],1),e._v(" "),t("h2",{attrs:{id:"css-优化"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css-优化"}},[e._v("#")]),e._v(" "),t("code",[e._v("css")]),e._v(" 优化")]),e._v(" "),t("p",[e._v("分两步优化")]),e._v(" "),t("h3",{attrs:{id:"​-压缩-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#​-压缩-css"}},[e._v("#")]),e._v(" ​ 压缩 "),t("code",[e._v("css")])]),e._v(" "),t("p",[e._v("使用 "),t("RouterLink",{attrs:{to:"/pages/tailwindcss/#cssnano"}},[e._v("cssnano")]),e._v(" 去压缩 "),t("code",[e._v("css")])],1),e._v(" "),t("h3",{attrs:{id:"​-自动添加浏览器前缀"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#​-自动添加浏览器前缀"}},[e._v("#")]),e._v(" ​ 自动添加浏览器前缀")]),e._v(" "),t("p",[e._v("使用 "),t("RouterLink",{attrs:{to:"/pages/tailwindcss/#autoprefixer"}},[e._v("Autoprefixer")]),e._v(" 自动添加浏览器前缀")],1),e._v(" "),t("h2",{attrs:{id:"组件、工具库"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#组件、工具库"}},[e._v("#")]),e._v(" 组件、工具库")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("无论是组件(如 "),t("code",[e._v("element-plus")]),e._v("),还是工具库(如 "),t("code",[e._v("lodash")]),e._v("、"),t("code",[e._v("axios")]),e._v(")我们都应该尽可能的按需引入,使其有良好的  "),t("code",[e._v("tree-shaking")]),e._v(" 效果,这样项目整体打包出来的无用代码就少之又少了")])]),e._v(" "),t("li",[t("p",[e._v("拿 "),t("code",[e._v("lodash")]),e._v(" 举例,"),t("code",[e._v("lodash")]),e._v(" 默认是 "),t("code",[e._v("cjs")]),e._v(" 格式,不支持 "),t("code",[e._v("es6")]),e._v(" 的 "),t("code",[e._v("import")]),e._v(" 语法,那么我们就可以去 "),t("code",[e._v("github")]),e._v(" 或者某些搜索引擎去寻找替代品,最终平台找到了 "),t("code",[e._v("lodash-unified")]),e._v(",它完全兼容 "),t("code",[e._v("lodash")]),e._v(" 的全部语法并且既支持 "),t("code",[e._v("esm")]),e._v(" 又支持 "),t("code",[e._v("cjs")]),e._v(",这使得它无论在浏览器还是 "),t("code",[e._v("node")]),e._v(" 环境中表现都很良好。当然如果遇到那种只支持 "),t("code",[e._v("cjs")]),e._v(" 格式,网上找遍了都找不到兼容 "),t("code",[e._v("esm")]),e._v(" 格式的咋办呢,这时你可以参考 "),t("code",[e._v("lodash-unified")]),e._v(",看看别人是如何转换的 😊")])]),e._v(" "),t("li",[t("p",[e._v("平台精简版首次启动时间我这边测试是 "),t("code",[e._v("6")]),e._v(" 秒,刷新页面的话开启 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/public/platform-config.json#L23",target:"_blank",rel:"noopener noreferrer"}},[e._v("CachingAsyncRoutes"),t("OutboundLink")],1),e._v(" 可能连 "),t("code",[e._v("1")]),e._v(" 秒都不要。如果您使用 "),t("code",[e._v("pure-admin")]),e._v(" 且当前网页"),t("code",[e._v("首启动")]),e._v("和"),t("code",[e._v("刷新页面")]),e._v("的等待时间远远大于前面的数字,也该考虑优化了。当项目具有一定规模的时候,优化并没有那么容易,所以您在写代码前就应该遵循我上面的说法,按需引入才是 "),t("code",[e._v("yyds")]),e._v(" 😄")])])]),e._v(" "),t("ul",[t("li",[t("code",[e._v("vite")]),e._v(" 目前最大的性能瓶颈是大量模块的首页加载,可看 "),t("a",{attrs:{href:"https://github.com/vitejs/vite/issues/1309#issue-777569758",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-issues"),t("OutboundLink")],1),e._v(",值得期待的是这个 "),t("a",{attrs:{href:"https://github.com/vitejs/vite/pull/10671",target:"_blank",rel:"noopener noreferrer"}},[e._v("pr"),t("OutboundLink")],1),e._v(" 可能会缓解这个麻烦")])]),e._v(" "),t("h2",{attrs:{id:"压缩-gzip、brotli-格式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩-gzip、brotli-格式"}},[e._v("#")]),e._v(" 压缩 "),t("code",[e._v("gzip")]),e._v("、"),t("code",[e._v("brotli")]),e._v(" 格式")]),e._v(" "),t("p",[e._v("使用 "),t("a",{attrs:{href:"https://github.com/vbenjs/vite-plugin-compression",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-compression"),t("OutboundLink")],1),e._v(" 对平台进行 "),t("code",[e._v("gzip")]),e._v(" 或者 "),t("code",[e._v("brotli")]),e._v(" 压缩,"),t("code",[e._v("nginx")]),e._v(" 对这两种压缩模式都支持,压缩后部署到 "),t("code",[e._v("nginx")]),e._v(" 将极大提高网页加载速度")]),e._v(" "),t("h3",{attrs:{id:"如何开启压缩"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何开启压缩"}},[e._v("#")]),e._v(" 如何开启压缩")]),e._v(" "),t("p",[e._v("来到 "),t("code",[e._v(".env.production")]),e._v(" 文件,设置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.env.production#L13",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_COMPRESSION"),t("OutboundLink")],1),e._v(" 即可。设置总体分为下面两种 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/compress.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("具体实现代码"),t("OutboundLink")],1)]),e._v(" "),t("h4",{attrs:{id:"两种总体设置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#两种总体设置"}},[e._v("#")]),e._v(" 两种总体设置")]),e._v(" "),t("ol",[t("li",[e._v("压缩时不删除原始文件的配置")]),e._v(" "),t("li",[e._v("压缩时删除原始文件的配置")])]),e._v(" "),t("h5",{attrs:{id:"压缩时不删除原始文件的配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩时不删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时不删除原始文件的配置")]),e._v(" "),t("div",{staticClass:"language-.env.production line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('开启 gzip 压缩\nVITE_COMPRESSION = "gzip"\n\n开启 brotli 压缩\nVITE_COMPRESSION = "brotli"\n\n# 同时开启 gzip 与 brotli 压缩\nVITE_COMPRESSION = "both"\n\n# 不开启压缩,默认\nVITE_COMPRESSION = "none"\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("h5",{attrs:{id:"压缩时删除原始文件的配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#压缩时删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时删除原始文件的配置")]),e._v(" "),t("div",{staticClass:"language-.env.production line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('开启 gzip 压缩\nVITE_COMPRESSION = "gzip-clear"\n\n开启 brotli 压缩\nVITE_COMPRESSION = "brotli-clear"\n\n# 同时开启 gzip 与 brotli 压缩\nVITE_COMPRESSION = "both-clear"\n\n# 不开启压缩,默认\nVITE_COMPRESSION = "none"\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("h2",{attrs:{id:"采用-cdn-模式替换本地依赖"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#采用-cdn-模式替换本地依赖"}},[e._v("#")]),e._v(" 采用 "),t("code",[e._v("cdn")]),e._v(" 模式替换本地依赖")]),e._v(" "),t("h3",{attrs:{id:"vite-插件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vite-插件"}},[e._v("#")]),e._v(" "),t("code",[e._v("vite")]),e._v(" 插件")]),e._v(" "),t("p",[e._v("使用 "),t("a",{attrs:{href:"https://github.com/MMF-FE/vite-plugin-cdn-import/blob/master/README.zh-CN.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-cdn-import"),t("OutboundLink")],1),e._v(" 插件,在打包时将指定的 "),t("code",[e._v("modules")]),e._v(" 替换成 "),t("code",[e._v("cdn")]),e._v(" 链接,从而减少构建时间,提高生产环境中页面加载速度。")]),e._v(" "),t("h3",{attrs:{id:"cdn-厂商-免费"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cdn-厂商-免费"}},[e._v("#")]),e._v(" "),t("code",[e._v("cdn")]),e._v(" 厂商(免费)")]),e._v(" "),t("p",[e._v("平台 "),t("code",[e._v("cdn")]),e._v(" 采用的是国内 "),t("a",{attrs:{href:"https://www.bootcdn.cn",target:"_blank",rel:"noopener noreferrer"}},[e._v("bootcdn"),t("OutboundLink")],1),e._v(",主要是稳定并且快,当然您也可以选择 "),t("a",{attrs:{href:"https://unpkg.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("unpkg"),t("OutboundLink")],1),e._v(" 或者 "),t("a",{attrs:{href:"https://www.jsdelivr.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("jsdelivr"),t("OutboundLink")],1),e._v(",这两个 "),t("code",[e._v("cdn")]),e._v(" 是国外的")]),e._v(" "),t("h3",{attrs:{id:"如何启动-cdn-替换"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何启动-cdn-替换"}},[e._v("#")]),e._v(" 如何启动 "),t("code",[e._v("cdn")]),e._v(" 替换")]),e._v(" "),t("p",[e._v("来到 "),t("code",[e._v(".env.production")]),e._v(" 文件,将 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.env.production#L8",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_CDN"),t("OutboundLink")],1),e._v(" 设置成 "),t("code",[e._v("true")]),e._v(" 即可")]),e._v(" "),t("h3",{attrs:{id:"默认启动-cdn-替换的模块有哪些"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#默认启动-cdn-替换的模块有哪些"}},[e._v("#")]),e._v(" 默认启动 "),t("code",[e._v("cdn")]),e._v(" 替换的模块有哪些")]),e._v(" "),t("p",[t("code",[e._v("vue")]),e._v("、"),t("code",[e._v("vue-router")]),e._v("、"),t("code",[e._v("vue-i18n")]),e._v("、"),t("code",[e._v("vue-demi")]),e._v("、"),t("code",[e._v("pinia")]),e._v("、"),t("code",[e._v("element-plus")]),e._v("、"),t("code",[e._v("axios")]),e._v("、"),t("code",[e._v("dayjs")]),e._v("、"),t("code",[e._v("echarts")]),e._v(" 具体代码 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/cdn.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("build/cdn.ts"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"生产环境删除-console-log"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#生产环境删除-console-log"}},[e._v("#")]),e._v(" 生产环境删除 "),t("code",[e._v("console.log")])]),e._v(" "),t("p",[e._v("使用平台开发的 "),t("a",{attrs:{href:"https://github.com/xiaoxian521/vite-plugin-remove-console",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-remove-console"),t("OutboundLink")],1),e._v(" 插件,在打包构建时移除平台中所有的 "),t("code",[e._v("console.log")])]),e._v(" "),t("h2",{attrs:{id:"静态资源分类打包"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#静态资源分类打包"}},[e._v("#")]),e._v(" 静态资源分类打包")]),e._v(" "),t("p",[t("code",[e._v("vite")]),e._v(" 是基于 "),t("code",[e._v("esbuild")]),e._v(" 和 "),t("code",[e._v("rollup")]),e._v(" 构建的,在打包时如果不进行 "),t("code",[e._v("output")]),e._v(" 的配置,打包出来的效果如下图(这也是 "),t("code",[e._v("vite")]),e._v(" 默认打包出来的效果,可以看到所有文件都混在一起)")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(459),loading:"lazy"}})]),e._v(" "),t("p",[e._v("下图是我们配置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/vite.config.ts#L50-L54",target:"_blank",rel:"noopener noreferrer"}},[e._v("output"),t("OutboundLink")],1),e._v(" 后的效果,可以看到文件都进行了分类存放,这也方便我们查找文件")]),e._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":r(460),loading:"lazy"}})]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("相关推荐")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/sanyuan0704/vite-plugin-chunk-split/blob/master/README-CN.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite 代码拆包插件。支持多种拆包策略,可避免手动操作 manualChunks 潜在的循环依赖问题"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"svg-压缩"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#svg-压缩"}},[e._v("#")]),e._v(" "),t("code",[e._v("svg")]),e._v(" 压缩")]),e._v(" "),t("p",[e._v("一般下载的 "),t("code",[e._v("svg")]),e._v(" 或者复制的 "),t("code",[e._v("svg")]),e._v(" 代码,里面存在一些无关紧要的元素,可以将其剔除,毫无影响地降低 "),t("code",[e._v("svg")]),e._v(" 大小"),t("br"),e._v("\n平台使用了 "),t("a",{attrs:{href:"https://www.npmjs.com/package/svgo",target:"_blank",rel:"noopener noreferrer"}},[e._v("svgo"),t("OutboundLink")],1),e._v(" 工具对所有 "),t("code",[e._v("svg")]),e._v(" 进行了压缩,您拉取平台代码时所有 "),t("code",[e._v("svg")]),e._v(" 都已经最简了哦。当然您会问自己新加的 "),t("code",[e._v("svg")]),e._v(" 如何精简呢,来到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/package.json#L15",target:"_blank",rel:"noopener noreferrer"}},[e._v("main/package.json"),t("OutboundLink")],1),e._v(",可以看到平台默认使用 "),t("code",[e._v("svgo")]),e._v(" 工具对所有 "),t("code",[e._v(".svg")]),e._v(" 文件进行压缩。"),t("br"),e._v("\n温馨提示:只需要运行 "),t("code",[e._v("pnpm svgo")]),e._v(" 命令即可对所有 "),t("code",[e._v(".svg")]),e._v(" 文件进行压缩。")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("推荐阅读")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://cn.vuejs.org/guide/best-practices/performance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("性能优化"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vue文档"}})],1),e._v(" "),t("li",[t("a",{attrs:{href:"https://router.vuejs.org/zh/guide/advanced/lazy-loading.html#%E4%BD%BF%E7%94%A8-vite",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite 中组件按组分块打包"),t("OutboundLink")],1),e._v(" "),t("Badge",{attrs:{text:"vue-router文档"}})],1)])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/19.10ec1992.js b/assets/js/19.a278c7f8.js similarity index 99% rename from assets/js/19.10ec1992.js rename to assets/js/19.a278c7f8.js index 867f1145..237dbfc9 100644 --- a/assets/js/19.10ec1992.js +++ b/assets/js/19.a278c7f8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{289:function(a,e,t){a.exports=t.p+"assets/img/pure-admin-cli.5451f3a1.gif"},369:function(a,e,t){a.exports=t.p+"assets/img/nodejs.c3e1eacd.jpg"},530:function(a,e,t){"use strict";t.r(e);var s=t(8),r=Object(s.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h2",{attrs:{id:"开发环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#开发环境"}},[a._v("#")]),a._v(" 开发环境")]),a._v(" "),e("p",[a._v("从 "),e("code",[a._v("vue-pure-admin v5.0.0")]),a._v(" 版本后,规定 "),e("code",[a._v("node")]),a._v(" 版本应不小于 "),e("code",[a._v("18.18.0")]),a._v(" (推荐优先安装长期维护"),e("code",[a._v("LTS")]),a._v("版,如下图),"),e("code",[a._v("pnpm")]),a._v(" 版本应不小于 "),e("code",[a._v("9")])]),a._v(" "),e("p",[e("a",{attrs:{href:"https://nodejs.org/en/download/package-manager",target:"_blank",rel:"noopener noreferrer"}},[a._v("nodejs 官网"),e("OutboundLink")],1),a._v(" 当然也可以安装 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.nvmrc#L1",target:"_blank",rel:"noopener noreferrer"}},[a._v(".nvmrc"),e("OutboundLink")],1),a._v(" 推荐的 "),e("code",[a._v("node")]),a._v(" 版本")]),a._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(369),loading:"lazy"}})]),a._v(" "),e("p",[a._v("如果您还没安装 "),e("code",[a._v("pnpm")]),a._v(",请执行下面命令进行安装("),e("code",[a._v("mac")]),a._v(" 用户遇到安装报错请在命令前加上 "),e("code",[a._v("sudo")]),a._v(")")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("npm install -g pnpm\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("p",[a._v("如果您需要安装多个 "),e("code",[a._v("node")]),a._v(" 版本环境,请参考 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#平台要求-node-版本应不小于-18-18-0-、pnpm-版本应不小于-9-但是实际开发有的项目需要比这些低的版本怎么解决呢"}},[a._v("Node.js 版本管理工具")])],1),a._v(" "),e("p",[a._v("如果您觉得安装平台依赖慢,请参考 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#安装依赖慢-如何解决"}},[a._v("npmmirror")])],1),a._v(" "),e("h2",{attrs:{id:"ide"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ide"}},[a._v("#")]),a._v(" "),e("code",[a._v("IDE")])]),a._v(" "),e("p",[a._v("如果您使用的 "),e("code",[a._v("IDE")]),a._v(" 是 "),e("a",{attrs:{href:"https://code.visualstudio.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("vscode"),e("OutboundLink")],1),a._v(" (推荐),"),e("RouterLink",{attrs:{to:"/pages/vscode/#extensions-json"}},[a._v("请点击这里并安装推荐的插件")]),a._v(",可提高开发效率")],1),a._v(" "),e("h2",{attrs:{id:"拉取代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#拉取代码"}},[a._v("#")]),a._v(" 拉取代码")]),a._v(" "),e("h3",{attrs:{id:"推荐使用-pureadmin-cli-脚手架"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#推荐使用-pureadmin-cli-脚手架"}},[a._v("#")]),a._v(" 推荐使用 "),e("code",[a._v("@pureadmin/cli")]),a._v(" 脚手架")]),a._v(" "),e("br"),a._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(289),loading:"lazy"}})]),a._v(" "),e("ol",[e("li",[a._v("全局安装")])]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("npm install -g @pureadmin/cli\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("ol",{attrs:{start:"2"}},[e("li",[a._v("交互式选择模板并创建项目")])]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pure create\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("p",[e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-cli#pureadmincli",target:"_blank",rel:"noopener noreferrer"}},[a._v("点我查看 @pureadmin/cli 脚手架详细用法"),e("OutboundLink")],1)]),a._v(" "),e("h3",{attrs:{id:"从-github-上拉取"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从-github-上拉取"}},[a._v("#")]),a._v(" 从 "),e("code",[a._v("GitHub")]),a._v(" 上拉取")]),a._v(" "),e("h4",{attrs:{id:"完整版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#完整版前端代码"}},[a._v("#")]),a._v(" 完整版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/vue-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"国际化精简版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#国际化精简版前端代码"}},[a._v("#")]),a._v(" 国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone -b i18n https://github.com/pure-admin/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"非国际化精简版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#非国际化精简版前端代码"}},[a._v("#")]),a._v(" 非国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"tauri-版本前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tauri-版本前端代码"}},[a._v("#")]),a._v(" "),e("code",[a._v("tauri")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/tauri-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"electron-版本前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#electron-版本前端代码"}},[a._v("#")]),a._v(" "),e("code",[a._v("electron")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/electron-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"后端代码-node-版本"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#后端代码-node-版本"}},[a._v("#")]),a._v(" 后端代码("),e("code",[a._v("node")]),a._v(" 版本)")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/pure-admin-backend.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h3",{attrs:{id:"从-gitee-上拉取"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从-gitee-上拉取"}},[a._v("#")]),a._v(" 从 "),e("code",[a._v("Gitee")]),a._v(" 上拉取")]),a._v(" "),e("h4",{attrs:{id:"完整版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#完整版前端代码-2"}},[a._v("#")]),a._v(" 完整版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/vue-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"国际化精简版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#国际化精简版前端代码-2"}},[a._v("#")]),a._v(" 国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone -b i18n https://gitee.com/yiming_chang/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"非国际化精简版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#非国际化精简版前端代码-2"}},[a._v("#")]),a._v(" 非国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"tauri-版本前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tauri-版本前端代码-2"}},[a._v("#")]),a._v(" "),e("code",[a._v("tauri")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/tauri-pure-admin\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"electron-版本前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#electron-版本前端代码-2"}},[a._v("#")]),a._v(" "),e("code",[a._v("electron")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/electron-pure-admin\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"后端代码-node-版本-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#后端代码-node-版本-2"}},[a._v("#")]),a._v(" 后端代码("),e("code",[a._v("node")]),a._v(" 版本)")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/pure-admin-backend.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h2",{attrs:{id:"本地开发"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#本地开发"}},[a._v("#")]),a._v(" 本地开发")]),a._v(" "),e("h4",{attrs:{id:"安装依赖"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装依赖"}},[a._v("#")]),a._v(" 安装依赖")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm install\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"启动平台"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#启动平台"}},[a._v("#")]),a._v(" 启动平台")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm dev\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"项目打包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#项目打包"}},[a._v("#")]),a._v(" 项目打包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm build\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"安装一个包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装一个包"}},[a._v("#")]),a._v(" 安装一个包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm add 包名\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"卸载一个包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#卸载一个包"}},[a._v("#")]),a._v(" 卸载一个包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm remove 包名\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{289:function(a,e,t){a.exports=t.p+"assets/img/pure-admin-cli.5451f3a1.gif"},369:function(a,e,t){a.exports=t.p+"assets/img/nodejs.c3e1eacd.jpg"},529:function(a,e,t){"use strict";t.r(e);var s=t(8),r=Object(s.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h2",{attrs:{id:"开发环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#开发环境"}},[a._v("#")]),a._v(" 开发环境")]),a._v(" "),e("p",[a._v("从 "),e("code",[a._v("vue-pure-admin v5.0.0")]),a._v(" 版本后,规定 "),e("code",[a._v("node")]),a._v(" 版本应不小于 "),e("code",[a._v("18.18.0")]),a._v(" (推荐优先安装长期维护"),e("code",[a._v("LTS")]),a._v("版,如下图),"),e("code",[a._v("pnpm")]),a._v(" 版本应不小于 "),e("code",[a._v("9")])]),a._v(" "),e("p",[e("a",{attrs:{href:"https://nodejs.org/en/download/package-manager",target:"_blank",rel:"noopener noreferrer"}},[a._v("nodejs 官网"),e("OutboundLink")],1),a._v(" 当然也可以安装 "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/.nvmrc#L1",target:"_blank",rel:"noopener noreferrer"}},[a._v(".nvmrc"),e("OutboundLink")],1),a._v(" 推荐的 "),e("code",[a._v("node")]),a._v(" 版本")]),a._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(369),loading:"lazy"}})]),a._v(" "),e("p",[a._v("如果您还没安装 "),e("code",[a._v("pnpm")]),a._v(",请执行下面命令进行安装("),e("code",[a._v("mac")]),a._v(" 用户遇到安装报错请在命令前加上 "),e("code",[a._v("sudo")]),a._v(")")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("npm install -g pnpm\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("p",[a._v("如果您需要安装多个 "),e("code",[a._v("node")]),a._v(" 版本环境,请参考 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#平台要求-node-版本应不小于-18-18-0-、pnpm-版本应不小于-9-但是实际开发有的项目需要比这些低的版本怎么解决呢"}},[a._v("Node.js 版本管理工具")])],1),a._v(" "),e("p",[a._v("如果您觉得安装平台依赖慢,请参考 "),e("RouterLink",{attrs:{to:"/pages/FAQ/#安装依赖慢-如何解决"}},[a._v("npmmirror")])],1),a._v(" "),e("h2",{attrs:{id:"ide"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ide"}},[a._v("#")]),a._v(" "),e("code",[a._v("IDE")])]),a._v(" "),e("p",[a._v("如果您使用的 "),e("code",[a._v("IDE")]),a._v(" 是 "),e("a",{attrs:{href:"https://code.visualstudio.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("vscode"),e("OutboundLink")],1),a._v(" (推荐),"),e("RouterLink",{attrs:{to:"/pages/vscode/#extensions-json"}},[a._v("请点击这里并安装推荐的插件")]),a._v(",可提高开发效率")],1),a._v(" "),e("h2",{attrs:{id:"拉取代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#拉取代码"}},[a._v("#")]),a._v(" 拉取代码")]),a._v(" "),e("h3",{attrs:{id:"推荐使用-pureadmin-cli-脚手架"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#推荐使用-pureadmin-cli-脚手架"}},[a._v("#")]),a._v(" 推荐使用 "),e("code",[a._v("@pureadmin/cli")]),a._v(" 脚手架")]),a._v(" "),e("br"),a._v(" "),e("p",[e("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(289),loading:"lazy"}})]),a._v(" "),e("ol",[e("li",[a._v("全局安装")])]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("npm install -g @pureadmin/cli\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("ol",{attrs:{start:"2"}},[e("li",[a._v("交互式选择模板并创建项目")])]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pure create\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("p",[e("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-cli#pureadmincli",target:"_blank",rel:"noopener noreferrer"}},[a._v("点我查看 @pureadmin/cli 脚手架详细用法"),e("OutboundLink")],1)]),a._v(" "),e("h3",{attrs:{id:"从-github-上拉取"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从-github-上拉取"}},[a._v("#")]),a._v(" 从 "),e("code",[a._v("GitHub")]),a._v(" 上拉取")]),a._v(" "),e("h4",{attrs:{id:"完整版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#完整版前端代码"}},[a._v("#")]),a._v(" 完整版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/vue-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"国际化精简版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#国际化精简版前端代码"}},[a._v("#")]),a._v(" 国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone -b i18n https://github.com/pure-admin/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"非国际化精简版前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#非国际化精简版前端代码"}},[a._v("#")]),a._v(" 非国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"tauri-版本前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tauri-版本前端代码"}},[a._v("#")]),a._v(" "),e("code",[a._v("tauri")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/tauri-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"electron-版本前端代码"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#electron-版本前端代码"}},[a._v("#")]),a._v(" "),e("code",[a._v("electron")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/electron-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"后端代码-node-版本"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#后端代码-node-版本"}},[a._v("#")]),a._v(" 后端代码("),e("code",[a._v("node")]),a._v(" 版本)")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://github.com/pure-admin/pure-admin-backend.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h3",{attrs:{id:"从-gitee-上拉取"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从-gitee-上拉取"}},[a._v("#")]),a._v(" 从 "),e("code",[a._v("Gitee")]),a._v(" 上拉取")]),a._v(" "),e("h4",{attrs:{id:"完整版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#完整版前端代码-2"}},[a._v("#")]),a._v(" 完整版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/vue-pure-admin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"国际化精简版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#国际化精简版前端代码-2"}},[a._v("#")]),a._v(" 国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone -b i18n https://gitee.com/yiming_chang/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"非国际化精简版前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#非国际化精简版前端代码-2"}},[a._v("#")]),a._v(" 非国际化精简版前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/pure-admin-thin.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"tauri-版本前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tauri-版本前端代码-2"}},[a._v("#")]),a._v(" "),e("code",[a._v("tauri")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/tauri-pure-admin\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"electron-版本前端代码-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#electron-版本前端代码-2"}},[a._v("#")]),a._v(" "),e("code",[a._v("electron")]),a._v(" 版本前端代码")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/electron-pure-admin\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"后端代码-node-版本-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#后端代码-node-版本-2"}},[a._v("#")]),a._v(" 后端代码("),e("code",[a._v("node")]),a._v(" 版本)")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("git clone https://gitee.com/yiming_chang/pure-admin-backend.git\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h2",{attrs:{id:"本地开发"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#本地开发"}},[a._v("#")]),a._v(" 本地开发")]),a._v(" "),e("h4",{attrs:{id:"安装依赖"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装依赖"}},[a._v("#")]),a._v(" 安装依赖")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm install\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"启动平台"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#启动平台"}},[a._v("#")]),a._v(" 启动平台")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm dev\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"项目打包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#项目打包"}},[a._v("#")]),a._v(" 项目打包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm build\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"安装一个包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装一个包"}},[a._v("#")]),a._v(" 安装一个包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm add 包名\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])]),e("h4",{attrs:{id:"卸载一个包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#卸载一个包"}},[a._v("#")]),a._v(" 卸载一个包")]),a._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pnpm remove 包名\n")])]),a._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[a._v("1")]),e("br")])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/2.3d9eb5e2.js b/assets/js/2.eb7f3f57.js similarity index 85% rename from assets/js/2.3d9eb5e2.js rename to assets/js/2.eb7f3f57.js index e3edaea1..9f088a1f 100644 --- a/assets/js/2.3d9eb5e2.js +++ b/assets/js/2.eb7f3f57.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{291:function(t,e,s){},292:function(t,e,s){},293:function(t,e,s){},294:function(t,e,s){},295:function(t,e,s){},296:function(t,e,s){},297:function(t,e,s){},298:function(t,e,s){},299:function(t,e,s){},300:function(t,e,s){},302:function(t,e,s){},303:function(t,e,s){},304:function(t,e,s){},305:function(t,e,s){},306:function(t,e,s){},308:function(t,e,s){},309:function(t,e,s){},310:function(t,e,s){},311:function(t,e,s){},312:function(t,e,s){},313:function(t,e,s){},314:function(t,e,s){},315:function(t,e,s){},316:function(t,e,s){},317:function(t,e,s){},318:function(t,e,s){},319:function(t,e,s){},320:function(t,e,s){},322:function(t,e,s){},323:function(t,e,s){},324:function(t,e,s){},325:function(t,e,s){},329:function(t,e,s){"use strict";s.r(e);s(4),s(64);var i=s(20),a={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:s(330).a},beforeCreate(){this.$options.components.SidebarLinks=s(329).default},methods:{isActive:i.f}},r=(s(361),s(8)),n=Object(r.a)(a,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("router-link",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;s(124),s(21);function o(t,e,s,i){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}},s)}function l(t,e,s,a,r,n=1){return!e||n>r?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(i.f)(a,s+"#"+e.slug);return t("li",{class:"sidebar-sub-header level"+e.level},[o(t,s+"#"+e.slug,e.title,c),l(t,e.children,s,a,r,n+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:s,$route:a,$themeConfig:r,$themeLocaleConfig:n},props:{item:c,sidebarDepth:h}}){const u=Object(i.f)(a,c.path),g="auto"===c.type?u||c.children.some(t=>Object(i.f)(a,c.basePath+"#"+t.slug)):u,d="external"===c.type?function(t,e,s){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[s,t("OutboundLink")])}(t,c.path,c.title||c.path):o(t,c.path,c.title||c.path,g),p=[e.frontmatter.sidebarDepth,h,n.sidebarDepth,r.sidebarDepth,1].find(t=>void 0!==t),m=n.displayAllHeaders||r.displayAllHeaders;if("auto"===c.type)return[d,l(t,c.children,c.basePath,a,p)];if((g||m)&&c.headers&&!i.e.test(c.path)){return[d,l(t,Object(i.d)(c.headers),c.path,a,p)]}return d}};s(362);function h(t,e){return"group"===e.type&&e.children.some(e=>"group"===e.type?h(t,e):"page"===e.type&&Object(i.f)(t,e.path))}var u={name:"SidebarLinks",components:{SidebarGroup:n,SidebarLink:Object(r.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},created(){this.refreshIndex()},watch:{$route(){this.refreshIndex()}},methods:{refreshIndex(){const t=function(t,e){for(let s=0;s-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(i.f)(this.$route,t.regularPath)}}},g=Object(r.a)(u,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(s,i){return e("li",{key:i},["group"===s.type?e("SidebarGroup",{attrs:{item:s,open:i===t.openGroupIndex,collapsable:s.collapsable||s.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):e("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:s}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=g.exports},330:function(t,e,s){"use strict";var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},a=(s(346),s(8)),r=Object(a.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=r.exports},332:function(t,e,s){"use strict";s(291)},335:function(t,e,s){"use strict";s(292)},336:function(t,e,s){"use strict";s(293)},337:function(t,e,s){"use strict";s(294)},338:function(t,e,s){"use strict";s(295)},339:function(t,e,s){"use strict";s(296)},340:function(t,e,s){"use strict";s(297)},341:function(t,e,s){"use strict";s(298)},342:function(t,e,s){"use strict";s(299)},343:function(t,e,s){"use strict";s(300)},345:function(t,e,s){"use strict";s(302)},346:function(t,e,s){"use strict";s(303)},347:function(t,e,s){"use strict";s(304)},348:function(t,e,s){"use strict";s(305)},349:function(t,e,s){"use strict";s(306)},350:function(t,e,s){"use strict";s(308)},352:function(t,e,s){"use strict";s(309)},353:function(t,e,s){"use strict";s(310)},354:function(t,e,s){"use strict";s(311)},355:function(t,e,s){"use strict";s(312)},356:function(t,e,s){"use strict";s(313)},357:function(t,e,s){"use strict";s(314)},358:function(t,e,s){"use strict";s(315)},359:function(t,e,s){"use strict";s(316)},360:function(t,e,s){"use strict";s(317)},361:function(t,e,s){"use strict";s(318)},362:function(t,e,s){"use strict";s(319)},363:function(t,e,s){"use strict";s(320)},364:function(t,e,s){"use strict";s(322)},365:function(t,e,s){"use strict";s(323)},366:function(t,e,s){"use strict";s(324)},368:function(t,e,s){"use strict";s(325)},525:function(t,e,s){"use strict";s.r(e);s(4),s(64);var i=s(20),a={props:{item:{required:!0}},computed:{link(){return Object(i.c)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link}},methods:{isExternal:i.g,isMailto:i.h,isTel:i.i,focusoutAction(){this.$emit("focusout")}}},r=s(8),n=Object(r.a)(a,(function(){var t=this,e=t._self._c;return t.isExternal(t.link)?e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),e("OutboundLink")],1):e("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v(t._s(t.item.text))])}),[],!1,null,null,null).exports,o={props:{item:{required:!0}},computed:{link:()=>"https://pure-admin.github.io/vue-pure-admin/#/login",exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link}},methods:{isExternal:i.g,isMailto:i.h,isTel:i.i,focusoutAction(){this.$emit("focusout")}}},l=(s(332),Object(r.a)(o,(function(){var t=this,e=t._self._c;return e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"},on:{focusout:t.focusoutAction}},[t._v("\n 在线预览\n "),e("OutboundLink")],1)}),[],!1,null,"617c663d",null).exports),c=s(333),h=s(334),u=(s(335),Object(r.a)({},(function(){return(0,this._self._c)("div",{staticClass:"main-wrapper"})}),[],!1,null,null,null).exports),g=(s(29),{props:{category:{type:String,default:""},tag:{type:String,default:""},currentPage:{type:Number,default:1},perPage:{type:Number,default:10}},data:()=>({sortPosts:[],postListOffsetTop:0}),created(){this.setPosts()},mounted(){},watch:{currentPage(){this.$route.query.p!=this.currentPage&&this.$router.push({query:{...this.$route.query,p:this.currentPage}}),this.setPosts()},category(){this.setPosts()},tag(){this.setPosts()}},methods:{setPosts(){const t=this.currentPage,e=this.perPage;let s=[];s=this.category?this.$groupPosts.categories[this.category]:this.tag?this.$groupPosts.tags[this.tag]:this.$sortPosts,this.sortPosts=s.slice((t-1)*e,t*e)}}}),d=(s(336),Object(r.a)(g,(function(){var t=this,e=t._self._c;return e("div",{ref:"postList",staticClass:"post-list"},[e("transition-group",{attrs:{tag:"div",name:"post"}},t._l(t.sortPosts,(function(s){return e("div",{key:s.key,staticClass:"post card-box",class:s.frontmatter.sticky&&"iconfont icon-zhiding"},[e("div",{staticClass:"title-wrapper"},[e("h2",[e("router-link",{attrs:{to:s.path}},[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(s.frontmatter.titleTag))]):t._e()])],1),t._v(" "),e("div",{staticClass:"article-info"},[s.author&&s.author.href?e("a",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者",target:"_blank",href:s.author.href}},[t._v(t._s(s.author.name?s.author.name:s.author))]):s.author?e("span",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者"}},[t._v(t._s(s.author.name?s.author.name:s.author))]):t._e(),t._v(" "),s.frontmatter.date?e("span",{staticClass:"iconfont icon-riqi",attrs:{title:"创建时间"}},[t._v(t._s(s.frontmatter.date.split(" ")[0]))]):t._e(),t._v(" "),!1!==t.$themeConfig.category&&s.frontmatter.categories?e("span",{staticClass:"iconfont icon-wenjian",attrs:{title:"分类"}},t._l(s.frontmatter.categories,(function(s,i){return e("router-link",{key:i,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&s.frontmatter.tags&&s.frontmatter.tags[0]?e("span",{staticClass:"iconfont icon-biaoqian tags",attrs:{title:"标签"}},t._l(s.frontmatter.tags,(function(s,i){return e("router-link",{key:i,attrs:{to:"/tags/?tag="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e()])]),t._v(" "),s.excerpt?e("div",{staticClass:"excerpt-wrapper"},[e("div",{staticClass:"excerpt",domProps:{innerHTML:t._s(s.excerpt)}}),t._v(" "),e("router-link",{staticClass:"readmore iconfont icon-jiantou-you",attrs:{to:s.path}},[t._v("阅读全文")])],1):t._e()])})),0)],1)}),[],!1,null,null,null).exports),p=(s(16),{name:"UpdateArticle",props:{length:{type:[String,Number],default:3},moreArticle:String},data:()=>({posts:[],currentPath:""}),created(){this.posts=this.$site.pages,this.currentPath=this.$page.path},computed:{topPublishPosts(){return this.$sortPostsByDate?this.$sortPostsByDate.filter(t=>{const{path:e}=t;return e!==this.currentPath}).slice(0,this.length):[]},isShowArticle(){const{frontmatter:t}=this.$page;return!(!1!==t.article)}},methods:{getNum:t=>t<9?"0"+(t+1):t+1,getDate:t=>t.frontmatter.date?t.frontmatter.date.split(" ")[0].slice(5,10):""},watch:{$route(){this.currentPath=this.$page.path}}}),m=(s(337),Object(r.a)(p,(function(){var t=this,e=t._self._c;return e("div",{class:["article-list",{"no-article-list":t.isShowArticle}]},[e("div",{staticClass:"article-title"},[e("router-link",{staticClass:"iconfont icon-bi",attrs:{to:t.moreArticle||"/archives/"}},[t._v("最近更新")])],1),t._v(" "),e("div",{staticClass:"article-wrapper"},[t._l(t.topPublishPosts,(function(s,i){return e("dl",{key:i},[e("dd",[t._v(t._s(t.getNum(i)))]),t._v(" "),e("dt",[e("router-link",{attrs:{to:s.path}},[e("div",[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])]),t._v(" "),e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))])],1)])})),t._v(" "),e("dl",[e("dd"),t._v(" "),e("dt",[e("router-link",{staticClass:"more",attrs:{to:t.moreArticle||"/archives/"}},[t._v("更多文章>")])],1)])],2)])}),[],!1,null,null,null).exports),f={props:{total:{type:Number,default:10},perPage:{type:Number,default:10},currentPage:{type:Number,default:1}},computed:{pages(){return Math.ceil(this.total/this.perPage)}},methods:{threeNum(){let t=3;const e=this.currentPage,s=this.pages;return t=e<3?3:e>s-3?s-2:e,t},goPrex(){let t=this.currentPage;t>1&&this.handleEmit(--t)},goNext(){let t=this.currentPage;t3,expression:"currentPage > 3"}],staticClass:"ellipsis ell-two",attrs:{title:"上两页"},on:{click:function(e){return t.goIndex(t.currentPage-2)}}}),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage<=3,expression:"currentPage <= 3"}],staticClass:"card-box",class:{active:2===t.currentPage},on:{click:function(e){return t.goIndex(2)}}},[t._v("2")]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage>=3&&t.currentPage<=t.pages-2},on:{click:function(e){t.goIndex(t.threeNum())}}},[t._v(t._s(t.threeNum()))]),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage=t.pages-2,expression:"currentPage >= pages - 2"}],staticClass:"card-box",class:{active:t.currentPage===t.pages-1},on:{click:function(e){return t.goIndex(t.pages-1)}}},[t._v(t._s(t.pages-1))]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage===t.pages},on:{click:function(e){return t.goIndex(t.pages)}}},[t._v(t._s(t.pages))])]),t._v(" "),e("span",{staticClass:"card-box next iconfont icon-jiantou-you",class:{disabled:t.currentPage===t.pages},on:{click:function(e){return t.goNext()}}},[e("p",[t._v("下一页")])])])}),[],!1,null,null,null).exports),_={computed:{blogger(){return this.$themeConfig.blogger},social(){return this.$themeConfig.social}}},b=(s(339),Object(r.a)(_,(function(){var t=this,e=t._self._c;return e("aside",{staticClass:"blogger-wrapper card-box"},[e("div",{staticClass:"avatar"},[e("img",{attrs:{src:t.blogger.avatar,alt:"头像",title:"我好看吗"}})]),t._v(" "),t.social&&t.social.icons&&t.social.icons.length?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(s,i){return e("a",{key:i,class:["iconfont",s.iconClass],style:{width:100/t.social.icons.length+"%"},attrs:{href:s.link,title:s.title,target:"_blank"}})})),0):t._e(),t._v(" "),e("div",{staticClass:"blogger"},[e("span",{staticClass:"name"},[t._v(t._s(t.blogger.name))]),t._v(" "),e("span",{staticClass:"slogan"},[t._v(t._s(t.blogger.slogan))])])])}),[],!1,null,null,null).exports),C={props:{category:{type:String,default:""},categoriesData:{type:Array,default:[]},length:{type:[String,Number],default:"all"}},computed:{categories(){return"all"===this.length?this.categoriesData:this.categoriesData.slice(0,this.length)}}},y=(s(340),Object(r.a)(C,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"categories-wrapper card-box"},[e("router-link",{staticClass:"title iconfont icon-wenjianjia",attrs:{to:"/categories/",title:"全部分类"}},[t._v(t._s("all"===t.length?"全部分类":"文章分类"))]),t._v(" "),e("div",{staticClass:"categories"},[t._l(t.categories,(function(s,i){return e("router-link",{key:i,class:{active:s.key===t.category},attrs:{to:"/categories/?category="+encodeURIComponent(s.key)}},[t._v("\n "+t._s(s.key)+"\n "),e("span",[t._v(t._s(s.length))])])})),t._v(" "),"all"!==t.length&&t.length({tagBgColor:["#11a8cd","#F8B26A","#67CC86","#E15B64","#F47E60","#849B87"],tagStyleList:[]}),created(){for(let t=0,e=this.tags.length;tt.length?e("router-link",{attrs:{to:"/tags/"}},[t._v("更多...")]):t._e()],2)],1)}),[],!1,null,null,null).exports);c.a.use(h.a);var k={data:()=>({release:"5.9.0",isMQMobile:!1,slide:null,currentPageIndex:0,playTimer:0,mark:0,total:0,perPage:10,currentPage:1,addressHerf:"https://pure-admin.cn"}),computed:{homeData(){return{...this.$page.frontmatter}},hasFeatures(){return!(!this.homeData.features||!this.homeData.features.length)},homeSidebarB(){const{htmlModules:t}=this.$themeConfig;return t?t.homeSidebarB:""},showBanner(){return!(this.$route.query.p&&1!=this.$route.query.p&&(!this.homeData.postList||"detailed"===this.homeData.postList))},bannerBgStyle(){let t=this.homeData.bannerBg;return t&&"auto"!==t?"none"===t?this.$themeConfig.bodyBgImg?"":"background: var(--mainBg);color: var(--textColor)":t.indexOf("background:")>-1?t:t.indexOf(".")>-1?`background: url(${this.$withBase(t)}) center center / cover no-repeat`:void 0:this.$themeConfig.bodyBgImg?"":"background: rgb(40,40,45) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVFhH7c6xCQAgDAVRR9A6E4hLu4uLiWJ7tSnuQcIvr2TRYsw3/zOGGEOMIcYQY4gxxBhiDDGGGEOMIcYQY4gxxBhiDLkx52W4Gn1tuslCtHJvL54AAAAASUVORK5CYII=)"},actionLink(){return{link:this.homeData.actionLink,text:this.homeData.actionText}}},components:{NavLink:n,PreView:l,MainLayout:u,PostList:d,UpdateArticle:m,BloggerBar:b,CategoriesBar:y,TagsBar:w,Pagination:v},created(){this.total=this.$sortPosts.length},beforeMount(){this.isMQMobile=window.innerWidth<720,this.addressHerf=window.location.href},mounted(){this.$route.query.p&&(this.currentPage=Number(this.$route.query.p)),!this.hasFeatures||!this.isMQMobile||this.$route.query.p&&1!=this.$route.query.p||this.init(),this.hasFeatures&&window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720,!this.isMQMobile||this.slide||this.mark||(this.mark++,setTimeout(()=>{this.init()},60))})},beforeDestroy(){clearTimeout(this.playTimer),this.slide&&this.slide.destroy()},watch:{"$route.query.p"(){this.$route.query.p?this.currentPage=Number(this.$route.query.p):this.currentPage=1,this.hasFeatures&&1===this.currentPage&&this.isMQMobile&&setTimeout(()=>{this.slide&&this.slide.destroy(),this.init()},0)}},methods:{init(){clearTimeout(this.playTimer),this.slide=new c.a(this.$refs.slide,{scrollX:!0,scrollY:!1,slide:{loop:!0,threshold:100},useTransition:!0,momentum:!1,bounce:!1,stopPropagation:!1,probeType:2,preventDefault:!1}),this.slide.on("beforeScrollStart",()=>{clearTimeout(this.playTimer)}),this.slide.on("scrollEnd",()=>{this.autoGoNext()}),this.slide.on("slideWillChange",t=>{this.currentPageIndex=t.pageX}),this.autoGoNext()},autoGoNext(){clearTimeout(this.playTimer),this.playTimer=setTimeout(()=>{this.slide.next()},4e3)},handlePagination(t){this.currentPage=t},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop}},L=(s(342),s(343),Object(r.a)(k,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"home-wrapper"},[e("div",{staticClass:"banner",class:{"hide-banner":!t.showBanner},style:t.bannerBgStyle},[e("div",{staticClass:"banner-conent",style:!t.homeData.features&&!t.homeData.heroImage&&"padding-top: 7rem"},[e("header",{staticClass:"hero"},[t.homeData.heroImage?e("img",{attrs:{src:t.$withBase(t.homeData.heroImage),alt:t.homeData.heroAlt}}):t._e(),t._v(" "),e("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"center"}},[t.homeData.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.homeData.heroText)+"\n ")]):t._e(),t._v(" "),e("div",{staticStyle:{width:"80px",height:"20px",margin:"0",padding:"0","padding-left":"10px","padding-top":"5px"},attrs:{title:"当前版本"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"111",height:"20",role:"img"}},[e("title",[t._v("release: "+t._s(t.release))]),t._v(" "),e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"111",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"66",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"66",width:"45",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"111",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("image",{attrs:{x:"5",y:"3",width:"14",height:"14","xlink:href":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDBCM0UwIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+QXBwVmV5b3I8L3RpdGxlPjxwYXRoIGQ9Ik0gMTIsMCBDIDE4LjYsMCAyNCw1LjQgMjQsMTIgMjQsMTguNiAxOC42LDI0IDEyLDI0IDUuNCwyNCAwLDE4LjYgMCwxMiAwLDUuNCA1LjQsMCAxMiwwIFogbSAyLjk0LDE0LjM0IEMgMTYuMjYsMTIuNjYgMTYuMDgsMTAuMjYgMTQuNCw5IDEyLjc4LDcuNzQgMTAuMzgsOC4wNCA5LDkuNzIgNy42OCwxMS40IDcuODYsMTMuOCA5LjU0LDE1LjA2IGMgMS42OCwxLjI2IDQuMDgsMC45NiA1LjQsLTAuNzIgeiBtIC02LjQyLDcuOCBjIDAuNzIsMC4zIDIuMjgsMC42IDMuMDYsMC42IGwgNS4yMiwtNy41NiBjIDEuNjgsLTIuNTIgMS4yNiwtNS45NCAtMS4wOCwtNy44IC0yLjEsLTEuNjggLTUuMDQsLTEuNjIgLTcuMTQsMCBsIC03LjI2LDUuNTggYyAwLjE4LDEuOTIgMC43MiwyLjg4IDAuNzIsMi45NCBsIDQuMTQsLTQuNSBjIC0wLjMsMS45OCAwLjQyLDQuMDIgMi4xLDUuMjggMS40NCwxLjE0IDMuMTgsMS40NCA0Ljg2LDEuMDggeiIvPjwvc3ZnPg=="}}),t._v(" "),e("text",{attrs:{"aria-hidden":"true",x:"425",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"390"}},[t._v("release")]),e("text",{attrs:{x:"425",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"390"}},[t._v("release")]),e("text",{attrs:{"aria-hidden":"true",x:"875",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"350"}},[t._v(t._s(t.release))]),e("text",{attrs:{x:"875",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"350"}},[t._v(t._s(t.release))])])],1)])]),t._v(" "),t.homeData.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.homeData.tagline)+"\n ")]):t._e(),t._v(" "),t.homeData.actionText&&t.homeData.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}}),t._v(" "),e("PreView",{staticClass:"preview-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.hasFeatures&&!t.isMQMobile?e("div",{staticClass:"features"},t._l(t.homeData.features,(function(s,i){return e("div",{key:i,staticClass:"feature"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0):t._e()]),t._v(" "),t.hasFeatures?e("div",{directives:[{name:"show",rawName:"v-show",value:t.isMQMobile,expression:"isMQMobile"}],staticClass:"slide-banner"},[e("div",{staticClass:"banner-wrapper"},[e("div",{ref:"slide",staticClass:"slide-banner-scroll"},[e("div",{staticClass:"slide-banner-wrapper"},t._l(t.homeData.features,(function(s,i){return e("div",{key:i,staticClass:"slide-item"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0)]),t._v(" "),e("div",{staticClass:"docs-wrapper"},t._l(t.homeData.features.length,(function(s,i){return e("span",{key:i,staticClass:"doc",class:{active:t.currentPageIndex===i}})})),0)])]):t._e()]),t._v(" "),e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return["simple"===t.homeData.postList?e("UpdateArticle",{staticClass:"card-box",attrs:{length:t.homeData.simplePostListLength||10,moreArticle:t.$themeConfig.updateBar&&t.$themeConfig.updateBar.moreArticle}}):t.homeData.postList&&"detailed"!==t.homeData.postList?t._e():[e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})],t._v(" "),e("Content",{staticClass:"theme-vdoing-content custom card-box"})]},proxy:!0},t.homeData.hideRightBar?null:{key:"mainRight",fn:function(){return[t.$themeConfig.blogger?e("BloggerBar"):t._e(),t._v(" "),!1!==t.$themeConfig.category&&t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,length:10}}):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,length:30}}):t._e(),t._v(" "),t.homeSidebarB?e("div",{staticClass:"custom-html-box card-box",domProps:{innerHTML:t._s(t.homeSidebarB)}}):t._e()]},proxy:!0}],null,!0)})],1)}),[],!1,null,"02804833",null).exports),T=s(523),P=(s(345),Object(r.a)({},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"sidebar-button",attrs:{title:"目录"},on:{click:function(e){return t.$emit("toggle-sidebar")}}},[e("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[e("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),A=(s(21),s(330)),S=s(123),M=s.n(S),$={components:{NavLink:n,DropdownTransition:A.a},data:()=>({open:!1,isMQMobile:!1}),props:{item:{required:!0}},computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},beforeMount(){this.isMQMobile=window.innerWidth<720,window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720})},methods:{toggle(){this.isMQMobile&&(this.open=!this.open)},isLastItemOfArray:(t,e)=>M()(e)===t},watch:{$route(){this.open=!1}}},B=(s(347),{components:{NavLink:n,DropdownLink:Object(r.a)($,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.toggle}},[t.item.link?e("router-link",{staticClass:"link-title",attrs:{to:t.item.link}},[t._v(t._s(t.item.text))]):t._e(),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:!t.item.link,expression:"!item.link"}],staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})],1),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(s,i){return e("li",{key:s.link||i,staticClass:"dropdown-item"},["links"===s.type?e("h4",[t._v(t._s(s.text))]):t._e(),t._v(" "),"links"===s.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(s.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,s.items)&&t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0):e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,s=this.$router.options.routes,i=this.$site.themeConfig.locales||{},a={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(a=>{const r=t[a],n=i[a]&&i[a].label||r.lang;let o;return r.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,a),s.some(t=>t.path===o)||(o=a)),{text:n,link:o}})};return[...this.userNav,a]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(i.k)(t),{items:(t.items||[]).map(i.k)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let s=0;s({linksWrapMaxWidth:null}),mounted(){const t=parseInt(D(this.$el,"paddingLeft"))+parseInt(D(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)},computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}}},O=(s(349),Object(r.a)(N,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar blur"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),E=s(307),j=s.n(E),U={name:"PageEdit",computed:{tags(){return this.$frontmatter.tags},lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=j()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:s="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,s,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,s,a,r){if(/bitbucket.org/.test(e)){return e.replace(i.b,"")+"/src"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r+`?mode=edit&spa=0&at=${a}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(i.b,"")+"/-/edit"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r}const n=/gitee.com/;if(n.test(e)){return e.replace(n,"gitee.com/-/ide/project")+"/edit"+`/${a}/-/`+(s?s.replace(i.b,"")+"/":"")+r}return(i.j.test(e)?e:"https://github.com/"+e).replace(i.b,"")+"/edit"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r}}},G=(s(350),Object(r.a)(U,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.tags&&t.tags[0]?e("div",{staticClass:"tags"},t._l(t.tags,(function(s,i){return e("router-link",{key:i,attrs:{to:"/tags/?tag="+encodeURIComponent(s),title:"标签"}},[t._v("#"+t._s(s))])})),1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports),H=s(351),Q=s.n(H),q={name:"PageNav",props:["sidebarItems"],computed:{prev(){return Y(R.PREV,this)},next(){return Y(R.NEXT,this)}},methods:{showTooltip(t){const e=document.body.clientWidth,s=t.clientX,i=t.target.querySelector(".tooltip");if(!i)return;const a=i.style;st,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return F(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function Y(t,{$themeConfig:e,$page:s,$route:a,$site:r,sidebarItems:n}){const{resolveLink:o,getThemeLinkConfig:l,getPageLinkConfig:c}=t,h=l(e),u=c(s),g=j()(u)?h:u;return!1===g?void 0:Q()(g)?Object(i.l)(r.pages,g,a.path):o(s,n)}function F(t,e,s){const i=[];!function t(e,s){for(let i=0,a=e.length;i({date:"",classify1:"",classifyList:[],cataloguePermalink:"",author:null,categories:[]}),created(){this.getPageInfo()},watch:{"$route.path"(){this.classifyList=[],this.getPageInfo()}},methods:{getPageInfo(){const t=this.$page,{relativePath:e}=t,{sidebar:s}=this.$themeConfig,i=e.split("/");i.forEach((t,e)=>{const s=t.split(".");if(e!==i.length-1)if(1===s)this.classifyList.push(s[0]);else{const e=t.indexOf(".");this.classifyList.push(t.substring(e+1)||"")}}),this.classify1=this.classifyList[0];const a=s&&s.catalogue?s.catalogue[this.classify1]:"",r=this.$frontmatter.author||this.$themeConfig.author;let n=(t.frontmatter.date||"").split(" ")[0];const{categories:o}=this.$frontmatter;this.date=n,this.cataloguePermalink=a,this.author=r,this.categories=o},getLink(t){const{cataloguePermalink:e}=this;return t===e?e:`${e}${"/"===e.charAt(e.length-1)?"":"/"}#${t}`}}}),J=(s(353),Object(r.a)(W,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"articleInfo-wrap"},[e("div",{staticClass:"articleInfo"},[t.classify1&&"_posts"!==t.classify1?e("ul",{staticClass:"breadcrumbs"},[e("li",[e("router-link",{staticClass:"iconfont icon-home",attrs:{to:"/",title:"首页"}})],1),t._v(" "),t._l(t.classifyList,(function(s){return e("li",{key:s},[t.cataloguePermalink?e("router-link",{attrs:{to:t.getLink(s)}},[t._v(t._s(s))]):!1!==t.$themeConfig.category?e("router-link",{attrs:{to:"/categories/?category="+encodeURIComponent(s),title:"分类"}},[t._v(t._s(s))]):e("span",[t._v(t._s(s))])],1)}))],2):t._e(),t._v(" "),e("div",{staticClass:"info"},[t.author?e("div",{staticClass:"author iconfont icon-touxiang",attrs:{title:"作者"}},[t.author.href||t.author.link&&"string"==typeof t.author.link?e("a",{staticClass:"beLink",attrs:{href:t.author.href||t.author.link,target:"_blank",title:"作者"}},[t._v(t._s(t.author.name))]):e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.author.name||t.author))])]):t._e(),t._v(" "),t.date?e("div",{staticClass:"date iconfont icon-riqi",attrs:{title:"创建时间"}},[e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.date))])]):t._e(),t._v(" "),!1===t.$themeConfig.category||t.classify1&&"_posts"!==t.classify1||!t.categories?t._e():e("div",{staticClass:"date iconfont icon-wenjian",attrs:{title:"分类"}},t._l(t.categories,(function(s,i){return e("router-link",{key:i,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s+" "))])})),1)])])])}),[],!1,null,"51e47508",null).exports),Z={data:()=>({pageData:null,isStructuring:!0,appointDir:{}}),created(){this.getPageData();const t=this.$themeConfig.sidebar;t&&"auto"!==t||(this.isStructuring=!1,console.error("目录页数据依赖于结构化的侧边栏数据,请在主题设置中将侧边栏字段设置为'structuring',否则无法获取目录数据。"))},methods:{getPageData(){const t=this.$frontmatter.pageComponent;t&&t.data?this.pageData={...t.data,title:this.$frontmatter.title}:console.error("请在front matter中设置pageComponent和pageComponent.data数据")},getCatalogueList(){const{sidebar:t}=this.$site.themeConfig,{data:e}=this.$frontmatter.pageComponent;let s=(e.path||e.key).split("/"),i=t[`/${s[0]}/`];return s.length>1&&(s.shift(),i=this.appointDirDeal(0,s,i)),i||console.error("未获取到目录数据,请查看front matter中设置的path是否正确。"),i},type:t=>Object.prototype.toString.call(t).match(/\[object (.*?)\]/)[1].toLowerCase(),appointDirDeal(t,e,s){let i=e[t];void 0!==i&&-1!==i.indexOf(".")&&(i=i.substring(i.indexOf(".")+1));for(let a=0;a({headers:[],hashText:""}),mounted(){this.getHeadersData(),this.getHashText()},watch:{$route(){this.headers=this.$page.headers,this.getHashText()}},methods:{getHeadersData(){this.headers=this.$page.headers},getHashText(){this.hashText=decodeURIComponent(window.location.hash.slice(1))}}},tt=(s(355),s(356),{data:()=>({badges:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABGpJREFUSA3tVVtoXFUU3fvOI53UlmCaKIFmwEhsE7QK0ipFEdHEKpXaZGrp15SINsXUWvBDpBgQRKi0+KKoFeJHfZA+ED9KKoIU2gYD9UejTW4rVIzm0VSTziPzuNu1z507dibTTjL4U/DAzLn3nL3X2o91ziX6f9wMFdh6Jvbm9nNSV0msViVO6tN1Rm7NMu2OpeJ9lWBUTDxrJbYTS0hInuwciu9eLHlFxCLCZEk3MegsJmZ5K/JD6t7FkFdEvGUo1g7qJoG3MHImqRIn8/nzY1K9UPKKiJmtnUqHVE3Gbuay6vJE/N2FEmuxFjW2nUuE0yQXRRxLiTUAzs36zhZvOXJPdX850EVnnLZkB8prodQoM5JGj7Xk2mvC7JB8tG04Ef5PiXtG0UtxupRQSfTnBoCy554x18yJHI6I+G5Eru4LHmPJZEQsrvPUbMiA8G/WgMK7w7I+ez7++o2ANfbrjvaOl1tFMs+htG3IrZH9/hDX1Pr8Tc0UvH8tcX29KzAgIGcEkINyW5BF9x891hw6VYqgJHEk0huccS7vh3C6gTiODL+26huuBtbct8eZnqLML8PkxGYpuPZBqtqwkSjgc4mB5gbgig5i+y0UDK35LMxXisn9xQtK+nd26gTIHsHe/oblK/b29fUmN/8Y+9jAQrnBp56m1LcDlDp9irKTExSKduXJVWSqdBMA08pEJnEIOB3FPPMybu/oeV8zFeYN3xx576Q6RH+VmplE4ncQV5v+5rzSoyOU7PuEAg8g803PwBJ0CExno/jcMbN8tONYeOmHiuUNryvm3fRUy4tMPVLdAGkUhNWuggGrJcXPv+ouCjz0MKUHz1J2/E8IC9nqTabcxgaBYM0hPhD5Y65FsbxRQKxCQrDjDctW7PUM3HuZunFyifSAqEfuzCp48Il24luWUWZoyJCaPR82jE0+kFA643wRFVni4RYSq3ohJO2pZ7B5dO4xkDWbEpossJPLSrPjYID8rS2UHTlvyNxqIGsg674XJJ7vnh5L7PNwC4hh2sjCI96mzszOTpxLF0T7l88Yz7lAuK6OnL8gXLOnTvpzSb22YG8W7us3jSebFHeeqnXRG1vt+MoUM84LQIBmMsCTAcOauTh0T0l0neQK7m2bLMt2mGxU3HYssS0J2cdv5wljlPsrIuZLAG/2DOZIXgCYT8uMGZN+e2kSirfxZOPCsC0f24nTZzspnVn9VePS1Z5vubmAGGXG8ZFno9Hel0yfA5ZPhF7Dh972BQJ2qCpgH67lmWtBYbvk6sz02wjky2vXyz0XErP/kFB619js1BtwfOV4OPRqOQBjy3Qbk18vigUPPSD5ceHnwck7W9bhAqZdd7SuG7w4/P2F/GaJh8c7e9qgow+Q7cGBo+98WsLkuktFqiZabtXuQTu/Y5ETbR0v7tNSFnvrmu6pjdoan2KjMu8q/Hmj1EfCO2ZGfEIbIXKUlw8qaX9/b2oeSJmFksSeT/Fn0V3nSypChh4Gjh74ybO9aeZ/AN2dwciu2/MhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABH1JREFUSA3tVl1oHFUUPmdmd2ltklqbpJDiNnXFmgbFktho7YMPNiJSSZM0+CAYSkUELVhM6YuwIPpgoOKDqOBDC0XE2CQoNtQXBUFTTcCi+Wlh1V2TQExsUzcltd3M9Tt3ZjZzZ2fT+OJTL8yeM+eee757fmeJbq//KQL8X3DUSFOcfr7cRsRtxNQMWueeVzOkaITIGqQHNg5y8+jNW9ldM7A6nTpAjuolUikAwq7CE3WcM2RRDz+XGVgN3FptU/aUSlvq9Pa3iZ1+sgAqJyyAFqkipd9dqiwHF3P65YycLWc/6sqGrvoEoIp6DOFaX5h6+dnfjkWprwqsPk0dUGq5vySwDImC10KxFHgGL1SWoc92O3eVht09qdXNH11I2SsTsJYqMWzihqGMi+A+Garf3BAuuLI5oGlULyNfyB/HYNujwktOfRrMr5t77NmevqaUopx0grnKAyvVpmwUDB4x6FPXuGvYLTDwWsejwgtgkYKPqRJg8SV6xaiZ3ZTppGneS4yfH5/66fZSDHv+QZci/+h5c5UHtpy67JUqGppM0sh0Nc1dW6/N1W5Yoqat8/TU/VnadmdeW2PLLSyh0cvxBs3KbqTmwYPpxN4do/mzE8nEpvX/UMu2Wbp74zUAK5q6WkHns7V0eWkdPbPzd3rxkTGybadYySumVzhcaJFbs5UrEkQ/+CK8gF5dnh/6ciIZ73gwQ927L1IitoxKLXYP3SjYdOrHHfTZhRRlFyrorafPk20B3HPD1y2G3qKZME5Jcf3t/HUC13/8tSd++vqFveMUTwAUxSUFI1QekR1+bIze3D9MF2aq6cPvG72CgnldWCFqyRw3lwH8ZMerjTD9ElRO7Gv44wNpC90aASqGfVlz/Rx17srQ57/UU26hkhQqUB7dBR71WmzQhHUnblGmVOEw0jhbV1n9OlXUDCIRGaNV5Jp43N516fN7JmnTHdfp7Hgy0luO4aMhtkLL8Bi3bUWYvzh5Mn1dTxrL6QmGuRhGL/TiTTxRoEdTszSaq9GR0NGA3KdkOz3hqSV3MIDhQ5IVX/Ivx3umBti2es2h4eZby7x8br1rkf7Mo90AqC8aQ3sJeNzqFRu+vSANAQe3PL7l0HGOAdwDCeZYvNKeoZp1Qfs6Aipndh86HmFRi0LAnEO47wsqM6cdfjh3jBPUzhZy7nvlUfFsamED1VQt6aISHVymXZ/B2aCtIG8AI8xfobj2d3en1wWVhOeHELKmLQ1s211s88comkv4UCwWyF787mJdYXtNfhKAXVqnKTq8QZvGAGGOfaTo5pGZ/PwbUCr5+DPr/1J92JNHr9aOl/F3iI5+O1nfybsGxoimvZ3ViWSluDITw3P37mypheDIPY0tw7+O/5ApbkYw+zpfaUVu32Pi98+defdUhEpZkRFq0aqyNh9FuL9hpYbEm6iwi0z2REd09ZmyENEbuhjDWzKvZXTqKYaBIr3tt5kuPtQBZFvEUwHt60vfCNu41XsksH9Ij1BMMz1Y0OOunHNShFIP5868g5zeXmuLwL9T4b6Q2+KejgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg=="],currentBadge:""}),created(){this.$themeConfig.titleBadgeIcons&&(this.badges=this.$themeConfig.titleBadgeIcons),this.currentBadge=this.getBadge()},watch:{"$route.path"(){this.currentBadge=this.getBadge()}},methods:{getBadge(){return this.badges[Math.floor(Math.random()*this.badges.length)]}}}),et={mixins:[tt],data:()=>({updateBarConfig:null}),props:["sidebarItems"],components:{PageEdit:G,PageNav:V,ArticleInfo:J,Catalogue:X,UpdateArticle:m,RightMenu:Object(r.a)(K,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"right-menu-wrapper"},[e("div",{staticClass:"right-menu-margin"},[e("div",{staticClass:"right-menu-title"},[t._v("目录")]),t._v(" "),e("div",{staticClass:"right-menu-content"},t._l(t.headers,(function(s,i){return e("div",{key:i,class:["right-menu-item","level"+s.level,{active:s.slug===t.hashText}]},[e("a",{attrs:{href:"#"+s.slug}},[t._v(t._s(s.title))])])})),0)])])}),[],!1,null,"52e54980",null).exports},created(){this.updateBarConfig=this.$themeConfig.updateBar},computed:{bgStyle(){const{contentBgStyle:t}=this.$themeConfig;return t?"bg-style-"+t:""},isShowUpdateBar(){return!this.updateBarConfig||!1!==this.updateBarConfig.showToArticle},showTitle(){return!this.$frontmatter.pageComponent},showRightMenu(){const{$frontmatter:t,$themeConfig:e,$page:s}=this,{sidebar:i}=t;return!1!==e.rightMenuBar&&s.headers&&!1!==(t&&i&&!1!==i)},pageComponent(){return!!this.$frontmatter.pageComponent&&this.$frontmatter.pageComponent.name},isShowSlotT(){return this.getShowStatus("pageTshowMode")},isShowSlotB(){return this.getShowStatus("pageBshowMode")}},methods:{getShowStatus(t){const{htmlModules:e}=this.$themeConfig;return!!e&&("article"===e[t]?this.isArticle():"custom"!==e[t]||!this.isArticle())},isArticle(){return!1!==this.$frontmatter.article}}},st=(s(357),Object(r.a)(et,(function(){var t=this,e=t._self._c;return e("div",[e("main",{staticClass:"page"},[e("div",{class:"theme-vdoing-wrapper "+t.bgStyle},[t.isArticle()?e("ArticleInfo"):e("div",{staticClass:"placeholder"}),t._v(" "),t.pageComponent?e(t.pageComponent,{tag:"component",staticClass:"theme-vdoing-content"}):t._e(),t._v(" "),e("div",{staticClass:"content-wrapper"},[t.showRightMenu?e("RightMenu"):t._e(),t._v(" "),t.showTitle?e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v(t._s(this.$page.title)),t.$frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(t.$frontmatter.titleTag))]):t._e()]):t._e(),t._v(" "),t.isShowSlotT?t._t("top"):t._e(),t._v(" "),e("Content",{staticClass:"theme-vdoing-content"})],2),t._v(" "),t.isShowSlotB?t._t("bottom"):t._e(),t._v(" "),e("PageEdit"),t._v(" "),e("PageNav",t._b({},"PageNav",{sidebarItems:t.sidebarItems},!1))],2),t._v(" "),t.isShowUpdateBar?e("UpdateArticle",{attrs:{length:3,moreArticle:t.updateBarConfig&&t.updateBarConfig.moreArticle}}):t._e()],1)])}),[],!1,null,null,null).exports),it={data:()=>({category:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:u,PostList:d,Pagination:v,CategoriesBar:y},mounted(){const t=this.$route.query.category;t?(this.category=t,this.total=this.$groupPosts.categories[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p));const e=document.querySelector(".categories");e&&setTimeout(()=>{const t=e.querySelector(".active"),s=t?t.offsetTop:0;e.scrollTo({top:s,behavior:"smooth"})},300)},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.category"(t){this.category=t?decodeURIComponent(t):"",this.category?this.total=this.$groupPosts.categories[this.category].length:this.total=this.$sortPosts.length,this.currentPage=1}}},at=(s(358),Object(r.a)(it,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page categories-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,category:t.category}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),rt={data:()=>({tag:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:u,PostList:d,Pagination:v,TagsBar:w},mounted(){const t=this.$route.query.tag;t?(this.tag=t,this.total=this.$groupPosts.tags[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p))},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.tag"(t){this.tag=t?decodeURIComponent(t):"",this.tag?this.total=this.$groupPosts.tags[this.tag].length:this.total=this.$sortPosts.length,this.currentPage=1}}},nt=(s(359),Object(r.a)(rt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page tags-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,tag:t.tag}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),ot=s(66),lt=s.n(ot),ct={mixins:[tt],data:()=>({postsList:[],countByYear:{},perPage:80,currentPage:1}),created(){this.getPageData();const{$sortPostsByDate:t,countByYear:e}=this;for(let s=0;s{if(this.postsList.lengthi&&s+i>=a-250&&this.loadmore()}},200))},methods:{getPageData(){const t=this.currentPage,e=this.perPage;this.postsList=this.postsList.concat(this.$sortPostsByDate.slice((t-1)*e,t*e))},loadmore(){this.currentPage=this.currentPage+1,this.getPageData()},getYear(t){const e=this.postsList[t];if(!e)return;const{frontmatter:{date:s}}=e;return s&&"string"===Object(i.n)(s)?s.slice(0,4):void 0},getDate(t){const{frontmatter:{date:e}}=t;if(e&&"string"===Object(i.n)(e))return e.slice(5,10)}}},ht=(s(360),Object(r.a)(ct,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page archives-page"},[e("div",{staticClass:"theme-vdoing-wrapper"},[e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v("\n "+t._s(t.$page.title)+"\n ")]),t._v(" "),e("div",{staticClass:"count"},[t._v("\n 总共 "),e("i",[t._v(t._s(t.$sortPostsByDate.length))]),t._v(" 篇文章\n ")]),t._v(" "),e("ul",[t._l(t.postsList,(function(s,i){return[(t.year=t.getYear(i))!==t.getYear(i-1)?e("li",{key:i+t.$sortPostsByDate.length,staticClass:"year"},[e("h2",[t._v("\n "+t._s(t.year)+"\n "),e("span",[e("i",[t._v(t._s(t.countByYear[t.year]))]),t._v(" 篇\n ")])])]):t._e(),t._v(" "),e("li",{key:i},[e("router-link",{attrs:{to:s.path}},[e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))]),t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])],1)]}))],2)])])}),[],!1,null,null,null).exports),ut={name:"Sidebar",components:{SidebarLinks:s(329).default,NavLinks:I},props:["items"],computed:{blogger(){return this.$themeConfig.blogger}}},gt=(s(363),Object(r.a)(ut,(function(){var t=this._self._c;return t("aside",{staticClass:"sidebar"},[this._m(0),this._v(" "),t("NavLinks"),this._v(" "),this._t("top"),this._v(" "),t("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[function(){var t=this._self._c;return t("div",{staticStyle:{"margin-top":"0.8em","margin-left":"1.2em"}},[t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://pure-admin-utils.netlify.app/",target:"_blank"}},[this._v("@pureadmin/utils文档 📕")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1kg411v7QT/",target:"_blank"}},[this._v("平台快速开发教程 📺")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1Rx4y1U7Mv/",target:"_blank"}},[this._v("平台页面、功能演示 📺")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1Wr421F7oj/",target:"_blank"}},[this._v("迁移JS版本教程 📺")])])}],!1,null,null,null).exports),dt=s(321);var pt={data:()=>({threshold:100,scrollTop:null,showCommentBut:!1,commentTop:null,currentMode:"",showModeBox:!1,modeList:[{name:"跟随系统",icon:"icon-zidong",KEY:"auto"},{name:"浅色模式",icon:"icon-rijianmoshi",KEY:"light"},{name:"深色模式",icon:"icon-yejianmoshi",KEY:"dark"},{name:"阅读模式",icon:"icon-yuedu",KEY:"read"}],_scrollTimer:null,_textareaEl:null,_recordScrollTop:null,COMMENT_SELECTOR_1:"#vuepress-plugin-comment",COMMENT_SELECTOR_2:"#valine-vuepress-comment",COMMENT_SELECTOR_3:".vssue"}),mounted(){if(this.currentMode=dt.a.get("mode")||this.$themeConfig.defaultMode||"auto",this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",lt()(()=>{this.scrollTop=this.getScrollTop()},100)),window.addEventListener("load",()=>{this.getCommentTop()}),document.documentElement.clientWidth<719){this.$refs.modeBox.onclick=()=>{this.showModeBox=!1},window.addEventListener("scroll",lt()(()=>{this.showModeBox&&(this.showModeBox=!1)},100))}const t=document.querySelectorAll(".buttons .button");for(let e=0;e{s.classList.remove("hover")},150)}))}},computed:{showToTop(){return this.scrollTop>this.threshold}},methods:{toggleMode(t){this.currentMode=t,this.$emit("toggle-theme-mode",t)},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0},getCommentTop(){setTimeout(()=>{let t=document.querySelector(this.COMMENT_SELECTOR_1)||document.querySelector(this.COMMENT_SELECTOR_2)||document.querySelector(this.COMMENT_SELECTOR_3);t&&(this.showCommentBut=!1!==this.$frontmatter.comment&&!0!==this.$frontmatter.home,this.commentTop=t.offsetTop-58)},500)},scrollToComment(){window.scrollTo({top:this.commentTop,behavior:"smooth"}),this._textareaEl=document.querySelector(this.COMMENT_SELECTOR_1+" textarea")||document.querySelector(this.COMMENT_SELECTOR_2+" input")||document.querySelector(this.COMMENT_SELECTOR_3+" textarea"),this._textareaEl&&this.getScrollTop()!==this._recordScrollTop?document.addEventListener("scroll",this._handleListener):this._textareaEl&&this.getScrollTop()===this._recordScrollTop&&this._handleFocus()},_handleListener(){clearTimeout(this._scrollTimer),this._scrollTimer=setTimeout(()=>{document.removeEventListener("scroll",this._handleListener),this._recordScrollTop=this.getScrollTop(),this._handleFocus()},30)},_handleFocus(){this._textareaEl.focus(),this._textareaEl.classList.add("yellowBorder"),setTimeout(()=>{this._textareaEl.classList.remove("yellowBorder")},500)}},watch:{"$route.path"(){this.showCommentBut=!1,this.getCommentTop()}}},mt=(s(364),Object(r.a)(pt,(function(){var t=this._self._c;return t("div",{staticClass:"buttons"},[t("transition",{attrs:{name:"fade"}},[t("div",{directives:[{name:"show",rawName:"v-show",value:this.showToTop,expression:"showToTop"}],staticClass:"button blur go-to-top iconfont icon-fanhuidingbu",attrs:{title:"返回顶部"},on:{click:this.scrollToTop}})]),this._v(" "),t("div",{directives:[{name:"show",rawName:"v-show",value:this.showCommentBut,expression:"showCommentBut"}],staticClass:"button blur go-to-comment iconfont icon-pinglun",attrs:{title:"去评论"},on:{click:this.scrollToComment}})],1)}),[],!1,null,null,null).exports),ft={data:()=>({stars:"16.6k",forks:"3.1k"}),computed:{social(){return this.$themeConfig.social},footer(){return this.$themeConfig.footer}}},vt=(s(365),Object(r.a)(ft,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"footer"},[t.social&&t.social.icons?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(t,s){return e("a",{key:s,class:["iconfont",t.iconClass],attrs:{href:t.link,title:t.title,target:"_blank"}})})),0):t._e(),t._v(" "),e("div",{staticStyle:{display:"flex","justify-content":"center","margin-bottom":"6px"}},[e("div",{staticClass:"no-zoom",attrs:{title:"GitHub stars"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"72",height:"20"}},[e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"72",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"37",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"37",width:"35",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"72",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin"}},[e("rect",{attrs:{width:"37",x:"0",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"195",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"270"}},[t._v("stars")]),e("text",{attrs:{x:"195",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"270"}},[t._v("stars")])]),e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/stargazers"}},[e("rect",{attrs:{width:"35",x:"37",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"535",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"250"}},[t._v(t._s(t.stars))]),e("text",{attrs:{x:"535",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"250"}},[t._v(t._s(t.stars))])])])],1)]),t._v(" "),e("div",{staticClass:"no-zoom",staticStyle:{"margin-left":"6px"},attrs:{title:"GitHub forks"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"68",height:"20"}},[e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"68",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"37",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"37",width:"31",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"68",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/fork"}},[e("rect",{attrs:{width:"37",x:"0",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"195",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"270"}},[t._v("forks")]),e("text",{attrs:{x:"195",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"270"}},[t._v("forks")])]),e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/network"}},[e("rect",{attrs:{width:"31",x:"37",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"515",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"210"}},[t._v(t._s(t.forks))]),e("text",{attrs:{x:"515",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"210"}},[t._v(t._s(t.forks))])])])],1)])]),t._v(" "),e("div",[t._v("\n Theme by\n "),e("a",{attrs:{href:"https://github.com/xugaoyi/vuepress-theme-vdoing",target:"_blank",title:"本站主题"}},[t._v("Vdoing")]),t._v(" "),t.footer?[t._v("\n | Copyright © "+t._s(t.footer.createYear)+"-"+t._s((new Date).getFullYear())+"\n "),t._v(" "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",title:"pure-admin"}},[t._v("\n pure-admin | MIT License\n ")])]:t._e()],2)])}),[],!1,null,null,null).exports),_t={data:()=>({bgImg:"",opacity:.5}),mounted(){let{bodyBgImg:t,bodyBgImgOpacity:e,bodyBgImgInterval:s=15}=this.$themeConfig;if("string"===Object(i.n)(t))this.bgImg=t;else if("array"===Object(i.n)(t)){let e=0,i=null;this.bgImg=t[e],clearInterval(i),i=setInterval(()=>{if(++e>=t.length&&(e=0),this.bgImg=t[e],t[e+1]){(new Image).src=t[e+1]}},1e3*s)}void 0!==e&&(this.opacity=e)}},bt=(s(366),Object(r.a)(_t,(function(){return(0,this._self._c)("div",{staticClass:"body-bg",style:`background: url(${this.bgImg}) center center / cover no-repeat;opacity:${this.opacity}`})}),[],!1,null,null,null).exports),Ct=s(367),yt=s.n(Ct);var xt={components:{Home:L,Navbar:O,Page:st,CategoriesPage:at,TagsPage:nt,ArchivesPage:ht,Sidebar:gt,Footer:vt,Buttons:mt,BodyBgImg:bt},data:()=>({hideNavbar:!1,isSidebarOpen:!0,showSidebar:!1,themeMode:"auto",showWindowLB:!0,showWindowRB:!0}),computed:{sidebarSlotTop(){return this.getHtmlStr("sidebarT")},sidebarSlotBottom(){return this.getHtmlStr("sidebarB")},pageSlotTop(){return this.getHtmlStr("pageT")},pageSlotBottom(){return this.getHtmlStr("pageB")},windowLB(){return this.getHtmlStr("windowLB")},windowRB(){return this.getHtmlStr("windowRB")},showRightMenu(){const{headers:t}=this.$page;return!this.$frontmatter.home&&!1!==this.$themeConfig.rightMenuBar&&t&&t.length&&!1!==this.$frontmatter.sidebar},shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length&&!1!==t.showSidebar},sidebarItems(){return Object(i.m)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"hide-navbar":this.hideNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar,"have-rightmenu":this.showRightMenu,"have-body-img":this.$themeConfig.bodyBgImg,"only-sidebarItem":1===this.sidebarItems.length&&"page"===this.sidebarItems[0].type},t]}},created(){const t=this.$themeConfig.sidebarOpen;!1===t&&(this.isSidebarOpen=t)},beforeMount(){this.isSidebarOpenOfclientWidth();const t=dt.a.get("mode"),{defaultMode:e}=this.$themeConfig;e&&"auto"!==e&&!t?this.themeMode=e:t&&"auto"!==t&&"auto"!==e?this.themeMode=t:this._autoMode(),this.setBodyClass();const s=this.$themeConfig.social;if(s&&s.iconfontCssFile){let t=document.createElement("link");t.setAttribute("rel","stylesheet"),t.setAttribute("type","text/css"),t.setAttribute("href",s.iconfontCssFile),document.head.appendChild(t)}},mounted(){const t=document.location.hash;if(t.length>1){const e=decodeURIComponent(t.substring(1)),s=document.getElementById(e);s&&s.scrollIntoView()}this.showSidebar=!0,this.$router.afterEach(()=>{this.isSidebarOpenOfclientWidth()});let e=0,s=0;window.addEventListener("scroll",yt.a.throttle(()=>{this.isSidebarOpen||(e=this.getScrollTop(),this.hideNavbar=s58,setTimeout(()=>{s=e},0))},300))},watch:{isSidebarOpen(){this.isSidebarOpen&&(this.hideNavbar=!1)},themeMode(){this.setBodyClass()}},methods:{getHtmlStr(t){const{htmlModules:e}=this.$themeConfig;return e?e[t]:""},setBodyClass(){let{pageStyle:t="card",bodyBgImg:e}=this.$themeConfig;("card"!==t&&"line"!==t||e)&&(t="card"),document.body.className=`theme-mode-${this.themeMode} theme-style-${t}`},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,isSidebarOpenOfclientWidth(){document.documentElement.clientWidth<719&&(this.isSidebarOpen=!1)},toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},_autoMode(){window.matchMedia("(prefers-color-scheme: dark)").matches?this.themeMode="dark":this.themeMode="light"},toggleThemeMode(t){"auto"===t?this._autoMode():this.themeMode=t,dt.a.set("mode",t)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},wt=(s(368),Object(r.a)(xt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),!1!==t.$themeConfig.sidebarHoverTriggerOpen?e("div",{staticClass:"sidebar-hover-trigger"}):t._e(),t._v(" "),e("Sidebar",{directives:[{name:"show",rawName:"v-show",value:t.showSidebar,expression:"showSidebar"}],attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([t.sidebarSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-top",domProps:{innerHTML:t._s(t.sidebarSlotTop)}})]},proxy:!0}:null,t.sidebarSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-bottom",domProps:{innerHTML:t._s(t.sidebarSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):t.$page.frontmatter.categoriesPage?e("CategoriesPage"):t.$page.frontmatter.tagsPage?e("TagsPage"):t.$page.frontmatter.archivesPage?e("ArchivesPage"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([t.pageSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"page-slot page-slot-top",domProps:{innerHTML:t._s(t.pageSlotTop)}})]},proxy:!0}:null,t.pageSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"page-slot page-slot-bottom",domProps:{innerHTML:t._s(t.pageSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),e("Footer"),t._v(" "),e("Buttons",{ref:"buttons",on:{"toggle-theme-mode":t.toggleThemeMode}}),t._v(" "),t.$themeConfig.bodyBgImg?e("BodyBgImg"):t._e()],1)}),[],!1,null,null,null));e.default=wt.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{291:function(t,e,s){},292:function(t,e,s){},293:function(t,e,s){},294:function(t,e,s){},295:function(t,e,s){},296:function(t,e,s){},297:function(t,e,s){},298:function(t,e,s){},299:function(t,e,s){},300:function(t,e,s){},302:function(t,e,s){},303:function(t,e,s){},304:function(t,e,s){},305:function(t,e,s){},306:function(t,e,s){},308:function(t,e,s){},309:function(t,e,s){},310:function(t,e,s){},311:function(t,e,s){},312:function(t,e,s){},313:function(t,e,s){},314:function(t,e,s){},315:function(t,e,s){},316:function(t,e,s){},317:function(t,e,s){},318:function(t,e,s){},319:function(t,e,s){},320:function(t,e,s){},322:function(t,e,s){},323:function(t,e,s){},324:function(t,e,s){},325:function(t,e,s){},329:function(t,e,s){"use strict";s.r(e);s(4),s(64);var i=s(20),a={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:s(330).a},beforeCreate(){this.$options.components.SidebarLinks=s(329).default},methods:{isActive:i.f}},r=(s(361),s(8)),n=Object(r.a)(a,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("router-link",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;s(124),s(21);function o(t,e,s,i){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}},s)}function l(t,e,s,a,r,n=1){return!e||n>r?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(i.f)(a,s+"#"+e.slug);return t("li",{class:"sidebar-sub-header level"+e.level},[o(t,s+"#"+e.slug,e.title,c),l(t,e.children,s,a,r,n+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:s,$route:a,$themeConfig:r,$themeLocaleConfig:n},props:{item:c,sidebarDepth:h}}){const u=Object(i.f)(a,c.path),g="auto"===c.type?u||c.children.some(t=>Object(i.f)(a,c.basePath+"#"+t.slug)):u,d="external"===c.type?function(t,e,s){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[s,t("OutboundLink")])}(t,c.path,c.title||c.path):o(t,c.path,c.title||c.path,g),p=[e.frontmatter.sidebarDepth,h,n.sidebarDepth,r.sidebarDepth,1].find(t=>void 0!==t),m=n.displayAllHeaders||r.displayAllHeaders;if("auto"===c.type)return[d,l(t,c.children,c.basePath,a,p)];if((g||m)&&c.headers&&!i.e.test(c.path)){return[d,l(t,Object(i.d)(c.headers),c.path,a,p)]}return d}};s(362);function h(t,e){return"group"===e.type&&e.children.some(e=>"group"===e.type?h(t,e):"page"===e.type&&Object(i.f)(t,e.path))}var u={name:"SidebarLinks",components:{SidebarGroup:n,SidebarLink:Object(r.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},created(){this.refreshIndex()},watch:{$route(){this.refreshIndex()}},methods:{refreshIndex(){const t=function(t,e){for(let s=0;s-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(i.f)(this.$route,t.regularPath)}}},g=Object(r.a)(u,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(s,i){return e("li",{key:i},["group"===s.type?e("SidebarGroup",{attrs:{item:s,open:i===t.openGroupIndex,collapsable:s.collapsable||s.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):e("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:s}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=g.exports},330:function(t,e,s){"use strict";var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},a=(s(346),s(8)),r=Object(a.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=r.exports},332:function(t,e,s){"use strict";s(291)},335:function(t,e,s){"use strict";s(292)},336:function(t,e,s){"use strict";s(293)},337:function(t,e,s){"use strict";s(294)},338:function(t,e,s){"use strict";s(295)},339:function(t,e,s){"use strict";s(296)},340:function(t,e,s){"use strict";s(297)},341:function(t,e,s){"use strict";s(298)},342:function(t,e,s){"use strict";s(299)},343:function(t,e,s){"use strict";s(300)},345:function(t,e,s){"use strict";s(302)},346:function(t,e,s){"use strict";s(303)},347:function(t,e,s){"use strict";s(304)},348:function(t,e,s){"use strict";s(305)},349:function(t,e,s){"use strict";s(306)},350:function(t,e,s){"use strict";s(308)},352:function(t,e,s){"use strict";s(309)},353:function(t,e,s){"use strict";s(310)},354:function(t,e,s){"use strict";s(311)},355:function(t,e,s){"use strict";s(312)},356:function(t,e,s){"use strict";s(313)},357:function(t,e,s){"use strict";s(314)},358:function(t,e,s){"use strict";s(315)},359:function(t,e,s){"use strict";s(316)},360:function(t,e,s){"use strict";s(317)},361:function(t,e,s){"use strict";s(318)},362:function(t,e,s){"use strict";s(319)},363:function(t,e,s){"use strict";s(320)},364:function(t,e,s){"use strict";s(322)},365:function(t,e,s){"use strict";s(323)},366:function(t,e,s){"use strict";s(324)},368:function(t,e,s){"use strict";s(325)},525:function(t,e,s){"use strict";s.r(e);s(4),s(64);var i=s(20),a={props:{item:{required:!0}},computed:{link(){return Object(i.c)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link}},methods:{isExternal:i.g,isMailto:i.h,isTel:i.i,focusoutAction(){this.$emit("focusout")}}},r=s(8),n=Object(r.a)(a,(function(){var t=this,e=t._self._c;return t.isExternal(t.link)?e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),e("OutboundLink")],1):e("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v(t._s(t.item.text))])}),[],!1,null,null,null).exports,o={props:{item:{required:!0}},computed:{link:()=>"https://pure-admin.github.io/vue-pure-admin/#/login",exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link}},methods:{isExternal:i.g,isMailto:i.h,isTel:i.i,focusoutAction(){this.$emit("focusout")}}},l=(s(332),Object(r.a)(o,(function(){var t=this,e=t._self._c;return e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"},on:{focusout:t.focusoutAction}},[t._v("\n 在线预览\n "),e("OutboundLink")],1)}),[],!1,null,"617c663d",null).exports),c=s(333),h=s(334),u=(s(335),Object(r.a)({},(function(){return(0,this._self._c)("div",{staticClass:"main-wrapper"})}),[],!1,null,null,null).exports),g=(s(29),{props:{category:{type:String,default:""},tag:{type:String,default:""},currentPage:{type:Number,default:1},perPage:{type:Number,default:10}},data:()=>({sortPosts:[],postListOffsetTop:0}),created(){this.setPosts()},mounted(){},watch:{currentPage(){this.$route.query.p!=this.currentPage&&this.$router.push({query:{...this.$route.query,p:this.currentPage}}),this.setPosts()},category(){this.setPosts()},tag(){this.setPosts()}},methods:{setPosts(){const t=this.currentPage,e=this.perPage;let s=[];s=this.category?this.$groupPosts.categories[this.category]:this.tag?this.$groupPosts.tags[this.tag]:this.$sortPosts,this.sortPosts=s.slice((t-1)*e,t*e)}}}),d=(s(336),Object(r.a)(g,(function(){var t=this,e=t._self._c;return e("div",{ref:"postList",staticClass:"post-list"},[e("transition-group",{attrs:{tag:"div",name:"post"}},t._l(t.sortPosts,(function(s){return e("div",{key:s.key,staticClass:"post card-box",class:s.frontmatter.sticky&&"iconfont icon-zhiding"},[e("div",{staticClass:"title-wrapper"},[e("h2",[e("router-link",{attrs:{to:s.path}},[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(s.frontmatter.titleTag))]):t._e()])],1),t._v(" "),e("div",{staticClass:"article-info"},[s.author&&s.author.href?e("a",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者",target:"_blank",href:s.author.href}},[t._v(t._s(s.author.name?s.author.name:s.author))]):s.author?e("span",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者"}},[t._v(t._s(s.author.name?s.author.name:s.author))]):t._e(),t._v(" "),s.frontmatter.date?e("span",{staticClass:"iconfont icon-riqi",attrs:{title:"创建时间"}},[t._v(t._s(s.frontmatter.date.split(" ")[0]))]):t._e(),t._v(" "),!1!==t.$themeConfig.category&&s.frontmatter.categories?e("span",{staticClass:"iconfont icon-wenjian",attrs:{title:"分类"}},t._l(s.frontmatter.categories,(function(s,i){return e("router-link",{key:i,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&s.frontmatter.tags&&s.frontmatter.tags[0]?e("span",{staticClass:"iconfont icon-biaoqian tags",attrs:{title:"标签"}},t._l(s.frontmatter.tags,(function(s,i){return e("router-link",{key:i,attrs:{to:"/tags/?tag="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e()])]),t._v(" "),s.excerpt?e("div",{staticClass:"excerpt-wrapper"},[e("div",{staticClass:"excerpt",domProps:{innerHTML:t._s(s.excerpt)}}),t._v(" "),e("router-link",{staticClass:"readmore iconfont icon-jiantou-you",attrs:{to:s.path}},[t._v("阅读全文")])],1):t._e()])})),0)],1)}),[],!1,null,null,null).exports),p=(s(16),{name:"UpdateArticle",props:{length:{type:[String,Number],default:3},moreArticle:String},data:()=>({posts:[],currentPath:""}),created(){this.posts=this.$site.pages,this.currentPath=this.$page.path},computed:{topPublishPosts(){return this.$sortPostsByDate?this.$sortPostsByDate.filter(t=>{const{path:e}=t;return e!==this.currentPath}).slice(0,this.length):[]},isShowArticle(){const{frontmatter:t}=this.$page;return!(!1!==t.article)}},methods:{getNum:t=>t<9?"0"+(t+1):t+1,getDate:t=>t.frontmatter.date?t.frontmatter.date.split(" ")[0].slice(5,10):""},watch:{$route(){this.currentPath=this.$page.path}}}),m=(s(337),Object(r.a)(p,(function(){var t=this,e=t._self._c;return e("div",{class:["article-list",{"no-article-list":t.isShowArticle}]},[e("div",{staticClass:"article-title"},[e("router-link",{staticClass:"iconfont icon-bi",attrs:{to:t.moreArticle||"/archives/"}},[t._v("最近更新")])],1),t._v(" "),e("div",{staticClass:"article-wrapper"},[t._l(t.topPublishPosts,(function(s,i){return e("dl",{key:i},[e("dd",[t._v(t._s(t.getNum(i)))]),t._v(" "),e("dt",[e("router-link",{attrs:{to:s.path}},[e("div",[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])]),t._v(" "),e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))])],1)])})),t._v(" "),e("dl",[e("dd"),t._v(" "),e("dt",[e("router-link",{staticClass:"more",attrs:{to:t.moreArticle||"/archives/"}},[t._v("更多文章>")])],1)])],2)])}),[],!1,null,null,null).exports),f={props:{total:{type:Number,default:10},perPage:{type:Number,default:10},currentPage:{type:Number,default:1}},computed:{pages(){return Math.ceil(this.total/this.perPage)}},methods:{threeNum(){let t=3;const e=this.currentPage,s=this.pages;return t=e<3?3:e>s-3?s-2:e,t},goPrex(){let t=this.currentPage;t>1&&this.handleEmit(--t)},goNext(){let t=this.currentPage;t3,expression:"currentPage > 3"}],staticClass:"ellipsis ell-two",attrs:{title:"上两页"},on:{click:function(e){return t.goIndex(t.currentPage-2)}}}),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage<=3,expression:"currentPage <= 3"}],staticClass:"card-box",class:{active:2===t.currentPage},on:{click:function(e){return t.goIndex(2)}}},[t._v("2")]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage>=3&&t.currentPage<=t.pages-2},on:{click:function(e){t.goIndex(t.threeNum())}}},[t._v(t._s(t.threeNum()))]),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage=t.pages-2,expression:"currentPage >= pages - 2"}],staticClass:"card-box",class:{active:t.currentPage===t.pages-1},on:{click:function(e){return t.goIndex(t.pages-1)}}},[t._v(t._s(t.pages-1))]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage===t.pages},on:{click:function(e){return t.goIndex(t.pages)}}},[t._v(t._s(t.pages))])]),t._v(" "),e("span",{staticClass:"card-box next iconfont icon-jiantou-you",class:{disabled:t.currentPage===t.pages},on:{click:function(e){return t.goNext()}}},[e("p",[t._v("下一页")])])])}),[],!1,null,null,null).exports),_={computed:{blogger(){return this.$themeConfig.blogger},social(){return this.$themeConfig.social}}},b=(s(339),Object(r.a)(_,(function(){var t=this,e=t._self._c;return e("aside",{staticClass:"blogger-wrapper card-box"},[e("div",{staticClass:"avatar"},[e("img",{attrs:{src:t.blogger.avatar,alt:"头像",title:"我好看吗"}})]),t._v(" "),t.social&&t.social.icons&&t.social.icons.length?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(s,i){return e("a",{key:i,class:["iconfont",s.iconClass],style:{width:100/t.social.icons.length+"%"},attrs:{href:s.link,title:s.title,target:"_blank"}})})),0):t._e(),t._v(" "),e("div",{staticClass:"blogger"},[e("span",{staticClass:"name"},[t._v(t._s(t.blogger.name))]),t._v(" "),e("span",{staticClass:"slogan"},[t._v(t._s(t.blogger.slogan))])])])}),[],!1,null,null,null).exports),C={props:{category:{type:String,default:""},categoriesData:{type:Array,default:[]},length:{type:[String,Number],default:"all"}},computed:{categories(){return"all"===this.length?this.categoriesData:this.categoriesData.slice(0,this.length)}}},y=(s(340),Object(r.a)(C,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"categories-wrapper card-box"},[e("router-link",{staticClass:"title iconfont icon-wenjianjia",attrs:{to:"/categories/",title:"全部分类"}},[t._v(t._s("all"===t.length?"全部分类":"文章分类"))]),t._v(" "),e("div",{staticClass:"categories"},[t._l(t.categories,(function(s,i){return e("router-link",{key:i,class:{active:s.key===t.category},attrs:{to:"/categories/?category="+encodeURIComponent(s.key)}},[t._v("\n "+t._s(s.key)+"\n "),e("span",[t._v(t._s(s.length))])])})),t._v(" "),"all"!==t.length&&t.length({tagBgColor:["#11a8cd","#F8B26A","#67CC86","#E15B64","#F47E60","#849B87"],tagStyleList:[]}),created(){for(let t=0,e=this.tags.length;tt.length?e("router-link",{attrs:{to:"/tags/"}},[t._v("更多...")]):t._e()],2)],1)}),[],!1,null,null,null).exports);c.a.use(h.a);var k={data:()=>({release:"5.9.0",isMQMobile:!1,slide:null,currentPageIndex:0,playTimer:0,mark:0,total:0,perPage:10,currentPage:1,addressHerf:"https://pure-admin.cn"}),computed:{homeData(){return{...this.$page.frontmatter}},hasFeatures(){return!(!this.homeData.features||!this.homeData.features.length)},homeSidebarB(){const{htmlModules:t}=this.$themeConfig;return t?t.homeSidebarB:""},showBanner(){return!(this.$route.query.p&&1!=this.$route.query.p&&(!this.homeData.postList||"detailed"===this.homeData.postList))},bannerBgStyle(){let t=this.homeData.bannerBg;return t&&"auto"!==t?"none"===t?this.$themeConfig.bodyBgImg?"":"background: var(--mainBg);color: var(--textColor)":t.indexOf("background:")>-1?t:t.indexOf(".")>-1?`background: url(${this.$withBase(t)}) center center / cover no-repeat`:void 0:this.$themeConfig.bodyBgImg?"":"background: rgb(40,40,45) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVFhH7c6xCQAgDAVRR9A6E4hLu4uLiWJ7tSnuQcIvr2TRYsw3/zOGGEOMIcYQY4gxxBhiDDGGGEOMIcYQY4gxxBhiDLkx52W4Gn1tuslCtHJvL54AAAAASUVORK5CYII=)"},actionLink(){return{link:this.homeData.actionLink,text:this.homeData.actionText}}},components:{NavLink:n,PreView:l,MainLayout:u,PostList:d,UpdateArticle:m,BloggerBar:b,CategoriesBar:y,TagsBar:w,Pagination:v},created(){this.total=this.$sortPosts.length},beforeMount(){this.isMQMobile=window.innerWidth<720,this.addressHerf=window.location.href},mounted(){this.$route.query.p&&(this.currentPage=Number(this.$route.query.p)),!this.hasFeatures||!this.isMQMobile||this.$route.query.p&&1!=this.$route.query.p||this.init(),this.hasFeatures&&window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720,!this.isMQMobile||this.slide||this.mark||(this.mark++,setTimeout(()=>{this.init()},60))})},beforeDestroy(){clearTimeout(this.playTimer),this.slide&&this.slide.destroy()},watch:{"$route.query.p"(){this.$route.query.p?this.currentPage=Number(this.$route.query.p):this.currentPage=1,this.hasFeatures&&1===this.currentPage&&this.isMQMobile&&setTimeout(()=>{this.slide&&this.slide.destroy(),this.init()},0)}},methods:{init(){clearTimeout(this.playTimer),this.slide=new c.a(this.$refs.slide,{scrollX:!0,scrollY:!1,slide:{loop:!0,threshold:100},useTransition:!0,momentum:!1,bounce:!1,stopPropagation:!1,probeType:2,preventDefault:!1}),this.slide.on("beforeScrollStart",()=>{clearTimeout(this.playTimer)}),this.slide.on("scrollEnd",()=>{this.autoGoNext()}),this.slide.on("slideWillChange",t=>{this.currentPageIndex=t.pageX}),this.autoGoNext()},autoGoNext(){clearTimeout(this.playTimer),this.playTimer=setTimeout(()=>{this.slide.next()},4e3)},handlePagination(t){this.currentPage=t},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop}},L=(s(342),s(343),Object(r.a)(k,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"home-wrapper"},[e("div",{staticClass:"banner",class:{"hide-banner":!t.showBanner},style:t.bannerBgStyle},[e("div",{staticClass:"banner-conent",style:!t.homeData.features&&!t.homeData.heroImage&&"padding-top: 7rem"},[e("header",{staticClass:"hero"},[t.homeData.heroImage?e("img",{attrs:{src:t.$withBase(t.homeData.heroImage),alt:t.homeData.heroAlt}}):t._e(),t._v(" "),e("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"center"}},[t.homeData.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.homeData.heroText)+"\n ")]):t._e(),t._v(" "),e("div",{staticStyle:{width:"80px",height:"20px",margin:"0",padding:"0","padding-left":"10px","padding-top":"5px"},attrs:{title:"当前版本"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"111",height:"20",role:"img"}},[e("title",[t._v("release: "+t._s(t.release))]),t._v(" "),e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"111",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"66",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"66",width:"45",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"111",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("image",{attrs:{x:"5",y:"3",width:"14",height:"14","xlink:href":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDBCM0UwIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+QXBwVmV5b3I8L3RpdGxlPjxwYXRoIGQ9Ik0gMTIsMCBDIDE4LjYsMCAyNCw1LjQgMjQsMTIgMjQsMTguNiAxOC42LDI0IDEyLDI0IDUuNCwyNCAwLDE4LjYgMCwxMiAwLDUuNCA1LjQsMCAxMiwwIFogbSAyLjk0LDE0LjM0IEMgMTYuMjYsMTIuNjYgMTYuMDgsMTAuMjYgMTQuNCw5IDEyLjc4LDcuNzQgMTAuMzgsOC4wNCA5LDkuNzIgNy42OCwxMS40IDcuODYsMTMuOCA5LjU0LDE1LjA2IGMgMS42OCwxLjI2IDQuMDgsMC45NiA1LjQsLTAuNzIgeiBtIC02LjQyLDcuOCBjIDAuNzIsMC4zIDIuMjgsMC42IDMuMDYsMC42IGwgNS4yMiwtNy41NiBjIDEuNjgsLTIuNTIgMS4yNiwtNS45NCAtMS4wOCwtNy44IC0yLjEsLTEuNjggLTUuMDQsLTEuNjIgLTcuMTQsMCBsIC03LjI2LDUuNTggYyAwLjE4LDEuOTIgMC43MiwyLjg4IDAuNzIsMi45NCBsIDQuMTQsLTQuNSBjIC0wLjMsMS45OCAwLjQyLDQuMDIgMi4xLDUuMjggMS40NCwxLjE0IDMuMTgsMS40NCA0Ljg2LDEuMDggeiIvPjwvc3ZnPg=="}}),t._v(" "),e("text",{attrs:{"aria-hidden":"true",x:"425",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"390"}},[t._v("release")]),e("text",{attrs:{x:"425",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"390"}},[t._v("release")]),e("text",{attrs:{"aria-hidden":"true",x:"875",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"350"}},[t._v(t._s(t.release))]),e("text",{attrs:{x:"875",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"350"}},[t._v(t._s(t.release))])])],1)])]),t._v(" "),t.homeData.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.homeData.tagline)+"\n ")]):t._e(),t._v(" "),t.homeData.actionText&&t.homeData.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}}),t._v(" "),e("PreView",{staticClass:"preview-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.hasFeatures&&!t.isMQMobile?e("div",{staticClass:"features"},t._l(t.homeData.features,(function(s,i){return e("div",{key:i,staticClass:"feature"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0):t._e()]),t._v(" "),t.hasFeatures?e("div",{directives:[{name:"show",rawName:"v-show",value:t.isMQMobile,expression:"isMQMobile"}],staticClass:"slide-banner"},[e("div",{staticClass:"banner-wrapper"},[e("div",{ref:"slide",staticClass:"slide-banner-scroll"},[e("div",{staticClass:"slide-banner-wrapper"},t._l(t.homeData.features,(function(s,i){return e("div",{key:i,staticClass:"slide-item"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0)]),t._v(" "),e("div",{staticClass:"docs-wrapper"},t._l(t.homeData.features.length,(function(s,i){return e("span",{key:i,staticClass:"doc",class:{active:t.currentPageIndex===i}})})),0)])]):t._e()]),t._v(" "),e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return["simple"===t.homeData.postList?e("UpdateArticle",{staticClass:"card-box",attrs:{length:t.homeData.simplePostListLength||10,moreArticle:t.$themeConfig.updateBar&&t.$themeConfig.updateBar.moreArticle}}):t.homeData.postList&&"detailed"!==t.homeData.postList?t._e():[e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})],t._v(" "),e("Content",{staticClass:"theme-vdoing-content custom card-box"})]},proxy:!0},t.homeData.hideRightBar?null:{key:"mainRight",fn:function(){return[t.$themeConfig.blogger?e("BloggerBar"):t._e(),t._v(" "),!1!==t.$themeConfig.category&&t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,length:10}}):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,length:30}}):t._e(),t._v(" "),t.homeSidebarB?e("div",{staticClass:"custom-html-box card-box",domProps:{innerHTML:t._s(t.homeSidebarB)}}):t._e()]},proxy:!0}],null,!0)})],1)}),[],!1,null,"02804833",null).exports),T=s(523),P=(s(345),Object(r.a)({},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"sidebar-button",attrs:{title:"目录"},on:{click:function(e){return t.$emit("toggle-sidebar")}}},[e("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[e("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),A=(s(21),s(330)),S=s(123),M=s.n(S),$={components:{NavLink:n,DropdownTransition:A.a},data:()=>({open:!1,isMQMobile:!1}),props:{item:{required:!0}},computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},beforeMount(){this.isMQMobile=window.innerWidth<720,window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720})},methods:{toggle(){this.isMQMobile&&(this.open=!this.open)},isLastItemOfArray:(t,e)=>M()(e)===t},watch:{$route(){this.open=!1}}},B=(s(347),{components:{NavLink:n,DropdownLink:Object(r.a)($,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.toggle}},[t.item.link?e("router-link",{staticClass:"link-title",attrs:{to:t.item.link}},[t._v(t._s(t.item.text))]):t._e(),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:!t.item.link,expression:"!item.link"}],staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})],1),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(s,i){return e("li",{key:s.link||i,staticClass:"dropdown-item"},["links"===s.type?e("h4",[t._v(t._s(s.text))]):t._e(),t._v(" "),"links"===s.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(s.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,s.items)&&t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0):e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,s=this.$router.options.routes,i=this.$site.themeConfig.locales||{},a={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(a=>{const r=t[a],n=i[a]&&i[a].label||r.lang;let o;return r.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,a),s.some(t=>t.path===o)||(o=a)),{text:n,link:o}})};return[...this.userNav,a]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(i.k)(t),{items:(t.items||[]).map(i.k)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let s=0;s({linksWrapMaxWidth:null}),mounted(){const t=parseInt(D(this.$el,"paddingLeft"))+parseInt(D(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)},computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}}},O=(s(349),Object(r.a)(N,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar blur"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),E=s(307),j=s.n(E),U={name:"PageEdit",computed:{tags(){return this.$frontmatter.tags},lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=j()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:s="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,s,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,s,a,r){if(/bitbucket.org/.test(e)){return e.replace(i.b,"")+"/src"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r+`?mode=edit&spa=0&at=${a}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(i.b,"")+"/-/edit"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r}const n=/gitee.com/;if(n.test(e)){return e.replace(n,"gitee.com/-/ide/project")+"/edit"+`/${a}/-/`+(s?s.replace(i.b,"")+"/":"")+r}return(i.j.test(e)?e:"https://github.com/"+e).replace(i.b,"")+"/edit"+`/${a}/`+(s?s.replace(i.b,"")+"/":"")+r}}},G=(s(350),Object(r.a)(U,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.tags&&t.tags[0]?e("div",{staticClass:"tags"},t._l(t.tags,(function(s,i){return e("router-link",{key:i,attrs:{to:"/tags/?tag="+encodeURIComponent(s),title:"标签"}},[t._v("#"+t._s(s))])})),1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports),H=s(351),Q=s.n(H),q={name:"PageNav",props:["sidebarItems"],computed:{prev(){return Y(R.PREV,this)},next(){return Y(R.NEXT,this)}},methods:{showTooltip(t){const e=document.body.clientWidth,s=t.clientX,i=t.target.querySelector(".tooltip");if(!i)return;const a=i.style;st,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return F(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function Y(t,{$themeConfig:e,$page:s,$route:a,$site:r,sidebarItems:n}){const{resolveLink:o,getThemeLinkConfig:l,getPageLinkConfig:c}=t,h=l(e),u=c(s),g=j()(u)?h:u;return!1===g?void 0:Q()(g)?Object(i.l)(r.pages,g,a.path):o(s,n)}function F(t,e,s){const i=[];!function t(e,s){for(let i=0,a=e.length;i({date:"",classify1:"",classifyList:[],cataloguePermalink:"",author:null,categories:[]}),created(){this.getPageInfo()},watch:{"$route.path"(){this.classifyList=[],this.getPageInfo()}},methods:{getPageInfo(){const t=this.$page,{relativePath:e}=t,{sidebar:s}=this.$themeConfig,i=e.split("/");i.forEach((t,e)=>{const s=t.split(".");if(e!==i.length-1)if(1===s)this.classifyList.push(s[0]);else{const e=t.indexOf(".");this.classifyList.push(t.substring(e+1)||"")}}),this.classify1=this.classifyList[0];const a=s&&s.catalogue?s.catalogue[this.classify1]:"",r=this.$frontmatter.author||this.$themeConfig.author;let n=(t.frontmatter.date||"").split(" ")[0];const{categories:o}=this.$frontmatter;this.date=n,this.cataloguePermalink=a,this.author=r,this.categories=o},getLink(t){const{cataloguePermalink:e}=this;return t===e?e:`${e}${"/"===e.charAt(e.length-1)?"":"/"}#${t}`}}}),J=(s(353),Object(r.a)(W,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"articleInfo-wrap"},[e("div",{staticClass:"articleInfo"},[t.classify1&&"_posts"!==t.classify1?e("ul",{staticClass:"breadcrumbs"},[e("li",[e("router-link",{staticClass:"iconfont icon-home",attrs:{to:"/",title:"首页"}})],1),t._v(" "),t._l(t.classifyList,(function(s){return e("li",{key:s},[t.cataloguePermalink?e("router-link",{attrs:{to:t.getLink(s)}},[t._v(t._s(s))]):!1!==t.$themeConfig.category?e("router-link",{attrs:{to:"/categories/?category="+encodeURIComponent(s),title:"分类"}},[t._v(t._s(s))]):e("span",[t._v(t._s(s))])],1)}))],2):t._e(),t._v(" "),e("div",{staticClass:"info"},[t.author?e("div",{staticClass:"author iconfont icon-touxiang",attrs:{title:"作者"}},[t.author.href||t.author.link&&"string"==typeof t.author.link?e("a",{staticClass:"beLink",attrs:{href:t.author.href||t.author.link,target:"_blank",title:"作者"}},[t._v(t._s(t.author.name))]):e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.author.name||t.author))])]):t._e(),t._v(" "),t.date?e("div",{staticClass:"date iconfont icon-riqi",attrs:{title:"创建时间"}},[e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.date))])]):t._e(),t._v(" "),!1===t.$themeConfig.category||t.classify1&&"_posts"!==t.classify1||!t.categories?t._e():e("div",{staticClass:"date iconfont icon-wenjian",attrs:{title:"分类"}},t._l(t.categories,(function(s,i){return e("router-link",{key:i,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s+" "))])})),1)])])])}),[],!1,null,"51e47508",null).exports),Z={data:()=>({pageData:null,isStructuring:!0,appointDir:{}}),created(){this.getPageData();const t=this.$themeConfig.sidebar;t&&"auto"!==t||(this.isStructuring=!1,console.error("目录页数据依赖于结构化的侧边栏数据,请在主题设置中将侧边栏字段设置为'structuring',否则无法获取目录数据。"))},methods:{getPageData(){const t=this.$frontmatter.pageComponent;t&&t.data?this.pageData={...t.data,title:this.$frontmatter.title}:console.error("请在front matter中设置pageComponent和pageComponent.data数据")},getCatalogueList(){const{sidebar:t}=this.$site.themeConfig,{data:e}=this.$frontmatter.pageComponent;let s=(e.path||e.key).split("/"),i=t[`/${s[0]}/`];return s.length>1&&(s.shift(),i=this.appointDirDeal(0,s,i)),i||console.error("未获取到目录数据,请查看front matter中设置的path是否正确。"),i},type:t=>Object.prototype.toString.call(t).match(/\[object (.*?)\]/)[1].toLowerCase(),appointDirDeal(t,e,s){let i=e[t];void 0!==i&&-1!==i.indexOf(".")&&(i=i.substring(i.indexOf(".")+1));for(let a=0;a({headers:[],hashText:""}),mounted(){this.getHeadersData(),this.getHashText()},watch:{$route(){this.headers=this.$page.headers,this.getHashText()}},methods:{getHeadersData(){this.headers=this.$page.headers},getHashText(){this.hashText=decodeURIComponent(window.location.hash.slice(1))}}},tt=(s(355),s(356),{data:()=>({badges:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABGpJREFUSA3tVVtoXFUU3fvOI53UlmCaKIFmwEhsE7QK0ipFEdHEKpXaZGrp15SINsXUWvBDpBgQRKi0+KKoFeJHfZA+ED9KKoIU2gYD9UejTW4rVIzm0VSTziPzuNu1z507dibTTjL4U/DAzLn3nL3X2o91ziX6f9wMFdh6Jvbm9nNSV0msViVO6tN1Rm7NMu2OpeJ9lWBUTDxrJbYTS0hInuwciu9eLHlFxCLCZEk3MegsJmZ5K/JD6t7FkFdEvGUo1g7qJoG3MHImqRIn8/nzY1K9UPKKiJmtnUqHVE3Gbuay6vJE/N2FEmuxFjW2nUuE0yQXRRxLiTUAzs36zhZvOXJPdX850EVnnLZkB8prodQoM5JGj7Xk2mvC7JB8tG04Ef5PiXtG0UtxupRQSfTnBoCy554x18yJHI6I+G5Eru4LHmPJZEQsrvPUbMiA8G/WgMK7w7I+ez7++o2ANfbrjvaOl1tFMs+htG3IrZH9/hDX1Pr8Tc0UvH8tcX29KzAgIGcEkINyW5BF9x891hw6VYqgJHEk0huccS7vh3C6gTiODL+26huuBtbct8eZnqLML8PkxGYpuPZBqtqwkSjgc4mB5gbgig5i+y0UDK35LMxXisn9xQtK+nd26gTIHsHe/oblK/b29fUmN/8Y+9jAQrnBp56m1LcDlDp9irKTExSKduXJVWSqdBMA08pEJnEIOB3FPPMybu/oeV8zFeYN3xx576Q6RH+VmplE4ncQV5v+5rzSoyOU7PuEAg8g803PwBJ0CExno/jcMbN8tONYeOmHiuUNryvm3fRUy4tMPVLdAGkUhNWuggGrJcXPv+ouCjz0MKUHz1J2/E8IC9nqTabcxgaBYM0hPhD5Y65FsbxRQKxCQrDjDctW7PUM3HuZunFyifSAqEfuzCp48Il24luWUWZoyJCaPR82jE0+kFA643wRFVni4RYSq3ohJO2pZ7B5dO4xkDWbEpossJPLSrPjYID8rS2UHTlvyNxqIGsg674XJJ7vnh5L7PNwC4hh2sjCI96mzszOTpxLF0T7l88Yz7lAuK6OnL8gXLOnTvpzSb22YG8W7us3jSebFHeeqnXRG1vt+MoUM84LQIBmMsCTAcOauTh0T0l0neQK7m2bLMt2mGxU3HYssS0J2cdv5wljlPsrIuZLAG/2DOZIXgCYT8uMGZN+e2kSirfxZOPCsC0f24nTZzspnVn9VePS1Z5vubmAGGXG8ZFno9Hel0yfA5ZPhF7Dh972BQJ2qCpgH67lmWtBYbvk6sz02wjky2vXyz0XErP/kFB619js1BtwfOV4OPRqOQBjy3Qbk18vigUPPSD5ceHnwck7W9bhAqZdd7SuG7w4/P2F/GaJh8c7e9qgow+Q7cGBo+98WsLkuktFqiZabtXuQTu/Y5ETbR0v7tNSFnvrmu6pjdoan2KjMu8q/Hmj1EfCO2ZGfEIbIXKUlw8qaX9/b2oeSJmFksSeT/Fn0V3nSypChh4Gjh74ybO9aeZ/AN2dwciu2/MhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABH1JREFUSA3tVl1oHFUUPmdmd2ltklqbpJDiNnXFmgbFktho7YMPNiJSSZM0+CAYSkUELVhM6YuwIPpgoOKDqOBDC0XE2CQoNtQXBUFTTcCi+Wlh1V2TQExsUzcltd3M9Tt3ZjZzZ2fT+OJTL8yeM+eee757fmeJbq//KQL8X3DUSFOcfr7cRsRtxNQMWueeVzOkaITIGqQHNg5y8+jNW9ldM7A6nTpAjuolUikAwq7CE3WcM2RRDz+XGVgN3FptU/aUSlvq9Pa3iZ1+sgAqJyyAFqkipd9dqiwHF3P65YycLWc/6sqGrvoEoIp6DOFaX5h6+dnfjkWprwqsPk0dUGq5vySwDImC10KxFHgGL1SWoc92O3eVht09qdXNH11I2SsTsJYqMWzihqGMi+A+Garf3BAuuLI5oGlULyNfyB/HYNujwktOfRrMr5t77NmevqaUopx0grnKAyvVpmwUDB4x6FPXuGvYLTDwWsejwgtgkYKPqRJg8SV6xaiZ3ZTppGneS4yfH5/66fZSDHv+QZci/+h5c5UHtpy67JUqGppM0sh0Nc1dW6/N1W5Yoqat8/TU/VnadmdeW2PLLSyh0cvxBs3KbqTmwYPpxN4do/mzE8nEpvX/UMu2Wbp74zUAK5q6WkHns7V0eWkdPbPzd3rxkTGybadYySumVzhcaJFbs5UrEkQ/+CK8gF5dnh/6ciIZ73gwQ927L1IitoxKLXYP3SjYdOrHHfTZhRRlFyrorafPk20B3HPD1y2G3qKZME5Jcf3t/HUC13/8tSd++vqFveMUTwAUxSUFI1QekR1+bIze3D9MF2aq6cPvG72CgnldWCFqyRw3lwH8ZMerjTD9ElRO7Gv44wNpC90aASqGfVlz/Rx17srQ57/UU26hkhQqUB7dBR71WmzQhHUnblGmVOEw0jhbV1n9OlXUDCIRGaNV5Jp43N516fN7JmnTHdfp7Hgy0luO4aMhtkLL8Bi3bUWYvzh5Mn1dTxrL6QmGuRhGL/TiTTxRoEdTszSaq9GR0NGA3KdkOz3hqSV3MIDhQ5IVX/Ivx3umBti2es2h4eZby7x8br1rkf7Mo90AqC8aQ3sJeNzqFRu+vSANAQe3PL7l0HGOAdwDCeZYvNKeoZp1Qfs6Aipndh86HmFRi0LAnEO47wsqM6cdfjh3jBPUzhZy7nvlUfFsamED1VQt6aISHVymXZ/B2aCtIG8AI8xfobj2d3en1wWVhOeHELKmLQ1s211s88comkv4UCwWyF787mJdYXtNfhKAXVqnKTq8QZvGAGGOfaTo5pGZ/PwbUCr5+DPr/1J92JNHr9aOl/F3iI5+O1nfybsGxoimvZ3ViWSluDITw3P37mypheDIPY0tw7+O/5ApbkYw+zpfaUVu32Pi98+defdUhEpZkRFq0aqyNh9FuL9hpYbEm6iwi0z2REd09ZmyENEbuhjDWzKvZXTqKYaBIr3tt5kuPtQBZFvEUwHt60vfCNu41XsksH9Ij1BMMz1Y0OOunHNShFIP5868g5zeXmuLwL9T4b6Q2+KejgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg=="],currentBadge:""}),created(){this.$themeConfig.titleBadgeIcons&&(this.badges=this.$themeConfig.titleBadgeIcons),this.currentBadge=this.getBadge()},watch:{"$route.path"(){this.currentBadge=this.getBadge()}},methods:{getBadge(){return this.badges[Math.floor(Math.random()*this.badges.length)]}}}),et={mixins:[tt],data:()=>({updateBarConfig:null}),props:["sidebarItems"],components:{PageEdit:G,PageNav:V,ArticleInfo:J,Catalogue:X,UpdateArticle:m,RightMenu:Object(r.a)(K,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"right-menu-wrapper"},[e("div",{staticClass:"right-menu-margin"},[e("div",{staticClass:"right-menu-title"},[t._v("目录")]),t._v(" "),e("div",{staticClass:"right-menu-content"},t._l(t.headers,(function(s,i){return e("div",{key:i,class:["right-menu-item","level"+s.level,{active:s.slug===t.hashText}]},[e("a",{attrs:{href:"#"+s.slug}},[t._v(t._s(s.title))])])})),0)])])}),[],!1,null,"52e54980",null).exports},created(){this.updateBarConfig=this.$themeConfig.updateBar},computed:{bgStyle(){const{contentBgStyle:t}=this.$themeConfig;return t?"bg-style-"+t:""},isShowUpdateBar(){return!this.updateBarConfig||!1!==this.updateBarConfig.showToArticle},showTitle(){return!this.$frontmatter.pageComponent},showRightMenu(){const{$frontmatter:t,$themeConfig:e,$page:s}=this,{sidebar:i}=t;return!1!==e.rightMenuBar&&s.headers&&!1!==(t&&i&&!1!==i)},pageComponent(){return!!this.$frontmatter.pageComponent&&this.$frontmatter.pageComponent.name},isShowSlotT(){return this.getShowStatus("pageTshowMode")},isShowSlotB(){return this.getShowStatus("pageBshowMode")}},methods:{getShowStatus(t){const{htmlModules:e}=this.$themeConfig;return!!e&&("article"===e[t]?this.isArticle():"custom"!==e[t]||!this.isArticle())},isArticle(){return!1!==this.$frontmatter.article}}},st=(s(357),Object(r.a)(et,(function(){var t=this,e=t._self._c;return e("div",[e("main",{staticClass:"page"},[e("div",{class:"theme-vdoing-wrapper "+t.bgStyle},[t.isArticle()?e("ArticleInfo"):e("div",{staticClass:"placeholder"}),t._v(" "),t.pageComponent?e(t.pageComponent,{tag:"component",staticClass:"theme-vdoing-content"}):t._e(),t._v(" "),e("div",{staticClass:"content-wrapper"},[t.showRightMenu?e("RightMenu"):t._e(),t._v(" "),t.showTitle?e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v(t._s(this.$page.title)),t.$frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(t.$frontmatter.titleTag))]):t._e()]):t._e(),t._v(" "),t.isShowSlotT?t._t("top"):t._e(),t._v(" "),e("Content",{staticClass:"theme-vdoing-content"})],2),t._v(" "),t.isShowSlotB?t._t("bottom"):t._e(),t._v(" "),e("PageEdit"),t._v(" "),e("PageNav",t._b({},"PageNav",{sidebarItems:t.sidebarItems},!1))],2),t._v(" "),t.isShowUpdateBar?e("UpdateArticle",{attrs:{length:3,moreArticle:t.updateBarConfig&&t.updateBarConfig.moreArticle}}):t._e()],1)])}),[],!1,null,null,null).exports),it={data:()=>({category:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:u,PostList:d,Pagination:v,CategoriesBar:y},mounted(){const t=this.$route.query.category;t?(this.category=t,this.total=this.$groupPosts.categories[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p));const e=document.querySelector(".categories");e&&setTimeout(()=>{const t=e.querySelector(".active"),s=t?t.offsetTop:0;e.scrollTo({top:s,behavior:"smooth"})},300)},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.category"(t){this.category=t?decodeURIComponent(t):"",this.category?this.total=this.$groupPosts.categories[this.category].length:this.total=this.$sortPosts.length,this.currentPage=1}}},at=(s(358),Object(r.a)(it,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page categories-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,category:t.category}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),rt={data:()=>({tag:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:u,PostList:d,Pagination:v,TagsBar:w},mounted(){const t=this.$route.query.tag;t?(this.tag=t,this.total=this.$groupPosts.tags[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p))},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.tag"(t){this.tag=t?decodeURIComponent(t):"",this.tag?this.total=this.$groupPosts.tags[this.tag].length:this.total=this.$sortPosts.length,this.currentPage=1}}},nt=(s(359),Object(r.a)(rt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page tags-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,tag:t.tag}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),ot=s(66),lt=s.n(ot),ct={mixins:[tt],data:()=>({postsList:[],countByYear:{},perPage:80,currentPage:1}),created(){this.getPageData();const{$sortPostsByDate:t,countByYear:e}=this;for(let s=0;s{if(this.postsList.lengthi&&s+i>=a-250&&this.loadmore()}},200))},methods:{getPageData(){const t=this.currentPage,e=this.perPage;this.postsList=this.postsList.concat(this.$sortPostsByDate.slice((t-1)*e,t*e))},loadmore(){this.currentPage=this.currentPage+1,this.getPageData()},getYear(t){const e=this.postsList[t];if(!e)return;const{frontmatter:{date:s}}=e;return s&&"string"===Object(i.n)(s)?s.slice(0,4):void 0},getDate(t){const{frontmatter:{date:e}}=t;if(e&&"string"===Object(i.n)(e))return e.slice(5,10)}}},ht=(s(360),Object(r.a)(ct,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page archives-page"},[e("div",{staticClass:"theme-vdoing-wrapper"},[e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v("\n "+t._s(t.$page.title)+"\n ")]),t._v(" "),e("div",{staticClass:"count"},[t._v("\n 总共 "),e("i",[t._v(t._s(t.$sortPostsByDate.length))]),t._v(" 篇文章\n ")]),t._v(" "),e("ul",[t._l(t.postsList,(function(s,i){return[(t.year=t.getYear(i))!==t.getYear(i-1)?e("li",{key:i+t.$sortPostsByDate.length,staticClass:"year"},[e("h2",[t._v("\n "+t._s(t.year)+"\n "),e("span",[e("i",[t._v(t._s(t.countByYear[t.year]))]),t._v(" 篇\n ")])])]):t._e(),t._v(" "),e("li",{key:i},[e("router-link",{attrs:{to:s.path}},[e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))]),t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])],1)]}))],2)])])}),[],!1,null,null,null).exports),ut={name:"Sidebar",components:{SidebarLinks:s(329).default,NavLinks:I},props:["items"],computed:{blogger(){return this.$themeConfig.blogger}}},gt=(s(363),Object(r.a)(ut,(function(){var t=this._self._c;return t("aside",{staticClass:"sidebar"},[this._m(0),this._v(" "),t("NavLinks"),this._v(" "),this._t("top"),this._v(" "),t("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[function(){var t=this._self._c;return t("div",{staticStyle:{"margin-top":"0.8em","margin-left":"1.2em"}},[t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://pure-admin-utils.netlify.app/",target:"_blank"}},[this._v("@pureadmin/utils文档 📕")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1kg411v7QT/",target:"_blank"}},[this._v("平台快速开发教程 📺")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px","margin-bottom":"4px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1Rx4y1U7Mv/",target:"_blank"}},[this._v("平台页面、功能演示 📺")]),this._v(" "),t("a",{staticClass:"pure-video",staticStyle:{background:"var(--videoBgColor)",padding:"8px","border-radius":"6px",color:"var(--videoTextColor)"},attrs:{href:"https://www.bilibili.com/video/BV1Wr421F7oj/",target:"_blank"}},[this._v("迁移JS版本教程 📺")])])}],!1,null,null,null).exports),dt=s(321);var pt={data:()=>({threshold:100,scrollTop:null,showCommentBut:!1,commentTop:null,currentMode:"",showModeBox:!1,modeList:[{name:"跟随系统",icon:"icon-zidong",KEY:"auto"},{name:"浅色模式",icon:"icon-rijianmoshi",KEY:"light"},{name:"深色模式",icon:"icon-yejianmoshi",KEY:"dark"},{name:"阅读模式",icon:"icon-yuedu",KEY:"read"}],_scrollTimer:null,_textareaEl:null,_recordScrollTop:null,COMMENT_SELECTOR_1:"#vuepress-plugin-comment",COMMENT_SELECTOR_2:"#valine-vuepress-comment",COMMENT_SELECTOR_3:".vssue"}),mounted(){if(this.currentMode=dt.a.get("mode")||this.$themeConfig.defaultMode||"auto",this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",lt()(()=>{this.scrollTop=this.getScrollTop()},100)),window.addEventListener("load",()=>{this.getCommentTop()}),document.documentElement.clientWidth<719){this.$refs.modeBox.onclick=()=>{this.showModeBox=!1},window.addEventListener("scroll",lt()(()=>{this.showModeBox&&(this.showModeBox=!1)},100))}const t=document.querySelectorAll(".buttons .button");for(let e=0;e{s.classList.remove("hover")},150)}))}},computed:{showToTop(){return this.scrollTop>this.threshold}},methods:{toggleMode(t){this.currentMode=t,this.$emit("toggle-theme-mode",t)},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0},getCommentTop(){setTimeout(()=>{let t=document.querySelector(this.COMMENT_SELECTOR_1)||document.querySelector(this.COMMENT_SELECTOR_2)||document.querySelector(this.COMMENT_SELECTOR_3);t&&(this.showCommentBut=!1!==this.$frontmatter.comment&&!0!==this.$frontmatter.home,this.commentTop=t.offsetTop-58)},500)},scrollToComment(){window.scrollTo({top:this.commentTop,behavior:"smooth"}),this._textareaEl=document.querySelector(this.COMMENT_SELECTOR_1+" textarea")||document.querySelector(this.COMMENT_SELECTOR_2+" input")||document.querySelector(this.COMMENT_SELECTOR_3+" textarea"),this._textareaEl&&this.getScrollTop()!==this._recordScrollTop?document.addEventListener("scroll",this._handleListener):this._textareaEl&&this.getScrollTop()===this._recordScrollTop&&this._handleFocus()},_handleListener(){clearTimeout(this._scrollTimer),this._scrollTimer=setTimeout(()=>{document.removeEventListener("scroll",this._handleListener),this._recordScrollTop=this.getScrollTop(),this._handleFocus()},30)},_handleFocus(){this._textareaEl.focus(),this._textareaEl.classList.add("yellowBorder"),setTimeout(()=>{this._textareaEl.classList.remove("yellowBorder")},500)}},watch:{"$route.path"(){this.showCommentBut=!1,this.getCommentTop()}}},mt=(s(364),Object(r.a)(pt,(function(){var t=this._self._c;return t("div",{staticClass:"buttons"},[t("transition",{attrs:{name:"fade"}},[t("div",{directives:[{name:"show",rawName:"v-show",value:this.showToTop,expression:"showToTop"}],staticClass:"button blur go-to-top iconfont icon-fanhuidingbu",attrs:{title:"返回顶部"},on:{click:this.scrollToTop}})]),this._v(" "),t("div",{directives:[{name:"show",rawName:"v-show",value:this.showCommentBut,expression:"showCommentBut"}],staticClass:"button blur go-to-comment iconfont icon-pinglun",attrs:{title:"去评论"},on:{click:this.scrollToComment}})],1)}),[],!1,null,null,null).exports),ft={data:()=>({stars:"17k",forks:"3.2k"}),computed:{social(){return this.$themeConfig.social},footer(){return this.$themeConfig.footer}}},vt=(s(365),Object(r.a)(ft,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"footer"},[t.social&&t.social.icons?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(t,s){return e("a",{key:s,class:["iconfont",t.iconClass],attrs:{href:t.link,title:t.title,target:"_blank"}})})),0):t._e(),t._v(" "),e("div",{staticStyle:{display:"flex","justify-content":"center","margin-bottom":"6px"}},[e("div",{staticClass:"no-zoom",attrs:{title:"GitHub stars"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"72",height:"20"}},[e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"72",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"37",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"37",width:"35",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"72",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin"}},[e("rect",{attrs:{width:"37",x:"0",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"195",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"270"}},[t._v("stars")]),e("text",{attrs:{x:"195",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"270"}},[t._v("stars")])]),e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/stargazers"}},[e("rect",{attrs:{width:"35",x:"37",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"535",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"250"}},[t._v(t._s(t.stars))]),e("text",{attrs:{x:"535",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"250"}},[t._v(t._s(t.stars))])])])],1)]),t._v(" "),e("div",{staticClass:"no-zoom",staticStyle:{"margin-left":"6px"},attrs:{title:"GitHub forks"}},[e("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"68",height:"20"}},[e("linearGradient",{attrs:{id:"s",x2:"0",y2:"100%"}},[e("stop",{attrs:{offset:"0","stop-color":"#bbb","stop-opacity":".1"}}),t._v(" "),e("stop",{attrs:{offset:"1","stop-opacity":".1"}})],1),t._v(" "),e("clipPath",{attrs:{id:"r"}},[e("rect",{attrs:{width:"68",height:"20",rx:"3",fill:"#fff"}})]),t._v(" "),e("g",{attrs:{"clip-path":"url(#r)"}},[e("rect",{attrs:{width:"37",height:"20",fill:"#555"}}),t._v(" "),e("rect",{attrs:{x:"37",width:"31",height:"20",fill:"#426feb"}}),t._v(" "),e("rect",{attrs:{width:"68",height:"20",fill:"url(#s)"}})]),t._v(" "),e("g",{attrs:{fill:"#fff","text-anchor":"middle","font-family":"Verdana,Geneva,DejaVu Sans,sans-serif","text-rendering":"geometricPrecision","font-size":"110"}},[e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/fork"}},[e("rect",{attrs:{width:"37",x:"0",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"195",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"270"}},[t._v("forks")]),e("text",{attrs:{x:"195",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"270"}},[t._v("forks")])]),e("a",{attrs:{target:"_blank","xlink:href":"https://github.com/pure-admin/vue-pure-admin/network"}},[e("rect",{attrs:{width:"31",x:"37",height:"20",fill:"rgba(0,0,0,0)"}}),e("text",{attrs:{"aria-hidden":"true",x:"515",y:"150",fill:"#010101","fill-opacity":".3",transform:"scale(.1)",textLength:"210"}},[t._v(t._s(t.forks))]),e("text",{attrs:{x:"515",y:"140",transform:"scale(.1)",fill:"#fff",textLength:"210"}},[t._v(t._s(t.forks))])])])],1)])]),t._v(" "),e("div",[t._v("\n Theme by\n "),e("a",{attrs:{href:"https://github.com/xugaoyi/vuepress-theme-vdoing",target:"_blank",title:"本站主题"}},[t._v("Vdoing")]),t._v(" "),t.footer?[t._v("\n | Copyright © "+t._s(t.footer.createYear)+"-"+t._s((new Date).getFullYear())+"\n "),t._v(" "),e("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",title:"pure-admin"}},[t._v("\n pure-admin | MIT License\n ")])]:t._e()],2)])}),[],!1,null,null,null).exports),_t={data:()=>({bgImg:"",opacity:.5}),mounted(){let{bodyBgImg:t,bodyBgImgOpacity:e,bodyBgImgInterval:s=15}=this.$themeConfig;if("string"===Object(i.n)(t))this.bgImg=t;else if("array"===Object(i.n)(t)){let e=0,i=null;this.bgImg=t[e],clearInterval(i),i=setInterval(()=>{if(++e>=t.length&&(e=0),this.bgImg=t[e],t[e+1]){(new Image).src=t[e+1]}},1e3*s)}void 0!==e&&(this.opacity=e)}},bt=(s(366),Object(r.a)(_t,(function(){return(0,this._self._c)("div",{staticClass:"body-bg",style:`background: url(${this.bgImg}) center center / cover no-repeat;opacity:${this.opacity}`})}),[],!1,null,null,null).exports),Ct=s(367),yt=s.n(Ct);var xt={components:{Home:L,Navbar:O,Page:st,CategoriesPage:at,TagsPage:nt,ArchivesPage:ht,Sidebar:gt,Footer:vt,Buttons:mt,BodyBgImg:bt},data:()=>({hideNavbar:!1,isSidebarOpen:!0,showSidebar:!1,themeMode:"auto",showWindowLB:!0,showWindowRB:!0}),computed:{sidebarSlotTop(){return this.getHtmlStr("sidebarT")},sidebarSlotBottom(){return this.getHtmlStr("sidebarB")},pageSlotTop(){return this.getHtmlStr("pageT")},pageSlotBottom(){return this.getHtmlStr("pageB")},windowLB(){return this.getHtmlStr("windowLB")},windowRB(){return this.getHtmlStr("windowRB")},showRightMenu(){const{headers:t}=this.$page;return!this.$frontmatter.home&&!1!==this.$themeConfig.rightMenuBar&&t&&t.length&&!1!==this.$frontmatter.sidebar},shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length&&!1!==t.showSidebar},sidebarItems(){return Object(i.m)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"hide-navbar":this.hideNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar,"have-rightmenu":this.showRightMenu,"have-body-img":this.$themeConfig.bodyBgImg,"only-sidebarItem":1===this.sidebarItems.length&&"page"===this.sidebarItems[0].type},t]}},created(){const t=this.$themeConfig.sidebarOpen;!1===t&&(this.isSidebarOpen=t)},beforeMount(){this.isSidebarOpenOfclientWidth();const t=dt.a.get("mode"),{defaultMode:e}=this.$themeConfig;e&&"auto"!==e&&!t?this.themeMode=e:t&&"auto"!==t&&"auto"!==e?this.themeMode=t:this._autoMode(),this.setBodyClass();const s=this.$themeConfig.social;if(s&&s.iconfontCssFile){let t=document.createElement("link");t.setAttribute("rel","stylesheet"),t.setAttribute("type","text/css"),t.setAttribute("href",s.iconfontCssFile),document.head.appendChild(t)}},mounted(){const t=document.location.hash;if(t.length>1){const e=decodeURIComponent(t.substring(1)),s=document.getElementById(e);s&&s.scrollIntoView()}this.showSidebar=!0,this.$router.afterEach(()=>{this.isSidebarOpenOfclientWidth()});let e=0,s=0;window.addEventListener("scroll",yt.a.throttle(()=>{this.isSidebarOpen||(e=this.getScrollTop(),this.hideNavbar=s58,setTimeout(()=>{s=e},0))},300))},watch:{isSidebarOpen(){this.isSidebarOpen&&(this.hideNavbar=!1)},themeMode(){this.setBodyClass()}},methods:{getHtmlStr(t){const{htmlModules:e}=this.$themeConfig;return e?e[t]:""},setBodyClass(){let{pageStyle:t="card",bodyBgImg:e}=this.$themeConfig;("card"!==t&&"line"!==t||e)&&(t="card"),document.body.className=`theme-mode-${this.themeMode} theme-style-${t}`},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,isSidebarOpenOfclientWidth(){document.documentElement.clientWidth<719&&(this.isSidebarOpen=!1)},toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},_autoMode(){window.matchMedia("(prefers-color-scheme: dark)").matches?this.themeMode="dark":this.themeMode="light"},toggleThemeMode(t){"auto"===t?this._autoMode():this.themeMode=t,dt.a.set("mode",t)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},wt=(s(368),Object(r.a)(xt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),!1!==t.$themeConfig.sidebarHoverTriggerOpen?e("div",{staticClass:"sidebar-hover-trigger"}):t._e(),t._v(" "),e("Sidebar",{directives:[{name:"show",rawName:"v-show",value:t.showSidebar,expression:"showSidebar"}],attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([t.sidebarSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-top",domProps:{innerHTML:t._s(t.sidebarSlotTop)}})]},proxy:!0}:null,t.sidebarSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-bottom",domProps:{innerHTML:t._s(t.sidebarSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):t.$page.frontmatter.categoriesPage?e("CategoriesPage"):t.$page.frontmatter.tagsPage?e("TagsPage"):t.$page.frontmatter.archivesPage?e("ArchivesPage"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([t.pageSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"page-slot page-slot-top",domProps:{innerHTML:t._s(t.pageSlotTop)}})]},proxy:!0}:null,t.pageSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"page-slot page-slot-bottom",domProps:{innerHTML:t._s(t.pageSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),e("Footer"),t._v(" "),e("Buttons",{ref:"buttons",on:{"toggle-theme-mode":t.toggleThemeMode}}),t._v(" "),t.$themeConfig.bodyBgImg?e("BodyBgImg"):t._e()],1)}),[],!1,null,null,null));e.default=wt.exports}}]); \ No newline at end of file diff --git a/assets/js/20.a83df728.js b/assets/js/20.33d83ac5.js similarity index 99% rename from assets/js/20.a83df728.js rename to assets/js/20.33d83ac5.js index bd192571..80ee05ba 100644 --- a/assets/js/20.a83df728.js +++ b/assets/js/20.33d83ac5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{375:function(s,t,a){s.exports=a.p+"assets/img/logo.6ef36726.jpg"},376:function(s,t){s.exports="data:image/jpeg;base64,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"},532:function(s,t,a){"use strict";a.r(t);var n=a(8),e=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h2",{attrs:{id:"logo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#logo"}},[s._v("#")]),s._v(" logo")]),s._v(" "),t("p",[s._v("下图左上角箭头所指处就是平台的 "),t("code",[s._v("logo")])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(375),loading:"lazy"}})]),s._v(" "),t("p",[s._v("为了保持 "),t("code",[s._v("logo")]),s._v(" 的高保真,平台采用 "),t("code",[s._v("svg")]),s._v(" 作为 "),t("code",[s._v("logo")]),s._v(" 格式。自定义 "),t("code",[s._v("logo")]),s._v(" ,只需修改下图 "),t("code",[s._v("logo.svg")]),s._v(" 文件即可")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(376),loading:"lazy"}})]),s._v(" "),t("p",[s._v("当然也可以自定义 "),t("code",[s._v("logo")]),s._v(" 格式。比如需要 "),t("code",[s._v("png")]),s._v(" 的图片,只需要把上图中 "),t("code",[s._v("logo.svg")]),s._v(" 换成所需的 "),t("code",[s._v("logo.png")]),s._v(" ,然后来到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/layout/hooks/useNav.ts#L147",target:"_blank",rel:"noopener noreferrer"}},[s._v("layout/hooks/useNav.ts"),t("OutboundLink")],1),s._v(" ,把 "),t("code",[s._v('"/logo.svg"')]),s._v(" 改成 "),t("code",[s._v('"/logo.png"')]),s._v(" 即可")]),s._v(" "),t("h2",{attrs:{id:"环境变量"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#环境变量"}},[s._v("#")]),s._v(" 环境变量")]),s._v(" "),t("h3",{attrs:{id:"配置文件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[s._v("#")]),s._v(" 配置文件")]),s._v(" "),t("p",[s._v("一共 "),t("code",[s._v("四")]),s._v(" 个配置文件,都在平台根目录下,具体如下")]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("├── .env # 基础环境变量配置文件(优先级最低)\n├── .env.development # 开发环境变量配置文件\n├── .env.production # 生产环境变量配置文件\n├── .env.staging # 预发布环境变量配置文件\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("h3",{attrs:{id:"具体配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#具体配置"}},[s._v("#")]),s._v(" 具体配置")]),s._v(" "),t("p",[s._v("平台内置 "),t("code",[s._v("六")]),s._v(" 个环境变量,具体如下")]),s._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 平台本地运行端口号")]),s._v("\nVITE_PORT "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 平台打包路径")]),s._v("\nVITE_PUBLIC_PATH "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 平台路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数")')]),s._v("\nVITE_ROUTER_HISTORY "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hash"')]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否在打包时使用cdn替换本地库 替换 true 不替换 false")]),s._v("\nVITE_CDN "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件)")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),s._v("\nVITE_COMPRESSION "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"none"')]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置)")]),s._v("\nVITE_HIDE_HOME "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])]),t("h3",{attrs:{id:"基础用法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[s._v("#")]),s._v(" 基础用法")]),s._v(" "),t("p",[t("a",{attrs:{href:"https://cn.vitejs.dev/guide/env-and-mode.html#env-files",target:"_blank",rel:"noopener noreferrer"}},[s._v(".env 文件"),t("OutboundLink")],1),s._v(" "),t("Badge",{attrs:{text:"vite文档"}})],1),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_PUBLIC_PATH")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("meta"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"当前环境变量VITE_PUBLIC_PATH为:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_PUBLIC_PATH")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("知识点:如何在 .vue 或 .ts 文件中判断当前是开发环境还是生产环境?")]),s._v(" "),t("p",[s._v("打印 "),t("code",[s._v("process.env.NODE_ENV")]),s._v(",值为 "),t("code",[s._v("development")]),s._v(" 代表是开发环境,值为 "),t("code",[s._v("production")]),s._v(" 代表是生产环境")])]),s._v(" "),t("h3",{attrs:{id:"如何添加自定义配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置"}},[s._v("#")]),s._v(" 如何添加自定义配置")]),s._v(" "),t("p",[s._v("比如要在 "),t("code",[s._v(".env.production")]),s._v(" 文件添加自定义配置 "),t("code",[s._v("VITE_HANDSOME = true")]),s._v(",作为一种规范推荐使用 "),t("code",[s._v("VITE_")]),s._v(" 作为自定义配置前缀")]),s._v(" "),t("p",[s._v("① 在 "),t("code",[s._v(".env.production")]),s._v(" 中加入 "),t("code",[s._v("VITE_HANDSOME = true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 自定义配置")]),s._v("\nVITE_HANDSOME "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("② 加入类型支持,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/types/global.d.ts#L66",target:"_blank",rel:"noopener noreferrer"}},[s._v("interface ViteEnv"),t("OutboundLink")],1),s._v(" 里加上 "),t("code",[s._v("VITE_HANDSOME: boolean")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ViteEnv")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_HANDSOME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[s._v("③ 设置默认值,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/utils.ts#L53",target:"_blank",rel:"noopener noreferrer"}},[s._v("build/utils.ts"),t("OutboundLink")],1),s._v(" 文件的 "),t("code",[s._v("ret")]),s._v(" 变量上加上 "),t("code",[s._v("VITE_HANDSOME: true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ret"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ViteEnv "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_HANDSOME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h2",{attrs:{id:"platform-config-json"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#platform-config-json"}},[s._v("#")]),s._v(" "),t("code",[s._v("platform-config.json")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/public/platform-config.json",target:"_blank",rel:"noopener noreferrer"}},[s._v("platform-config.json"),t("OutboundLink")],1),s._v(" 配置文件在任何环境下修改都可生效")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.9.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台版本号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Title"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PureAdmin"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台标题")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"FixedHeader"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否固定页头和标签页(true 内容区超出出现纵向滚动条 false 页头、标签页、内容区可纵向滚动)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HiddenSideBar"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 隐藏菜单和页头,只显示标签页和内容区")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MultiTagsCache"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启持久化标签 (会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"KeepAlive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启组件缓存(此处不同于路由的 keepAlive,如果此处为 true 表示设置路由的 keepAlive 起效,反之设置 false 屏蔽平台整体的 keepAlive,即使路由设置了keepAlive 也不再起作用)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Locale"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"zh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 默认国际化语言 (zh 中文、en 英文)(会缓存)(max版本额外配置:tw 繁體中文、ja 日语、ko 韩语)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Layout"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vertical"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 导航菜单模式 (vertical 左侧菜单模式、horizontal 顶部菜单模式、mix 混合菜单模式)(会缓存)(max版本额外配置:double 左侧双栏菜单模式)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Theme"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 主题模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"DarkMode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启暗黑模式 (会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"OverallStyle"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 整体风格(浅色:light、深色:dark、自动:system)(会缓存)更多详情看 https://github.com/pure-admin/vue-pure-admin/commit/dd783136229da9e291b518df93227111f4216ad0#commitcomment-137027417")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Grey"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 灰色模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Weak"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 色弱模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HideTabs"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否隐藏标签页(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HideFooter"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否隐藏页脚(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"SidebarStatus"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// vertical左侧菜单模式模式下侧边栏状态(true 展开、false 收起)(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"EpThemeColor"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#409EFF"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 主题色(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ShowLogo"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否显示logo(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ShowModel"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"smart"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 标签页风格(smart 灵动模式、card 卡片模式)(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MenuArrowIconNoTransition"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 菜单展开、收起图标是否开启动画,如遇菜单展开、收起卡顿设置成 true 即可(默认 false,开启动画)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"CachingAsyncRoutes"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启动态路由缓存本地的全局配置,默认 false")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"TooltipEffect"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 可配置平台主体所有 el-tooltip 的 effect 属性,默认 light,不会影响业务代码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ResponsiveStorageNameSpace"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"responsive-"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 本地响应式存储的命名空间")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MenuSearchHistory"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 菜单搜索历史的最大条目")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),t("p",[s._v("开发、生产环境修改都可生效,上面 "),t("code",[s._v("platform-config.json")]),s._v(" 文件标记 "),t("code",[s._v("会缓存")]),s._v(" 即配置会缓存在本地浏览器,应先清空浏览器缓存才能生效")])]),s._v(" "),t("h3",{attrs:{id:"基础用法-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#基础用法-2"}},[s._v("#")]),s._v(" 基础用法")]),s._v(" "),t("p",[s._v("平台将 "),t("code",[s._v("platform-config.json")]),s._v(" 中所有配置都已经注册到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/config/index.ts#L31",target:"_blank",rel:"noopener noreferrer"}},[s._v("$config"),t("OutboundLink")],1),s._v(" 这个全局属性对象上,应用内所有组件实例都可访问 "),t("a",{attrs:{href:"https://cn.vuejs.org/api/application.html#app-config-globalproperties",target:"_blank",rel:"noopener noreferrer"}},[s._v("globalproperties"),t("OutboundLink")],1)]),s._v(" "),t("h4",{attrs:{id:"vue-文件中使用-setup-语法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-setup-语法"}},[s._v("#")]),s._v(" "),t("code",[s._v(".vue")]),s._v(" 文件中使用("),t("code",[s._v("setup")]),s._v(" 语法)")]),s._v(" "),t("div",{staticClass:"language-Vue line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-vue"}},[t("code",[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("setup")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("lang")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[t("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')]),s._v("ts"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')])]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),t("span",{pre:!0,attrs:{class:"token script"}},[t("span",{pre:!0,attrs:{class:"token language-javascript"}},[s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" getCurrentInstance "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" Version "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("getCurrentInstance")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("appContext"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("config"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("globalProperties"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("$config"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nconsole"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Version:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])]),t("h4",{attrs:{id:"vue-文件中使用-非-setup-语法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-非-setup-语法"}},[s._v("#")]),s._v(" "),t("code",[s._v(".vue")]),s._v(" 文件中使用(非 "),t("code",[s._v("setup")]),s._v(" 语法)")]),s._v(" "),t("div",{staticClass:"language-Vue line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-vue"}},[t("code",[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("lang")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[t("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')]),s._v("ts"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')])]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),t("span",{pre:!0,attrs:{class:"token script"}},[t("span",{pre:!0,attrs:{class:"token language-javascript"}},[s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("defineComponent")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("computed")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("currentConfig")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("$config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br")])]),t("h4",{attrs:{id:"ts-或-vue-中使用"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ts-或-vue-中使用"}},[s._v("#")]),s._v(" "),t("code",[s._v(".ts")]),s._v(" 或 "),t("code",[s._v(".vue")]),s._v(" 中使用")]),s._v(" "),t("p",[s._v("具体实现代码位置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/config/index.ts#L11",target:"_blank",rel:"noopener noreferrer"}},[s._v("config/index.ts"),t("OutboundLink")],1)]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" getConfig "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@/config"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Version:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("getConfig")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h3",{attrs:{id:"如何添加自定义配置-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置-2"}},[s._v("#")]),s._v(" 如何添加自定义配置")]),s._v(" "),t("p",[s._v("比如要添加的自定义配置为 "),t("code",[s._v("Handsome: true")])]),s._v(" "),t("p",[s._v("① 在 "),t("code",[s._v("platform-config.json")]),s._v(" 中加入 "),t("code",[s._v("Handsome: true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Handsome"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 自定义配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[s._v("② 加入类型支持,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/types/global.d.ts#L84",target:"_blank",rel:"noopener noreferrer"}},[s._v("interface PlatformConfigs"),t("OutboundLink")],1),s._v(" 里加上 "),t("code",[s._v("Handsome?: boolean")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PlatformConfigs")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n Handsome"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 根据实际类型编写")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h2",{attrs:{id:"package-json"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#package-json"}},[s._v("#")]),s._v(" "),t("code",[s._v("package.json")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/package.json#L6-L23",target:"_blank",rel:"noopener noreferrer"}},[s._v("package.json"),t("OutboundLink")],1),s._v(" 文件中的 "),t("code",[s._v("scripts")]),s._v(" 配置中存放平台的各种命令,具体如下")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dev"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NODE_OPTIONS=--max-old-space-size=4096 vite"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 启动平台")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"serve"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm dev"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 启动平台(有人喜欢dev、有人喜欢serve)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台(rimraf 包的作用:以包的形式包装rm -rf命令,用来删除文件和文件夹的,不管文件夹是否为空,都可删除)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build:staging"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && vite build --mode staging"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台(预发布环境)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"report"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && vite build"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台并生产平台包文件大小图形化分析")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preview"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vite preview"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 预览平台,需先打包(无需安装live-server等工具,vite自带预览功能)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preview:build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm build && vite preview"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包并预览平台(无需安装live-server等工具,vite自带预览功能)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typecheck"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --noEmit && vue-tsc --noEmit --skipLibCheck"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 使用vue-tsc工具对指定的.ts、.tsx、.vue文件进行类型校验")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"svgo"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"svgo -f . -r"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 压缩当前目录下的所有SVG文件,更多详情看 https://github.com/pure-admin/vue-pure-admin/commit/a114dbb4652d6316853d75ff127180fc07d07d2b#commitcomment-136451628")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cloc"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台文件、语言分析")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clean:cache"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf .eslintcache && rimraf pnpm-lock.yaml && rimraf node_modules && pnpm store prune && pnpm install"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 删除pnpm-lock.yaml、node_modules、清除eslint和pnpm缓存并重新安装平台依赖")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:eslint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eslint --cache --max-warnings 0 \\"{src,mock,build}/**/*.{vue,js,ts,tsx}\\" --fix"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// eslint修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:prettier"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prettier --write \\"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\\""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// prettier格式化")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:stylelint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stylelint --cache --fix \\"**/*.{html,vue,css,scss}\\" --cache-location node_modules/.cache/stylelint/"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// stylelint格式化修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台整体lint格式化并修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prepare"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"husky"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 自动生成husky(https://typicode.github.io/husky/#/)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preinstall"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"npx only-allow pnpm"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 只允许运行pnpm命令,如果您换成yarn、npm需要把这行删除(https://pnpm.io/zh/only-allow-pnpm)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{382:function(s,t,a){s.exports=a.p+"assets/img/logo.6ef36726.jpg"},383:function(s,t){s.exports="data:image/jpeg;base64,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"},533:function(s,t,a){"use strict";a.r(t);var n=a(8),e=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h2",{attrs:{id:"logo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#logo"}},[s._v("#")]),s._v(" logo")]),s._v(" "),t("p",[s._v("下图左上角箭头所指处就是平台的 "),t("code",[s._v("logo")])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(382),loading:"lazy"}})]),s._v(" "),t("p",[s._v("为了保持 "),t("code",[s._v("logo")]),s._v(" 的高保真,平台采用 "),t("code",[s._v("svg")]),s._v(" 作为 "),t("code",[s._v("logo")]),s._v(" 格式。自定义 "),t("code",[s._v("logo")]),s._v(" ,只需修改下图 "),t("code",[s._v("logo.svg")]),s._v(" 文件即可")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(383),loading:"lazy"}})]),s._v(" "),t("p",[s._v("当然也可以自定义 "),t("code",[s._v("logo")]),s._v(" 格式。比如需要 "),t("code",[s._v("png")]),s._v(" 的图片,只需要把上图中 "),t("code",[s._v("logo.svg")]),s._v(" 换成所需的 "),t("code",[s._v("logo.png")]),s._v(" ,然后来到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/layout/hooks/useNav.ts#L147",target:"_blank",rel:"noopener noreferrer"}},[s._v("layout/hooks/useNav.ts"),t("OutboundLink")],1),s._v(" ,把 "),t("code",[s._v('"/logo.svg"')]),s._v(" 改成 "),t("code",[s._v('"/logo.png"')]),s._v(" 即可")]),s._v(" "),t("h2",{attrs:{id:"环境变量"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#环境变量"}},[s._v("#")]),s._v(" 环境变量")]),s._v(" "),t("h3",{attrs:{id:"配置文件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[s._v("#")]),s._v(" 配置文件")]),s._v(" "),t("p",[s._v("一共 "),t("code",[s._v("四")]),s._v(" 个配置文件,都在平台根目录下,具体如下")]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("├── .env # 基础环境变量配置文件(优先级最低)\n├── .env.development # 开发环境变量配置文件\n├── .env.production # 生产环境变量配置文件\n├── .env.staging # 预发布环境变量配置文件\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("h3",{attrs:{id:"具体配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#具体配置"}},[s._v("#")]),s._v(" 具体配置")]),s._v(" "),t("p",[s._v("平台内置 "),t("code",[s._v("六")]),s._v(" 个环境变量,具体如下")]),s._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 平台本地运行端口号")]),s._v("\nVITE_PORT "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8848")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 平台打包路径")]),s._v("\nVITE_PUBLIC_PATH "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" /\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 平台路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数")')]),s._v("\nVITE_ROUTER_HISTORY "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hash"')]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否在打包时使用cdn替换本地库 替换 true 不替换 false")]),s._v("\nVITE_CDN "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件)")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),s._v("\nVITE_COMPRESSION "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"none"')]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置)")]),s._v("\nVITE_HIDE_HOME "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br")])]),t("h3",{attrs:{id:"基础用法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[s._v("#")]),s._v(" 基础用法")]),s._v(" "),t("p",[t("a",{attrs:{href:"https://cn.vitejs.dev/guide/env-and-mode.html#env-files",target:"_blank",rel:"noopener noreferrer"}},[s._v(".env 文件"),t("OutboundLink")],1),s._v(" "),t("Badge",{attrs:{text:"vite文档"}})],1),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_PUBLIC_PATH")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("meta"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"当前环境变量VITE_PUBLIC_PATH为:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_PUBLIC_PATH")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("知识点:如何在 .vue 或 .ts 文件中判断当前是开发环境还是生产环境?")]),s._v(" "),t("p",[s._v("打印 "),t("code",[s._v("process.env.NODE_ENV")]),s._v(",值为 "),t("code",[s._v("development")]),s._v(" 代表是开发环境,值为 "),t("code",[s._v("production")]),s._v(" 代表是生产环境")])]),s._v(" "),t("h3",{attrs:{id:"如何添加自定义配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置"}},[s._v("#")]),s._v(" 如何添加自定义配置")]),s._v(" "),t("p",[s._v("比如要在 "),t("code",[s._v(".env.production")]),s._v(" 文件添加自定义配置 "),t("code",[s._v("VITE_HANDSOME = true")]),s._v(",作为一种规范推荐使用 "),t("code",[s._v("VITE_")]),s._v(" 作为自定义配置前缀")]),s._v(" "),t("p",[s._v("① 在 "),t("code",[s._v(".env.production")]),s._v(" 中加入 "),t("code",[s._v("VITE_HANDSOME = true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 自定义配置")]),s._v("\nVITE_HANDSOME "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("p",[s._v("② 加入类型支持,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/types/global.d.ts#L66",target:"_blank",rel:"noopener noreferrer"}},[s._v("interface ViteEnv"),t("OutboundLink")],1),s._v(" 里加上 "),t("code",[s._v("VITE_HANDSOME: boolean")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ViteEnv")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_HANDSOME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[s._v("③ 设置默认值,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/build/utils.ts#L53",target:"_blank",rel:"noopener noreferrer"}},[s._v("build/utils.ts"),t("OutboundLink")],1),s._v(" 文件的 "),t("code",[s._v("ret")]),s._v(" 变量上加上 "),t("code",[s._v("VITE_HANDSOME: true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ret"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ViteEnv "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VITE_HANDSOME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h2",{attrs:{id:"platform-config-json"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#platform-config-json"}},[s._v("#")]),s._v(" "),t("code",[s._v("platform-config.json")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/public/platform-config.json",target:"_blank",rel:"noopener noreferrer"}},[s._v("platform-config.json"),t("OutboundLink")],1),s._v(" 配置文件在任何环境下修改都可生效")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.9.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台版本号")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Title"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PureAdmin"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台标题")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"FixedHeader"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否固定页头和标签页(true 内容区超出出现纵向滚动条 false 页头、标签页、内容区可纵向滚动)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HiddenSideBar"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 隐藏菜单和页头,只显示标签页和内容区")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MultiTagsCache"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启持久化标签 (会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"KeepAlive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启组件缓存(此处不同于路由的 keepAlive,如果此处为 true 表示设置路由的 keepAlive 起效,反之设置 false 屏蔽平台整体的 keepAlive,即使路由设置了keepAlive 也不再起作用)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Locale"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"zh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 默认国际化语言 (zh 中文、en 英文)(会缓存)(max版本额外配置:tw 繁體中文、ja 日语、ko 韩语)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Layout"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vertical"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 导航菜单模式 (vertical 左侧菜单模式、horizontal 顶部菜单模式、mix 混合菜单模式)(会缓存)(max版本额外配置:double 左侧双栏菜单模式)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Theme"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 主题模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"DarkMode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启暗黑模式 (会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"OverallStyle"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 整体风格(浅色:light、深色:dark、自动:system)(会缓存)更多详情看 https://github.com/pure-admin/vue-pure-admin/commit/dd783136229da9e291b518df93227111f4216ad0#commitcomment-137027417")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Grey"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 灰色模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Weak"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 色弱模式(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HideTabs"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否隐藏标签页(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"HideFooter"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否隐藏页脚(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"SidebarStatus"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// vertical左侧菜单模式模式下侧边栏状态(true 展开、false 收起)(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"EpThemeColor"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#409EFF"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 主题色(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ShowLogo"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否显示logo(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ShowModel"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"smart"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 标签页风格(smart 灵动模式、card 卡片模式)(会缓存)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MenuArrowIconNoTransition"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 菜单展开、收起图标是否开启动画,如遇菜单展开、收起卡顿设置成 true 即可(默认 false,开启动画)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"CachingAsyncRoutes"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 是否开启动态路由缓存本地的全局配置,默认 false")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"TooltipEffect"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 可配置平台主体所有 el-tooltip 的 effect 属性,默认 light,不会影响业务代码")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ResponsiveStorageNameSpace"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"responsive-"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 本地响应式存储的命名空间")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"MenuSearchHistory"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 菜单搜索历史的最大条目")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),t("p",[s._v("开发、生产环境修改都可生效,上面 "),t("code",[s._v("platform-config.json")]),s._v(" 文件标记 "),t("code",[s._v("会缓存")]),s._v(" 即配置会缓存在本地浏览器,应先清空浏览器缓存才能生效")])]),s._v(" "),t("h3",{attrs:{id:"基础用法-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#基础用法-2"}},[s._v("#")]),s._v(" 基础用法")]),s._v(" "),t("p",[s._v("平台将 "),t("code",[s._v("platform-config.json")]),s._v(" 中所有配置都已经注册到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/config/index.ts#L31",target:"_blank",rel:"noopener noreferrer"}},[s._v("$config"),t("OutboundLink")],1),s._v(" 这个全局属性对象上,应用内所有组件实例都可访问 "),t("a",{attrs:{href:"https://cn.vuejs.org/api/application.html#app-config-globalproperties",target:"_blank",rel:"noopener noreferrer"}},[s._v("globalproperties"),t("OutboundLink")],1)]),s._v(" "),t("h4",{attrs:{id:"vue-文件中使用-setup-语法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-setup-语法"}},[s._v("#")]),s._v(" "),t("code",[s._v(".vue")]),s._v(" 文件中使用("),t("code",[s._v("setup")]),s._v(" 语法)")]),s._v(" "),t("div",{staticClass:"language-Vue line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-vue"}},[t("code",[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("setup")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("lang")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[t("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')]),s._v("ts"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')])]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),t("span",{pre:!0,attrs:{class:"token script"}},[t("span",{pre:!0,attrs:{class:"token language-javascript"}},[s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" getCurrentInstance "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" Version "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("getCurrentInstance")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("appContext"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("config"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("globalProperties"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("$config"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nconsole"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Version:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])]),t("h4",{attrs:{id:"vue-文件中使用-非-setup-语法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-非-setup-语法"}},[s._v("#")]),s._v(" "),t("code",[s._v(".vue")]),s._v(" 文件中使用(非 "),t("code",[s._v("setup")]),s._v(" 语法)")]),s._v(" "),t("div",{staticClass:"language-Vue line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-vue"}},[t("code",[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("lang")]),t("span",{pre:!0,attrs:{class:"token attr-value"}},[t("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')]),s._v("ts"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v('"')])]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),t("span",{pre:!0,attrs:{class:"token script"}},[t("span",{pre:!0,attrs:{class:"token language-javascript"}},[s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("defineComponent")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("computed")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("currentConfig")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("$config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token tag"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br")])]),t("h4",{attrs:{id:"ts-或-vue-中使用"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ts-或-vue-中使用"}},[s._v("#")]),s._v(" "),t("code",[s._v(".ts")]),s._v(" 或 "),t("code",[s._v(".vue")]),s._v(" 中使用")]),s._v(" "),t("p",[s._v("具体实现代码位置 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/config/index.ts#L11",target:"_blank",rel:"noopener noreferrer"}},[s._v("config/index.ts"),t("OutboundLink")],1)]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" getConfig "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@/config"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Version:"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("getConfig")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("Version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h3",{attrs:{id:"如何添加自定义配置-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置-2"}},[s._v("#")]),s._v(" 如何添加自定义配置")]),s._v(" "),t("p",[s._v("比如要添加的自定义配置为 "),t("code",[s._v("Handsome: true")])]),s._v(" "),t("p",[s._v("① 在 "),t("code",[s._v("platform-config.json")]),s._v(" 中加入 "),t("code",[s._v("Handsome: true")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Handsome"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 自定义配置")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("p",[s._v("② 加入类型支持,在 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/types/global.d.ts#L84",target:"_blank",rel:"noopener noreferrer"}},[s._v("interface PlatformConfigs"),t("OutboundLink")],1),s._v(" 里加上 "),t("code",[s._v("Handsome?: boolean")]),s._v(",具体如下")]),s._v(" "),t("div",{staticClass:"language-Ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PlatformConfigs")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n Handsome"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 根据实际类型编写")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h2",{attrs:{id:"package-json"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#package-json"}},[s._v("#")]),s._v(" "),t("code",[s._v("package.json")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/package.json#L6-L23",target:"_blank",rel:"noopener noreferrer"}},[s._v("package.json"),t("OutboundLink")],1),s._v(" 文件中的 "),t("code",[s._v("scripts")]),s._v(" 配置中存放平台的各种命令,具体如下")]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dev"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NODE_OPTIONS=--max-old-space-size=4096 vite"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 启动平台")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"serve"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm dev"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 启动平台(有人喜欢dev、有人喜欢serve)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台(rimraf 包的作用:以包的形式包装rm -rf命令,用来删除文件和文件夹的,不管文件夹是否为空,都可删除)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build:staging"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && vite build --mode staging"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台(预发布环境)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"report"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf dist && vite build"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包平台并生产平台包文件大小图形化分析")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preview"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vite preview"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 预览平台,需先打包(无需安装live-server等工具,vite自带预览功能)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preview:build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm build && vite preview"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 打包并预览平台(无需安装live-server等工具,vite自带预览功能)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typecheck"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --noEmit && vue-tsc --noEmit --skipLibCheck"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 使用vue-tsc工具对指定的.ts、.tsx、.vue文件进行类型校验")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"svgo"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"svgo -f . -r"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 压缩当前目录下的所有SVG文件,更多详情看 https://github.com/pure-admin/vue-pure-admin/commit/a114dbb4652d6316853d75ff127180fc07d07d2b#commitcomment-136451628")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cloc"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台文件、语言分析")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clean:cache"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rimraf .eslintcache && rimraf pnpm-lock.yaml && rimraf node_modules && pnpm store prune && pnpm install"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 删除pnpm-lock.yaml、node_modules、清除eslint和pnpm缓存并重新安装平台依赖")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:eslint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eslint --cache --max-warnings 0 \\"{src,mock,build}/**/*.{vue,js,ts,tsx}\\" --fix"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// eslint修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:prettier"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prettier --write \\"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\\""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// prettier格式化")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint:stylelint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stylelint --cache --fix \\"**/*.{html,vue,css,scss}\\" --cache-location node_modules/.cache/stylelint/"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// stylelint格式化修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lint"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 平台整体lint格式化并修复")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prepare"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"husky"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 自动生成husky(https://typicode.github.io/husky/#/)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"preinstall"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"npx only-allow pnpm"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 只允许运行pnpm命令,如果您换成yarn、npm需要把这行删除(https://pnpm.io/zh/only-allow-pnpm)")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/21.6e6562ba.js b/assets/js/21.9d4804e3.js similarity index 98% rename from assets/js/21.6e6562ba.js rename to assets/js/21.9d4804e3.js index 65b0cbff..3ec5e152 100644 --- a/assets/js/21.6e6562ba.js +++ b/assets/js/21.9d4804e3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{326:function(_,v,t){},520:function(_,v,t){"use strict";t(326)},558:function(_,v,t){"use strict";t.r(v);t(520);var e=t(8),r=Object(e.a)({},(function(){var _=this,v=_._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[v("h2",{attrs:{id:"解答微信群"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#解答微信群"}},[_._v("#")]),_._v(" 解答微信群")]),_._v(" "),v("p",[_._v("永久价格:"),v("code",[_._v("¥698/永久")])]),_._v(" "),v("p",[_._v("服务内容:在使用 "),v("a",{attrs:{href:"https://github.com/pure-admin",target:"_blank",rel:"noopener noreferrer"}},[_._v("pure-admin"),v("OutboundLink")],1),_._v(" 中所有项目时(包括 js 和 max 版本)遇到的问题、难点、疑惑都可在群内相互交流,我会在每天的空闲时间回复,也可以问非"),v("code",[_._v("pure-admin")]),_._v("的前端问题,我会在每天的空闲时间随机解答。群内交流活跃,技术氛围好,我会在当天回复大家提出的问题。")]),_._v(" "),v("p",[_._v("服务时间:"),v("code",[_._v("工作日 10:00 - 18:00")])]),_._v(" "),v("p",[_._v("限时活动:入群免费赠送 "),v("a",{attrs:{href:"https://pure-admin.cn/pages/js/",target:"_blank",rel:"noopener noreferrer"}},[v("code",[_._v("JS")]),_._v("版本"),v("OutboundLink")],1),_._v(" 与 "),v("a",{attrs:{href:"https://pure-admin.cn/pages/max/",target:"_blank",rel:"noopener noreferrer"}},[v("code",[_._v("Max")]),_._v("版本"),v("OutboundLink")],1)]),_._v(" "),v("p",[_._v("如何购买:加微信号 "),v("code",[_._v("pureadmin")]),_._v(" 或扫下方二维码,添加时请备注"),v("code",[_._v("付费微信群")]),_._v(",无备注会被忽略")]),_._v(" "),v("img",{attrs:{src:_.$withBase("/img/support/addWx.jpg"),width:"180px",height:"180px"}}),_._v(" "),v("div",{staticClass:"custom-block tip"},[v("p",{staticClass:"custom-block-title"},[_._v("视频教程(入群免费赠送)")]),_._v(" "),v("ol",[v("li",[v("code",[_._v("jsx")]),_._v(" 语法讲解,如何在 "),v("code",[_._v("pureadmin")]),_._v(" 中运用 "),v("code",[_._v("jsx")]),_._v("(视频时长 "),v("code",[_._v("20")]),_._v(" 分钟)")]),_._v(" "),v("li",[v("code",[_._v("tailwindcss")]),_._v(" 语法讲解,如何在 "),v("code",[_._v("pureadmin")]),_._v(" 中运用 "),v("code",[_._v("tailwindcss")]),_._v("(视频时长 "),v("code",[_._v("17")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("系统管理中的功能讲解,让您熟知如何使用并关联它们,彻底搞懂它们之间的业务逻辑(用户管理、角色管理、菜单管理、部门管理、字典管理、多租户管理)(视频时长 "),v("code",[_._v("36")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("如何将 "),v("code",[_._v("pureadmin")]),_._v(" 中的 "),v("code",[_._v("pnpm")]),_._v(" 包管理器切换到 "),v("code",[_._v("yarn")]),_._v(" 或者 "),v("code",[_._v("npm")]),_._v(" 包管理器,带您踩坑(视频时长 "),v("code",[_._v("43")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("了解 "),v("a",{attrs:{href:"https://bun.sh/",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 以及如何使用 "),v("a",{attrs:{href:"https://bun.sh/docs/cli/install",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 的包管理器作为 "),v("code",[_._v("pureadmin")]),_._v(" 的包管理器。使用 "),v("a",{attrs:{href:"https://bun.sh/docs/cli/install",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 安装项目依赖比 "),v("code",[_._v("pnpm")]),_._v(" 快数十倍且已经可以在 "),v("code",[_._v("pureadmin")]),_._v(" 中稳定使用!(视频时长 "),v("code",[_._v("38")]),_._v(" 分钟)")]),_._v(" "),v("li",[v("code",[_._v("pureadmin")]),_._v(" 中的 "),v("code",[_._v("cdn")]),_._v(" 模式详解,新的免费、快速、稳定的国内 "),v("code",[_._v("cdn")]),_._v(" 厂商集成详解,该厂商服务也支持在内网环境中自行集成!(视频时长 "),v("code",[_._v("60")]),_._v(" 分钟)")])])]),_._v(" "),v("div",{staticClass:"custom-block warning"},[v("p",{staticClass:"custom-block-title"},[_._v("温馨提示")]),_._v(" "),v("p",[_._v("本群仅限讨论前端、后端、"),v("code",[_._v("AI")]),_._v(" 等技术话题。请勿在群内谈论色情、赌博、毒品、"),v("code",[_._v("VPN")]),_._v("、谣言、政治等话题。"),v("br"),_._v("\n让我们共同维护一个纯粹的技术交流环境,保持积极、健康、充满活力的技术氛围 ❤️")])]),_._v(" "),v("h2",{attrs:{id:"页面定制开发-软件开发、项目外包"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#页面定制开发-软件开发、项目外包"}},[_._v("#")]),_._v(" 页面定制开发(软件开发、项目外包)")]),_._v(" "),v("p",{staticStyle:{color:"red"}},[_._v("外包项目排到了 2025-02-01,暂时不接外包了🙏,可预约时间 2025-03-01")]),_._v(" "),v("div",{staticClass:"bottom-content"},[v("p",[_._v("价格:根据页面数量、每页难度、开发周期进行合理定价"),v("br"),_._v("\n服务内容:软件开发过程中保证 "),v("code",[_._v("页面高还原度")]),_._v("、"),v("code",[_._v("代码高质量")]),_._v("、"),v("code",[_._v("全方位多次测试")]),v("br"),_._v("\n如何获得服务:加最上方作者微信备注 "),v("code",[_._v("软件开发")]),_._v(" 即可")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[v("strong",[_._v("开发范围")])]),_._v(" "),v("th",[v("strong",[_._v("范围种类")])])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("网站")]),_._v(" "),v("td",[_._v("后台系统、可视化大屏、企业宣传页、活动推广页等各种只要能在浏览器查看的都能开发")])]),_._v(" "),v("tr",[v("td",[v("code",[_._v("h5")]),_._v("页面")]),_._v(" "),v("td",[_._v("移动端网站、广告推广、电子商务等")])]),_._v(" "),v("tr",[v("td",[_._v("小程序")]),_._v(" "),v("td",[_._v("微信、支付宝、抖音、快手、京东小程序等")])]),_._v(" "),v("tr",[v("td",[_._v("移动应用程序")]),_._v(" "),v("td",[_._v("可安装到安卓"),v("code",[_._v("Android")]),_._v("和苹果"),v("code",[_._v("iOS")]),_._v("系统的手机"),v("code",[_._v("App")]),_._v("软件")])]),_._v(" "),v("tr",[v("td",[_._v("桌面应用程序")]),_._v(" "),v("td",[_._v("可安装到桌面操作系统(如"),v("code",[_._v("Windows")]),_._v("、"),v("code",[_._v("MacOS")]),_._v("、"),v("code",[_._v("Linux")]),_._v(")上的软件,可直接在电脑上运行")])])])])])])}),[],!1,null,"14fc59a0",null);v.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{326:function(_,v,t){},495:function(_,v,t){"use strict";t(326)},555:function(_,v,t){"use strict";t.r(v);t(495);var e=t(8),r=Object(e.a)({},(function(){var _=this,v=_._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[v("h2",{attrs:{id:"解答微信群"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#解答微信群"}},[_._v("#")]),_._v(" 解答微信群")]),_._v(" "),v("p",[_._v("永久价格:"),v("code",[_._v("¥698/永久")])]),_._v(" "),v("p",[_._v("服务内容:在使用 "),v("a",{attrs:{href:"https://github.com/pure-admin",target:"_blank",rel:"noopener noreferrer"}},[_._v("pure-admin"),v("OutboundLink")],1),_._v(" 中所有项目时(包括 js 和 max 版本)遇到的问题、难点、疑惑都可在群内相互交流,我会在每天的空闲时间回复,也可以问非"),v("code",[_._v("pure-admin")]),_._v("的前端问题,我会在每天的空闲时间随机解答。群内交流活跃,技术氛围好,我会在当天回复大家提出的问题。")]),_._v(" "),v("p",[_._v("服务时间:"),v("code",[_._v("工作日 10:00 - 18:00")])]),_._v(" "),v("p",[_._v("限时活动:入群免费赠送 "),v("a",{attrs:{href:"https://pure-admin.cn/pages/js/",target:"_blank",rel:"noopener noreferrer"}},[v("code",[_._v("JS")]),_._v("版本"),v("OutboundLink")],1),_._v(" 与 "),v("a",{attrs:{href:"https://pure-admin.cn/pages/max/",target:"_blank",rel:"noopener noreferrer"}},[v("code",[_._v("Max")]),_._v("版本"),v("OutboundLink")],1)]),_._v(" "),v("p",[_._v("如何购买:加微信号 "),v("code",[_._v("pureadmin")]),_._v(" 或扫下方二维码,添加时请备注"),v("code",[_._v("付费微信群")]),_._v(",无备注会被忽略")]),_._v(" "),v("img",{attrs:{src:_.$withBase("/img/support/addWx.jpg"),width:"180px",height:"180px"}}),_._v(" "),v("div",{staticClass:"custom-block tip"},[v("p",{staticClass:"custom-block-title"},[_._v("视频教程(入群免费赠送)")]),_._v(" "),v("ol",[v("li",[v("code",[_._v("jsx")]),_._v(" 语法讲解,如何在 "),v("code",[_._v("pureadmin")]),_._v(" 中运用 "),v("code",[_._v("jsx")]),_._v("(视频时长 "),v("code",[_._v("20")]),_._v(" 分钟)")]),_._v(" "),v("li",[v("code",[_._v("tailwindcss")]),_._v(" 语法讲解,如何在 "),v("code",[_._v("pureadmin")]),_._v(" 中运用 "),v("code",[_._v("tailwindcss")]),_._v("(视频时长 "),v("code",[_._v("17")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("系统管理中的功能讲解,让您熟知如何使用并关联它们,彻底搞懂它们之间的业务逻辑(用户管理、角色管理、菜单管理、部门管理、字典管理、多租户管理)(视频时长 "),v("code",[_._v("36")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("如何将 "),v("code",[_._v("pureadmin")]),_._v(" 中的 "),v("code",[_._v("pnpm")]),_._v(" 包管理器切换到 "),v("code",[_._v("yarn")]),_._v(" 或者 "),v("code",[_._v("npm")]),_._v(" 包管理器,带您踩坑(视频时长 "),v("code",[_._v("43")]),_._v(" 分钟)")]),_._v(" "),v("li",[_._v("了解 "),v("a",{attrs:{href:"https://bun.sh/",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 以及如何使用 "),v("a",{attrs:{href:"https://bun.sh/docs/cli/install",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 的包管理器作为 "),v("code",[_._v("pureadmin")]),_._v(" 的包管理器。使用 "),v("a",{attrs:{href:"https://bun.sh/docs/cli/install",target:"_blank",rel:"noopener noreferrer"}},[_._v("bun"),v("OutboundLink")],1),_._v(" 安装项目依赖比 "),v("code",[_._v("pnpm")]),_._v(" 快数十倍且已经可以在 "),v("code",[_._v("pureadmin")]),_._v(" 中稳定使用!(视频时长 "),v("code",[_._v("38")]),_._v(" 分钟)")]),_._v(" "),v("li",[v("code",[_._v("pureadmin")]),_._v(" 中的 "),v("code",[_._v("cdn")]),_._v(" 模式详解,新的免费、快速、稳定的国内 "),v("code",[_._v("cdn")]),_._v(" 厂商集成详解,该厂商服务也支持在内网环境中自行集成!(视频时长 "),v("code",[_._v("60")]),_._v(" 分钟)")])])]),_._v(" "),v("div",{staticClass:"custom-block warning"},[v("p",{staticClass:"custom-block-title"},[_._v("温馨提示")]),_._v(" "),v("p",[_._v("本群仅限讨论前端、后端、"),v("code",[_._v("AI")]),_._v(" 等技术话题。请勿在群内谈论色情、赌博、毒品、"),v("code",[_._v("VPN")]),_._v("、谣言、政治等话题。"),v("br"),_._v("\n让我们共同维护一个纯粹的技术交流环境,保持积极、健康、充满活力的技术氛围 ❤️")])]),_._v(" "),v("h2",{attrs:{id:"页面定制开发-软件开发、项目外包"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#页面定制开发-软件开发、项目外包"}},[_._v("#")]),_._v(" 页面定制开发(软件开发、项目外包)")]),_._v(" "),v("p",{staticStyle:{color:"red"}},[_._v("外包项目排到了 2025-02-01,暂时不接外包了🙏,可预约时间 2025-03-01")]),_._v(" "),v("div",{staticClass:"bottom-content"},[v("p",[_._v("价格:根据页面数量、每页难度、开发周期进行合理定价"),v("br"),_._v("\n服务内容:软件开发过程中保证 "),v("code",[_._v("页面高还原度")]),_._v("、"),v("code",[_._v("代码高质量")]),_._v("、"),v("code",[_._v("全方位多次测试")]),v("br"),_._v("\n如何获得服务:加最上方作者微信备注 "),v("code",[_._v("软件开发")]),_._v(" 即可")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[v("strong",[_._v("开发范围")])]),_._v(" "),v("th",[v("strong",[_._v("范围种类")])])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("网站")]),_._v(" "),v("td",[_._v("后台系统、可视化大屏、企业宣传页、活动推广页等各种只要能在浏览器查看的都能开发")])]),_._v(" "),v("tr",[v("td",[v("code",[_._v("h5")]),_._v("页面")]),_._v(" "),v("td",[_._v("移动端网站、广告推广、电子商务等")])]),_._v(" "),v("tr",[v("td",[_._v("小程序")]),_._v(" "),v("td",[_._v("微信、支付宝、抖音、快手、京东小程序等")])]),_._v(" "),v("tr",[v("td",[_._v("移动应用程序")]),_._v(" "),v("td",[_._v("可安装到安卓"),v("code",[_._v("Android")]),_._v("和苹果"),v("code",[_._v("iOS")]),_._v("系统的手机"),v("code",[_._v("App")]),_._v("软件")])]),_._v(" "),v("tr",[v("td",[_._v("桌面应用程序")]),_._v(" "),v("td",[_._v("可安装到桌面操作系统(如"),v("code",[_._v("Windows")]),_._v("、"),v("code",[_._v("MacOS")]),_._v("、"),v("code",[_._v("Linux")]),_._v(")上的软件,可直接在电脑上运行")])])])])])])}),[],!1,null,"14fc59a0",null);v.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/24.df388d1c.js b/assets/js/24.d01a75ed.js similarity index 99% rename from assets/js/24.df388d1c.js rename to assets/js/24.d01a75ed.js index 359f143f..054ff37e 100644 --- a/assets/js/24.df388d1c.js +++ b/assets/js/24.d01a75ed.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{444:function(t,s,a){t.exports=a.p+"assets/img/vscode-tailwindcss.fac41941.png"},540:function(t,s,a){"use strict";a.r(s);var e=a(8),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("平台内置了 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/installation",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tailwind CSS"),s("OutboundLink")],1),t._v(" , 可通过各种 "),s("code",[t._v("程序类")]),t._v(' 快速构建自定义用户界面,再也不用写那些 "裹脚布" 似的 '),s("code",[t._v("css")]),t._v(" 啦")]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-的-vscode-插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-的-vscode-插件"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 的 "),s("code",[t._v("vscode")]),t._v(" 插件")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v("vscode")]),t._v(" 插件商店搜 "),s("code",[t._v("bradlc.vscode-tailwindcss")]),t._v(" 安装后,鼠标覆盖到对应的类名,即可带来智能提示,如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(444),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-文档"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-文档"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 文档")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://tailwindcss.com/docs",target:"_blank",rel:"noopener noreferrer"}},[t._v("官方英文文档"),s("OutboundLink")],1),t._v(" "),s("code",[t._v("Tailwind CSS 最新版本")]),s("br"),t._v(" "),s("a",{attrs:{href:"https://www.tailwindcss.cn/",target:"_blank",rel:"noopener noreferrer"}},[t._v("非官方中文文档"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-使用技巧"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-使用技巧"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 使用技巧")]),t._v(" "),s("h3",{attrs:{id:"_1-自定义属性值"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-自定义属性值"}},[t._v("#")]),t._v(" 1. 自定义属性值")]),t._v(" "),s("p",[t._v("拿最常用的 "),s("code",[t._v("width")]),t._v(" 属性来举例,"),s("code",[t._v("tailwindcss")]),t._v(" 内置了这些 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/width#class-reference",target:"_blank",rel:"noopener noreferrer"}},[t._v("width#class-reference"),s("OutboundLink")],1),t._v(" 类名,有时候用户想写任意宽度值怎么做呢,比如给 "),s("code",[t._v("div")]),t._v(" 一个 "),s("code",[t._v("666px")]),t._v(" 的宽度 ,只需要按照下面的写法。当然不仅仅是宽度可以自定义,所有属性都支持这种模式,你只需要在自定义的时候用 "),s("code",[t._v("[ ]")]),t._v("包起来即可。")]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("w-[666px]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_2-important-权重-这里我们分为-三-步走"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-important-权重-这里我们分为-三-步走"}},[t._v("#")]),t._v(" 2. "),s("code",[t._v("!important")]),t._v(" 权重,这里我们分为 "),s("code",[t._v("三")]),t._v(" 步走")]),t._v(" "),s("h4",{attrs:{id:"_2-1-单个实用程序类加-important"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-单个实用程序类加-important"}},[t._v("#")]),t._v(" 2-1. 单个实用程序类加 "),s("code",[t._v("!important")])]),t._v(" "),s("ul",[s("li",[t._v("比如给 "),s("code",[t._v("p")]),t._v(" 标签 一个 "),s("code",[t._v("black !important")]),t._v(" 的高权重字体颜色,只需要按照下面的写法。也就是某个属性,你需要加权重,那么就在其前面加上 "),s("code",[t._v("!")]),t._v(" 这个感叹号即可。")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("!text-black"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n This will be medium even though bold comes later in the CSS.\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("h4",{attrs:{id:"_2-2-总是在实用程序名称的开头-在任何变体之后-但在任何前缀之前"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-2-总是在实用程序名称的开头-在任何变体之后-但在任何前缀之前"}},[t._v("#")]),t._v(" 2-2. "),s("code",[t._v("!")]),t._v(" 总是在实用程序名称的开头,在任何变体之后,但在任何前缀之前")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("比如下面的 "),s("code",[t._v("有效代码")]),t._v(" ,解释一下代码的意思,就是当鼠标覆盖上去,字体变成白色。 "),s("code",[t._v("hover:")]),t._v(" 代表 "),s("code",[t._v("变体")]),t._v(" ,"),s("code",[t._v("text-white")]),t._v(" 代表程序名称(任何前缀)。")]),t._v(" "),s("ul",[s("li",[t._v("有效代码")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hover:!text-white"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("无效代码")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("!hover:text-white"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])])])]),t._v(" "),s("h4",{attrs:{id:"_2-3-全局配置-important"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-3-全局配置-important"}},[t._v("#")]),t._v(" 2-3. 全局配置"),s("code",[t._v("!important")])]),t._v(" "),s("ul",[s("li",[t._v("在 "),s("code",[t._v("tailwind.config.js")]),t._v(" 文件中如下配置即可,具体参考 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration#important",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration#important"),s("OutboundLink")],1)])]),t._v(" "),s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("important")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("温馨提示 ❤️")]),t._v(" "),s("p",[t._v("全局配置 "),s("code",[t._v("!important")]),t._v(" 后,"),s("code",[t._v("Tailwind")]),t._v(" 的所有实用程序类都将生成为 "),s("code",[t._v("!important")]),t._v(",当然不推荐这里做,因为在合并向元素添加内联样式的第三方 "),s("code",[t._v("JS")]),t._v(" 库时,设置 "),s("code",[t._v("important")]),t._v(" 为可能会引入一些问题,"),s("code",[t._v("Tailwind")]),t._v(" 的 "),s("code",[t._v("!important")]),t._v(" 实用程序会破坏内联样式,这可能会破坏您的预期设计,不过也有解决办法,具体参考 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration#selector-strategy",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration#selector-strategy"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_3-悬停、焦点和其他状态"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-悬停、焦点和其他状态"}},[t._v("#")]),t._v(" 3. 悬停、焦点和其他状态")]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/hover-focus-and-other-states",target:"_blank",rel:"noopener noreferrer"}},[t._v("hover-focus-and-other-states"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_4-响应式设计"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-响应式设计"}},[t._v("#")]),t._v(" 4. 响应式设计")]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/responsive-design",target:"_blank",rel:"noopener noreferrer"}},[t._v("responsive-design"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_5-暗黑模式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-暗黑模式"}},[t._v("#")]),t._v(" 5. 暗黑模式")]),t._v(" "),s("ul",[s("li",[t._v("比如在 "),s("code",[t._v("非暗黑")]),t._v(" 模式时给 "),s("code",[t._v("div")]),t._v(" 标签一个 "),s("code",[t._v("白")]),t._v(" 色背景( "),s("code",[t._v("bg-white")]),t._v(" ),在 "),s("code",[t._v("暗黑")]),t._v(" 模式时给 "),s("code",[t._v("div")]),t._v(" 标签一个 "),s("code",[t._v("黑")]),t._v(" 色背景( "),s("code",[t._v("bg-black")]),t._v(" ),只需要在程序类前面加上 "),s("code",[t._v("dark:")]),t._v(" 即可。")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bg-white dark:bg-black"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_5-重用样式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-重用样式"}},[t._v("#")]),t._v(" 5. 重用样式")]),t._v(" "),s("p",[t._v("当项目越来越大时,如果不规范使用 "),s("code",[t._v("tailwindcss")]),t._v(" ,很容易造成项目难以维护。这里平台有两点提议,如下:")]),t._v(" "),s("ul",[s("li",[t._v("① 将重复的模块,抽离成组件")]),t._v(" "),s("li",[t._v("② 使用 "),s("code",[t._v("@apply")]),t._v(" 提取类,参考 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/style/tailwind.css#L7",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/style/tailwind.css"),s("OutboundLink")],1),t._v(",代码解释如下:")])]),t._v(" "),s("div",{staticClass:"language-css line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-css"}},[s("code",[s("span",{pre:!0,attrs:{class:"token atrule"}},[s("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@layer")]),t._v(" components")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".flex-c")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token atrule"}},[s("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@apply")]),t._v(" flex justify-center items-center"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])]),s("p",[t._v("上面的代码意思是,将 "),s("code",[t._v("flex")]),t._v(" 、 "),s("code",[t._v("justify-center")]),t._v(" 、 "),s("code",[t._v("items-center")]),t._v(" 都提取到自定义的 "),s("code",[t._v("flex-c")]),t._v(" 这个程序类里,然后我们可以向下面代码一样使用:")]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("flex-c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_6-定制化-tailwind-css"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_6-定制化-tailwind-css"}},[t._v("#")]),t._v(" 6. 定制化 "),s("code",[t._v("Tailwind CSS")])]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"cssnano"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cssnano"}},[t._v("#")]),t._v(" "),s("code",[t._v("CSSNANO")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://www.cssnano.cn/",target:"_blank",rel:"noopener noreferrer"}},[t._v("cssnano 中文文档"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("平台集成了 "),s("code",[t._v("cssnano")]),t._v(" "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/postcss.config.js#L10",target:"_blank",rel:"noopener noreferrer"}},[t._v("集成代码位置"),s("OutboundLink")],1),t._v(" ,它是一款基于 "),s("code",[t._v("postcss")]),t._v(" 构建的 "),s("code",[t._v("css")]),t._v(" 优化开源工具。"),s("code",[t._v("cssnano")]),t._v(" 能为你的 "),s("code",[t._v("CSS")]),t._v(" 文件做多方面(多余的空白被删除、标识符被压缩、清理无用的 "),s("code",[t._v("CSS")]),t._v(" 代码)的的优化,以确保最终生成的 "),s("code",[t._v("CSS")]),t._v(" 文件对生产环境来说体积是最小的。")])]),t._v(" "),s("h2",{attrs:{id:"autoprefixer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#autoprefixer"}},[t._v("#")]),t._v(" "),s("code",[t._v("Autoprefixer")])]),t._v(" "),s("ul",[s("li",[t._v("平台集成了 "),s("code",[t._v("Autoprefixer")]),t._v(" "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/postcss.config.js#L9",target:"_blank",rel:"noopener noreferrer"}},[t._v("集成代码位置"),s("OutboundLink")],1),t._v(" ,它是一款自动管理浏览器前缀("),s("code",[t._v("-webkit-")]),t._v(" 、 "),s("code",[t._v("-moz-")]),t._v(" 、 "),s("code",[t._v("-ms-")]),t._v(")的插件,它可以解析 "),s("code",[t._v("CSS")]),t._v(" 文件并且添加浏览器前缀到 "),s("code",[t._v("CSS")]),t._v(" 内容里,也就是说写 "),s("code",[t._v("CSS")]),t._v(" 的时候,你不用考虑前缀了,会自动加上前缀。")])]),t._v(" "),s("h2",{attrs:{id:"postcss"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#postcss"}},[t._v("#")]),t._v(" "),s("code",[t._v("PostCSS")])]),t._v(" "),s("ul",[s("li",[s("code",[t._v("postcss")]),t._v(" 是一款通过 "),s("code",[t._v("js")]),t._v(" 插件来转换 "),s("code",[t._v("css")]),t._v(" 的开源工具,通过这些插件可以支持变量和混合,可以通过追加浏览器前缀生成兼容性的样式,也可以通过 "),s("a",{attrs:{href:"https://zhuanlan.zhihu.com/p/71640183",target:"_blank",rel:"noopener noreferrer"}},[t._v("polyfill"),s("OutboundLink")],1),t._v(" 把新的样式特性处理成通用的样式,可以使用 "),s("code",[t._v("css")]),t._v(" 模块以及样式的规则校验,关于 "),s("code",[t._v("postcss")]),t._v(" 更多的内容点 "),s("a",{attrs:{href:"https://github.com/postcss/postcss/blob/main/docs/README-cn.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("这里"),s("OutboundLink")],1),t._v(" 去了解。")])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("CSS 框架选型经历")]),t._v(" "),s("p",[t._v("平台其实在 "),s("code",[t._v("CSS 框架")]),t._v(" 选型中一共经历了"),s("code",[t._v("三")]),t._v("个阶段。")]),t._v(" "),s("ul",[s("li",[t._v("第一阶段:"),s("a",{attrs:{href:"https://windicss.org",target:"_blank",rel:"noopener noreferrer"}},[t._v("windicss"),s("OutboundLink")],1),t._v(" 起初选这个的原因是当时 "),s("code",[t._v("tailwindcss")]),t._v(" 还没有升级到 "),s("code",[t._v("v3.0")]),t._v(" 版本")]),t._v(" "),s("li",[t._v("第二阶段:"),s("a",{attrs:{href:"https://unocss.dev/",target:"_blank",rel:"noopener noreferrer"}},[t._v("unocss"),s("OutboundLink")],1),t._v(" 选择这个的原因是 "),s("code",[t._v("windicss")]),t._v(" 好久没有维护了,并且 "),s("code",[t._v("windicss")]),t._v(" 还有本地开发内存溢出等问题")]),t._v(" "),s("li",[t._v("第三阶段:"),s("a",{attrs:{href:"https://tailwindcss.com/docs/installation",target:"_blank",rel:"noopener noreferrer"}},[t._v("tailwindcss"),s("OutboundLink")],1),t._v(" 选择这个的原因是虽然 "),s("code",[t._v("unocss")]),t._v(" 很强大,功能也多,但是可能就是因为功能太多,带来的问题也就越多吧。其实,平台只是需要一个稳定的纯 "),s("code",[t._v("CSS")]),t._v(" 框架。"),s("code",[t._v("tailwindcss")]),t._v(" 在 "),s("code",[t._v("vite")]),t._v(" 中使用不需要安装什么插件,只需要安装 "),s("code",[t._v("tailwindcss")]),t._v(" 即可,并且 "),s("code",[t._v("tailwindcss")]),t._v(" 未处理的 "),s("a",{attrs:{href:"https://github.com/tailwindlabs/tailwindcss/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("issues"),s("OutboundLink")],1),t._v(" 极少,维护很及时,经过再三考虑和一些实践,最终选择了稳定的 "),s("code",[t._v("tailwindcss")])])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{456:function(t,s,a){t.exports=a.p+"assets/img/vscode-tailwindcss.fac41941.png"},542:function(t,s,a){"use strict";a.r(s);var e=a(8),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("平台内置了 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/installation",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tailwind CSS"),s("OutboundLink")],1),t._v(" , 可通过各种 "),s("code",[t._v("程序类")]),t._v(' 快速构建自定义用户界面,再也不用写那些 "裹脚布" 似的 '),s("code",[t._v("css")]),t._v(" 啦")]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-的-vscode-插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-的-vscode-插件"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 的 "),s("code",[t._v("vscode")]),t._v(" 插件")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v("vscode")]),t._v(" 插件商店搜 "),s("code",[t._v("bradlc.vscode-tailwindcss")]),t._v(" 安装后,鼠标覆盖到对应的类名,即可带来智能提示,如下图")]),t._v(" "),s("p",[s("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(456),loading:"lazy"}})]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-文档"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-文档"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 文档")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://tailwindcss.com/docs",target:"_blank",rel:"noopener noreferrer"}},[t._v("官方英文文档"),s("OutboundLink")],1),t._v(" "),s("code",[t._v("Tailwind CSS 最新版本")]),s("br"),t._v(" "),s("a",{attrs:{href:"https://www.tailwindcss.cn/",target:"_blank",rel:"noopener noreferrer"}},[t._v("非官方中文文档"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"tailwind-css-使用技巧"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tailwind-css-使用技巧"}},[t._v("#")]),t._v(" "),s("code",[t._v("Tailwind CSS")]),t._v(" 使用技巧")]),t._v(" "),s("h3",{attrs:{id:"_1-自定义属性值"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-自定义属性值"}},[t._v("#")]),t._v(" 1. 自定义属性值")]),t._v(" "),s("p",[t._v("拿最常用的 "),s("code",[t._v("width")]),t._v(" 属性来举例,"),s("code",[t._v("tailwindcss")]),t._v(" 内置了这些 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/width#class-reference",target:"_blank",rel:"noopener noreferrer"}},[t._v("width#class-reference"),s("OutboundLink")],1),t._v(" 类名,有时候用户想写任意宽度值怎么做呢,比如给 "),s("code",[t._v("div")]),t._v(" 一个 "),s("code",[t._v("666px")]),t._v(" 的宽度 ,只需要按照下面的写法。当然不仅仅是宽度可以自定义,所有属性都支持这种模式,你只需要在自定义的时候用 "),s("code",[t._v("[ ]")]),t._v("包起来即可。")]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("w-[666px]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_2-important-权重-这里我们分为-三-步走"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-important-权重-这里我们分为-三-步走"}},[t._v("#")]),t._v(" 2. "),s("code",[t._v("!important")]),t._v(" 权重,这里我们分为 "),s("code",[t._v("三")]),t._v(" 步走")]),t._v(" "),s("h4",{attrs:{id:"_2-1-单个实用程序类加-important"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-单个实用程序类加-important"}},[t._v("#")]),t._v(" 2-1. 单个实用程序类加 "),s("code",[t._v("!important")])]),t._v(" "),s("ul",[s("li",[t._v("比如给 "),s("code",[t._v("p")]),t._v(" 标签 一个 "),s("code",[t._v("black !important")]),t._v(" 的高权重字体颜色,只需要按照下面的写法。也就是某个属性,你需要加权重,那么就在其前面加上 "),s("code",[t._v("!")]),t._v(" 这个感叹号即可。")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("!text-black"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n This will be medium even though bold comes later in the CSS.\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("h4",{attrs:{id:"_2-2-总是在实用程序名称的开头-在任何变体之后-但在任何前缀之前"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-2-总是在实用程序名称的开头-在任何变体之后-但在任何前缀之前"}},[t._v("#")]),t._v(" 2-2. "),s("code",[t._v("!")]),t._v(" 总是在实用程序名称的开头,在任何变体之后,但在任何前缀之前")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("比如下面的 "),s("code",[t._v("有效代码")]),t._v(" ,解释一下代码的意思,就是当鼠标覆盖上去,字体变成白色。 "),s("code",[t._v("hover:")]),t._v(" 代表 "),s("code",[t._v("变体")]),t._v(" ,"),s("code",[t._v("text-white")]),t._v(" 代表程序名称(任何前缀)。")]),t._v(" "),s("ul",[s("li",[t._v("有效代码")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hover:!text-white"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("无效代码")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("!hover:text-white"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])])])]),t._v(" "),s("h4",{attrs:{id:"_2-3-全局配置-important"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-3-全局配置-important"}},[t._v("#")]),t._v(" 2-3. 全局配置"),s("code",[t._v("!important")])]),t._v(" "),s("ul",[s("li",[t._v("在 "),s("code",[t._v("tailwind.config.js")]),t._v(" 文件中如下配置即可,具体参考 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration#important",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration#important"),s("OutboundLink")],1)])]),t._v(" "),s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("important")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("温馨提示 ❤️")]),t._v(" "),s("p",[t._v("全局配置 "),s("code",[t._v("!important")]),t._v(" 后,"),s("code",[t._v("Tailwind")]),t._v(" 的所有实用程序类都将生成为 "),s("code",[t._v("!important")]),t._v(",当然不推荐这里做,因为在合并向元素添加内联样式的第三方 "),s("code",[t._v("JS")]),t._v(" 库时,设置 "),s("code",[t._v("important")]),t._v(" 为可能会引入一些问题,"),s("code",[t._v("Tailwind")]),t._v(" 的 "),s("code",[t._v("!important")]),t._v(" 实用程序会破坏内联样式,这可能会破坏您的预期设计,不过也有解决办法,具体参考 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration#selector-strategy",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration#selector-strategy"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_3-悬停、焦点和其他状态"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-悬停、焦点和其他状态"}},[t._v("#")]),t._v(" 3. 悬停、焦点和其他状态")]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/hover-focus-and-other-states",target:"_blank",rel:"noopener noreferrer"}},[t._v("hover-focus-and-other-states"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_4-响应式设计"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-响应式设计"}},[t._v("#")]),t._v(" 4. 响应式设计")]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/responsive-design",target:"_blank",rel:"noopener noreferrer"}},[t._v("responsive-design"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"_5-暗黑模式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-暗黑模式"}},[t._v("#")]),t._v(" 5. 暗黑模式")]),t._v(" "),s("ul",[s("li",[t._v("比如在 "),s("code",[t._v("非暗黑")]),t._v(" 模式时给 "),s("code",[t._v("div")]),t._v(" 标签一个 "),s("code",[t._v("白")]),t._v(" 色背景( "),s("code",[t._v("bg-white")]),t._v(" ),在 "),s("code",[t._v("暗黑")]),t._v(" 模式时给 "),s("code",[t._v("div")]),t._v(" 标签一个 "),s("code",[t._v("黑")]),t._v(" 色背景( "),s("code",[t._v("bg-black")]),t._v(" ),只需要在程序类前面加上 "),s("code",[t._v("dark:")]),t._v(" 即可。")])]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bg-white dark:bg-black"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_5-重用样式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-重用样式"}},[t._v("#")]),t._v(" 5. 重用样式")]),t._v(" "),s("p",[t._v("当项目越来越大时,如果不规范使用 "),s("code",[t._v("tailwindcss")]),t._v(" ,很容易造成项目难以维护。这里平台有两点提议,如下:")]),t._v(" "),s("ul",[s("li",[t._v("① 将重复的模块,抽离成组件")]),t._v(" "),s("li",[t._v("② 使用 "),s("code",[t._v("@apply")]),t._v(" 提取类,参考 "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/style/tailwind.css#L7",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/style/tailwind.css"),s("OutboundLink")],1),t._v(",代码解释如下:")])]),t._v(" "),s("div",{staticClass:"language-css line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-css"}},[s("code",[s("span",{pre:!0,attrs:{class:"token atrule"}},[s("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@layer")]),t._v(" components")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".flex-c")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token atrule"}},[s("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@apply")]),t._v(" flex justify-center items-center"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])]),s("p",[t._v("上面的代码意思是,将 "),s("code",[t._v("flex")]),t._v(" 、 "),s("code",[t._v("justify-center")]),t._v(" 、 "),s("code",[t._v("items-center")]),t._v(" 都提取到自定义的 "),s("code",[t._v("flex-c")]),t._v(" 这个程序类里,然后我们可以向下面代码一样使用:")]),t._v(" "),s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("flex-c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"_6-定制化-tailwind-css"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_6-定制化-tailwind-css"}},[t._v("#")]),t._v(" 6. 定制化 "),s("code",[t._v("Tailwind CSS")])]),t._v(" "),s("ul",[s("li",[t._v("具体看这里 "),s("a",{attrs:{href:"https://tailwindcss.com/docs/configuration",target:"_blank",rel:"noopener noreferrer"}},[t._v("configuration"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"cssnano"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cssnano"}},[t._v("#")]),t._v(" "),s("code",[t._v("CSSNANO")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://www.cssnano.cn/",target:"_blank",rel:"noopener noreferrer"}},[t._v("cssnano 中文文档"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("平台集成了 "),s("code",[t._v("cssnano")]),t._v(" "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/postcss.config.js#L10",target:"_blank",rel:"noopener noreferrer"}},[t._v("集成代码位置"),s("OutboundLink")],1),t._v(" ,它是一款基于 "),s("code",[t._v("postcss")]),t._v(" 构建的 "),s("code",[t._v("css")]),t._v(" 优化开源工具。"),s("code",[t._v("cssnano")]),t._v(" 能为你的 "),s("code",[t._v("CSS")]),t._v(" 文件做多方面(多余的空白被删除、标识符被压缩、清理无用的 "),s("code",[t._v("CSS")]),t._v(" 代码)的的优化,以确保最终生成的 "),s("code",[t._v("CSS")]),t._v(" 文件对生产环境来说体积是最小的。")])]),t._v(" "),s("h2",{attrs:{id:"autoprefixer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#autoprefixer"}},[t._v("#")]),t._v(" "),s("code",[t._v("Autoprefixer")])]),t._v(" "),s("ul",[s("li",[t._v("平台集成了 "),s("code",[t._v("Autoprefixer")]),t._v(" "),s("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/postcss.config.js#L9",target:"_blank",rel:"noopener noreferrer"}},[t._v("集成代码位置"),s("OutboundLink")],1),t._v(" ,它是一款自动管理浏览器前缀("),s("code",[t._v("-webkit-")]),t._v(" 、 "),s("code",[t._v("-moz-")]),t._v(" 、 "),s("code",[t._v("-ms-")]),t._v(")的插件,它可以解析 "),s("code",[t._v("CSS")]),t._v(" 文件并且添加浏览器前缀到 "),s("code",[t._v("CSS")]),t._v(" 内容里,也就是说写 "),s("code",[t._v("CSS")]),t._v(" 的时候,你不用考虑前缀了,会自动加上前缀。")])]),t._v(" "),s("h2",{attrs:{id:"postcss"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#postcss"}},[t._v("#")]),t._v(" "),s("code",[t._v("PostCSS")])]),t._v(" "),s("ul",[s("li",[s("code",[t._v("postcss")]),t._v(" 是一款通过 "),s("code",[t._v("js")]),t._v(" 插件来转换 "),s("code",[t._v("css")]),t._v(" 的开源工具,通过这些插件可以支持变量和混合,可以通过追加浏览器前缀生成兼容性的样式,也可以通过 "),s("a",{attrs:{href:"https://zhuanlan.zhihu.com/p/71640183",target:"_blank",rel:"noopener noreferrer"}},[t._v("polyfill"),s("OutboundLink")],1),t._v(" 把新的样式特性处理成通用的样式,可以使用 "),s("code",[t._v("css")]),t._v(" 模块以及样式的规则校验,关于 "),s("code",[t._v("postcss")]),t._v(" 更多的内容点 "),s("a",{attrs:{href:"https://github.com/postcss/postcss/blob/main/docs/README-cn.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("这里"),s("OutboundLink")],1),t._v(" 去了解。")])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("CSS 框架选型经历")]),t._v(" "),s("p",[t._v("平台其实在 "),s("code",[t._v("CSS 框架")]),t._v(" 选型中一共经历了"),s("code",[t._v("三")]),t._v("个阶段。")]),t._v(" "),s("ul",[s("li",[t._v("第一阶段:"),s("a",{attrs:{href:"https://windicss.org",target:"_blank",rel:"noopener noreferrer"}},[t._v("windicss"),s("OutboundLink")],1),t._v(" 起初选这个的原因是当时 "),s("code",[t._v("tailwindcss")]),t._v(" 还没有升级到 "),s("code",[t._v("v3.0")]),t._v(" 版本")]),t._v(" "),s("li",[t._v("第二阶段:"),s("a",{attrs:{href:"https://unocss.dev/",target:"_blank",rel:"noopener noreferrer"}},[t._v("unocss"),s("OutboundLink")],1),t._v(" 选择这个的原因是 "),s("code",[t._v("windicss")]),t._v(" 好久没有维护了,并且 "),s("code",[t._v("windicss")]),t._v(" 还有本地开发内存溢出等问题")]),t._v(" "),s("li",[t._v("第三阶段:"),s("a",{attrs:{href:"https://tailwindcss.com/docs/installation",target:"_blank",rel:"noopener noreferrer"}},[t._v("tailwindcss"),s("OutboundLink")],1),t._v(" 选择这个的原因是虽然 "),s("code",[t._v("unocss")]),t._v(" 很强大,功能也多,但是可能就是因为功能太多,带来的问题也就越多吧。其实,平台只是需要一个稳定的纯 "),s("code",[t._v("CSS")]),t._v(" 框架。"),s("code",[t._v("tailwindcss")]),t._v(" 在 "),s("code",[t._v("vite")]),t._v(" 中使用不需要安装什么插件,只需要安装 "),s("code",[t._v("tailwindcss")]),t._v(" 即可,并且 "),s("code",[t._v("tailwindcss")]),t._v(" 未处理的 "),s("a",{attrs:{href:"https://github.com/tailwindlabs/tailwindcss/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("issues"),s("OutboundLink")],1),t._v(" 极少,维护很及时,经过再三考虑和一些实践,最终选择了稳定的 "),s("code",[t._v("tailwindcss")])])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/25.3d2779ee.js b/assets/js/25.a23895e2.js similarity index 93% rename from assets/js/25.3d2779ee.js rename to assets/js/25.a23895e2.js index 6642c6ae..ab007490 100644 --- a/assets/js/25.3d2779ee.js +++ b/assets/js/25.a23895e2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{461:function(t,a,e){t.exports=e.p+"assets/img/no1.16b2dcf4.jpg"},546:function(t,a,e){"use strict";e.r(a);var r=e(8),s=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("p",[t._v("自定义免登录时长具有一定的应用价值,优化了用户体验")]),t._v(" "),a("h2",{attrs:{id:"优点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#优点"}},[t._v("#")]),t._v(" 优点")]),t._v(" "),a("ol",[a("li",[t._v("增强用户体验: 通过提供自定义免登录时长的选项,用户可以根据自己的实际需求和喜好来设置登录频率,以提升使用体验")]),t._v(" "),a("li",[t._v("提升系统安全性:对于不同的环境和使用场景,用户可以根据自身的安全考虑来设定免登录时长。例如,在私人电脑或手机上,用户可能会选择较长的免登录时间以提升使用便利性。相反,在公共电脑上,用户可能会选择较短的免登录时间或者不使用免登录功能,以避免账号安全风险")]),t._v(" "),a("li",[t._v("紧密符合业务需求:对于管理员或后台管理人员,他们可能需要频繁地登录系统进行功能操作,允许他们自定义免登录时长可以提升工作效率")]),t._v(" "),a("li",[t._v("促进个性化服务:自定义免登录时长这样的个性化选项可以在一定程度上增加系统的用户友好性,让用户感觉更为贴心,有助于提高用户满意度和忠诚度")])]),t._v(" "),a("h2",{attrs:{id:"如何操作"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何操作"}},[t._v("#")]),t._v(" 如何操作")]),t._v(" "),a("p",[t._v("来到登录页勾选 7 天内免登录即可,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":e(461),loading:"lazy"}})]),t._v(" "),a("p",[t._v("平台提供 1、7、30 三种天数供选择,默认 7 天。您也可查看下面的具体实现,修改少量代码即可自定义所需天数。点击天数即可切换")]),t._v(" "),a("h2",{attrs:{id:"具体实现"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#具体实现"}},[t._v("#")]),t._v(" 具体实现")]),t._v(" "),a("p",[t._v("用户登录后判断是否勾选免登录,来给"),a("code",[t._v("key")]),t._v("为"),a("code",[t._v("multiple-tabs")]),t._v("的数据存储到"),a("code",[t._v("cookie")]),t._v("中,如果勾选就设置对应的过期时间,反之不设置 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L61-L69",target:"_blank",rel:"noopener noreferrer"}},[t._v("具体代码"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("自定义所需天数在"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/login/index.vue#L247-L249",target:"_blank",rel:"noopener noreferrer"}},[t._v("此处配置"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{457:function(t,a,e){t.exports=e.p+"assets/img/no1.16b2dcf4.jpg"},543:function(t,a,e){"use strict";e.r(a);var r=e(8),s=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("p",[t._v("自定义免登录时长具有一定的应用价值,优化了用户体验")]),t._v(" "),a("h2",{attrs:{id:"优点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#优点"}},[t._v("#")]),t._v(" 优点")]),t._v(" "),a("ol",[a("li",[t._v("增强用户体验: 通过提供自定义免登录时长的选项,用户可以根据自己的实际需求和喜好来设置登录频率,以提升使用体验")]),t._v(" "),a("li",[t._v("提升系统安全性:对于不同的环境和使用场景,用户可以根据自身的安全考虑来设定免登录时长。例如,在私人电脑或手机上,用户可能会选择较长的免登录时间以提升使用便利性。相反,在公共电脑上,用户可能会选择较短的免登录时间或者不使用免登录功能,以避免账号安全风险")]),t._v(" "),a("li",[t._v("紧密符合业务需求:对于管理员或后台管理人员,他们可能需要频繁地登录系统进行功能操作,允许他们自定义免登录时长可以提升工作效率")]),t._v(" "),a("li",[t._v("促进个性化服务:自定义免登录时长这样的个性化选项可以在一定程度上增加系统的用户友好性,让用户感觉更为贴心,有助于提高用户满意度和忠诚度")])]),t._v(" "),a("h2",{attrs:{id:"如何操作"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#如何操作"}},[t._v("#")]),t._v(" 如何操作")]),t._v(" "),a("p",[t._v("来到登录页勾选 7 天内免登录即可,如下图")]),t._v(" "),a("p",[a("img",{staticClass:"lazy",attrs:{alt:"img","data-src":e(457),loading:"lazy"}})]),t._v(" "),a("p",[t._v("平台提供 1、7、30 三种天数供选择,默认 7 天。您也可查看下面的具体实现,修改少量代码即可自定义所需天数。点击天数即可切换")]),t._v(" "),a("h2",{attrs:{id:"具体实现"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#具体实现"}},[t._v("#")]),t._v(" 具体实现")]),t._v(" "),a("p",[t._v("用户登录后判断是否勾选免登录,来给"),a("code",[t._v("key")]),t._v("为"),a("code",[t._v("multiple-tabs")]),t._v("的数据存储到"),a("code",[t._v("cookie")]),t._v("中,如果勾选就设置对应的过期时间,反之不设置 "),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/utils/auth.ts#L61-L69",target:"_blank",rel:"noopener noreferrer"}},[t._v("具体代码"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("自定义所需天数在"),a("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/login/index.vue#L247-L249",target:"_blank",rel:"noopener noreferrer"}},[t._v("此处配置"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/26.fe827215.js b/assets/js/26.c3e167ad.js similarity index 97% rename from assets/js/26.fe827215.js rename to assets/js/26.c3e167ad.js index 10946a2e..48ba7da8 100644 --- a/assets/js/26.fe827215.js +++ b/assets/js/26.c3e167ad.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{460:function(s,t,n){s.exports=n.p+"assets/img/optimize.b8e2fb94.jpg"},545:function(s,t,n){"use strict";n.r(t);var e=n(8),a=Object(e.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("p",[s._v("主要介绍下如何在 "),t("code",[s._v("pure-admin")]),s._v(" 平台进行正确有效的 "),t("code",[s._v("vite")]),s._v(" 预构建配置")]),s._v(" "),t("h2",{attrs:{id:"include"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#include"}},[s._v("#")]),s._v(" "),t("code",[s._v("include")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/build/optimize.ts#L7",target:"_blank",rel:"noopener noreferrer"}},[s._v("optimizeDeps.include"),t("OutboundLink")],1),s._v(" 配置为需要预构建的模块。"),t("code",[s._v("vite")]),s._v(" 启动时会将 "),t("code",[s._v("optimizeDeps.include")]),s._v(" 里的模块,编译成 "),t("code",[s._v("esm")]),s._v(" 格式并缓存到 "),t("code",[s._v("node_modules/.vite")]),s._v(" 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":n(460),loading:"lazy"}})]),s._v(" "),t("p",[s._v("下面是精简版 "),t("code",[s._v("optimizeDeps.include")]),s._v(" 配置,将 "),t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/package.json#L50-L75",target:"_blank",rel:"noopener noreferrer"}},[s._v("dependencies"),t("OutboundLink")],1),s._v(" 大部分未全局安装的模块都配置进来,当然如果模块里面的东西很少,也就是里面方法不多,可以不用配置进来直接让浏览器加载即可(您自己安装的模块也是参考该配置)")]),s._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[s._v("点击查看")]),s._v(" "),t("div",{staticClass:"language-ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" include "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"qs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mitt"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dayjs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"axios"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pinia"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue-types"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"js-cookie"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue-tippy"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pinyin-pro"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sortablejs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@vueuse/core"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@pureadmin/utils"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"responsive-storage"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br")])])]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),t("ol",[t("li",[s._v("尤其当您禁用浏览器缓存时(这种情况只应该发生在调试阶段)必须将对应模块加入到 "),t("code",[s._v("include")]),s._v(" 里,否则会遇到开发环境切换页面卡顿的问题("),t("code",[s._v("vite")]),s._v(" 会认为它是一个新的依赖包会重新加载并强制刷新页面),因为它既无法使用浏览器缓存,又没有在本地 "),t("code",[s._v("node_modules/.vite")]),s._v(" 里缓存")]),s._v(" "),t("li",[s._v("如果您使用的第三方库是全局引入,也就是引入到 "),t("code",[s._v("src/main.ts")]),s._v(" 文件里,就不需要再添加到 "),t("code",[s._v("include")]),s._v(" 里了,因为 "),t("code",[s._v("vite")]),s._v(" 会自动将它们缓存到 "),t("code",[s._v("node_modules/.vite")])])])]),s._v(" "),t("h2",{attrs:{id:"exclude"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#exclude"}},[s._v("#")]),s._v(" "),t("code",[s._v("exclude")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/build/optimize.ts#L27",target:"_blank",rel:"noopener noreferrer"}},[s._v("optimizeDeps.exclude"),t("OutboundLink")],1),s._v(" 配置为排除预构建的模块。需要注意的是平台里所有以 "),t("code",[s._v("@iconify-icons/")]),s._v(" 开头引入的的本地图标模块,都应加入到下面的 "),t("code",[s._v("exclude")]),s._v(" 里,因为平台推荐本地图标的使用方式是哪里需要哪里引入而且都是单个的引入,不需要预构建,直接让浏览器加载就好")]),s._v(" "),t("p",[s._v("下面是精简版 "),t("code",[s._v("optimizeDeps.exclude")]),s._v(" 配置")]),s._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[s._v("点击查看")]),s._v(" "),t("div",{staticClass:"language-ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" exclude "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@iconify-icons/ep"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@iconify-icons/ri"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@pureadmin/theme/dist/browser-utils"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])])]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("推荐阅读")]),s._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://cn.vitejs.dev/guide/dep-pre-bundling.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("依赖预构建"),t("OutboundLink")],1),s._v(" "),t("Badge",{attrs:{text:"vite文档"}})],1),s._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7064853960636989454",target:"_blank",rel:"noopener noreferrer"}},[s._v("深入理解 Vite 核心原理"),t("OutboundLink")],1)])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{461:function(s,t,n){s.exports=n.p+"assets/img/optimize.b8e2fb94.jpg"},547:function(s,t,n){"use strict";n.r(t);var e=n(8),a=Object(e.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("p",[s._v("主要介绍下如何在 "),t("code",[s._v("pure-admin")]),s._v(" 平台进行正确有效的 "),t("code",[s._v("vite")]),s._v(" 预构建配置")]),s._v(" "),t("h2",{attrs:{id:"include"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#include"}},[s._v("#")]),s._v(" "),t("code",[s._v("include")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/build/optimize.ts#L7",target:"_blank",rel:"noopener noreferrer"}},[s._v("optimizeDeps.include"),t("OutboundLink")],1),s._v(" 配置为需要预构建的模块。"),t("code",[s._v("vite")]),s._v(" 启动时会将 "),t("code",[s._v("optimizeDeps.include")]),s._v(" 里的模块,编译成 "),t("code",[s._v("esm")]),s._v(" 格式并缓存到 "),t("code",[s._v("node_modules/.vite")]),s._v(" 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":n(461),loading:"lazy"}})]),s._v(" "),t("p",[s._v("下面是精简版 "),t("code",[s._v("optimizeDeps.include")]),s._v(" 配置,将 "),t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/package.json#L50-L75",target:"_blank",rel:"noopener noreferrer"}},[s._v("dependencies"),t("OutboundLink")],1),s._v(" 大部分未全局安装的模块都配置进来,当然如果模块里面的东西很少,也就是里面方法不多,可以不用配置进来直接让浏览器加载即可(您自己安装的模块也是参考该配置)")]),s._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[s._v("点击查看")]),s._v(" "),t("div",{staticClass:"language-ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" include "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"qs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mitt"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dayjs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"axios"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pinia"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue-types"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"js-cookie"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vue-tippy"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"pinyin-pro"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sortablejs"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@vueuse/core"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@pureadmin/utils"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"responsive-storage"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br")])])]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),t("ol",[t("li",[s._v("尤其当您禁用浏览器缓存时(这种情况只应该发生在调试阶段)必须将对应模块加入到 "),t("code",[s._v("include")]),s._v(" 里,否则会遇到开发环境切换页面卡顿的问题("),t("code",[s._v("vite")]),s._v(" 会认为它是一个新的依赖包会重新加载并强制刷新页面),因为它既无法使用浏览器缓存,又没有在本地 "),t("code",[s._v("node_modules/.vite")]),s._v(" 里缓存")]),s._v(" "),t("li",[s._v("如果您使用的第三方库是全局引入,也就是引入到 "),t("code",[s._v("src/main.ts")]),s._v(" 文件里,就不需要再添加到 "),t("code",[s._v("include")]),s._v(" 里了,因为 "),t("code",[s._v("vite")]),s._v(" 会自动将它们缓存到 "),t("code",[s._v("node_modules/.vite")])])])]),s._v(" "),t("h2",{attrs:{id:"exclude"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#exclude"}},[s._v("#")]),s._v(" "),t("code",[s._v("exclude")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin/blob/main/build/optimize.ts#L27",target:"_blank",rel:"noopener noreferrer"}},[s._v("optimizeDeps.exclude"),t("OutboundLink")],1),s._v(" 配置为排除预构建的模块。需要注意的是平台里所有以 "),t("code",[s._v("@iconify-icons/")]),s._v(" 开头引入的的本地图标模块,都应加入到下面的 "),t("code",[s._v("exclude")]),s._v(" 里,因为平台推荐本地图标的使用方式是哪里需要哪里引入而且都是单个的引入,不需要预构建,直接让浏览器加载就好")]),s._v(" "),t("p",[s._v("下面是精简版 "),t("code",[s._v("optimizeDeps.exclude")]),s._v(" 配置")]),s._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[s._v("点击查看")]),s._v(" "),t("div",{staticClass:"language-ts line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" exclude "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@iconify-icons/ep"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@iconify-icons/ri"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@pureadmin/theme/dist/browser-utils"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])])]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("推荐阅读")]),s._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://cn.vitejs.dev/guide/dep-pre-bundling.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("依赖预构建"),t("OutboundLink")],1),s._v(" "),t("Badge",{attrs:{text:"vite文档"}})],1),s._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7064853960636989454",target:"_blank",rel:"noopener noreferrer"}},[s._v("深入理解 Vite 核心原理"),t("OutboundLink")],1)])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/27.789feea5.js b/assets/js/27.067d1a40.js similarity index 98% rename from assets/js/27.789feea5.js rename to assets/js/27.067d1a40.js index d00cb3ee..53cee148 100644 --- a/assets/js/27.789feea5.js +++ b/assets/js/27.067d1a40.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{289:function(e,r,t){e.exports=t.p+"assets/img/pure-admin-cli.5451f3a1.gif"},550:function(e,r,t){"use strict";t.r(r);var a=t(8),s=Object(a.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("p",[e._v("由 "),r("code",[e._v("pure-admin")]),e._v(" 平台开发的函数工具库,持续维护,请放心使用")]),e._v(" "),r("h2",{attrs:{id:"pure-admin-utils"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-utils"}},[e._v("#")]),e._v(" pure-admin-utils")]),e._v(" "),r("ul",[r("li",[e._v("封装一些常用的工具函数( "),r("code",[e._v("utils")]),e._v("、"),r("code",[e._v("hooks")]),e._v(" ),支持在 "),r("code",[e._v("Node.js")]),e._v("、浏览器以及任意 "),r("code",[e._v("JavaScript")]),e._v(" 框架中使用")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://pure-admin-utils.netlify.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看文档"),r("OutboundLink")],1),e._v(" "),r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-utils-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看文档源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"pure-admin-cli"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-cli"}},[e._v("#")]),e._v(" pure-admin-cli")]),e._v(" "),r("ul",[r("li",[e._v("快速构建 "),r("code",[e._v("pure-admin")]),e._v(" 相关项目的命令行工具")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("p",[r("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(289),loading:"lazy"}})]),e._v(" "),r("h2",{attrs:{id:"pure-admin-release"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-release"}},[e._v("#")]),e._v(" pure-admin-release")]),e._v(" "),r("ul",[r("li",[e._v("超简单的发包工具(修改版本号并提交 "),r("code",[e._v("git")]),e._v("、自动打包、发布 "),r("code",[e._v("npm")]),e._v("、计算并显示打包后文件大小)")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-release",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"responsive-storage"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#responsive-storage"}},[e._v("#")]),e._v(" responsive-storage")]),e._v(" "),r("ul",[r("li",[e._v("响应式本地存储,同时支持 "),r("code",[e._v("vue2")]),e._v(" 和 "),r("code",[e._v("vue3")])])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/xiaoxian521/responsive-storage",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"esmjs-geo"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#esmjs-geo"}},[e._v("#")]),e._v(" @esmjs/geo")]),e._v(" "),r("ul",[r("li",[e._v("使用 "),r("code",[e._v("rust")]),e._v(" 和 "),r("code",[e._v("typescript")]),e._v(" 开发的中国地理信息 "),r("code",[e._v("GeoJSON")]),e._v(",常搭配 "),r("code",[e._v("ECharts5")]),e._v(" 地图组件")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/esmjs/geo",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{289:function(e,r,t){e.exports=t.p+"assets/img/pure-admin-cli.5451f3a1.gif"},548:function(e,r,t){"use strict";t.r(r);var a=t(8),s=Object(a.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("p",[e._v("由 "),r("code",[e._v("pure-admin")]),e._v(" 平台开发的函数工具库,持续维护,请放心使用")]),e._v(" "),r("h2",{attrs:{id:"pure-admin-utils"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-utils"}},[e._v("#")]),e._v(" pure-admin-utils")]),e._v(" "),r("ul",[r("li",[e._v("封装一些常用的工具函数( "),r("code",[e._v("utils")]),e._v("、"),r("code",[e._v("hooks")]),e._v(" ),支持在 "),r("code",[e._v("Node.js")]),e._v("、浏览器以及任意 "),r("code",[e._v("JavaScript")]),e._v(" 框架中使用")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://pure-admin-utils.netlify.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看文档"),r("OutboundLink")],1),e._v(" "),r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-utils-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看文档源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"pure-admin-cli"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-cli"}},[e._v("#")]),e._v(" pure-admin-cli")]),e._v(" "),r("ul",[r("li",[e._v("快速构建 "),r("code",[e._v("pure-admin")]),e._v(" 相关项目的命令行工具")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("p",[r("img",{staticClass:"lazy",attrs:{alt:"img","data-src":t(289),loading:"lazy"}})]),e._v(" "),r("h2",{attrs:{id:"pure-admin-release"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pure-admin-release"}},[e._v("#")]),e._v(" pure-admin-release")]),e._v(" "),r("ul",[r("li",[e._v("超简单的发包工具(修改版本号并提交 "),r("code",[e._v("git")]),e._v("、自动打包、发布 "),r("code",[e._v("npm")]),e._v("、计算并显示打包后文件大小)")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-release",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"responsive-storage"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#responsive-storage"}},[e._v("#")]),e._v(" responsive-storage")]),e._v(" "),r("ul",[r("li",[e._v("响应式本地存储,同时支持 "),r("code",[e._v("vue2")]),e._v(" 和 "),r("code",[e._v("vue3")])])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/xiaoxian521/responsive-storage",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"esmjs-geo"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#esmjs-geo"}},[e._v("#")]),e._v(" @esmjs/geo")]),e._v(" "),r("ul",[r("li",[e._v("使用 "),r("code",[e._v("rust")]),e._v(" 和 "),r("code",[e._v("typescript")]),e._v(" 开发的中国地理信息 "),r("code",[e._v("GeoJSON")]),e._v(",常搭配 "),r("code",[e._v("ECharts5")]),e._v(" 地图组件")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/esmjs/geo",target:"_blank",rel:"noopener noreferrer"}},[e._v("查看源码"),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/29.665ac663.js b/assets/js/29.40f565d8.js similarity index 99% rename from assets/js/29.665ac663.js rename to assets/js/29.40f565d8.js index 68dfd2bc..7a69fa97 100644 --- a/assets/js/29.665ac663.js +++ b/assets/js/29.40f565d8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{529:function(s,n,e){"use strict";e.r(n);var a=e(8),t=Object(a.a)({},(function(){var s=this,n=s._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[n("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[s._v("完整版"),n("OutboundLink")],1),s._v("目录结构")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("├── .github # GitHub 配置文件\n│ ├── ISSUE_TEMPLATE # 问题提交参考模板\n│ ├── workflows git # 工作流\n├── .husky # 代码提交前校验配置文件\n├── .vscode # IDE 工具推荐配置文件\n│ │ ├── extensions.json # 一键安装平台推荐的 vscode 插件\n│ │ ├── settings.json # 设置扩展程序或 vscode 编辑器的一些属性\n│ │ ├── vue3.0.code-snippets # vue3.0 代码片段\n│ │ └── vue3.2.code-snippets # vue3.2 代码片段\n│ │ └── vue3.3.code-snippets # vue3.3 代码片段\n├── build # 构建工具\n│ │ ├── cdn.ts # 打包时采用 cdn 模式\n│ │ ├── compress.ts # 打包时启用 gzip 压缩或 brotli 压缩\n│ │ ├── info.ts # 输出打包信息(大小、用时)\n│ │ ├── optimize.ts # vite 依赖预构建配置项\n│ │ ├── plugins.ts # vite 相关插件存放处\n│ │ ├── utils.ts # 构建工具常用方法抽离\n├── locales # 国际化文件存放处\n│ │ ├── en.yaml # 英文配置\n│ │ ├── zh-CN.yaml # 中文配置\n├── mock # mock 模拟后台数据\n│ │ ├── asyncRoutes.ts # 模拟后台返回动态路由\n│ │ ├── ...\n├── node_modules # 模块依赖\n├── public # 静态资源\n│ │ ├── audio # 音频文件\n│ │ ├── html # 静态 iframe 页面\n│ │ ├── wasm # wasm 文件以及胶水代码\n│ │ ├── favicon.ico # favicon\n│ │ ├── logo.svg # logo\n│ │ ├── platform-config.json # 全局配置文件(打包后修改也可生效)\n├── src\n│ ├── api # 接口请求统一管理\n│ ├── assets # 字体、图片等静态资源\n│ ├── components # 自定义通用组件\n│ │ ├── ReAnimateSelector # [animate.css](https://animate.style/) 选择器组件\n│ │ ├── ReAuth # 按钮级别权限组件(根据路由meta中的auths字段进行判断)\n│ │ ├── ReBarcode # 条形码组件\n│ │ ├── ReCol # 封装 element-plus 的 el-col 组件\n│ │ ├── ReCountTo # 数字动画组件\n│ │ ├── ReCropper # 图片裁剪组件\n│ │ ├── ReCropperPreview # 图片裁剪预览组件\n│ │ ├── ReDialog # 基于 element-plus 中 el-dialog 组件开发的函数式弹框\n│ │ ├── ReFlicker # 圆点、方形闪烁动画组件\n│ │ ├── ReFlop # 时间翻牌组件\n│ │ ├── ReFlowChart # LogicFlow 流程图组件\n│ │ ├── ReIcon # 图标组件\n│ │ ├── ReImageVerify # 图形验证码组件\n│ │ ├── ReMap # 高德地图组件\n│ │ ├── RePerms # 按钮级别权限组件(根据登录接口返回的permissions字段进行判断)\n│ │ ├── RePureTableBar # 配合 `@pureadmin/table` 实现快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */\n│ │ ├── ReQrcode # 二维码组件\n│ │ ├── ReSeamlessScroll # 无缝滚动组件\n│ │ ├── ReSegmented # 分段控制器组件\n│ │ ├── ReSelector # 选择器组件\n│ │ ├── ReSplitPane # 切割面板组件\n│ │ ├── ReText # 支持 Tooltip 提示的文本省略组件\n│ │ ├── ReTreeLine # 树形连接线组件(基于element-plus)\n│ │ ├── ReTypeit # 打字机效果组件\n│ │ ├── ReVxeTableBar # 配合 vxe-table 实现快速便捷的表格操作\n│ ├── config # 获取平台动态全局配置\n│ ├── directives # 自定义指令\n│ │ ├── auth # 按钮级别权限指令(根据路由meta中的auths字段进行判断)\n│ │ ├── copy # 文本复制指令(默认双击复制)\n│ │ ├── longpress # 长按指令\n│ │ ├── optimize # 防抖、节流指令\n│ │ ├── perms # 按钮级别权限指令(根据登录接口返回的permissions字段进行判断)\n│ │ ├── ripple # 水波纹效果指令\n│ ├── layout # 主要页面布局\n│ ├── plugins # 处理一些库或插件,导出更方便的 api\n│ ├── router # 路由配置\n│ ├── store # pinia 状态管理\n│ ├── style # 全局样式\n│ │ ├── dark.scss # 暗黑模式样式适配文件\n│ │ ├── element-plus.scss # 全局覆盖 element-plus 样式文件\n│ │ ├── reset.scss # 全局重置样式文件\n│ │ ├── sidebar.scss # layout 布局样式文件\n│ │ ├── tailwind.css # tailwindcss 自定义样式配置文件\n│ │ ├── ...\n│ ├── utils # 全局工具方法\n│ │ ├── http # 封装 axios 文件\n│ │ ├── localforage # 二次封装 localforage (https://localforage.docschina.org/) 支持设置过期时间,提供完整的类型提示\n│ │ ├── progress # 封装 nprogress\n│ │ └── auth.ts # 处理用户信息和 token 相关\n│ │ └── chinaArea.ts # 汉字转区域码\n│ │ └── globalPolyfills.ts # 解决项目可能因为安装某个依赖出现 `global is not defined` 报错\n│ │ └── message.ts # 消息提示函数\n│ │ ├── mitt.ts # 触发公共事件,类似 EventBus\n│ │ ├── preventDefault.ts # 阻止键盘F12、浏览器默认右键菜单、页面元素选中、图片默认可拖动的方法\n│ │ ├── print.ts # 打印函数\n│ │ ├── propTypes.ts # 二次封装 vue 的 propTypes\n│ │ ├── responsive.ts # 全局响应式 storage 配置\n│ │ ├── sso.ts # 前端单点登录逻辑处理\n│ │ ├── tree.ts # 树结构相关处理函数\n│ ├── views # 存放编写业务代码页面\n│ ├── App.vue # 入口页面\n│ ├── main.ts # 入口文件\n├── types # 全局 TS 类型配置\n│ │ ├── directives.d.ts # 全局自定义指令类型声明\n│ │ ├── global-components.d.ts # 自定义全局组件获得 Volar 提示(自定义的全局组件需要在这里声明下才能获得 Volar 类型提示哦)\n│ │ ├── global.d.ts # 全局类型声明,无需引入直接在 `.vue` 、`.ts` 、`.tsx` 文件使用即可获得类型提示\n│ │ ├── index.d.ts # 此文件跟同级目录的 global.d.ts 文件一样也是全局类型声明,只不过这里存放一些零散的全局类型,无需引入直接在 .vue 、.ts 、.tsx 文件使用即可获得类型提示\n│ │ ├── router.d.ts # 全局路由类型声明\n│ │ ├── shims-tsx.d.ts # 该文件是为了给 .tsx 文件提供类型支持,在编写时能正确识别语法\n│ │ └── shims-vue.d.ts # .vue、.scss 文件不是常规的文件类型,typescript 无法识别,所以我们需要通过下图的代码告诉 typescript 这些文件的类型,防止类型报错\n├── .browserslistrc # 配置目标浏览器的环境\n├── .dockerignore # 排除不需要上传到 docker 服务端的文件或目录\n├── .editorconfig # 编辑器读取文件格式及样式定义配置 https://editorconfig.org/\n├── .env # 全局环境变量配置(当 .env 文件与 .env.development、.env.production、.env.staging 这三个文件之一存在相同的配置 key 时,.env 优先级更低)\n├── .env.development # 开发环境变量配置\n├── .env.production # 生产环境变量配置\n├── .env.staging # 预发布环境变量配置\n├── .gitattributes # 自定义指定文件属性\n├── .gitignore # git 提交忽略文件\n├── .gitpod.yml # gitpod 部署配置\n├── .lintstagedrc # lint-staged 配置\n├── .markdownlint.json # markdown 格式检查配置\n├── .npmrc # npm 配置文件\n├── .nvmrc # 用于指定在使用 Node Version Manager(NVM)时要使用的特定 Node.js 版本\n├── .prettierignore # prettier 语法检查忽略文件\n├── .prettierrc.js # prettier 插件配置\n├── .stylelintignore # stylelint 语法检查忽略文件\n├── CHANGELOG.en_US.md # 版本更新日志(英文版)\n├── CHANGELOG.md # 版本更新日志(英文版)\n├── CHANGELOG.zh_CN.md # 版本更新日志(中文版)\n├── Dockerfile # 用来构建 docker 镜像\n├── LICENSE # 证书\n├── README.en-US.md # README(英文版)\n├── README.md # README\n├── commitlint.config.js # git 提交前检查配置\n├── eslint.config.js # eslint 语法检查配置\n├── index.html # html 主入口\n├── package.json # 依赖包管理以及命令配置\n├── pnpm-lock.yaml # 依赖包版本锁定文件\n├── postcss.config.js # postcss 插件配置\n├── stylelint.config.js # stylelint 配置\n├── tailwind.config.ts # tailwindcss 配置\n├── tsconfig.json # typescript 配置\n└── vite.config.ts # vite 配置\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br"),n("span",{staticClass:"line-number"},[s._v("56")]),n("br"),n("span",{staticClass:"line-number"},[s._v("57")]),n("br"),n("span",{staticClass:"line-number"},[s._v("58")]),n("br"),n("span",{staticClass:"line-number"},[s._v("59")]),n("br"),n("span",{staticClass:"line-number"},[s._v("60")]),n("br"),n("span",{staticClass:"line-number"},[s._v("61")]),n("br"),n("span",{staticClass:"line-number"},[s._v("62")]),n("br"),n("span",{staticClass:"line-number"},[s._v("63")]),n("br"),n("span",{staticClass:"line-number"},[s._v("64")]),n("br"),n("span",{staticClass:"line-number"},[s._v("65")]),n("br"),n("span",{staticClass:"line-number"},[s._v("66")]),n("br"),n("span",{staticClass:"line-number"},[s._v("67")]),n("br"),n("span",{staticClass:"line-number"},[s._v("68")]),n("br"),n("span",{staticClass:"line-number"},[s._v("69")]),n("br"),n("span",{staticClass:"line-number"},[s._v("70")]),n("br"),n("span",{staticClass:"line-number"},[s._v("71")]),n("br"),n("span",{staticClass:"line-number"},[s._v("72")]),n("br"),n("span",{staticClass:"line-number"},[s._v("73")]),n("br"),n("span",{staticClass:"line-number"},[s._v("74")]),n("br"),n("span",{staticClass:"line-number"},[s._v("75")]),n("br"),n("span",{staticClass:"line-number"},[s._v("76")]),n("br"),n("span",{staticClass:"line-number"},[s._v("77")]),n("br"),n("span",{staticClass:"line-number"},[s._v("78")]),n("br"),n("span",{staticClass:"line-number"},[s._v("79")]),n("br"),n("span",{staticClass:"line-number"},[s._v("80")]),n("br"),n("span",{staticClass:"line-number"},[s._v("81")]),n("br"),n("span",{staticClass:"line-number"},[s._v("82")]),n("br"),n("span",{staticClass:"line-number"},[s._v("83")]),n("br"),n("span",{staticClass:"line-number"},[s._v("84")]),n("br"),n("span",{staticClass:"line-number"},[s._v("85")]),n("br"),n("span",{staticClass:"line-number"},[s._v("86")]),n("br"),n("span",{staticClass:"line-number"},[s._v("87")]),n("br"),n("span",{staticClass:"line-number"},[s._v("88")]),n("br"),n("span",{staticClass:"line-number"},[s._v("89")]),n("br"),n("span",{staticClass:"line-number"},[s._v("90")]),n("br"),n("span",{staticClass:"line-number"},[s._v("91")]),n("br"),n("span",{staticClass:"line-number"},[s._v("92")]),n("br"),n("span",{staticClass:"line-number"},[s._v("93")]),n("br"),n("span",{staticClass:"line-number"},[s._v("94")]),n("br"),n("span",{staticClass:"line-number"},[s._v("95")]),n("br"),n("span",{staticClass:"line-number"},[s._v("96")]),n("br"),n("span",{staticClass:"line-number"},[s._v("97")]),n("br"),n("span",{staticClass:"line-number"},[s._v("98")]),n("br"),n("span",{staticClass:"line-number"},[s._v("99")]),n("br"),n("span",{staticClass:"line-number"},[s._v("100")]),n("br"),n("span",{staticClass:"line-number"},[s._v("101")]),n("br"),n("span",{staticClass:"line-number"},[s._v("102")]),n("br"),n("span",{staticClass:"line-number"},[s._v("103")]),n("br"),n("span",{staticClass:"line-number"},[s._v("104")]),n("br"),n("span",{staticClass:"line-number"},[s._v("105")]),n("br"),n("span",{staticClass:"line-number"},[s._v("106")]),n("br"),n("span",{staticClass:"line-number"},[s._v("107")]),n("br"),n("span",{staticClass:"line-number"},[s._v("108")]),n("br"),n("span",{staticClass:"line-number"},[s._v("109")]),n("br"),n("span",{staticClass:"line-number"},[s._v("110")]),n("br"),n("span",{staticClass:"line-number"},[s._v("111")]),n("br"),n("span",{staticClass:"line-number"},[s._v("112")]),n("br"),n("span",{staticClass:"line-number"},[s._v("113")]),n("br"),n("span",{staticClass:"line-number"},[s._v("114")]),n("br"),n("span",{staticClass:"line-number"},[s._v("115")]),n("br"),n("span",{staticClass:"line-number"},[s._v("116")]),n("br"),n("span",{staticClass:"line-number"},[s._v("117")]),n("br"),n("span",{staticClass:"line-number"},[s._v("118")]),n("br"),n("span",{staticClass:"line-number"},[s._v("119")]),n("br"),n("span",{staticClass:"line-number"},[s._v("120")]),n("br"),n("span",{staticClass:"line-number"},[s._v("121")]),n("br"),n("span",{staticClass:"line-number"},[s._v("122")]),n("br"),n("span",{staticClass:"line-number"},[s._v("123")]),n("br"),n("span",{staticClass:"line-number"},[s._v("124")]),n("br"),n("span",{staticClass:"line-number"},[s._v("125")]),n("br"),n("span",{staticClass:"line-number"},[s._v("126")]),n("br"),n("span",{staticClass:"line-number"},[s._v("127")]),n("br"),n("span",{staticClass:"line-number"},[s._v("128")]),n("br"),n("span",{staticClass:"line-number"},[s._v("129")]),n("br"),n("span",{staticClass:"line-number"},[s._v("130")]),n("br"),n("span",{staticClass:"line-number"},[s._v("131")]),n("br"),n("span",{staticClass:"line-number"},[s._v("132")]),n("br"),n("span",{staticClass:"line-number"},[s._v("133")]),n("br"),n("span",{staticClass:"line-number"},[s._v("134")]),n("br"),n("span",{staticClass:"line-number"},[s._v("135")]),n("br"),n("span",{staticClass:"line-number"},[s._v("136")]),n("br"),n("span",{staticClass:"line-number"},[s._v("137")]),n("br"),n("span",{staticClass:"line-number"},[s._v("138")]),n("br"),n("span",{staticClass:"line-number"},[s._v("139")]),n("br")])])])}),[],!1,null,null,null);n.default=t.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{530:function(s,n,e){"use strict";e.r(n);var a=e(8),t=Object(a.a)({},(function(){var s=this,n=s._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("p",[n("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[s._v("完整版"),n("OutboundLink")],1),s._v("目录结构")]),s._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("├── .github # GitHub 配置文件\n│ ├── ISSUE_TEMPLATE # 问题提交参考模板\n│ ├── workflows git # 工作流\n├── .husky # 代码提交前校验配置文件\n├── .vscode # IDE 工具推荐配置文件\n│ │ ├── extensions.json # 一键安装平台推荐的 vscode 插件\n│ │ ├── settings.json # 设置扩展程序或 vscode 编辑器的一些属性\n│ │ ├── vue3.0.code-snippets # vue3.0 代码片段\n│ │ └── vue3.2.code-snippets # vue3.2 代码片段\n│ │ └── vue3.3.code-snippets # vue3.3 代码片段\n├── build # 构建工具\n│ │ ├── cdn.ts # 打包时采用 cdn 模式\n│ │ ├── compress.ts # 打包时启用 gzip 压缩或 brotli 压缩\n│ │ ├── info.ts # 输出打包信息(大小、用时)\n│ │ ├── optimize.ts # vite 依赖预构建配置项\n│ │ ├── plugins.ts # vite 相关插件存放处\n│ │ ├── utils.ts # 构建工具常用方法抽离\n├── locales # 国际化文件存放处\n│ │ ├── en.yaml # 英文配置\n│ │ ├── zh-CN.yaml # 中文配置\n├── mock # mock 模拟后台数据\n│ │ ├── asyncRoutes.ts # 模拟后台返回动态路由\n│ │ ├── ...\n├── node_modules # 模块依赖\n├── public # 静态资源\n│ │ ├── audio # 音频文件\n│ │ ├── html # 静态 iframe 页面\n│ │ ├── wasm # wasm 文件以及胶水代码\n│ │ ├── favicon.ico # favicon\n│ │ ├── logo.svg # logo\n│ │ ├── platform-config.json # 全局配置文件(打包后修改也可生效)\n├── src\n│ ├── api # 接口请求统一管理\n│ ├── assets # 字体、图片等静态资源\n│ ├── components # 自定义通用组件\n│ │ ├── ReAnimateSelector # [animate.css](https://animate.style/) 选择器组件\n│ │ ├── ReAuth # 按钮级别权限组件(根据路由meta中的auths字段进行判断)\n│ │ ├── ReBarcode # 条形码组件\n│ │ ├── ReCol # 封装 element-plus 的 el-col 组件\n│ │ ├── ReCountTo # 数字动画组件\n│ │ ├── ReCropper # 图片裁剪组件\n│ │ ├── ReCropperPreview # 图片裁剪预览组件\n│ │ ├── ReDialog # 基于 element-plus 中 el-dialog 组件开发的函数式弹框\n│ │ ├── ReFlicker # 圆点、方形闪烁动画组件\n│ │ ├── ReFlop # 时间翻牌组件\n│ │ ├── ReFlowChart # LogicFlow 流程图组件\n│ │ ├── ReIcon # 图标组件\n│ │ ├── ReImageVerify # 图形验证码组件\n│ │ ├── ReMap # 高德地图组件\n│ │ ├── RePerms # 按钮级别权限组件(根据登录接口返回的permissions字段进行判断)\n│ │ ├── RePureTableBar # 配合 `@pureadmin/table` 实现快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */\n│ │ ├── ReQrcode # 二维码组件\n│ │ ├── ReSeamlessScroll # 无缝滚动组件\n│ │ ├── ReSegmented # 分段控制器组件\n│ │ ├── ReSelector # 选择器组件\n│ │ ├── ReSplitPane # 切割面板组件\n│ │ ├── ReText # 支持 Tooltip 提示的文本省略组件\n│ │ ├── ReTreeLine # 树形连接线组件(基于element-plus)\n│ │ ├── ReTypeit # 打字机效果组件\n│ │ ├── ReVxeTableBar # 配合 vxe-table 实现快速便捷的表格操作\n│ ├── config # 获取平台动态全局配置\n│ ├── directives # 自定义指令\n│ │ ├── auth # 按钮级别权限指令(根据路由meta中的auths字段进行判断)\n│ │ ├── copy # 文本复制指令(默认双击复制)\n│ │ ├── longpress # 长按指令\n│ │ ├── optimize # 防抖、节流指令\n│ │ ├── perms # 按钮级别权限指令(根据登录接口返回的permissions字段进行判断)\n│ │ ├── ripple # 水波纹效果指令\n│ ├── layout # 主要页面布局\n│ ├── plugins # 处理一些库或插件,导出更方便的 api\n│ ├── router # 路由配置\n│ ├── store # pinia 状态管理\n│ ├── style # 全局样式\n│ │ ├── dark.scss # 暗黑模式样式适配文件\n│ │ ├── element-plus.scss # 全局覆盖 element-plus 样式文件\n│ │ ├── reset.scss # 全局重置样式文件\n│ │ ├── sidebar.scss # layout 布局样式文件\n│ │ ├── tailwind.css # tailwindcss 自定义样式配置文件\n│ │ ├── ...\n│ ├── utils # 全局工具方法\n│ │ ├── http # 封装 axios 文件\n│ │ ├── localforage # 二次封装 localforage (https://localforage.docschina.org/) 支持设置过期时间,提供完整的类型提示\n│ │ ├── progress # 封装 nprogress\n│ │ └── auth.ts # 处理用户信息和 token 相关\n│ │ └── chinaArea.ts # 汉字转区域码\n│ │ └── globalPolyfills.ts # 解决项目可能因为安装某个依赖出现 `global is not defined` 报错\n│ │ └── message.ts # 消息提示函数\n│ │ ├── mitt.ts # 触发公共事件,类似 EventBus\n│ │ ├── preventDefault.ts # 阻止键盘F12、浏览器默认右键菜单、页面元素选中、图片默认可拖动的方法\n│ │ ├── print.ts # 打印函数\n│ │ ├── propTypes.ts # 二次封装 vue 的 propTypes\n│ │ ├── responsive.ts # 全局响应式 storage 配置\n│ │ ├── sso.ts # 前端单点登录逻辑处理\n│ │ ├── tree.ts # 树结构相关处理函数\n│ ├── views # 存放编写业务代码页面\n│ ├── App.vue # 入口页面\n│ ├── main.ts # 入口文件\n├── types # 全局 TS 类型配置\n│ │ ├── directives.d.ts # 全局自定义指令类型声明\n│ │ ├── global-components.d.ts # 自定义全局组件获得 Volar 提示(自定义的全局组件需要在这里声明下才能获得 Volar 类型提示哦)\n│ │ ├── global.d.ts # 全局类型声明,无需引入直接在 `.vue` 、`.ts` 、`.tsx` 文件使用即可获得类型提示\n│ │ ├── index.d.ts # 此文件跟同级目录的 global.d.ts 文件一样也是全局类型声明,只不过这里存放一些零散的全局类型,无需引入直接在 .vue 、.ts 、.tsx 文件使用即可获得类型提示\n│ │ ├── router.d.ts # 全局路由类型声明\n│ │ ├── shims-tsx.d.ts # 该文件是为了给 .tsx 文件提供类型支持,在编写时能正确识别语法\n│ │ └── shims-vue.d.ts # .vue、.scss 文件不是常规的文件类型,typescript 无法识别,所以我们需要通过下图的代码告诉 typescript 这些文件的类型,防止类型报错\n├── .browserslistrc # 配置目标浏览器的环境\n├── .dockerignore # 排除不需要上传到 docker 服务端的文件或目录\n├── .editorconfig # 编辑器读取文件格式及样式定义配置 https://editorconfig.org/\n├── .env # 全局环境变量配置(当 .env 文件与 .env.development、.env.production、.env.staging 这三个文件之一存在相同的配置 key 时,.env 优先级更低)\n├── .env.development # 开发环境变量配置\n├── .env.production # 生产环境变量配置\n├── .env.staging # 预发布环境变量配置\n├── .gitattributes # 自定义指定文件属性\n├── .gitignore # git 提交忽略文件\n├── .gitpod.yml # gitpod 部署配置\n├── .lintstagedrc # lint-staged 配置\n├── .markdownlint.json # markdown 格式检查配置\n├── .npmrc # npm 配置文件\n├── .nvmrc # 用于指定在使用 Node Version Manager(NVM)时要使用的特定 Node.js 版本\n├── .prettierignore # prettier 语法检查忽略文件\n├── .prettierrc.js # prettier 插件配置\n├── .stylelintignore # stylelint 语法检查忽略文件\n├── CHANGELOG.en_US.md # 版本更新日志(英文版)\n├── CHANGELOG.md # 版本更新日志(英文版)\n├── CHANGELOG.zh_CN.md # 版本更新日志(中文版)\n├── Dockerfile # 用来构建 docker 镜像\n├── LICENSE # 证书\n├── README.en-US.md # README(英文版)\n├── README.md # README\n├── commitlint.config.js # git 提交前检查配置\n├── eslint.config.js # eslint 语法检查配置\n├── index.html # html 主入口\n├── package.json # 依赖包管理以及命令配置\n├── pnpm-lock.yaml # 依赖包版本锁定文件\n├── postcss.config.js # postcss 插件配置\n├── stylelint.config.js # stylelint 配置\n├── tailwind.config.ts # tailwindcss 配置\n├── tsconfig.json # typescript 配置\n└── vite.config.ts # vite 配置\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br"),n("span",{staticClass:"line-number"},[s._v("56")]),n("br"),n("span",{staticClass:"line-number"},[s._v("57")]),n("br"),n("span",{staticClass:"line-number"},[s._v("58")]),n("br"),n("span",{staticClass:"line-number"},[s._v("59")]),n("br"),n("span",{staticClass:"line-number"},[s._v("60")]),n("br"),n("span",{staticClass:"line-number"},[s._v("61")]),n("br"),n("span",{staticClass:"line-number"},[s._v("62")]),n("br"),n("span",{staticClass:"line-number"},[s._v("63")]),n("br"),n("span",{staticClass:"line-number"},[s._v("64")]),n("br"),n("span",{staticClass:"line-number"},[s._v("65")]),n("br"),n("span",{staticClass:"line-number"},[s._v("66")]),n("br"),n("span",{staticClass:"line-number"},[s._v("67")]),n("br"),n("span",{staticClass:"line-number"},[s._v("68")]),n("br"),n("span",{staticClass:"line-number"},[s._v("69")]),n("br"),n("span",{staticClass:"line-number"},[s._v("70")]),n("br"),n("span",{staticClass:"line-number"},[s._v("71")]),n("br"),n("span",{staticClass:"line-number"},[s._v("72")]),n("br"),n("span",{staticClass:"line-number"},[s._v("73")]),n("br"),n("span",{staticClass:"line-number"},[s._v("74")]),n("br"),n("span",{staticClass:"line-number"},[s._v("75")]),n("br"),n("span",{staticClass:"line-number"},[s._v("76")]),n("br"),n("span",{staticClass:"line-number"},[s._v("77")]),n("br"),n("span",{staticClass:"line-number"},[s._v("78")]),n("br"),n("span",{staticClass:"line-number"},[s._v("79")]),n("br"),n("span",{staticClass:"line-number"},[s._v("80")]),n("br"),n("span",{staticClass:"line-number"},[s._v("81")]),n("br"),n("span",{staticClass:"line-number"},[s._v("82")]),n("br"),n("span",{staticClass:"line-number"},[s._v("83")]),n("br"),n("span",{staticClass:"line-number"},[s._v("84")]),n("br"),n("span",{staticClass:"line-number"},[s._v("85")]),n("br"),n("span",{staticClass:"line-number"},[s._v("86")]),n("br"),n("span",{staticClass:"line-number"},[s._v("87")]),n("br"),n("span",{staticClass:"line-number"},[s._v("88")]),n("br"),n("span",{staticClass:"line-number"},[s._v("89")]),n("br"),n("span",{staticClass:"line-number"},[s._v("90")]),n("br"),n("span",{staticClass:"line-number"},[s._v("91")]),n("br"),n("span",{staticClass:"line-number"},[s._v("92")]),n("br"),n("span",{staticClass:"line-number"},[s._v("93")]),n("br"),n("span",{staticClass:"line-number"},[s._v("94")]),n("br"),n("span",{staticClass:"line-number"},[s._v("95")]),n("br"),n("span",{staticClass:"line-number"},[s._v("96")]),n("br"),n("span",{staticClass:"line-number"},[s._v("97")]),n("br"),n("span",{staticClass:"line-number"},[s._v("98")]),n("br"),n("span",{staticClass:"line-number"},[s._v("99")]),n("br"),n("span",{staticClass:"line-number"},[s._v("100")]),n("br"),n("span",{staticClass:"line-number"},[s._v("101")]),n("br"),n("span",{staticClass:"line-number"},[s._v("102")]),n("br"),n("span",{staticClass:"line-number"},[s._v("103")]),n("br"),n("span",{staticClass:"line-number"},[s._v("104")]),n("br"),n("span",{staticClass:"line-number"},[s._v("105")]),n("br"),n("span",{staticClass:"line-number"},[s._v("106")]),n("br"),n("span",{staticClass:"line-number"},[s._v("107")]),n("br"),n("span",{staticClass:"line-number"},[s._v("108")]),n("br"),n("span",{staticClass:"line-number"},[s._v("109")]),n("br"),n("span",{staticClass:"line-number"},[s._v("110")]),n("br"),n("span",{staticClass:"line-number"},[s._v("111")]),n("br"),n("span",{staticClass:"line-number"},[s._v("112")]),n("br"),n("span",{staticClass:"line-number"},[s._v("113")]),n("br"),n("span",{staticClass:"line-number"},[s._v("114")]),n("br"),n("span",{staticClass:"line-number"},[s._v("115")]),n("br"),n("span",{staticClass:"line-number"},[s._v("116")]),n("br"),n("span",{staticClass:"line-number"},[s._v("117")]),n("br"),n("span",{staticClass:"line-number"},[s._v("118")]),n("br"),n("span",{staticClass:"line-number"},[s._v("119")]),n("br"),n("span",{staticClass:"line-number"},[s._v("120")]),n("br"),n("span",{staticClass:"line-number"},[s._v("121")]),n("br"),n("span",{staticClass:"line-number"},[s._v("122")]),n("br"),n("span",{staticClass:"line-number"},[s._v("123")]),n("br"),n("span",{staticClass:"line-number"},[s._v("124")]),n("br"),n("span",{staticClass:"line-number"},[s._v("125")]),n("br"),n("span",{staticClass:"line-number"},[s._v("126")]),n("br"),n("span",{staticClass:"line-number"},[s._v("127")]),n("br"),n("span",{staticClass:"line-number"},[s._v("128")]),n("br"),n("span",{staticClass:"line-number"},[s._v("129")]),n("br"),n("span",{staticClass:"line-number"},[s._v("130")]),n("br"),n("span",{staticClass:"line-number"},[s._v("131")]),n("br"),n("span",{staticClass:"line-number"},[s._v("132")]),n("br"),n("span",{staticClass:"line-number"},[s._v("133")]),n("br"),n("span",{staticClass:"line-number"},[s._v("134")]),n("br"),n("span",{staticClass:"line-number"},[s._v("135")]),n("br"),n("span",{staticClass:"line-number"},[s._v("136")]),n("br"),n("span",{staticClass:"line-number"},[s._v("137")]),n("br"),n("span",{staticClass:"line-number"},[s._v("138")]),n("br"),n("span",{staticClass:"line-number"},[s._v("139")]),n("br")])])])}),[],!1,null,null,null);n.default=t.exports}}]); \ No newline at end of file diff --git a/assets/js/3.7d860df7.js b/assets/js/3.b08663a6.js similarity index 99% rename from assets/js/3.7d860df7.js rename to assets/js/3.b08663a6.js index f586445e..ee61f0ea 100644 --- a/assets/js/3.7d860df7.js +++ b/assets/js/3.b08663a6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{462:function(s,t,a){s.exports=a.p+"assets/img/package.87674ebf.jpg"},463:function(s,t,a){s.exports=a.p+"assets/img/error1.ab521e6b.png"},464:function(s,t,a){s.exports=a.p+"assets/img/sass.9620e491.png"},465:function(s,t){s.exports="data:image/png;base64,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"},466:function(s,t,a){s.exports=a.p+"assets/img/lodash.c0dc4ad5.png"},467:function(s,t,a){s.exports=a.p+"assets/img/optimized.6a8e5a33.png"},468:function(s,t,a){s.exports=a.p+"assets/img/vite.8e5d23a7.png"},469:function(s,t,a){s.exports=a.p+"assets/img/ep1.ce2c04be.png"},470:function(s,t,a){s.exports=a.p+"assets/img/ep2.3da63a30.png"},471:function(s,t,a){s.exports=a.p+"assets/img/ep3.c79de1fd.png"},472:function(s,t,a){s.exports=a.p+"assets/img/ep4.3b87096e.png"},473:function(s,t,a){s.exports=a.p+"assets/img/mac.48a1e54e.png"},474:function(s,t,a){s.exports=a.p+"assets/img/log.b04d7f89.png"},475:function(s,t,a){s.exports=a.p+"assets/img/hotlog.e79ec58e.png"},476:function(s,t,a){s.exports=a.p+"assets/img/namespace.1bcb6094.jpg"},477:function(s,t,a){s.exports=a.p+"assets/img/unexpected.768982e6.jpg"},478:function(s,t,a){s.exports=a.p+"assets/img/npm1.4adac956.jpg"},479:function(s,t,a){s.exports=a.p+"assets/img/npm2.ae934786.jpg"},480:function(s,t,a){s.exports=a.p+"assets/img/npm3.0c92b8b3.jpg"},481:function(s,t,a){s.exports=a.p+"assets/img/grey.be2d222b.jpg"},482:function(s,t,a){s.exports=a.p+"assets/img/dialog.2561f9b1.jpg"},483:function(s,t,a){s.exports=a.p+"assets/img/dialog-dark.2f6c70a3.jpg"},484:function(s,t){s.exports="data:image/jpeg;base64,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"},485:function(s,t){s.exports="data:image/jpeg;base64,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"},486:function(s,t,a){s.exports=a.p+"assets/img/messagebox.a8406047.jpg"},487:function(s,t,a){s.exports=a.p+"assets/img/messagebox-dark.165a24ed.jpg"},488:function(s,t){s.exports="data:image/jpeg;base64,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"},489:function(s,t){s.exports="data:image/jpeg;base64,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zzzzzzzzzzzzzzzzzzzy3zzwT777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777/xAAjEQEAAgICAgICAwAAAAAAAAABABEhMRBBQFAgUTBhcJGx/9oACAEDAQE/EPCFNcS2LecRA4mDDNmaDw1r5IWx1iJTMQs1LwVj5ELJeCseMqK8VEThsubJUud5a9CWuckDu4CDbOxhasZbCIwO+7iVcIl3BbjELu5bCIgd93NwlFd1EbHrwtRHTymk1M7mlTomqOvhHFkUC2Pg7Rqt+COLIqU0w14WvXfAEFLMJKlRLKeO5WqhlauVKiBSypUrVxNruWdrhiWdpUqIsOOJas3LO1ypUJSn79tT0KKj8P2zVcMNxR1HcYz9xzO59vEesVq+pw9Vx/t/nqhTX8B//8QAIBEAAwACAwADAQEAAAAAAAAAAAERITEQQEEgMFBgcP/aAAgBAgEBPxDpQiIiLvOJt8HlgQoRsLhUTljRC2Ik8CCPZMnvyojJk96yVlxVB8MIeiyHkic7InGGOtDabUR4A6saIsxCAtUgixia5BpSY61CLMQgLXIajK6SiFGujvKxb5babMYb3i3C38IZqJNuIXm+CphfCGas1GwezX0ZpOI0bqRSiyicdXGWEao8IlCijRupFFLLwNLwhaDWJWkWUSmVngRx4QtCijHSS/Wn4LaSr+5fQ+qJRfyZr+U1f8D/AP/EACwQAQACAQIGAgAGAwEBAAAAAAEAEfAhMRBBUWGhsSBxMGCBkcHRQFDx4YD/2gAIAQEAAT8QgK0TtCYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSDzOt3tKdPMBLqsTeU6eYBValWNMp08w023zmEmEmEmEmEmEmEmEmEmEmEmEmEmEh59vVIg/wDmVytNyt5WuwDqeJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhJhIL/AGHEVdX8oorGOyKV4N7/AAV3UqJ3P3zufvnc/fNJBupi7iVFwLpFrRi7qVEWEg3p+AwOpzOX4KEFroEJGked3wEoDqhakHImowzQYfxdVBN+007H/IadVd+bcN//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"},490:function(s,t,a){s.exports=a.p+"assets/img/github.c7b5c59a.png"},491:function(s,t,a){s.exports=a.p+"assets/img/xrk1.896d2be1.jpg"},492:function(s,t,a){s.exports=a.p+"assets/img/xrk2.005224e0.jpg"},493:function(s,t,a){s.exports=a.p+"assets/img/eslint.4aa52dda.jpg"},494:function(s,t,a){s.exports=a.p+"assets/img/eslint1.120c4f15.jpg"},551:function(s,t,a){"use strict";a.r(t);var n=a(8),e=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h2",{attrs:{id:"是否支持-ie"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#是否支持-ie"}},[s._v("#")]),s._v(" 是否支持 "),t("code",[s._v("IE")]),s._v(" ?")]),s._v(" "),t("p",[s._v("答:"),t("code",[s._v("vue3")]),s._v(" 官方说过不支持 "),t("code",[s._v("IE")]),s._v(",具体看 "),t("a",{attrs:{href:"https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("rfcs"),t("OutboundLink")],1),s._v(" 和 "),t("a",{attrs:{href:"https://cn.vuejs.org/about/faq.html#what-browsers-does-vue-support",target:"_blank",rel:"noopener noreferrer"}},[s._v("cn.vuejs"),t("OutboundLink")],1),s._v("。当然有人会说 "),t("a",{attrs:{href:"https://cn.vitejs.dev/plugins/#vitejsplugin-legacy",target:"_blank",rel:"noopener noreferrer"}},[s._v("@vitejs/plugin-legacy"),t("OutboundLink")],1),s._v(" 会支持 "),t("code",[s._v("IE")]),s._v(",它的确会,但是它是一款 "),t("code",[s._v("vite")]),s._v(" 插件,只对非 "),t("code",[s._v("vue3")]),s._v(" 的框架进行支持,目前没有任何一款工具可以使 "),t("code",[s._v("vue3")]),s._v(" 支持 "),t("code",[s._v("IE")]),s._v(" 浏览器,如果您项目需要支持 "),t("code",[s._v("IE")]),s._v(",请慎重考虑使用本平台。如果您既要使用最新技术并且又想稳定又要兼容 "),t("code",[s._v("IE")]),s._v(" 浏览器的话可以选择 "),t("code",[s._v("vue2.7")]),s._v(" 的某个版本搭配 "),t("code",[s._v("vue-cli")]),s._v(" 最新版本")]),s._v(" "),t("h2",{attrs:{id:"精简版是干啥的"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#精简版是干啥的"}},[s._v("#")]),s._v(" 精简版是干啥的?")]),s._v(" "),t("ul",[t("li",[s._v("答:实际项目开发请使用精简版,精简版是基于 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin",target:"_blank",rel:"noopener noreferrer"}},[s._v("vue-pure-admin"),t("OutboundLink")],1),s._v(" 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 "),t("a",{attrs:{href:"https://element-plus.org",target:"_blank",rel:"noopener noreferrer"}},[s._v("element-plus"),t("OutboundLink")],1),s._v(" 的情况下仍然低于 "),t("code",[s._v("2.3MB")]),s._v(",并且会永久同步完整版的代码。开启 "),t("code",[s._v("brotli")]),s._v(" 压缩和 "),t("code",[s._v("cdn")]),s._v(" 替换本地库模式后,打包大小低于 "),t("code",[s._v("350kb")])])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(462),loading:"lazy"}})]),s._v(" "),t("h2",{attrs:{id:"husky-是什么-可以删除-husky-提交前校验吗-如何彻底删除"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#husky-是什么-可以删除-husky-提交前校验吗-如何彻底删除"}},[s._v("#")]),s._v(" "),t("code",[s._v("husky")]),s._v(" 是什么?可以删除 "),t("code",[s._v("husky")]),s._v(" 提交前校验吗?如何彻底删除?")]),s._v(" "),t("ul",[t("li",[t("p",[t("code",[s._v("husky")]),s._v(" 是什么?"),t("br"),s._v("\n答:"),t("a",{attrs:{href:"https://typicode.github.io/husky/#/",target:"_blank",rel:"noopener noreferrer"}},[s._v("官方文档"),t("OutboundLink")],1)])]),s._v(" "),t("li",[t("p",[s._v("可以删除 "),t("code",[s._v("husky")]),s._v(" 提交前校验吗?"),t("br"),s._v("\n答:如果您们提交代码不需要严格的提交前校验,这当然可以删除")])]),s._v(" "),t("li",[t("p",[s._v("如何彻底删除?"),t("br"),s._v("\n① 删除根目录 "),t("code",[s._v(".husky")]),s._v(" 文件夹以及里面所有文件"),t("br"),s._v("\n② 删除根目录 "),t("code",[s._v("commitlint.config.js")]),s._v(" 文件"),t("br"),s._v("\n③ 来到 "),t("code",[s._v("package.json")]),s._v(" 下的 "),t("code",[s._v("devDependencies")]),s._v(" ,删除 "),t("code",[s._v("@commitlint/cli")]),s._v(" 、 "),t("code",[s._v("@commitlint/config-conventional")]),s._v(" 、 "),t("code",[s._v("@commitlint/types")]),s._v(" 、 "),t("code",[s._v("husky")]),s._v(" 、 "),t("code",[s._v("lint-staged")]),s._v(" 这些依赖"),t("br"),s._v("\n④ 最后来到 "),t("code",[s._v("package.json")]),s._v(" 下的 "),t("code",[s._v("scripts")]),s._v(" ,删除 "),t("code",[s._v('"prepare": "husky"')]),s._v(" 命令即可")])])]),s._v(" "),t("h2",{attrs:{id:"为什么使用-pnpm-pnpm-天生支持-monorepo-为什么平台不采用这种模式呢"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么使用-pnpm-pnpm-天生支持-monorepo-为什么平台不采用这种模式呢"}},[s._v("#")]),s._v(" 为什么使用 "),t("code",[s._v("pnpm")]),s._v(" ? "),t("code",[s._v("pnpm")]),s._v(" 天生支持 "),t("code",[s._v("monorepo")]),s._v(",为什么平台不采用这种模式呢?")]),s._v(" "),t("ul",[t("li",[t("p",[s._v("为什么使用 "),t("code",[s._v("pnpm")]),s._v("?"),t("br"),s._v("\n① 节约磁盘空间并提升安装速度"),t("br"),s._v("\n当使用 "),t("code",[s._v("npm")]),s._v(" 或 "),t("code",[s._v("Yarn")]),s._v(" 时,如果您有 "),t("code",[s._v("100")]),s._v(" 个项目使用了某个依赖,就会有 "),t("code",[s._v("100")]),s._v(" 份该依赖的副本保存在硬盘上。 对于 "),t("code",[s._v("pnpm")]),s._v(" ,依赖项将存储在一个内容可寻址的仓库中,因此:如果您用到了某依赖项的不同版本,那么只会将有差异的文件添加到仓库。例如,如果它有 "),t("code",[s._v("100")]),s._v(" 个文件,而新版本只改变了其中 "),t("code",[s._v("1")]),s._v(" 个文件。那么 "),t("code",[s._v("pnpm update")]),s._v(" 只会向存储中心添加 "),t("code",[s._v("1")]),s._v(" 个新文件,不会仅因为单一的改变而克隆整个依赖。所有文件都会存储在硬盘上的同一位置。 当多个包("),t("code",[s._v("package")]),s._v(")被安装时,所有文件都会从同一位置创建硬链接,不会占用额外的磁盘空间。 这允许您跨项目地共享同一版本的依赖。最终您节省了大量与项目和依赖成比例的硬盘空间,并且拥有更快的安装速度!"),t("br"),s._v("\n② 创建非扁平化的 "),t("code",[s._v("node_modules")]),s._v(" 文件夹"),t("br"),s._v("\n当使用 "),t("code",[s._v("npm")]),s._v(" 安装依赖时,所有的依赖都会被提升到模块的根目录。 因此,项目可以访问到未被添加进 当前 项目的依赖。"),t("code",[s._v("pnpm")]),s._v(" 使用软链的方式将项目的直接依赖添加进模块文件夹的根目录。")])]),s._v(" "),t("li",[t("p",[t("code",[s._v("pnpm")]),s._v(" 天生支持 "),t("code",[s._v("monorepo")]),s._v(",为什么平台不采用这种模式呢?"),t("br"),s._v("\n答:我们先来简单介绍一下什么是 "),t("code",[s._v("monorepo")]),s._v(" ,"),t("code",[s._v("monorepos")]),s._v(" 指单一代码库,在版本控制系统的单个代码库里包含了许多项目的代码,与它对应的是 "),t("code",[s._v("multirepos")]),s._v(" 多代码库,每个项目都储存在一个完全独立的、版本控制的代码库中。"),t("code",[s._v("monorepo")]),s._v(" 可能并不适合大多数项目,毕竟大家习惯了多代码库开发,所以平台不采用这种模式。"),t("br"),s._v(" "),t("a",{attrs:{href:"https://baijiahao.baidu.com/s?id=1663844045880515134&wfr=spider&for=pc",target:"_blank",rel:"noopener noreferrer"}},[s._v("推荐文章:Monorepo 可能没您想象中那么香"),t("OutboundLink")],1)])])]),s._v(" "),t("h2",{attrs:{id:"平台出现报错-cannot-find-module-zougt-some-loader-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#平台出现报错-cannot-find-module-zougt-some-loader-utils"}},[s._v("#")]),s._v(" 平台出现报错 "),t("code",[s._v("Cannot find module '@zougt/some-loader-utils'")])]),s._v(" "),t("ul",[t("li",[s._v("为什么会出现 "),t("code",[s._v("Cannot find module '@zougt/some-loader-utils'")]),t("br"),s._v("\n答:平台路径请不要使用中文命名!!!会造成解析乱码!!!请使用全英文路径!!!")])]),s._v(" "),t("h2",{attrs:{id:"平台出现报错-access-is-denied-windows-常见"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#平台出现报错-access-is-denied-windows-常见"}},[s._v("#")]),s._v(" 平台出现报错 "),t("code",[s._v("Access is denied")]),s._v("("),t("code",[s._v("windows")]),s._v(" 常见)")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(463),loading:"lazy"}})]),s._v(" "),t("ul",[t("li",[s._v("解决办法:请遵循平台要求,安装对应的 "),t("code",[s._v("node")]),s._v(" 和 "),t("code",[s._v("pnpm")]),s._v(" 版本 ( "),t("code",[s._v("node")]),s._v(" 18.18.0 版本及以上、"),t("code",[s._v("pnpm")]),s._v(" 9 版本及以上)")])]),s._v(" "),t("h2",{attrs:{id:"安装依赖时出现报错-cannot-find-module-sass"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装依赖时出现报错-cannot-find-module-sass"}},[s._v("#")]),s._v(" 安装依赖时出现报错 "),t("code",[s._v("Cannot find module 'sass'")])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(464),loading:"lazy"}})]),s._v(" "),t("p",[s._v("答:删除平台的 "),t("code",[s._v("pnpm-lock.yaml")]),s._v(" 和 "),t("code",[s._v("node_modules")]),s._v(" ,重新执行命令 "),t("code",[s._v("pnpm install")]),s._v(" 安装依赖即可。(重点:"),t("code",[s._v("文件存放路径不要带有中文")]),s._v(")")]),s._v(" "),t("h2",{attrs:{id:"动态路由刷新出现警告-⚠️"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#动态路由刷新出现警告-⚠️"}},[s._v("#")]),s._v(" 动态路由刷新出现警告 ⚠️")]),s._v(" "),t("ul",[t("li",[s._v("为什么会出现警告?会不会影响使用?"),t("br"),s._v("\n答:这个警告是 "),t("code",[s._v("vue-router")]),s._v(" 作者故意留下的,咱也不知道为啥,详情看 "),t("a",{attrs:{href:"https://github.com/vuejs/router/issues/521#issuecomment-706680593",target:"_blank",rel:"noopener noreferrer"}},[s._v("issues"),t("OutboundLink")],1),s._v("。不会影响使用,功能一切表现正常,平台打包部署到生产环境就不会出现警告了。\n已通过 "),t("a",{attrs:{href:"https://www.npmjs.com/package/vite-plugin-router-warn",target:"_blank",rel:"noopener noreferrer"}},[s._v("vite-plugin-router-warn"),t("OutboundLink")],1),s._v(" 解决。"),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/commit/b9e6556409a755655bf7f769ad1c340d33c66c59#commitcomment-134220309",target:"_blank",rel:"noopener noreferrer"}},[s._v("点击查看具体解决代码"),t("OutboundLink")],1)])]),s._v(" "),t("h2",{attrs:{id:"平台出现警告-rank-only-the-home-page-can-be-0-⚠️"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#平台出现警告-rank-only-the-home-page-can-be-0-⚠️"}},[s._v("#")]),s._v(" 平台出现警告 "),t("code",[s._v("rank only the home page can be 0")]),s._v(" ⚠️")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(465),loading:"lazy"}})]),s._v(" "),t("p",[s._v("答:路由 "),t("code",[s._v("meta")]),s._v(" 里的 "),t("code",[s._v("rank")]),s._v(" 字段只有 "),t("code",[s._v("home")]),s._v(" 路由才能是 "),t("code",[s._v("0")]),s._v(" ,其他均不能为 "),t("code",[s._v("0")]),s._v(" 。作为一种规范,"),t("code",[s._v("rank")]),s._v(" 字段最好唯一。"),t("code",[s._v("rank")]),s._v(" 字段代表菜单的排序,而且只能是顶级菜单进行排序,也就是最外层的菜单,为什么这么设计呢。详见"),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/issues/154#issuecomment-996571156",target:"_blank",rel:"noopener noreferrer"}},[s._v("issues/154"),t("OutboundLink")],1),s._v("。")]),s._v(" "),t("h2",{attrs:{id:"为什么平台使用-lodash-unified-而不是使用-lodash-es-呢"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么平台使用-lodash-unified-而不是使用-lodash-es-呢"}},[s._v("#")]),s._v(" 为什么平台使用 "),t("code",[s._v("lodash-unified")]),s._v(" ,而不是使用 "),t("code",[s._v("lodash-es")]),s._v(" 呢?")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(466),loading:"lazy"}})]),s._v(" "),t("p",[s._v("答:其实 "),t("code",[s._v("lodash-unified")]),s._v(" 只是对 "),t("code",[s._v("lodash-es")]),s._v(" 做了 "),t("code",[s._v("ESM")]),s._v(" (ESModule)格式支持并兼容 "),t("code",[s._v("CJS")]),s._v(" (CommonJS)格式,"),t("code",[s._v("vite")]),s._v(" 又是使用原生 "),t("code",[s._v("ESM")]),s._v(" 文件快速启动。这里需要注意的是 "),t("code",[s._v("lodash-unified")]),s._v(" 和 "),t("code",[s._v("lodash-es")]),s._v(" 需要同时安装。"),t("br"),s._v("\n用法:"),t("code",[s._v('import { sum } from "lodash-unified"')]),s._v(" 目前均已被 "),t("a",{attrs:{href:"https://pure-admin-utils.netlify.app/",target:"_blank",rel:"noopener noreferrer"}},[s._v("@pureadmin/utils"),t("OutboundLink")],1),s._v(" 代替。")]),s._v(" "),t("h2",{attrs:{id:"为什么平台使用手动按需引入-而不是使用-unplugin-vue-components-插件自动按需引入呢"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么平台使用手动按需引入-而不是使用-unplugin-vue-components-插件自动按需引入呢"}},[s._v("#")]),s._v(" 为什么平台使用手动按需引入,而不是使用 "),t("code",[s._v("unplugin-vue-components")]),s._v(" 插件自动按需引入呢?")]),s._v(" "),t("p",[s._v("答:我尝试将 "),t("code",[s._v("unplugin-element-plus")]),s._v(" 替换成 "),t("code",[s._v("unplugin-vue-components")]),s._v(" ,但似乎 "),t("code",[s._v("unplugin-vue-components")]),s._v(" 表现不是太好,整体来说有些问题,可以看看 "),t("a",{attrs:{href:"https://github.com/antfu/unplugin-vue-components/issues",target:"_blank",rel:"noopener noreferrer"}},[s._v("unplugin-vue-components/issues"),t("OutboundLink")],1),s._v(" 了解一下,而且 "),t("code",[s._v("unplugin-vue-components")]),s._v(" 不是为 "),t("code",[s._v("element-plus")]),s._v(" 特供的产物,毕竟 "),t("code",[s._v("vite")]),s._v(" 等工具还在高速发展,可能会出现一些莫名的问题影响项目,我之前碰到过开发环境没事,打包就凉了(这里是 vite 某个版本的问题),这很坑,所以我感觉手动按需引入更有安全感,毕竟迭代了这么多版本,"),t("code",[s._v("unplugin-element-plus")]),s._v(" 没出过问题。所以整体来说平台都把很多坑都踩过了,毕竟提供很多人使用,平台应该有这个责任在使用最新技术前进行调研,并在综合考虑下保留相对稳定的东西,给平台带来稳定。当然您也可自行替换成 "),t("code",[s._v("unplugin-vue-components")]),s._v(" 插件自动按需引入。")]),s._v(" "),t("h2",{attrs:{id:"为什么平台采用全局引入-element-plus-而不是按需引入呢-全局引入带来打包冗余-如何处理-如何改成按需引入"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么平台采用全局引入-element-plus-而不是按需引入呢-全局引入带来打包冗余-如何处理-如何改成按需引入"}},[s._v("#")]),s._v(" 为什么平台采用全局引入 "),t("code",[s._v("element-plus")]),s._v(" ,而不是按需引入呢? 全局引入带来打包冗余,如何处理? 如何改成按需引入?")]),s._v(" "),t("ul",[t("li",[s._v("为什么平台采用全局引入 "),t("code",[s._v("element-plus")]),s._v(" ,而不是按需引入呢?"),t("br"),s._v("\n答:① 经过多次实践,按需引入一个组件库的话,"),t("code",[s._v("vite")]),s._v(" 的预编译的时间有点长(尤其是性能低的电脑或者您开了很多程序导致 "),t("code",[s._v("cpu")]),s._v(" 占用过高),所以我们采用了全局引入的方式,不再让它预编译,而是直接加载整个包。② 按需引入会出现 "),t("code",[s._v("new dependencies optimized")]),s._v(" 的情况,这个情况一旦出现就会使得页面重新加载,如下图,开发体验不好。")])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(467),loading:"lazy"}}),s._v("\n上图的问题,估计是 "),t("code",[s._v("vite")]),s._v(" 还需进行优化,下图是来自 "),t("code",[s._v("vite")]),s._v(" 官方开发者的回复"),t("a",{attrs:{href:"https://github.com/vitejs/vite/issues/7608#issuecomment-1087877492",target:"_blank",rel:"noopener noreferrer"}},[s._v("issues"),t("OutboundLink")],1),s._v(" "),t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(468),loading:"lazy"}})]),s._v(" "),t("ul",[t("li",[t("p",[s._v("全局引入带来打包冗余,如何处理?"),t("br"),s._v("\n答:全局引入,打包不会在进行 "),t("code",[s._v("tree shanking")]),s._v(" ,带来未引用的代码也打包进来,造成冗余问题。如何解决呢。目前来说只能在打包时,平台改用 "),t("code",[s._v("unplugin-element-plus")]),s._v(" 插件按需引入模式,开发时,再换成全局引入。")])]),s._v(" "),t("li",[t("p",[s._v("如何改成按需引入?"),t("br"),s._v("\n答:以 "),t("a",{attrs:{href:"https://github.com/pure-admin/pure-admin-thin",target:"_blank",rel:"noopener noreferrer"}},[s._v("精简版"),t("OutboundLink")],1),s._v(" 为例。"),t("br"),s._v("\n① 安装 "),t("code",[s._v("unplugin-element-plus")]),s._v(" ,执行命令:")]),s._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("pnpm")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" unplugin-element-plus "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-D")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(469),loading:"lazy"}}),s._v("\n② 来到根目录 "),t("code",[s._v("build/plugins.ts")]),s._v(" 文件,去掉 "),t("code",[s._v('import ElementPlus from "unplugin-element-plus/vite";')]),s._v(" 和 "),t("code",[s._v("ElementPlus({}),")]),s._v(" 的代码注释"),t("br"),s._v(" "),t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(470),loading:"lazy"}}),s._v("\n③ 来到根目录 "),t("code",[s._v("src/main.ts")]),s._v(" 文件,注释 "),t("code",[s._v('import ElementPlus from "element-plus";')]),s._v(" ,添加 "),t("code",[s._v('import { useElementPlus } from "/@/plugins/element-plus";')]),s._v(" ,将 "),t("code",[s._v("use(ElementPlus)")]),s._v(" 替换成 "),t("code",[s._v("use(useElementPlus)")]),s._v(" "),t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(471),loading:"lazy"}}),s._v("\n④ 千万别忘记,把用到的 "),t("code",[s._v("element-plus")]),s._v(" 组件引入到根目录 "),t("code",[s._v("src/plugins/element-plus/index.ts")]),s._v(" 文件中\n"),t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(472),loading:"lazy"}})])])]),s._v(" "),t("h2",{attrs:{id:"vertical-模式下左侧菜单卡顿-如何解决-菜单切换卡顿"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vertical-模式下左侧菜单卡顿-如何解决-菜单切换卡顿"}},[s._v("#")]),s._v(" "),t("code",[s._v("vertical")]),s._v(" 模式下左侧菜单卡顿,如何解决?菜单切换卡顿?")]),s._v(" "),t("ul",[t("li",[t("code",[s._v("vertical")]),s._v(" 模式下左侧菜单卡顿,如何解决?"),t("br"),s._v("\n答:这个问题大多数出现在 "),t("code",[s._v("windows")]),s._v(" 上,特别是电脑性能低或者双屏的模式下。我的电脑从未出现过卡顿的情况。下图是我的电脑信息")])]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(473),loading:"lazy"}})]),s._v(" "),t("p",[t("code",[s._v("element-plus")]),s._v(" 的 "),t("code",[s._v("menu")]),s._v(" 在上述的情况可能会出现卡顿。")]),s._v(" "),t("p",[s._v("两种解决办法:")]),s._v(" "),t("p",[s._v("① 从软件上解决:来到 "),t("a",{attrs:{href:"https://github.com/pure-admin/vue-pure-admin/blob/main/public/platform-config.json#L22",target:"_blank",rel:"noopener noreferrer"}},[s._v("public/platform-config.json"),t("OutboundLink")],1),s._v(" 设置 "),t("code",[s._v("MenuArrowIconNoTransition")]),s._v(" 为 "),t("code",[s._v("true")]),s._v(" 即可以解决。菜单经过测试在谷歌浏览器 "),t("code",[s._v("92")]),s._v(" 到 "),t("code",[s._v("94")]),s._v(" 版本是不卡顿的,谷歌浏览器版本下载地址 "),t("a",{attrs:{href:"https://www.chromedownloads.net/chrome64osx/",target:"_blank",rel:"noopener noreferrer"}},[s._v("chromedownloads"),t("OutboundLink")],1),s._v(",卡顿是这个 "),t("a",{attrs:{href:"https://github.com/element-plus/element-plus/blob/dev/packages/components/menu/src/sub-menu.ts#L320",target:"_blank",rel:"noopener noreferrer"}},[s._v("transform: rotateZ(180deg)"),t("OutboundLink")],1),s._v(" 造成的,貌似是谷歌的 "),t("a",{attrs:{href:"https://bugs.chromium.org/p/chromium/issues/detail?id=1384444",target:"_blank",rel:"noopener noreferrer"}},[s._v("bug"),t("OutboundLink")],1),s._v(" 吧"),t("br"),s._v("\n② 从硬件上解决:运行 window + x 打开计算机管理界面,找到设备管理器(或者英文 Device Manager),打开显示适配器(或者英文 Display Adapters),如果列表内展示的有 Inter(R) HD Graphics,则说明此电脑具有集成显卡,禁用掉此项(集成显卡),将独立显卡开启满载状态。"),t("a",{attrs:{href:"https://jingyan.baidu.com/article/fd8044fae944b61131137ab1.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Windows 怎么禁用集成显卡"),t("OutboundLink")],1)]),s._v(" "),t("ul",[t("li",[s._v("菜单切换卡顿?"),t("br"),s._v("\n答:有人问平台演示环境菜单切换卡顿,是什么问题?"),t("br"),s._v("\n① 首先,平台的演示环境使用的是 "),t("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("github"),t("OutboundLink")],1),s._v(" ,一个免费的静态网站部署服务,切换菜单的时候,需要加载网络资源,走了请求,响应越慢,页面显示的越慢。"),t("br"),s._v("\n② 其次,本地运行平台的完整版,有的菜单切换卡顿,因为也要加载资源啊,比如地图什么的,当前页面加载资源越大,正常情况下响应就越慢,这是最基本的知识哦。")])]),s._v(" "),t("h2",{attrs:{id:"浏览器控制台打印一些重复信息-很影响开发体验-如何解决"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#浏览器控制台打印一些重复信息-很影响开发体验-如何解决"}},[s._v("#")]),s._v(" 浏览器控制台打印一些重复信息,很影响开发体验,如何解决?")]),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(474),loading:"lazy"}})]),s._v(" "),t("p",[s._v("答:如下图所示,触发了 "),t("code",[s._v("vite")]),s._v(" 的 "),t("code",[s._v("hmr update")]),s._v(" 就会在控制台输出相对应的信息 "),t("a",{attrs:{href:"https://github.com/vitejs/vite/issues/1785",target:"_blank",rel:"noopener noreferrer"}},[s._v("issues"),t("OutboundLink")],1),s._v(" ,有时候输出的信息对于我们来说并没有用,是否可以屏蔽掉这些信息呢?当然可以,在浏览器控制台过滤框中输入您不需要的信息并在最前面加上 "),t("code",[s._v("-")]),s._v(" 即可。"),t("a",{attrs:{href:"https://blog.csdn.net/qq_33674300/article/details/114764718",target:"_blank",rel:"noopener noreferrer"}},[s._v("浏览器控制台过滤无用的提示和报错"),t("OutboundLink")],1),s._v(" "),t("Badge",{attrs:{text:"推荐文章"}})],1),s._v(" "),t("p",[t("img",{staticClass:"lazy",attrs:{alt:"img","data-src":a(475),loading:"lazy"}})]),s._v(" "),t("h2",{attrs:{id:"vue3-的-script-setup-写法-虽然会依据它的文件名来自动推断组件名称-name-但这也约束了我们的写法-不算灵活-有没有解决方案呢"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue3-的-script-setup-写法-虽然会依据它的文件名来自动推断组件名称-name-但这也约束了我们的写法-不算灵活-有没有解决方案呢"}},[s._v("#")]),s._v(" "),t("code",[s._v("vue3")]),s._v(" 的 "),t("code",[s._v(" + diff --git a/pages/FAQ/index.html b/pages/FAQ/index.html index 12f5eb27..57b83429 100644 --- a/pages/FAQ/index.html +++ b/pages/FAQ/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    常见问题

    # 是否支持 IE

    答:vue3 官方说过不支持 IE,具体看 rfcs (opens new window)cn.vuejs (opens new window)。当然有人会说 @vitejs/plugin-legacy (opens new window) 会支持 IE,它的确会,但是它是一款 vite 插件,只对非 vue3 的框架进行支持,目前没有任何一款工具可以使 vue3 支持 IE 浏览器,如果您项目需要支持 IE,请慎重考虑使用本平台。如果您既要使用最新技术并且又想稳定又要兼容 IE 浏览器的话可以选择 vue2.7 的某个版本搭配 vue-cli 最新版本

    # 精简版是干啥的?

    • 答:实际项目开发请使用精简版,精简版是基于 vue-pure-admin (opens new window) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 element-plus (opens new window) 的情况下仍然低于 2.3MB,并且会永久同步完整版的代码。开启 brotli 压缩和 cdn 替换本地库模式后,打包大小低于 350kb

    img

    # husky 是什么?可以删除 husky 提交前校验吗?如何彻底删除?

    • husky 是什么?
      +

    目录

    常见问题

    # 是否支持 IE

    答:vue3 官方说过不支持 IE,具体看 rfcs (opens new window)cn.vuejs (opens new window)。当然有人会说 @vitejs/plugin-legacy (opens new window) 会支持 IE,它的确会,但是它是一款 vite 插件,只对非 vue3 的框架进行支持,目前没有任何一款工具可以使 vue3 支持 IE 浏览器,如果您项目需要支持 IE,请慎重考虑使用本平台。如果您既要使用最新技术并且又想稳定又要兼容 IE 浏览器的话可以选择 vue2.7 的某个版本搭配 vue-cli 最新版本

    # 精简版是干啥的?

    • 答:实际项目开发请使用精简版,精简版是基于 vue-pure-admin (opens new window) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 element-plus (opens new window) 的情况下仍然低于 2.3MB,并且会永久同步完整版的代码。开启 brotli 压缩和 cdn 替换本地库模式后,打包大小低于 350kb

    img

    # husky 是什么?可以删除 husky 提交前校验吗?如何彻底删除?

    • husky 是什么?
      答:官方文档 (opens new window)

    • 可以删除 husky 提交前校验吗?
      答:如果您们提交代码不需要严格的提交前校验,这当然可以删除

    • 如何彻底删除?
      ① 删除根目录 .husky 文件夹以及里面所有文件
      @@ -552,16 +552,16 @@ data-full-width-responsive="true">

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/RBAC/index.html b/pages/RBAC/index.html index 8b1a298f..5f783031 100644 --- a/pages/RBAC/index.html +++ b/pages/RBAC/index.html @@ -11,7 +11,7 @@ - + @@ -137,16 +137,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/build/index.html b/pages/build/index.html index bff57c87..1aef3cd3 100644 --- a/pages/build/index.html +++ b/pages/build/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    打包和部署

    # 本地环境打包预览

    pnpm preview:build
    +      
    目录

    打包和部署

    # 本地环境打包预览

    pnpm preview:build
     
    1

    # 预发布打包

    .env.staging (opens new window) 文件为预发布打包前的配置文件,预发布 (opens new window) vite文档

    pnpm build:staging
     
    1

    # 正式环境打包

    .env.production (opens new window) 文件为正式环境打包前的配置文件

    pnpm build
     
    1

    # 打包分析

    pnpm report
    @@ -247,16 +247,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/buildgood/index.html b/pages/buildgood/index.html index 28c3c18c..cc59a9fd 100644 --- a/pages/buildgood/index.html +++ b/pages/buildgood/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    打包优化

    打包优化关联着网站的稳定与加载速度,在开发中也是非常重要的一项

    img

    # vite 自身的构建优化

    点击查看 build-optimizations (opens new window) vite官方文档

    # css 优化

    分两步优化

    # ​ 压缩 css

    使用 cssnano 去压缩 css

    # ​ 自动添加浏览器前缀

    使用 Autoprefixer 自动添加浏览器前缀

    # 组件、工具库

    • 无论是组件(如 element-plus),还是工具库(如 lodashaxios)我们都应该尽可能的按需引入,使其有良好的  tree-shaking 效果,这样项目整体打包出来的无用代码就少之又少了

    • lodash 举例,lodash 默认是 cjs 格式,不支持 es6import 语法,那么我们就可以去 github 或者某些搜索引擎去寻找替代品,最终平台找到了 lodash-unified,它完全兼容 lodash 的全部语法并且既支持 esm 又支持 cjs,这使得它无论在浏览器还是 node 环境中表现都很良好。当然如果遇到那种只支持 cjs 格式,网上找遍了都找不到兼容 esm 格式的咋办呢,这时你可以参考 lodash-unified,看看别人是如何转换的 😊

    • 平台精简版首次启动时间我这边测试是 6 秒,刷新页面的话开启 CachingAsyncRoutes (opens new window) 可能连 1 秒都不要。如果您使用 pure-admin 且当前网页首启动刷新页面的等待时间远远大于前面的数字,也该考虑优化了。当项目具有一定规模的时候,优化并没有那么容易,所以您在写代码前就应该遵循我上面的说法,按需引入才是 yyds 😄

    # 压缩 gzipbrotli 格式

    使用 vite-plugin-compression (opens new window) 对平台进行 gzip 或者 brotli 压缩,nginx 对这两种压缩模式都支持,压缩后部署到 nginx 将极大提高网页加载速度

    # 如何开启压缩

    来到 .env.production 文件,设置 VITE_COMPRESSION (opens new window) 即可。设置总体分为下面两种 具体实现代码 (opens new window)

    # 两种总体设置

    1. 压缩时不删除原始文件的配置
    2. 压缩时删除原始文件的配置
    # 压缩时不删除原始文件的配置
    开启 gzip 压缩
    +      
    目录

    打包优化

    打包优化关联着网站的稳定与加载速度,在开发中也是非常重要的一项

    img

    # vite 自身的构建优化

    点击查看 build-optimizations (opens new window) vite官方文档

    # css 优化

    分两步优化

    # ​ 压缩 css

    使用 cssnano 去压缩 css

    # ​ 自动添加浏览器前缀

    使用 Autoprefixer 自动添加浏览器前缀

    # 组件、工具库

    • 无论是组件(如 element-plus),还是工具库(如 lodashaxios)我们都应该尽可能的按需引入,使其有良好的  tree-shaking 效果,这样项目整体打包出来的无用代码就少之又少了

    • lodash 举例,lodash 默认是 cjs 格式,不支持 es6import 语法,那么我们就可以去 github 或者某些搜索引擎去寻找替代品,最终平台找到了 lodash-unified,它完全兼容 lodash 的全部语法并且既支持 esm 又支持 cjs,这使得它无论在浏览器还是 node 环境中表现都很良好。当然如果遇到那种只支持 cjs 格式,网上找遍了都找不到兼容 esm 格式的咋办呢,这时你可以参考 lodash-unified,看看别人是如何转换的 😊

    • 平台精简版首次启动时间我这边测试是 6 秒,刷新页面的话开启 CachingAsyncRoutes (opens new window) 可能连 1 秒都不要。如果您使用 pure-admin 且当前网页首启动刷新页面的等待时间远远大于前面的数字,也该考虑优化了。当项目具有一定规模的时候,优化并没有那么容易,所以您在写代码前就应该遵循我上面的说法,按需引入才是 yyds 😄

    # 压缩 gzipbrotli 格式

    使用 vite-plugin-compression (opens new window) 对平台进行 gzip 或者 brotli 压缩,nginx 对这两种压缩模式都支持,压缩后部署到 nginx 将极大提高网页加载速度

    # 如何开启压缩

    来到 .env.production 文件,设置 VITE_COMPRESSION (opens new window) 即可。设置总体分为下面两种 具体实现代码 (opens new window)

    # 两种总体设置

    1. 压缩时不删除原始文件的配置
    2. 压缩时删除原始文件的配置
    # 压缩时不删除原始文件的配置
    开启 gzip 压缩
     VITE_COMPRESSION = "gzip"
     
     开启 brotli 压缩
    @@ -141,16 +141,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/components/index.html b/pages/components/index.html index 1fcc71e0..e069ff4f 100644 --- a/pages/components/index.html +++ b/pages/components/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    组件库

    pure-admin 平台开发的组件库,持续维护,请放心使用

    # pure-admin-table

    查看示例 (opens new window) 查看源码 (opens new window)

    # pure-admin-descriptions

    • 二次封装 element-plusdescriptions (opens new window) 组件,提供灵活的配置项,完全支持 jsx 语法,无需将代码都写在 template

    查看示例 (opens new window) 查看源码 (opens new window)

    # ReDialog

    查看示例 (opens new window) 查看源码 (opens new window)

    +
    目录

    组件库

    pure-admin 平台开发的组件库,持续维护,请放心使用

    # pure-admin-table

    查看示例 (opens new window) 查看源码 (opens new window)

    # pure-admin-descriptions

    • 二次封装 element-plusdescriptions (opens new window) 组件,提供灵活的配置项,完全支持 jsx 语法,无需将代码都写在 template

    查看示例 (opens new window) 查看源码 (opens new window)

    # ReDialog

    查看示例 (opens new window) 查看源码 (opens new window)

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/config/index.html b/pages/config/index.html index 9a090e9b..2766d220 100644 --- a/pages/config/index.html +++ b/pages/config/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    平台配置

    下图左上角箭头所指处就是平台的 logo

    img

    为了保持 logo 的高保真,平台采用 svg 作为 logo 格式。自定义 logo ,只需修改下图 logo.svg 文件即可

    img

    当然也可以自定义 logo 格式。比如需要 png 的图片,只需要把上图中 logo.svg 换成所需的 logo.png ,然后来到 layout/hooks/useNav.ts (opens new window) ,把 "/logo.svg" 改成 "/logo.png" 即可

    # 环境变量

    # 配置文件

    一共 个配置文件,都在平台根目录下,具体如下

    ├── .env                  # 基础环境变量配置文件(优先级最低)
    +      
    目录

    平台配置

    下图左上角箭头所指处就是平台的 logo

    img

    为了保持 logo 的高保真,平台采用 svg 作为 logo 格式。自定义 logo ,只需修改下图 logo.svg 文件即可

    img

    当然也可以自定义 logo 格式。比如需要 png 的图片,只需要把上图中 logo.svg 换成所需的 logo.png ,然后来到 layout/hooks/useNav.ts (opens new window) ,把 "/logo.svg" 改成 "/logo.png" 即可

    # 环境变量

    # 配置文件

    一共 个配置文件,都在平台根目录下,具体如下

    ├── .env                  # 基础环境变量配置文件(优先级最低)
     ├── .env.development      # 开发环境变量配置文件
     ├── .env.production       # 生产环境变量配置文件
     ├── .env.staging          # 预发布环境变量配置文件
    @@ -221,16 +221,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/directory/index.html b/pages/directory/index.html index 00539b82..39e958e9 100644 --- a/pages/directory/index.html +++ b/pages/directory/index.html @@ -11,7 +11,7 @@ - + @@ -256,16 +256,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/git/index.html b/pages/git/index.html index 7db81c4f..593dd346 100644 --- a/pages/git/index.html +++ b/pages/git/index.html @@ -11,7 +11,7 @@ - + @@ -189,16 +189,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/i18n/index.html b/pages/i18n/index.html index 05967c02..d7f85c0d 100644 --- a/pages/i18n/index.html +++ b/pages/i18n/index.html @@ -11,7 +11,7 @@ - + @@ -164,16 +164,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/icon/index.html b/pages/icon/index.html index d841452a..331cd89f 100644 --- a/pages/icon/index.html +++ b/pages/icon/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    图标

    图标是文字的隐喻,可以实现视觉引导和功能划分。平台内置多种图标解决方案,满足 99.99% 的图标场景需求

    # iconify

    在开始之前,我们先来了解下 iconify 。它是统一的图标框架,超过 100 多个图标集都集中在这一个库,超过 100,000 个开源矢量图标,并且会定期更新图标。您可以在 iconify (opens new window) 或者 icones (opens new window) 中看到所有的图标集。平台也对 iconify 录了一期专题视频教程 点击查看 (opens new window)

    关于 element-plus 图标集成

    问:平台虽然使用了 element-plus 作为主要 ui 框架,但是并没有引入官网推荐的 @element-plus/icons-vue (opens new window) 图标库,那该如何使用 element-plus 的图标呢?

    答:iconify 非常强大,已经把 element-plus 的图标集成进去了。平台使用了 @iconify-icons/ep (opens new window) 完全替代了 @element-plus/icons-vue (opens new window) , 具体看 iconify/ep (opens new window) 或者 icones/ep (opens new window)

    # 本地图标

    本地图标是指通过本地安装各类图标库依赖包或者本地引入静态资源(比如 iconfontsvg )的图标

    # iconfont 的引入

    # 存放目录

    可以看到下图,平台将 iconfont 放到了 src/assets/iconfont (opens new window) 文件夹里,这是平台内置的 iconfont ,最好不要删除。如果您项目也用到了 iconfont ,可以在同级目录src/assets下新建文件夹,比如iconfont-business,用来存放您项目的 iconfont 文件

    img

    # 如何导入

    来到 src/main.ts 文件下参考 导入 (opens new window) 即可

    # 组件使用

    平台对 iconfont 进行了组件的封装 FontIcon (opens new window)

    点击查看
    <template>
    +      
    目录

    图标

    图标是文字的隐喻,可以实现视觉引导和功能划分。平台内置多种图标解决方案,满足 99.99% 的图标场景需求

    # iconify

    在开始之前,我们先来了解下 iconify 。它是统一的图标框架,超过 100 多个图标集都集中在这一个库,超过 100,000 个开源矢量图标,并且会定期更新图标。您可以在 iconify (opens new window) 或者 icones (opens new window) 中看到所有的图标集。平台也对 iconify 录了一期专题视频教程 点击查看 (opens new window)

    关于 element-plus 图标集成

    问:平台虽然使用了 element-plus 作为主要 ui 框架,但是并没有引入官网推荐的 @element-plus/icons-vue (opens new window) 图标库,那该如何使用 element-plus 的图标呢?

    答:iconify 非常强大,已经把 element-plus 的图标集成进去了。平台使用了 @iconify-icons/ep (opens new window) 完全替代了 @element-plus/icons-vue (opens new window) , 具体看 iconify/ep (opens new window) 或者 icones/ep (opens new window)

    # 本地图标

    本地图标是指通过本地安装各类图标库依赖包或者本地引入静态资源(比如 iconfontsvg )的图标

    # iconfont 的引入

    # 存放目录

    可以看到下图,平台将 iconfont 放到了 src/assets/iconfont (opens new window) 文件夹里,这是平台内置的 iconfont ,最好不要删除。如果您项目也用到了 iconfont ,可以在同级目录src/assets下新建文件夹,比如iconfont-business,用来存放您项目的 iconfont 文件

    img

    # 如何导入

    来到 src/main.ts 文件下参考 导入 (opens new window) 即可

    # 组件使用

    平台对 iconfont 进行了组件的封装 FontIcon (opens new window)

    点击查看
    <template>
       <div>
         <!-- 分font-class、unicode、symbol三种模式 -->
         <!-- font-class模式 -->
    @@ -228,16 +228,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/introduction/index.html b/pages/introduction/index.html index 4d698e30..f0983650 100644 --- a/pages/introduction/index.html +++ b/pages/introduction/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    介绍

    vue-pure-admin (opens new window) 是一款开源完全免费且开箱即用的中后台管理系统模版。完全采用 ECMAScript 模块(ESM)规范来编写和组织代码,使用了最新的 Vue3ViteElement-PlusTypeScriptPiniaTailwindcss 等主流技术开发

    # 在线预览

    # 完整版本

    # 精简版本(提供国际化和非国际化两个版本)

    精简版是基于 vue-pure-admin (opens new window) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 element-plus (opens new window) 的情况下仍然低于 2.3MB,并且会永久同步完整版的代码。开启 brotli 压缩和 cdn 替换本地库模式后,打包大小低于 350kb

    # js 版本

    # vue-pure-admin-max 版本

    # 微前端版本

    # Nodejs 后端

    平台提供一套 nodemysql 版本的后端代码,内置各种接口示例和 jwt token 以及 websocket,可供学习参考

    # Tauri 版本

    taurielectron 更强,tauri 与 electron 的对比 (opens new window)
    +

    目录

    介绍

    vue-pure-admin (opens new window) 是一款开源完全免费且开箱即用的中后台管理系统模版。完全采用 ECMAScript 模块(ESM)规范来编写和组织代码,使用了最新的 Vue3ViteElement-PlusTypeScriptPiniaTailwindcss 等主流技术开发

    # 在线预览

    # 完整版本

    # 精简版本(提供国际化和非国际化两个版本)

    精简版是基于 vue-pure-admin (opens new window) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 element-plus (opens new window) 的情况下仍然低于 2.3MB,并且会永久同步完整版的代码。开启 brotli 压缩和 cdn 替换本地库模式后,打包大小低于 350kb

    # js 版本

    # vue-pure-admin-max 版本

    # 微前端版本

    # Nodejs 后端

    平台提供一套 nodemysql 版本的后端代码,内置各种接口示例和 jwt token 以及 websocket,可供学习参考

    # Tauri 版本

    taurielectron 更强,tauri 与 electron 的对比 (opens new window)
    如果没有安装 tauri ,请阅读 tauri 中文官方文档 (opens new window)

    # Electron 版本

    # 配套视频

    • 教程

    https://www.bilibili.com/video/BV1kg411v7QT/ (opens new window)

    • UI 设计

    https://www.bilibili.com/video/BV17g411T7rq (opens new window)

    # 浏览器支持

    本地开发推荐使用 ChromeEdgeFirefox 浏览器,作者常用的是最新版 Chrome 浏览器
    实际使用中感觉 Firefox 在动画上要比别的浏览器更加丝滑,只是作者用 Chrome 已经习惯了,看个人爱好选择吧
    更详细的浏览器兼容性支持请看 Vue 支持哪些浏览器? (opens new window)Vite 浏览器兼容性 (opens new window)

     Edge (opens new window)
    IE
     Edge (opens new window)
    Edge
    Firefox (opens new window)
    Firefox
    Chrome (opens new window)
    Chrome
    Safari (opens new window)
    Safari
    不支持 最后两个版本 最后两个版本 最后两个版本 最后两个版本

    # 维护者

    xiaoxian521 (opens new window)Ten-K (opens new window)

    # 问题反馈

    发送问题至平台唯一网易邮箱账号 pureadmin@163.com

    @@ -120,14 +120,14 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/js/index.html b/pages/js/index.html index 9b5c24ce..50fa37e1 100644 --- a/pages/js/index.html +++ b/pages/js/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    JS版本

    # 介绍

    JS版本即pure-admin-thin-js,它是 pure-admin-thin (opens new window)js版本,同时拥有国际化非国际化两个版本并且会永久同步更新代码。JS版本将之前所有使用TypeScript语法的代码或文件全量替换为JavaScript语法,也就意味着您在编写代码时可以更加地随意,无需编写ts类型。JS版本快速易上手、更适合需要快速开发上线的项目、更适合二次开发、更容易同步更新代码、它也避免了开发人员将 TypeScriptJavaScript 混用带来后续难以维护的问题。对于初学者、小团队或者想要学习源码的朋友,推荐首选JS版本!

    vue-pure-admin (opens new window) 每次发版后,JS版本将优先同步更新,最晚一周内同步更新完成,而 pure-admin-thin (opens new window) 版本最晚一个月内同步更新完成。

    JS版本让精简版更加精简,让代码编写更加顺手,让项目交付更加快速!

    # 价格

    永久价格:¥268

    # 如何购买

    加微信号: pureadmin 或扫下方二维码,添加时请备注js,无备注会被忽略

    # 温馨提示

    JS版本代码存放于 github (opens new window),添加上方微信后请提供您的 github 账号 ,我会拉您进pure-admin-thin-js私有仓库

    # 超低成本切换JS版本教程

    用户疑问:pure-admin-thin-jspure-admin-thin (opens new window)js版本,那如果需要 完整版 (opens new window) 的一些业务页面或组件,比如 系统管理 (opens new window) 里的所有页面还有src/components文件夹里的一些组件,比如 ReVxeTableBar (opens new window),它们该怎么切换为js版本呢?

    平台回答:我们会提供免费的教学视频,会演示如何将系统管理里的所有页面和src/components里的组件改为js版本并放到pure-admin-thin-js

    教程地址:点击观看教程 (opens new window)

    当然我们还提供了full分支,该分支迁移了完整版中 系统管理 (opens new window) 的所有页面和 /src/components (opens new window) 文件夹中所有的组件,如下图:

    img

    # 相关截图

    img

    img

    img

    img

    img

    img

    +
    目录

    JS版本

    # 介绍

    JS版本即pure-admin-thin-js,它是 pure-admin-thin (opens new window)js版本,同时拥有国际化非国际化两个版本并且会永久同步更新代码。JS版本将之前所有使用TypeScript语法的代码或文件全量替换为JavaScript语法,也就意味着您在编写代码时可以更加地随意,无需编写ts类型。JS版本快速易上手、更适合需要快速开发上线的项目、更适合二次开发、更容易同步更新代码、它也避免了开发人员将 TypeScriptJavaScript 混用带来后续难以维护的问题。对于初学者、小团队或者想要学习源码的朋友,推荐首选JS版本!

    vue-pure-admin (opens new window) 每次发版后,JS版本将优先同步更新,最晚一周内同步更新完成,而 pure-admin-thin (opens new window) 版本最晚一个月内同步更新完成。

    JS版本让精简版更加精简,让代码编写更加顺手,让项目交付更加快速!

    # 价格

    永久价格:¥268

    # 如何购买

    加微信号: pureadmin 或扫下方二维码,添加时请备注js,无备注会被忽略

    # 温馨提示

    JS版本代码存放于 github (opens new window),添加上方微信后请提供您的 github 账号 ,我会拉您进pure-admin-thin-js私有仓库

    # 超低成本切换JS版本教程

    用户疑问:pure-admin-thin-jspure-admin-thin (opens new window)js版本,那如果需要 完整版 (opens new window) 的一些业务页面或组件,比如 系统管理 (opens new window) 里的所有页面还有src/components文件夹里的一些组件,比如 ReVxeTableBar (opens new window),它们该怎么切换为js版本呢?

    平台回答:我们会提供免费的教学视频,会演示如何将系统管理里的所有页面和src/components里的组件改为js版本并放到pure-admin-thin-js

    教程地址:点击观看教程 (opens new window)

    当然我们还提供了full分支,该分支迁移了完整版中 系统管理 (opens new window) 的所有页面和 /src/components (opens new window) 文件夹中所有的组件,如下图:

    img

    # 相关截图

    img

    img

    img

    img

    img

    img

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/layout/index.html b/pages/layout/index.html index d4c9c184..06c0aba0 100644 --- a/pages/layout/index.html +++ b/pages/layout/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    布局

    # 左侧菜单模式

    img

    查看介绍

    img

    # 顶部菜单模式

    img

    查看介绍

    img

    # 混合菜单模式

    img

    查看介绍

    img

    # 双栏菜单模式

    仅 max 版支持 (opens new window)

    img

    +
    目录

    布局

    # 左侧菜单模式

    img

    查看介绍

    img

    # 顶部菜单模式

    img

    查看介绍

    img

    # 混合菜单模式

    img

    查看介绍

    img

    # 双栏菜单模式

    仅 max 版支持 (opens new window)

    img

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/max/index.html b/pages/max/index.html index 9a649352..1297bb92 100644 --- a/pages/max/index.html +++ b/pages/max/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    Max版本

    # 介绍

    点我查看预览 (opens new window)

    max版本即vue-pure-admin-max,它在保留 vue-pure-admin (opens new window) 所有功能基础上,再添加更多的高级功能,每个高级功能仅一个提交记录,全部提供源代码,方便用户自行同步代码。具体高级功能如下:

    高级功能 进度
    新款菜单导航模式(左侧双栏菜单) 已完成
    悬浮按钮功能 已完成
    新增繁體中文、日语、韩语的内置支持 已完成
    字典管理 已完成
    多租户管理 已完成
    页头添加整体风格快捷操作按钮 已完成

    目前共有6项高级功能,后续我们会持续更新添加更多高级功能。随着新高级功能的增加,价格也会相应上调。不过,请放心,无论您以何种价格购买了Max版本,都将永久享受现有的以及后续所有的新高级功能!

    下个高级功能预告

    日历排班

    # 价格

    后续max版本不再单独售卖

    永久价格:¥268

    # 如何购买

    加微信号: pureadmin 或扫下方二维码,添加时请备注max,无备注会被忽略

    # 温馨提示

    max版本代码存放于 github (opens new window),添加上方微信后请提供您的 github 账号 ,我会拉您进vue-pure-admin-max私有仓库

    # 功能截图

    # ① 新款菜单导航模式(左侧双栏菜单)

    img

    img

    img

    img

    img

    # ② 悬浮按钮功能

    img

    # ③ 新增繁體中文、日语、韩语的内置支持

    img

    img

    img

    # ④ 字典管理

    img

    img

    img

    # ⑤ 多租户管理

    img

    img

    img

    img

    # ⑥ 页头添加整体风格快捷操作按钮

    img

    img

    +
    目录

    Max版本

    # 介绍

    点我查看预览 (opens new window)

    max版本即vue-pure-admin-max,它在保留 vue-pure-admin (opens new window) 所有功能基础上,再添加更多的高级功能,每个高级功能仅一个提交记录,全部提供源代码,方便用户自行同步代码。具体高级功能如下:

    高级功能 进度
    新款菜单导航模式(左侧双栏菜单) 已完成
    悬浮按钮功能 已完成
    新增繁體中文、日语、韩语的内置支持 已完成
    字典管理 已完成
    多租户管理 已完成
    页头添加整体风格快捷操作按钮 已完成

    目前共有6项高级功能,后续我们会持续更新添加更多高级功能。随着新高级功能的增加,价格也会相应上调。不过,请放心,无论您以何种价格购买了Max版本,都将永久享受现有的以及后续所有的新高级功能!

    下个高级功能预告

    日历排班

    # 价格

    后续max版本不再单独售卖

    永久价格:¥268

    # 如何购买

    加微信号: pureadmin 或扫下方二维码,添加时请备注max,无备注会被忽略

    # 温馨提示

    max版本代码存放于 github (opens new window),添加上方微信后请提供您的 github 账号 ,我会拉您进vue-pure-admin-max私有仓库

    # 功能截图

    # ① 新款菜单导航模式(左侧双栏菜单)

    img

    img

    img

    img

    img

    # ② 悬浮按钮功能

    img

    # ③ 新增繁體中文、日语、韩语的内置支持

    img

    img

    img

    # ④ 字典管理

    img

    img

    img

    # ⑤ 多租户管理

    img

    img

    img

    img

    # ⑥ 页头添加整体风格快捷操作按钮

    img

    img

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/nologin/index.html b/pages/nologin/index.html index 8c699755..84fe5b7c 100644 --- a/pages/nologin/index.html +++ b/pages/nologin/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    自定义免登录

    自定义免登录时长具有一定的应用价值,优化了用户体验

    # 优点

    1. 增强用户体验: 通过提供自定义免登录时长的选项,用户可以根据自己的实际需求和喜好来设置登录频率,以提升使用体验
    2. 提升系统安全性:对于不同的环境和使用场景,用户可以根据自身的安全考虑来设定免登录时长。例如,在私人电脑或手机上,用户可能会选择较长的免登录时间以提升使用便利性。相反,在公共电脑上,用户可能会选择较短的免登录时间或者不使用免登录功能,以避免账号安全风险
    3. 紧密符合业务需求:对于管理员或后台管理人员,他们可能需要频繁地登录系统进行功能操作,允许他们自定义免登录时长可以提升工作效率
    4. 促进个性化服务:自定义免登录时长这样的个性化选项可以在一定程度上增加系统的用户友好性,让用户感觉更为贴心,有助于提高用户满意度和忠诚度

    # 如何操作

    来到登录页勾选 7 天内免登录即可,如下图

    img

    平台提供 1、7、30 三种天数供选择,默认 7 天。您也可查看下面的具体实现,修改少量代码即可自定义所需天数。点击天数即可切换

    # 具体实现

    用户登录后判断是否勾选免登录,来给keymultiple-tabs的数据存储到cookie中,如果勾选就设置对应的过期时间,反之不设置 具体代码 (opens new window)

    自定义所需天数在此处配置 (opens new window)

    +
    目录

    自定义免登录

    自定义免登录时长具有一定的应用价值,优化了用户体验

    # 优点

    1. 增强用户体验: 通过提供自定义免登录时长的选项,用户可以根据自己的实际需求和喜好来设置登录频率,以提升使用体验
    2. 提升系统安全性:对于不同的环境和使用场景,用户可以根据自身的安全考虑来设定免登录时长。例如,在私人电脑或手机上,用户可能会选择较长的免登录时间以提升使用便利性。相反,在公共电脑上,用户可能会选择较短的免登录时间或者不使用免登录功能,以避免账号安全风险
    3. 紧密符合业务需求:对于管理员或后台管理人员,他们可能需要频繁地登录系统进行功能操作,允许他们自定义免登录时长可以提升工作效率
    4. 促进个性化服务:自定义免登录时长这样的个性化选项可以在一定程度上增加系统的用户友好性,让用户感觉更为贴心,有助于提高用户满意度和忠诚度

    # 如何操作

    来到登录页勾选 7 天内免登录即可,如下图

    img

    平台提供 1、7、30 三种天数供选择,默认 7 天。您也可查看下面的具体实现,修改少量代码即可自定义所需天数。点击天数即可切换

    # 具体实现

    用户登录后判断是否勾选免登录,来给keymultiple-tabs的数据存储到cookie中,如果勾选就设置对应的过期时间,反之不设置 具体代码 (opens new window)

    自定义所需天数在此处配置 (opens new window)

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/opensource/index.html b/pages/opensource/index.html index fa6c7d0a..c8b76ac0 100644 --- a/pages/opensource/index.html +++ b/pages/opensource/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    对接平台的前后端项目

    对接 pure-admin 的开源项目,非官方项目。感谢开源大佬们选择了 pure-admin

    # Java SpringBoot

    boot-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:13111111111 密码:Admin123456)

    AgileBoot 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    Halcyon-Admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123456)

    bunny-admin-web 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)

    # Go

    go-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin1234)

    # Python Django

    xadmin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    pure-drf-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:user@kworlds.cn 密码:k12345678)

    # C# .NET 8

    PurestAdmin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:123456)

    # PHP Laravel

    slurry-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    温馨提示

    对接的开源项目如需挂到此处,必须有前端、后端源代码地址以及预览地址

    +
    目录

    对接平台的前后端项目

    对接 pure-admin 的开源项目,非官方项目。感谢开源大佬们选择了 pure-admin

    # Java SpringBoot

    boot-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:13111111111 密码:Admin123456)

    AgileBoot 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    Halcyon-Admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123456)

    bunny-admin-web 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)

    # Go

    go-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin1234)

    # Python Django

    xadmin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    pure-drf-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:user@kworlds.cn 密码:k12345678)

    # C# .NET 8

    PurestAdmin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:123456)

    # PHP Laravel

    slurry-admin 前端代码 (opens new window) 后端代码 (opens new window) 预览地址 (opens new window)(登录用户名:admin 密码:admin123)

    温馨提示

    对接的开源项目如需挂到此处,必须有前端、后端源代码地址以及预览地址

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/optimize/index.html b/pages/optimize/index.html index 08e81aa0..6cdcc318 100644 --- a/pages/optimize/index.html +++ b/pages/optimize/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    vite预构建

    主要介绍下如何在 pure-admin 平台进行正确有效的 vite 预构建配置

    # include

    optimizeDeps.include (opens new window) 配置为需要预构建的模块。vite 启动时会将 optimizeDeps.include 里的模块,编译成 esm 格式并缓存到 node_modules/.vite 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载

    img

    下面是精简版 optimizeDeps.include 配置,将 dependencies (opens new window) 大部分未全局安装的模块都配置进来,当然如果模块里面的东西很少,也就是里面方法不多,可以不用配置进来直接让浏览器加载即可(您自己安装的模块也是参考该配置)

    点击查看
    const include = [
    +      
    目录

    vite预构建

    主要介绍下如何在 pure-admin 平台进行正确有效的 vite 预构建配置

    # include

    optimizeDeps.include (opens new window) 配置为需要预构建的模块。vite 启动时会将 optimizeDeps.include 里的模块,编译成 esm 格式并缓存到 node_modules/.vite 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载

    img

    下面是精简版 optimizeDeps.include 配置,将 dependencies (opens new window) 大部分未全局安装的模块都配置进来,当然如果模块里面的东西很少,也就是里面方法不多,可以不用配置进来直接让浏览器加载即可(您自己安装的模块也是参考该配置)

    点击查看
    const include = [
       "qs",
       "mitt",
       "dayjs",
    @@ -137,16 +137,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/recommendation/index.html b/pages/recommendation/index.html index 967fb926..5dda94e3 100644 --- a/pages/recommendation/index.html +++ b/pages/recommendation/index.html @@ -11,7 +11,7 @@ - + @@ -117,15 +117,15 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/request/index.html b/pages/request/index.html index 6c0b0e09..45ac6fe6 100644 --- a/pages/request/index.html +++ b/pages/request/index.html @@ -11,7 +11,7 @@ - + @@ -305,16 +305,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/routerMenu/index.html b/pages/routerMenu/index.html index 7a204d8a..051631db 100644 --- a/pages/routerMenu/index.html +++ b/pages/routerMenu/index.html @@ -11,7 +11,7 @@ - + @@ -769,16 +769,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/service/index.html b/pages/service/index.html index d4580fda..4b55323b 100644 --- a/pages/service/index.html +++ b/pages/service/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    优质服务

    # 解答微信群

    永久价格:¥698/永久

    服务内容:在使用 pure-admin (opens new window) 中所有项目时(包括 js 和 max 版本)遇到的问题、难点、疑惑都可在群内相互交流,我会在每天的空闲时间回复,也可以问非pure-admin的前端问题,我会在每天的空闲时间随机解答。群内交流活跃,技术氛围好,我会在当天回复大家提出的问题。

    服务时间:工作日 10:00 - 18:00

    限时活动:入群免费赠送 JS版本 (opens new window)Max版本 (opens new window)

    如何购买:加微信号 pureadmin 或扫下方二维码,添加时请备注付费微信群,无备注会被忽略

    视频教程(入群免费赠送)

    1. jsx 语法讲解,如何在 pureadmin 中运用 jsx(视频时长 20 分钟)
    2. tailwindcss 语法讲解,如何在 pureadmin 中运用 tailwindcss(视频时长 17 分钟)
    3. 系统管理中的功能讲解,让您熟知如何使用并关联它们,彻底搞懂它们之间的业务逻辑(用户管理、角色管理、菜单管理、部门管理、字典管理、多租户管理)(视频时长 36 分钟)
    4. 如何将 pureadmin 中的 pnpm 包管理器切换到 yarn 或者 npm 包管理器,带您踩坑(视频时长 43 分钟)
    5. 了解 bun (opens new window) 以及如何使用 bun (opens new window) 的包管理器作为 pureadmin 的包管理器。使用 bun (opens new window) 安装项目依赖比 pnpm 快数十倍且已经可以在 pureadmin 中稳定使用!(视频时长 38 分钟)
    6. pureadmin 中的 cdn 模式详解,新的免费、快速、稳定的国内 cdn 厂商集成详解,该厂商服务也支持在内网环境中自行集成!(视频时长 60 分钟)

    温馨提示

    本群仅限讨论前端、后端、AI 等技术话题。请勿在群内谈论色情、赌博、毒品、VPN、谣言、政治等话题。
    +

    目录

    优质服务

    # 解答微信群

    永久价格:¥698/永久

    服务内容:在使用 pure-admin (opens new window) 中所有项目时(包括 js 和 max 版本)遇到的问题、难点、疑惑都可在群内相互交流,我会在每天的空闲时间回复,也可以问非pure-admin的前端问题,我会在每天的空闲时间随机解答。群内交流活跃,技术氛围好,我会在当天回复大家提出的问题。

    服务时间:工作日 10:00 - 18:00

    限时活动:入群免费赠送 JS版本 (opens new window)Max版本 (opens new window)

    如何购买:加微信号 pureadmin 或扫下方二维码,添加时请备注付费微信群,无备注会被忽略

    视频教程(入群免费赠送)

    1. jsx 语法讲解,如何在 pureadmin 中运用 jsx(视频时长 20 分钟)
    2. tailwindcss 语法讲解,如何在 pureadmin 中运用 tailwindcss(视频时长 17 分钟)
    3. 系统管理中的功能讲解,让您熟知如何使用并关联它们,彻底搞懂它们之间的业务逻辑(用户管理、角色管理、菜单管理、部门管理、字典管理、多租户管理)(视频时长 36 分钟)
    4. 如何将 pureadmin 中的 pnpm 包管理器切换到 yarn 或者 npm 包管理器,带您踩坑(视频时长 43 分钟)
    5. 了解 bun (opens new window) 以及如何使用 bun (opens new window) 的包管理器作为 pureadmin 的包管理器。使用 bun (opens new window) 安装项目依赖比 pnpm 快数十倍且已经可以在 pureadmin 中稳定使用!(视频时长 38 分钟)
    6. pureadmin 中的 cdn 模式详解,新的免费、快速、稳定的国内 cdn 厂商集成详解,该厂商服务也支持在内网环境中自行集成!(视频时长 60 分钟)

    温馨提示

    本群仅限讨论前端、后端、AI 等技术话题。请勿在群内谈论色情、赌博、毒品、VPN、谣言、政治等话题。
    让我们共同维护一个纯粹的技术交流环境,保持积极、健康、充满活力的技术氛围 ❤️

    # 页面定制开发(软件开发、项目外包)

    外包项目排到了 2025-02-01,暂时不接外包了🙏,可预约时间 2025-03-01

    价格:根据页面数量、每页难度、开发周期进行合理定价
    服务内容:软件开发过程中保证 页面高还原度代码高质量全方位多次测试
    如何获得服务:加最上方作者微信备注 软件开发 即可

    开发范围 范围种类
    网站 后台系统、可视化大屏、企业宣传页、活动推广页等各种只要能在浏览器查看的都能开发
    h5页面 移动端网站、广告推广、电子商务等
    小程序 微信、支付宝、抖音、快手、京东小程序等
    移动应用程序 可安装到安卓Android和苹果iOS系统的手机App软件
    桌面应用程序 可安装到桌面操作系统(如WindowsMacOSLinux)上的软件,可直接在电脑上运行
    @@ -120,13 +120,13 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/sponsor/index.html b/pages/sponsor/index.html index 0648f9b8..2bafdba3 100644 --- a/pages/sponsor/index.html +++ b/pages/sponsor/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    赞助

    # 企业赞助

    成为赞助商即可获得以下服务

    将贵公司 LOGO 同时展示在 pure-admin 预览官网 (opens new window)pure-admin 文档官网 (opens new window) 以及 GitHub 仓库 README (opens new window) 页面的明显位置。

    pure-admin 文档官网 日均约3万 浏览量,更多详情请加最上方微信备注 企业赞助 进行详聊。

    # 个人赞助

    如果 pure-admin 帮助到了您,可以选择任意金额扫下方二维码进行赞助。赞助金额大于 10 元时,可在赞助时备注您的 GithubGitee 或某个博客地址,我们会将其加入下方赞助名单中。您的赞助也会推动我们开发更多优质免费代码、补充更多优质免费文档、发布更多 优质免费视频教程 (opens new window)

    +
    目录

    赞助

    # 企业赞助

    成为赞助商即可获得以下服务

    将贵公司 LOGO 同时展示在 pure-admin 预览官网 (opens new window)pure-admin 文档官网 (opens new window) 以及 GitHub 仓库 README (opens new window) 页面的明显位置。

    pure-admin 文档官网 日均约3万 浏览量,更多详情请加最上方微信备注 企业赞助 进行详聊。

    # 个人赞助

    如果 pure-admin 帮助到了您,可以选择任意金额扫下方二维码进行赞助。赞助金额大于 10 元时,可在赞助时备注您的 GithubGitee 或某个博客地址,我们会将其加入下方赞助名单中。您的赞助也会推动我们开发更多优质免费代码、补充更多优质免费文档、发布更多 优质免费视频教程 (opens new window)

              

    # 赞助名单

    赞助人 金额 赞助人备注 作者的回复
    *late 感谢你这样的开源人贡献~辛苦了!中国开源不容易。也希望你可以找到盈利模式可以健康持续的运营下去哈~嗯 加油!另外注意身体健康!适当运动。注意久坐就溜达下哈。尽量早睡哈~健康第一~不耽误你了~ 短短几句, 我竟不知如何回答了,非常感谢你们,还有那些默默支持的,非常感谢!
    *车 300 花点小钱,省点时间 感谢信任,谢谢我豪爽的大哥 ❤️
    Niu 298 大佬你好,我是去年毕业的应届生,刚入行程序员不到一年,我是学 C++ 的,刚才公司摸鱼无意间在 B 站看到了大佬的视频,看了视频评论区,然后点开看了下 github 和 pure-admin 文档,很受感动,虽然我不问项目和前端问题,但就想要买个大佬的服务支持下大佬,在国内这样的开源环境下,坚持在做对的事情 非常感谢哥们的支持,称呼我作者就行哈,嘿嘿。坚持在做热爱的事情,坚持在做对的事情,一起加油! ✊ ❤️
    *Only 202 看来看去都还是你的文档最好。没毛病的,我刚刚接触你的pure不久,就看到你全职做开源了 非常感谢哥们的信任哈,我们会持续做好,一起加油! ✊ ❤️
    Azhe* 202 祝愿中国开源事业早日开花结果,全部开源人员都能身心健康 非常感谢哥们的祝福 ❤️
    yiping* 202 支持中国开源事业,加油! 非常感谢哥们的祝福,一起加油! ✊ ❤️
    **jc 200 全职开源不易,多的200是个人赞助,愿不忘初心,加油! 不忘初心!!!非常感谢哥们 ❤️
    ruowind (opens new window) 188 希望不忘初心,始终开源下去 👏 好的,大哥。多的不说了哈,一起看实际行动 ❤️
    **豪 188 加油 一起加油,豪哥 ✊ ❤️
    流年** 114.83
    *known 102
    **俊 102
    **新 102
    *light 102
    *Ge 102
    h* 101 支持下,全职免费开源不易,加油! 非常感谢哥们,一起加油 ✊
    star* 101 希望作者能一直进行下去,支持一波 非常感谢哥们,一起努力 ✊
    *fwuh* 100
    **林 100
    Jay* 100 看你的框架学习了很多[抱拳] 非常感谢哥们,相互学习 ❤️
    *贝 100
    Jun 100 好东西要支持,能力范围之内,不要伤了作者一片至诚的心,哈哈哈哈哈 嘿嘿,非常感谢哥们支持哈 ❤️
    S*h 100 开源不易,加油 非常感谢哥们,一起加油 ✊
    *Chg 100
    XIAO* 100 国内做开源不易,加油[嘿哈] 非常感谢哥们,一起加油 ✊
    mumaren* 100 年轻人,加油 非常感谢大哥,一起加油 ✊
    wxid*7s21 100 很喜欢你这个开源项目,国内开源不易,加油! 非常感谢大哥,一起加油 ✊
    king*win 100 国内开源不易,加油! 非常感谢大哥,一起加油 ✊
    *凡 99 加油加油 非常感谢哥们,一起加油 ✊
    Eric* 70 希望可以持续发展下去 非常感谢哥们,我会一直努力的! ✊
    hey* 68.66 多谢开源,多谢指导!为你的事业敬微薄之力,一起加油 👏 非常感谢哥们,一起加油 ✊
    **羽 68 希望你们开源可以做得更好 非常感谢哥们,我会一直努力的! ✊
    *刚 66.66 精简版终于更新到5版本了,来支持下 非常感谢哥们。emm,深夜还不睡觉,我怀疑你一直盯着我呢,哈哈
    *勇 66.66 感谢开源了项目!难得的学习资料。 非常感谢哥们 ❤️
    *不* 66.60 多谢指导 客气啦 😉
    Leng* 66
    dib* 52
    L* 51
    **旭 50 请作者喝奶茶 非常感谢哥们 ❤️
    **富 50 请作者喝杯咖啡,加油加油 非常感谢哥们,一起加油 ❤️
    **浩 35
    By_* 32
    海* 30
    chibutao* 30
    aulang (opens new window) 30
    Ethan (opens new window) 30
    对*. 28.88 非常热爱开源的产品,但无力贡献,仅以此小表敬意! 非常感谢哥们 ❤️
    *远 25 支持开源 非常感谢哥们 ❤️
    *luu* 23
    *华 23
    *屿 22
    *an_ 22
    *sky* 22
    **刚 22
    风* 20 全职开源不容易,先小小支持一下 非常感谢哥们 ❤️
    cliff 20 支持一下,祝愿兄弟在开源的路上走得更远 非常感谢哥们 ❤️
    *蓝 20 欢庆精简版同步发布 嘿嘿,终于发布咯
    **远 20
    *o 20
    Marx* 18
    *w 18
    **凌 17 支持一下开源 非常感谢哥们 ❤️
    f*d 15
    e*o 15 开源支持一波,虽然是些小钱 非常感谢哥们 ❤️
    S*n 15 开源不易,小哥加油! 非常感谢哥们,一起加油 ❤️
    *烟 15 找了好几天终于找到了一个满意的框架,重要的是还有文档,怎么说呢,写的很用心,对小白很友好,一杯咖啡,纯粹是一点心意。 非常感谢哥们 ❤️
    *羽 12 vue-pure-admin如何适配mobilepc 媒体查询+视窗单位+useResizeObserver (opens new window)+deviceDetection (opens new window)
    **明 10
    *澜 10
    *熊 10
    *星 10
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/sso/index.html b/pages/sso/index.html index ed79c453..2116b908 100644 --- a/pages/sso/index.html +++ b/pages/sso/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    单点登录

    单点登录有效减少繁琐的登录操作,优化了用户体验

    # 单点登录

    单点登录主要功能在后端,这里只讲述使用 pure-admin 前端代码如何实现
    +

    目录

    单点登录

    单点登录有效减少繁琐的登录操作,优化了用户体验

    # 单点登录

    单点登录主要功能在后端,这里只讲述使用 pure-admin 前端代码如何实现
    下面以完整版为例,精简版想要开启单点登录只需将 import "@/utils/sso" (opens new window) 注释解开即可

    # 前端实现步骤划分

    • 先判断是否为单点登录,不为则直接返回不再进行任何逻辑处理,下面是单点登录的处理步骤
    1. 清空本地旧信息 (opens new window)
    2. 获取 url 中的重要参数信息,然后通过 setToken 保存在本地 (opens new window)
    3. 删除不需要显示在 url 的参数,这样做更安全 (opens new window)
    4. 使用 window.location.replace 跳转正确页面,window.location.replace 可以替换浏览器历史记录项 (opens new window)

    # 完整代码

    点击查看完整代码 (opens new window)

    # url 格式

    以平台的预览地址为例
     
     完整地址 https://pure-admin.github.io/vue-pure-admin/#/welcome?username=sso&roles=admin&accessToken=eyJhbGciOiJIUzUxMiJ9.admin
    @@ -127,16 +127,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/start/index.html b/pages/start/index.html index ad785938..5b51ee28 100644 --- a/pages/start/index.html +++ b/pages/start/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    快速开始

    # 开发环境

    vue-pure-admin v5.0.0 版本后,规定 node 版本应不小于 18.18.0 (推荐优先安装长期维护LTS版,如下图),pnpm 版本应不小于 9

    nodejs 官网 (opens new window) 当然也可以安装 .nvmrc (opens new window) 推荐的 node 版本

    img

    如果您还没安装 pnpm,请执行下面命令进行安装(mac 用户遇到安装报错请在命令前加上 sudo

    npm install -g pnpm
    +      
    目录

    快速开始

    # 开发环境

    vue-pure-admin v5.0.0 版本后,规定 node 版本应不小于 18.18.0 (推荐优先安装长期维护LTS版,如下图),pnpm 版本应不小于 9

    nodejs 官网 (opens new window) 当然也可以安装 .nvmrc (opens new window) 推荐的 node 版本

    img

    如果您还没安装 pnpm,请执行下面命令进行安装(mac 用户遇到安装报错请在命令前加上 sudo

    npm install -g pnpm
     
    1

    如果您需要安装多个 node 版本环境,请参考 Node.js 版本管理工具

    如果您觉得安装平台依赖慢,请参考 npmmirror

    # IDE

    如果您使用的 IDEvscode (opens new window) (推荐),请点击这里并安装推荐的插件,可提高开发效率

    # 拉取代码

    # 推荐使用 @pureadmin/cli 脚手架


    img

    1. 全局安装
    npm install -g @pureadmin/cli
     
    1
    1. 交互式选择模板并创建项目
    pure create
     
    1

    点我查看 @pureadmin/cli 脚手架详细用法 (opens new window)

    #GitHub 上拉取

    # 完整版前端代码

    git clone https://github.com/pure-admin/vue-pure-admin.git
    @@ -137,16 +137,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/tailwindcss/index.html b/pages/tailwindcss/index.html index 9e8a0153..739769e5 100644 --- a/pages/tailwindcss/index.html +++ b/pages/tailwindcss/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    Tailwind CSS

    平台内置了 Tailwind CSS (opens new window) , 可通过各种 程序类 快速构建自定义用户界面,再也不用写那些 "裹脚布" 似的 css

    # Tailwind CSSvscode 插件

    vscode 插件商店搜 bradlc.vscode-tailwindcss 安装后,鼠标覆盖到对应的类名,即可带来智能提示,如下图

    img

    # Tailwind CSS 文档

    官方英文文档 (opens new window) Tailwind CSS 最新版本
    非官方中文文档 (opens new window)

    # Tailwind CSS 使用技巧

    # 1. 自定义属性值

    拿最常用的 width 属性来举例,tailwindcss 内置了这些 width#class-reference (opens new window) 类名,有时候用户想写任意宽度值怎么做呢,比如给 div 一个 666px 的宽度 ,只需要按照下面的写法。当然不仅仅是宽度可以自定义,所有属性都支持这种模式,你只需要在自定义的时候用 [ ]包起来即可。

    <div class="w-[666px]" />
    +      
    目录

    Tailwind CSS

    平台内置了 Tailwind CSS (opens new window) , 可通过各种 程序类 快速构建自定义用户界面,再也不用写那些 "裹脚布" 似的 css

    # Tailwind CSSvscode 插件

    vscode 插件商店搜 bradlc.vscode-tailwindcss 安装后,鼠标覆盖到对应的类名,即可带来智能提示,如下图

    img

    # Tailwind CSS 文档

    官方英文文档 (opens new window) Tailwind CSS 最新版本
    非官方中文文档 (opens new window)

    # Tailwind CSS 使用技巧

    # 1. 自定义属性值

    拿最常用的 width 属性来举例,tailwindcss 内置了这些 width#class-reference (opens new window) 类名,有时候用户想写任意宽度值怎么做呢,比如给 div 一个 666px 的宽度 ,只需要按照下面的写法。当然不仅仅是宽度可以自定义,所有属性都支持这种模式,你只需要在自定义的时候用 [ ]包起来即可。

    <div class="w-[666px]" />
     
    1

    # 2. !important 权重,这里我们分为 步走

    # 2-1. 单个实用程序类加 !important

    • 比如给 p 标签 一个 black !important 的高权重字体颜色,只需要按照下面的写法。也就是某个属性,你需要加权重,那么就在其前面加上 ! 这个感叹号即可。
    <p class="!text-black">
       This will be medium even though bold comes later in the CSS.
     </p>
    @@ -133,16 +133,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/theme/index.html b/pages/theme/index.html index 6e7dc23c..c33ff74d 100644 --- a/pages/theme/index.html +++ b/pages/theme/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    主题和暗黑模式

    内置丰富的主题可供选择,也可自行配置主题并且适配了暗黑模式

    # 内置主题

    img

    从左往右:亮白色(默认) (opens new window) 道奇蓝 (opens new window) 深紫罗兰色 (opens new window) 深粉色 (opens new window) 猩红色 (opens new window) 橙红色 (opens new window) 绿宝石 (opens new window) 酸橙绿 (opens new window)

    # 自定义主题

    # 添加自定义主题

    ① 将您需要的主题色加入 themeColors (opens new window) 数组里,color 为主题色值,themeColor 为您给主题色取的别名

    ② 上一步完成后,我们将主题色在 src/style/theme.scss (opens new window) 文件里进行充分适配

    # 自定义CssVar解析

    // 菜单激活时字体和图标的颜色
    +      
    目录

    主题和暗黑模式

    内置丰富的主题可供选择,也可自行配置主题并且适配了暗黑模式

    # 内置主题

    img

    从左往右:亮白色(默认) (opens new window) 道奇蓝 (opens new window) 深紫罗兰色 (opens new window) 深粉色 (opens new window) 猩红色 (opens new window) 橙红色 (opens new window) 绿宝石 (opens new window) 酸橙绿 (opens new window)

    # 自定义主题

    # 添加自定义主题

    ① 将您需要的主题色加入 themeColors (opens new window) 数组里,color 为主题色值,themeColor 为您给主题色取的别名

    ② 上一步完成后,我们将主题色在 src/style/theme.scss (opens new window) 文件里进行充分适配

    # 自定义CssVar解析

    // 菜单激活时字体和图标的颜色
     --pure-theme-sub-menu-active-text;
     
     // 菜单未激活时的整体背景色
    @@ -141,16 +141,16 @@
               data-full-width-responsive="true">
           
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/track/index.html b/pages/track/index.html index 9e482331..596ce966 100644 --- a/pages/track/index.html +++ b/pages/track/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    非平台问题跟踪记录

    2020年11月16 开发平台到现在,已然忘记踩了多少坑,找了多少 issues、pull requests 以及重构了多少次,但是我并没有做记录,感觉很可惜,当然由于平台使用的技术比较新,也一直在跟随潮流,这也难免会出现一些很令人难以寻味的非平台 bug,从 2022年11月11日 起决定开始记录对平台影响较大的问题,供使用者参考(无任何抨击!感恩开源!)

    # 2022年11月11日vueVue.js devtools

    # 发现 vuebug

    • vue v3.2.41 及以上版本和 Vue.js devtools v6.4.5 两者一起使用,页面卡顿明显,尤其当页面元素多以及同一时刻操作较多元素是最为明显。解决办法:卸载 Vue.js devtools,毕竟我也不用 😄,断点调试足以(卸载 Vue.js devtools 后,页面比 vue v3.2.41 之前操作还流畅)

    # 排查方法

    • vue 升级到 v3.2.41 版本后,开发环境页面卡顿明显,当我打包后,线上预览很丝滑。然后我把平台的项目很多依赖都升级了个遍还不行,删除 pnpm-lock.yamlnode_modules 重新安装也不行,于是我怀疑是 pnpm 的问题,又把 pnpm6 升到 7 但还是不行,接着我把项目放到火狐浏览器运行,很流畅 😭,因为我平时不咋用火狐,没有安装任何插件,这样我就排查到问题出在谷歌浏览器的 Vue.js devtools 插件了,当然之前我在 vueissues 中看到不少 Vue.js devtools 会导致页面崩溃和内存泄露的问题

    # 2022年11月11日vite

    2022年11月11日 我将平台的 vite 版本固定到了 3.1.8 ,因为之后的版本问题还是有点多,尤其是这个 issues (opens new window),说的是 vite v3.1.8 以上版本首次启动在 windows 的表现比 mac 慢两倍。当然 vite v4 快来了,应该会解决很多问题,到时我们在升级。这里大家要注意下,依赖包还是跟着平台的版本去使用,不要随便升级,平台每次升级依赖都会去做测试(开发、生产)

    +
    目录

    非平台问题跟踪记录

    2020年11月16 开发平台到现在,已然忘记踩了多少坑,找了多少 issues、pull requests 以及重构了多少次,但是我并没有做记录,感觉很可惜,当然由于平台使用的技术比较新,也一直在跟随潮流,这也难免会出现一些很令人难以寻味的非平台 bug,从 2022年11月11日 起决定开始记录对平台影响较大的问题,供使用者参考(无任何抨击!感恩开源!)

    # 2022年11月11日vueVue.js devtools

    # 发现 vuebug

    • vue v3.2.41 及以上版本和 Vue.js devtools v6.4.5 两者一起使用,页面卡顿明显,尤其当页面元素多以及同一时刻操作较多元素是最为明显。解决办法:卸载 Vue.js devtools,毕竟我也不用 😄,断点调试足以(卸载 Vue.js devtools 后,页面比 vue v3.2.41 之前操作还流畅)

    # 排查方法

    • vue 升级到 v3.2.41 版本后,开发环境页面卡顿明显,当我打包后,线上预览很丝滑。然后我把平台的项目很多依赖都升级了个遍还不行,删除 pnpm-lock.yamlnode_modules 重新安装也不行,于是我怀疑是 pnpm 的问题,又把 pnpm6 升到 7 但还是不行,接着我把项目放到火狐浏览器运行,很流畅 😭,因为我平时不咋用火狐,没有安装任何插件,这样我就排查到问题出在谷歌浏览器的 Vue.js devtools 插件了,当然之前我在 vueissues 中看到不少 Vue.js devtools 会导致页面崩溃和内存泄露的问题

    # 2022年11月11日vite

    2022年11月11日 我将平台的 vite 版本固定到了 3.1.8 ,因为之后的版本问题还是有点多,尤其是这个 issues (opens new window),说的是 vite v3.1.8 以上版本首次启动在 windows 的表现比 mac 慢两倍。当然 vite v4 快来了,应该会解决很多问题,到时我们在升级。这里大家要注意下,依赖包还是跟着平台的版本去使用,不要随便升级,平台每次升级依赖都会去做测试(开发、生产)

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/typescript/index.html b/pages/typescript/index.html index c4d9650d..84afb10a 100644 --- a/pages/typescript/index.html +++ b/pages/typescript/index.html @@ -11,7 +11,7 @@ - + @@ -117,16 +117,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/utils/index.html b/pages/utils/index.html index b482aee5..f122f22c 100644 --- a/pages/utils/index.html +++ b/pages/utils/index.html @@ -11,7 +11,7 @@ - + @@ -117,16 +117,16 @@ data-full-width-responsive="true">
    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/viteplugin/index.html b/pages/viteplugin/index.html index 8431ef76..2b3c33a6 100644 --- a/pages/viteplugin/index.html +++ b/pages/viteplugin/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    vite插件

    pure-admin 平台开发的 vite 插件,持续维护,请放心使用

    # vite-plugin-remove-console

    • 生产环境删除所有指定 console 类型的 vite 插件。当然也可以完全自定义需要删除的语句,如删除 debugger 或一段指定的代码

    查看源码 (opens new window)

    # vite-plugin-router-warn

    • 根治非必要的开发环境下 vue-router 动态路由刷新警告 No match found for location with path
      +
    目录

    vite插件

    pure-admin 平台开发的 vite 插件,持续维护,请放心使用

    # vite-plugin-remove-console

    • 生产环境删除所有指定 console 类型的 vite 插件。当然也可以完全自定义需要删除的语句,如删除 debugger 或一段指定的代码

    查看源码 (opens new window)

    # vite-plugin-router-warn

    查看源码 (opens new window)

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - + diff --git a/pages/vscode/index.html b/pages/vscode/index.html index b1c89f1a..a477ab1d 100644 --- a/pages/vscode/index.html +++ b/pages/vscode/index.html @@ -11,7 +11,7 @@ - + @@ -108,7 +108,7 @@ data-full-width-responsive="true">
    目录

    .vscode文件夹详解

    平台内置很多实用的 vscode 插件 (opens new window),为了提高开发效率,您可以选择使用 vscode (opens new window) 编辑器

    # extensions.json

    一键安装平台推荐的 vscode 插件,安装方法如下图

    img

    img

    # settings.json

    设置扩展程序或 vscode 编辑器的一些属性

    # vue3.0.code-snippets

    vue3.0 版本代码片段。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.0 即可生成

    img

    # vue3.2.code-snippets

    vue3.2 版本代码片段(支持 <script setup> 语法)。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.2+ 即可生成

    img

    # vue3.3.code-snippets

    vue3.3 版本代码片段(支持 <script setup> 以及 defineOptions 语法)。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.3+ 即可生成

    img

    提示

    如果输入 vue 没有代码片段提示,请稍等一下 vscode 正在反应,或者您可以来到 .vscode/vue3.0.code-snippets.vscode/vue3.2.code-snippets.vscode/vue3.3.code-snippets,将这三个文件都 ctrl+s 保存一下,再回到 .vue 页面,输入 vue 就应该有提示了

    +
    目录

    .vscode文件夹详解

    平台内置很多实用的 vscode 插件 (opens new window),为了提高开发效率,您可以选择使用 vscode (opens new window) 编辑器

    # extensions.json

    一键安装平台推荐的 vscode 插件,安装方法如下图

    img

    img

    # settings.json

    设置扩展程序或 vscode 编辑器的一些属性

    # vue3.0.code-snippets

    vue3.0 版本代码片段。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.0 即可生成

    img

    # vue3.2.code-snippets

    vue3.2 版本代码片段(支持 <script setup> 语法)。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.2+ 即可生成

    img

    # vue3.3.code-snippets

    vue3.3 版本代码片段(支持 <script setup> 以及 defineOptions 语法)。在 .vue 文件输入 vue 即可看到如下图的选项,选择 Vue3.3+ 即可生成

    img

    提示

    如果输入 vue 没有代码片段提示,请稍等一下 vscode 正在反应,或者您可以来到 .vscode/vue3.0.code-snippets.vscode/vue3.2.code-snippets.vscode/vue3.3.code-snippets,将这三个文件都 ctrl+s 保存一下,再回到 .vue 页面,输入 vue 就应该有提示了

    上次更新: 2025/01/13, 04:13:05
    最近更新
    更多文章>
    最近更新
    更多文章>
    - +