Template
1
0
mirror of https://github.com/un-pany/v3-admin-vite.git synced 2025-04-21 11:29:20 +08:00

Deploying to gh-pages from @ 5a2836c8258e74461b33cf4c082791c5e0964994 🚀

This commit is contained in:
pany-ang 2024-03-08 13:14:46 +00:00
parent 80074862a9
commit 8e4df43c5e
45 changed files with 75 additions and 75 deletions

View File

@ -6,11 +6,11 @@
<link rel="icon" href="/v3-admin-vite/favicon.ico" />
<link rel="stylesheet" href="/v3-admin-vite/app-loading.css" />
<title>V3 Admin Vite</title>
<script type="module" crossorigin src="/v3-admin-vite/static/index-ONuJaq61.js"></script>
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/vue-B9g8wdAH.js">
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/element-lTbKEsR_.js">
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/vxe-CXjRjlGF.js">
<link rel="stylesheet" crossorigin href="/v3-admin-vite/static/index-DYwQqLeT.css">
<script type="module" crossorigin src="/v3-admin-vite/static/index-Bb11-SjF.js"></script>
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/vue-Dve2Dm07.js">
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/element-BBBeT0ZC.js">
<link rel="modulepreload" crossorigin href="/v3-admin-vite/static/vxe-c8uSECIy.js">
<link rel="stylesheet" crossorigin href="/v3-admin-vite/static/index-CGtl8_lv.css">
</head>
<body>
<div id="app">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{_ as n}from"./index-ONuJaq61.js";import{ag as e,m as c,p as _,q as d,H as l,U as t,O as o,S as p}from"./vue-B9g8wdAH.js";const i={},u={class:"error-page"},f={class:"error-page-svg"};function m(r,g){const a=e("el-button"),s=e("router-link");return c(),_("div",u,[d("div",f,[l(r.$slots,"default",{},void 0,!0)]),t(s,{to:"/"},{default:o(()=>[t(a,{type:"primary"},{default:o(()=>[p("回到首页")]),_:1})]),_:1})])}const k=n(i,[["render",m],["__scopeId","data-v-2fba9562"]]);export{k as E};
import{_ as n}from"./index-Bb11-SjF.js";import{ah as e,m as c,p as _,q as d,H as l,U as t,O as o,S as p}from"./vue-Dve2Dm07.js";const i={},u={class:"error-page"},f={class:"error-page-svg"};function m(r,h){const a=e("el-button"),s=e("router-link");return c(),_("div",u,[d("div",f,[l(r.$slots,"default",{},void 0,!0)]),t(s,{to:"/"},{default:o(()=>[t(a,{type:"primary"},{default:o(()=>[p("回到首页")]),_:1})]),_:1})])}const k=n(i,[["render",m],["__scopeId","data-v-2fba9562"]]);export{k as E};

View File

@ -0,0 +1 @@
.switch-roles[data-v-693bfeca]{margin-top:15px;display:flex;align-items:center}

View File

@ -0,0 +1 @@
import{e as p,_}from"./index-Bb11-SjF.js";import{l as u,r as m,b as h,ah as c,m as f,p as v,q as t,T as S,u as b,U as s,O as w,aH as I,aI as V}from"./vue-Dve2Dm07.js";const g=e=>(I("data-v-693bfeca"),e=e(),V(),e),x={class:"switch-roles"},R=g(()=>t("span",null,"切换用户(模拟重新登录):",-1)),B=u({__name:"SwitchRoles",setup(e){const o=p(),a=m(o.roles[0]);return h(a,l=>{o.changeRoles(l)}),(l,n)=>{const r=c("el-radio-button"),d=c("el-radio-group");return f(),v("div",null,[t("div",null,"你的角色:"+S(b(o).roles),1),t("div",x,[R,s(d,{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=i=>a.value=i)},{default:w(()=>[s(r,{label:"editor",value:"editor"}),s(r,{label:"admin",value:"admin"})]),_:1},8,["modelValue"])])])}}}),k=_(B,[["__scopeId","data-v-693bfeca"]]);export{k as S};

View File

@ -1 +0,0 @@
.switch-roles[data-v-9ee3611b]{margin-top:15px;display:flex;align-items:center}

View File

@ -1 +0,0 @@
import{e as _,_ as i}from"./index-ONuJaq61.js";import{l as u,r as m,b as h,ag as c,m as S,p as f,q as a,T as v,u as b,U as t,O as w,aH as g,aI as I}from"./vue-B9g8wdAH.js";const V=e=>(g("data-v-9ee3611b"),e=e(),I(),e),x={class:"switch-roles"},R=V(()=>a("span",null,"切换权限(模拟权限变化后重新登录):",-1)),B=u({__name:"SwitchRoles",setup(e){const o=_(),s=m(o.roles[0]);return h(s,l=>{o.changeRoles(l)}),(l,n)=>{const r=c("el-radio-button"),d=c("el-radio-group");return S(),f("div",null,[a("div",null,"你的权限:"+v(b(o).roles),1),a("div",x,[R,t(d,{modelValue:s.value,"onUpdate:modelValue":n[0]||(n[0]=p=>s.value=p)},{default:w(()=>[t(r,{label:"editor"}),t(r,{label:"admin"})]),_:1},8,["modelValue"])])])}}}),k=i(B,[["__scopeId","data-v-9ee3611b"]]);export{k as S};

View File

