diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..e3da718
--- /dev/null
+++ b/404.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ronna-admin-doc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CORS b/CORS
new file mode 100644
index 0000000..f59ec20
--- /dev/null
+++ b/CORS
@@ -0,0 +1 @@
+*
\ No newline at end of file
diff --git a/assets/css/0.styles.ea92d6e2.css b/assets/css/0.styles.ea92d6e2.css
new file mode 100644
index 0000000..49a44fb
--- /dev/null
+++ b/assets/css/0.styles.ea92d6e2.css
@@ -0,0 +1 @@
+@import url(//at.alicdn.com/t/font_1678482_4tbhmh589x.css);.code-copy{color:#aaa;fill:#aaa;font-size:14px;display:inline-block;cursor:pointer}div[class*=aside-code] aside .code-copy,div[class*=language-] pre .code-copy{position:absolute;z-index:1000;top:7px;right:35px;opacity:0;font-size:16px}div[class*=aside-code] aside:hover .code-copy,div[class*=language-] pre:hover .code-copy{opacity:1}.content pre,.content pre[class*=language-]{overflow-y:hidden}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{position:static!important}div[class~=language-text]:before{content:"text"}div[class~=language-yml]:before{content:"yml"}div[class*=language-] pre{-webkit-user-select:text;-moz-user-select:text;user-select:text}p code{-webkit-user-select:all;-moz-user-select:all;user-select:all}@keyframes message-move-in{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}#message-container .message.move-in{animation:message-move-in .3s ease-in-out}@keyframes message-move-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}#message-container .message.move-out{animation:message-move-out .3s ease-in-out;animation-fill-mode:forwards}#message-container .message{background:#fff;margin:10px 0;padding:0 10px;height:40px;box-shadow:0 0 10px 0 #ccc;font-size:14px;border-radius:3px;display:flex;align-items:center;transition:height .2s ease-in-out,margin .2s ease-in-out}#message-container{position:fixed;left:0;top:100px;right:0;display:flex;flex-direction:column;align-items:center}#message-container .message .text{color:#333;padding:0 20px 0 5px}.theme-code-block[data-v-12e2413c]{display:none}.theme-code-block__active[data-v-12e2413c]{display:block}.theme-code-block>pre[data-v-12e2413c]{background-color:orange}@media (max-width:419px){.theme-code-group div[class*=language-][data-v-12e2413c]{margin:0}}.theme-mode-light[data-v-48123b87]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-48123b87],.theme-mode-light pre[class*=language-][data-v-48123b87]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-48123b87]::-moz-selection,.theme-mode-light code[class*=language-][data-v-48123b87] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-48123b87]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-48123b87] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-48123b87]::selection,.theme-mode-light code[class*=language-][data-v-48123b87] ::selection,.theme-mode-light pre[class*=language-][data-v-48123b87]::selection,.theme-mode-light pre[class*=language-][data-v-48123b87] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-48123b87],.theme-mode-light pre[class*=language-][data-v-48123b87]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-48123b87]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-48123b87],.theme-mode-light pre[class*=language-][data-v-48123b87]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-48123b87]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-48123b87],.theme-mode-light .token.comment[data-v-48123b87],.theme-mode-light .token.doctype[data-v-48123b87],.theme-mode-light .token.prolog[data-v-48123b87]{color:#708090}.theme-mode-light .token.punctuation[data-v-48123b87]{color:#999}.theme-mode-light .namespace[data-v-48123b87]{opacity:.7}.theme-mode-light .token.boolean[data-v-48123b87],.theme-mode-light .token.constant[data-v-48123b87],.theme-mode-light .token.deleted[data-v-48123b87],.theme-mode-light .token.number[data-v-48123b87],.theme-mode-light .token.property[data-v-48123b87],.theme-mode-light .token.symbol[data-v-48123b87],.theme-mode-light .token.tag[data-v-48123b87]{color:#905}.theme-mode-light .token.attr-name[data-v-48123b87],.theme-mode-light .token.builtin[data-v-48123b87],.theme-mode-light .token.char[data-v-48123b87],.theme-mode-light .token.inserted[data-v-48123b87],.theme-mode-light .token.selector[data-v-48123b87],.theme-mode-light .token.string[data-v-48123b87]{color:#690}.theme-mode-light .language-css .token.string[data-v-48123b87],.theme-mode-light .style .token.string[data-v-48123b87],.theme-mode-light .token.entity[data-v-48123b87],.theme-mode-light .token.operator[data-v-48123b87],.theme-mode-light .token.url[data-v-48123b87]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-48123b87],.theme-mode-light .token.attr-value[data-v-48123b87],.theme-mode-light .token.keyword[data-v-48123b87]{color:#07a}.theme-mode-light .token.class-name[data-v-48123b87],.theme-mode-light .token.function[data-v-48123b87]{color:#dd4a68}.theme-mode-light .token.important[data-v-48123b87],.theme-mode-light .token.regex[data-v-48123b87],.theme-mode-light .token.variable[data-v-48123b87]{color:#e90}.theme-mode-light .token.bold[data-v-48123b87],.theme-mode-light .token.important[data-v-48123b87]{font-weight:700}.theme-mode-light .token.italic[data-v-48123b87]{font-style:italic}.theme-mode-light .token.entity[data-v-48123b87]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-48123b87],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-48123b87]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-48123b87]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-48123b87],.theme-mode-dark pre[class*=language-][data-v-48123b87]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-48123b87]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-48123b87],.theme-mode-dark pre[class*=language-][data-v-48123b87]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-48123b87]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-48123b87],.theme-mode-dark .token.cdata[data-v-48123b87],.theme-mode-dark .token.comment[data-v-48123b87],.theme-mode-dark .token.doctype[data-v-48123b87],.theme-mode-dark .token.prolog[data-v-48123b87]{color:#999}.theme-mode-dark .token.punctuation[data-v-48123b87]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-48123b87],.theme-mode-dark .token.deleted[data-v-48123b87],.theme-mode-dark .token.namespace[data-v-48123b87],.theme-mode-dark .token.tag[data-v-48123b87]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-48123b87]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-48123b87],.theme-mode-dark .token.function[data-v-48123b87],.theme-mode-dark .token.number[data-v-48123b87]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-48123b87],.theme-mode-dark .token.constant[data-v-48123b87],.theme-mode-dark .token.property[data-v-48123b87],.theme-mode-dark .token.symbol[data-v-48123b87]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-48123b87],.theme-mode-dark .token.builtin[data-v-48123b87],.theme-mode-dark .token.important[data-v-48123b87],.theme-mode-dark .token.keyword[data-v-48123b87],.theme-mode-dark .token.selector[data-v-48123b87]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-48123b87],.theme-mode-dark .token.char[data-v-48123b87],.theme-mode-dark .token.regex[data-v-48123b87],.theme-mode-dark .token.string[data-v-48123b87],.theme-mode-dark .token.variable[data-v-48123b87]{color:#7ec699}.theme-mode-dark .token.entity[data-v-48123b87],.theme-mode-dark .token.operator[data-v-48123b87],.theme-mode-dark .token.url[data-v-48123b87]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-48123b87],.theme-mode-dark .style .token.string[data-v-48123b87],.theme-mode-dark .token.entity[data-v-48123b87],.theme-mode-dark .token.operator[data-v-48123b87],.theme-mode-dark .token.url[data-v-48123b87]{background:none}.theme-mode-dark .token.bold[data-v-48123b87],.theme-mode-dark .token.important[data-v-48123b87]{font-weight:700}.theme-mode-dark .token.italic[data-v-48123b87]{font-style:italic}.theme-mode-dark .token.entity[data-v-48123b87]{cursor:help}.theme-mode-dark .token.inserted[data-v-48123b87]{color:green}.theme-mode-read[data-v-48123b87]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-48123b87],.theme-mode-read pre[class*=language-][data-v-48123b87]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-48123b87]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-48123b87],.theme-mode-read pre[class*=language-][data-v-48123b87]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-48123b87]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-48123b87],.theme-mode-read .token.cdata[data-v-48123b87],.theme-mode-read .token.comment[data-v-48123b87],.theme-mode-read .token.doctype[data-v-48123b87],.theme-mode-read .token.prolog[data-v-48123b87]{color:#999}.theme-mode-read .token.punctuation[data-v-48123b87]{color:#ccc}.theme-mode-read .token.attr-name[data-v-48123b87],.theme-mode-read .token.deleted[data-v-48123b87],.theme-mode-read .token.namespace[data-v-48123b87],.theme-mode-read .token.tag[data-v-48123b87]{color:#e2777a}.theme-mode-read .token.function-name[data-v-48123b87]{color:#6196cc}.theme-mode-read .token.boolean[data-v-48123b87],.theme-mode-read .token.function[data-v-48123b87],.theme-mode-read .token.number[data-v-48123b87]{color:#f08d49}.theme-mode-read .token.class-name[data-v-48123b87],.theme-mode-read .token.constant[data-v-48123b87],.theme-mode-read .token.property[data-v-48123b87],.theme-mode-read .token.symbol[data-v-48123b87]{color:#f8c555}.theme-mode-read .token.atrule[data-v-48123b87],.theme-mode-read .token.builtin[data-v-48123b87],.theme-mode-read .token.important[data-v-48123b87],.theme-mode-read .token.keyword[data-v-48123b87],.theme-mode-read .token.selector[data-v-48123b87]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-48123b87],.theme-mode-read .token.char[data-v-48123b87],.theme-mode-read .token.regex[data-v-48123b87],.theme-mode-read .token.string[data-v-48123b87],.theme-mode-read .token.variable[data-v-48123b87]{color:#7ec699}.theme-mode-read .token.entity[data-v-48123b87],.theme-mode-read .token.operator[data-v-48123b87],.theme-mode-read .token.url[data-v-48123b87]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-48123b87],.theme-mode-read .style .token.string[data-v-48123b87],.theme-mode-read .token.entity[data-v-48123b87],.theme-mode-read .token.operator[data-v-48123b87],.theme-mode-read .token.url[data-v-48123b87]{background:none}.theme-mode-read .token.bold[data-v-48123b87],.theme-mode-read .token.important[data-v-48123b87]{font-weight:700}.theme-mode-read .token.italic[data-v-48123b87]{font-style:italic}.theme-mode-read .token.entity[data-v-48123b87]{cursor:help}.theme-mode-read .token.inserted[data-v-48123b87]{color:green}.theme-style-line.theme-mode-light[data-v-48123b87]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-48123b87]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-48123b87]{--bodyBg:#f5f5d5}.theme-code-group[data-v-48123b87],.theme-code-group__nav[data-v-48123b87]{background-color:var(--codeBg);padding-bottom:22px;border-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__nav[data-v-48123b87]{margin-bottom:-35px}.theme-code-group__ul[data-v-48123b87]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__li[data-v-48123b87],.theme-code-group__nav-tab[data-v-48123b87]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:var(--codeColor);font-weight:600;opacity:.85}.theme-code-group__nav-tab-active[data-v-48123b87]{border-bottom:1px solid #11a8cd;opacity:1}.pre-blank[data-v-48123b87]{color:#11a8cd}body .theme-vdoing-content code{color:var(--textLightenColor);padding:.25rem .5rem;margin:0;font-size:.9em;background-color:hsla(0,0%,39.2%,.08);border-radius:3px}body .theme-vdoing-content code .token.deleted{color:#ec5975}body .theme-vdoing-content code .token.inserted{color:#11a8cd}body .theme-vdoing-content pre,body .theme-vdoing-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}body .theme-vdoing-content pre[class*=language-] code,body .theme-vdoing-content pre code{color:var(--codeColor);padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:var(--codeBg);border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.3)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative!important;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.8rem;color:hsla(0,0%,58.8%,.7)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:2.5rem;height:100%;background-color:rgba(0,0,0,.3)}div[class*=language-].line-numbers-mode pre{padding-left:3.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:2.5rem;text-align:center;color:hsla(0,0%,49.8%,.5);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:2.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--borderColor);background-color:var(--codeBg)}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:.2rem}.custom-block p{margin:0}.custom-block.danger,.custom-block.note,.custom-block.tip,.custom-block.warning{padding:.5rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983;color:#215d42}.custom-block.warning{background-color:#fff7d0;border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:var(--textColor)}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:var(--textColor)}.custom-block.note{background-color:#e8f5fa;border-color:#157bae;color:#0d4a68}.custom-block.right{color:var(--textColor);font-size:.9rem;text-align:right}.custom-block.theorem{margin:1rem 0;padding:.8rem 1.5rem;border-radius:2px;background-color:var(--customBlockBg)}.custom-block.theorem .title{font-weight:700;margin:.5rem 0}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1em 0;padding:1.6em;background-color:var(--customBlockBg)}.custom-block.details p{margin:.8rem 0}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.custom-block.details summary:hover{color:#11a8cd}.theme-mode-dark .custom-block.warning{background-color:rgba(255,247,208,.2);color:#e7c000}.theme-mode-dark .custom-block.warning .custom-block-title{color:#ffdc2f}.theme-mode-dark .custom-block.tip{background-color:rgba(243,245,247,.2);color:#42b983}.theme-mode-dark .custom-block.danger{background-color:rgba(255,230,230,.4);color:maroon}.theme-mode-dark .custom-block.danger a{color:#11a8cd}.theme-mode-dark .custom-block.note{background-color:rgba(243,245,247,.2);color:#157bae}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-vdoing-content:not(.custom){max-width:860px}.table-of-contents .badge{vertical-align:middle}.center-container{text-align:center}.center-container>h1,.center-container>h2,.center-container>h3,.center-container>h4,.center-container>h5,.center-container>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.center-container>h1 a.header-anchor,.center-container>h2 a.header-anchor,.center-container>h3 a.header-anchor,.center-container>h4 a.header-anchor,.center-container>h5 a.header-anchor,.center-container>h6 a.header-anchor{float:none;padding-right:0;margin-left:-.9rem}.cardListContainer{margin:.7rem 0}.cardListContainer>:not(.card-list){display:none}.cardListContainer .card-list{margin:-.35rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardListContainer .card-list .card-item{width:calc(33.33333% - .7rem);margin:.35rem;background:var(--bodyBg);border-radius:3px;color:var(--textColor);display:flex;box-shadow:1px 1px 2px 0 rgba(0,0,0,.06);transition:all .4s}.cardListContainer .card-list .card-item:hover{text-decoration:none;box-shadow:0 10px 20px -10px var(--randomColor,rgba(0,0,0,.15));transform:translateY(-3px) scale(1.01)}.cardListContainer .card-list .card-item:hover img{box-shadow:3px 2px 7px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item:hover div p{text-shadow:3px 2px 5px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item img{width:60px;height:60px;border-radius:50%;border:2px solid #fff;margin:1rem 0 1rem 1rem;box-shadow:3px 2px 5px rgba(0,0,0,.08);transition:all .4s}.cardListContainer .card-list .card-item div{flex:1;display:inline-block;float:right;padding:1rem 0}.cardListContainer .card-list .card-item div p{margin:0;padding:0 1rem;transition:text-shadow .4s;text-align:center}.cardListContainer .card-list .card-item div .name{margin:.2rem 0 .3rem}.cardListContainer .card-list .card-item div .desc{font-size:.8rem;line-height:1.1rem;opacity:.8;margin-bottom:.2rem}.cardListContainer .card-list .card-item.row-1{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img{margin-left:2rem}.cardListContainer .card-list .card-item.row-2{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-2 img{margin-left:1.5rem}.cardListContainer .card-list .card-item.row-3{width:calc(33.33333% - .7rem)}.cardListContainer .card-list .card-item.row-4{width:calc(25% - .7rem)}.cardImgListContainer{margin:1rem 0}.cardImgListContainer>:not(.card-list){display:none}.cardImgListContainer .card-list{margin:-.5rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardImgListContainer .card-list .card-item{width:calc(33.33333% - 1rem);margin:.5rem;background:var(--mainBg);border:1px solid rgba(0,0,0,.1);box-sizing:border-box;border-radius:3px;overflow:hidden;color:var(--textColor);box-shadow:2px 2px 10px rgba(0,0,0,.04);display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:stretch;transition:all .4s}.cardImgListContainer .card-list .card-item:hover{box-shadow:1px 1px 20px rgba(0,0,0,.1);transform:translateY(-3px)}.cardImgListContainer .card-list .card-item .box-img{overflow:hidden;position:relative;background:#eee}.cardImgListContainer .card-list .card-item .box-img img{display:block;width:100%;height:100%;transition:all .3s}.cardImgListContainer .card-list .card-item a{color:var(--textColor);transition:color .3s}.cardImgListContainer .card-list .card-item a:hover{text-decoration:none}.cardImgListContainer .card-list .card-item .box-info{padding:.8rem 1rem}.cardImgListContainer .card-list .card-item .box-info p{margin:0}.cardImgListContainer .card-list .card-item .box-info .desc{margin-top:.3rem;opacity:.8;font-size:.9rem;line-height:1.1rem;overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.cardImgListContainer .card-list .card-item .box-footer{overflow:hidden;padding:.8rem 1rem;border-top:1px solid rgba(0,0,0,.1)}.cardImgListContainer .card-list .card-item .box-footer img{width:1.8rem;height:1.8rem;border-radius:50%;float:left}.cardImgListContainer .card-list .card-item .box-footer span{line-height:1.8rem;float:left;margin-left:.6rem;font-size:.8rem}.cardImgListContainer .card-list .card-item.row-1{width:calc(100% - 1rem)}.cardImgListContainer .card-list .card-item.row-2{width:calc(50% - 1rem)}.cardImgListContainer .card-list .card-item.row-3{width:calc(33.33333% - 1rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(25% - 1rem)}.theme-mode-dark .cardImgListContainer .card-list .card-item,.theme-mode-dark .cardImgListContainer .card-list .card-item .box-footer{border-color:var(--borderColor)}@media (max-width:900px){.cardListContainer .card-list .card-item.row-4{width:calc(33.33333% - .7rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(33.33333% - 1rem)}}@media (max-width:720px){.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(50% - 1rem)}}@media (max-width:500px){.cardListContainer .card-list .card-item.row-1,.cardListContainer .card-list .card-item.row-2,.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img,.cardListContainer .card-list .card-item.row-2 img,.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-1,.cardImgListContainer .card-list .card-item.row-2,.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(100% - 1rem)}}body,html{padding:0;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;font-size:16px;color:#2c3e50;background:var(--bodyBg)}a,button,input{outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-focus-ring-color:transparent}@media (min-width:719px){::-webkit-scrollbar{width:6px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.15);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}}.card-box{border-radius:5px;background:var(--mainBg);box-shadow:0 0 4px 0 rgba(0,0,0,.1);transition:box-shadow .5s}.card-box:hover{box-shadow:0 1px 15px 0 rgba(0,0,0,.1)}@media (max-width:719px){.theme-style-line{margin-left:-1px;margin-right:-1px}}.theme-style-line .card-box{box-shadow:0 0;border:1px solid var(--borderColor)}.blur{-webkit-backdrop-filter:saturate(200%) blur(20px);backdrop-filter:saturate(200%) blur(20px)}.custom-page{min-height:calc(100vh - 3.6rem);padding-top:3.6rem;padding-bottom:.9rem}.custom-page .theme-vdoing-wrapper{margin:0 auto}body .search-box input{background-color:transparent;color:var(--textColor);border:1px solid var(--borderColor,#ccc)}@media (max-width:959px){body .search-box input{border-color:transparent}}.page{transition:padding .2s ease;padding-left:.8rem}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:3.6rem;background-color:var(--blurBg);box-sizing:border-box;box-shadow:0 2px 5px rgba(0,0,0,.06)}.sidebar-mask{top:0;width:100vw;height:100vh}.sidebar-hover-trigger,.sidebar-mask{position:fixed;z-index:12;left:0;display:none}.sidebar-hover-trigger{top:8.1rem;bottom:0;width:24px}.sidebar{font-size:16px;background-color:var(--sidebarBg);width:18rem;position:fixed;z-index:13;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--borderColor);overflow-y:auto;transform:translateX(-100%);transition:transform .2s}@media (max-width:719px){.sidebar{background-color:var(--mainBg)}}.theme-vdoing-content:not(.custom){word-wrap:break-word}.theme-vdoing-content:not(.custom) a:hover{text-decoration:underline}.theme-vdoing-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-vdoing-content:not(.custom) img{max-width:100%}.theme-vdoing-content.custom{padding:0;margin:0}.theme-vdoing-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#11a8cd}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;opacity:.75;border-left:.2rem solid hsla(0,0%,39.2%,.3);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-vdoing-content:not(.custom)>h1,.theme-vdoing-content:not(.custom)>h2,.theme-vdoing-content:not(.custom)>h3,.theme-vdoing-content:not(.custom)>h4,.theme-vdoing-content:not(.custom)>h5,.theme-vdoing-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-vdoing-content:not(.custom)>h1:first-child,.theme-vdoing-content:not(.custom)>h2:first-child,.theme-vdoing-content:not(.custom)>h3:first-child,.theme-vdoing-content:not(.custom)>h4:first-child,.theme-vdoing-content:not(.custom)>h5:first-child,.theme-vdoing-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-vdoing-content:not(.custom)>h1:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h1:first-child+p,.theme-vdoing-content:not(.custom)>h1:first-child+pre,.theme-vdoing-content:not(.custom)>h2:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h2:first-child+p,.theme-vdoing-content:not(.custom)>h2:first-child+pre,.theme-vdoing-content:not(.custom)>h3:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h3:first-child+p,.theme-vdoing-content:not(.custom)>h3:first-child+pre,.theme-vdoing-content:not(.custom)>h4:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h4:first-child+p,.theme-vdoing-content:not(.custom)>h4:first-child+pre,.theme-vdoing-content:not(.custom)>h5:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h5:first-child+p,.theme-vdoing-content:not(.custom)>h5:first-child+pre,.theme-vdoing-content:not(.custom)>h6:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h6:first-child+p,.theme-vdoing-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}.theme-vdoing-content:not(.custom)>.custom-block:first-child,.theme-vdoing-content:not(.custom)>p:first-child,.theme-vdoing-content:not(.custom)>pre:first-child{margin-top:2rem}h1{font-size:1.9rem}.theme-vdoing-content:not(.custom)>h1:first-child{display:none}h2{font-size:1.5rem;padding-bottom:.3rem;border-bottom:1px solid var(--borderColor)}h3{font-size:1.35rem}.page h4{font-size:1.25rem}.page h5{font-size:1.15rem}.page h6{font-size:1.05rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--borderColor)}table{border-collapse:collapse;margin:1rem 0;overflow-x:auto;width:100%;display:inline-table}@media (max-width:719px){table{display:block}}tr{border-top:1px solid var(--borderColor)}tr:nth-child(2n){background-color:hsla(0,0%,58.8%,.1)}td,th{border:1px solid var(--borderColor);padding:.6em 1em}@media (max-width:719px){td,th{padding:.3em .5em}}td a,th a{word-break:break-all}.theme-container{color:var(--textColor);min-height:100vh}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-vdoing-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px}}@media (max-width:719px){.sidebar{width:17.099999999999998rem}}@media (min-width:720px) and (max-width:959px){.sidebar{width:16.2rem}.theme-container.sidebar-open .page{padding-left:17rem!important}}@media (max-width:719px){.sidebar{top:0;height:100vh;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-vdoing-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}@media (min-width:720px){.theme-container .sidebar-hover-trigger{display:block}.theme-container .sidebar-hover-trigger:hover~.sidebar,.theme-container:not(.sidebar-open) .sidebar-hover-trigger~.sidebar:hover{transform:translateX(0);z-index:100}.theme-container.sidebar-open .sidebar-mask{display:none}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-button{left:18rem}.theme-container.sidebar-open .page{padding-left:18.8rem;padding-right:.8rem}.theme-container.sidebar-open .sidebar-hover-trigger{display:none}.theme-container.have-rightmenu .page{padding-right:250px}.theme-container.no-sidebar .page{padding-left:0!important}.theme-container.no-sidebar .sidebar-hover-trigger{display:none}.theme-container.hide-navbar .sidebar-hover-trigger{top:4.5rem}.theme-container.hide-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar-button{display:none}}@media print{.buttons,.navbar,.sidebar{display:none}.page{padding-top:0!important}}@media (min-width:720px) and (max-width:959px){.theme-container.sidebar-open:not(.on-sidebar) .sidebar-button{left:12.6rem}}.gt-container .gt-ico-tip:after{content:"。( Win + . ) or ( ⌃ + ⌘ + ␣ ) open Emoji";color:#999}.gt-container .gt-meta{border-color:var(--borderColor)!important}.gt-container .gt-comments-null{color:var(--textColor);opacity:.5}.gt-container .gt-header-textarea{color:var(--textColor);background:hsla(0,0%,70.6%,.1)!important}.gt-container .gt-btn{border-color:#11a8cd!important;background-color:#11a8cd!important}.gt-container .gt-btn-preview{background-color:hsla(0,0%,100%,0)!important;color:#11a8cd!important}.gt-container a{color:#11a8cd!important}.gt-container .gt-svg svg{fill:#11a8cd!important}.gt-container .gt-comment-admin .gt-comment-content,.gt-container .gt-comment-content{background-color:hsla(0,0%,58.8%,.1)!important}.gt-container .gt-comment-admin .gt-comment-content:hover,.gt-container .gt-comment-content:hover{box-shadow:0 0 25px hsla(0,0%,58.8%,.5)!important}.gt-container .gt-comment-admin .gt-comment-content .gt-comment-body,.gt-container .gt-comment-content .gt-comment-body{color:var(--textColor)!important}.qq{position:relative}.qq:after{content:"可撩";background:#11a8cd;color:#fff;padding:0 5px;border-radius:10px;font-size:12px;position:absolute;top:-4px;right:-35px;transform:scale(.85)}body .vuepress-plugin-demo-block__wrapper,body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__display{border-color:hsla(0,0%,62.7%,.3)}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover .vuepress-plugin-demo-block__expand:before{border-top-color:#11a8cd!important;border-bottom-color:#11a8cd!important}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover svg{fill:#11a8cd!important}.suggestions{overflow:auto;max-height:calc(100vh - 6rem)}@media (max-width:719px){.suggestions{width:90vw;min-width:90vw!important;margin-right:-20px}}.suggestions .highlight{color:#11a8cd;font-weight:700}#nprogress{pointer-events:none}#nprogress .bar{background:#11a8cd;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #11a8cd,0 0 5px #11a8cd;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#11a8cd transparent transparent #11a8cd;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.theme-mode-light[data-v-76f36478]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-76f36478],.theme-mode-light pre[class*=language-][data-v-76f36478]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-76f36478]::-moz-selection,.theme-mode-light code[class*=language-][data-v-76f36478] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-76f36478]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-76f36478] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-76f36478]::selection,.theme-mode-light code[class*=language-][data-v-76f36478] ::selection,.theme-mode-light pre[class*=language-][data-v-76f36478]::selection,.theme-mode-light pre[class*=language-][data-v-76f36478] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-76f36478],.theme-mode-light pre[class*=language-][data-v-76f36478]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-76f36478]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-76f36478],.theme-mode-light pre[class*=language-][data-v-76f36478]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-76f36478]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-76f36478],.theme-mode-light .token.comment[data-v-76f36478],.theme-mode-light .token.doctype[data-v-76f36478],.theme-mode-light .token.prolog[data-v-76f36478]{color:#708090}.theme-mode-light .token.punctuation[data-v-76f36478]{color:#999}.theme-mode-light .namespace[data-v-76f36478]{opacity:.7}.theme-mode-light .token.boolean[data-v-76f36478],.theme-mode-light .token.constant[data-v-76f36478],.theme-mode-light .token.deleted[data-v-76f36478],.theme-mode-light .token.number[data-v-76f36478],.theme-mode-light .token.property[data-v-76f36478],.theme-mode-light .token.symbol[data-v-76f36478],.theme-mode-light .token.tag[data-v-76f36478]{color:#905}.theme-mode-light .token.attr-name[data-v-76f36478],.theme-mode-light .token.builtin[data-v-76f36478],.theme-mode-light .token.char[data-v-76f36478],.theme-mode-light .token.inserted[data-v-76f36478],.theme-mode-light .token.selector[data-v-76f36478],.theme-mode-light .token.string[data-v-76f36478]{color:#690}.theme-mode-light .language-css .token.string[data-v-76f36478],.theme-mode-light .style .token.string[data-v-76f36478],.theme-mode-light .token.entity[data-v-76f36478],.theme-mode-light .token.operator[data-v-76f36478],.theme-mode-light .token.url[data-v-76f36478]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-76f36478],.theme-mode-light .token.attr-value[data-v-76f36478],.theme-mode-light .token.keyword[data-v-76f36478]{color:#07a}.theme-mode-light .token.class-name[data-v-76f36478],.theme-mode-light .token.function[data-v-76f36478]{color:#dd4a68}.theme-mode-light .token.important[data-v-76f36478],.theme-mode-light .token.regex[data-v-76f36478],.theme-mode-light .token.variable[data-v-76f36478]{color:#e90}.theme-mode-light .token.bold[data-v-76f36478],.theme-mode-light .token.important[data-v-76f36478]{font-weight:700}.theme-mode-light .token.italic[data-v-76f36478]{font-style:italic}.theme-mode-light .token.entity[data-v-76f36478]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-76f36478],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-76f36478]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-76f36478]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-76f36478],.theme-mode-dark pre[class*=language-][data-v-76f36478]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-76f36478]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-76f36478],.theme-mode-dark pre[class*=language-][data-v-76f36478]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-76f36478]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-76f36478],.theme-mode-dark .token.cdata[data-v-76f36478],.theme-mode-dark .token.comment[data-v-76f36478],.theme-mode-dark .token.doctype[data-v-76f36478],.theme-mode-dark .token.prolog[data-v-76f36478]{color:#999}.theme-mode-dark .token.punctuation[data-v-76f36478]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-76f36478],.theme-mode-dark .token.deleted[data-v-76f36478],.theme-mode-dark .token.namespace[data-v-76f36478],.theme-mode-dark .token.tag[data-v-76f36478]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-76f36478]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-76f36478],.theme-mode-dark .token.function[data-v-76f36478],.theme-mode-dark .token.number[data-v-76f36478]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-76f36478],.theme-mode-dark .token.constant[data-v-76f36478],.theme-mode-dark .token.property[data-v-76f36478],.theme-mode-dark .token.symbol[data-v-76f36478]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-76f36478],.theme-mode-dark .token.builtin[data-v-76f36478],.theme-mode-dark .token.important[data-v-76f36478],.theme-mode-dark .token.keyword[data-v-76f36478],.theme-mode-dark .token.selector[data-v-76f36478]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-76f36478],.theme-mode-dark .token.char[data-v-76f36478],.theme-mode-dark .token.regex[data-v-76f36478],.theme-mode-dark .token.string[data-v-76f36478],.theme-mode-dark .token.variable[data-v-76f36478]{color:#7ec699}.theme-mode-dark .token.entity[data-v-76f36478],.theme-mode-dark .token.operator[data-v-76f36478],.theme-mode-dark .token.url[data-v-76f36478]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-76f36478],.theme-mode-dark .style .token.string[data-v-76f36478],.theme-mode-dark .token.entity[data-v-76f36478],.theme-mode-dark .token.operator[data-v-76f36478],.theme-mode-dark .token.url[data-v-76f36478]{background:none}.theme-mode-dark .token.bold[data-v-76f36478],.theme-mode-dark .token.important[data-v-76f36478]{font-weight:700}.theme-mode-dark .token.italic[data-v-76f36478]{font-style:italic}.theme-mode-dark .token.entity[data-v-76f36478]{cursor:help}.theme-mode-dark .token.inserted[data-v-76f36478]{color:green}.theme-mode-read[data-v-76f36478]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-76f36478],.theme-mode-read pre[class*=language-][data-v-76f36478]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-76f36478]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-76f36478],.theme-mode-read pre[class*=language-][data-v-76f36478]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-76f36478]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-76f36478],.theme-mode-read .token.cdata[data-v-76f36478],.theme-mode-read .token.comment[data-v-76f36478],.theme-mode-read .token.doctype[data-v-76f36478],.theme-mode-read .token.prolog[data-v-76f36478]{color:#999}.theme-mode-read .token.punctuation[data-v-76f36478]{color:#ccc}.theme-mode-read .token.attr-name[data-v-76f36478],.theme-mode-read .token.deleted[data-v-76f36478],.theme-mode-read .token.namespace[data-v-76f36478],.theme-mode-read .token.tag[data-v-76f36478]{color:#e2777a}.theme-mode-read .token.function-name[data-v-76f36478]{color:#6196cc}.theme-mode-read .token.boolean[data-v-76f36478],.theme-mode-read .token.function[data-v-76f36478],.theme-mode-read .token.number[data-v-76f36478]{color:#f08d49}.theme-mode-read .token.class-name[data-v-76f36478],.theme-mode-read .token.constant[data-v-76f36478],.theme-mode-read .token.property[data-v-76f36478],.theme-mode-read .token.symbol[data-v-76f36478]{color:#f8c555}.theme-mode-read .token.atrule[data-v-76f36478],.theme-mode-read .token.builtin[data-v-76f36478],.theme-mode-read .token.important[data-v-76f36478],.theme-mode-read .token.keyword[data-v-76f36478],.theme-mode-read .token.selector[data-v-76f36478]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-76f36478],.theme-mode-read .token.char[data-v-76f36478],.theme-mode-read .token.regex[data-v-76f36478],.theme-mode-read .token.string[data-v-76f36478],.theme-mode-read .token.variable[data-v-76f36478]{color:#7ec699}.theme-mode-read .token.entity[data-v-76f36478],.theme-mode-read .token.operator[data-v-76f36478],.theme-mode-read .token.url[data-v-76f36478]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-76f36478],.theme-mode-read .style .token.string[data-v-76f36478],.theme-mode-read .token.entity[data-v-76f36478],.theme-mode-read .token.operator[data-v-76f36478],.theme-mode-read .token.url[data-v-76f36478]{background:none}.theme-mode-read .token.bold[data-v-76f36478],.theme-mode-read .token.important[data-v-76f36478]{font-weight:700}.theme-mode-read .token.italic[data-v-76f36478]{font-style:italic}.theme-mode-read .token.entity[data-v-76f36478]{cursor:help}.theme-mode-read .token.inserted[data-v-76f36478]{color:green}.theme-style-line.theme-mode-light[data-v-76f36478]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-76f36478]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-76f36478]{--bodyBg:#f5f5d5}.theme-vdoing-content[data-v-76f36478]{margin:3rem auto;padding:1.5rem}.theme-vdoing-content span[data-v-76f36478]{font-size:6rem;color:#11a8cd}.main-wrapper{margin:1.5rem auto 0;max-width:1100px;padding:0 .9rem;box-sizing:border-box;position:relative;display:flex}.main-wrapper .main-left{flex:1}.main-wrapper .main-left .theme-vdoing-content.card-box{padding:1rem 1.5rem;margin-bottom:.9rem}.main-wrapper .main-left .home-content{padding:1rem 1.5rem 0}.main-wrapper .main-right>*{width:245px;box-sizing:border-box}@media (max-width:900px){.main-wrapper .main-right>*{width:235px}}.main-wrapper .main-right .card-box{margin:0 0 .8rem .8rem;padding-top:.95rem;padding-bottom:.95rem}@media (max-width:719px){.main-wrapper{margin:.9rem 0;padding:0;display:block}.main-wrapper .main-left{width:100%}.main-wrapper .main-left .post-list{margin-bottom:3rem}.main-wrapper .main-left .post-list .post{border-radius:0}.main-wrapper .main-left .pagination{margin-bottom:3rem}.main-wrapper .main-right .blogger-wrapper{display:none}.main-wrapper .main-right .card-box{margin:0 0 .9rem;border-radius:0;width:100%}.theme-style-line .main-wrapper .main-right .card-box{margin:-1px 0 0}}.post-list{margin-bottom:3rem}.post-list .post{position:relative;padding:1rem 1.5rem;margin-bottom:.8rem;transition:all .3s}.post-list .post:last-child{border-bottom:none}.post-list .post.post-leave-active{display:none}.post-list .post.post-enter{opacity:0;transform:translateX(-20px)}.post-list .post:before{position:absolute;top:-1px;right:0;font-size:2.5rem;color:#ff5722;opacity:.85}.post-list .post .title-wrapper a{color:var(--textColor)}.post-list .post .title-wrapper a:hover{color:#11a8cd}.post-list .post .title-wrapper h2{margin:.5rem 0;font-size:1.4rem;border:none}.post-list .post .title-wrapper h2 .title-tag{height:1.2rem;line-height:1.2rem;border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.15rem);display:inline-block}.post-list .post .title-wrapper h2 a{display:block}@media (max-width:719px){.post-list .post .title-wrapper h2 a{font-weight:400}}.post-list .post .title-wrapper .article-info>a,.post-list .post .title-wrapper .article-info>span{opacity:.7;font-size:.8rem;margin-right:1rem;cursor:pointer}.post-list .post .title-wrapper .article-info>a:before,.post-list .post .title-wrapper .article-info>span:before{margin-right:.3rem}.post-list .post .title-wrapper .article-info>a a,.post-list .post .title-wrapper .article-info>span a{margin:0}.post-list .post .title-wrapper .article-info>a a:not(:first-child):before,.post-list .post .title-wrapper .article-info>span a:not(:first-child):before{content:"/"}.post-list .post .title-wrapper .article-info .tags a:not(:first-child):before{content:"、"}.post-list .post .excerpt-wrapper{border-top:1px solid var(--borderColor);margin:.5rem 0;overflow:hidden}.post-list .post .excerpt-wrapper .excerpt{margin-bottom:.3rem;font-size:.92rem}.post-list .post .excerpt-wrapper .excerpt h1,.post-list .post .excerpt-wrapper .excerpt h2,.post-list .post .excerpt-wrapper .excerpt h3{display:none}.post-list .post .excerpt-wrapper .excerpt img{max-height:280px;max-width:100%!important;margin:0 auto}.post-list .post .excerpt-wrapper .readmore{float:right;margin-right:1rem;line-height:1rem}.post-list .post .excerpt-wrapper .readmore:before{float:right;font-size:.8rem;margin:.1rem 0 0 .2rem}.theme-style-line .post-list{border:1px solid var(--borderColor);border-bottom:none;border-radius:5px;overflow:hidden}.theme-style-line .post-list .post{margin-bottom:0;border:none;border-bottom:1px solid var(--borderColor);border-radius:0}.article-list{padding:1rem 2rem}@media (max-width:959px){.article-list{padding:1rem 1.5rem}}.article-list.no-article-list{display:none}.article-list .article-title{border-bottom:1px solid var(--borderColor);font-size:1.3rem;padding:1rem}.article-list .article-title a{font-size:1.2rem;color:var(--textColor);opacity:.9}.article-list .article-title a:before{margin-right:.4rem;font-size:1.1rem}.article-list .article-wrapper{overflow:hidden}.article-list .article-wrapper dl{border-bottom:1px dotted var(--borderColor);float:left;display:flex;padding:8px 0;margin:0;height:45px;width:100%}.article-list .article-wrapper dl dd{font-size:1.1rem;color:#f17229;width:50px;text-align:center;margin:0;line-height:45px}.article-list .article-wrapper dl dt{flex:1;display:flex}.article-list .article-wrapper dl dt a{color:var(--textColor);flex:1;display:flex;height:45px;align-items:center;font-weight:400}.article-list .article-wrapper dl dt a div{overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.article-list .article-wrapper dl dt a div .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.article-list .article-wrapper dl dt a:hover{text-decoration:underline}.article-list .article-wrapper dl dt a.more{color:#11a8cd}.article-list .article-wrapper dl dt .date{width:50px;margin-right:15px;color:#999;text-align:right;font-size:.9rem;line-height:45px}.pagination{position:relative;height:60px;text-align:center}@media (max-width:720px){.pagination{margin-left:1px;margin-right:1px}}.pagination span{line-height:1rem;opacity:.9;cursor:pointer}.pagination span:hover{color:#11a8cd}.pagination span.ellipsis{opacity:.5}.pagination span.ellipsis:before{content:"...";font-size:1.2rem}@media (any-hover:hover){.pagination span.ellipsis.ell-two:hover:before{content:"«"}.pagination span.ellipsis.ell-four:hover:before{content:"»"}}.pagination>span{position:absolute;top:0;padding:1rem 1.2rem;font-size:.95rem}.pagination>span:before{font-size:.4rem}.pagination>span.disabled{color:hsla(0,0%,49%,.5)}.pagination>span.prev{left:0}.pagination>span.prev:before{margin-right:.3rem}.pagination>span.next{right:0}.pagination>span.next:before{float:right;margin-left:.3rem}.pagination>span p{display:inline;line-height:.95rem}.pagination .pagination-list span{display:inline-block;width:2.5rem;height:2.5rem;line-height:2.5rem;margin:.3rem}.pagination .pagination-list span.active{background:#11a8cd;color:var(--mainBg)}@media (max-width:800px){.pagination>span{padding:1rem 1.5rem}.pagination>span p{display:none}}@media (max-width:719px){.pagination>span{padding:.9rem 1.5rem}.pagination .pagination-list span{width:2.3rem;height:2.3rem;line-height:2.3rem;margin:.25rem}}@media (max-width:390px){.pagination>span{padding:.8rem 1.3rem}.pagination .pagination-list span{width:2rem;height:2rem;line-height:2rem;margin:.3rem .1rem .1rem}}.blogger-wrapper{height:auto;display:inline-table;padding-top:0!important;overflow:hidden}.blogger-wrapper .avatar{width:100%;overflow:hidden}.blogger-wrapper .avatar img{width:100%;height:100%}.blogger-wrapper .icons{border-top:none;height:35px;line-height:35px}.blogger-wrapper .icons a{font-size:20px;width:33%;color:var(--textColor);display:block;float:left;text-align:center;opacity:.8}.blogger-wrapper .icons a:hover{color:#11a8cd}.blogger-wrapper .blogger{padding:.3rem .95rem 0}.blogger-wrapper .blogger .name{font-size:1.3rem;display:block;margin-bottom:6px}.blogger-wrapper .blogger .slogan{color:var(--textColor)}.categories-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem;padding:0 .95rem}.categories-wrapper .title:before{margin-right:.3rem}.categories-wrapper .categories{margin-top:.6rem}.categories-wrapper .categories a{display:block;padding:8px 2.4rem 7px .95rem;color:var(--textColor);opacity:.8;font-size:.95rem;line-height:.95rem;position:relative;transition:all .2s;border-left:2px solid transparent;margin-top:-1px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media (max-width:719px){.categories-wrapper .categories a{font-weight:400}}.categories-wrapper .categories a:not(.active):hover{color:#11a8cd;background:#f8f8f8;border-color:#11a8cd}.categories-wrapper .categories a:not(.active):hover span{opacity:.8}.categories-wrapper .categories a span{background-color:var(--textColor);color:var(--mainBg);border-radius:8px;padding:0 .13rem;min-width:1rem;height:1rem;line-height:1rem;font-size:12px;text-align:center;opacity:.6;transition:opacity .3s;position:absolute;right:.95rem;top:8px}.categories-wrapper .categories a.active{background:#11a8cd;color:var(--mainBg);padding-left:.8rem;border-radius:1px;border-color:transparent}.theme-mode-dark .categories-wrapper .categories a:not(.active):hover,.theme-mode-read .categories-wrapper .categories a:not(.active):hover{background:var(--customBlockBg)}.tags-wrapper{padding:0 .95rem}.tags-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem}.tags-wrapper .title:before{margin-right:.3rem}.tags-wrapper .tags{text-align:justify;padding:.8rem .5rem .5rem;margin:0 -.5rem -.5rem}.tags-wrapper .tags a{opacity:.8;display:inline-block;padding:.2rem .4rem;transition:all .4s;background-color:var(--textColor);color:var(--mainBg);border-radius:3px;margin:0 .3rem .5rem 0;min-width:2rem;height:1rem;line-height:1rem;font-size:.8rem;text-align:center}@media (max-width:719px){.tags-wrapper .tags a{font-weight:400}}.tags-wrapper .tags a:hover{opacity:1;transform:scale(1.1)}.tags-wrapper .tags a.active{box-shadow:0 5px 10px -5px var(--randomColor,rgba(0,0,0,.15));transform:scale(1.22);opacity:1}.tags-wrapper .tags a.active:hover{text-decoration:none}.theme-mode-light[data-v-2a444754]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-2a444754],.theme-mode-light pre[class*=language-][data-v-2a444754]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-2a444754]::-moz-selection,.theme-mode-light code[class*=language-][data-v-2a444754] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-2a444754]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-2a444754] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-2a444754]::selection,.theme-mode-light code[class*=language-][data-v-2a444754] ::selection,.theme-mode-light pre[class*=language-][data-v-2a444754]::selection,.theme-mode-light pre[class*=language-][data-v-2a444754] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-2a444754],.theme-mode-light pre[class*=language-][data-v-2a444754]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-2a444754]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-2a444754],.theme-mode-light pre[class*=language-][data-v-2a444754]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-2a444754]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-2a444754],.theme-mode-light .token.comment[data-v-2a444754],.theme-mode-light .token.doctype[data-v-2a444754],.theme-mode-light .token.prolog[data-v-2a444754]{color:#708090}.theme-mode-light .token.punctuation[data-v-2a444754]{color:#999}.theme-mode-light .namespace[data-v-2a444754]{opacity:.7}.theme-mode-light .token.boolean[data-v-2a444754],.theme-mode-light .token.constant[data-v-2a444754],.theme-mode-light .token.deleted[data-v-2a444754],.theme-mode-light .token.number[data-v-2a444754],.theme-mode-light .token.property[data-v-2a444754],.theme-mode-light .token.symbol[data-v-2a444754],.theme-mode-light .token.tag[data-v-2a444754]{color:#905}.theme-mode-light .token.attr-name[data-v-2a444754],.theme-mode-light .token.builtin[data-v-2a444754],.theme-mode-light .token.char[data-v-2a444754],.theme-mode-light .token.inserted[data-v-2a444754],.theme-mode-light .token.selector[data-v-2a444754],.theme-mode-light .token.string[data-v-2a444754]{color:#690}.theme-mode-light .language-css .token.string[data-v-2a444754],.theme-mode-light .style .token.string[data-v-2a444754],.theme-mode-light .token.entity[data-v-2a444754],.theme-mode-light .token.operator[data-v-2a444754],.theme-mode-light .token.url[data-v-2a444754]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-2a444754],.theme-mode-light .token.attr-value[data-v-2a444754],.theme-mode-light .token.keyword[data-v-2a444754]{color:#07a}.theme-mode-light .token.class-name[data-v-2a444754],.theme-mode-light .token.function[data-v-2a444754]{color:#dd4a68}.theme-mode-light .token.important[data-v-2a444754],.theme-mode-light .token.regex[data-v-2a444754],.theme-mode-light .token.variable[data-v-2a444754]{color:#e90}.theme-mode-light .token.bold[data-v-2a444754],.theme-mode-light .token.important[data-v-2a444754]{font-weight:700}.theme-mode-light .token.italic[data-v-2a444754]{font-style:italic}.theme-mode-light .token.entity[data-v-2a444754]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-2a444754],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-2a444754]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-2a444754]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-2a444754],.theme-mode-dark pre[class*=language-][data-v-2a444754]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-2a444754]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-2a444754],.theme-mode-dark pre[class*=language-][data-v-2a444754]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-2a444754]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-2a444754],.theme-mode-dark .token.cdata[data-v-2a444754],.theme-mode-dark .token.comment[data-v-2a444754],.theme-mode-dark .token.doctype[data-v-2a444754],.theme-mode-dark .token.prolog[data-v-2a444754]{color:#999}.theme-mode-dark .token.punctuation[data-v-2a444754]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-2a444754],.theme-mode-dark .token.deleted[data-v-2a444754],.theme-mode-dark .token.namespace[data-v-2a444754],.theme-mode-dark .token.tag[data-v-2a444754]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-2a444754]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-2a444754],.theme-mode-dark .token.function[data-v-2a444754],.theme-mode-dark .token.number[data-v-2a444754]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-2a444754],.theme-mode-dark .token.constant[data-v-2a444754],.theme-mode-dark .token.property[data-v-2a444754],.theme-mode-dark .token.symbol[data-v-2a444754]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-2a444754],.theme-mode-dark .token.builtin[data-v-2a444754],.theme-mode-dark .token.important[data-v-2a444754],.theme-mode-dark .token.keyword[data-v-2a444754],.theme-mode-dark .token.selector[data-v-2a444754]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-2a444754],.theme-mode-dark .token.char[data-v-2a444754],.theme-mode-dark .token.regex[data-v-2a444754],.theme-mode-dark .token.string[data-v-2a444754],.theme-mode-dark .token.variable[data-v-2a444754]{color:#7ec699}.theme-mode-dark .token.entity[data-v-2a444754],.theme-mode-dark .token.operator[data-v-2a444754],.theme-mode-dark .token.url[data-v-2a444754]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-2a444754],.theme-mode-dark .style .token.string[data-v-2a444754],.theme-mode-dark .token.entity[data-v-2a444754],.theme-mode-dark .token.operator[data-v-2a444754],.theme-mode-dark .token.url[data-v-2a444754]{background:none}.theme-mode-dark .token.bold[data-v-2a444754],.theme-mode-dark .token.important[data-v-2a444754]{font-weight:700}.theme-mode-dark .token.italic[data-v-2a444754]{font-style:italic}.theme-mode-dark .token.entity[data-v-2a444754]{cursor:help}.theme-mode-dark .token.inserted[data-v-2a444754]{color:green}.theme-mode-read[data-v-2a444754]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-2a444754],.theme-mode-read pre[class*=language-][data-v-2a444754]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-2a444754]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-2a444754],.theme-mode-read pre[class*=language-][data-v-2a444754]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-2a444754]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-2a444754],.theme-mode-read .token.cdata[data-v-2a444754],.theme-mode-read .token.comment[data-v-2a444754],.theme-mode-read .token.doctype[data-v-2a444754],.theme-mode-read .token.prolog[data-v-2a444754]{color:#999}.theme-mode-read .token.punctuation[data-v-2a444754]{color:#ccc}.theme-mode-read .token.attr-name[data-v-2a444754],.theme-mode-read .token.deleted[data-v-2a444754],.theme-mode-read .token.namespace[data-v-2a444754],.theme-mode-read .token.tag[data-v-2a444754]{color:#e2777a}.theme-mode-read .token.function-name[data-v-2a444754]{color:#6196cc}.theme-mode-read .token.boolean[data-v-2a444754],.theme-mode-read .token.function[data-v-2a444754],.theme-mode-read .token.number[data-v-2a444754]{color:#f08d49}.theme-mode-read .token.class-name[data-v-2a444754],.theme-mode-read .token.constant[data-v-2a444754],.theme-mode-read .token.property[data-v-2a444754],.theme-mode-read .token.symbol[data-v-2a444754]{color:#f8c555}.theme-mode-read .token.atrule[data-v-2a444754],.theme-mode-read .token.builtin[data-v-2a444754],.theme-mode-read .token.important[data-v-2a444754],.theme-mode-read .token.keyword[data-v-2a444754],.theme-mode-read .token.selector[data-v-2a444754]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-2a444754],.theme-mode-read .token.char[data-v-2a444754],.theme-mode-read .token.regex[data-v-2a444754],.theme-mode-read .token.string[data-v-2a444754],.theme-mode-read .token.variable[data-v-2a444754]{color:#7ec699}.theme-mode-read .token.entity[data-v-2a444754],.theme-mode-read .token.operator[data-v-2a444754],.theme-mode-read .token.url[data-v-2a444754]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-2a444754],.theme-mode-read .style .token.string[data-v-2a444754],.theme-mode-read .token.entity[data-v-2a444754],.theme-mode-read .token.operator[data-v-2a444754],.theme-mode-read .token.url[data-v-2a444754]{background:none}.theme-mode-read .token.bold[data-v-2a444754],.theme-mode-read .token.important[data-v-2a444754]{font-weight:700}.theme-mode-read .token.italic[data-v-2a444754]{font-style:italic}.theme-mode-read .token.entity[data-v-2a444754]{cursor:help}.theme-mode-read .token.inserted[data-v-2a444754]{color:green}.theme-style-line.theme-mode-light[data-v-2a444754]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-2a444754]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-2a444754]{--bodyBg:#f5f5d5}.home-wrapper .banner[data-v-2a444754]{width:100%;min-height:450px;margin-top:3.6rem;color:#fff;position:relative;overflow:hidden}.home-wrapper .banner .banner-conent[data-v-2a444754]{max-width:1100px;margin:0 auto;position:relative;z-index:1;overflow:hidden}.home-wrapper .banner .banner-conent .hero[data-v-2a444754]{text-align:center;margin-top:3rem}.home-wrapper .banner .banner-conent .hero img[data-v-2a444754]{max-width:100%;max-height:240px;display:block;margin:2rem auto 1.5rem}.home-wrapper .banner .banner-conent .hero h1[data-v-2a444754]{margin:0;font-size:3.2rem}.home-wrapper .banner .banner-conent .hero .action[data-v-2a444754],.home-wrapper .banner .banner-conent .hero .description[data-v-2a444754]{margin:1.5rem auto}.home-wrapper .banner .banner-conent .hero .description[data-v-2a444754]{max-width:40rem;font-size:1.1rem;line-height:1.3;opacity:.9}.home-wrapper .banner .banner-conent .hero .action-button[data-v-2a444754]{display:inline-block;font-size:1.2rem;background-color:#11a8cd;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0f97b9;color:#fff}.home-wrapper .banner .banner-conent .hero .action-button[data-v-2a444754]:hover{background-color:#13bee8}.home-wrapper .banner .banner-conent .features[data-v-2a444754]{padding:2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home-wrapper .banner .banner-conent .feature[data-v-2a444754]{flex-grow:1;flex-basis:30%;max-width:30%;text-align:center}.home-wrapper .banner .banner-conent .feature a[data-v-2a444754]{color:inherit}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-2a444754]{width:10rem;height:10rem;animation:heart-data-v-2a444754 1.2s ease-in-out 0s infinite alternate;animation-play-state:paused}.home-wrapper .banner .banner-conent .feature a h2[data-v-2a444754]{font-weight:500;font-size:1.3rem;border-bottom:none;padding-bottom:0}.home-wrapper .banner .banner-conent .feature a p[data-v-2a444754]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .banner-conent .feature:hover .feature-img[data-v-2a444754]{animation-play-state:running}.home-wrapper .banner .banner-conent .feature:hover h2[data-v-2a444754],.home-wrapper .banner .banner-conent .feature:hover p[data-v-2a444754]{color:#11a8cd}.home-wrapper .banner .slide-banner[data-v-2a444754]{margin-top:2rem}.home-wrapper .banner .slide-banner .banner-wrapper[data-v-2a444754]{position:relative}.home-wrapper .banner .slide-banner .slide-banner-scroll[data-v-2a444754]{min-height:1px;overflow:hidden}.home-wrapper .banner .slide-banner .slide-banner-wrapper[data-v-2a444754]{height:300px}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item[data-v-2a444754]{display:inline-block;height:300px;width:100%;text-align:center}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a[data-v-2a444754]{color:inherit}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a .feature-img[data-v-2a444754]{width:10rem;height:10rem}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a h2[data-v-2a444754]{font-size:1.1rem;font-weight:500;border-bottom:none;padding-bottom:0}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a p[data-v-2a444754]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .slide-banner .docs-wrapper[data-v-2a444754]{position:absolute;bottom:25px;left:50%;transform:translateX(-50%)}.home-wrapper .banner .slide-banner .docs-wrapper .doc[data-v-2a444754]{display:inline-block;margin:0 4px;width:8px;height:8px;border-radius:50%;background:var(--textColor);opacity:.9}.home-wrapper .banner .slide-banner .docs-wrapper .doc.active[data-v-2a444754]{opacity:.5}.home-wrapper .banner.hide-banner[data-v-2a444754]{display:none}.home-wrapper .banner.hide-banner+.main-wrapper[data-v-2a444754]{margin-top:4.5rem}.home-wrapper .main-wrapper[data-v-2a444754]{margin-top:2rem}.home-wrapper .main-wrapper .main-left .card-box[data-v-2a444754]{margin-bottom:2rem}.home-wrapper .main-wrapper .main-left .pagination[data-v-2a444754]{margin-bottom:3rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-2a444754]{padding:0 2rem;overflow:hidden;border:none}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-2a444754]>:first-child{padding-top:2rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-2a444754]>:last-child{padding-bottom:2rem}.home-wrapper .main-wrapper .main-right .custom-html-box[data-v-2a444754]{padding:0;overflow:hidden}@media (max-width:1025px){.home-wrapper .banner .banner-conent .hero h1[data-v-2a444754]{font-size:2.5rem}.home-wrapper .banner .banner-conent .hero .description[data-v-2a444754]{font-size:1rem}.home-wrapper .banner .banner-conent .feature a h2[data-v-2a444754]{font-size:1.1rem}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-2a444754]{width:9rem;height:9rem}}@media (max-width:719px){.home-wrapper .banner .banner-conent .features[data-v-2a444754]{display:none!important}}@media (max-width:419px){.home-wrapper .banner-conent[data-v-2a444754]{padding-left:1.5rem;padding-right:1.5rem}.home-wrapper .banner-conent .hero img[data-v-2a444754]{max-height:210px;margin:2rem auto 1.2rem}.home-wrapper .banner-conent .hero h1[data-v-2a444754]{font-size:2rem}.home-wrapper .banner-conent .hero .action[data-v-2a444754],.home-wrapper .banner-conent .hero .description[data-v-2a444754],.home-wrapper .banner-conent .hero h1[data-v-2a444754]{margin:1.2rem auto}.home-wrapper .banner-conent .hero .description[data-v-2a444754]{font-size:1.2rem}.home-wrapper .banner-conent .hero .action-button[data-v-2a444754]{font-size:1rem;padding:.6rem 1.2rem}.home-wrapper .banner-conent .feature h2[data-v-2a444754]{font-size:1.25rem}}@media (max-width:719px){.theme-style-line .main-wrapper[data-v-2a444754]{margin-top:-1px}}@keyframes heart-data-v-2a444754{0%{transform:translate(0)}to{transform:translateY(8px)}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/ronna-admin-doc/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#11a8cd}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#11a8cd;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{text-decoration:underline}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}@media (max-width:719px){.sidebar-button{display:block}}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (min-width:720px){.sidebar-button{width:40px;height:40px;display:inline-block;position:fixed;left:0;top:4.6rem;text-align:center;line-height:44px;margin:5px 8px;color:#888;border-radius:50%;padding:0;transition:all .2s}.sidebar-button:hover{background:#11a8cd;color:#fff;box-shadow:0 0 6px #11a8cd}.sidebar-button .icon{display:inline;width:1rem;height:1rem}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--textColor)}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid var(--borderColor);padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#11a8cd}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #11a8cd;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#11a8cd}.dropdown-wrapper .dropdown-title .link-title{display:none}.dropdown-wrapper .dropdown-title .title{display:inline-block!important}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--mainBg);padding:.6rem 0;border-bottom-color:var(--borderColor);border:1px solid var(--borderColor);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.nav-item .dropdown-title a.router-link-active,.nav-item .dropdown-title a:hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#11a8cd}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:959px){.nav-links .nav-item{margin-left:1.2rem}}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:var(--textColor)}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;transition:transform .3s}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--textColor);position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}.hide-navbar .navbar{transform:translateY(-100%)}@media (max-width:959px){.navbar .site-name{display:none}}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:860px;padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block;float:left;margin:0 2rem .5rem 0}.page-edit .edit-link a{margin-right:.25rem}.page-edit .tags{float:left}.page-edit .tags a{margin:0 .8rem .5rem 0;display:inline-block;color:var(--textLightenColor);padding:.2rem .7rem;font-size:.9em;background-color:hsla(0,0%,50.2%,.08);border-radius:3px;opacity:.8}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:var(--textColor);opacity:.8}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link,.page-edit .tags{margin-bottom:.5rem}.page-edit .last-updated{width:100%;font-size:.8em;text-align:left}}.page-nav{max-width:860px;padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--borderColor);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page-nav-centre-wrap .page-nav-centre{position:fixed;top:50%;width:80px;height:70px;margin-top:-35px;outline:0;transition:all .2s;border-radius:3px;opacity:.55;z-index:99}@media (max-width:1340px){.page-nav-centre-wrap .page-nav-centre{width:50px}}@media (max-width:960px){.page-nav-centre-wrap .page-nav-centre{display:none}}.page-nav-centre-wrap .page-nav-centre:hover{background:hsla(0,0%,60%,.15);opacity:1}.page-nav-centre-wrap .page-nav-centre:hover .tooltip{display:block}.page-nav-centre-wrap .page-nav-centre:before{content:"";display:block;width:10px;height:10px;border-top:2px solid #999;border-right:2px solid #999;position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.page-nav-centre-wrap .page-nav-centre .tooltip{display:none;background:rgba(0,0,0,.5);color:#fff;padding:4px 8px;font-size:13px;border-radius:3px;position:fixed;max-width:200px;z-index:99}.page-nav-centre-wrap .page-nav-centre-prev{left:0}.page-nav-centre-wrap .page-nav-centre-prev:before{transform:rotate(-135deg)}.page-nav-centre-wrap .page-nav-centre-next{right:0}.page-nav-centre-wrap .page-nav-centre-next:before{transform:rotate(45deg)}.sidebar-open .page-nav-centre-wrap .page-nav-centre-prev{left:18rem}.no-sidebar .page-nav-centre-wrap .page-nav-centre-prev{left:0}.theme-mode-light[data-v-057748f7]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-057748f7],.theme-mode-light pre[class*=language-][data-v-057748f7]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-057748f7]::-moz-selection,.theme-mode-light code[class*=language-][data-v-057748f7] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-057748f7]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-057748f7] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-057748f7]::selection,.theme-mode-light code[class*=language-][data-v-057748f7] ::selection,.theme-mode-light pre[class*=language-][data-v-057748f7]::selection,.theme-mode-light pre[class*=language-][data-v-057748f7] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-057748f7],.theme-mode-light pre[class*=language-][data-v-057748f7]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-057748f7]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-057748f7],.theme-mode-light pre[class*=language-][data-v-057748f7]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-057748f7]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-057748f7],.theme-mode-light .token.comment[data-v-057748f7],.theme-mode-light .token.doctype[data-v-057748f7],.theme-mode-light .token.prolog[data-v-057748f7]{color:#708090}.theme-mode-light .token.punctuation[data-v-057748f7]{color:#999}.theme-mode-light .namespace[data-v-057748f7]{opacity:.7}.theme-mode-light .token.boolean[data-v-057748f7],.theme-mode-light .token.constant[data-v-057748f7],.theme-mode-light .token.deleted[data-v-057748f7],.theme-mode-light .token.number[data-v-057748f7],.theme-mode-light .token.property[data-v-057748f7],.theme-mode-light .token.symbol[data-v-057748f7],.theme-mode-light .token.tag[data-v-057748f7]{color:#905}.theme-mode-light .token.attr-name[data-v-057748f7],.theme-mode-light .token.builtin[data-v-057748f7],.theme-mode-light .token.char[data-v-057748f7],.theme-mode-light .token.inserted[data-v-057748f7],.theme-mode-light .token.selector[data-v-057748f7],.theme-mode-light .token.string[data-v-057748f7]{color:#690}.theme-mode-light .language-css .token.string[data-v-057748f7],.theme-mode-light .style .token.string[data-v-057748f7],.theme-mode-light .token.entity[data-v-057748f7],.theme-mode-light .token.operator[data-v-057748f7],.theme-mode-light .token.url[data-v-057748f7]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-057748f7],.theme-mode-light .token.attr-value[data-v-057748f7],.theme-mode-light .token.keyword[data-v-057748f7]{color:#07a}.theme-mode-light .token.class-name[data-v-057748f7],.theme-mode-light .token.function[data-v-057748f7]{color:#dd4a68}.theme-mode-light .token.important[data-v-057748f7],.theme-mode-light .token.regex[data-v-057748f7],.theme-mode-light .token.variable[data-v-057748f7]{color:#e90}.theme-mode-light .token.bold[data-v-057748f7],.theme-mode-light .token.important[data-v-057748f7]{font-weight:700}.theme-mode-light .token.italic[data-v-057748f7]{font-style:italic}.theme-mode-light .token.entity[data-v-057748f7]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-057748f7],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-057748f7]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-057748f7]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-057748f7],.theme-mode-dark pre[class*=language-][data-v-057748f7]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-057748f7]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-057748f7],.theme-mode-dark pre[class*=language-][data-v-057748f7]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-057748f7]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-057748f7],.theme-mode-dark .token.cdata[data-v-057748f7],.theme-mode-dark .token.comment[data-v-057748f7],.theme-mode-dark .token.doctype[data-v-057748f7],.theme-mode-dark .token.prolog[data-v-057748f7]{color:#999}.theme-mode-dark .token.punctuation[data-v-057748f7]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-057748f7],.theme-mode-dark .token.deleted[data-v-057748f7],.theme-mode-dark .token.namespace[data-v-057748f7],.theme-mode-dark .token.tag[data-v-057748f7]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-057748f7]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-057748f7],.theme-mode-dark .token.function[data-v-057748f7],.theme-mode-dark .token.number[data-v-057748f7]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-057748f7],.theme-mode-dark .token.constant[data-v-057748f7],.theme-mode-dark .token.property[data-v-057748f7],.theme-mode-dark .token.symbol[data-v-057748f7]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-057748f7],.theme-mode-dark .token.builtin[data-v-057748f7],.theme-mode-dark .token.important[data-v-057748f7],.theme-mode-dark .token.keyword[data-v-057748f7],.theme-mode-dark .token.selector[data-v-057748f7]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-057748f7],.theme-mode-dark .token.char[data-v-057748f7],.theme-mode-dark .token.regex[data-v-057748f7],.theme-mode-dark .token.string[data-v-057748f7],.theme-mode-dark .token.variable[data-v-057748f7]{color:#7ec699}.theme-mode-dark .token.entity[data-v-057748f7],.theme-mode-dark .token.operator[data-v-057748f7],.theme-mode-dark .token.url[data-v-057748f7]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-057748f7],.theme-mode-dark .style .token.string[data-v-057748f7],.theme-mode-dark .token.entity[data-v-057748f7],.theme-mode-dark .token.operator[data-v-057748f7],.theme-mode-dark .token.url[data-v-057748f7]{background:none}.theme-mode-dark .token.bold[data-v-057748f7],.theme-mode-dark .token.important[data-v-057748f7]{font-weight:700}.theme-mode-dark .token.italic[data-v-057748f7]{font-style:italic}.theme-mode-dark .token.entity[data-v-057748f7]{cursor:help}.theme-mode-dark .token.inserted[data-v-057748f7]{color:green}.theme-mode-read[data-v-057748f7]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-057748f7],.theme-mode-read pre[class*=language-][data-v-057748f7]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-057748f7]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-057748f7],.theme-mode-read pre[class*=language-][data-v-057748f7]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-057748f7]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-057748f7],.theme-mode-read .token.cdata[data-v-057748f7],.theme-mode-read .token.comment[data-v-057748f7],.theme-mode-read .token.doctype[data-v-057748f7],.theme-mode-read .token.prolog[data-v-057748f7]{color:#999}.theme-mode-read .token.punctuation[data-v-057748f7]{color:#ccc}.theme-mode-read .token.attr-name[data-v-057748f7],.theme-mode-read .token.deleted[data-v-057748f7],.theme-mode-read .token.namespace[data-v-057748f7],.theme-mode-read .token.tag[data-v-057748f7]{color:#e2777a}.theme-mode-read .token.function-name[data-v-057748f7]{color:#6196cc}.theme-mode-read .token.boolean[data-v-057748f7],.theme-mode-read .token.function[data-v-057748f7],.theme-mode-read .token.number[data-v-057748f7]{color:#f08d49}.theme-mode-read .token.class-name[data-v-057748f7],.theme-mode-read .token.constant[data-v-057748f7],.theme-mode-read .token.property[data-v-057748f7],.theme-mode-read .token.symbol[data-v-057748f7]{color:#f8c555}.theme-mode-read .token.atrule[data-v-057748f7],.theme-mode-read .token.builtin[data-v-057748f7],.theme-mode-read .token.important[data-v-057748f7],.theme-mode-read .token.keyword[data-v-057748f7],.theme-mode-read .token.selector[data-v-057748f7]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-057748f7],.theme-mode-read .token.char[data-v-057748f7],.theme-mode-read .token.regex[data-v-057748f7],.theme-mode-read .token.string[data-v-057748f7],.theme-mode-read .token.variable[data-v-057748f7]{color:#7ec699}.theme-mode-read .token.entity[data-v-057748f7],.theme-mode-read .token.operator[data-v-057748f7],.theme-mode-read .token.url[data-v-057748f7]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-057748f7],.theme-mode-read .style .token.string[data-v-057748f7],.theme-mode-read .token.entity[data-v-057748f7],.theme-mode-read .token.operator[data-v-057748f7],.theme-mode-read .token.url[data-v-057748f7]{background:none}.theme-mode-read .token.bold[data-v-057748f7],.theme-mode-read .token.important[data-v-057748f7]{font-weight:700}.theme-mode-read .token.italic[data-v-057748f7]{font-style:italic}.theme-mode-read .token.entity[data-v-057748f7]{cursor:help}.theme-mode-read .token.inserted[data-v-057748f7]{color:green}.theme-style-line.theme-mode-light[data-v-057748f7]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-057748f7]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-057748f7]{--bodyBg:#f5f5d5}.articleInfo-wrap[data-v-057748f7]{max-width:860px}.theme-style-line .articleInfo-wrap .articleInfo[data-v-057748f7]{padding-top:.5rem}.articleInfo-wrap[data-v-057748f7]{position:relative;z-index:1;color:#888}.articleInfo-wrap .articleInfo[data-v-057748f7]{overflow:hidden;font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs[data-v-057748f7]{margin:0;padding:0;overflow:hidden;display:inline-block;line-height:2rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .breadcrumbs[data-v-057748f7]{width:100%}}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-057748f7]{list-style-type:none;float:left;padding-right:5px}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-057748f7]:after{content:"/";margin-left:5px;color:#999}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-057748f7]:last-child:after{content:""}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-057748f7]{color:#888}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-057748f7]:before{font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-057748f7]:hover{color:#11a8cd}.articleInfo-wrap .articleInfo .breadcrumbs li .icon-home[data-v-057748f7]{text-decoration:none}.articleInfo-wrap .articleInfo .info[data-v-057748f7]{float:right;line-height:32px}@media (max-width:960px){.articleInfo-wrap .articleInfo .info[data-v-057748f7]{float:left}}.articleInfo-wrap .articleInfo .info div[data-v-057748f7]{float:left;margin-left:20px;font-size:.8rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .info div[data-v-057748f7]{margin:0 20px 0 0}}.articleInfo-wrap .articleInfo .info div[data-v-057748f7]:before{margin-right:3px}.articleInfo-wrap .articleInfo .info div a[data-v-057748f7]{color:#888}.articleInfo-wrap .articleInfo .info div a[data-v-057748f7]:hover{text-decoration:none}.articleInfo-wrap .articleInfo .info div a.beLink[data-v-057748f7]:hover{color:#11a8cd;text-decoration:underline}.theme-mode-light[data-v-f12ba5ac]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-f12ba5ac],.theme-mode-light pre[class*=language-][data-v-f12ba5ac]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-f12ba5ac]::-moz-selection,.theme-mode-light code[class*=language-][data-v-f12ba5ac] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-f12ba5ac]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-f12ba5ac] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-f12ba5ac]::selection,.theme-mode-light code[class*=language-][data-v-f12ba5ac] ::selection,.theme-mode-light pre[class*=language-][data-v-f12ba5ac]::selection,.theme-mode-light pre[class*=language-][data-v-f12ba5ac] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-f12ba5ac],.theme-mode-light pre[class*=language-][data-v-f12ba5ac]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-f12ba5ac]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-f12ba5ac],.theme-mode-light pre[class*=language-][data-v-f12ba5ac]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-f12ba5ac]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-f12ba5ac],.theme-mode-light .token.comment[data-v-f12ba5ac],.theme-mode-light .token.doctype[data-v-f12ba5ac],.theme-mode-light .token.prolog[data-v-f12ba5ac]{color:#708090}.theme-mode-light .token.punctuation[data-v-f12ba5ac]{color:#999}.theme-mode-light .namespace[data-v-f12ba5ac]{opacity:.7}.theme-mode-light .token.boolean[data-v-f12ba5ac],.theme-mode-light .token.constant[data-v-f12ba5ac],.theme-mode-light .token.deleted[data-v-f12ba5ac],.theme-mode-light .token.number[data-v-f12ba5ac],.theme-mode-light .token.property[data-v-f12ba5ac],.theme-mode-light .token.symbol[data-v-f12ba5ac],.theme-mode-light .token.tag[data-v-f12ba5ac]{color:#905}.theme-mode-light .token.attr-name[data-v-f12ba5ac],.theme-mode-light .token.builtin[data-v-f12ba5ac],.theme-mode-light .token.char[data-v-f12ba5ac],.theme-mode-light .token.inserted[data-v-f12ba5ac],.theme-mode-light .token.selector[data-v-f12ba5ac],.theme-mode-light .token.string[data-v-f12ba5ac]{color:#690}.theme-mode-light .language-css .token.string[data-v-f12ba5ac],.theme-mode-light .style .token.string[data-v-f12ba5ac],.theme-mode-light .token.entity[data-v-f12ba5ac],.theme-mode-light .token.operator[data-v-f12ba5ac],.theme-mode-light .token.url[data-v-f12ba5ac]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-f12ba5ac],.theme-mode-light .token.attr-value[data-v-f12ba5ac],.theme-mode-light .token.keyword[data-v-f12ba5ac]{color:#07a}.theme-mode-light .token.class-name[data-v-f12ba5ac],.theme-mode-light .token.function[data-v-f12ba5ac]{color:#dd4a68}.theme-mode-light .token.important[data-v-f12ba5ac],.theme-mode-light .token.regex[data-v-f12ba5ac],.theme-mode-light .token.variable[data-v-f12ba5ac]{color:#e90}.theme-mode-light .token.bold[data-v-f12ba5ac],.theme-mode-light .token.important[data-v-f12ba5ac]{font-weight:700}.theme-mode-light .token.italic[data-v-f12ba5ac]{font-style:italic}.theme-mode-light .token.entity[data-v-f12ba5ac]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-f12ba5ac],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-f12ba5ac]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-f12ba5ac]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-f12ba5ac],.theme-mode-dark pre[class*=language-][data-v-f12ba5ac]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-f12ba5ac]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-f12ba5ac],.theme-mode-dark pre[class*=language-][data-v-f12ba5ac]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-f12ba5ac]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-f12ba5ac],.theme-mode-dark .token.cdata[data-v-f12ba5ac],.theme-mode-dark .token.comment[data-v-f12ba5ac],.theme-mode-dark .token.doctype[data-v-f12ba5ac],.theme-mode-dark .token.prolog[data-v-f12ba5ac]{color:#999}.theme-mode-dark .token.punctuation[data-v-f12ba5ac]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-f12ba5ac],.theme-mode-dark .token.deleted[data-v-f12ba5ac],.theme-mode-dark .token.namespace[data-v-f12ba5ac],.theme-mode-dark .token.tag[data-v-f12ba5ac]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-f12ba5ac]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-f12ba5ac],.theme-mode-dark .token.function[data-v-f12ba5ac],.theme-mode-dark .token.number[data-v-f12ba5ac]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-f12ba5ac],.theme-mode-dark .token.constant[data-v-f12ba5ac],.theme-mode-dark .token.property[data-v-f12ba5ac],.theme-mode-dark .token.symbol[data-v-f12ba5ac]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-f12ba5ac],.theme-mode-dark .token.builtin[data-v-f12ba5ac],.theme-mode-dark .token.important[data-v-f12ba5ac],.theme-mode-dark .token.keyword[data-v-f12ba5ac],.theme-mode-dark .token.selector[data-v-f12ba5ac]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-f12ba5ac],.theme-mode-dark .token.char[data-v-f12ba5ac],.theme-mode-dark .token.regex[data-v-f12ba5ac],.theme-mode-dark .token.string[data-v-f12ba5ac],.theme-mode-dark .token.variable[data-v-f12ba5ac]{color:#7ec699}.theme-mode-dark .token.entity[data-v-f12ba5ac],.theme-mode-dark .token.operator[data-v-f12ba5ac],.theme-mode-dark .token.url[data-v-f12ba5ac]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-f12ba5ac],.theme-mode-dark .style .token.string[data-v-f12ba5ac],.theme-mode-dark .token.entity[data-v-f12ba5ac],.theme-mode-dark .token.operator[data-v-f12ba5ac],.theme-mode-dark .token.url[data-v-f12ba5ac]{background:none}.theme-mode-dark .token.bold[data-v-f12ba5ac],.theme-mode-dark .token.important[data-v-f12ba5ac]{font-weight:700}.theme-mode-dark .token.italic[data-v-f12ba5ac]{font-style:italic}.theme-mode-dark .token.entity[data-v-f12ba5ac]{cursor:help}.theme-mode-dark .token.inserted[data-v-f12ba5ac]{color:green}.theme-mode-read[data-v-f12ba5ac]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-f12ba5ac],.theme-mode-read pre[class*=language-][data-v-f12ba5ac]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-f12ba5ac]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-f12ba5ac],.theme-mode-read pre[class*=language-][data-v-f12ba5ac]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-f12ba5ac]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-f12ba5ac],.theme-mode-read .token.cdata[data-v-f12ba5ac],.theme-mode-read .token.comment[data-v-f12ba5ac],.theme-mode-read .token.doctype[data-v-f12ba5ac],.theme-mode-read .token.prolog[data-v-f12ba5ac]{color:#999}.theme-mode-read .token.punctuation[data-v-f12ba5ac]{color:#ccc}.theme-mode-read .token.attr-name[data-v-f12ba5ac],.theme-mode-read .token.deleted[data-v-f12ba5ac],.theme-mode-read .token.namespace[data-v-f12ba5ac],.theme-mode-read .token.tag[data-v-f12ba5ac]{color:#e2777a}.theme-mode-read .token.function-name[data-v-f12ba5ac]{color:#6196cc}.theme-mode-read .token.boolean[data-v-f12ba5ac],.theme-mode-read .token.function[data-v-f12ba5ac],.theme-mode-read .token.number[data-v-f12ba5ac]{color:#f08d49}.theme-mode-read .token.class-name[data-v-f12ba5ac],.theme-mode-read .token.constant[data-v-f12ba5ac],.theme-mode-read .token.property[data-v-f12ba5ac],.theme-mode-read .token.symbol[data-v-f12ba5ac]{color:#f8c555}.theme-mode-read .token.atrule[data-v-f12ba5ac],.theme-mode-read .token.builtin[data-v-f12ba5ac],.theme-mode-read .token.important[data-v-f12ba5ac],.theme-mode-read .token.keyword[data-v-f12ba5ac],.theme-mode-read .token.selector[data-v-f12ba5ac]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-f12ba5ac],.theme-mode-read .token.char[data-v-f12ba5ac],.theme-mode-read .token.regex[data-v-f12ba5ac],.theme-mode-read .token.string[data-v-f12ba5ac],.theme-mode-read .token.variable[data-v-f12ba5ac]{color:#7ec699}.theme-mode-read .token.entity[data-v-f12ba5ac],.theme-mode-read .token.operator[data-v-f12ba5ac],.theme-mode-read .token.url[data-v-f12ba5ac]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-f12ba5ac],.theme-mode-read .style .token.string[data-v-f12ba5ac],.theme-mode-read .token.entity[data-v-f12ba5ac],.theme-mode-read .token.operator[data-v-f12ba5ac],.theme-mode-read .token.url[data-v-f12ba5ac]{background:none}.theme-mode-read .token.bold[data-v-f12ba5ac],.theme-mode-read .token.important[data-v-f12ba5ac]{font-weight:700}.theme-mode-read .token.italic[data-v-f12ba5ac]{font-style:italic}.theme-mode-read .token.entity[data-v-f12ba5ac]{cursor:help}.theme-mode-read .token.inserted[data-v-f12ba5ac]{color:green}.theme-style-line.theme-mode-light[data-v-f12ba5ac]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-f12ba5ac]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-f12ba5ac]{--bodyBg:#f5f5d5}.theme-vdoing-content[data-v-f12ba5ac]{margin-bottom:3.6rem}.title-tag[data-v-f12ba5ac]{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}dd[data-v-f12ba5ac],dl[data-v-f12ba5ac]{margin:0}.column-wrapper[data-v-f12ba5ac]{margin-top:1rem;display:flex;padding-bottom:2rem;border-bottom:1px solid var(--borderColor)}.column-wrapper img[data-v-f12ba5ac]{width:80px;height:80px;border-radius:2px;margin-right:1rem}.column-wrapper .column-info .title[data-v-f12ba5ac]{font-size:1.6rem}.column-wrapper .column-info .description[data-v-f12ba5ac]{color:var(--textColor);opacity:.8;margin:.5rem 0}.catalogue-wrapper .catalogue-title[data-v-f12ba5ac]{font-size:1.45rem;margin:2rem 0}.catalogue-wrapper .catalogue-content dl[data-v-f12ba5ac]{margin-bottom:1.8rem}.catalogue-wrapper .catalogue-content dl.inline[data-v-f12ba5ac]{display:inline-block;width:50%;margin-bottom:1rem}@media (max-width:419px){.catalogue-wrapper .catalogue-content dl.inline[data-v-f12ba5ac]{width:100%}}.catalogue-wrapper .catalogue-content dl.inline a[data-v-f12ba5ac]{width:100%}.catalogue-wrapper .catalogue-content dl:not(.inline) dt[data-v-f12ba5ac]{margin-top:-3.6rem;padding-top:3.6rem}.catalogue-wrapper .catalogue-content dl dt[data-v-f12ba5ac]{font-size:1.1rem}.catalogue-wrapper .catalogue-content dl dt:hover .header-anchor[data-v-f12ba5ac]{opacity:1}.catalogue-wrapper .catalogue-content dl dd[data-v-f12ba5ac]{margin-top:.7rem;margin-left:1rem}.catalogue-wrapper .catalogue-content dl dd a[data-v-f12ba5ac]:not(.header-anchor){margin-bottom:.5rem;display:inline-block;width:50%}.catalogue-wrapper .catalogue-content dl dd a[data-v-f12ba5ac]:not(.header-anchor):hover{color:#ff5722;text-decoration:none}@media (max-width:720px){.catalogue-wrapper .catalogue-content dl dd a[data-v-f12ba5ac]:not(.header-anchor){width:100%}}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap[data-v-f12ba5ac]{margin:5px 0 8px;font-size:.95rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap>a[data-v-f12ba5ac]{padding-left:1rem;box-sizing:border-box}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap .sub-title[data-v-f12ba5ac]{margin-top:-3.6rem;padding-top:3.6rem;margin-bottom:6px;font-size:1rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap:hover .header-anchor[data-v-f12ba5ac]{opacity:1}.theme-style-line .right-menu-wrapper .right-menu-margin{border-left:1px solid var(--borderColor)}.right-menu-wrapper{width:230px;float:right;margin-right:-285px;position:sticky;top:0;font-size:.8rem}.right-menu-wrapper .right-menu-margin{margin-top:4.6rem;border-radius:3px;overflow:hidden}.right-menu-wrapper .right-menu-title{padding:10px 15px 0;background:var(--mainBg);font-size:1rem}.right-menu-wrapper .right-menu-title:after{content:"";display:block;width:100%;height:1px;background:var(--borderColor);margin-top:10px}.right-menu-wrapper .right-menu-content{max-height:80vh;position:relative;overflow:hidden;background:var(--mainBg);padding:4px 3px 4px 0}.right-menu-wrapper .right-menu-content::-webkit-scrollbar{width:3px;height:3px}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-track-piece{background:none}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-thumb:vertical{background-color:hsla(0,0%,49%,.3)}.right-menu-wrapper .right-menu-content:hover{overflow-y:auto;padding-right:0}.right-menu-wrapper .right-menu-content .right-menu-item{padding:4px 15px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;position:relative}.right-menu-wrapper .right-menu-content .right-menu-item.level2{font-size:.8rem}.right-menu-wrapper .right-menu-content .right-menu-item.level3{padding-left:27px}.right-menu-wrapper .right-menu-content .right-menu-item.level4{padding-left:37px}.right-menu-wrapper .right-menu-content .right-menu-item.level5{padding-left:47px}.right-menu-wrapper .right-menu-content .right-menu-item.level6{padding-left:57px}.right-menu-wrapper .right-menu-content .right-menu-item.active:before{content:"";position:absolute;top:5px;left:0;width:3px;height:14px;background:#11a8cd;border-radius:0 4px 4px 0}.right-menu-wrapper .right-menu-content .right-menu-item.active a{color:#11a8cd;opacity:1}.right-menu-wrapper .right-menu-content .right-menu-item a{color:var(--textColor);opacity:.75;display:inline-block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.right-menu-wrapper .right-menu-content .right-menu-item a:hover{opacity:1}.right-menu-wrapper .right-menu-content:hover{color:#11a8cd}.page>*{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.page>:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.page>:not(.footer){border-radius:2px}}@media (max-width:959px){.page>*{padding:1rem 2rem}}@media (max-width:419px){.page>*{padding:1rem 1.5rem}}.page{padding-bottom:2rem;display:block}@media (max-width:719px){.page{padding-top:3.6rem}}@media (min-width:719px){.page{padding-top:5.1rem}}@media (min-width:719px){.theme-style-line .page{padding-top:3.6rem}}.theme-style-line .page>:not(.footer){box-shadow:0 0}@media (min-width:720px){.theme-style-line .page .placeholder{height:1.2rem}}.theme-vdoing-wrapper .content-wrapper{position:relative}.theme-vdoing-wrapper h1 .title-tag{height:1.5rem;line-height:1.5rem;border:1px solid #ff5722;color:#ff5722;font-size:1rem;padding:0 .4rem;border-radius:.2rem;margin-left:.5rem;transform:translateY(-.25rem);display:inline-block}.theme-vdoing-wrapper h1 img{margin-bottom:-.2rem;margin-right:.2rem;max-width:2.2rem;max-height:2.2rem}.theme-vdoing-wrapper{--linesColor:rgba(50,0,0,0.05)}.theme-vdoing-wrapper.bg-style-1{background-image:linear-gradient(90deg,var(--linesColor) 3%,transparent 0),linear-gradient(0deg,var(--linesColor) 3%,transparent 0);background-position:50%;background-size:20px 20px}.theme-vdoing-wrapper.bg-style-2{background-image:repeating-linear-gradient(0,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-3{background-image:repeating-linear-gradient(90deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-4{background-image:repeating-linear-gradient(-45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-5{background-image:repeating-linear-gradient(45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-6{background-image:radial-gradient(var(--linesColor) 1px,transparent 0);background-size:10px 10px}.theme-mode-dark .theme-vdoing-wrapper{--linesColor:hsla(0,0%,49%,0.05)}@media (min-width:720px) and (max-width:1279px){.have-rightmenu .page{padding-right:.8rem!important}}@media (max-width:1279px){.have-rightmenu .right-menu-wrapper{display:none}}@media (min-width:1280px){.have-rightmenu .sidebar .sidebar-sub-headers{display:none}}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:none}@media (min-width:720px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:.8rem!important}}@media (max-width:719px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:0!important}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:block}}@media (min-width:720px) and (max-width:1279px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:block}}@media (min-width:1280px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:none}}.categories-page .categories-wrapper{position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.categories-page .categories-wrapper{display:none}}.categories-page .categories-wrapper .categories{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-y:auto;transition:all .2s;position:relative}.categories-page .categories-wrapper .categories a{padding-right:1.8rem}.categories-page .categories-wrapper .categories a span{right:.4rem}.categories-page .categories-wrapper .categories::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.categories-page .categories-wrapper .categories::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.categories-page .main-left .categories-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.categories-page .main-left .categories-wrapper{display:block}}.categories-page .main-left .categories-wrapper .categories{max-height:12.3rem}@media (max-width:719px){.theme-style-line .categories-page .main-left .categories-wrapper{margin-top:-.91rem;margin-bottom:-1px;padding:.9rem .2rem .5rem}}.tags-page .tags-wrapper{position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.tags-page .tags-wrapper{display:none}}.tags-page .tags-wrapper .tags{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-x:hidden;overflow-y:auto;transition:all .2s}.tags-page .tags-wrapper .tags::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.tags-page .tags-wrapper .tags::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.tags-page .main-left .tags-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.tags-page .main-left .tags-wrapper{display:block}}.tags-page .main-left .tags-wrapper .tags{max-height:11.5rem}@media (max-width:719px){.theme-style-line .tags-page .main-left .tags-wrapper{margin-top:-.91rem;margin-bottom:-1px}}.archives-page .theme-vdoing-wrapper{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.archives-page .theme-vdoing-wrapper:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.archives-page .theme-vdoing-wrapper:not(.footer){border-radius:2px}}@media (max-width:959px){.archives-page .theme-vdoing-wrapper{padding:1rem 2rem}}@media (max-width:419px){.archives-page .theme-vdoing-wrapper{padding:1rem 1.5rem}}.theme-style-line .archives-page .theme-vdoing-wrapper{box-shadow:0 0}.archives-page .theme-vdoing-wrapper{position:relative}@media (min-width:940px){.archives-page .theme-vdoing-wrapper{margin-top:1.5rem!important}}.archives-page .theme-vdoing-wrapper .count{text-align:right;margin-top:-2.5rem;font-size:.85rem;opacity:.8}.archives-page .theme-vdoing-wrapper li,.archives-page .theme-vdoing-wrapper ul{margin:0;padding:0}.archives-page .theme-vdoing-wrapper ul{margin-top:2rem}.archives-page .theme-vdoing-wrapper li{list-style:none}.archives-page .theme-vdoing-wrapper li.year{position:sticky;top:3.6rem;background:var(--mainBg);z-index:1}.archives-page .theme-vdoing-wrapper li.year:not(:first-child){margin-top:3.5rem}.archives-page .theme-vdoing-wrapper li h2{margin-bottom:.8rem;font-weight:400;padding:.5rem 0}.archives-page .theme-vdoing-wrapper li h2 span{font-size:.85rem;font-weight:300;float:right;margin-top:1rem}.archives-page .theme-vdoing-wrapper li a{display:block;color:var(--textColor);transition:padding .3s;padding:.5rem 2rem;line-height:1.2rem}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:2.5rem;color:#11a8cd;background:#f9f9f9}@media (max-width:940px){.archives-page .theme-vdoing-wrapper li a{padding:.5rem 1rem;font-weight:400}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:1.5rem}}.archives-page .theme-vdoing-wrapper li a span.date{opacity:.6;font-size:.85rem;font-weight:400;margin-right:.3rem}.archives-page .theme-vdoing-wrapper li a .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.archives-page .theme-vdoing-wrapper .loadmore{text-align:center;margin-top:1rem;opacity:.5}.theme-mode-dark .archives-page .theme-vdoing-wrapper li a:hover,.theme-mode-read .archives-page .theme-vdoing-wrapper li a:hover{background:var(--customBlockBg)}.hide-navbar .archives-page .theme-vdoing-wrapper li.year{top:0}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:1.01em;line-height:1.4;font-weight:700;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.98em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:var(--textColor);transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-heading.clickable:hover{color:#11a8cd}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}.sidebar .sidebar-sub-headers .level4{padding-left:.2rem}.sidebar .sidebar-sub-headers .level5{padding-left:.4rem}.sidebar .sidebar-sub-headers .level6{padding-left:.6rem}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:var(--textColor);border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#11a8cd}a.sidebar-link.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid var(--borderColor);padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}.sidebar .blogger{display:none;border-bottom:1px solid var(--borderColor)}.sidebar .blogger img{width:60px;height:60px;border-radius:5px;margin:.75rem 1rem}.sidebar .blogger .blogger-info{flex:1;padding:0 .3rem .3rem 0}.sidebar .blogger .blogger-info h3{margin:.95rem 0 .6rem;font-size:1.1rem}.sidebar .blogger .blogger-info .icons .iconfont{font-size:1.2rem;padding-right:.6rem;color:#777}.sidebar .sidebar-slot{margin-bottom:-.5rem;font-size:.85rem}.sidebar .sidebar-slot.sidebar-slot-top{padding:1.5rem 1.5rem 0}.sidebar .sidebar-slot.sidebar-slot-bottom{padding:0 1.5rem 1.5rem}@media (max-width:719px){.sidebar .blogger{display:flex}.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.yellowBorder{border-radius:5px;box-shadow:0 0 15px #ffe089!important}.buttons{position:fixed;right:2rem;bottom:2.5rem;z-index:11}@media (max-width:959px){.buttons{right:1rem;bottom:1.5rem}}.buttons .button{width:2.2rem;height:2.2rem;line-height:2.2rem;border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.15);margin-top:.9rem;text-align:center;cursor:pointer;transition:all .5s;background:var(--blurBg)}.buttons .button.hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button.hover:before{color:#fff}@media (any-hover:hover){.buttons .button:hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button:hover:before{color:#fff}}.buttons .button .select-box{margin:0;padding:.8rem 0;position:absolute;bottom:0;right:1.5rem;background:var(--mainBg);border:1px solid var(--borderColor);width:120px;border-radius:6px;box-shadow:0 0 15px hsla(0,0%,100%,.2)}.buttons .button .select-box li{list-style:none;line-height:2rem;font-size:.95rem}.buttons .button .select-box li:hover{color:#11a8cd}.buttons .button .select-box li.active{background-color:hsla(0,0%,58.8%,.2);color:#11a8cd}.mode-enter-active,.mode-leave-active{transition:all .3s}.mode-enter,.mode-leave-to{opacity:0;transform:scale(.8)}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter,.fade-leave-to{opacity:0}.footer{padding:5rem 1.5rem 2.5rem;text-align:center;color:#666;box-sizing:border-box;font-size:.85rem;transition:all .2s ease}.footer>span{line-height:1.5rem}.footer .icons{margin-bottom:12px}.footer .icons .iconfont{padding:0 10px;font-size:1.3rem}.footer a{color:inherit}.footer a:hover{color:#11a8cd}@media (min-width:720px){.sidebar-open .footer{width:auto;padding-left:19.5rem}}@media (min-width:1520px){.have-rightmenu .footer{padding-right:231.5px}}.no-sidebar .footer{width:auto;padding-left:1.5rem}.body-bg{position:fixed;left:0;top:0;z-index:-999999;height:100vh;width:100vw;transition:background .5s}.theme-mode-light{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-]::-moz-selection,.theme-mode-light code[class*=language-] ::-moz-selection,.theme-mode-light pre[class*=language-]::-moz-selection,.theme-mode-light pre[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-]::selection,.theme-mode-light code[class*=language-] ::selection,.theme-mode-light pre[class*=language-]::selection,.theme-mode-light pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{text-shadow:none}}.theme-mode-light pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-],.theme-mode-light pre[class*=language-]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata,.theme-mode-light .token.comment,.theme-mode-light .token.doctype,.theme-mode-light .token.prolog{color:#708090}.theme-mode-light .token.punctuation{color:#999}.theme-mode-light .namespace{opacity:.7}.theme-mode-light .token.boolean,.theme-mode-light .token.constant,.theme-mode-light .token.deleted,.theme-mode-light .token.number,.theme-mode-light .token.property,.theme-mode-light .token.symbol,.theme-mode-light .token.tag{color:#905}.theme-mode-light .token.attr-name,.theme-mode-light .token.builtin,.theme-mode-light .token.char,.theme-mode-light .token.inserted,.theme-mode-light .token.selector,.theme-mode-light .token.string{color:#690}.theme-mode-light .language-css .token.string,.theme-mode-light .style .token.string,.theme-mode-light .token.entity,.theme-mode-light .token.operator,.theme-mode-light .token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule,.theme-mode-light .token.attr-value,.theme-mode-light .token.keyword{color:#07a}.theme-mode-light .token.class-name,.theme-mode-light .token.function{color:#dd4a68}.theme-mode-light .token.important,.theme-mode-light .token.regex,.theme-mode-light .token.variable{color:#e90}.theme-mode-light .token.bold,.theme-mode-light .token.important{font-weight:700}.theme-mode-light .token.italic{font-style:italic}.theme-mode-light .token.entity{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted,.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-],.theme-mode-dark pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-],.theme-mode-dark pre[class*=language-]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment,.theme-mode-dark .token.cdata,.theme-mode-dark .token.comment,.theme-mode-dark .token.doctype,.theme-mode-dark .token.prolog{color:#999}.theme-mode-dark .token.punctuation{color:#ccc}.theme-mode-dark .token.attr-name,.theme-mode-dark .token.deleted,.theme-mode-dark .token.namespace,.theme-mode-dark .token.tag{color:#e2777a}.theme-mode-dark .token.function-name{color:#6196cc}.theme-mode-dark .token.boolean,.theme-mode-dark .token.function,.theme-mode-dark .token.number{color:#f08d49}.theme-mode-dark .token.class-name,.theme-mode-dark .token.constant,.theme-mode-dark .token.property,.theme-mode-dark .token.symbol{color:#f8c555}.theme-mode-dark .token.atrule,.theme-mode-dark .token.builtin,.theme-mode-dark .token.important,.theme-mode-dark .token.keyword,.theme-mode-dark .token.selector{color:#cc99cd}.theme-mode-dark .token.attr-value,.theme-mode-dark .token.char,.theme-mode-dark .token.regex,.theme-mode-dark .token.string,.theme-mode-dark .token.variable{color:#7ec699}.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{color:#67cdcc}.theme-mode-dark .language-css .token.string,.theme-mode-dark .style .token.string,.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{background:none}.theme-mode-dark .token.bold,.theme-mode-dark .token.important{font-weight:700}.theme-mode-dark .token.italic{font-style:italic}.theme-mode-dark .token.entity{cursor:help}.theme-mode-dark .token.inserted{color:green}.theme-mode-read{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-],.theme-mode-read pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-],.theme-mode-read pre[class*=language-]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment,.theme-mode-read .token.cdata,.theme-mode-read .token.comment,.theme-mode-read .token.doctype,.theme-mode-read .token.prolog{color:#999}.theme-mode-read .token.punctuation{color:#ccc}.theme-mode-read .token.attr-name,.theme-mode-read .token.deleted,.theme-mode-read .token.namespace,.theme-mode-read .token.tag{color:#e2777a}.theme-mode-read .token.function-name{color:#6196cc}.theme-mode-read .token.boolean,.theme-mode-read .token.function,.theme-mode-read .token.number{color:#f08d49}.theme-mode-read .token.class-name,.theme-mode-read .token.constant,.theme-mode-read .token.property,.theme-mode-read .token.symbol{color:#f8c555}.theme-mode-read .token.atrule,.theme-mode-read .token.builtin,.theme-mode-read .token.important,.theme-mode-read .token.keyword,.theme-mode-read .token.selector{color:#cc99cd}.theme-mode-read .token.attr-value,.theme-mode-read .token.char,.theme-mode-read .token.regex,.theme-mode-read .token.string,.theme-mode-read .token.variable{color:#7ec699}.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{color:#67cdcc}.theme-mode-read .language-css .token.string,.theme-mode-read .style .token.string,.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{background:none}.theme-mode-read .token.bold,.theme-mode-read .token.important{font-weight:700}.theme-mode-read .token.italic{font-style:italic}.theme-mode-read .token.entity{cursor:help}.theme-mode-read .token.inserted{color:green}.theme-style-line.theme-mode-light{--bodyBg:#fff}.theme-style-line.theme-mode-dark{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read{--bodyBg:#f5f5d5}.custom-html-window{position:fixed;bottom:0;display:flex;overflow:hidden;font-weight:350}@media (max-width:960px){.custom-html-window{display:none}}.custom-html-window .custom-wrapper{position:relative;max-width:200px;max-height:400px}.custom-html-window .custom-wrapper .close-but{cursor:pointer;position:absolute;right:0;top:0;font-size:1.5rem;line-height:1.5rem;width:1.5rem;height:1.5rem;opacity:0;transition:all .2s}.custom-html-window .custom-wrapper .close-but:hover{opacity:.9}.custom-html-window .custom-wrapper:hover .close-but{opacity:.7}.custom-html-window.custom-html-window-lb{left:0;z-index:99}.custom-html-window.custom-html-window-lb>*{align-self:flex-end}.custom-html-window.custom-html-window-rb{right:80px;z-index:10;justify-content:flex-end}.custom-html-window.custom-html-window-rb>*{align-self:flex-end}#app>div.theme-container.sidebar-open.have-rightmenu.only-sidebarItem>div:nth-child(5)>main>div.theme-vdoing-wrapper>div.content-wrapper>div.theme-vdoing-content.content__default>table:nth-child(30)>thead>tr>th[data-v-2fa38447]:first-child{width:75px}.doc-deleted[data-v-2fa38447]{position:relative;text-decoration:none}.doc-deleted[data-v-2fa38447]:before{content:"";position:absolute;left:0;bottom:35%;width:100%;height:1px;background-color:#000}.become-sponsor{padding:8px 20px;display:inline-block;color:#11a8cd;border-radius:30px;box-sizing:border-box;border:1px solid #11a8cd}.theme-mode-light[data-v-3f5e71b8]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-3f5e71b8],.theme-mode-light pre[class*=language-][data-v-3f5e71b8]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-3f5e71b8]::-moz-selection,.theme-mode-light code[class*=language-][data-v-3f5e71b8] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3f5e71b8]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3f5e71b8] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-3f5e71b8]::selection,.theme-mode-light code[class*=language-][data-v-3f5e71b8] ::selection,.theme-mode-light pre[class*=language-][data-v-3f5e71b8]::selection,.theme-mode-light pre[class*=language-][data-v-3f5e71b8] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-3f5e71b8],.theme-mode-light pre[class*=language-][data-v-3f5e71b8]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-3f5e71b8]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-3f5e71b8],.theme-mode-light pre[class*=language-][data-v-3f5e71b8]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-3f5e71b8]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-3f5e71b8],.theme-mode-light .token.comment[data-v-3f5e71b8],.theme-mode-light .token.doctype[data-v-3f5e71b8],.theme-mode-light .token.prolog[data-v-3f5e71b8]{color:#708090}.theme-mode-light .token.punctuation[data-v-3f5e71b8]{color:#999}.theme-mode-light .namespace[data-v-3f5e71b8]{opacity:.7}.theme-mode-light .token.boolean[data-v-3f5e71b8],.theme-mode-light .token.constant[data-v-3f5e71b8],.theme-mode-light .token.deleted[data-v-3f5e71b8],.theme-mode-light .token.number[data-v-3f5e71b8],.theme-mode-light .token.property[data-v-3f5e71b8],.theme-mode-light .token.symbol[data-v-3f5e71b8],.theme-mode-light .token.tag[data-v-3f5e71b8]{color:#905}.theme-mode-light .token.attr-name[data-v-3f5e71b8],.theme-mode-light .token.builtin[data-v-3f5e71b8],.theme-mode-light .token.char[data-v-3f5e71b8],.theme-mode-light .token.inserted[data-v-3f5e71b8],.theme-mode-light .token.selector[data-v-3f5e71b8],.theme-mode-light .token.string[data-v-3f5e71b8]{color:#690}.theme-mode-light .language-css .token.string[data-v-3f5e71b8],.theme-mode-light .style .token.string[data-v-3f5e71b8],.theme-mode-light .token.entity[data-v-3f5e71b8],.theme-mode-light .token.operator[data-v-3f5e71b8],.theme-mode-light .token.url[data-v-3f5e71b8]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-3f5e71b8],.theme-mode-light .token.attr-value[data-v-3f5e71b8],.theme-mode-light .token.keyword[data-v-3f5e71b8]{color:#07a}.theme-mode-light .token.class-name[data-v-3f5e71b8],.theme-mode-light .token.function[data-v-3f5e71b8]{color:#dd4a68}.theme-mode-light .token.important[data-v-3f5e71b8],.theme-mode-light .token.regex[data-v-3f5e71b8],.theme-mode-light .token.variable[data-v-3f5e71b8]{color:#e90}.theme-mode-light .token.bold[data-v-3f5e71b8],.theme-mode-light .token.important[data-v-3f5e71b8]{font-weight:700}.theme-mode-light .token.italic[data-v-3f5e71b8]{font-style:italic}.theme-mode-light .token.entity[data-v-3f5e71b8]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-3f5e71b8],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-3f5e71b8]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-3f5e71b8]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-3f5e71b8],.theme-mode-dark pre[class*=language-][data-v-3f5e71b8]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-3f5e71b8]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3f5e71b8],.theme-mode-dark pre[class*=language-][data-v-3f5e71b8]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3f5e71b8]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-3f5e71b8],.theme-mode-dark .token.cdata[data-v-3f5e71b8],.theme-mode-dark .token.comment[data-v-3f5e71b8],.theme-mode-dark .token.doctype[data-v-3f5e71b8],.theme-mode-dark .token.prolog[data-v-3f5e71b8]{color:#999}.theme-mode-dark .token.punctuation[data-v-3f5e71b8]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-3f5e71b8],.theme-mode-dark .token.deleted[data-v-3f5e71b8],.theme-mode-dark .token.namespace[data-v-3f5e71b8],.theme-mode-dark .token.tag[data-v-3f5e71b8]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-3f5e71b8]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-3f5e71b8],.theme-mode-dark .token.function[data-v-3f5e71b8],.theme-mode-dark .token.number[data-v-3f5e71b8]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-3f5e71b8],.theme-mode-dark .token.constant[data-v-3f5e71b8],.theme-mode-dark .token.property[data-v-3f5e71b8],.theme-mode-dark .token.symbol[data-v-3f5e71b8]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-3f5e71b8],.theme-mode-dark .token.builtin[data-v-3f5e71b8],.theme-mode-dark .token.important[data-v-3f5e71b8],.theme-mode-dark .token.keyword[data-v-3f5e71b8],.theme-mode-dark .token.selector[data-v-3f5e71b8]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-3f5e71b8],.theme-mode-dark .token.char[data-v-3f5e71b8],.theme-mode-dark .token.regex[data-v-3f5e71b8],.theme-mode-dark .token.string[data-v-3f5e71b8],.theme-mode-dark .token.variable[data-v-3f5e71b8]{color:#7ec699}.theme-mode-dark .token.entity[data-v-3f5e71b8],.theme-mode-dark .token.operator[data-v-3f5e71b8],.theme-mode-dark .token.url[data-v-3f5e71b8]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-3f5e71b8],.theme-mode-dark .style .token.string[data-v-3f5e71b8],.theme-mode-dark .token.entity[data-v-3f5e71b8],.theme-mode-dark .token.operator[data-v-3f5e71b8],.theme-mode-dark .token.url[data-v-3f5e71b8]{background:none}.theme-mode-dark .token.bold[data-v-3f5e71b8],.theme-mode-dark .token.important[data-v-3f5e71b8]{font-weight:700}.theme-mode-dark .token.italic[data-v-3f5e71b8]{font-style:italic}.theme-mode-dark .token.entity[data-v-3f5e71b8]{cursor:help}.theme-mode-dark .token.inserted[data-v-3f5e71b8]{color:green}.theme-mode-read[data-v-3f5e71b8]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-3f5e71b8],.theme-mode-read pre[class*=language-][data-v-3f5e71b8]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-3f5e71b8]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-3f5e71b8],.theme-mode-read pre[class*=language-][data-v-3f5e71b8]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-3f5e71b8]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-3f5e71b8],.theme-mode-read .token.cdata[data-v-3f5e71b8],.theme-mode-read .token.comment[data-v-3f5e71b8],.theme-mode-read .token.doctype[data-v-3f5e71b8],.theme-mode-read .token.prolog[data-v-3f5e71b8]{color:#999}.theme-mode-read .token.punctuation[data-v-3f5e71b8]{color:#ccc}.theme-mode-read .token.attr-name[data-v-3f5e71b8],.theme-mode-read .token.deleted[data-v-3f5e71b8],.theme-mode-read .token.namespace[data-v-3f5e71b8],.theme-mode-read .token.tag[data-v-3f5e71b8]{color:#e2777a}.theme-mode-read .token.function-name[data-v-3f5e71b8]{color:#6196cc}.theme-mode-read .token.boolean[data-v-3f5e71b8],.theme-mode-read .token.function[data-v-3f5e71b8],.theme-mode-read .token.number[data-v-3f5e71b8]{color:#f08d49}.theme-mode-read .token.class-name[data-v-3f5e71b8],.theme-mode-read .token.constant[data-v-3f5e71b8],.theme-mode-read .token.property[data-v-3f5e71b8],.theme-mode-read .token.symbol[data-v-3f5e71b8]{color:#f8c555}.theme-mode-read .token.atrule[data-v-3f5e71b8],.theme-mode-read .token.builtin[data-v-3f5e71b8],.theme-mode-read .token.important[data-v-3f5e71b8],.theme-mode-read .token.keyword[data-v-3f5e71b8],.theme-mode-read .token.selector[data-v-3f5e71b8]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-3f5e71b8],.theme-mode-read .token.char[data-v-3f5e71b8],.theme-mode-read .token.regex[data-v-3f5e71b8],.theme-mode-read .token.string[data-v-3f5e71b8],.theme-mode-read .token.variable[data-v-3f5e71b8]{color:#7ec699}.theme-mode-read .token.entity[data-v-3f5e71b8],.theme-mode-read .token.operator[data-v-3f5e71b8],.theme-mode-read .token.url[data-v-3f5e71b8]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-3f5e71b8],.theme-mode-read .style .token.string[data-v-3f5e71b8],.theme-mode-read .token.entity[data-v-3f5e71b8],.theme-mode-read .token.operator[data-v-3f5e71b8],.theme-mode-read .token.url[data-v-3f5e71b8]{background:none}.theme-mode-read .token.bold[data-v-3f5e71b8],.theme-mode-read .token.important[data-v-3f5e71b8]{font-weight:700}.theme-mode-read .token.italic[data-v-3f5e71b8]{font-style:italic}.theme-mode-read .token.entity[data-v-3f5e71b8]{cursor:help}.theme-mode-read .token.inserted[data-v-3f5e71b8]{color:green}.theme-style-line.theme-mode-light[data-v-3f5e71b8]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-3f5e71b8]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-3f5e71b8]{--bodyBg:#f5f5d5}.badge[data-v-3f5e71b8]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-3f5e71b8],.badge.tip[data-v-3f5e71b8],.badge[data-v-3f5e71b8]{background-color:#42b983}.badge.error[data-v-3f5e71b8]{background-color:#da5961}.badge.warn[data-v-3f5e71b8],.badge.warning[data-v-3f5e71b8],.badge.yellow[data-v-3f5e71b8]{background-color:#e7c000}.badge+.badge[data-v-3f5e71b8]{margin-left:5px}
\ No newline at end of file
diff --git a/assets/img/_com1.d83f6b8c.png b/assets/img/_com1.d83f6b8c.png
new file mode 100644
index 0000000..045f66f
Binary files /dev/null and b/assets/img/_com1.d83f6b8c.png differ
diff --git a/assets/img/_com2.b4ed4f99.png b/assets/img/_com2.b4ed4f99.png
new file mode 100644
index 0000000..94a9300
Binary files /dev/null and b/assets/img/_com2.b4ed4f99.png differ
diff --git a/assets/img/after-gzip.5db603db.jpg b/assets/img/after-gzip.5db603db.jpg
new file mode 100644
index 0000000..9782977
Binary files /dev/null and b/assets/img/after-gzip.5db603db.jpg differ
diff --git a/assets/img/after.4a71f4e3.jpg b/assets/img/after.4a71f4e3.jpg
new file mode 100644
index 0000000..332bf19
Binary files /dev/null and b/assets/img/after.4a71f4e3.jpg differ
diff --git a/assets/img/ant-icon.16b70c25.png b/assets/img/ant-icon.16b70c25.png
new file mode 100644
index 0000000..fe2ff71
Binary files /dev/null and b/assets/img/ant-icon.16b70c25.png differ
diff --git a/assets/img/ant-install.29360849.png b/assets/img/ant-install.29360849.png
new file mode 100644
index 0000000..2eae4dd
Binary files /dev/null and b/assets/img/ant-install.29360849.png differ
diff --git a/assets/img/ant-install2.850df243.png b/assets/img/ant-install2.850df243.png
new file mode 100644
index 0000000..4e53ba9
Binary files /dev/null and b/assets/img/ant-install2.850df243.png differ
diff --git a/assets/img/async10.6d6b3ca4.jpg b/assets/img/async10.6d6b3ca4.jpg
new file mode 100644
index 0000000..19639c1
Binary files /dev/null and b/assets/img/async10.6d6b3ca4.jpg differ
diff --git a/assets/img/auths.6821040b.png b/assets/img/auths.6821040b.png
new file mode 100644
index 0000000..405b407
Binary files /dev/null and b/assets/img/auths.6821040b.png differ
diff --git a/assets/img/before-gzip.98470d85.jpg b/assets/img/before-gzip.98470d85.jpg
new file mode 100644
index 0000000..69071e9
Binary files /dev/null and b/assets/img/before-gzip.98470d85.jpg differ
diff --git a/assets/img/before.3b6d79a3.jpg b/assets/img/before.3b6d79a3.jpg
new file mode 100644
index 0000000..bfbc55c
Binary files /dev/null and b/assets/img/before.3b6d79a3.jpg differ
diff --git a/assets/img/buildgood.a05286f4.jpg b/assets/img/buildgood.a05286f4.jpg
new file mode 100644
index 0000000..e7ddc38
Binary files /dev/null and b/assets/img/buildgood.a05286f4.jpg differ
diff --git a/assets/img/check-nginx-config.10ef0bbd.jpg b/assets/img/check-nginx-config.10ef0bbd.jpg
new file mode 100644
index 0000000..d533db7
Binary files /dev/null and b/assets/img/check-nginx-config.10ef0bbd.jpg differ
diff --git a/assets/img/cloc.1e69fa2f.jpg b/assets/img/cloc.1e69fa2f.jpg
new file mode 100644
index 0000000..0e70213
Binary files /dev/null and b/assets/img/cloc.1e69fa2f.jpg differ
diff --git a/assets/img/config-logo.3e10c5ac.jpg b/assets/img/config-logo.3e10c5ac.jpg
new file mode 100644
index 0000000..1e45b2e
Binary files /dev/null and b/assets/img/config-logo.3e10c5ac.jpg differ
diff --git a/assets/img/dialog-dark.7fad47e0.jpg b/assets/img/dialog-dark.7fad47e0.jpg
new file mode 100644
index 0000000..11fdb04
Binary files /dev/null and b/assets/img/dialog-dark.7fad47e0.jpg differ
diff --git a/assets/img/dialog.9144179f.jpg b/assets/img/dialog.9144179f.jpg
new file mode 100644
index 0000000..3af7b56
Binary files /dev/null and b/assets/img/dialog.9144179f.jpg differ
diff --git a/assets/img/dist-small.7326ecf3.jpg b/assets/img/dist-small.7326ecf3.jpg
new file mode 100644
index 0000000..73b79b8
Binary files /dev/null and b/assets/img/dist-small.7326ecf3.jpg differ
diff --git a/assets/img/dist.193bee67.jpg b/assets/img/dist.193bee67.jpg
new file mode 100644
index 0000000..3df7908
Binary files /dev/null and b/assets/img/dist.193bee67.jpg differ
diff --git a/assets/img/drawer-dark.d3239406.jpg b/assets/img/drawer-dark.d3239406.jpg
new file mode 100644
index 0000000..ba7f3c6
Binary files /dev/null and b/assets/img/drawer-dark.d3239406.jpg differ
diff --git a/assets/img/drawer.8612c11d.jpg b/assets/img/drawer.8612c11d.jpg
new file mode 100644
index 0000000..0aae517
Binary files /dev/null and b/assets/img/drawer.8612c11d.jpg differ
diff --git a/assets/img/ep-icon.3b647555.png b/assets/img/ep-icon.3b647555.png
new file mode 100644
index 0000000..e49a561
Binary files /dev/null and b/assets/img/ep-icon.3b647555.png differ
diff --git a/assets/img/ep1.53bf38e0.png b/assets/img/ep1.53bf38e0.png
new file mode 100644
index 0000000..30fb50c
Binary files /dev/null and b/assets/img/ep1.53bf38e0.png differ
diff --git a/assets/img/ep2.bf9bf490.png b/assets/img/ep2.bf9bf490.png
new file mode 100644
index 0000000..04ad122
Binary files /dev/null and b/assets/img/ep2.bf9bf490.png differ
diff --git a/assets/img/ep3.40f769cf.png b/assets/img/ep3.40f769cf.png
new file mode 100644
index 0000000..a88fd95
Binary files /dev/null and b/assets/img/ep3.40f769cf.png differ
diff --git a/assets/img/error1.15f745e0.png b/assets/img/error1.15f745e0.png
new file mode 100644
index 0000000..24836d6
Binary files /dev/null and b/assets/img/error1.15f745e0.png differ
diff --git a/assets/img/eslint.237cc470.jpg b/assets/img/eslint.237cc470.jpg
new file mode 100644
index 0000000..6964caa
Binary files /dev/null and b/assets/img/eslint.237cc470.jpg differ
diff --git a/assets/img/eslint1.1a4b1d65.jpg b/assets/img/eslint1.1a4b1d65.jpg
new file mode 100644
index 0000000..f5b09f5
Binary files /dev/null and b/assets/img/eslint1.1a4b1d65.jpg differ
diff --git a/assets/img/grey.4fab236e.jpg b/assets/img/grey.4fab236e.jpg
new file mode 100644
index 0000000..b7f7e51
Binary files /dev/null and b/assets/img/grey.4fab236e.jpg differ
diff --git a/assets/img/horizontal-detail.5953eb90.jpg b/assets/img/horizontal-detail.5953eb90.jpg
new file mode 100644
index 0000000..10bc318
Binary files /dev/null and b/assets/img/horizontal-detail.5953eb90.jpg differ
diff --git a/assets/img/horizontal.b42a1783.jpg b/assets/img/horizontal.b42a1783.jpg
new file mode 100644
index 0000000..5f50f49
Binary files /dev/null and b/assets/img/horizontal.b42a1783.jpg differ
diff --git a/assets/img/hotlog.d61a5738.png b/assets/img/hotlog.d61a5738.png
new file mode 100644
index 0000000..62ddace
Binary files /dev/null and b/assets/img/hotlog.d61a5738.png differ
diff --git a/assets/img/i18n.c4b58e17.png b/assets/img/i18n.c4b58e17.png
new file mode 100644
index 0000000..2e2a48a
Binary files /dev/null and b/assets/img/i18n.c4b58e17.png differ
diff --git a/assets/img/i18nAlly.62395d00.jpg b/assets/img/i18nAlly.62395d00.jpg
new file mode 100644
index 0000000..c038225
Binary files /dev/null and b/assets/img/i18nAlly.62395d00.jpg differ
diff --git a/assets/img/i18nRouter.d53a62e8.png b/assets/img/i18nRouter.d53a62e8.png
new file mode 100644
index 0000000..118e3df
Binary files /dev/null and b/assets/img/i18nRouter.d53a62e8.png differ
diff --git a/assets/img/i18nVue.648163b2.png b/assets/img/i18nVue.648163b2.png
new file mode 100644
index 0000000..2c0d82d
Binary files /dev/null and b/assets/img/i18nVue.648163b2.png differ
diff --git a/assets/img/icon-online.139d08c0.png b/assets/img/icon-online.139d08c0.png
new file mode 100644
index 0000000..9cad7e7
Binary files /dev/null and b/assets/img/icon-online.139d08c0.png differ
diff --git a/assets/img/log.06f8014f.png b/assets/img/log.06f8014f.png
new file mode 100644
index 0000000..6ec509e
Binary files /dev/null and b/assets/img/log.06f8014f.png differ
diff --git a/assets/img/logo.ed0fcf84.png b/assets/img/logo.ed0fcf84.png
new file mode 100644
index 0000000..dbaa5ce
Binary files /dev/null and b/assets/img/logo.ed0fcf84.png differ
diff --git a/assets/img/mac.16fff2c5.png b/assets/img/mac.16fff2c5.png
new file mode 100644
index 0000000..fe65101
Binary files /dev/null and b/assets/img/mac.16fff2c5.png differ
diff --git a/assets/img/menu-if.3feef028.png b/assets/img/menu-if.3feef028.png
new file mode 100644
index 0000000..7016645
Binary files /dev/null and b/assets/img/menu-if.3feef028.png differ
diff --git a/assets/img/menu-local.a118bb2d.jpg b/assets/img/menu-local.a118bb2d.jpg
new file mode 100644
index 0000000..5e9ccf0
Binary files /dev/null and b/assets/img/menu-local.a118bb2d.jpg differ
diff --git a/assets/img/menu-svg.50f76bea.png b/assets/img/menu-svg.50f76bea.png
new file mode 100644
index 0000000..9af2ca7
Binary files /dev/null and b/assets/img/menu-svg.50f76bea.png differ
diff --git a/assets/img/messagebox-dark.578f2984.jpg b/assets/img/messagebox-dark.578f2984.jpg
new file mode 100644
index 0000000..ef67b98
Binary files /dev/null and b/assets/img/messagebox-dark.578f2984.jpg differ
diff --git a/assets/img/messagebox.18d0847d.jpg b/assets/img/messagebox.18d0847d.jpg
new file mode 100644
index 0000000..2ac5ad8
Binary files /dev/null and b/assets/img/messagebox.18d0847d.jpg differ
diff --git a/assets/img/mixNav-detail.b7d39aef.jpg b/assets/img/mixNav-detail.b7d39aef.jpg
new file mode 100644
index 0000000..b1eb2d4
Binary files /dev/null and b/assets/img/mixNav-detail.b7d39aef.jpg differ
diff --git a/assets/img/mixNav.295259bf.jpg b/assets/img/mixNav.295259bf.jpg
new file mode 100644
index 0000000..b2e9f5b
Binary files /dev/null and b/assets/img/mixNav.295259bf.jpg differ
diff --git a/assets/img/more.cbf06c6b.jpg b/assets/img/more.cbf06c6b.jpg
new file mode 100644
index 0000000..8352a6f
Binary files /dev/null and b/assets/img/more.cbf06c6b.jpg differ
diff --git a/assets/img/namespace.19870394.jpg b/assets/img/namespace.19870394.jpg
new file mode 100644
index 0000000..4db975e
Binary files /dev/null and b/assets/img/namespace.19870394.jpg differ
diff --git a/assets/img/nginx-config.5d0e66d7.jpg b/assets/img/nginx-config.5d0e66d7.jpg
new file mode 100644
index 0000000..a5d6554
Binary files /dev/null and b/assets/img/nginx-config.5d0e66d7.jpg differ
diff --git a/assets/img/no-output.48778faf.jpg b/assets/img/no-output.48778faf.jpg
new file mode 100644
index 0000000..75c92f2
Binary files /dev/null and b/assets/img/no-output.48778faf.jpg differ
diff --git a/assets/img/no1.e0910719.png b/assets/img/no1.e0910719.png
new file mode 100644
index 0000000..3dc04ec
Binary files /dev/null and b/assets/img/no1.e0910719.png differ
diff --git a/assets/img/nodejs.618d72d2.jpg b/assets/img/nodejs.618d72d2.jpg
new file mode 100644
index 0000000..4e2c9b5
Binary files /dev/null and b/assets/img/nodejs.618d72d2.jpg differ
diff --git a/assets/img/notification-dark.1dafa902.jpg b/assets/img/notification-dark.1dafa902.jpg
new file mode 100644
index 0000000..7723ab8
Binary files /dev/null and b/assets/img/notification-dark.1dafa902.jpg differ
diff --git a/assets/img/notification.1a368e15.jpg b/assets/img/notification.1a368e15.jpg
new file mode 100644
index 0000000..1b46b5e
Binary files /dev/null and b/assets/img/notification.1a368e15.jpg differ
diff --git a/assets/img/npm1.1ecb4afe.jpg b/assets/img/npm1.1ecb4afe.jpg
new file mode 100644
index 0000000..79eab51
Binary files /dev/null and b/assets/img/npm1.1ecb4afe.jpg differ
diff --git a/assets/img/npm2.40452cbe.jpg b/assets/img/npm2.40452cbe.jpg
new file mode 100644
index 0000000..eac8ddb
Binary files /dev/null and b/assets/img/npm2.40452cbe.jpg differ
diff --git a/assets/img/npm3.b590833f.jpg b/assets/img/npm3.b590833f.jpg
new file mode 100644
index 0000000..62979e6
Binary files /dev/null and b/assets/img/npm3.b590833f.jpg differ
diff --git a/assets/img/online-click.3284c99a.png b/assets/img/online-click.3284c99a.png
new file mode 100644
index 0000000..754246c
Binary files /dev/null and b/assets/img/online-click.3284c99a.png differ
diff --git a/assets/img/optimized.470a939d.png b/assets/img/optimized.470a939d.png
new file mode 100644
index 0000000..44ecf3b
Binary files /dev/null and b/assets/img/optimized.470a939d.png differ
diff --git a/assets/img/output.e13d001d.jpg b/assets/img/output.e13d001d.jpg
new file mode 100644
index 0000000..cb7a2e4
Binary files /dev/null and b/assets/img/output.e13d001d.jpg differ
diff --git a/assets/img/rank.415eac7f.png b/assets/img/rank.415eac7f.png
new file mode 100644
index 0000000..f97b49c
Binary files /dev/null and b/assets/img/rank.415eac7f.png differ
diff --git a/assets/img/rbac.8088af0f.jpg b/assets/img/rbac.8088af0f.jpg
new file mode 100644
index 0000000..11740c4
Binary files /dev/null and b/assets/img/rbac.8088af0f.jpg differ
diff --git a/assets/img/recommended1.5c31bd3b.jpg b/assets/img/recommended1.5c31bd3b.jpg
new file mode 100644
index 0000000..19a9a91
Binary files /dev/null and b/assets/img/recommended1.5c31bd3b.jpg differ
diff --git a/assets/img/recommended2.6117add9.jpg b/assets/img/recommended2.6117add9.jpg
new file mode 100644
index 0000000..5105f55
Binary files /dev/null and b/assets/img/recommended2.6117add9.jpg differ
diff --git a/assets/img/report.74fa047f.jpg b/assets/img/report.74fa047f.jpg
new file mode 100644
index 0000000..56811f8
Binary files /dev/null and b/assets/img/report.74fa047f.jpg differ
diff --git a/assets/img/roles.e4c75c93.png b/assets/img/roles.e4c75c93.png
new file mode 100644
index 0000000..de0ec12
Binary files /dev/null and b/assets/img/roles.e4c75c93.png differ
diff --git a/assets/img/same1.ba15508a.jpg b/assets/img/same1.ba15508a.jpg
new file mode 100644
index 0000000..08d7f4c
Binary files /dev/null and b/assets/img/same1.ba15508a.jpg differ
diff --git a/assets/img/same4.b3359637.jpg b/assets/img/same4.b3359637.jpg
new file mode 100644
index 0000000..c53212a
Binary files /dev/null and b/assets/img/same4.b3359637.jpg differ
diff --git a/assets/img/search.237d6f6a.svg b/assets/img/search.237d6f6a.svg
new file mode 100644
index 0000000..18ed22a
--- /dev/null
+++ b/assets/img/search.237d6f6a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/shims-vue1.921d5914.png b/assets/img/shims-vue1.921d5914.png
new file mode 100644
index 0000000..3eaa0ff
Binary files /dev/null and b/assets/img/shims-vue1.921d5914.png differ
diff --git a/assets/img/shims-vue2.c6c1e65f.jpg b/assets/img/shims-vue2.c6c1e65f.jpg
new file mode 100644
index 0000000..4891221
Binary files /dev/null and b/assets/img/shims-vue2.c6c1e65f.jpg differ
diff --git a/assets/img/shims-vue3.1cafc0ba.jpg b/assets/img/shims-vue3.1cafc0ba.jpg
new file mode 100644
index 0000000..6a7feb7
Binary files /dev/null and b/assets/img/shims-vue3.1cafc0ba.jpg differ
diff --git a/assets/img/snip30.84c7390f.jpg b/assets/img/snip30.84c7390f.jpg
new file mode 100644
index 0000000..b60b1ec
Binary files /dev/null and b/assets/img/snip30.84c7390f.jpg differ
diff --git a/assets/img/snip32.ba4d62f9.jpg b/assets/img/snip32.ba4d62f9.jpg
new file mode 100644
index 0000000..5d9efe4
Binary files /dev/null and b/assets/img/snip32.ba4d62f9.jpg differ
diff --git a/assets/img/snip33.c67c4163.jpg b/assets/img/snip33.c67c4163.jpg
new file mode 100644
index 0000000..5f35e8e
Binary files /dev/null and b/assets/img/snip33.c67c4163.jpg differ
diff --git a/assets/img/static1.96239ed7.jpg b/assets/img/static1.96239ed7.jpg
new file mode 100644
index 0000000..3c0eb14
Binary files /dev/null and b/assets/img/static1.96239ed7.jpg differ
diff --git a/assets/img/static10.20b16533.jpg b/assets/img/static10.20b16533.jpg
new file mode 100644
index 0000000..bb5ad53
Binary files /dev/null and b/assets/img/static10.20b16533.jpg differ
diff --git a/assets/img/static11.dd0e8564.jpg b/assets/img/static11.dd0e8564.jpg
new file mode 100644
index 0000000..3b09583
Binary files /dev/null and b/assets/img/static11.dd0e8564.jpg differ
diff --git a/assets/img/static12.4a42038f.jpg b/assets/img/static12.4a42038f.jpg
new file mode 100644
index 0000000..797c72f
Binary files /dev/null and b/assets/img/static12.4a42038f.jpg differ
diff --git a/assets/img/static13.6f21cffb.jpg b/assets/img/static13.6f21cffb.jpg
new file mode 100644
index 0000000..370d360
Binary files /dev/null and b/assets/img/static13.6f21cffb.jpg differ
diff --git a/assets/img/static15.19eae526.jpg b/assets/img/static15.19eae526.jpg
new file mode 100644
index 0000000..3e00ad3
Binary files /dev/null and b/assets/img/static15.19eae526.jpg differ
diff --git a/assets/img/static16.3f6d1472.jpg b/assets/img/static16.3f6d1472.jpg
new file mode 100644
index 0000000..e1b4102
Binary files /dev/null and b/assets/img/static16.3f6d1472.jpg differ
diff --git a/assets/img/static2.18366613.jpg b/assets/img/static2.18366613.jpg
new file mode 100644
index 0000000..e7e39ba
Binary files /dev/null and b/assets/img/static2.18366613.jpg differ
diff --git a/assets/img/static3.51f39fcd.jpg b/assets/img/static3.51f39fcd.jpg
new file mode 100644
index 0000000..d21e112
Binary files /dev/null and b/assets/img/static3.51f39fcd.jpg differ
diff --git a/assets/img/static7.bc86b8ef.jpg b/assets/img/static7.bc86b8ef.jpg
new file mode 100644
index 0000000..7565adc
Binary files /dev/null and b/assets/img/static7.bc86b8ef.jpg differ
diff --git a/assets/img/static8.6aa2a39c.jpg b/assets/img/static8.6aa2a39c.jpg
new file mode 100644
index 0000000..81bd902
Binary files /dev/null and b/assets/img/static8.6aa2a39c.jpg differ
diff --git a/assets/img/static9.2f15325a.jpg b/assets/img/static9.2f15325a.jpg
new file mode 100644
index 0000000..7db2688
Binary files /dev/null and b/assets/img/static9.2f15325a.jpg differ
diff --git a/assets/img/type.bd4e388d.jpg b/assets/img/type.bd4e388d.jpg
new file mode 100644
index 0000000..96711fb
Binary files /dev/null and b/assets/img/type.bd4e388d.jpg differ
diff --git a/assets/img/unexpected.9b72d40f.jpg b/assets/img/unexpected.9b72d40f.jpg
new file mode 100644
index 0000000..a9aa3b2
Binary files /dev/null and b/assets/img/unexpected.9b72d40f.jpg differ
diff --git a/assets/img/useRenderIcon.afa0232e.png b/assets/img/useRenderIcon.afa0232e.png
new file mode 100644
index 0000000..d617bce
Binary files /dev/null and b/assets/img/useRenderIcon.afa0232e.png differ
diff --git a/assets/img/vertical-detail.f5a5fe13.jpg b/assets/img/vertical-detail.f5a5fe13.jpg
new file mode 100644
index 0000000..6548c30
Binary files /dev/null and b/assets/img/vertical-detail.f5a5fe13.jpg differ
diff --git a/assets/img/vertical.f0e7280b.jpg b/assets/img/vertical.f0e7280b.jpg
new file mode 100644
index 0000000..b5a0a3f
Binary files /dev/null and b/assets/img/vertical.f0e7280b.jpg differ
diff --git a/assets/img/vite.4e708700.png b/assets/img/vite.4e708700.png
new file mode 100644
index 0000000..a9eb9cb
Binary files /dev/null and b/assets/img/vite.4e708700.png differ
diff --git a/assets/img/vscode-iconify.e92010ca.png b/assets/img/vscode-iconify.e92010ca.png
new file mode 100644
index 0000000..d9bc15d
Binary files /dev/null and b/assets/img/vscode-iconify.e92010ca.png differ
diff --git a/assets/img/vscode-iconify2.a023cc92.png b/assets/img/vscode-iconify2.a023cc92.png
new file mode 100644
index 0000000..04825b4
Binary files /dev/null and b/assets/img/vscode-iconify2.a023cc92.png differ
diff --git a/assets/img/whole.085428da.jpg b/assets/img/whole.085428da.jpg
new file mode 100644
index 0000000..f7c56cc
Binary files /dev/null and b/assets/img/whole.085428da.jpg differ
diff --git a/assets/img/xrk1.64774ed4.jpg b/assets/img/xrk1.64774ed4.jpg
new file mode 100644
index 0000000..349ca3e
Binary files /dev/null and b/assets/img/xrk1.64774ed4.jpg differ
diff --git a/assets/img/xrk2.c290764b.jpg b/assets/img/xrk2.c290764b.jpg
new file mode 100644
index 0000000..2769aee
Binary files /dev/null and b/assets/img/xrk2.c290764b.jpg differ
diff --git a/assets/js/10.cfa3733d.js b/assets/js/10.cfa3733d.js
new file mode 100644
index 0000000..406c24b
--- /dev/null
+++ b/assets/js/10.cfa3733d.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{387:function(t,s,a){t.exports=a.p+"assets/img/i18nAlly.62395d00.jpg"},388:function(t,s,a){t.exports=a.p+"assets/img/i18n.c4b58e17.png"},389:function(t,s,a){t.exports=a.p+"assets/img/i18nVue.648163b2.png"},390:function(t,s,a){t.exports=a.p+"assets/img/i18nRouter.d53a62e8.png"},450:function(t,s,a){"use strict";a.r(s);var n=a(8),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("p",[t._v("平台内置了国际化,支持自定义国际化、"),n("code",[t._v("element-plus")]),t._v(" 国际化")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("pure-admin 完整版"),n("OutboundLink")],1),t._v(" 只有国际化版本")]),t._v(" "),n("h2",{attrs:{id:"vscode-插件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vscode-插件"}},[t._v("#")]),t._v(" "),n("code",[t._v("vscode")]),t._v(" 插件")]),t._v(" "),n("p",[t._v("在 "),n("code",[t._v("vscode")]),t._v(" 插件商店搜 "),n("code",[t._v("lokalise.i18n-ally")]),t._v(" 进行安装,可以带来更友好的国际化提示")]),t._v(" "),n("p",[n("img",{attrs:{src:a(387),alt:"i18nAlly"}})]),t._v(" "),n("p",[t._v("当然不要忘记把下面的 "),n("code",[t._v("json")]),t._v(" 代码添加到您 "),n("code",[t._v("vscode")]),t._v(" 的 "),n("code",[t._v("settings.json")]),t._v(" 中")]),t._v(" "),n("div",{staticClass:"language-json extra-class"},[n("pre",{pre:!0,attrs:{class:"language-json"}},[n("code",[n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.localesPaths"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"locales"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.keystyle"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nested"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sortKeys"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.namespace"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledParsers"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yaml"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"js"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.sourceLanguage"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"en"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.displayLanguage"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"zh-CN"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"i18n-ally.enabledFrameworks"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),n("h2",{attrs:{id:"注入国际化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#注入国际化"}},[t._v("#")]),t._v(" 注入国际化")]),t._v(" "),n("p",[t._v("平台使用 "),n("a",{attrs:{href:"https://www.npmjs.com/package/@intlify/unplugin-vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("@intlify/unplugin-vue-i18n"),n("OutboundLink")],1),t._v(" 这款国际化 "),n("code",[t._v("vite")]),t._v(" 插件配合 "),n("a",{attrs:{href:"https://www.npmjs.com/package/vue-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n"),n("OutboundLink")],1),t._v("来实现国际化,国际化文件采用了 "),n("code",[t._v("yaml")]),t._v(" 格式 "),n("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("点击查看更多格式"),n("OutboundLink")],1)]),t._v(" "),n("p",[t._v("中文添加到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/locales/zh-CN.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("zh-CN.yaml"),n("OutboundLink")],1),t._v(" 文件里,英文添加到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/locales/en.yaml",target:"_blank",rel:"noopener noreferrer"}},[t._v("en.yaml"),n("OutboundLink")],1),t._v(" 文件里,支持嵌套结构,嵌套层级越深性能越低,如下图")]),t._v(" "),n("p",[n("img",{attrs:{src:a(388),alt:"i18n"}})]),t._v(" "),n("h2",{attrs:{id:"基础用法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),n("h3",{attrs:{id:"vue-文件中使用"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用"}},[t._v("#")]),t._v(" "),n("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),n("p",[t._v("① 使用 "),n("code",[t._v("vue-i18n")]),t._v(" 中 "),n("code",[t._v("useI18n")]),t._v(" 函数")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" t "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ t("buttons.hsLoginOut") }}'),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("p",[t._v("② 使用平台提供的 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/plugins/i18n.ts#L37",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),n("OutboundLink")],1),t._v(" 函数")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ transformI18n("buttons.hsLoginOut") }}'),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("h3",{attrs:{id:"ts-文件中使用"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用"}},[t._v("#")]),t._v(" "),n("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),n("p",[t._v("在 "),n("code",[t._v(".ts")]),t._v(" 文件中推荐使用平台提供的 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/plugins/i18n.ts#L37",target:"_blank",rel:"noopener noreferrer"}},[t._v("transformI18n"),n("OutboundLink")],1),t._v(" 函数,因为 "),n("code",[t._v("useI18n")]),t._v(" 必须在 "),n("code",[t._v("setup")]),t._v(" 中使用,具体原因请看 "),n("a",{attrs:{href:"https://vue-i18n.intlify.dev/guide/advanced/composition.html#basic-usage",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue-i18n 文档"),n("OutboundLink")],1)]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" transformI18n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(' "@'),n("span",{pre:!0,attrs:{class:"token regex"}},[n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("plugins")]),n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-flags"}},[t._v("i")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("transformI18n")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"buttons.hsLoginOut"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),n("p",[n("code",[t._v("transformI18n")]),t._v(" 会自动读取 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/locales",target:"_blank",rel:"noopener noreferrer"}},[t._v("locales"),n("OutboundLink")],1),t._v(" 下的国际化语言,如果匹配到则返回,匹配不到的话就是您传什么就返回什么,这样避免报错。这也是为什么平台路由的 "),n("code",[t._v("title")]),t._v(" 字段支持传 "),n("code",[t._v("国际化")]),t._v(" 和 "),n("code",[t._v("非国际化")]),t._v(" 两种写法的原因")])]),t._v(" "),n("h2",{attrs:{id:"平台提供的-t"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#平台提供的-t"}},[t._v("#")]),t._v(" 平台提供的 "),n("code",[t._v("$t")])]),t._v(" "),n("p",[t._v("这里的 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/plugins/i18n.ts#L61",target:"_blank",rel:"noopener noreferrer"}},[t._v("$t"),n("OutboundLink")],1),t._v(" 是指平台提供的函数,是配合 "),n("code",[t._v("i18n Ally")]),t._v(" 插件在 "),n("code",[t._v("vscode")]),t._v(" 里带来智能提示,无实际意义,只对提示起作用,而非 "),n("code",[t._v("vue-i18n")]),t._v(" 里的")]),t._v(" "),n("h3",{attrs:{id:"vue-文件中使用-2"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-2"}},[t._v("#")]),t._v(" "),n("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),n("p",[t._v("对于 "),n("code",[t._v("i18n Ally")]),t._v(" 插件来说要想得到智能提示必须使用带有 "),n("code",[t._v("t")]),t._v(" 的别名而且 "),n("code",[t._v("t")]),t._v(" 永远在最后一位,例如 "),n("code",[t._v("$$t")]),t._v(" 、 "),n("code",[t._v("&t")]),t._v(" 类似格式都是生效的,而 "),n("code",[t._v("$t$")]),t._v(" 、 "),n("code",[t._v("t&")]),t._v(" 不生效")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/plugins/i18n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('{{ $t("login.usernameReg") }}'),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("template")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("p",[t._v("效果如下图")]),t._v(" "),n("p",[n("img",{attrs:{src:a(389),alt:"i18n"}})]),t._v(" "),n("h3",{attrs:{id:"ts-文件中使用-2"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-2"}},[t._v("#")]),t._v(" "),n("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" $t "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/@/plugins/i18n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$t")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"menus.hslogin"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("效果如下图")]),t._v(" "),n("p",[n("img",{attrs:{src:a(390),alt:"i18n"}})]),t._v(" "),n("h2",{attrs:{id:"当前的国际化环境"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#当前的国际化环境"}},[t._v("#")]),t._v(" 当前的国际化环境")]),t._v(" "),n("p",[t._v("当前的国际化环境是指当前系统正在使用中文还是英文("),n("code",[t._v("zh")]),t._v(":中文、"),n("code",[t._v("en")]),t._v(":英文)")]),t._v(" "),n("h3",{attrs:{id:"vue-文件中使用-3"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-3"}},[t._v("#")]),t._v(" "),n("code",[t._v(".vue")]),t._v(" 文件中使用")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" useI18n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue-i18n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" locale "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("useI18n")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("h3",{attrs:{id:"ts-文件中使用-3"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#ts-文件中使用-3"}},[t._v("#")]),t._v(" "),n("code",[t._v(".ts")]),t._v(" 文件中使用")]),t._v(" "),n("p",[t._v("因为 "),n("code",[t._v("useI18n")]),t._v(" 只能在 "),n("code",[t._v("setup")]),t._v(" 中使用,所以平台将当前的国际化环境在 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/responsive.ts#L12",target:"_blank",rel:"noopener noreferrer"}},[t._v("localStorage"),n("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" StorageConfigs "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/#/index"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" storageLocal "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@pureadmin/utils"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" locale "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n storageLocal"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getItem")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("StorageConfigs"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responsive-locale"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("locale"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("当前系统采用的语言是:")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("locale"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/11.f5a5eeff.js b/assets/js/11.f5a5eeff.js
new file mode 100644
index 0000000..1ca91e7
--- /dev/null
+++ b/assets/js/11.f5a5eeff.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{391:function(t,a,s){t.exports=s.p+"assets/img/rbac.8088af0f.jpg"},392:function(t,a,s){t.exports=s.p+"assets/img/roles.e4c75c93.png"},393:function(t,a,s){t.exports=s.p+"assets/img/auths.6821040b.png"},452:function(t,a,s){"use strict";s.r(a);var r=s(8),n=Object(r.a)({},(function(){var t=this,a=t.$createElement,r=t._self._c||a;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("p",[t._v("所谓 "),r("code",[t._v("RBAC")]),t._v("(Role Based Access Control)权限指的是基于角色的访问控制")]),t._v(" "),r("p",[r("img",{attrs:{src:s(391),alt:"rbac"}})]),t._v(" "),r("h2",{attrs:{id:"用户"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#用户"}},[t._v("#")]),t._v(" 用户")]),t._v(" "),r("p",[t._v("平台用 "),r("code",[t._v("mock")]),t._v(" 模拟出两个账号,一个是 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/mock/login.ts#L13",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),r("OutboundLink")],1),t._v(",另一个是 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/mock/login.ts#L25",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),r("OutboundLink")],1),t._v(",用户名字段为 "),r("code",[t._v("username")]),t._v(" ,为字符串类型,当然平台将用户名在 "),r("code",[t._v("pinia")]),t._v(" 的 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/store/modules/user.ts#L16",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),r("OutboundLink")],1),t._v(" 里存了一份")]),t._v(" "),r("h2",{attrs:{id:"角色"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#角色"}},[t._v("#")]),t._v(" 角色")]),t._v(" "),r("p",[t._v("平台用 "),r("code",[t._v("mock")]),t._v(" 模拟出两个角色,一个是 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/mock/login.ts#L15",target:"_blank",rel:"noopener noreferrer"}},[t._v("admin"),r("OutboundLink")],1),t._v(",另一个是 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/mock/login.ts#L27",target:"_blank",rel:"noopener noreferrer"}},[t._v("common"),r("OutboundLink")],1),t._v(",角色存放在 "),r("code",[t._v("roles")]),t._v(" 字段中,为数组类型,可支持多个角色,当然平台将 "),r("code",[t._v("当前登录用户的角色")]),t._v(" 在 "),r("code",[t._v("pinia")]),t._v(" 的 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/store/modules/user.ts#L19",target:"_blank",rel:"noopener noreferrer"}},[t._v("state"),r("OutboundLink")],1),t._v(" 里也存了一份")]),t._v(" "),r("h2",{attrs:{id:"权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#权限"}},[t._v("#")]),t._v(" 权限")]),t._v(" "),r("p",[t._v("整体分为 "),r("a",{attrs:{href:"#%E7%B2%97%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("粗粒度权限")]),t._v(" 和 "),r("a",{attrs:{href:"#%E7%BB%86%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90"}},[t._v("细粒度权限")])]),t._v(" "),r("h3",{attrs:{id:"粗粒度权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#粗粒度权限"}},[t._v("#")]),t._v(" 粗粒度权限")]),t._v(" "),r("h4",{attrs:{id:"菜单权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#菜单权限"}},[t._v("#")]),t._v(" 菜单权限")]),t._v(" "),r("h5",{attrs:{id:"实现原理、代码"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),r("p",[t._v("页面整体的菜单存放在 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/store/modules/permission.ts#L13",target:"_blank",rel:"noopener noreferrer"}},[t._v("wholeMenus"),r("OutboundLink")],1),t._v(",所以我们只需要控制 "),r("code",[t._v("wholeMenus")]),t._v(" 就能控制菜单的显示、隐藏。通过 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/router/utils.ts#L85",target:"_blank",rel:"noopener noreferrer"}},[t._v("filterNoPermissionTree"),r("OutboundLink")],1),t._v(" 函数从菜单中过滤无权限的菜单")]),t._v(" "),r("h5",{attrs:{id:"如何配置"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#如何配置"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),r("p",[t._v("只需要通过返回路由的 "),r("code",[t._v("roles")]),t._v(" 配置项,赋予该菜单权限即可,如下图")]),t._v(" "),r("p",[r("img",{attrs:{src:s(392),alt:"roles"}})]),t._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[t._v("实现细节")]),t._v(" "),r("p",[t._v("将菜单与路由解藕,这样可以更灵活的控制二者,不会造成一方改动必会影响另一方")])]),t._v(" "),r("h4",{attrs:{id:"url-链接权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#url-链接权限"}},[t._v("#")]),t._v(" "),r("code",[t._v("url")]),t._v(" 链接权限")]),t._v(" "),r("h5",{attrs:{id:"实现原理、代码-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-2"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),r("p",[t._v("平台在路由的 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/router/index.ts#L98",target:"_blank",rel:"noopener noreferrer"}},[t._v("beforeEach"),r("OutboundLink")],1),t._v(" 钩子函数中,通过对比当前用户的角色和当前路由中 "),r("code",[t._v("roles")]),t._v(" 字段来判断是否有无权限,无权限跳转 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/views/error/403.vue",target:"_blank",rel:"noopener noreferrer"}},[t._v("403"),r("OutboundLink")],1),t._v(" 页面")]),t._v(" "),r("h5",{attrs:{id:"如何配置-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-2"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),r("p",[t._v("您不需要做任何配置,只需要像上图一样配置好权限就行,平台会根据有无权限自行判断,如下面视频,当有 "),r("code",[t._v("admin")]),t._v(" 权限时可以看到系统管理目录以及里面的菜单页面并且可以通过 "),r("code",[t._v("url")]),t._v(" 跳转,当然也可以在 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/src/layout/components/search",target:"_blank",rel:"noopener noreferrer"}},[t._v("菜单搜索"),r("OutboundLink")],1),t._v(" 中找到,当无 "),r("code",[t._v("admin")]),t._v(" 权限时反之")]),t._v(" "),r("h4",{attrs:{id:"按钮、组件、类方法权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#按钮、组件、类方法权限"}},[t._v("#")]),t._v(" 按钮、组件、类方法权限")]),t._v(" "),r("p",[t._v("针对这三类权限判断,平台提供三种方法 "),r("a",{attrs:{href:"#%E7%BB%84%E4%BB%B6%E6%96%B9%E5%BC%8F%E5%88%A4%E6%96%AD%E6%9D%83%E9%99%90"}},[t._v("组件方式判断权限")]),t._v("、"),r("a",{attrs:{href:"#%E5%87%BD%E6%95%B0%E6%96%B9%E5%BC%8F%E5%88%A4%E6%96%AD%E6%9D%83%E9%99%90"}},[t._v("函数方式判断权限")]),t._v("、"),r("a",{attrs:{href:"#%E6%8C%87%E4%BB%A4%E6%96%B9%E5%BC%8F%E5%88%A4%E6%96%AD%E6%9D%83%E9%99%90"}},[t._v("指令方式判断权限")])]),t._v(" "),r("p",[t._v("在使用这三种方法前,需要通过返回路由的 "),r("code",[t._v("auths")]),t._v(" 配置项,赋予该页面按钮级别权限,如下图")]),t._v(" "),r("p",[r("img",{attrs:{src:s(393),alt:"auths"}})]),t._v(" "),r("h5",{attrs:{id:"组件方式判断权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#组件方式判断权限"}},[t._v("#")]),t._v(" 组件方式判断权限")]),t._v(" "),r("ul",[r("li",[t._v("按钮、组件权限可用")])]),t._v(" "),r("h6",{attrs:{id:"实现原理、代码-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-3"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),r("p",[t._v("通过 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/router/utils.ts#L354",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),r("OutboundLink")],1),t._v(" 函数,进行权限组件的封装,使用 "),r("code",[t._v("Vue")]),t._v(" 提供的 "),r("a",{attrs:{href:"https://cn.vuejs.org/guide/extras/rendering-mechanism.html#patch-flags",target:"_blank",rel:"noopener noreferrer"}},[t._v("Fragment"),r("OutboundLink")],1),t._v(" 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。"),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/components/ReAuth/src/auth.tsx",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),r("OutboundLink")],1)]),t._v(" "),r("h6",{attrs:{id:"如何配置-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-3"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),r("p",[t._v("具体参考 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/views/permission/button/index.vue#L23-L38",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),r("OutboundLink")],1)]),t._v(" "),r("div",{staticClass:"language-Vue extra-class"},[r("pre",{pre:!0,attrs:{class:"language-vue"}},[r("code",[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Auth")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("btn_add"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" 拥有code:'btn_add' 权限可见 "),r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("el-button")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("Auth")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),r("p",[t._v("平台已经全局注册 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/main.ts#L44-L45",target:"_blank",rel:"noopener noreferrer"}},[t._v("Auth"),r("OutboundLink")],1),t._v(" 组件,无需重复注册")])]),t._v(" "),r("h5",{attrs:{id:"函数方式判断权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#函数方式判断权限"}},[t._v("#")]),t._v(" 函数方式判断权限")]),t._v(" "),r("ul",[r("li",[t._v("按钮、组件、类方法权限都可用")])]),t._v(" "),r("h6",{attrs:{id:"实现原理、代码-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-4"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),r("p",[t._v("通过 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/router/utils.ts#L354",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),r("OutboundLink")],1),t._v(" 函数判断某些按钮、组件、类方法是否有按钮级别的权限")]),t._v(" "),r("h6",{attrs:{id:"如何配置-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-4"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),r("p",[t._v("具体参考 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/views/permission/button/index.vue#L40-L56",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),r("OutboundLink")],1)]),t._v(" "),r("div",{staticClass:"language-Vue extra-class"},[r("pre",{pre:!0,attrs:{class:"language-vue"}},[r("code",[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hasAuth('btn_add')"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("el-button")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),r("div",{staticClass:"language-ts extra-class"},[r("pre",{pre:!0,attrs:{class:"language-ts"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[t._v("hasAuth")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),r("span",{pre:!0,attrs:{class:"token string"}},[t._v('"btn_add"')]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token string"}},[t._v('"显示"')]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token string"}},[t._v('"隐藏"')]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),r("h5",{attrs:{id:"指令方式判断权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#指令方式判断权限"}},[t._v("#")]),t._v(" 指令方式判断权限")]),t._v(" "),r("ul",[r("li",[t._v("按钮、组件权限可用。指令方式不能动态修改权限")])]),t._v(" "),r("h6",{attrs:{id:"实现原理、代码-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#实现原理、代码-5"}},[t._v("#")]),t._v(" 实现原理、代码")]),t._v(" "),r("p",[t._v("通过 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/router/utils.ts#L354",target:"_blank",rel:"noopener noreferrer"}},[t._v("hasAuth"),r("OutboundLink")],1),t._v(" 函数,进行权限指令的封装。"),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/directives/auth/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看具体代码"),r("OutboundLink")],1)]),t._v(" "),r("h6",{attrs:{id:"如何配置-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#如何配置-5"}},[t._v("#")]),t._v(" 如何配置")]),t._v(" "),r("p",[t._v("具体参考 "),r("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/views/permission/button/index.vue#L58-L73",target:"_blank",rel:"noopener noreferrer"}},[t._v("views/permission/button/index.vue"),r("OutboundLink")],1)]),t._v(" "),r("div",{staticClass:"language-Vue extra-class"},[r("pre",{pre:!0,attrs:{class:"language-vue"}},[r("code",[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("el-button")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("success"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),r("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-auth")]),r("span",{pre:!0,attrs:{class:"token attr-value"}},[r("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("btn_add'"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n 拥有code:'btn_add' 权限可见\n"),r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token tag"}},[r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("el-button")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),r("h3",{attrs:{id:"细粒度权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#细粒度权限"}},[t._v("#")]),t._v(" 细粒度权限")]),t._v(" "),r("h4",{attrs:{id:"数据权限"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#数据权限"}},[t._v("#")]),t._v(" 数据权限")]),t._v(" "),r("p",[t._v("数据权限对页面的要求就非常简单了,比如可以将数据权限的配置功能放在 "),r("code",[t._v("角色管理")]),t._v(" 页面进行配置即可")])])}),[],!1,null,null,null);a.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/12.8227754c.js b/assets/js/12.8227754c.js
new file mode 100644
index 0000000..31bf03e
--- /dev/null
+++ b/assets/js/12.8227754c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{403:function(e,t,r){e.exports=r.p+"assets/img/buildgood.a05286f4.jpg"},404:function(e,t,r){e.exports=r.p+"assets/img/no-output.48778faf.jpg"},405:function(e,t,r){e.exports=r.p+"assets/img/output.e13d001d.jpg"},456:function(e,t,r){"use strict";r.r(t);var v=r(8),o=Object(v.a)({},(function(){var e=this,t=e.$createElement,v=e._self._c||t;return v("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[v("p",[e._v("打包优化关联着网站的稳定与加载速度,在开发中也是非常重要的一项")]),e._v(" "),v("p",[v("img",{attrs:{src:r(403),alt:"buildgood"}})]),e._v(" "),v("h2",{attrs:{id:"vite-自身的构建优化"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#vite-自身的构建优化"}},[e._v("#")]),e._v(" "),v("code",[e._v("vite")]),e._v(" 自身的构建优化")]),e._v(" "),v("p",[e._v("点击查看 "),v("a",{attrs:{href:"https://cn.vitejs.dev/guide/features.html#build-optimizations",target:"_blank",rel:"noopener noreferrer"}},[e._v("build-optimizations"),v("OutboundLink")],1),e._v(" "),v("Badge",{attrs:{text:"vite官方文档"}})],1),e._v(" "),v("h2",{attrs:{id:"css-优化"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#css-优化"}},[e._v("#")]),e._v(" "),v("code",[e._v("css")]),e._v(" 优化")]),e._v(" "),v("p",[e._v("分两步优化")]),e._v(" "),v("h3",{attrs:{id:"-压缩-css"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#-压缩-css"}},[e._v("#")]),e._v(" 压缩 "),v("code",[e._v("css")])]),e._v(" "),v("p",[e._v("使用 "),v("RouterLink",{attrs:{to:"/pages/tailwindcss/#cssnano"}},[e._v("cssnano")]),e._v(" 去压缩 "),v("code",[e._v("css")])],1),e._v(" "),v("h3",{attrs:{id:"-自动添加浏览器前缀"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#-自动添加浏览器前缀"}},[e._v("#")]),e._v(" 自动添加浏览器前缀")]),e._v(" "),v("p",[e._v("使用 "),v("RouterLink",{attrs:{to:"/pages/tailwindcss/#autoprefixer"}},[e._v("Autoprefixer")]),e._v(" 自动添加浏览器前缀")],1),e._v(" "),v("h2",{attrs:{id:"组件、工具库"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#组件、工具库"}},[e._v("#")]),e._v(" 组件、工具库")]),e._v(" "),v("ul",[v("li",[v("p",[e._v("无论是组件(如 "),v("code",[e._v("element-plus")]),e._v("),还是工具库(如 "),v("code",[e._v("lodash")]),e._v("、"),v("code",[e._v("axios")]),e._v(")我们都应该尽可能的按需引入,使其有良好的 "),v("code",[e._v("tree-shaking")]),e._v(" 效果,这样项目整体打包出来的无用代码就少之又少了")])]),e._v(" "),v("li",[v("p",[e._v("拿 "),v("code",[e._v("lodash")]),e._v(" 举例,"),v("code",[e._v("lodash")]),e._v(" 默认是 "),v("code",[e._v("cjs")]),e._v(" 格式,不支持 "),v("code",[e._v("es6")]),e._v(" 的 "),v("code",[e._v("import")]),e._v(" 语法,那么我们就可以去 "),v("code",[e._v("github")]),e._v(" 或者某些搜索引擎去寻找替代品,最终平台找到了 "),v("code",[e._v("lodash-unified")]),e._v(",它完全兼容 "),v("code",[e._v("lodash")]),e._v(" 的全部语法并且既支持 "),v("code",[e._v("esm")]),e._v(" 又支持 "),v("code",[e._v("cjs")]),e._v(",这使得它无论在浏览器还是 "),v("code",[e._v("node")]),e._v(" 环境中表现都很良好。当然如果遇到那种只支持 "),v("code",[e._v("cjs")]),e._v(" 格式,网上找遍了都找不到兼容 "),v("code",[e._v("esm")]),e._v(" 格式的咋办呢,这时你可以参考 "),v("code",[e._v("lodash-unified")]),e._v(",看看别人是如何转换的 😊")])]),e._v(" "),v("li",[v("p",[v("code",[e._v("vite")]),e._v(" 目前最大的性能瓶颈是大量模块的首页加载,可看 "),v("a",{attrs:{href:"https://github.com/vitejs/vite/issues/1309#issue-777569758",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-issues"),v("OutboundLink")],1),e._v(",值得期待的是这个 "),v("a",{attrs:{href:"https://github.com/vitejs/vite/pull/10671",target:"_blank",rel:"noopener noreferrer"}},[e._v("pr"),v("OutboundLink")],1),e._v(" 可能会缓解这个麻烦")])])]),e._v(" "),v("h2",{attrs:{id:"压缩-gzip、brotli-格式"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#压缩-gzip、brotli-格式"}},[e._v("#")]),e._v(" 压缩 "),v("code",[e._v("gzip")]),e._v("、"),v("code",[e._v("brotli")]),e._v(" 格式")]),e._v(" "),v("p",[e._v("使用 "),v("a",{attrs:{href:"https://github.com/vbenjs/vite-plugin-compression",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-compression"),v("OutboundLink")],1),e._v(" 对平台进行 "),v("code",[e._v("gzip")]),e._v(" 或者 "),v("code",[e._v("brotli")]),e._v(" 压缩,"),v("code",[e._v("nginx")]),e._v(" 对这两种压缩模式都支持,压缩后部署到 "),v("code",[e._v("nginx")]),e._v(" 将极大提高网页加载速度")]),e._v(" "),v("h3",{attrs:{id:"如何开启压缩"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#如何开启压缩"}},[e._v("#")]),e._v(" 如何开启压缩")]),e._v(" "),v("p",[e._v("来到 "),v("code",[e._v(".env.production")]),e._v(" 文件,设置 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/.env.production#L13",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_COMPRESSION"),v("OutboundLink")],1),e._v(" 即可。设置总体分为下面两种 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/build/compress.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("具体实现代码"),v("OutboundLink")],1)]),e._v(" "),v("h4",{attrs:{id:"两种总体设置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#两种总体设置"}},[e._v("#")]),e._v(" 两种总体设置")]),e._v(" "),v("ol",[v("li",[e._v("压缩时不删除原始文件的配置")]),e._v(" "),v("li",[e._v("压缩时删除原始文件的配置")])]),e._v(" "),v("h5",{attrs:{id:"压缩时不删除原始文件的配置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#压缩时不删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时不删除原始文件的配置")]),e._v(" "),v("div",{staticClass:"language-.env.production extra-class"},[v("pre",{pre:!0,attrs:{class:"language-text"}},[v("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')])])]),v("h5",{attrs:{id:"压缩时删除原始文件的配置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#压缩时删除原始文件的配置"}},[e._v("#")]),e._v(" 压缩时删除原始文件的配置")]),e._v(" "),v("div",{staticClass:"language-.env.production extra-class"},[v("pre",{pre:!0,attrs:{class:"language-text"}},[v("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')])])]),v("h2",{attrs:{id:"采用-cdn-模式替换本地依赖"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#采用-cdn-模式替换本地依赖"}},[e._v("#")]),e._v(" 采用 "),v("code",[e._v("cdn")]),e._v(" 模式替换本地依赖")]),e._v(" "),v("h3",{attrs:{id:"vite-插件"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#vite-插件"}},[e._v("#")]),e._v(" "),v("code",[e._v("vite")]),e._v(" 插件")]),e._v(" "),v("p",[e._v("使用 "),v("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"),v("OutboundLink")],1),e._v(" 插件,在打包时将指定的 "),v("code",[e._v("modules")]),e._v(" 替换成 "),v("code",[e._v("cdn")]),e._v(" 链接,从而减少构建时间,提高生产环境中页面加载速度。")]),e._v(" "),v("h3",{attrs:{id:"cdn-厂商-免费"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#cdn-厂商-免费"}},[e._v("#")]),e._v(" "),v("code",[e._v("cdn")]),e._v(" 厂商(免费)")]),e._v(" "),v("p",[e._v("平台 "),v("code",[e._v("cdn")]),e._v(" 采用的是国内 "),v("a",{attrs:{href:"https://www.bootcdn.cn",target:"_blank",rel:"noopener noreferrer"}},[e._v("bootcdn"),v("OutboundLink")],1),e._v(",主要是稳定并且快,当然您也可以选择 "),v("a",{attrs:{href:"https://unpkg.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("unpkg"),v("OutboundLink")],1),e._v(" 或者 "),v("a",{attrs:{href:"https://www.jsdelivr.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("jsdelivr"),v("OutboundLink")],1),e._v(",这两个 "),v("code",[e._v("cdn")]),e._v(" 是国外的")]),e._v(" "),v("h3",{attrs:{id:"如何启动-cdn-替换"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#如何启动-cdn-替换"}},[e._v("#")]),e._v(" 如何启动 "),v("code",[e._v("cdn")]),e._v(" 替换")]),e._v(" "),v("p",[e._v("来到 "),v("code",[e._v(".env.production")]),e._v(" 文件,将 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/.env.production#L8",target:"_blank",rel:"noopener noreferrer"}},[e._v("VITE_CDN"),v("OutboundLink")],1),e._v(" 设置成 "),v("code",[e._v("true")]),e._v(" 即可")]),e._v(" "),v("h3",{attrs:{id:"默认启动-cdn-替换的模块有哪些"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#默认启动-cdn-替换的模块有哪些"}},[e._v("#")]),e._v(" 默认启动 "),v("code",[e._v("cdn")]),e._v(" 替换的模块有哪些")]),e._v(" "),v("p",[v("code",[e._v("vue")]),e._v("、"),v("code",[e._v("vue-router")]),e._v("、"),v("code",[e._v("vue-demi")]),e._v("、"),v("code",[e._v("pinia")]),e._v("、"),v("code",[e._v("element-plus")]),e._v("、"),v("code",[e._v("axios")]),e._v("、"),v("code",[e._v("dayjs")]),e._v("、"),v("code",[e._v("echarts")]),e._v(" 具体代码 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/build/cdn.ts",target:"_blank",rel:"noopener noreferrer"}},[e._v("build/cdn.ts"),v("OutboundLink")],1)]),e._v(" "),v("h2",{attrs:{id:"生产环境删除-console-log"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#生产环境删除-console-log"}},[e._v("#")]),e._v(" 生产环境删除 "),v("code",[e._v("console.log")])]),e._v(" "),v("p",[e._v("使用平台开发的 "),v("a",{attrs:{href:"https://github.com/xiaoxian521/vite-plugin-remove-console",target:"_blank",rel:"noopener noreferrer"}},[e._v("vite-plugin-remove-console"),v("OutboundLink")],1),e._v(" 插件,在打包构建时移除平台中所有的 "),v("code",[e._v("console.log")])]),e._v(" "),v("h2",{attrs:{id:"静态资源分类打包"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#静态资源分类打包"}},[e._v("#")]),e._v(" 静态资源分类打包")]),e._v(" "),v("p",[v("code",[e._v("vite")]),e._v(" 是基于 "),v("code",[e._v("esbuild")]),e._v(" 和 "),v("code",[e._v("rollup")]),e._v(" 构建的,在打包时如果不进行 "),v("code",[e._v("output")]),e._v(" 的配置,打包出来的效果如下图(这也是 "),v("code",[e._v("vite")]),e._v(" 默认打包出来的效果,可以看到所有文件都混在一起)")]),e._v(" "),v("p",[v("img",{attrs:{src:r(404),alt:"no-output"}})]),e._v(" "),v("p",[e._v("下图是我们配置 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/vite.config.ts#L63-67",target:"_blank",rel:"noopener noreferrer"}},[e._v("output"),v("OutboundLink")],1),e._v(" 后的效果,可以看到文件都进行了分类存放,这也方便我们查找文件")]),e._v(" "),v("p",[v("img",{attrs:{src:r(405),alt:"output"}})]),e._v(" "),v("div",{staticClass:"custom-block tip"},[v("p",{staticClass:"custom-block-title"},[e._v("相关推荐")]),e._v(" "),v("p",[v("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 潜在的循环依赖问题"),v("OutboundLink")],1)])]),e._v(" "),v("h2",{attrs:{id:"svg-压缩"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#svg-压缩"}},[e._v("#")]),e._v(" "),v("code",[e._v("svg")]),e._v(" 压缩")]),e._v(" "),v("p",[e._v("一般下载的 "),v("code",[e._v("svg")]),e._v(" 或者复制的 "),v("code",[e._v("svg")]),e._v(" 代码,里面存在一些无关紧要的元素,可以将其剔除,毫无影响地降低 "),v("code",[e._v("svg")]),e._v(" 大小"),v("br"),e._v("\n平台使用了 "),v("a",{attrs:{href:"https://www.npmjs.com/package/svgo",target:"_blank",rel:"noopener noreferrer"}},[e._v("svgo"),v("OutboundLink")],1),e._v(" 工具对所有 "),v("code",[e._v("svg")]),e._v(" 进行了压缩,您拉取平台代码时所有 "),v("code",[e._v("svg")]),e._v(" 都已经最简了哦。当然您会问自己新加的 "),v("code",[e._v("svg")]),e._v(" 如何精简呢,来到 "),v("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/package.json#L14",target:"_blank",rel:"noopener noreferrer"}},[e._v("main/package.json"),v("OutboundLink")],1),e._v(",可以看到平台默认使用 "),v("code",[e._v("svgo")]),e._v(" 工具对 "),v("code",[e._v("src/assets/svg")]),e._v(" 文件夹里的所有 "),v("code",[e._v("svg")]),e._v(" 进行压缩,这是可以改动的,只需要将 "),v("code",[e._v("-f")]),e._v(" 和 "),v("code",[e._v("-o")]),e._v(" 后的路径改为您需要压缩的 "),v("code",[e._v("svg")]),e._v(" 路径即可。温馨提示:只需要运行 "),v("code",[e._v("pnpm svgo")]),e._v(" 命令对 "),v("code",[e._v("svg")]),e._v(" 文件进行一次压缩即可")]),e._v(" "),v("div",{staticClass:"custom-block tip"},[v("p",{staticClass:"custom-block-title"},[e._v("推荐阅读")]),e._v(" "),v("ul",[v("li",[v("a",{attrs:{href:"https://cn.vuejs.org/guide/best-practices/performance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("性能优化"),v("OutboundLink")],1),e._v(" "),v("Badge",{attrs:{text:"vue文档"}})],1),e._v(" "),v("li",[v("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 中组件按组分块打包"),v("OutboundLink")],1),e._v(" "),v("Badge",{attrs:{text:"vue-router文档"}})],1)])])])}),[],!1,null,null,null);t.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/13.edf0dd27.js b/assets/js/13.edf0dd27.js
new file mode 100644
index 0000000..89f4148
--- /dev/null
+++ b/assets/js/13.edf0dd27.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{286:function(t,e,n){},436:function(t,e,n){"use strict";n(286)},468:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(436),n(8)),l=Object(p.a)(i,void 0,void 0,!1,null,"3f5e71b8",null);e.default=l.exports}}]);
\ No newline at end of file
diff --git a/assets/js/14.7e6d1c5f.js b/assets/js/14.7e6d1c5f.js
new file mode 100644
index 0000000..c674069
--- /dev/null
+++ b/assets/js/14.7e6d1c5f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{250:function(t,s,n){},289:function(t,s,n){"use strict";n(250)},438:function(t,s,n){"use strict";n.r(s);const e=["这里什么都没有。","我是谁?我在哪?","这是一个Four-Oh-Four.","看来我们的链接坏掉了~"];var i={methods:{getMsg:()=>e[Math.floor(Math.random()*e.length)]}},o=(n(289),n(8)),a=Object(o.a)(i,(function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"theme-container"},[s("div",{staticClass:"theme-vdoing-content"},[s("span",[this._v("404")]),this._v(" "),s("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),s("router-link",{attrs:{to:"/"}},[this._v("返回首页")])],1)])}),[],!1,null,"76f36478",null);s.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/15.28cff7c8.js b/assets/js/15.28cff7c8.js
new file mode 100644
index 0000000..63f30c7
--- /dev/null
+++ b/assets/js/15.28cff7c8.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{347:function(t,s,a){t.exports=a.p+"assets/img/logo.ed0fcf84.png"},348:function(t,s,a){t.exports=a.p+"assets/img/config-logo.3e10c5ac.jpg"},444:function(t,s,a){"use strict";a.r(s);var n=a(8),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"logo"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#logo"}},[t._v("#")]),t._v(" logo")]),t._v(" "),n("p",[t._v("下图左上角箭头所指处就是平台的 "),n("code",[t._v("logo")])]),t._v(" "),n("p",[n("img",{attrs:{src:a(347),alt:"logo"}})]),t._v(" "),n("p",[t._v("为了保持 "),n("code",[t._v("logo")]),t._v(" 的高保真,平台采用 "),n("code",[t._v("svg")]),t._v(" 作为 "),n("code",[t._v("logo")]),t._v(" 格式。自定义 "),n("code",[t._v("logo")]),t._v(" ,只需修改下图 "),n("code",[t._v("logo.svg")]),t._v(" 文件即可")]),t._v(" "),n("p",[n("img",{attrs:{src:a(348),alt:"config-logo"}})]),t._v(" "),n("p",[t._v("当然也可以自定义 "),n("code",[t._v("logo")]),t._v(" 格式。比如需要 "),n("code",[t._v("png")]),t._v(" 的图片,只需要把上图中 "),n("code",[t._v("logo.svg")]),t._v(" 换成所需的 "),n("code",[t._v("logo.png")]),t._v(" ,然后来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/layout/hooks/useNav.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("layout/hooks/useNav.ts"),n("OutboundLink")],1),t._v(" ,把 "),n("code",[t._v('"/logo.svg"')]),t._v(" 改成 "),n("code",[t._v('"/logo.png"')]),t._v(" 即可")]),t._v(" "),n("h2",{attrs:{id:"环境变量"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#环境变量"}},[t._v("#")]),t._v(" 环境变量")]),t._v(" "),n("h3",{attrs:{id:"配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),n("p",[t._v("一共 "),n("code",[t._v("四")]),t._v(" 个配置文件,都在平台根目录下,具体如下")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("├── .env # 基础环境变量配置文件(优先级最低)\n├── .env.development # 开发环境变量配置文件\n├── .env.production # 生产环境变量配置文件\n├── .env.staging # 预发布环境变量配置文件\n")])])]),n("h3",{attrs:{id:"具体配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#具体配置"}},[t._v("#")]),t._v(" 具体配置")]),t._v(" "),n("p",[t._v("平台内置 "),n("code",[t._v("六")]),t._v(" 个环境变量,具体如下")]),t._v(" "),n("div",{staticClass:"language-sh extra-class"},[n("pre",{pre:!0,attrs:{class:"language-sh"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 平台本地运行端口号")]),t._v("\nVITE_PORT "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8848")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 平台打包路径")]),t._v("\nVITE_PUBLIC_PATH "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" /\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v('# 平台路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数")')]),t._v("\nVITE_ROUTER_HISTORY "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hash"')]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 是否在打包时使用cdn替换本地库 替换 true 不替换 false")]),t._v("\nVITE_CDN "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件)")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认)")]),t._v("\nVITE_COMPRESSION "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"none"')]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置)")]),t._v("\nVITE_HIDE_HOME "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n")])])]),n("h3",{attrs:{id:"基础用法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://cn.vitejs.dev/guide/env-and-mode.html#env-files",target:"_blank",rel:"noopener noreferrer"}},[t._v(".env 文件"),n("OutboundLink")],1),t._v(" "),n("Badge",{attrs:{text:"vite文档"}})],1),t._v(" "),n("div",{staticClass:"language-Ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("VITE_PUBLIC_PATH")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"当前环境变量VITE_PUBLIC_PATH为:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("VITE_PUBLIC_PATH")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("知识点:如何在 .vue 或 .ts 文件中判断当前是开发环境还是生产环境?")]),t._v(" "),n("p",[t._v("打印 "),n("code",[t._v("process.env.NODE_ENV")]),t._v(",值为 "),n("code",[t._v("development")]),t._v(" 代表是开发环境,值为 "),n("code",[t._v("production")]),t._v(" 代表是生产环境")])]),t._v(" "),n("h3",{attrs:{id:"如何添加自定义配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置"}},[t._v("#")]),t._v(" 如何添加自定义配置")]),t._v(" "),n("p",[t._v("比如要在 "),n("code",[t._v(".env.production")]),t._v(" 文件添加自定义配置 "),n("code",[t._v("VITE_HANDSOME = true")]),t._v(",作为一种规范推荐使用 "),n("code",[t._v("VITE_")]),t._v(" 作为自定义配置前缀")]),t._v(" "),n("p",[t._v("① 在 "),n("code",[t._v(".env.production")]),t._v(" 中加入 "),n("code",[t._v("VITE_HANDSOME = true")]),t._v(",具体如下")]),t._v(" "),n("div",{staticClass:"language-sh extra-class"},[n("pre",{pre:!0,attrs:{class:"language-sh"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 自定义配置")]),t._v("\nVITE_HANDSOME "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n")])])]),n("p",[t._v("② 加入类型支持,在 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/types/global.d.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("interface ViteEnv"),n("OutboundLink")],1),t._v(" 里加上 "),n("code",[t._v("VITE_HANDSOME: boolean")]),t._v(",具体如下")]),t._v(" "),n("div",{staticClass:"language-Ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ViteEnv")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("VITE_HANDSOME")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("③ 设置默认值,在 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/build/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("build/index.ts"),n("OutboundLink")],1),t._v(" 文件的 "),n("code",[t._v("ret")]),t._v(" 变量上加上 "),n("code",[t._v("VITE_HANDSOME: true")]),t._v(",具体如下")]),t._v(" "),n("div",{staticClass:"language-Ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ret"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ViteEnv "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("VITE_HANDSOME")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"platform-config-json"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#platform-config-json"}},[t._v("#")]),t._v(" "),n("code",[t._v("platform-config.json")])]),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/public/platform-config.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("platform-config.json"),n("OutboundLink")],1),t._v(" 配置文件在任何环境下修改都可生效")]),t._v(" "),n("div",{staticClass:"language-json extra-class"},[n("pre",{pre:!0,attrs:{class:"language-json"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Version"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2.0.0"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 平台版本号")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Title"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RonnaAdmin"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 平台标题")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"FixedHeader"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否固定页头和标签页(true 内容区超出出现纵向滚动条 false 页头、标签页、内容区可纵向滚动)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"HiddenSideBar"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 隐藏菜单和页头,只显示标签页和内容区")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"MultiTagsCache"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否开启持久化标签 (会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"KeepAlive"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否开启组件缓存(此处不同于路由的 keepAlive,如果此处为 true 表示设置路由的 keepAlive 起效,反之设置 false 屏蔽平台整体的 keepAlive,即使路由设置了keepAlive 也不再起作用)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Locale"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"zh"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 默认国际化语言 (zh 中文、en 英文)(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Layout"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vertical"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 导航菜单模式 (vertical 左侧菜单模式、horizontal 顶部菜单模式、mix 综合菜单模式)(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Theme"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"light"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 主题模式(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"DarkMode"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否开启暗黑模式 (会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"OverallStyle"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"light"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 整体风格(浅色:light、深色:dark、自动:system)(会缓存)更多详情看 https://github.com/ronnaces/ronna-admin/commit/dd783136229da9e291b518df93227111f4216ad0#commitcomment-137027417")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Grey"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 灰色模式(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Weak"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 色弱模式(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"HideTabs"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否隐藏标签页(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"HideFooter"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否隐藏页脚(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"SidebarStatus"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// vertical左侧菜单模式模式下侧边栏状态(true 展开、false 收起)(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"EpThemeColor"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"#409EFF"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 主题色(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ShowLogo"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否显示logo(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ShowModel"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"smart"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 标签页风格(smart 灵动模式、card 卡片模式)(会缓存)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"MenuArrowIconNoTransition"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 菜单展开、收起图标是否开启动画,如遇菜单展开、收起卡顿设置成 true 即可(默认 false,开启动画)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"CachingAsyncRoutes"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 是否开启动态路由缓存本地的全局配置,默认 false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"TooltipEffect"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"light"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 可配置平台主体所有 el-tooltip 的 effect 属性,默认 light,不会影响业务代码")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ResponsiveStorageNameSpace"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responsive-"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 本地响应式存储的命名空间")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"MenuSearchHistory"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 菜单搜索历史的最大条目")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),n("p",[t._v("开发、生产环境修改都可生效,上面 "),n("code",[t._v("platform-config.json")]),t._v(" 文件标记 "),n("code",[t._v("会缓存")]),t._v(" 即配置会缓存在本地浏览器,应先清空浏览器缓存才能生效")])]),t._v(" "),n("h3",{attrs:{id:"基础用法-2"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基础用法-2"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),n("p",[t._v("平台将 "),n("code",[t._v("platform-config.json")]),t._v(" 中所有配置都已经注册到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/config/index.ts#L31",target:"_blank",rel:"noopener noreferrer"}},[t._v("$config"),n("OutboundLink")],1),t._v(" 这个全局属性对象上,应用内所有组件实例都可访问 "),n("a",{attrs:{href:"https://cn.vuejs.org/api/application.html#app-config-globalproperties",target:"_blank",rel:"noopener noreferrer"}},[t._v("globalproperties"),n("OutboundLink")],1)]),t._v(" "),n("h4",{attrs:{id:"vue-文件中使用-setup-语法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-setup-语法"}},[t._v("#")]),t._v(" "),n("code",[t._v(".vue")]),t._v(" 文件中使用("),n("code",[t._v("setup")]),t._v(" 语法)")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("setup")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" getCurrentInstance "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vue"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Version "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCurrentInstance")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("appContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("globalProperties"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nconsole"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Version:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Version"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("h4",{attrs:{id:"vue-文件中使用-非-setup-语法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#vue-文件中使用-非-setup-语法"}},[t._v("#")]),t._v(" "),n("code",[t._v(".vue")]),t._v(" 文件中使用(非 "),n("code",[t._v("setup")]),t._v(" 语法)")]),t._v(" "),n("div",{staticClass:"language-Vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("defineComponent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("computed")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("currentConfig")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$config"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("Version"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("h4",{attrs:{id:"ts-或-vue-中使用"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#ts-或-vue-中使用"}},[t._v("#")]),t._v(" "),n("code",[t._v(".ts")]),t._v(" 或 "),n("code",[t._v(".vue")]),t._v(" 中使用")]),t._v(" "),n("p",[t._v("具体实现代码位置 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/config/index.ts#L11",target:"_blank",rel:"noopener noreferrer"}},[t._v("config/index.ts"),n("OutboundLink")],1)]),t._v(" "),n("div",{staticClass:"language-Ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" getConfig "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/config"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Version:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConfig")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("Version"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h3",{attrs:{id:"如何添加自定义配置-2"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#如何添加自定义配置-2"}},[t._v("#")]),t._v(" 如何添加自定义配置")]),t._v(" "),n("p",[t._v("比如要添加的自定义配置为 "),n("code",[t._v("Handsome: true")])]),t._v(" "),n("p",[t._v("① 在 "),n("code",[t._v("platform-config.json")]),t._v(" 中加入 "),n("code",[t._v("Handsome: true")]),t._v(",具体如下")]),t._v(" "),n("div",{staticClass:"language-json extra-class"},[n("pre",{pre:!0,attrs:{class:"language-json"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Handsome"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 自定义配置")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("② 加入类型支持,在 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/types/global.d.ts#L84",target:"_blank",rel:"noopener noreferrer"}},[t._v("interface PlatformConfigs"),n("OutboundLink")],1),t._v(" 里加上 "),n("code",[t._v("Handsome?: boolean")]),t._v(",具体如下")]),t._v(" "),n("div",{staticClass:"language-Ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformConfigs")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Handsome"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 根据实际类型编写")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"package-json"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#package-json"}},[t._v("#")]),t._v(" "),n("code",[t._v("package.json")])]),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/package.json#L6-24",target:"_blank",rel:"noopener noreferrer"}},[t._v("package.json"),n("OutboundLink")],1),t._v(" 文件中的 "),n("code",[t._v("scripts")]),t._v(" 配置中存放平台的各种命令,具体如下")]),t._v(" "),n("div",{staticClass:"language-json extra-class"},[n("pre",{pre:!0,attrs:{class:"language-json"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dev"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NODE_OPTIONS=--max-old-space-size=4096 vite"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 启动平台")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"serve"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pnpm dev"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 启动平台(有人喜欢dev、有人喜欢serve)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"build"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 打包平台(rimraf 包的作用:以包的形式包装rm -rf命令,用来删除文件和文件夹的,不管文件夹是否为空,都可删除)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"build:staging"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rimraf dist && vite build --mode staging"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 打包平台(预发布环境)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"report"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rimraf dist && vite build"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 打包平台并生产平台包文件大小图形化分析")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"preview"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vite preview"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 预览平台,需先打包(无需安装live-server等工具,vite自带预览功能)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"preview:build"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pnpm build && vite preview"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 打包并预览平台(无需安装live-server等工具,vite自带预览功能)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"typecheck"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tsc --noEmit && vue-tsc --noEmit --skipLibCheck"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 使用vue-tsc工具对指定的.ts、.tsx、.vue文件进行类型校验")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"svgo"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"svgo -f . -r"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 压缩当前目录下的所有SVG文件,更多详情看 https://github.com/ronnaces/ronna-admin/commit/a114dbb4652d6316853d75ff127180fc07d07d2b#commitcomment-136451628")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"cloc"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 平台文件、语言分析")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"clean:cache"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rimraf .eslintcache && rimraf node_modules && pnpm install"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 删除node_modules、清空eslint缓存并重新安装平台依赖")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"lint:eslint"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eslint --cache --max-warnings 0 \\"{src,mock,build}/**/*.{vue,js,ts,tsx}\\" --fix"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// eslint修复")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"lint:prettier"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"prettier --write \\"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\\""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prettier格式化")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"lint:stylelint"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stylelint --cache --fix \\"**/*.{html,vue,css,scss}\\" --cache --cache-location node_modules/.cache/stylelint/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// stylelint格式化修复")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"lint"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 平台整体lint格式化并修复")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prepare"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"husky"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 自动生成husky(https://typicode.github.io/husky/#/)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v('"preinstall"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"npx only-allow pnpm"')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 只允许运行pnpm命令,如果您换成yarn、npm需要把这行删除(https://pnpm.io/zh/only-allow-pnpm)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/16.3994d8a1.js b/assets/js/16.3994d8a1.js
new file mode 100644
index 0000000..5fc38cc
--- /dev/null
+++ b/assets/js/16.3994d8a1.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{284:function(t,v,_){},434:function(t,v,_){"use strict";_(284)},465:function(t,v,_){"use strict";_.r(v);_(434);var d=_(8),e=Object(d.a)({},(function(){var t=this,v=t.$createElement,_=t._self._c||v;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("p",[t._v("非常感谢您选择了 "),_("code",[t._v("ronna-admin")]),t._v("。作者每天都在维护它,在保证其稳定的同时将 "),_("code",[t._v("95%")]),t._v(" 的依赖包保持最新。所以您不用因为升级依赖包而头疼,因为我们会把坑都踩了。当某些依赖包(如"),_("code",[t._v("vue")]),t._v("、"),_("code",[t._v("vite")]),t._v("、"),_("code",[t._v("element-plus")]),t._v("等)发布版本不久后,我们会跟进升级,让您在快速迭代的前端中时刻享受着最新依赖包带来的便利!")]),t._v(" "),_("p",[t._v("在代码、文档全部永久免费的基础上,我们还引入了更优质的可选服务,以满足您的各种需求!")]),t._v(" "),_("img",{attrs:{src:t.$withBase("/img/support/wx.png"),width:"180px",height:"180px"}}),t._v(" "),_("p",[t._v("从 "),_("code",[t._v("2018")]),t._v(" 年开始搞开源,一直到 "),_("code",[t._v("2024")]),t._v(" 年一直维护 "),_("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin",target:"_blank",rel:"noopener noreferrer"}},[t._v("ronna-admin"),_("OutboundLink")],1),t._v(" 组织中所有项目,把热爱一直持续下去,将开源真正当作一项事业来做,为用户提供更好的解决方案和服务,求各位老板的支持呀 ❤️!")]),t._v(" "),_("h2",{attrs:{id:"项目重构、项目升级"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#项目重构、项目升级"}},[t._v("#")]),t._v(" 项目重构、项目升级")]),t._v(" "),_("p",[t._v("价格:根据重构、升级难度进行合理定价"),_("br"),t._v("\n服务内容:旧版 "),_("code",[t._v("ronna-admin")]),t._v(" 升级最新版(通常需要一天包升级到位)、"),_("code",[t._v("vue2")]),t._v(" 项目升级 "),_("code",[t._v("vue3")]),t._v("、自己项目某些依赖包想升级最新或升级时遇到瓶颈等"),_("br"),t._v("\n如何获得服务:加最上方作者微信备注 "),_("code",[t._v("重构升级")]),t._v(" 即可")]),t._v(" "),_("h2",{attrs:{id:"技术指导、远程服务、面试指导、自定义服务"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#技术指导、远程服务、面试指导、自定义服务"}},[t._v("#")]),t._v(" 技术指导、远程服务、面试指导、自定义服务")]),t._v(" "),_("p",[t._v("价格:根据问题难度进行合理定价,按次收费"),_("br"),t._v("\n服务内容:各种前端问题解答、修复等。如果您还有别的需求尽管提,都会合理定价,包您满意"),_("br"),t._v("\n如何获得服务:加最上方作者微信备注 "),_("code",[t._v("技术指导")]),t._v(" 即可")]),t._v(" "),_("h2",{attrs:{id:"页面定制开发-软件开发、项目外包"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#页面定制开发-软件开发、项目外包"}},[t._v("#")]),t._v(" 页面定制开发(软件开发、项目外包)")]),t._v(" "),_("p",[t._v("价格:根据页面数量、每页难度、开发周期进行合理定价"),_("br"),t._v("\n服务内容:软件开发过程中保证 "),_("code",[t._v("页面高还原度")]),t._v("、"),_("code",[t._v("代码高质量")]),t._v("、"),_("code",[t._v("全方位多次测试")]),t._v(" 。软件交付完毕后,不论您的软件工程量是大是小,我们都会提供 "),_("code",[t._v("一年免费技术支持")]),t._v("(免费小修、小改等),绝不辜负您选择了我们!"),_("br"),t._v("\n如何获得服务:加最上方作者微信备注 "),_("code",[t._v("软件开发")]),t._v(" 即可")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[_("strong",[t._v("开发范围")])]),t._v(" "),_("th",[_("strong",[t._v("范围种类")])])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("网站")]),t._v(" "),_("td",[t._v("后台系统、可视化大屏、企业宣传页、活动推广页等各种只要能在浏览器查看的都能开发")])]),t._v(" "),_("tr",[_("td",[_("code",[t._v("h5")]),t._v("页面")]),t._v(" "),_("td",[t._v("移动端网站、广告推广、电子商务等")])]),t._v(" "),_("tr",[_("td",[t._v("小程序")]),t._v(" "),_("td",[t._v("微信、支付宝、抖音、快手、京东小程序等")])]),t._v(" "),_("tr",[_("td",[t._v("移动应用程序")]),t._v(" "),_("td",[t._v("可安装到安卓"),_("code",[t._v("Android")]),t._v("和苹果"),_("code",[t._v("iOS")]),t._v("系统的手机"),_("code",[t._v("App")]),t._v("软件")])]),t._v(" "),_("tr",[_("td",[t._v("桌面应用程序")]),t._v(" "),_("td",[t._v("可安装到桌面操作系统(如"),_("code",[t._v("Windows")]),t._v("、"),_("code",[t._v("MacOS")]),t._v("、"),_("code",[t._v("Linux")]),t._v(")上的软件,可直接在电脑上运行")])])])]),t._v(" "),_("h2",{attrs:{id:"企业赞助"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#企业赞助"}},[t._v("#")]),t._v(" 企业赞助")]),t._v(" "),_("p",[t._v("成为赞助商即可获得以下服务")]),t._v(" "),_("ol",[_("li",[t._v("将贵公司 "),_("code",[t._v("LOGO")]),t._v(" 同时展示在 "),_("a",{attrs:{href:"https://admin.ronnaces.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("ronna-admin 预览官网"),_("OutboundLink")],1),t._v(" 、"),_("a",{attrs:{href:"https://ronnaces.github.io/ronna-admin-doc/",target:"_blank",rel:"noopener noreferrer"}},[t._v("ronna-admin 文档官网"),_("OutboundLink")],1),t._v(" 以及 "),_("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub 仓库 README"),_("OutboundLink")],1),t._v(" 页面的明显位置。")])]),t._v(" "),_("p",[_("code",[t._v("ronna-admin")]),t._v(" 文档官网 "),_("code",[t._v("日均约3万")]),t._v(" 浏览量,更多详情请加最上方微信备注 "),_("code",[t._v("企业赞助")]),t._v(" 进行详聊。")]),t._v(" "),_("h2",{attrs:{id:"个人赞助"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#个人赞助"}},[t._v("#")]),t._v(" 个人赞助")]),t._v(" "),_("p",[_("a",{attrs:{href:"https://github.com/ronnaces",target:"_blank",rel:"noopener noreferrer"}},[t._v("ronnaces"),_("OutboundLink")],1),t._v(" 组织一直坚持代码、文档教程全部永久免费开源,如果 "),_("code",[t._v("ronna-admin")]),t._v(" 帮助到了您,可以选择任意金额扫下方二维码进行赞助。赞助金额大于 "),_("code",[t._v("10")]),t._v(" 元时,可在赞助时备注您的 "),_("code",[t._v("Github")]),t._v(" 或 "),_("code",[t._v("github")]),t._v(" 或某个博客地址,我们会将其加入下方赞助名单中。您的赞助也会推动我们开发更多优质免费代码、补充更多优质免费文档")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",{staticStyle:{"text-align":"center"}},[t._v("微信赞赏")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("微信")]),t._v(" "),_("th",{staticStyle:{"text-align":"center"}},[t._v("支付宝")])])]),t._v(" "),_("tbody",[_("tr",[_("td",{staticStyle:{"text-align":"center"}},[_("img",{attrs:{src:t.$withBase("/img/support/wechat.png"),alt:"赞赏码",width:"180"}})]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[_("img",{attrs:{src:t.$withBase("/img/support/wechatpay.png"),alt:"Wechat QRcode",width:"180"}})]),t._v(" "),_("td",{staticStyle:{"text-align":"center"}},[_("img",{attrs:{src:t.$withBase("/img/support/alipay.png"),alt:"Alipay QRcode",width:"180"}})])])])]),t._v(" "),_("h3",{attrs:{id:"赞助名单"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#赞助名单"}},[t._v("#")]),t._v(" 赞助名单")]),t._v(" "),_("p",[t._v("非常感谢您们的赞助!"),_("br"),t._v("\n如果链接备注错了的话 😳,请加我微信联系哈"),_("br"),t._v("\n下面的昵称备注是我根据能获得的最大信息量推测的,称呼的不对,别见怪哈 😊"),_("br"),t._v("\n最后就是兄弟们进群只需按照上面备注的价格哈,不用多转!!!备注的价格,已经足够把贴心服务做好了哈 ❤️")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[_("strong",[t._v("赞助人")])]),t._v(" "),_("th",[_("strong",[t._v("金额")])]),t._v(" "),_("th",[_("strong",[t._v("赞助人备注")])]),t._v(" "),_("th",[_("strong",[t._v("作者的回复")])])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("*Alate")]),t._v(" "),_("td"),t._v(" "),_("td",[t._v("感谢你这样的开源人贡献~辛苦了!中国开源不容易。也希望你可以找到盈利模式可以健康持续的运营下去哈~嗯 加油!另外注意身体健康!适当运动。注意久坐就溜达下哈。尽量早睡哈~健康第一~不耽误你了~")]),t._v(" "),_("td",[t._v("短短几句, 我竟不知如何回答了,非常感谢你们,还有那些默默支持的,非常感谢!")])]),t._v(" "),_("tr",[_("td",[t._v("*呼车")]),t._v(" "),_("td",[_("code",[t._v("300")])]),t._v(" "),_("td",[t._v("花点小钱,省点时间")]),t._v(" "),_("td",[t._v("感谢信任,谢谢我豪爽的大哥 ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("MUCv")]),t._v(" "),_("td",[_("code",[t._v("298")])]),t._v(" "),_("td",[t._v("大佬你好,我是去年毕业的应届生,刚入行程序员不到一年,我是学 C++ 的,刚才公司摸鱼无意间在 B 站看到了大佬的视频,看了视频评论区,然后点开看了下 github 和 ronna-admin 文档,很受感动,虽然我不问项目和前端问题,但就想要买个大佬的服务支持下大佬,在国内这样的开源环境下,坚持在做对的事情")]),t._v(" "),_("td",[t._v("非常感谢哥们的支持,称呼我作者就行哈,嘿嘿。坚持在做热爱的事情,坚持在做对的事情,一起加油! ✊ ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("**jcx")]),t._v(" "),_("td",[_("code",[t._v("200")])]),t._v(" "),_("td",[t._v("全职开源不易,多的"),_("code",[t._v("200")]),t._v("是个人赞助,愿不忘初心,加油!")]),t._v(" "),_("td",[t._v("不忘初心!!!非常感谢哥们 ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("**jb")]),t._v(" "),_("td",[_("code",[t._v("188")])]),t._v(" "),_("td",[t._v("希望不忘初心,始终开源下去 👏")]),t._v(" "),_("td",[t._v("好的,大哥。多的不说了哈,一起看实际行动 ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("**豪c")]),t._v(" "),_("td",[_("code",[t._v("188")])]),t._v(" "),_("td",[t._v("加油")]),t._v(" "),_("td",[t._v("一起加油,豪哥 ✊ ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("*贝a")]),t._v(" "),_("td",[_("code",[t._v("100")])]),t._v(" "),_("td"),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("Jung")]),t._v(" "),_("td",[_("code",[t._v("100")])]),t._v(" "),_("td",[t._v("好东西要支持,能力范围之内,不要伤了作者一片至诚的心,哈哈哈哈哈")]),t._v(" "),_("td",[t._v("嘿嘿,非常感谢哥们支持哈 ❤️")])]),t._v(" "),_("tr",[_("td",[t._v("S*hb")]),t._v(" "),_("td",[_("code",[t._v("100")])]),t._v(" "),_("td",[t._v("开源不易,加油")]),t._v(" "),_("td",[t._v("非常感谢哥们,一起加油 ✊")])]),t._v(" "),_("tr",[_("td",[t._v("*凡x")]),t._v(" "),_("td",[_("code",[t._v("99")])]),t._v(" "),_("td",[t._v("加油加油")]),t._v(" "),_("td",[t._v("非常感谢哥们,一起加油 ✊")])]),t._v(" "),_("tr",[_("td",[t._v("*刚q")]),t._v(" "),_("td",[_("code",[t._v("66.66")])]),t._v(" "),_("td",[t._v("精简版终于更新到"),_("code",[t._v("5")]),t._v("版本了,来支持下")]),t._v(" "),_("td",[t._v("非常感谢哥们。"),_("code",[t._v("emm")]),t._v(",深夜还不睡觉,我怀疑你一直盯着我呢,哈哈")])]),t._v(" "),_("tr",[_("td",[t._v("*不a*")]),t._v(" "),_("td",[_("code",[t._v("66.60")])]),t._v(" "),_("td",[t._v("多谢指导")]),t._v(" "),_("td",[t._v("客气啦 😉")])]),t._v(" "),_("tr",[_("td",[t._v("*lang*")]),t._v(" "),_("td",[_("code",[t._v("30")])]),t._v(" "),_("td"),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("*华c")]),t._v(" "),_("td",[_("code",[t._v("23")])]),t._v(" "),_("td"),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("*蓝h")]),t._v(" "),_("td",[_("code",[t._v("20")])]),t._v(" "),_("td",[t._v("欢庆精简版同步发布")]),t._v(" "),_("td",[t._v("嘿嘿,终于发布咯")])]),t._v(" "),_("tr",[_("td",[t._v("f*dj")]),t._v(" "),_("td",[_("code",[t._v("15")])]),t._v(" "),_("td"),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("*羽k")]),t._v(" "),_("td",[_("code",[t._v("12")])]),t._v(" "),_("td",[_("code",[t._v("ronna-admin")])]),t._v(" "),_("td",[t._v("媒体查询+视窗单位")])]),t._v(" "),_("tr",[_("td",[t._v("**明q")]),t._v(" "),_("td",[_("code",[t._v("10")])]),t._v(" "),_("td"),t._v(" "),_("td")])])]),t._v(" "),_("p",[t._v("赞助金额高达 "),_("code",[t._v("100")]),t._v(" 时,请加最上方微信,交个朋友 🤝")]),t._v(" "),_("img",{attrs:{src:t.$withBase("/img/polite.jpg"),width:"200px",height:"220px"}})])}),[],!1,null,"2fa38447",null);v.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/17.a79684d7.js b/assets/js/17.a79684d7.js
new file mode 100644
index 0000000..9de2144
--- /dev/null
+++ b/assets/js/17.a79684d7.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{285:function(t,e,s){},435:function(t,e,s){"use strict";s(285)},467:function(t,e,s){"use strict";s.r(e);s(435);var n=s(8),a=Object(n.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",{attrs:{align:"center"}},[s("a",{staticClass:"become-sponsor",attrs:{href:"/pages/1b12ed/"}},[t._v("支持这个项目")])]),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://github.com/ronnaces/ronna-admin/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("Issue"),s("OutboundLink")],1),t._v("。\n你也可以在Issue查看别人提的问题和给出解决方案。")]),t._v(" "),s("p",[t._v("或者加入我们的交流群:")]),t._v(" "),s("table",[s("tbody",[s("tr",[s("td",{attrs:{align:"center",valign:"middle"}},[s("img",{staticClass:"no-zoom",staticStyle:{width:"300px",margin:"10px"},attrs:{src:t.$withBase("/img/qrcode/QQ.png"),alt:"群号: 891207826"}})])])])])])}),[],!1,null,null,null);e.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/18.3402aebc.js b/assets/js/18.3402aebc.js
new file mode 100644
index 0000000..c83dcd7
--- /dev/null
+++ b/assets/js/18.3402aebc.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{335:function(a,t,e){a.exports=e.p+"assets/img/nodejs.618d72d2.jpg"},440:function(a,t,e){"use strict";e.r(t);var s=e(8),r=Object(s.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h2",{attrs:{id:"开发环境"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开发环境"}},[a._v("#")]),a._v(" 开发环境")]),a._v(" "),s("p",[a._v("从 "),s("code",[a._v("ronna-admin v2.0.0")]),a._v(" 版本后,规定 "),s("code",[a._v("node")]),a._v(" 版本应不小于 "),s("code",[a._v("18.18.0")]),a._v(" (推荐优先安装长期维护"),s("code",[a._v("LTS")]),a._v("版,如下图),"),s("code",[a._v("pnpm")]),a._v(" 版本应不小于 "),s("code",[a._v("8.6.10")])]),a._v(" "),s("p",[s("a",{attrs:{href:"https://nodejs.org/en",target:"_blank",rel:"noopener noreferrer"}},[a._v("nodejs 官网"),s("OutboundLink")],1),a._v(" 当然也可以安装 "),s("a",{attrs:{href:"https://raw.githubusercontent.com/ronnaces/ronna-admin/main/.nvmrc",target:"_blank",rel:"noopener noreferrer"}},[a._v(".nvmrc"),s("OutboundLink")],1),a._v(" 推荐的 "),s("code",[a._v("node")]),a._v(" 版本")]),a._v(" "),s("p",[s("img",{attrs:{src:e(335),alt:"nodejs"}})]),a._v(" "),s("p",[a._v("如果您还没安装 "),s("code",[a._v("pnpm")]),a._v(",请执行下面命令进行安装("),s("code",[a._v("mac")]),a._v(" 用户遇到安装报错请在命令前加上 "),s("code",[a._v("sudo")]),a._v(")")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("npm install -g pnpm\n")])])]),s("p",[a._v("如果您需要安装多个 "),s("code",[a._v("node")]),a._v(" 版本环境,请参考 "),s("RouterLink",{attrs:{to:"/pages/FAQ/#平台要求-node-版本应不小于-18-18-0-、pnpm-版本应不小于-8-6-10-但是实际开发有的项目需要比这些低的版本怎么解决呢"}},[a._v("Node.js 版本管理工具")])],1),a._v(" "),s("p",[a._v("如果您觉得安装平台依赖慢,请参考 "),s("RouterLink",{attrs:{to:"/pages/FAQ/#安装依赖慢-如何解决"}},[a._v("npmmirror")])],1),a._v(" "),s("h2",{attrs:{id:"ide"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ide"}},[a._v("#")]),a._v(" "),s("code",[a._v("IDE")])]),a._v(" "),s("p",[a._v("如果您使用的 "),s("code",[a._v("IDE")]),a._v(" 是 "),s("a",{attrs:{href:"https://code.visualstudio.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("vscode"),s("OutboundLink")],1),a._v(" (推荐),"),s("RouterLink",{attrs:{to:"/pages/vscode/#extensions-json"}},[a._v("请点击这里并安装推荐的插件")]),a._v(",可提高开发效率")],1),a._v(" "),s("h2",{attrs:{id:"拉取代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#拉取代码"}},[a._v("#")]),a._v(" 拉取代码")]),a._v(" "),s("h3",{attrs:{id:"从-github-上拉取"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#从-github-上拉取"}},[a._v("#")]),a._v(" 从 "),s("code",[a._v("GitHub")]),a._v(" 上拉取")]),a._v(" "),s("h4",{attrs:{id:"完整版前端代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#完整版前端代码"}},[a._v("#")]),a._v(" 完整版前端代码")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("git clone https://github.com/ronnaces/ronna-admin.git\n")])])]),s("h2",{attrs:{id:"本地开发"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#本地开发"}},[a._v("#")]),a._v(" 本地开发")]),a._v(" "),s("h4",{attrs:{id:"安装依赖"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装依赖"}},[a._v("#")]),a._v(" 安装依赖")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("pnpm install\n")])])]),s("h4",{attrs:{id:"启动平台"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#启动平台"}},[a._v("#")]),a._v(" 启动平台")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("pnpm dev\n")])])]),s("h4",{attrs:{id:"项目打包"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#项目打包"}},[a._v("#")]),a._v(" 项目打包")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("pnpm build\n")])])]),s("h4",{attrs:{id:"安装一个包"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装一个包"}},[a._v("#")]),a._v(" 安装一个包")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("pnpm add 包名\n")])])]),s("h4",{attrs:{id:"卸载一个包"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#卸载一个包"}},[a._v("#")]),a._v(" 卸载一个包")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("pnpm remove 包名\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/19.ca4884db.js b/assets/js/19.ca4884db.js
new file mode 100644
index 0000000..4b74131
--- /dev/null
+++ b/assets/js/19.ca4884db.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{363:function(t,s,a){t.exports=a.p+"assets/img/type.bd4e388d.jpg"},446:function(t,s,a){"use strict";a.r(s);var n=a(8),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"mock"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#mock"}},[t._v("#")]),t._v(" Mock")]),t._v(" "),n("p",[t._v("平台使用 "),n("a",{attrs:{href:"https://github.com/condorheroblog/vite-plugin-fake-server",target:"_blank",rel:"noopener noreferrer"}},[t._v("vite-plugin-fake-server"),n("OutboundLink")],1),t._v(" 插件并集成了 "),n("a",{attrs:{href:"https://www.npmjs.com/package/@faker-js/faker",target:"_blank",rel:"noopener noreferrer"}},[t._v("@faker-js/faker"),n("OutboundLink")],1),t._v(",支持常用的 "),n("code",[t._v("post")]),t._v("、"),n("code",[t._v("get")]),t._v(" 请求方式,仅用于本地开发,生产环境请务必删除 "),n("code",[t._v("mock")])]),t._v(" "),n("h3",{attrs:{id:"基础用法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基础用法"}},[t._v("#")]),t._v(" 基础用法")]),t._v(" "),n("p",[t._v("① 来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/mock",target:"_blank",rel:"noopener noreferrer"}},[t._v("mock"),n("OutboundLink")],1),t._v(" 文件存放目录,比如添加 "),n("code",[t._v("login")]),t._v(" 接口,采用 "),n("code",[t._v("post")]),t._v(" 请求,参考下面代码。")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" MockMethod "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vite-plugin-mock"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n method"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("response")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" body "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n success"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" MockMethod"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("p",[t._v("② 上面我们添加了 "),n("code",[t._v("login")]),t._v(" 接口,接着来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/src/api",target:"_blank",rel:"noopener noreferrer"}},[t._v("api"),n("OutboundLink")],1),t._v(" 目录,比如添加 "),n("code",[t._v("user.ts")]),t._v(" 文件,参考下面代码")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 这里定义返回值类型,使接口拥有良好的类型推导")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserResult")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 是否请求成功 */")]),t._v("\n success"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 用户名 */")]),t._v("\n username"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 当前登陆用户的角色 */")]),t._v("\n roles"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Array")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** `token` */")]),t._v("\n accessToken"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 用于调用刷新`accessToken`的接口时所需的`token` */")]),t._v("\n refreshToken"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */")]),t._v("\n expires"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 登录接口 */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getLogin")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("UserResult"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("p",[t._v("③ 上面导出了 "),n("code",[t._v("getLogin")]),t._v(" 接口,接下来我们来到需要使用这个接口的地方导入,参考下面代码")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("script setup lang"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" getLogin "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/api/user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("onLogin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLogin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" username"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin123"')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("success"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("script"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("template"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("el"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("button "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("click")])]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"onLogin"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("点击登录"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("el"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("button"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("template"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])])]),t._v(" "),n("p",[t._v("您可以注意到我们在上面 "),n("code",[t._v("②")]),t._v(" 步骤中定义了接口返回值类型 "),n("code",[t._v("UserResult")]),t._v(",在使用时就会获得良好的类型推导,如下图")]),t._v(" "),n("p",[n("img",{attrs:{src:a(363),alt:"type"}})]),t._v(" "),n("h3",{attrs:{id:"如何快速删除-mock"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#如何快速删除-mock"}},[t._v("#")]),t._v(" 如何快速删除 "),n("code",[t._v("mock")])]),t._v(" "),n("p",[t._v("来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/build/plugins.ts#L6",target:"_blank",rel:"noopener noreferrer"}},[t._v("build/plugins.ts"),n("OutboundLink")],1),t._v(" 文件,将 "),n("code",[t._v('import { viteMockServe } from "vite-plugin-mock";')]),t._v(" 注释,最后把 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/build/plugins.ts#L43-52",target:"_blank",rel:"noopener noreferrer"}},[t._v("这里选中"),n("OutboundLink")],1),t._v(" 的都注释即可")]),t._v(" "),n("h2",{attrs:{id:"axios"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#axios"}},[t._v("#")]),t._v(" Axios")]),t._v(" "),n("h4",{attrs:{id:"中文文档"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#中文文档"}},[t._v("#")]),t._v(" 中文文档")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://www.axios-http.cn/",target:"_blank",rel:"noopener noreferrer"}},[t._v("点击查看中文文档"),n("OutboundLink")],1)]),t._v(" "),n("h4",{attrs:{id:"基本请求方式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基本请求方式"}},[t._v("#")]),t._v(" 基本请求方式")]),t._v(" "),n("p",[t._v("平台封装了 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/src/utils/http",target:"_blank",rel:"noopener noreferrer"}},[t._v("axios"),n("OutboundLink")],1),t._v(",支持的请求方式请看 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/types.d.ts#L14",target:"_blank",rel:"noopener noreferrer"}},[t._v("具体参考"),n("OutboundLink")],1),t._v(",下面举例常用的四种请求方式")]),t._v(" "),n("h5",{attrs:{id:"get-请求"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#get-请求"}},[t._v("#")]),t._v(" "),n("code",[t._v("get")]),t._v(" 请求")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// params传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"get"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" params "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// url拼接传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"get"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx?message="')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("h5",{attrs:{id:"post-请求"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#post-请求"}},[t._v("#")]),t._v(" "),n("code",[t._v("post")]),t._v(" 请求")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// params传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" params "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// data传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("h5",{attrs:{id:"delete-请求"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#delete-请求"}},[t._v("#")]),t._v(" "),n("code",[t._v("delete")]),t._v(" 请求")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// params传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"delete"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" params "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// data传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"delete"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("h5",{attrs:{id:"put-请求"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#put-请求"}},[t._v("#")]),t._v(" "),n("code",[t._v("put")]),t._v(" 请求")]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("点击查看")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// params传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"put"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" params "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// data传参")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("textRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"put"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/xxx"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("h5",{attrs:{id:"http-request-传参解析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#http-request-传参解析"}},[t._v("#")]),t._v(" "),n("code",[t._v("http.request")]),t._v(" 传参解析")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L149",target:"_blank",rel:"noopener noreferrer"}},[t._v("http.request 源码"),n("OutboundLink")],1),t._v(",参数解析如下")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[n("strong",[t._v("参数属性")])]),t._v(" "),n("th",[n("strong",[t._v("说明")])]),t._v(" "),n("th",[n("strong",[t._v("类型")])])])]),t._v(" "),n("tbody",[n("tr",[n("td",[n("code",[t._v("method")])]),t._v(" "),n("td",[t._v("请求方式")]),t._v(" "),n("td",[n("code",[t._v("RequestMethods")])])]),t._v(" "),n("tr",[n("td",[n("code",[t._v("url")])]),t._v(" "),n("td",[t._v("请求地址")]),t._v(" "),n("td",[n("code",[t._v("string")])])]),t._v(" "),n("tr",[n("td",[n("code",[t._v("param")])]),t._v(" "),n("td",[t._v("请求参数")]),t._v(" "),n("td",[n("code",[t._v("AxiosRequestConfig")])])]),t._v(" "),n("tr",[n("td",[n("code",[t._v("axiosConfig")])]),t._v(" "),n("td",[t._v("自定义"),n("code",[t._v("axios")]),t._v("配置")]),t._v(" "),n("td",[n("code",[t._v("PureHttpRequestConfig")])])])])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),n("p",[t._v("当然平台不仅提供了 "),n("code",[t._v("http.request")]),t._v(" 方法让您发送请求,还提供两种额外的请求方式 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L176",target:"_blank",rel:"noopener noreferrer"}},[t._v("http.post"),n("OutboundLink")],1),t._v("、"),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L185",target:"_blank",rel:"noopener noreferrer"}},[t._v("http.get"),n("OutboundLink")],1),t._v(",当然这两种也是基于 "),n("code",[t._v("http.request")]),t._v(" 封装的,也会走请求拦截和响应拦截,如果您需要脱离平台封装的请求,可以直接使用 "),n("code",[t._v("axios")]),t._v(",类似参考 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/views/welcome/index.vue#L66",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/views/welcome/index.vue"),n("OutboundLink")],1)])]),t._v(" "),n("h4",{attrs:{id:"如何与后台联调"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#如何与后台联调"}},[t._v("#")]),t._v(" 如何与后台联调")]),t._v(" "),n("h5",{attrs:{id:"跨域与解决办法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#跨域与解决办法"}},[t._v("#")]),t._v(" 跨域与解决办法")]),t._v(" "),n("h6",{attrs:{id:"什么是跨域"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#什么是跨域"}},[t._v("#")]),t._v(" 什么是跨域")]),t._v(" "),n("p",[t._v("跨域本质是浏览器基于同源策略的一种安全手段。同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能。当协议(protocol)、主机(host)、端口(port)其中一项不相同的时候就会产生跨域。跨域只产生在浏览器,这也是为什么您用 "),n("code",[t._v("postman")]),t._v(" 请求接口时不会有跨域问题的原因")]),t._v(" "),n("h6",{attrs:{id:"解决办法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#解决办法"}},[t._v("#")]),t._v(" 解决办法")]),t._v(" "),n("p",[t._v("① 本地开发的话,我们来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/vite.config.ts#L46",target:"_blank",rel:"noopener noreferrer"}},[t._v("vite.config.ts"),n("OutboundLink")],1),t._v(",参考下面代码配置本地跨域代理即可")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[t._v("proxy"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/api"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 这里填写后端地址")]),t._v("\n target"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:3000"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n changeOrigin"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("rewrite")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("replace")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token regex"}},[n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("^\\/api")]),n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("② 配置好上面的跨域代理后,来到 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/src/api",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/api"),n("OutboundLink")],1),t._v(" 目录,这里我们先新建一个 "),n("code",[t._v("utils.ts")]),t._v(" 文件用来配置环境,参考下面代码")]),t._v(" "),n("p",[t._v("注意:这里又分两种写法")]),t._v(" "),n("p",[t._v("第一种(也是最常用的一种,满足大多数场景,首选这种写法哦):比如后端使用 "),n("code",[t._v("spring cloud")]),t._v(" 微服务架构,不同服务可能会部署在不同机器上,这时候前端必定产生跨域,推荐部署前端项目首选 "),n("a",{attrs:{href:"https://www.nginx.com/resources/wiki/",target:"_blank",rel:"noopener noreferrer"}},[t._v("nginx"),n("OutboundLink")],1),t._v(",可以利用 "),n("code",[t._v("nginx")]),t._v(" 的代理转发功能来解决跨域问题")]),t._v(" "),n("p",[t._v("utils.ts")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("baseUrlApi")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/api/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("第二种:前端打包直接丢给后端,放到后端项目里一起部署,协议、主机、端口都相同了,就没有跨域问题")]),t._v(" "),n("p",[t._v("utils.ts")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("baseUrlApi")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v("\n process"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NODE_ENV")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"development"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/api/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("http://127.0.0.1:3000/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("③ 写完上面的 "),n("code",[t._v("utils.ts")]),t._v(" 后,继续在 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/tree/main/src/api",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/api"),n("OutboundLink")],1),t._v(" 目录,我们再建一个 "),n("code",[t._v("user.ts")]),t._v(" 文件,导出这个接口,供页面调用,参考下面代码")]),t._v(" "),n("p",[t._v("user.ts")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" baseUrlApi "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./utils"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 登录 */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getLogin")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("baseUrlApi")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("④ 上面都完成后,我们在需要调用该接口的地方调用即可,参考 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/store/modules/user.ts#L33",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/store/modules/user.ts"),n("OutboundLink")],1)]),t._v(" "),n("h5",{attrs:{id:"多个后端地址如何联调"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#多个后端地址如何联调"}},[t._v("#")]),t._v(" 多个后端地址如何联调")]),t._v(" "),n("p",[t._v("大致步骤和上面差不多,这里我们就简单写一下,具体对比上面的就行")]),t._v(" "),n("p",[t._v("① 在 "),n("code",[t._v("vite.config.ts")]),t._v(" 写入下面代码")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[t._v("proxy"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 第一个代理后端地址")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/api"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:3000"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n changeOrigin"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("rewrite")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("replace")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token regex"}},[n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("^\\/api")]),n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 第二个代理后端地址")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/otherApi"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:3290"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n changeOrigin"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("rewrite")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("replace")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token regex"}},[n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("^\\/otherApi")]),n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// websocket地址(知识点:wss只能在https安全协议下使用)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// "/wsApi": {')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// target: "ws://localhost:3000",')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ws: true,")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// },")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...依此类推,有几个后端地址就写几个后端地址")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("② 在 "),n("code",[t._v("utils.ts")]),t._v(" 里我们采用第一种写法,参考下面代码")]),t._v(" "),n("p",[t._v("utils.ts")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 第一个代理后端地址")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("baseUrlApi")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/api/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 第二个代理后端地址")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("baseUrlOtherApi")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/otherApi/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("③ 第一个代理后端地址上面建的是 "),n("code",[t._v("user.ts")]),t._v(" 文件,那么第二个代理后端地址我们就建个 "),n("code",[t._v("other.ts")]),t._v(" 文件吧,参考下面代码")]),t._v(" "),n("p",[t._v("other.ts")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" baseUrlOtherApi "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./utils"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 该接口采用 http://127.0.0.1:3290 后端地址 */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getOther")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"get"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("baseUrlOtherApi")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"other"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("最后,需要在哪里调用,引入使用即可")]),t._v(" "),n("h4",{attrs:{id:"如何声明接口返回值类型"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#如何声明接口返回值类型"}},[t._v("#")]),t._v(" 如何声明接口返回值类型")]),t._v(" "),n("p",[t._v("可以看到上面的写法 "),n("code",[t._v("http.request")]),t._v(" 后面跟的都是 "),n("code",[t._v("any")]),t._v(",这很不友好,参考下面友好类型写法即可")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" baseUrlApi "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./utils"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 定义 login 接口返回值类型为 UserResult")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserResult")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 是否请求成功 */")]),t._v("\n success"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 用户名 */")]),t._v("\n username"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 当前登陆用户的角色 */")]),t._v("\n roles"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Array")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** `token` */")]),t._v("\n accessToken"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 用于调用刷新`accessToken`的接口时所需的`token` */")]),t._v("\n refreshToken"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */")]),t._v("\n expires"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** 登录 */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getLogin")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("UserResult"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("baseUrlApi")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"平台封装的请求可以设置额外的-axios-配置吗"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#平台封装的请求可以设置额外的-axios-配置吗"}},[t._v("#")]),t._v(" 平台封装的请求可以设置额外的 axios 配置吗")]),t._v(" "),n("p",[t._v("当然可以。"),n("a",{attrs:{href:"#http-request-%E4%BC%A0%E5%8F%82%E8%A7%A3%E6%9E%90"}},[t._v("点击查看这里")]),t._v(",可以看到自定义 "),n("code",[t._v("axios")]),t._v(" 配置中 "),n("code",[t._v("axiosConfig")]),t._v(" 作为最后一个参数")]),t._v(" "),n("div",{staticClass:"language-ts extra-class"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" http "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@/utils/http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" baseUrlApi "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./utils"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("testRequest")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" http"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("request")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"post"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("baseUrlApi")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 自定义的axios配置在下面对象填写即可")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n headers"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"Content-Type"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/x-www-form-urlencoded"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"jwt-token-内置无感刷新-token-解决方案"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#jwt-token-内置无感刷新-token-解决方案"}},[t._v("#")]),t._v(" "),n("code",[t._v("JWT Token")]),t._v("(内置无感刷新 "),n("code",[t._v("token")]),t._v(" 解决方案)")]),t._v(" "),n("p",[t._v("实现原理:后端返回两个 "),n("code",[t._v("token")]),t._v("(一个用来请求,一个用来刷新)和过期时间,前端将其进行本地存储,每当接口请求时,把本地存储的过期时间与本地当前时间对比,如果 "),n("code",[t._v("token")]),t._v(" 过期就把当前请求暂存,然后去请求刷新 "),n("code",[t._v("token")]),t._v(" 接口,获取到新 "),n("code",[t._v("token")]),t._v(" 后,再 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L51",target:"_blank",rel:"noopener noreferrer"}},[t._v("触发"),n("OutboundLink")],1),t._v(" 暂存的请求")]),t._v(" "),n("h5",{attrs:{id:"信息存储"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#信息存储"}},[t._v("#")]),t._v(" 信息存储")]),t._v(" "),n("p",[t._v("具体看 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/auth.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("src/utils/auth"),n("OutboundLink")],1),t._v(" 文件,里面有很详细的备注")]),t._v(" "),n("h5",{attrs:{id:"细节处理"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#细节处理"}},[t._v("#")]),t._v(" 细节处理")]),t._v(" "),n("p",[t._v("① 不需要携带 "),n("code",[t._v("token")]),t._v(" 的接口我们设置了 "),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L76",target:"_blank",rel:"noopener noreferrer"}},[t._v("请求白名单"),n("OutboundLink")],1)]),t._v(" "),n("p",[t._v("② 当 "),n("code",[t._v("token")]),t._v(" 过期后,平台会暂存请求,直到拿到新 "),n("code",[t._v("token")]),t._v(" 才会请求,避免了当页面有多个请求会重复刷新 "),n("code",[t._v("token")]),t._v(" 的问题。核心代码有三处:"),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L51",target:"_blank",rel:"noopener noreferrer"}},[t._v("一"),n("OutboundLink")],1),t._v("、"),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L93",target:"_blank",rel:"noopener noreferrer"}},[t._v("二"),n("OutboundLink")],1),t._v("、"),n("a",{attrs:{href:"https://github.com/ronnaces/ronna-admin/blob/main/src/utils/http/index.ts#L100",target:"_blank",rel:"noopener noreferrer"}},[t._v("三"),n("OutboundLink")],1)]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("生产环境 Mock 可以和真实接口共存吗?")]),t._v(" "),n("p",[t._v("当然可以共存,不过可能会遇到 "),n("code",[t._v("Mock")]),t._v(" 干扰真实接口的问题。如果您在开发环境接口没问题,但是到生产环境出问题了,在排除后端问题前提下可以尝试 "),n("a",{attrs:{href:"#%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E5%88%A0%E9%99%A4-mock"}},[t._v("删除 Mock")])])])])}),[],!1,null,null,null);s.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/2.6e3f0335.js b/assets/js/2.6e3f0335.js
new file mode 100644
index 0000000..09bbdf6
--- /dev/null
+++ b/assets/js/2.6e3f0335.js
@@ -0,0 +1,14 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{251:function(t,e,n){},252:function(t,e,n){},253:function(t,e,n){},254:function(t,e,n){},255:function(t,e,n){},256:function(t,e,n){},257:function(t,e,n){},258:function(t,e,n){},259:function(t,e,n){"use strict";var r=TypeError;t.exports=function(t,e){if(t
+ * Copyright OpenJS Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */(function(){var i="Expected a function",o="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],a="[object Arguments]",u="[object Array]",l="[object Boolean]",c="[object Date]",h="[object Error]",f="[object Function]",p="[object GeneratorFunction]",d="[object Map]",g="[object Number]",v="[object Object]",m="[object RegExp]",y="[object Set]",_="[object String]",b="[object Symbol]",w="[object WeakMap]",k="[object ArrayBuffer]",x="[object DataView]",P="[object Float32Array]",C="[object Float64Array]",T="[object Int8Array]",S="[object Int16Array]",L="[object Int32Array]",A="[object Uint8Array]",E="[object Uint16Array]",B="[object Uint32Array]",O=/\b__p \+= '';/g,M=/\b(__p \+=) '' \+/g,I=/(__e\(.*?\)|\b__t\)) \+\n'';/g,D=/&(?:amp|lt|gt|quot|#39);/g,$=/[&<>"']/g,j=RegExp(D.source),Y=RegExp($.source),X=/<%-([\s\S]+?)%>/g,N=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,R=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,U=/^\w*$/,H=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,F=/[\\^$.*+?()[\]{}|]/g,W=RegExp(F.source),q=/^\s+/,G=/\s/,K=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q=/\{\n\/\* \[wrapped with (.+)\] \*/,J=/,? & /,Z=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,V=/[()=,{}\[\]\/\s]/,tt=/\\(\\)?/g,et=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,rt=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,ot=/^\[object .+?Constructor\]$/,st=/^0o[0-7]+$/i,at=/^(?:0|[1-9]\d*)$/,ut=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,lt=/($^)/,ct=/['\n\r\u2028\u2029\\]/g,ht="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ft="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pt="[\\ud800-\\udfff]",dt="["+ft+"]",gt="["+ht+"]",vt="\\d+",mt="[\\u2700-\\u27bf]",yt="[a-z\\xdf-\\xf6\\xf8-\\xff]",_t="[^\\ud800-\\udfff"+ft+vt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",bt="\\ud83c[\\udffb-\\udfff]",wt="[^\\ud800-\\udfff]",kt="(?:\\ud83c[\\udde6-\\uddff]){2}",xt="[\\ud800-\\udbff][\\udc00-\\udfff]",Pt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ct="(?:"+yt+"|"+_t+")",Tt="(?:"+Pt+"|"+_t+")",St="(?:"+gt+"|"+bt+")"+"?",Lt="[\\ufe0e\\ufe0f]?"+St+("(?:\\u200d(?:"+[wt,kt,xt].join("|")+")[\\ufe0e\\ufe0f]?"+St+")*"),At="(?:"+[mt,kt,xt].join("|")+")"+Lt,Et="(?:"+[wt+gt+"?",gt,kt,xt,pt].join("|")+")",Bt=RegExp("['’]","g"),Ot=RegExp(gt,"g"),Mt=RegExp(bt+"(?="+bt+")|"+Et+Lt,"g"),It=RegExp([Pt+"?"+yt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[dt,Pt,"$"].join("|")+")",Tt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[dt,Pt+Ct,"$"].join("|")+")",Pt+"?"+Ct+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Pt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",vt,At].join("|"),"g"),Dt=RegExp("[\\u200d\\ud800-\\udfff"+ht+"\\ufe0e\\ufe0f]"),$t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,jt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Yt=-1,Xt={};Xt[P]=Xt[C]=Xt[T]=Xt[S]=Xt[L]=Xt[A]=Xt["[object Uint8ClampedArray]"]=Xt[E]=Xt[B]=!0,Xt[a]=Xt[u]=Xt[k]=Xt[l]=Xt[x]=Xt[c]=Xt[h]=Xt[f]=Xt[d]=Xt[g]=Xt[v]=Xt[m]=Xt[y]=Xt[_]=Xt[w]=!1;var Nt={};Nt[a]=Nt[u]=Nt[k]=Nt[x]=Nt[l]=Nt[c]=Nt[P]=Nt[C]=Nt[T]=Nt[S]=Nt[L]=Nt[d]=Nt[g]=Nt[v]=Nt[m]=Nt[y]=Nt[_]=Nt[b]=Nt[A]=Nt["[object Uint8ClampedArray]"]=Nt[E]=Nt[B]=!0,Nt[h]=Nt[f]=Nt[w]=!1;var zt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Rt=parseFloat,Ut=parseInt,Ht="object"==typeof global&&global&&global.Object===Object&&global,Ft="object"==typeof self&&self&&self.Object===Object&&self,Wt=Ht||Ft||Function("return this")(),qt=e&&!e.nodeType&&e,Gt=qt&&"object"==typeof t&&t&&!t.nodeType&&t,Kt=Gt&&Gt.exports===qt,Qt=Kt&&Ht.process,Jt=function(){try{var t=Gt&&Gt.require&&Gt.require("util").types;return t||Qt&&Qt.binding&&Qt.binding("util")}catch(t){}}(),Zt=Jt&&Jt.isArrayBuffer,Vt=Jt&&Jt.isDate,te=Jt&&Jt.isMap,ee=Jt&&Jt.isRegExp,ne=Jt&&Jt.isSet,re=Jt&&Jt.isTypedArray;function ie(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function oe(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function he(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function Ie(t,e){for(var n=t.length;n--&&be(e,t[n],0)>-1;);return n}function De(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}var $e=Ce({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),je=Ce({"&":"&","<":"<",">":">",'"':""","'":"'"});function Ye(t){return"\\"+zt[t]}function Xe(t){return Dt.test(t)}function Ne(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function ze(t,e){return function(n){return t(e(n))}}function Re(t,e){for(var n=-1,r=t.length,i=0,s=[];++n",""":'"',"'":"'"});var Ke=function t(e){var n,r=(e=null==e?Wt:Ke.defaults(Wt.Object(),e,Ke.pick(Wt,jt))).Array,G=e.Date,ht=e.Error,ft=e.Function,pt=e.Math,dt=e.Object,gt=e.RegExp,vt=e.String,mt=e.TypeError,yt=r.prototype,_t=ft.prototype,bt=dt.prototype,wt=e["__core-js_shared__"],kt=_t.toString,xt=bt.hasOwnProperty,Pt=0,Ct=(n=/[^.]+$/.exec(wt&&wt.keys&&wt.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Tt=bt.toString,St=kt.call(dt),Lt=Wt._,At=gt("^"+kt.call(xt).replace(F,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Et=Kt?e.Buffer:void 0,Mt=e.Symbol,Dt=e.Uint8Array,zt=Et?Et.allocUnsafe:void 0,Ht=ze(dt.getPrototypeOf,dt),Ft=dt.create,qt=bt.propertyIsEnumerable,Gt=yt.splice,Qt=Mt?Mt.isConcatSpreadable:void 0,Jt=Mt?Mt.iterator:void 0,me=Mt?Mt.toStringTag:void 0,Ce=function(){try{var t=to(dt,"defineProperty");return t({},"",{}),t}catch(t){}}(),Qe=e.clearTimeout!==Wt.clearTimeout&&e.clearTimeout,Je=G&&G.now!==Wt.Date.now&&G.now,Ze=e.setTimeout!==Wt.setTimeout&&e.setTimeout,Ve=pt.ceil,tn=pt.floor,en=dt.getOwnPropertySymbols,nn=Et?Et.isBuffer:void 0,rn=e.isFinite,on=yt.join,sn=ze(dt.keys,dt),an=pt.max,un=pt.min,ln=G.now,cn=e.parseInt,hn=pt.random,fn=yt.reverse,pn=to(e,"DataView"),dn=to(e,"Map"),gn=to(e,"Promise"),vn=to(e,"Set"),mn=to(e,"WeakMap"),yn=to(dt,"create"),_n=mn&&new mn,bn={},wn=Lo(pn),kn=Lo(dn),xn=Lo(gn),Pn=Lo(vn),Cn=Lo(mn),Tn=Mt?Mt.prototype:void 0,Sn=Tn?Tn.valueOf:void 0,Ln=Tn?Tn.toString:void 0;function An(t){if(Fs(t)&&!Is(t)&&!(t instanceof Mn)){if(t instanceof On)return t;if(xt.call(t,"__wrapped__"))return Ao(t)}return new On(t)}var En=function(){function t(){}return function(e){if(!Hs(e))return{};if(Ft)return Ft(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Bn(){}function On(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function Mn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function In(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Jn(t,e,n,r,i,o){var s,u=1&e,h=2&e,w=4&e;if(n&&(s=i?n(t,r,i,o):n(t)),void 0!==s)return s;if(!Hs(t))return t;var O=Is(t);if(O){if(s=function(t){var e=t.length,n=new t.constructor(e);e&&"string"==typeof t[0]&&xt.call(t,"index")&&(n.index=t.index,n.input=t.input);return n}(t),!u)return yi(t,s)}else{var M=ro(t),I=M==f||M==p;if(Ys(t))return fi(t,u);if(M==v||M==a||I&&!i){if(s=h||I?{}:oo(t),!u)return h?function(t,e){return _i(t,no(t),e)}(t,function(t,e){return t&&_i(e,ka(e),t)}(s,t)):function(t,e){return _i(t,eo(t),e)}(t,qn(s,t))}else{if(!Nt[M])return i?t:{};s=function(t,e,n){var r=t.constructor;switch(e){case k:return pi(t);case l:case c:return new r(+t);case x:return function(t,e){var n=e?pi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case P:case C:case T:case S:case L:case A:case"[object Uint8ClampedArray]":case E:case B:return di(t,n);case d:return new r;case g:case _:return new r(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case y:return new r;case b:return i=t,Sn?dt(Sn.call(i)):{}}var i}(t,M,u)}}o||(o=new Yn);var D=o.get(t);if(D)return D;o.set(t,s),Qs(t)?t.forEach((function(r){s.add(Jn(r,e,n,r,t,o))})):Ws(t)&&t.forEach((function(r,i){s.set(i,Jn(r,e,n,i,t,o))}));var $=O?void 0:(w?h?qi:Wi:h?ka:wa)(t);return se($||t,(function(r,i){$&&(r=t[i=r]),Hn(s,i,Jn(r,e,n,i,t,o))})),s}function Zn(t,e,n){var r=n.length;if(null==t)return!r;for(t=dt(t);r--;){var i=n[r],o=e[i],s=t[i];if(void 0===s&&!(i in t)||!o(s))return!1}return!0}function Vn(t,e,n){if("function"!=typeof t)throw new mt(i);return wo((function(){t.apply(void 0,n)}),e)}function tr(t,e,n,r){var i=-1,o=ce,s=!0,a=t.length,u=[],l=e.length;if(!a)return u;n&&(e=fe(e,Ee(n))),r?(o=he,s=!1):e.length>=200&&(o=Oe,s=!1,e=new jn(e));t:for(;++i-1},Dn.prototype.set=function(t,e){var n=this.__data__,r=Fn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},$n.prototype.clear=function(){this.size=0,this.__data__={hash:new In,map:new(dn||Dn),string:new In}},$n.prototype.delete=function(t){var e=Zi(this,t).delete(t);return this.size-=e?1:0,e},$n.prototype.get=function(t){return Zi(this,t).get(t)},$n.prototype.has=function(t){return Zi(this,t).has(t)},$n.prototype.set=function(t,e){var n=Zi(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},jn.prototype.add=jn.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},jn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.clear=function(){this.__data__=new Dn,this.size=0},Yn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Yn.prototype.get=function(t){return this.__data__.get(t)},Yn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Dn){var r=n.__data__;if(!dn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new $n(r)}return n.set(t,e),this.size=n.size,this};var er=ki(lr),nr=ki(cr,!0);function rr(t,e){var n=!0;return er(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function ir(t,e,n){for(var r=-1,i=t.length;++r0&&n(a)?e>1?sr(a,e-1,n,r,i):pe(i,a):r||(i[i.length]=a)}return i}var ar=xi(),ur=xi(!0);function lr(t,e){return t&&ar(t,e,wa)}function cr(t,e){return t&&ur(t,e,wa)}function hr(t,e){return le(e,(function(e){return zs(t[e])}))}function fr(t,e){for(var n=0,r=(e=ui(e,t)).length;null!=t&&ne}function vr(t,e){return null!=t&&xt.call(t,e)}function mr(t,e){return null!=t&&e in dt(t)}function yr(t,e,n){for(var i=n?he:ce,o=t[0].length,s=t.length,a=s,u=r(s),l=1/0,c=[];a--;){var h=t[a];a&&e&&(h=fe(h,Ee(e))),l=un(h.length,l),u[a]=!n&&(e||o>=120&&h.length>=120)?new jn(a&&h):void 0}h=t[0];var f=-1,p=u[0];t:for(;++f=a)return u;var l=n[r];return u*("desc"==l?-1:1)}}return t.index-e.index}(t,e,n)}))}function Ir(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)a!==t&&Gt.call(a,u,1),Gt.call(t,u,1);return t}function $r(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;ao(i)?Gt.call(t,i,1):ti(t,i)}}return t}function jr(t,e){return t+tn(hn()*(e-t+1))}function Yr(t,e){var n="";if(!t||e<1||e>9007199254740991)return n;do{e%2&&(n+=t),(e=tn(e/2))&&(t+=t)}while(e);return n}function Xr(t,e){return ko(vo(t,e,qa),t+"")}function Nr(t){return Nn(Ea(t))}function zr(t,e){var n=Ea(t);return Co(n,Qn(e,0,n.length))}function Rr(t,e,n,r){if(!Hs(t))return t;for(var i=-1,o=(e=ui(e,t)).length,s=o-1,a=t;null!=a&&++io?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var s=r(o);++i>>1,s=t[o];null!==s&&!Zs(s)&&(n?s<=e:s=200){var l=e?null:Yi(t);if(l)return Ue(l);s=!1,i=Oe,u=new jn}else u=e?[]:a;t:for(;++r=r?t:Wr(t,e,n)}var hi=Qe||function(t){return Wt.clearTimeout(t)};function fi(t,e){if(e)return t.slice();var n=t.length,r=zt?zt(n):new t.constructor(n);return t.copy(r),r}function pi(t){var e=new t.constructor(t.byteLength);return new Dt(e).set(new Dt(t)),e}function di(t,e){var n=e?pi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function gi(t,e){if(t!==e){var n=void 0!==t,r=null===t,i=t==t,o=Zs(t),s=void 0!==e,a=null===e,u=e==e,l=Zs(e);if(!a&&!l&&!o&&t>e||o&&s&&u&&!a&&!l||r&&s&&u||!n&&u||!i)return 1;if(!r&&!o&&!l&&t1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,s&&uo(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),e=dt(e);++r-1?i[o?e[s]:s]:void 0}}function Li(t){return Fi((function(e){var n=e.length,r=n,o=On.prototype.thru;for(t&&e.reverse();r--;){var s=e[r];if("function"!=typeof s)throw new mt(i);if(o&&!a&&"wrapper"==Ki(s))var a=new On([],!0)}for(r=a?r:n;++r1&&_.reverse(),h&&la))return!1;var l=o.get(t),c=o.get(e);if(l&&c)return l==e&&c==t;var h=-1,f=!0,p=2&n?new jn:void 0;for(o.set(t,e),o.set(e,t);++h-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(K,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return se(s,(function(n){var r="_."+n[0];e&n[1]&&!ce(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(Q);return e?e[1].split(J):[]}(r),n)))}function Po(t){var e=0,n=0;return function(){var r=ln(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function Co(t,e){var n=-1,r=t.length,i=r-1;for(e=void 0===e?r:e;++n1?t[e-1]:void 0;return n="function"==typeof n?(t.pop(),n):void 0,Ko(t,n)}));function ns(t){var e=An(t);return e.__chain__=!0,e}function rs(t,e){return e(t)}var is=Fi((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Kn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Mn&&ao(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:rs,args:[i],thisArg:void 0}),new On(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(i)}));var os=bi((function(t,e,n){xt.call(t,n)?++t[n]:Gn(t,n,1)}));var ss=Si(Mo),as=Si(Io);function us(t,e){return(Is(t)?se:er)(t,Ji(e,3))}function ls(t,e){return(Is(t)?ae:nr)(t,Ji(e,3))}var cs=bi((function(t,e,n){xt.call(t,n)?t[n].push(e):Gn(t,n,[e])}));var hs=Xr((function(t,e,n){var i=-1,o="function"==typeof e,s=$s(t)?r(t.length):[];return er(t,(function(t){s[++i]=o?ie(e,t,n):_r(t,e,n)})),s})),fs=bi((function(t,e,n){Gn(t,n,e)}));function ps(t,e){return(Is(t)?fe:Lr)(t,Ji(e,3))}var ds=bi((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var gs=Xr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&uo(t,e[0],e[1])?e=[]:n>2&&uo(e[0],e[1],e[2])&&(e=[e[0]]),Mr(t,sr(e,1),[])})),vs=Je||function(){return Wt.Date.now()};function ms(t,e,n){return e=n?void 0:e,Ni(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function ys(t,e){var n;if("function"!=typeof e)throw new mt(i);return t=ia(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=void 0),n}}var _s=Xr((function(t,e,n){var r=1;if(n.length){var i=Re(n,Qi(_s));r|=32}return Ni(t,r,e,n,i)})),bs=Xr((function(t,e,n){var r=3;if(n.length){var i=Re(n,Qi(bs));r|=32}return Ni(e,r,t,n,i)}));function ws(t,e,n){var r,o,s,a,u,l,c=0,h=!1,f=!1,p=!0;if("function"!=typeof t)throw new mt(i);function d(e){var n=r,i=o;return r=o=void 0,c=e,a=t.apply(i,n)}function g(t){return c=t,u=wo(m,e),h?d(t):a}function v(t){var n=t-l;return void 0===l||n>=e||n<0||f&&t-c>=s}function m(){var t=vs();if(v(t))return y(t);u=wo(m,function(t){var n=e-(t-l);return f?un(n,s-(t-c)):n}(t))}function y(t){return u=void 0,p&&r?d(t):(r=o=void 0,a)}function _(){var t=vs(),n=v(t);if(r=arguments,o=this,l=t,n){if(void 0===u)return g(l);if(f)return hi(u),u=wo(m,e),d(l)}return void 0===u&&(u=wo(m,e)),a}return e=sa(e)||0,Hs(n)&&(h=!!n.leading,s=(f="maxWait"in n)?an(sa(n.maxWait)||0,e):s,p="trailing"in n?!!n.trailing:p),_.cancel=function(){void 0!==u&&hi(u),c=0,r=l=o=u=void 0},_.flush=function(){return void 0===u?a:y(vs())},_}var ks=Xr((function(t,e){return Vn(t,1,e)})),xs=Xr((function(t,e,n){return Vn(t,sa(e)||0,n)}));function Ps(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new mt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Ps.Cache||$n),n}function Cs(t){if("function"!=typeof t)throw new mt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ps.Cache=$n;var Ts=li((function(t,e){var n=(e=1==e.length&&Is(e[0])?fe(e[0],Ee(Ji())):fe(sr(e,1),Ee(Ji()))).length;return Xr((function(r){for(var i=-1,o=un(r.length,n);++i=e})),Ms=br(function(){return arguments}())?br:function(t){return Fs(t)&&xt.call(t,"callee")&&!qt.call(t,"callee")},Is=r.isArray,Ds=Zt?Ee(Zt):function(t){return Fs(t)&&dr(t)==k};function $s(t){return null!=t&&Us(t.length)&&!zs(t)}function js(t){return Fs(t)&&$s(t)}var Ys=nn||su,Xs=Vt?Ee(Vt):function(t){return Fs(t)&&dr(t)==c};function Ns(t){if(!Fs(t))return!1;var e=dr(t);return e==h||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Gs(t)}function zs(t){if(!Hs(t))return!1;var e=dr(t);return e==f||e==p||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Rs(t){return"number"==typeof t&&t==ia(t)}function Us(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function Hs(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Fs(t){return null!=t&&"object"==typeof t}var Ws=te?Ee(te):function(t){return Fs(t)&&ro(t)==d};function qs(t){return"number"==typeof t||Fs(t)&&dr(t)==g}function Gs(t){if(!Fs(t)||dr(t)!=v)return!1;var e=Ht(t);if(null===e)return!0;var n=xt.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&kt.call(n)==St}var Ks=ee?Ee(ee):function(t){return Fs(t)&&dr(t)==m};var Qs=ne?Ee(ne):function(t){return Fs(t)&&ro(t)==y};function Js(t){return"string"==typeof t||!Is(t)&&Fs(t)&&dr(t)==_}function Zs(t){return"symbol"==typeof t||Fs(t)&&dr(t)==b}var Vs=re?Ee(re):function(t){return Fs(t)&&Us(t.length)&&!!Xt[dr(t)]};var ta=Di(Sr),ea=Di((function(t,e){return t<=e}));function na(t){if(!t)return[];if($s(t))return Js(t)?We(t):yi(t);if(Jt&&t[Jt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Jt]());var e=ro(t);return(e==d?Ne:e==y?Ue:Ea)(t)}function ra(t){return t?(t=sa(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ia(t){var e=ra(t),n=e%1;return e==e?n?e-n:e:0}function oa(t){return t?Qn(ia(t),0,4294967295):0}function sa(t){if("number"==typeof t)return t;if(Zs(t))return NaN;if(Hs(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Hs(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ae(t);var n=it.test(t);return n||st.test(t)?Ut(t.slice(2),n?2:8):rt.test(t)?NaN:+t}function aa(t){return _i(t,ka(t))}function ua(t){return null==t?"":Zr(t)}var la=wi((function(t,e){if(fo(e)||$s(e))_i(e,wa(e),t);else for(var n in e)xt.call(e,n)&&Hn(t,n,e[n])})),ca=wi((function(t,e){_i(e,ka(e),t)})),ha=wi((function(t,e,n,r){_i(e,ka(e),t,r)})),fa=wi((function(t,e,n,r){_i(e,wa(e),t,r)})),pa=Fi(Kn);var da=Xr((function(t,e){t=dt(t);var n=-1,r=e.length,i=r>2?e[2]:void 0;for(i&&uo(e[0],e[1],i)&&(r=1);++n1),e})),_i(t,qi(t),n),r&&(n=Jn(n,7,Ui));for(var i=e.length;i--;)ti(n,e[i]);return n}));var Ta=Fi((function(t,e){return null==t?{}:function(t,e){return Ir(t,e,(function(e,n){return ma(t,n)}))}(t,e)}));function Sa(t,e){if(null==t)return{};var n=fe(qi(t),(function(t){return[t]}));return e=Ji(e),Ir(t,n,(function(t,n){return e(t,n[0])}))}var La=Xi(wa),Aa=Xi(ka);function Ea(t){return null==t?[]:Be(t,wa(t))}var Ba=Ci((function(t,e,n){return e=e.toLowerCase(),t+(n?Oa(e):e)}));function Oa(t){return Na(ua(t).toLowerCase())}function Ma(t){return(t=ua(t))&&t.replace(ut,$e).replace(Ot,"")}var Ia=Ci((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Da=Ci((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),$a=Pi("toLowerCase");var ja=Ci((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}));var Ya=Ci((function(t,e,n){return t+(n?" ":"")+Na(e)}));var Xa=Ci((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Na=Pi("toUpperCase");function za(t,e,n){return t=ua(t),void 0===(e=n?void 0:e)?function(t){return $t.test(t)}(t)?function(t){return t.match(It)||[]}(t):function(t){return t.match(Z)||[]}(t):t.match(e)||[]}var Ra=Xr((function(t,e){try{return ie(t,void 0,e)}catch(t){return Ns(t)?t:new ht(t)}})),Ua=Fi((function(t,e){return se(e,(function(e){e=So(e),Gn(t,e,_s(t[e],t))})),t}));function Ha(t){return function(){return t}}var Fa=Li(),Wa=Li(!0);function qa(t){return t}function Ga(t){return Pr("function"==typeof t?t:Jn(t,1))}var Ka=Xr((function(t,e){return function(n){return _r(n,t,e)}})),Qa=Xr((function(t,e){return function(n){return _r(t,n,e)}}));function Ja(t,e,n){var r=wa(e),i=hr(e,r);null!=n||Hs(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=hr(e,wa(e)));var o=!(Hs(n)&&"chain"in n&&!n.chain),s=zs(t);return se(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__),i=n.__actions__=yi(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,pe([this.value()],arguments))})})),t}function Za(){}var Va=Oi(fe),tu=Oi(ue),eu=Oi(ve);function nu(t){return lo(t)?Pe(So(t)):function(t){return function(e){return fr(e,t)}}(t)}var ru=Ii(),iu=Ii(!0);function ou(){return[]}function su(){return!1}var au=Bi((function(t,e){return t+e}),0),uu=ji("ceil"),lu=Bi((function(t,e){return t/e}),1),cu=ji("floor");var hu,fu=Bi((function(t,e){return t*e}),1),pu=ji("round"),du=Bi((function(t,e){return t-e}),0);return An.after=function(t,e){if("function"!=typeof e)throw new mt(i);return t=ia(t),function(){if(--t<1)return e.apply(this,arguments)}},An.ary=ms,An.assign=la,An.assignIn=ca,An.assignInWith=ha,An.assignWith=fa,An.at=pa,An.before=ys,An.bind=_s,An.bindAll=Ua,An.bindKey=bs,An.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Is(t)?t:[t]},An.chain=ns,An.chunk=function(t,e,n){e=(n?uo(t,e,n):void 0===e)?1:an(ia(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,s=0,a=r(Ve(i/e));oi?0:i+n),(r=void 0===r||r>i?i:ia(r))<0&&(r+=i),r=n>r?0:oa(r);n>>0)?(t=ua(t))&&("string"==typeof e||null!=e&&!Ks(e))&&!(e=Zr(e))&&Xe(t)?ci(We(t),0,n):t.split(e,n):[]},An.spread=function(t,e){if("function"!=typeof t)throw new mt(i);return e=null==e?0:an(ia(e),0),Xr((function(n){var r=n[e],i=ci(n,0,e);return r&&pe(i,r),ie(t,this,i)}))},An.tail=function(t){var e=null==t?0:t.length;return e?Wr(t,1,e):[]},An.take=function(t,e,n){return t&&t.length?Wr(t,0,(e=n||void 0===e?1:ia(e))<0?0:e):[]},An.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?Wr(t,(e=r-(e=n||void 0===e?1:ia(e)))<0?0:e,r):[]},An.takeRightWhile=function(t,e){return t&&t.length?ni(t,Ji(e,3),!1,!0):[]},An.takeWhile=function(t,e){return t&&t.length?ni(t,Ji(e,3)):[]},An.tap=function(t,e){return e(t),t},An.throttle=function(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new mt(i);return Hs(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ws(t,e,{leading:r,maxWait:e,trailing:o})},An.thru=rs,An.toArray=na,An.toPairs=La,An.toPairsIn=Aa,An.toPath=function(t){return Is(t)?fe(t,So):Zs(t)?[t]:yi(To(ua(t)))},An.toPlainObject=aa,An.transform=function(t,e,n){var r=Is(t),i=r||Ys(t)||Vs(t);if(e=Ji(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Hs(t)&&zs(o)?En(Ht(t)):{}}return(i?se:lr)(t,(function(t,r,i){return e(n,t,r,i)})),n},An.unary=function(t){return ms(t,1)},An.union=Fo,An.unionBy=Wo,An.unionWith=qo,An.uniq=function(t){return t&&t.length?Vr(t):[]},An.uniqBy=function(t,e){return t&&t.length?Vr(t,Ji(e,2)):[]},An.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Vr(t,void 0,e):[]},An.unset=function(t,e){return null==t||ti(t,e)},An.unzip=Go,An.unzipWith=Ko,An.update=function(t,e,n){return null==t?t:ei(t,e,ai(n))},An.updateWith=function(t,e,n,r){return r="function"==typeof r?r:void 0,null==t?t:ei(t,e,ai(n),r)},An.values=Ea,An.valuesIn=function(t){return null==t?[]:Be(t,ka(t))},An.without=Qo,An.words=za,An.wrap=function(t,e){return Ss(ai(e),t)},An.xor=Jo,An.xorBy=Zo,An.xorWith=Vo,An.zip=ts,An.zipObject=function(t,e){return oi(t||[],e||[],Hn)},An.zipObjectDeep=function(t,e){return oi(t||[],e||[],Rr)},An.zipWith=es,An.entries=La,An.entriesIn=Aa,An.extend=ca,An.extendWith=ha,Ja(An,An),An.add=au,An.attempt=Ra,An.camelCase=Ba,An.capitalize=Oa,An.ceil=uu,An.clamp=function(t,e,n){return void 0===n&&(n=e,e=void 0),void 0!==n&&(n=(n=sa(n))==n?n:0),void 0!==e&&(e=(e=sa(e))==e?e:0),Qn(sa(t),e,n)},An.clone=function(t){return Jn(t,4)},An.cloneDeep=function(t){return Jn(t,5)},An.cloneDeepWith=function(t,e){return Jn(t,5,e="function"==typeof e?e:void 0)},An.cloneWith=function(t,e){return Jn(t,4,e="function"==typeof e?e:void 0)},An.conformsTo=function(t,e){return null==e||Zn(t,e,wa(e))},An.deburr=Ma,An.defaultTo=function(t,e){return null==t||t!=t?e:t},An.divide=lu,An.endsWith=function(t,e,n){t=ua(t),e=Zr(e);var r=t.length,i=n=void 0===n?r:Qn(ia(n),0,r);return(n-=e.length)>=0&&t.slice(n,i)==e},An.eq=Es,An.escape=function(t){return(t=ua(t))&&Y.test(t)?t.replace($,je):t},An.escapeRegExp=function(t){return(t=ua(t))&&W.test(t)?t.replace(F,"\\$&"):t},An.every=function(t,e,n){var r=Is(t)?ue:rr;return n&&uo(t,e,n)&&(e=void 0),r(t,Ji(e,3))},An.find=ss,An.findIndex=Mo,An.findKey=function(t,e){return ye(t,Ji(e,3),lr)},An.findLast=as,An.findLastIndex=Io,An.findLastKey=function(t,e){return ye(t,Ji(e,3),cr)},An.floor=cu,An.forEach=us,An.forEachRight=ls,An.forIn=function(t,e){return null==t?t:ar(t,Ji(e,3),ka)},An.forInRight=function(t,e){return null==t?t:ur(t,Ji(e,3),ka)},An.forOwn=function(t,e){return t&&lr(t,Ji(e,3))},An.forOwnRight=function(t,e){return t&&cr(t,Ji(e,3))},An.get=va,An.gt=Bs,An.gte=Os,An.has=function(t,e){return null!=t&&io(t,e,vr)},An.hasIn=ma,An.head=$o,An.identity=qa,An.includes=function(t,e,n,r){t=$s(t)?t:Ea(t),n=n&&!r?ia(n):0;var i=t.length;return n<0&&(n=an(i+n,0)),Js(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&be(t,e,n)>-1},An.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ia(n);return i<0&&(i=an(r+i,0)),be(t,e,i)},An.inRange=function(t,e,n){return e=ra(e),void 0===n?(n=e,e=0):n=ra(n),function(t,e,n){return t>=un(e,n)&&t=-9007199254740991&&t<=9007199254740991},An.isSet=Qs,An.isString=Js,An.isSymbol=Zs,An.isTypedArray=Vs,An.isUndefined=function(t){return void 0===t},An.isWeakMap=function(t){return Fs(t)&&ro(t)==w},An.isWeakSet=function(t){return Fs(t)&&"[object WeakSet]"==dr(t)},An.join=function(t,e){return null==t?"":on.call(t,e)},An.kebabCase=Ia,An.last=No,An.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ia(n))<0?an(r+i,0):un(i,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):_e(t,ke,i,!0)},An.lowerCase=Da,An.lowerFirst=$a,An.lt=ta,An.lte=ea,An.max=function(t){return t&&t.length?ir(t,qa,gr):void 0},An.maxBy=function(t,e){return t&&t.length?ir(t,Ji(e,2),gr):void 0},An.mean=function(t){return xe(t,qa)},An.meanBy=function(t,e){return xe(t,Ji(e,2))},An.min=function(t){return t&&t.length?ir(t,qa,Sr):void 0},An.minBy=function(t,e){return t&&t.length?ir(t,Ji(e,2),Sr):void 0},An.stubArray=ou,An.stubFalse=su,An.stubObject=function(){return{}},An.stubString=function(){return""},An.stubTrue=function(){return!0},An.multiply=fu,An.nth=function(t,e){return t&&t.length?Or(t,ia(e)):void 0},An.noConflict=function(){return Wt._===this&&(Wt._=Lt),this},An.noop=Za,An.now=vs,An.pad=function(t,e,n){t=ua(t);var r=(e=ia(e))?Fe(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Mi(tn(i),n)+t+Mi(Ve(i),n)},An.padEnd=function(t,e,n){t=ua(t);var r=(e=ia(e))?Fe(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=hn();return un(t+i*(e-t+Rt("1e-"+((i+"").length-1))),e)}return jr(t,e)},An.reduce=function(t,e,n){var r=Is(t)?de:Te,i=arguments.length<3;return r(t,Ji(e,4),n,i,er)},An.reduceRight=function(t,e,n){var r=Is(t)?ge:Te,i=arguments.length<3;return r(t,Ji(e,4),n,i,nr)},An.repeat=function(t,e,n){return e=(n?uo(t,e,n):void 0===e)?1:ia(e),Yr(ua(t),e)},An.replace=function(){var t=arguments,e=ua(t[0]);return t.length<3?e:e.replace(t[1],t[2])},An.result=function(t,e,n){var r=-1,i=(e=ui(e,t)).length;for(i||(i=1,t=void 0);++r9007199254740991)return[];var n=4294967295,r=un(t,4294967295);t-=4294967295;for(var i=Le(r,e=Ji(e));++n=o)return t;var a=n-Fe(r);if(a<1)return r;var u=s?ci(s,0,a).join(""):t.slice(0,a);if(void 0===i)return u+r;if(s&&(a+=u.length-a),Ks(i)){if(t.slice(a).search(i)){var l,c=u;for(i.global||(i=gt(i.source,ua(nt.exec(i))+"g")),i.lastIndex=0;l=i.exec(c);)var h=l.index;u=u.slice(0,void 0===h?a:h)}}else if(t.indexOf(Zr(i),a)!=a){var f=u.lastIndexOf(i);f>-1&&(u=u.slice(0,f))}return u+r},An.unescape=function(t){return(t=ua(t))&&j.test(t)?t.replace(D,Ge):t},An.uniqueId=function(t){var e=++Pt;return ua(t)+e},An.upperCase=Xa,An.upperFirst=Na,An.each=us,An.eachRight=ls,An.first=$o,Ja(An,(hu={},lr(An,(function(t,e){xt.call(An.prototype,e)||(hu[e]=t)})),hu),{chain:!1}),An.VERSION="4.17.21",se(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){An[t].placeholder=An})),se(["drop","take"],(function(t,e){Mn.prototype[t]=function(n){n=void 0===n?1:an(ia(n),0);var r=this.__filtered__&&!e?new Mn(this):this.clone();return r.__filtered__?r.__takeCount__=un(n,r.__takeCount__):r.__views__.push({size:un(n,4294967295),type:t+(r.__dir__<0?"Right":"")}),r},Mn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),se(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;Mn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Ji(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),se(["head","last"],(function(t,e){var n="take"+(e?"Right":"");Mn.prototype[t]=function(){return this[n](1).value()[0]}})),se(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");Mn.prototype[t]=function(){return this.__filtered__?new Mn(this):this[n](1)}})),Mn.prototype.compact=function(){return this.filter(qa)},Mn.prototype.find=function(t){return this.filter(t).head()},Mn.prototype.findLast=function(t){return this.reverse().find(t)},Mn.prototype.invokeMap=Xr((function(t,e){return"function"==typeof t?new Mn(this):this.map((function(n){return _r(n,t,e)}))})),Mn.prototype.reject=function(t){return this.filter(Cs(Ji(t)))},Mn.prototype.slice=function(t,e){t=ia(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Mn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),void 0!==e&&(n=(e=ia(e))<0?n.dropRight(-e):n.take(e-t)),n)},Mn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Mn.prototype.toArray=function(){return this.take(4294967295)},lr(Mn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=An[r?"take"+("last"==e?"Right":""):e],o=r||/^find/.test(e);i&&(An.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,a=e instanceof Mn,u=s[0],l=a||Is(e),c=function(t){var e=i.apply(An,pe([t],s));return r&&h?e[0]:e};l&&n&&"function"==typeof u&&1!=u.length&&(a=l=!1);var h=this.__chain__,f=!!this.__actions__.length,p=o&&!h,d=a&&!f;if(!o&&l){e=d?e:new Mn(this);var g=t.apply(e,s);return g.__actions__.push({func:rs,args:[c],thisArg:void 0}),new On(g,h)}return p&&d?t.apply(this,s):(g=this.thru(c),p?r?g.value()[0]:g.value():g)})})),se(["pop","push","shift","sort","splice","unshift"],(function(t){var e=yt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);An.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Is(i)?i:[],t)}return this[n]((function(n){return e.apply(Is(n)?n:[],t)}))}})),lr(Mn.prototype,(function(t,e){var n=An[e];if(n){var r=n.name+"";xt.call(bn,r)||(bn[r]=[]),bn[r].push({name:e,func:n})}})),bn[Ai(void 0,2).name]=[{name:"wrapper",func:void 0}],Mn.prototype.clone=function(){var t=new Mn(this.__wrapped__);return t.__actions__=yi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=yi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=yi(this.__views__),t},Mn.prototype.reverse=function(){if(this.__filtered__){var t=new Mn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Mn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Is(t),r=e<0,i=n?t.length:0,o=function(t,e,n){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},An.prototype.plant=function(t){for(var e,n=this;n instanceof Bn;){var r=Ao(n);r.__index__=0,r.__values__=void 0,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e},An.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Mn){var e=t;return this.__actions__.length&&(e=new Mn(this)),(e=e.reverse()).__actions__.push({func:rs,args:[Ho],thisArg:void 0}),new On(e,this.__chain__)}return this.thru(Ho)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return ri(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head,Jt&&(An.prototype[Jt]=function(){return this}),An}();Wt._=Ke,void 0===(r=function(){return Ke}.call(e,n,e,t))||(t.exports=r)}).call(this)}).call(this,n(50)(t))},261:function(t,e,n){},262:function(t,e,n){},263:function(t,e,n){},264:function(t,e,n){},265:function(t,e,n){},266:function(t,e,n){},267:function(t,e){t.exports=function(t){return null==t}},268:function(t,e,n){},269:function(t,e,n){},270:function(t,e,n){},271:function(t,e,n){},272:function(t,e,n){},273:function(t,e,n){},274:function(t,e,n){},275:function(t,e,n){},276:function(t,e,n){},277:function(t,e,n){},278:function(t,e,n){},279:function(t,e,n){},280:function(t,e,n){},281:function(t,e,n){},282:function(t,e,n){},283:function(t,e,n){},287:function(t,e,n){"use strict";n.r(e);var r=n(11),i={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:n(288).a},beforeCreate(){this.$options.components.SidebarLinks=n(287).default},methods:{isActive:r.f}},o=(n(328),n(8)),s=Object(o.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("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")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("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;function a(t,e,n,r){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}},n)}function u(t,e,n,i,o,s=1){return!e||s>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const l=Object(r.f)(i,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header level"+e.level},[a(t,n+"#"+e.slug,e.title,l),u(t,e.children,n,i,o,s+1)])}))}var l={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:i,$themeConfig:o,$themeLocaleConfig:s},props:{item:l,sidebarDepth:c}}){const h=Object(r.f)(i,l.path),f="auto"===l.type?h||l.children.some(t=>Object(r.f)(i,l.basePath+"#"+t.slug)):h,p="external"===l.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,l.path,l.title||l.path):a(t,l.path,l.title||l.path,f),d=[e.frontmatter.sidebarDepth,c,s.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),g=s.displayAllHeaders||o.displayAllHeaders;if("auto"===l.type)return[p,u(t,l.children,l.basePath,i,d)];if((f||g)&&l.headers&&!r.e.test(l.path)){return[p,u(t,Object(r.d)(l.headers),l.path,i,d)]}return p}};n(329);function c(t,e){return"group"===e.type&&e.children.some(e=>"group"===e.type?c(t,e):"page"===e.type&&Object(r.f)(t,e.path))}var h={name:"SidebarLinks",components:{SidebarGroup:s,SidebarLink:Object(o.a)(l,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 n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(r.f)(this.$route,t.regularPath)}}},f=Object(o.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,r){return n("li",{key:r},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:r===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):n("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=f.exports},288:function(t,e,n){"use strict";var r={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(314),n(8)),o=Object(i.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("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=o.exports},290:function(t,e,n){"use strict";n(251)},291:function(t,e,n){"use strict";n(252)},292:function(t,e,n){"use strict";n(253)},293:function(t,e,n){"use strict";n(254)},294:function(t,e,n){"use strict";n(255)},295:function(t,e,n){"use strict";n(256)},296:function(t,e,n){"use strict";n(257)},297:function(t,e,n){"use strict";n(258)},298:function(t,e,n){"use strict";var r=n(95),i=n(2),o=n(97),s=n(259),a=URLSearchParams,u=a.prototype,l=i(u.append),c=i(u.delete),h=i(u.forEach),f=i([].push),p=new a("a=1&a=2&b=3");p.delete("a",1),p.delete("b",void 0),p+""!="a=2"&&r(u,"delete",(function(t){var e=arguments.length,n=e<2?void 0:arguments[1];if(e&&void 0===n)return c(this,t);var r=[];h(this,(function(t,e){f(r,{key:e,value:t})})),s(e,1);for(var i,a=o(t),u=o(n),p=0,d=0,g=!1,v=r.length;p1?arguments[1]:void 0)}}),o("findLastIndex")},303:function(t,e,n){"use strict";var r=n(304),i=n(48),o=n(31),s=n(32),a=function(t){var e=1===t;return function(n,a,u){for(var l,c=o(n),h=i(c),f=s(h),p=r(a,u);f-- >0;)if(p(l=h[f],f,c))switch(t){case 0:return l;case 1:return f}return e?-1:void 0}};t.exports={findLast:a(0),findLastIndex:a(1)}},304:function(t,e,n){"use strict";var r=n(305),i=n(29),o=n(26),s=r(r.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?s(t,e):function(){return t.apply(e,arguments)}}},305:function(t,e,n){"use strict";var r=n(18),i=n(2);t.exports=function(t){if("Function"===r(t))return i(t)}},306:function(t,e,n){"use strict";var r=n(30),i=n(307),o=n(17).f,s=r("unscopables"),a=Array.prototype;void 0===a[s]&&o(a,s,{configurable:!0,value:i(null)}),t.exports=function(t){a[s][t]=!0}},307:function(t,e,n){"use strict";var r,i=n(47),o=n(308),s=n(96),a=n(49),u=n(310),l=n(98),c=n(101),h=c("IE_PROTO"),f=function(){},p=function(t){return"
+