@ -1 +1 @@
import{j as k,_ as g}from"./index-ONuJaq61.js";import{S as b}from"./SwitchRoles-FnltVz3_.js";import{l as y,ag as l,ap as P,m as s,p as x,U as a,q as r,P as m,M as o,O as t,S as e,u as _,R as p}from"./vue-B9g8wdAH.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const u=n=>{if(Array.isArray(n)&&n.length>0){const{roles:f}=k();return f.some(v=>n.includes(v))}else return console.error("need roles! Like checkPermission(['admin','editor'])"),!1},w={class:"app-container"},z={class:"margin-top-30"},B={class:"margin-top-15"},C={class:"margin-top-30"},N=y({__name:"directive",setup(n){return(f,v)=>{const i=l("el-tag"),c=l("el-tab-pane"),h=l("el-tabs"),d=P("permission");return s(),x("div",w,[a(b),r("div",z,[r("div",null,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['admin']" 所以只有 admin 可以看见这句话 `)]),_:1})),[[d,["admin"]]])]),r("div",null,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['editor']" 所以只有 editor 可以看见这句话 `)]),_:1})),[[d,["editor"]]])]),r("div",B,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['admin', 'editor']" 所以 admin 和 editor 都可以看见这句话 `)]),_:1})),[[d,["admin","editor"]]])])]),r("div",C,[a(i,{type:"warning",size:"large"},{default:t(()=>[e(" 例如 Element Plus 的 el-tab-pane 或 el-table-column 以及其它动态渲染 Dom 的场景不适合使用 v-permission这种情况下你可以通过 v-if 和 checkPermission 来实现: ")]),_:1}),a(h,{type:"border-card",class:"margin-top-15"},{default:t(()=>[_(u)(["admin"])?(s(),o(c,{key:0,label:"admin"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['admin'])"`)]),_:1}),e(" 所以只有 admin 可以看见这句话 ")]),_:1})):p("",!0),_(u)(["editor"])?(s(),o(c,{key:1,label:"editor"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['editor'])"`)]),_:1}),e(" 所以只有 editor 可以看见这句话 ")]),_:1})):p("",!0),_(u)(["admin","editor"])?(s(),o(c,{key:2,label:"admin 和 editor"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['admin', 'editor'])"`)]),_:1}),e(" 所以 admin 和 editor 都可以看见这句话 ")]),_:1})):p("",!0)]),_:1})])])}}}),U=g(N,[["__scopeId","data-v-7b4b436a"]]);export{U as default};
import{j as k,_ as b}from"./index-Bb11-SjF.js";import{S as g}from"./SwitchRoles-DFLaTBSc.js";import{l as y,ah as l,ap as P,m as s,p as x,U as a,q as r,P as m,M as o,O as t,S as e,u as _,R as p}from"./vue-Dve2Dm07.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const u=n=>{if(Array.isArray(n)&&n.length>0){const{roles:f}=k();return f.some(v=>n.includes(v))}else return console.error("need roles! Like checkPermission(['admin','editor'])"),!1},w={class:"app-container"},z={class:"margin-top-30"},B={class:"margin-top-15"},C={class:"margin-top-30"},N=y({__name:"directive",setup(n){return(f,v)=>{const i=l("el-tag"),c=l("el-tab-pane"),h=l("el-tabs"),d=P("permission");return s(),x("div",w,[a(g),r("div",z,[r("div",null,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['admin']" 所以只有 admin 可以看见这句话 `)]),_:1})),[[d,["admin"]]])]),r("div",null,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['editor']" 所以只有 editor 可以看见这句话 `)]),_:1})),[[d,["editor"]]])]),r("div",B,[m((s(),o(i,{type:"success",size:"large",effect:"plain"},{default:t(()=>[e(` 这里采用了 v-permission="['admin', 'editor']" 所以 admin 和 editor 都可以看见这句话 `)]),_:1})),[[d,["admin","editor"]]])])]),r("div",C,[a(i,{type:"warning",size:"large"},{default:t(()=>[e(" 例如 Element Plus 的 el-tab-pane 或 el-table-column 以及其它动态渲染 Dom 的场景不适合使用 v-permission这种情况下你可以通过 v-if 和 checkPermission 来实现: ")]),_:1}),a(h,{type:"border-card",class:"margin-top-15"},{default:t(()=>[_(u)(["admin"])?(s(),o(c,{key:0,label:"admin"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['admin'])"`)]),_:1}),e(" 所以只有 admin 可以看见这句话 ")]),_:1})):p("",!0),_(u)(["editor"])?(s(),o(c,{key:1,label:"editor"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['editor'])"`)]),_:1}),e(" 所以只有 editor 可以看见这句话 ")]),_:1})):p("",!0),_(u)(["admin","editor"])?(s(),o(c,{key:2,label:"admin 和 editor"},{default:t(()=>[e(" 这里采用了 "),a(i,null,{default:t(()=>[e(`v-if="checkPermission(['admin', 'editor'])"`)]),_:1}),e(" 所以 admin 和 editor 都可以看见这句话 ")]),_:1})):p("",!0)]),_:1})])])}}}),U=b(N,[["__scopeId","data-v-7b4b436a"]]);export{U as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.center[data-v-540a7bcc],.center[data-v-e677b768]{height:100%;display:flex;justify-content:center;align-items:center}

View File

@ -1 +1 @@
import{l as r,r as p,ag as t,m as c,p as m,U as o,O as u}from"./vue-B9g8wdAH.js";const _={class:"app-container"},x=r({name:"Menu1-2-2",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"四级路由缓存 - menu1-2-2"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};
import{l as r,r as p,ah as t,m as c,p as m,U as o,O as u}from"./vue-Dve2Dm07.js";const _={class:"app-container"},x=r({name:"Menu1-2-2",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"四级路由缓存 - menu1-2-2"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};

View File

@ -1 +1 @@
import{l as t,aC as r,aD as a,m as o,p as s}from"./vue-B9g8wdAH.js";const _=t({__name:"index",setup(n){const e=r();return a().replace({path:"/"+e.params.path,query:e.query}),(p,c)=>(o(),s("div"))}});export{_ as default};
import{l as t,aC as r,aD as a,m as o,p as s}from"./vue-Dve2Dm07.js";const _=t({__name:"index",setup(n){const e=r();return a().replace({path:"/"+e.params.path,query:e.query}),(p,c)=>(o(),s("div"))}});export{_ as default};

View File

@ -1 +1 @@
import{i as e}from"./index-ONuJaq61.js";function r(t){return e({url:"table",method:"post",data:t})}function u(t){return e({url:`table/${t}`,method:"delete"})}function l(t){return e({url:"table",method:"put",data:t})}function n(t){return e({url:"table",method:"get",params:t})}export{r as c,u as d,n as g,l as u};
import{i as e}from"./index-Bb11-SjF.js";function r(t){return e({url:"table",method:"post",data:t})}function u(t){return e({url:`table/${t}`,method:"delete"})}function l(t){return e({url:"table",method:"put",data:t})}function n(t){return e({url:"table",method:"get",params:t})}export{r as c,u as d,n as g,l as u};

View File

@ -1 +1 @@
import{_ as e}from"./index-ONuJaq61.js";import{m as o,p as n,q as t}from"./vue-B9g8wdAH.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const a={},i={"h-full":"","uno-padding-20":""},s=t("div",{"h-full":"","text-center":"",flex:"","select-none":"","all:transition-400":""},[t("div",{ma:""},[t("div",{"text-5xl":"",fw100:"","animate-bounce-alt":"","animate-count-infinite":"","animate-1s":""},"UnoCSS"),t("div",{op30:"","dark:op60":"","text-lg":"",fw300:"",m1:""},"该页面是一个 UnoCSS 的使用案例,其他页面依旧采用 Scss"),t("div",{m2:"",flex:"","justify-center":"","text-lg":"",op30:"","dark:op60":"",hover:"op80","dark:hover":"op80"},[t("a",{href:"https://antfu.me/posts/reimagine-atomic-css-zh",target:"_blank"},"推荐阅读:重新构想原子化 CSS")])])],-1),r=[s];function c(d,l){return o(),n("div",i,r)}const h=e(a,[["render",c]]);export{h as default};
import{_ as e}from"./index-Bb11-SjF.js";import{m as o,p as n,q as t}from"./vue-Dve2Dm07.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const a={},i={"h-full":"","uno-padding-20":""},s=t("div",{"h-full":"","text-center":"",flex:"","select-none":"","all:transition-400":""},[t("div",{ma:""},[t("div",{"text-5xl":"",fw100:"","animate-bounce-alt":"","animate-count-infinite":"","animate-1s":""},"UnoCSS"),t("div",{op30:"","dark:op60":"","text-lg":"",fw300:"",m1:""},"该页面是一个 UnoCSS 的使用案例,其他页面依旧采用 Scss"),t("div",{m2:"",flex:"","justify-center":"","text-lg":"",op30:"","dark:op60":"",hover:"op80","dark:hover":"op80"},[t("a",{href:"https://antfu.me/posts/reimagine-atomic-css-zh",target:"_blank"},"推荐阅读:重新构想原子化 CSS")])])],-1),r=[s];function c(d,l){return o(),n("div",i,r)}const h=e(a,[["render",c]]);export{h as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{_ as s}from"./index-ONuJaq61.js";import{ag as e,m as _,p as i,q as p,S as o,U as t,O as n}from"./vue-B9g8wdAH.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const l={},m={class:"app-container"};function d(u,f){const r=e("el-link"),a=e("router-view"),c=e("el-card");return _(),i("div",m,[p("h4",null,[o(" 三级及其以上路由缓存功能默认关闭,需要请前往此配置文件中打开: "),t(r,{type:"primary",href:"https://github.com/un-pany/v3-admin-vite/blob/main/src/config/route.ts",target:"_blank"},{default:n(()=>[o(" src/config/route.ts ")]),_:1})]),t(c,{header:"二级路由 - menu1"},{default:n(()=>[t(a)]),_:1})])}const g=s(l,[["render",d],["__scopeId","data-v-6b5ec9cb"]]);export{g as default};
import{_ as s}from"./index-Bb11-SjF.js";import{ah as e,m as _,p as i,q as p,S as o,U as t,O as n}from"./vue-Dve2Dm07.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const l={},m={class:"app-container"};function d(u,f){const r=e("el-link"),a=e("router-view"),c=e("el-card");return _(),i("div",m,[p("h4",null,[o(" 三级及其以上路由缓存功能默认关闭,需要请前往此配置文件中打开: "),t(r,{type:"primary",href:"https://github.com/un-pany/v3-admin-vite/blob/main/src/config/route.ts",target:"_blank"},{default:n(()=>[o(" src/config/route.ts ")]),_:1})]),t(c,{header:"二级路由 - menu1"},{default:n(()=>[t(a)]),_:1})])}const k=s(l,[["render",d],["__scopeId","data-v-6b5ec9cb"]]);export{k as default};

View File

@ -1 +1 @@
import{l as r,r as p,ag as t,m as c,p as m,U as o,O as u}from"./vue-B9g8wdAH.js";const _={class:"app-container"},x=r({name:"Menu1-3",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"三级路由缓存 - menu1-3"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};
import{l as r,r as p,ah as t,m as c,p as m,U as o,O as u}from"./vue-Dve2Dm07.js";const _={class:"app-container"},x=r({name:"Menu1-3",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"三级路由缓存 - menu1-3"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};

View File

@ -1 +1 @@
import{l as V,m as F,p as b,I as U,aL as R,r as u,aD as q,Z as M,ag as n,U as e,u as l,q as p,O as s,a2 as N,S as E,a8 as L,aH as O,aI as $}from"./vue-B9g8wdAH.js";import{_ as B,f as D,e as K}from"./index-ONuJaq61.js";import{v as A,w as H,x as J,y as T,z as Z}from"./element-lTbKEsR_.js";import{_ as j}from"./index.vue_vue_type_script_setup_true_lang-0tPMAp1P.js";import"./vxe-CXjRjlGF.js";const G="/v3-admin-vite/static/logo-text-2-CVewf8RJ.png",P=R('<div class="hand-down-left" data-v-957a4d98></div><div class="hand-down-right" data-v-957a4d98></div><div class="hand-up-left" data-v-957a4d98></div><div class="hand-up-right" data-v-957a4d98></div><div class="close-eyes" data-v-957a4d98></div>',5),Q=[P],W=V({__name:"Owl",props:{closeEyes:{type:Boolean}},setup(o){const c=o;return(m,h)=>(F(),b("div",{class:U(["owl",{"owl-password":c.closeEyes}])},Q,2))}}),X=B(W,[["__scopeId","data-v-957a4d98"]]);function Y(){const o=u(!1);return{isFocus:o,handleBlur:()=>{o.value=!1},handleFocus:()=>{o.value=!0}}}const ee=o=>(O("data-v-00fec942"),o=o(),$(),o),oe={class:"login-container"},ae={class:"login-card"},se=ee(()=>p("div",{class:"title"},[p("img",{src:G})],-1)),te={class:"content"},le=V({__name:"index",setup(o){const c=q(),{isFocus:m,handleBlur:h,handleFocus:C}=Y(),w=u(null),_=u(!1),f=u(""),a=M({username:"admin",password:"12345678",code:""}),k={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:8,max:16,message:"长度在 8 到 16 个字符",trigger:"blur"}],code:[{required:!0,message:"请输入验证码",trigger:"blur"}]},x=()=>{var r;(r=w.value)==null||r.validate((t,d)=>{t?(_.value=!0,K().login(a).then(()=>{c.push({path:"/"})}).catch(()=>{g(),a.password=""}).finally(()=>{_.value=!1})):console.error("表单校验不通过",d)})},g=()=>{a.code="",f.value="",D().then(r=>{f.value=r.data})};return g(),(r,t)=>{const d=n("el-input"),v=n("el-form-item"),y=n("el-icon"),I=n("el-image"),z=n("el-button"),S=n("el-form");return F(),b("div",oe,[e(j,{class:"theme-switch"}),e(X,{"close-eyes":l(m)},null,8,["close-eyes"]),p("div",ae,[se,p("div",te,[e(S,{ref_key:"loginFormRef",ref:w,model:a,rules:k,onKeyup:L(x,["enter"])},{default:s(()=>[e(v,{prop:"username"},{default:s(()=>[e(d,{modelValue:a.username,"onUpdate:modelValue":t[0]||(t[0]=i=>a.username=i),modelModifiers:{trim:!0},placeholder:"用户名",type:"text",tabindex:"1","prefix-icon":l(A),size:"large"},null,8,["modelValue","prefix-icon"])]),_:1}),e(v,{prop:"password"},{default:s(()=>[e(d,{modelValue:a.password,"onUpdate:modelValue":t[1]||(t[1]=i=>a.password=i),modelModifiers:{trim:!0},placeholder:"密码",type:"password",tabindex:"2","prefix-icon":l(H),size:"large","show-password":"",onBlur:l(h),onFocus:l(C)},null,8,["modelValue","prefix-icon","onBlur","onFocus"])]),_:1}),e(v,{prop:"code"},{default:s(()=>[e(d,{modelValue:a.code,"onUpdate:modelValue":t[2]||(t[2]=i=>a.code=i),modelModifiers:{trim:!0},placeholder:"验证码",type:"text",tabindex:"3","prefix-icon":l(J),maxlength:"7",size:"large"},{append:s(()=>[e(I,{src:f.value,onClick:g,draggable:"false"},{placeholder:s(()=>[e(y,null,{default:s(()=>[e(l(T))]),_:1})]),error:s(()=>[e(y,null,{default:s(()=>[e(l(Z))]),_:1})]),_:1},8,["src"])]),_:1},8,["modelValue","prefix-icon"])]),_:1}),e(z,{loading:_.value,type:"primary",size:"large",onClick:N(x,["prevent"])},{default:s(()=>[E("登 录")]),_:1},8,["loading"])]),_:1},8,["model"])])])])}}}),ue=B(le,[["__scopeId","data-v-00fec942"]]);export{ue as default};
import{l as V,m as F,p as b,I as U,aL as R,r as u,aD as q,Z as M,ah as n,U as e,u as l,q as p,O as s,a2 as N,S as E,a8 as L,aH as O,aI as $}from"./vue-Dve2Dm07.js";import{_ as B,f as D,e as K}from"./index-Bb11-SjF.js";import{v as A,w as H,x as J,y as T,z as Z}from"./element-BBBeT0ZC.js";import{_ as j}from"./index.vue_vue_type_script_setup_true_lang-CmdgL6bz.js";import"./vxe-c8uSECIy.js";const G="/v3-admin-vite/static/logo-text-2-CVewf8RJ.png",P=R('<div class="hand-down-left" data-v-957a4d98></div><div class="hand-down-right" data-v-957a4d98></div><div class="hand-up-left" data-v-957a4d98></div><div class="hand-up-right" data-v-957a4d98></div><div class="close-eyes" data-v-957a4d98></div>',5),Q=[P],W=V({__name:"Owl",props:{closeEyes:{type:Boolean}},setup(o){const c=o;return(m,h)=>(F(),b("div",{class:U(["owl",{"owl-password":c.closeEyes}])},Q,2))}}),X=B(W,[["__scopeId","data-v-957a4d98"]]);function Y(){const o=u(!1);return{isFocus:o,handleBlur:()=>{o.value=!1},handleFocus:()=>{o.value=!0}}}const ee=o=>(O("data-v-00fec942"),o=o(),$(),o),oe={class:"login-container"},ae={class:"login-card"},se=ee(()=>p("div",{class:"title"},[p("img",{src:G})],-1)),te={class:"content"},le=V({__name:"index",setup(o){const c=q(),{isFocus:m,handleBlur:h,handleFocus:C}=Y(),w=u(null),_=u(!1),f=u(""),a=M({username:"admin",password:"12345678",code:""}),k={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:8,max:16,message:"长度在 8 到 16 个字符",trigger:"blur"}],code:[{required:!0,message:"请输入验证码",trigger:"blur"}]},x=()=>{var r;(r=w.value)==null||r.validate((t,d)=>{t?(_.value=!0,K().login(a).then(()=>{c.push({path:"/"})}).catch(()=>{g(),a.password=""}).finally(()=>{_.value=!1})):console.error("表单校验不通过",d)})},g=()=>{a.code="",f.value="",D().then(r=>{f.value=r.data})};return g(),(r,t)=>{const d=n("el-input"),v=n("el-form-item"),y=n("el-icon"),I=n("el-image"),z=n("el-button"),S=n("el-form");return F(),b("div",oe,[e(j,{class:"theme-switch"}),e(X,{"close-eyes":l(m)},null,8,["close-eyes"]),p("div",ae,[se,p("div",te,[e(S,{ref_key:"loginFormRef",ref:w,model:a,rules:k,onKeyup:L(x,["enter"])},{default:s(()=>[e(v,{prop:"username"},{default:s(()=>[e(d,{modelValue:a.username,"onUpdate:modelValue":t[0]||(t[0]=i=>a.username=i),modelModifiers:{trim:!0},placeholder:"用户名",type:"text",tabindex:"1","prefix-icon":l(A),size:"large"},null,8,["modelValue","prefix-icon"])]),_:1}),e(v,{prop:"password"},{default:s(()=>[e(d,{modelValue:a.password,"onUpdate:modelValue":t[1]||(t[1]=i=>a.password=i),modelModifiers:{trim:!0},placeholder:"密码",type:"password",tabindex:"2","prefix-icon":l(H),size:"large","show-password":"",onBlur:l(h),onFocus:l(C)},null,8,["modelValue","prefix-icon","onBlur","onFocus"])]),_:1}),e(v,{prop:"code"},{default:s(()=>[e(d,{modelValue:a.code,"onUpdate:modelValue":t[2]||(t[2]=i=>a.code=i),modelModifiers:{trim:!0},placeholder:"验证码",type:"text",tabindex:"3","prefix-icon":l(J),maxlength:"7",size:"large"},{append:s(()=>[e(I,{src:f.value,onClick:g,draggable:"false"},{placeholder:s(()=>[e(y,null,{default:s(()=>[e(l(T))]),_:1})]),error:s(()=>[e(y,null,{default:s(()=>[e(l(Z))]),_:1})]),_:1},8,["src"])]),_:1},8,["modelValue","prefix-icon"])]),_:1}),e(z,{loading:_.value,type:"primary",size:"large",onClick:N(x,["prevent"])},{default:s(()=>[E("登 录")]),_:1},8,["loading"])]),_:1},8,["model"])])])])}}}),ue=B(le,[["__scopeId","data-v-00fec942"]]);export{ue as default};

1
static/index-CEDUVbS7.js Normal file
View File

@ -0,0 +1 @@
import{_ as n}from"./index-Bb11-SjF.js";import{ah as e,m as c,p as a,U as o,O as s}from"./vue-Dve2Dm07.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const _={},i={class:"app-container"};function m(p,d){const t=e("router-view"),r=e("el-card");return c(),a("div",i,[o(r,{header:"三级路由 - menu1-2"},{default:s(()=>[o(t)]),_:1})])}const x=n(_,[["render",m]]);export{x as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{_ as c,e as a}from"./index-ONuJaq61.js";import{ag as s,m as n,p as r,U as _,l as i,M as p,Q as m,u as d}from"./vue-B9g8wdAH.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const l={},u={class:"app-container center"};function f(t,o){const e=s("el-empty");return n(),r("div",u,[_(e,{description:"Admin 权限可见"})])}const v=c(l,[["render",f],["__scopeId","data-v-540a7bcc"]]),x={},h={class:"app-container center"};function y(t,o){const e=s("el-empty");return n(),r("div",h,[_(e,{description:"Editor 权限可见"})])}const $=c(x,[["render",y],["__scopeId","data-v-e677b768"]]),b=i({__name:"index",setup(t){const e=a().roles.includes("admin");return(k,A)=>(n(),p(m(d(e)?v:$)))}});export{b as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
static/index-D9RYm2p-.js Normal file
View File

@ -0,0 +1 @@
import{_ as c,e as _}from"./index-Bb11-SjF.js";import{ah as s,m as n,p as r,U as a,l as i,M as p,Q as d,u as m}from"./vue-Dve2Dm07.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const f={},l={class:"app-container center"};function u(t,o){const e=s("el-empty");return n(),r("div",l,[a(e,{description:"欢迎来到 admin 角色专属首页"})])}const h=c(f,[["render",u],["__scopeId","data-v-7644c57f"]]),v={},x={class:"app-container center"};function y(t,o){const e=s("el-empty");return n(),r("div",x,[a(e,{description:"欢迎来到 editor 角色专属首页"})])}const $=c(v,[["render",y],["__scopeId","data-v-1ffd0ab5"]]),I=i({__name:"index",setup(t){const e=_().roles.includes("admin");return(k,B)=>(n(),p(d(m(e)?h:$)))}});export{I as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{l as r,r as p,ag as t,m as c,p as m,U as o,O as u}from"./vue-B9g8wdAH.js";const _={class:"app-container"},x=r({name:"Menu2",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"二级路由缓存 - menu2"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};
import{l as r,r as p,ah as t,m as c,p as m,U as o,O as u}from"./vue-Dve2Dm07.js";const _={class:"app-container"},x=r({name:"Menu2",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"二级路由缓存 - menu2"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};

View File

@ -1 +0,0 @@
import{_ as n}from"./index-ONuJaq61.js";import{ag as e,m as c,p as a,U as o,O as s}from"./vue-B9g8wdAH.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const _={},i={class:"app-container"};function m(p,d){const t=e("router-view"),r=e("el-card");return c(),a("div",i,[o(r,{header:"三级路由 - menu1-2"},{default:s(()=>[o(t)]),_:1})])}const h=n(_,[["render",m]]);export{h as default};

View File

@ -0,0 +1 @@
.center[data-v-7644c57f],.center[data-v-1ffd0ab5]{height:100%;display:flex;justify-content:center;align-items:center}

View File

@ -1 +1 @@
import{l as r,r as p,ag as t,m as c,p as m,U as o,O as u}from"./vue-B9g8wdAH.js";const _={class:"app-container"},x=r({name:"Menu1-1",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"三级路由缓存 - menu1-1"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};
import{l as r,r as p,ah as t,m as c,p as m,U as o,O as u}from"./vue-Dve2Dm07.js";const _={class:"app-container"},x=r({name:"Menu1-1",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"三级路由缓存 - menu1-1"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};

View File

@ -1 +1 @@
import{l as r,r as p,ag as t,m as c,p as m,U as o,O as u}from"./vue-B9g8wdAH.js";const _={class:"app-container"},x=r({name:"Menu1-2-1",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"四级路由缓存 - menu1-2-1"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};
import{l as r,r as p,ah as t,m as c,p as m,U as o,O as u}from"./vue-Dve2Dm07.js";const _={class:"app-container"},x=r({name:"Menu1-2-1",__name:"index",setup(d){const e=p("");return(i,n)=>{const a=t("el-input"),l=t("el-card");return c(),m("div",_,[o(l,{header:"四级路由缓存 - menu1-2-1"},{default:u(()=>[o(a,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1})])}}});export{x as default};

View File

@ -1 +1 @@
import{h as k}from"./index-ONuJaq61.js";import{A as g}from"./element-lTbKEsR_.js";import{l as h,ag as o,m as l,M as m,O as e,U as n,p as C,a7 as x,u as t,F as B,q as s,T}from"./vue-B9g8wdAH.js";const V=h({__name:"index",setup(b){const{themeList:c,activeThemeName:d,setTheme:r}=k();return(v,N)=>{const _=o("el-icon"),p=o("el-tooltip"),i=o("el-dropdown-item"),u=o("el-dropdown-menu"),f=o("el-dropdown");return l(),m(f,{trigger:"click",onCommand:t(r)},{dropdown:e(()=>[n(u,null,{default:e(()=>[(l(!0),C(B,null,x(t(c),(a,w)=>(l(),m(i,{key:w,disabled:t(d)===a.name,command:a.name},{default:e(()=>[s("span",null,T(a.title),1)]),_:2},1032,["disabled","command"]))),128))]),_:1})]),default:e(()=>[s("div",null,[n(p,{effect:"dark",content:"主题模式",placement:"bottom"},{default:e(()=>[n(_,{size:20},{default:e(()=>[n(t(g))]),_:1})]),_:1})])]),_:1},8,["onCommand"])}}});export{V as _};
import{h as k}from"./index-Bb11-SjF.js";import{A as h}from"./element-BBBeT0ZC.js";import{l as g,ah as o,m as l,M as m,O as e,U as n,p as C,a7 as x,u as t,F as B,q as s,T}from"./vue-Dve2Dm07.js";const V=g({__name:"index",setup(b){const{themeList:c,activeThemeName:d,setTheme:r}=k();return(v,N)=>{const _=o("el-icon"),p=o("el-tooltip"),i=o("el-dropdown-item"),u=o("el-dropdown-menu"),f=o("el-dropdown");return l(),m(f,{trigger:"click",onCommand:t(r)},{dropdown:e(()=>[n(u,null,{default:e(()=>[(l(!0),C(B,null,x(t(c),(a,w)=>(l(),m(i,{key:w,disabled:t(d)===a.name,command:a.name},{default:e(()=>[s("span",null,T(a.title),1)]),_:2},1032,["disabled","command"]))),128))]),_:1})]),default:e(()=>[s("div",null,[n(p,{effect:"dark",content:"主题模式",placement:"bottom"},{default:e(()=>[n(_,{size:20},{default:e(()=>[n(t(h))]),_:1})]),_:1})])]),_:1},8,["onCommand"])}}});export{V as _};

View File

@ -1 +0,0 @@
.el-tag[data-v-44bb85fa]{margin-top:15px}

View File

@ -1 +0,0 @@
import{S as a}from"./SwitchRoles-FnltVz3_.js";import{l as o,ag as s,m as n,p as r,U as e,O as p,S as c}from"./vue-B9g8wdAH.js";import{_}from"./index-ONuJaq61.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const m={class:"app-container"},i=o({__name:"page",setup(l){return(d,f)=>{const t=s("el-tag");return n(),r("div",m,[e(a),e(t,{type:"warning",size:"large"},{default:p(()=>[c("当前页面只有 admin 权限可见,切换权限后将不能进入该页面")]),_:1})])}}}),w=_(i,[["__scopeId","data-v-44bb85fa"]]);export{w as default};

1
static/page-CvWcAnnP.js Normal file
View File

@ -0,0 +1 @@
import{S as a}from"./SwitchRoles-DFLaTBSc.js";import{l as o,ah as s,m as n,p as r,U as e,O as p,S as c}from"./vue-Dve2Dm07.js";import{_}from"./index-Bb11-SjF.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const m={class:"app-container"},i=o({__name:"page",setup(l){return(d,f)=>{const t=s("el-tag");return n(),r("div",m,[e(a),e(t,{type:"warning",size:"large"},{default:p(()=>[c("当前页面只有 admin 角色可见,切换角色后将不能进入该页面")]),_:1})])}}}),w=_(i,[["__scopeId","data-v-70c1e438"]]);export{w as default};

1
static/page-D_JSdlLP.css Normal file
View File

@ -0,0 +1 @@
.el-tag[data-v-70c1e438]{margin-top:15px}

View File

@ -1 +1 @@
import{r as c,d as S,l as V,ag as r,m as i,p as _,U as m,O as b,F as E,a7 as k,u as a,B as f,q as d,M as B,K as C}from"./vue-B9g8wdAH.js";function w(s){const{api:l}=s,t=c(!1),e=c([]),p=c(""),o=()=>{t.value=!0,e.value=[],l().then(u=>{e.value=u.data}).finally(()=>{t.value=!1})};return S(()=>{o()}),{loading:t,options:e,value:p}}const x={code:0,data:[{label:"苹果",value:1},{label:"香蕉",value:2},{label:"橘子",value:3,disabled:!0}],message:"获取 Select 数据成功"};function A(){return new Promise((s,l)=>{setTimeout(()=>{Math.random()<.8?s(x):l(new Error("接口发生错误"))},2e3)})}const D={class:"app-container"},F=d("h4",null,"该示例是演示:通过 hook 自动调用 api 后拿到 Select 组件需要的数据并传递给 Select 组件",-1),M=d("h5",null,"Select 示例",-1),N=d("h5",null,"Select V2 示例(如果数据量过多,可以选择该组件)",-1),T=V({__name:"use-fetch-select",setup(s){const{loading:l,options:t,value:e}=w({api:A});return(p,o)=>{const u=r("el-option"),v=r("el-select"),h=r("el-select-v2");return i(),_("div",D,[F,M,m(v,{loading:a(l),modelValue:a(e),"onUpdate:modelValue":o[0]||(o[0]=n=>f(e)?e.value=n:null),filterable:""},{default:b(()=>[(i(!0),_(E,null,k(a(t),(n,g)=>(i(),B(u,C(n,{key:g,placeholder:"请选择"}),null,16))),128))]),_:1},8,["loading","modelValue"]),N,m(h,{loading:a(l),modelValue:a(e),"onUpdate:modelValue":o[1]||(o[1]=n=>f(e)?e.value=n:null),options:a(t),filterable:"",placeholder:"请选择"},null,8,["loading","modelValue","options"])])}}});export{T as default};
import{r as c,d as S,l as V,ah as r,m as i,p as _,U as m,O as b,F as E,a7 as k,u as a,B as f,q as d,M as B,K as C}from"./vue-Dve2Dm07.js";function w(s){const{api:l}=s,t=c(!1),e=c([]),p=c(""),o=()=>{t.value=!0,e.value=[],l().then(u=>{e.value=u.data}).finally(()=>{t.value=!1})};return S(()=>{o()}),{loading:t,options:e,value:p}}const x={code:0,data:[{label:"苹果",value:1},{label:"香蕉",value:2},{label:"橘子",value:3,disabled:!0}],message:"获取 Select 数据成功"};function A(){return new Promise((s,l)=>{setTimeout(()=>{Math.random()<.8?s(x):l(new Error("接口发生错误"))},2e3)})}const D={class:"app-container"},F=d("h4",null,"该示例是演示:通过 hook 自动调用 api 后拿到 Select 组件需要的数据并传递给 Select 组件",-1),M=d("h5",null,"Select 示例",-1),N=d("h5",null,"Select V2 示例(如果数据量过多,可以选择该组件)",-1),T=V({__name:"use-fetch-select",setup(s){const{loading:l,options:t,value:e}=w({api:A});return(p,o)=>{const u=r("el-option"),v=r("el-select"),h=r("el-select-v2");return i(),_("div",D,[F,M,m(v,{loading:a(l),modelValue:a(e),"onUpdate:modelValue":o[0]||(o[0]=n=>f(e)?e.value=n:null),filterable:""},{default:b(()=>[(i(!0),_(E,null,k(a(t),(n,g)=>(i(),B(u,C(n,{key:g,placeholder:"请选择"}),null,16))),128))]),_:1},8,["loading","modelValue"]),N,m(h,{loading:a(l),modelValue:a(e),"onUpdate:modelValue":o[1]||(o[1]=n=>f(e)?e.value=n:null),options:a(t),filterable:"",placeholder:"请选择"},null,8,["loading","modelValue","options"])])}}});export{T as default};

View File

@ -1,4 +1,4 @@
import{I as d,b as n}from"./element-lTbKEsR_.js";import{l as p,ag as _,m,p as g,U as c,O as i,S as l,q as f}from"./vue-B9g8wdAH.js";const y={lock:!0,text:"加载中..."},u=(s,e={})=>{let t;return async(...a)=>{try{return t=d.service({...y,...e}),await s(...a)}finally{t==null||t.close()}}},h={code:0,data:{list:[]},message:"获取成功"};function k(s){return new Promise(e=>{setTimeout(()=>{e({...h,data:{list:s}})},1e3)})}function w(){return new Promise((s,e)=>{setTimeout(()=>{e(new Error("发生错误"))},1e3)})}const C={class:"app-container"},E=f("h4",null,"该示例是演示:通过将要执行的函数传递给 hook让 hook 自动开启全屏 loading函数执行结束后自动关闭 loading",-1),S=`
import{I as d,b as n}from"./element-BBBeT0ZC.js";import{l as p,ah as _,m,p as g,U as c,O as i,S as l,q as f}from"./vue-Dve2Dm07.js";const h={lock:!0,text:"加载中..."},u=(s,e={})=>{let t;return async(...a)=>{try{return t=d.service({...h,...e}),await s(...a)}finally{t==null||t.close()}}},y={code:0,data:{list:[]},message:"获取成功"};function k(s){return new Promise(e=>{setTimeout(()=>{e({...y,data:{list:s}})},1e3)})}function w(){return new Promise((s,e)=>{setTimeout(()=>{e(new Error("发生错误"))},1e3)})}const C={class:"app-container"},E=f("h4",null,"该示例是演示:通过将要执行的函数传递给 hook让 hook 自动开启全屏 loading函数执行结束后自动关闭 loading",-1),S=`
<path class="path" d="
M 30 15
L 28 17

View File

@ -1 +1 @@
import{u as f}from"./useWatermark-CD8Mbb_-.js";import{l as C,r as v,ag as m,m as y,p as b,q as i,U as t,O as a,u as r,S as l,aH as W,aI as g}from"./vue-B9g8wdAH.js";import{_ as w}from"./index-ONuJaq61.js";import"./element-lTbKEsR_.js";import"./vxe-CXjRjlGF.js";const x=n=>(W("data-v-dbeea05d"),n=n(),g(),n),I={class:"app-container"},$=x(()=>i("h4",null," 该示例是演示:通过调用 hook开启或关闭水印 支持局部、全局、自定义样式(颜色、透明度、字体大小、字体、倾斜角度等),并自带防御(防删、防隐藏)和自适应功能 ",-1)),S=C({__name:"use-watermark",setup(n){const p=v(null),{setWatermark:c,clearWatermark:_}=f(p),{setWatermark:d,clearWatermark:k}=f();return(B,e)=>{const o=m("el-button"),u=m("el-button-group");return y(),b("div",I,[$,i("div",{ref_key:"localRef",ref:p,class:"local"},null,512),t(u,null,{default:a(()=>[t(o,{type:"primary",onClick:e[0]||(e[0]=s=>r(c)("局部水印",{color:"#409eff"}))},{default:a(()=>[l("创建局部水印")]),_:1}),t(o,{type:"warning",onClick:e[1]||(e[1]=s=>r(c)("没有防御功能的局部水印",{color:"#e6a23c",defense:!1}))},{default:a(()=>[l(" 关闭防御功能 ")]),_:1}),t(o,{type:"danger",onClick:r(_)},{default:a(()=>[l("清除局部水印")]),_:1},8,["onClick"])]),_:1}),t(u,null,{default:a(()=>[t(o,{type:"primary",onClick:e[2]||(e[2]=s=>r(d)("全局水印",{color:"#409eff"}))},{default:a(()=>[l("创建全局水印")]),_:1}),t(o,{type:"warning",onClick:e[3]||(e[3]=s=>r(d)("没有防御功能的全局水印",{color:"#e6a23c",defense:!1}))},{default:a(()=>[l(" 关闭防御功能 ")]),_:1}),t(o,{type:"danger",onClick:r(k)},{default:a(()=>[l("清除全局水印")]),_:1},8,["onClick"])]),_:1})])}}}),E=w(S,[["__scopeId","data-v-dbeea05d"]]);export{E as default};
import{u as f}from"./useWatermark-2w3sZXvr.js";import{l as C,r as v,ah as m,m as y,p as b,q as i,U as t,O as a,u as r,S as l,aH as W,aI as g}from"./vue-Dve2Dm07.js";import{_ as w}from"./index-Bb11-SjF.js";import"./element-BBBeT0ZC.js";import"./vxe-c8uSECIy.js";const x=n=>(W("data-v-dbeea05d"),n=n(),g(),n),I={class:"app-container"},$=x(()=>i("h4",null," 该示例是演示:通过调用 hook开启或关闭水印 支持局部、全局、自定义样式(颜色、透明度、字体大小、字体、倾斜角度等),并自带防御(防删、防隐藏)和自适应功能 ",-1)),S=C({__name:"use-watermark",setup(n){const p=v(null),{setWatermark:c,clearWatermark:_}=f(p),{setWatermark:d,clearWatermark:k}=f();return(B,e)=>{const o=m("el-button"),u=m("el-button-group");return y(),b("div",I,[$,i("div",{ref_key:"localRef",ref:p,class:"local"},null,512),t(u,null,{default:a(()=>[t(o,{type:"primary",onClick:e[0]||(e[0]=s=>r(c)("局部水印",{color:"#409eff"}))},{default:a(()=>[l("创建局部水印")]),_:1}),t(o,{type:"warning",onClick:e[1]||(e[1]=s=>r(c)("没有防御功能的局部水印",{color:"#e6a23c",defense:!1}))},{default:a(()=>[l(" 关闭防御功能 ")]),_:1}),t(o,{type:"danger",onClick:r(_)},{default:a(()=>[l("清除局部水印")]),_:1},8,["onClick"])]),_:1}),t(u,null,{default:a(()=>[t(o,{type:"primary",onClick:e[2]||(e[2]=s=>r(d)("全局水印",{color:"#409eff"}))},{default:a(()=>[l("创建全局水印")]),_:1}),t(o,{type:"warning",onClick:e[3]||(e[3]=s=>r(d)("没有防御功能的全局水印",{color:"#e6a23c",defense:!1}))},{default:a(()=>[l(" 关闭防御功能 ")]),_:1}),t(o,{type:"danger",onClick:r(k)},{default:a(()=>[l("清除全局水印")]),_:1},8,["onClick"])]),_:1})])}}}),q=w(S,[["__scopeId","data-v-dbeea05d"]]);export{q as default};

View File

@ -1 +1 @@
import{n as u}from"./element-lTbKEsR_.js";import{r as x,z as C}from"./vue-B9g8wdAH.js";const L={defense:!0,color:"#c0c4cc",opacity:.5,size:16,family:"serif",angle:-20,width:300,height:200},E=x(document.body);function $(n=E){let v,d,t=null;const r={watermarkElMutationObserver:void 0,parentElMutationObserver:void 0,parentElResizeObserver:void 0},O=(e,a={})=>{if(!n.value){console.warn("请在 DOM 挂载完成后再调用 setWatermark 方法设置水印");return}v=e,d={...L,...a},t?b():f(),m(n.value)},f=()=>{const e=n.value.tagName.toLowerCase()===E.value.tagName.toLowerCase(),a=e?"fixed":"absolute",i=e?"":"relative";t=document.createElement("div"),t.style.pointerEvents="none",t.style.top="0",t.style.left="0",t.style.position=a,t.style.zIndex="99999";const{clientWidth:s,clientHeight:l}=n.value;b({width:s,height:l}),n.value.style.position=i,n.value.appendChild(t)},b=(e={})=>{t&&(v&&(t.style.background=`url(${y()}) left top repeat`),e.width&&(t.style.width=`${e.width}px`),e.height&&(t.style.height=`${e.height}px`))},y=()=>{const{color:e,opacity:a,size:i,family:s,angle:l,width:z,height:w}=d,c=document.createElement("canvas");c.width=z,c.height=w;const o=c.getContext("2d");return o&&(o.fillStyle=e,o.globalAlpha=a,o.font=`${i}px ${s}`,o.rotate(Math.PI/180*l),o.fillText(v,0,w/2)),c.toDataURL()},h=()=>{if(!(!n.value||!t)){p();try{n.value.removeChild(t)}catch{console.warn("水印元素已不存在,请重新创建")}finally{t=null}}},g=u(()=>{h(),f(),m(n.value)},100),m=e=>{d.defense?!r.watermarkElMutationObserver&&!r.parentElMutationObserver&&k(e):p("mutation"),r.parentElResizeObserver||M(e)},p=(e="all")=>{var a,i,s;(e==="mutation"||e==="all")&&((a=r.watermarkElMutationObserver)==null||a.disconnect(),r.watermarkElMutationObserver=void 0,(i=r.parentElMutationObserver)==null||i.disconnect(),r.parentElMutationObserver=void 0),(e==="resize"||e==="all")&&((s=r.parentElResizeObserver)==null||s.disconnect(),r.parentElResizeObserver=void 0)},k=e=>{const a=u(i=>{i.forEach(u(s=>{switch(s.type){case"attributes":s.target===t&&g();break;case"childList":s.removedNodes.forEach(l=>{l===t&&e.appendChild(t)});break}},100))},100);r.watermarkElMutationObserver=new MutationObserver(a),r.parentElMutationObserver=new MutationObserver(a),r.watermarkElMutationObserver.observe(t,{attributes:!0,childList:!1,subtree:!1}),r.parentElMutationObserver.observe(e,{attributes:!1,childList:!0,subtree:!1})},M=e=>{const a=u(()=>{const{clientWidth:i,clientHeight:s}=e;b({width:i,height:s})},500);r.parentElResizeObserver=new ResizeObserver(a),r.parentElResizeObserver.observe(e)};return C(()=>{h()}),{setWatermark:O,clearWatermark:h}}export{$ as u};
import{n as u}from"./element-BBBeT0ZC.js";import{r as x,z as C}from"./vue-Dve2Dm07.js";const L={defense:!0,color:"#c0c4cc",opacity:.5,size:16,family:"serif",angle:-20,width:300,height:200},E=x(document.body);function $(n=E){let v,d,t=null;const r={watermarkElMutationObserver:void 0,parentElMutationObserver:void 0,parentElResizeObserver:void 0},O=(e,a={})=>{if(!n.value){console.warn("请在 DOM 挂载完成后再调用 setWatermark 方法设置水印");return}v=e,d={...L,...a},t?b():f(),m(n.value)},f=()=>{const e=n.value.tagName.toLowerCase()===E.value.tagName.toLowerCase(),a=e?"fixed":"absolute",i=e?"":"relative";t=document.createElement("div"),t.style.pointerEvents="none",t.style.top="0",t.style.left="0",t.style.position=a,t.style.zIndex="99999";const{clientWidth:s,clientHeight:l}=n.value;b({width:s,height:l}),n.value.style.position=i,n.value.appendChild(t)},b=(e={})=>{t&&(v&&(t.style.background=`url(${y()}) left top repeat`),e.width&&(t.style.width=`${e.width}px`),e.height&&(t.style.height=`${e.height}px`))},y=()=>{const{color:e,opacity:a,size:i,family:s,angle:l,width:z,height:w}=d,c=document.createElement("canvas");c.width=z,c.height=w;const o=c.getContext("2d");return o&&(o.fillStyle=e,o.globalAlpha=a,o.font=`${i}px ${s}`,o.rotate(Math.PI/180*l),o.fillText(v,0,w/2)),c.toDataURL()},h=()=>{if(!(!n.value||!t)){p();try{n.value.removeChild(t)}catch{console.warn("水印元素已不存在,请重新创建")}finally{t=null}}},g=u(()=>{h(),f(),m(n.value)},100),m=e=>{d.defense?!r.watermarkElMutationObserver&&!r.parentElMutationObserver&&k(e):p("mutation"),r.parentElResizeObserver||M(e)},p=(e="all")=>{var a,i,s;(e==="mutation"||e==="all")&&((a=r.watermarkElMutationObserver)==null||a.disconnect(),r.watermarkElMutationObserver=void 0,(i=r.parentElMutationObserver)==null||i.disconnect(),r.parentElMutationObserver=void 0),(e==="resize"||e==="all")&&((s=r.parentElResizeObserver)==null||s.disconnect(),r.parentElResizeObserver=void 0)},k=e=>{const a=u(i=>{i.forEach(u(s=>{switch(s.type){case"attributes":s.target===t&&g();break;case"childList":s.removedNodes.forEach(l=>{l===t&&e.appendChild(t)});break}},100))},100);r.watermarkElMutationObserver=new MutationObserver(a),r.parentElMutationObserver=new MutationObserver(a),r.watermarkElMutationObserver.observe(t,{attributes:!0,childList:!1,subtree:!1}),r.parentElMutationObserver.observe(e,{attributes:!1,childList:!0,subtree:!1})},M=e=>{const a=u(()=>{const{clientWidth:i,clientHeight:s}=e;b({width:i,height:s})},500);r.parentElResizeObserver=new ResizeObserver(a),r.parentElResizeObserver.observe(e)};return C(()=>{h()}),{setWatermark:O,clearWatermark:h}}export{$ as u};

File diff suppressed because one or more lines are too long

1
static/vue-Dve2Dm07.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long