skyline-vue-admin 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../setup/index.cjs"),a=require("@vueuse/core"),c=require("vue"),l=a.createGlobalState(()=>{const e=a.useLocalStorage(n.skyConfig.tokenName,""),o=a.useLocalStorage(n.skyConfig.usernameName,""),r=c.computed(()=>!!e.value),u=t=>{t.data&&(e.value=t.data.token,o.value=t.data.user.username)},s=()=>{e.value="",o.value=""};return{token:e,username:o,login:u,isLogin:r,logout:()=>{s()},reset:s}});exports.useUser=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../setup/index.cjs"),o=require("@vueuse/core"),c=require("vue"),i=require("./useTheme.cjs"),l=require("./useSize.cjs"),g=require("./useLang.cjs"),m=require("./useTab.cjs"),d=o.createGlobalState(()=>{const e=o.useLocalStorage(u.skyConfig.tokenName,""),s=o.useLocalStorage(u.skyConfig.usernameName,""),a=c.computed(()=>!!e.value),n=t=>{t.data&&(e.value=t.data.token,s.value=t.data.user.username)},r=()=>{e.value="",s.value=""};return{token:e,username:s,login:n,isLogin:a,logout:()=>{i.useTheme().reset(),l.useSize().reset(),g.useLang().reset(),m.useTab().reset(),r()},reset:r}});exports.useUser=d;
2
2
  //# sourceMappingURL=useUser.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useUser.cjs","sources":["../../src/hooks/useUser.ts"],"sourcesContent":["import { skyConfig } from '@/setup'\r\nimport type { LoginResult } from '@/provides'\r\nimport { createGlobalState, useLocalStorage } from '@vueuse/core'\r\nimport { computed } from 'vue'\r\n\r\nexport const useUser = createGlobalState(() => {\r\n const token = useLocalStorage(skyConfig.tokenName, '')\r\n const username = useLocalStorage(skyConfig.usernameName, '')\r\n\r\n const isLogin = computed(() => Boolean(token.value))\r\n\r\n const login = (loginResult: LoginResult) => {\r\n if (loginResult.data) {\r\n token.value = loginResult.data.token\r\n username.value = loginResult.data.user.username\r\n }\r\n }\r\n\r\n const reset = () => {\r\n token.value = ''\r\n username.value = ''\r\n }\r\n\r\n const logout = () => {\r\n reset()\r\n }\r\n\r\n return {\r\n token,\r\n username,\r\n login,\r\n isLogin,\r\n logout,\r\n reset,\r\n }\r\n})\r\n"],"names":["useUser","createGlobalState","token","useLocalStorage","skyConfig","username","isLogin","computed","login","loginResult","reset"],"mappings":"iKAKaA,EAAUC,EAAAA,kBAAkB,IAAM,CAC7C,MAAMC,EAAQC,EAAAA,gBAAgBC,YAAU,UAAW,EAAE,EAC/CC,EAAWF,EAAAA,gBAAgBC,YAAU,aAAc,EAAE,EAErDE,EAAUC,EAAAA,SAAS,IAAM,EAAQL,EAAM,KAAM,EAE7CM,EAASC,GAA6B,CACtCA,EAAY,OACdP,EAAM,MAAQO,EAAY,KAAK,MAC/BJ,EAAS,MAAQI,EAAY,KAAK,KAAK,SAE3C,EAEMC,EAAQ,IAAM,CAClBR,EAAM,MAAQ,GACdG,EAAS,MAAQ,EACnB,EAMA,MAAO,CACL,MAAAH,EACA,SAAAG,EACA,MAAAG,EACA,QAAAF,EACA,OATa,IAAM,CACnBI,EAAA,CACF,EAQE,MAAAA,CAAA,CAEJ,CAAC"}
1
+ {"version":3,"file":"useUser.cjs","sources":["../../src/hooks/useUser.ts"],"sourcesContent":["import { skyConfig } from '@/setup'\nimport type { LoginResult } from '@/provides'\nimport { createGlobalState, useLocalStorage } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useTheme } from './useTheme'\nimport { useSize } from './useSize'\nimport { useLang } from './useLang'\nimport { useTab } from './useTab'\n\nexport const useUser = createGlobalState(() => {\n const token = useLocalStorage(skyConfig.tokenName, '')\n const username = useLocalStorage(skyConfig.usernameName, '')\n\n const isLogin = computed(() => Boolean(token.value))\n\n const login = (loginResult: LoginResult) => {\n if (loginResult.data) {\n token.value = loginResult.data.token\n username.value = loginResult.data.user.username\n }\n }\n\n const reset = () => {\n token.value = ''\n username.value = ''\n }\n\n const logout = () => {\n useTheme().reset()\n useSize().reset()\n useLang().reset()\n useTab().reset()\n reset()\n }\n\n return {\n token,\n username,\n login,\n isLogin,\n logout,\n reset,\n }\n})\n"],"names":["useUser","createGlobalState","token","useLocalStorage","skyConfig","username","isLogin","computed","login","loginResult","reset","useTheme","useSize","useLang","useTab"],"mappings":"6QASaA,EAAUC,EAAAA,kBAAkB,IAAM,CAC7C,MAAMC,EAAQC,EAAAA,gBAAgBC,YAAU,UAAW,EAAE,EAC/CC,EAAWF,EAAAA,gBAAgBC,YAAU,aAAc,EAAE,EAErDE,EAAUC,EAAAA,SAAS,IAAM,EAAQL,EAAM,KAAM,EAE7CM,EAASC,GAA6B,CACtCA,EAAY,OACdP,EAAM,MAAQO,EAAY,KAAK,MAC/BJ,EAAS,MAAQI,EAAY,KAAK,KAAK,SAE3C,EAEMC,EAAQ,IAAM,CAClBR,EAAM,MAAQ,GACdG,EAAS,MAAQ,EACnB,EAUA,MAAO,CACL,MAAAH,EACA,SAAAG,EACA,MAAAG,EACA,QAAAF,EACA,OAba,IAAM,CACnBK,EAAAA,SAAA,EAAW,MAAA,EACXC,EAAAA,QAAA,EAAU,MAAA,EACVC,EAAAA,QAAA,EAAU,MAAA,EACVC,EAAAA,OAAA,EAAS,MAAA,EACTJ,EAAA,CACF,EAQE,MAAAA,CAAA,CAEJ,CAAC"}
@@ -1,24 +1,28 @@
1
- import { skyConfig as r } from "../setup/index.mjs";
2
- import { createGlobalState as m, useLocalStorage as n } from "@vueuse/core";
3
- import { computed as c } from "vue";
4
- const v = m(() => {
5
- const e = n(r.tokenName, ""), o = n(r.usernameName, ""), s = c(() => !!e.value), u = (t) => {
1
+ import { skyConfig as a } from "../setup/index.mjs";
2
+ import { createGlobalState as u, useLocalStorage as s } from "@vueuse/core";
3
+ import { computed as i } from "vue";
4
+ import { useTheme as c } from "./useTheme.mjs";
5
+ import { useSize as f } from "./useSize.mjs";
6
+ import { useLang as p } from "./useLang.mjs";
7
+ import { useTab as l } from "./useTab.mjs";
8
+ const T = u(() => {
9
+ const e = s(a.tokenName, ""), o = s(a.usernameName, ""), m = i(() => !!e.value), n = (t) => {
6
10
  t.data && (e.value = t.data.token, o.value = t.data.user.username);
7
- }, a = () => {
11
+ }, r = () => {
8
12
  e.value = "", o.value = "";
9
13
  };
10
14
  return {
11
15
  token: e,
12
16
  username: o,
13
- login: u,
14
- isLogin: s,
17
+ login: n,
18
+ isLogin: m,
15
19
  logout: () => {
16
- a();
20
+ c().reset(), f().reset(), p().reset(), l().reset(), r();
17
21
  },
18
- reset: a
22
+ reset: r
19
23
  };
20
24
  });
21
25
  export {
22
- v as useUser
26
+ T as useUser
23
27
  };
24
28
  //# sourceMappingURL=useUser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useUser.mjs","sources":["../../src/hooks/useUser.ts"],"sourcesContent":["import { skyConfig } from '@/setup'\r\nimport type { LoginResult } from '@/provides'\r\nimport { createGlobalState, useLocalStorage } from '@vueuse/core'\r\nimport { computed } from 'vue'\r\n\r\nexport const useUser = createGlobalState(() => {\r\n const token = useLocalStorage(skyConfig.tokenName, '')\r\n const username = useLocalStorage(skyConfig.usernameName, '')\r\n\r\n const isLogin = computed(() => Boolean(token.value))\r\n\r\n const login = (loginResult: LoginResult) => {\r\n if (loginResult.data) {\r\n token.value = loginResult.data.token\r\n username.value = loginResult.data.user.username\r\n }\r\n }\r\n\r\n const reset = () => {\r\n token.value = ''\r\n username.value = ''\r\n }\r\n\r\n const logout = () => {\r\n reset()\r\n }\r\n\r\n return {\r\n token,\r\n username,\r\n login,\r\n isLogin,\r\n logout,\r\n reset,\r\n }\r\n})\r\n"],"names":["useUser","createGlobalState","token","useLocalStorage","skyConfig","username","isLogin","computed","login","loginResult","reset"],"mappings":";;;AAKO,MAAMA,IAAUC,EAAkB,MAAM;AAC7C,QAAMC,IAAQC,EAAgBC,EAAU,WAAW,EAAE,GAC/CC,IAAWF,EAAgBC,EAAU,cAAc,EAAE,GAErDE,IAAUC,EAAS,MAAM,EAAQL,EAAM,KAAM,GAE7CM,IAAQ,CAACC,MAA6B;AAC1C,IAAIA,EAAY,SACdP,EAAM,QAAQO,EAAY,KAAK,OAC/BJ,EAAS,QAAQI,EAAY,KAAK,KAAK;AAAA,EAE3C,GAEMC,IAAQ,MAAM;AAClB,IAAAR,EAAM,QAAQ,IACdG,EAAS,QAAQ;AAAA,EACnB;AAMA,SAAO;AAAA,IACL,OAAAH;AAAA,IACA,UAAAG;AAAA,IACA,OAAAG;AAAA,IACA,SAAAF;AAAA,IACA,QATa,MAAM;AACnB,MAAAI,EAAA;AAAA,IACF;AAAA,IAQE,OAAAA;AAAA,EAAA;AAEJ,CAAC;"}
1
+ {"version":3,"file":"useUser.mjs","sources":["../../src/hooks/useUser.ts"],"sourcesContent":["import { skyConfig } from '@/setup'\nimport type { LoginResult } from '@/provides'\nimport { createGlobalState, useLocalStorage } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useTheme } from './useTheme'\nimport { useSize } from './useSize'\nimport { useLang } from './useLang'\nimport { useTab } from './useTab'\n\nexport const useUser = createGlobalState(() => {\n const token = useLocalStorage(skyConfig.tokenName, '')\n const username = useLocalStorage(skyConfig.usernameName, '')\n\n const isLogin = computed(() => Boolean(token.value))\n\n const login = (loginResult: LoginResult) => {\n if (loginResult.data) {\n token.value = loginResult.data.token\n username.value = loginResult.data.user.username\n }\n }\n\n const reset = () => {\n token.value = ''\n username.value = ''\n }\n\n const logout = () => {\n useTheme().reset()\n useSize().reset()\n useLang().reset()\n useTab().reset()\n reset()\n }\n\n return {\n token,\n username,\n login,\n isLogin,\n logout,\n reset,\n }\n})\n"],"names":["useUser","createGlobalState","token","useLocalStorage","skyConfig","username","isLogin","computed","login","loginResult","reset","useTheme","useSize","useLang","useTab"],"mappings":";;;;;;;AASO,MAAMA,IAAUC,EAAkB,MAAM;AAC7C,QAAMC,IAAQC,EAAgBC,EAAU,WAAW,EAAE,GAC/CC,IAAWF,EAAgBC,EAAU,cAAc,EAAE,GAErDE,IAAUC,EAAS,MAAM,EAAQL,EAAM,KAAM,GAE7CM,IAAQ,CAACC,MAA6B;AAC1C,IAAIA,EAAY,SACdP,EAAM,QAAQO,EAAY,KAAK,OAC/BJ,EAAS,QAAQI,EAAY,KAAK,KAAK;AAAA,EAE3C,GAEMC,IAAQ,MAAM;AAClB,IAAAR,EAAM,QAAQ,IACdG,EAAS,QAAQ;AAAA,EACnB;AAUA,SAAO;AAAA,IACL,OAAAH;AAAA,IACA,UAAAG;AAAA,IACA,OAAAG;AAAA,IACA,SAAAF;AAAA,IACA,QAba,MAAM;AACnB,MAAAK,EAAA,EAAW,MAAA,GACXC,EAAA,EAAU,MAAA,GACVC,EAAA,EAAU,MAAA,GACVC,EAAA,EAAS,MAAA,GACTJ,EAAA;AAAA,IACF;AAAA,IAQE,OAAAA;AAAA,EAAA;AAEJ,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("element-plus/es/components/dropdown/style/css");require("element-plus/es/components/dropdown-item/style/css");require("element-plus/es/components/dropdown-menu/style/css");require("element-plus/es/components/icon/style/css");require("element-plus/es/components/menu/style/css");require("element-plus/es/components/menu-item/style/css");require("element-plus/es/components/scrollbar/style/css");require("element-plus/es/components/sub-menu/style/css");require("element-plus/es/components/tab-pane/style/css");require("element-plus/es/components/tabs/style/css");require("element-plus/es/components/text/style/css");const e=require("vue"),h=require("../icons/EpFullScreen.cjs"),z=require("../icons/EpRefresh.cjs"),M=require("../icons/FluentFullScreenMinimize20Regular.cjs"),T=require("../icons/NimbusTextSize.cjs"),D=require("../icons/SkyMenuCollapse.cjs"),I=require("../icons/SlTrans.cjs"),R=require("../hooks/useUser.cjs");require("../hooks/usePermission.cjs");const w=require("../hooks/useMenu.cjs"),L=require("../hooks/useTab.cjs"),F=require("../hooks/useRouteKeepAlive.cjs"),f=require("../hooks/useSize.cjs"),P=require("../hooks/useLang.cjs"),p=require("../hooks/useTheme.cjs");require("../hooks/useList.cjs");require("../hooks/useHiddenTitle.cjs");require("../hooks/useForm.cjs");require("../hooks/useShow.cjs");require("../hooks/useReferenceArrayField.cjs");require("../hooks/useTreeWithDetails.cjs");require("../hooks/useFormGrid.cjs");require("../hooks/useReferenceArrayInput.cjs");const C=require("@vueuse/core"),o=require("element-plus"),k=require("vue-i18n"),v=require("vue-router"),V=require("../setup/index.cjs");function N(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Object]"&&!e.isVNode(t)}const r=e.defineComponent({name:"SkyLayoutPage",setup(){const t=v.useRouter(),a=v.useRoute(),{collapse:u,menus:l}=w.useMenu(),{removeTab:s,lastTab:n,tabs:c}=L.useTab(),{includeList:m,addKeepAlive:y,removeKeepAlive:_}=F.useRouteKeepAlive(),q=g=>{const d=c.value.find(i=>i.routeName===g);d&&t.push({name:d.routeName,params:d.routeParams})},b=g=>{const d=c.value.find(i=>i.routeName===g);d&&(d?.routeKeepAliveName&&_(d.routeKeepAliveName),s(d.routeName),d.routeName===a.name&&n.value&&t.replace({name:n.value.routeName,params:n.value.routeParams}))};e.watchEffect(()=>{a.meta.keepAliveName&&y(String(a.meta.keepAliveName))});const S=e.inject(V.skyConfig.getIconFnName);return()=>{let g,d;return e.createVNode("div",{class:"sky-layout"},[e.createVNode("header",{class:"sky-layout__header"},[e.createVNode(r.Logo,null,null),e.createVNode("div",{class:"sky-layout__header-opt"},[e.createVNode(r.ConfigeSize,null,null),e.createVNode(r.ConfigLang,null,null),e.createVNode(r.ConfigTheme,null,null),e.createVNode(r.Fullscreen,null,null),e.createVNode(r.Refresh,null,null),e.createVNode(r.User,null,null)])]),e.createVNode("section",{class:"sky-layout__container"},[e.createVNode("aside",{class:"sky-layout__menu"},[e.createVNode(o.ElScrollbar,null,{default:()=>[e.createVNode(o.ElMenu,{collapse:u.value,"default-active":a.name,"unique-opened":!0,"collapse-transition":!0},N(g=l.value.map(i=>e.createVNode(r.SubMenu,{key:i.routeName,item:i},null)))?g:{default:()=>[g]})]}),e.createVNode("div",{class:"sky-layout__menu-collapse",onClick:()=>u.value=!u.value},[e.createVNode(D.SkyMenuCollapse,null,null)])]),e.createVNode("section",{class:"sky-layout__main"},[e.createVNode("div",{class:"sky-layout__tab"},[e.createVNode(o.ElTabs,{type:"card","model-value":a.name,onTabChange:q,onTabRemove:b},N(d=c.value.map(i=>e.createVNode(o.ElTabPane,{key:i.routeName,name:i.routeName,closable:i.closable},{label:()=>e.createVNode("div",{class:"sky-layout__tab-pane"},[i.icon&&S(i.icon),e.createVNode("span",null,[i.title])])})))?d:{default:()=>[d]})]),e.createVNode("div",{class:"sky-layout__body"},[e.createVNode(o.ElScrollbar,null,{default:()=>[e.createVNode(v.RouterView,null,{default:({Component:i,route:E})=>e.createVNode(e.Transition,{"enter-active-class":"sky-layout-fade-enter-active","enter-from-class":"sky-layout-fade-enter-from","enter-to-class":"sky-layout-fade-enter-to","leave-active-class":"sky-layout-fade-leave-active","leave-from-class":"sky-layout-fade-leave-from","leave-to-class":"sky-layout-fade-leave-to",appear:!0,mode:"out-in"},{default:()=>[e.createVNode(e.KeepAlive,{include:m.value},[e.h(i,{key:E.fullPath})])]})})]})])])])])}}});r.Logo=e.defineComponent({name:"DefaultLayoutPageLogo",setup(){return()=>V.skyConfig.logoImg&&e.createVNode("div",{class:"sky-layout__logo",style:{backgroundImage:`url(${V.skyConfig.logoImg})`}},null)}});r.ConfigeSize=e.defineComponent({name:"DefaultLayoutPageConfigeSize",setup(){const{t}=k.useI18n(),{enabled:a,size:u,select:l}=f.useSize();return()=>a&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:l},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>[e.createVNode(T.NimbusTextSize,null,null)]}),dropdown:()=>{let s;return e.createVNode(o.ElDropdownMenu,null,N(s=Object.values(f.SizeConfig.options).map(n=>{let c;return e.createVNode(o.ElDropdownItem,{key:n.value,command:n.value,disabled:u.value===n.value},N(c=t(n.label))?c:{default:()=>[c]})}))?s:{default:()=>[s]})}})])}});r.ConfigLang=e.defineComponent({name:"DefaultLayoutPageConfigLang",setup(){const{messages:t,t:a,locale:u}=k.useI18n(),{lang:l}=P.useLang(),{size:s}=f.useSize(),n=e.computed(()=>Object.keys(t.value).map(m=>({value:m,label:a(`lang.${m}`)}))),c=m=>{l.value=m,u.value=m};return()=>n.value.length>1?e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:c},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[s.value]},{default:()=>[e.createVNode(I.SlTrans,null,null)]}),dropdown:()=>{let m;return e.createVNode(o.ElDropdownMenu,null,N(m=n.value.map(y=>e.createVNode(o.ElDropdownItem,{key:y.value,command:y.value,disabled:l.value===y.value},{default:()=>[y.label]})))?m:{default:()=>[m]})}})]):null}});r.ConfigTheme=e.defineComponent({name:"DefaultLayoutPageConfigTheme",setup(){const{select:t,theme:a}=p.useTheme(),{size:u}=f.useSize();return()=>V.skyConfig.themeEnabled&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:t},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>e.h(p.ThemeConfig[a.value].icon)}),dropdown:()=>{let l;return e.createVNode(o.ElDropdownMenu,null,N(l=Object.values(p.ThemeConfig).map(s=>e.createVNode(o.ElDropdownItem,{key:s.value,command:s.value,disabled:a.value===s.value},{default:()=>[e.createVNode(o.ElIcon,null,{default:()=>e.h(s.icon)})]})))?l:{default:()=>[l]})}})])}});r.Fullscreen=e.defineComponent({name:"DefaultLayoutPageFullscreen",setup(){const{isFullscreen:t,toggle:a}=C.useFullscreen();C.useEventListener("keydown",l=>{l.key==="F11"&&(l.preventDefault(),a())});const{size:u}=f.useSize();return()=>e.createVNode("div",{class:"sky-layout__config",onClick:a},[e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>[t.value?e.createVNode(M.FluentFullScreenMinimize20Regular,null,null):e.createVNode(h.EpFullScreen,null,null)]})])}});r.Refresh=e.defineComponent({name:"DefaultLayoutPageRefresh",setup(){const{size:t}=f.useSize(),a=v.useRouter(),u=v.useRoute(),l=()=>{a.replace({name:u.name,query:{t:Date.now()}})};return()=>e.createVNode("div",{class:"sky-layout__config",onClick:l},[e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[t.value]},{default:()=>[e.createVNode(z.EpRefresh,null,null)]})])}});r.User=e.defineComponent({name:"DefaultLayoutPageUser",setup(){const t=v.useRouter(),{t:a}=k.useI18n(),{username:u,logout:l}=R.useUser(),s=n=>{n==="edit"||n==="logout"&&(l(),t.replace({name:V.skyConfig.loginRouteName}))};return()=>u.value&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:s},{default:()=>e.createVNode(o.ElText,null,{default:()=>[u.value]}),dropdown:()=>e.createVNode(o.ElDropdownMenu,null,{default:()=>{let n,c;return e.createVNode(e.Fragment,null,[e.createVNode(o.ElDropdownItem,{command:"edit"},N(n=a("user.edit"))?n:{default:()=>[n]}),e.createVNode(o.ElDropdownItem,{command:"logout"},N(c=a("user.logout"))?c:{default:()=>[c]})])}})})])}});r.SubMenu=e.defineComponent({name:"DefaultLayoutPageSubMenu",props:{item:{type:Object,required:!0}},setup(t){const a=v.useRouter(),u=()=>{a.hasRoute(t.item.routeName)&&a.push({name:t.item.routeName,params:t.item.routeParams})},l=e.inject(V.skyConfig.getIconFnName);return()=>e.createVNode(e.Fragment,null,[t.item.children?.length?e.createVNode(o.ElSubMenu,{index:t.item.routeName},{default:()=>t.item.children.map(s=>e.createVNode(r.SubMenu,{key:s.routeName,item:s},null)),title:()=>e.createVNode(e.Fragment,null,[t.item.icon&&l(t.item.icon),e.createVNode("span",null,[t.item.title])])}):e.createVNode(o.ElMenuItem,{index:t.item.routeName,onClick:u},{default:()=>t.item.icon&&l(t.item.icon),title:()=>t.item.title})])}});exports.default=r;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("element-plus/es/components/dropdown/style/css");require("element-plus/es/components/dropdown-item/style/css");require("element-plus/es/components/dropdown-menu/style/css");require("element-plus/es/components/icon/style/css");require("element-plus/es/components/menu/style/css");require("element-plus/es/components/menu-item/style/css");require("element-plus/es/components/scrollbar/style/css");require("element-plus/es/components/sub-menu/style/css");require("element-plus/es/components/tab-pane/style/css");require("element-plus/es/components/tabs/style/css");require("element-plus/es/components/text/style/css");const e=require("vue"),h=require("../icons/EpFullScreen.cjs"),z=require("../icons/EpRefresh.cjs"),M=require("../icons/FluentFullScreenMinimize20Regular.cjs"),T=require("../icons/NimbusTextSize.cjs"),D=require("../icons/SkyMenuCollapse.cjs"),I=require("../icons/SlTrans.cjs"),R=require("../hooks/useUser.cjs");require("../hooks/usePermission.cjs");const w=require("../hooks/useMenu.cjs"),L=require("../hooks/useTab.cjs"),F=require("../hooks/useRouteKeepAlive.cjs"),f=require("../hooks/useSize.cjs"),P=require("../hooks/useLang.cjs"),p=require("../hooks/useTheme.cjs");require("../hooks/useList.cjs");require("../hooks/useHiddenTitle.cjs");require("../hooks/useForm.cjs");require("../hooks/useShow.cjs");require("../hooks/useReferenceArrayField.cjs");require("../hooks/useTreeWithDetails.cjs");require("../hooks/useFormGrid.cjs");require("../hooks/useReferenceArrayInput.cjs");const C=require("@vueuse/core"),o=require("element-plus"),k=require("vue-i18n"),v=require("vue-router"),V=require("../setup/index.cjs");function N(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Object]"&&!e.isVNode(t)}const r=e.defineComponent({name:"SkyLayoutPage",setup(){const t=v.useRouter(),a=v.useRoute(),{collapse:u,menus:l}=w.useMenu(),{removeTab:s,lastTab:n,tabs:c}=L.useTab(),{includeList:m,addKeepAlive:y,removeKeepAlive:_}=F.useRouteKeepAlive(),q=g=>{const d=c.value.find(i=>i.routeName===g);d&&t.push({name:d.routeName,params:d.routeParams})},b=g=>{const d=c.value.find(i=>i.routeName===g);d&&(d?.routeKeepAliveName&&_(d.routeKeepAliveName),s(d.routeName),d.routeName===a.name&&n.value&&t.replace({name:n.value.routeName,params:n.value.routeParams}))};e.watch(()=>a.meta,g=>y(String(g.keepAliveName)),{immediate:!0});const S=e.inject(V.skyConfig.getIconFnName);return()=>{let g,d;return e.createVNode("div",{class:"sky-layout"},[e.createVNode("header",{class:"sky-layout__header"},[e.createVNode(r.Logo,null,null),e.createVNode("div",{class:"sky-layout__header-opt"},[e.createVNode(r.ConfigeSize,null,null),e.createVNode(r.ConfigLang,null,null),e.createVNode(r.ConfigTheme,null,null),e.createVNode(r.Fullscreen,null,null),e.createVNode(r.Refresh,null,null),e.createVNode(r.User,null,null)])]),e.createVNode("section",{class:"sky-layout__container"},[e.createVNode("aside",{class:"sky-layout__menu"},[e.createVNode(o.ElScrollbar,null,{default:()=>[e.createVNode(o.ElMenu,{collapse:u.value,"default-active":a.name,"unique-opened":!0,"collapse-transition":!0},N(g=l.value.map(i=>e.createVNode(r.SubMenu,{key:i.routeName,item:i},null)))?g:{default:()=>[g]})]}),e.createVNode("div",{class:"sky-layout__menu-collapse",onClick:()=>u.value=!u.value},[e.createVNode(D.SkyMenuCollapse,null,null)])]),e.createVNode("section",{class:"sky-layout__main"},[e.createVNode("div",{class:"sky-layout__tab"},[e.createVNode(o.ElTabs,{type:"card","model-value":a.name,onTabChange:q,onTabRemove:b},N(d=c.value.map(i=>e.createVNode(o.ElTabPane,{key:i.routeName,name:i.routeName,closable:i.closable},{label:()=>e.createVNode("div",{class:"sky-layout__tab-pane"},[i.icon&&S(i.icon),e.createVNode("span",null,[i.title])])})))?d:{default:()=>[d]})]),e.createVNode("div",{class:"sky-layout__body"},[e.createVNode(o.ElScrollbar,null,{default:()=>[e.createVNode(v.RouterView,null,{default:({Component:i,route:E})=>e.createVNode(e.Transition,{"enter-active-class":"sky-layout-fade-enter-active","enter-from-class":"sky-layout-fade-enter-from","enter-to-class":"sky-layout-fade-enter-to","leave-active-class":"sky-layout-fade-leave-active","leave-from-class":"sky-layout-fade-leave-from","leave-to-class":"sky-layout-fade-leave-to",appear:!0,mode:"out-in"},{default:()=>[e.createVNode(e.KeepAlive,{include:m.value},[e.h(i,{key:E.fullPath})])]})})]})])])])])}}});r.Logo=e.defineComponent({name:"DefaultLayoutPageLogo",setup(){return()=>V.skyConfig.logoImg&&e.createVNode("div",{class:"sky-layout__logo",style:{backgroundImage:`url(${V.skyConfig.logoImg})`}},null)}});r.ConfigeSize=e.defineComponent({name:"DefaultLayoutPageConfigeSize",setup(){const{t}=k.useI18n(),{enabled:a,size:u,select:l}=f.useSize();return()=>a&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:l},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>[e.createVNode(T.NimbusTextSize,null,null)]}),dropdown:()=>{let s;return e.createVNode(o.ElDropdownMenu,null,N(s=Object.values(f.SizeConfig.options).map(n=>{let c;return e.createVNode(o.ElDropdownItem,{key:n.value,command:n.value,disabled:u.value===n.value},N(c=t(n.label))?c:{default:()=>[c]})}))?s:{default:()=>[s]})}})])}});r.ConfigLang=e.defineComponent({name:"DefaultLayoutPageConfigLang",setup(){const{messages:t,t:a,locale:u}=k.useI18n(),{lang:l}=P.useLang(),{size:s}=f.useSize(),n=e.computed(()=>Object.keys(t.value).map(m=>({value:m,label:a(`lang.${m}`)}))),c=m=>{l.value=m,u.value=m};return()=>n.value.length>1?e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:c},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[s.value]},{default:()=>[e.createVNode(I.SlTrans,null,null)]}),dropdown:()=>{let m;return e.createVNode(o.ElDropdownMenu,null,N(m=n.value.map(y=>e.createVNode(o.ElDropdownItem,{key:y.value,command:y.value,disabled:l.value===y.value},{default:()=>[y.label]})))?m:{default:()=>[m]})}})]):null}});r.ConfigTheme=e.defineComponent({name:"DefaultLayoutPageConfigTheme",setup(){const{select:t,theme:a}=p.useTheme(),{size:u}=f.useSize();return()=>V.skyConfig.themeEnabled&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:t},{default:()=>e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>e.h(p.ThemeConfig[a.value].icon)}),dropdown:()=>{let l;return e.createVNode(o.ElDropdownMenu,null,N(l=Object.values(p.ThemeConfig).map(s=>e.createVNode(o.ElDropdownItem,{key:s.value,command:s.value,disabled:a.value===s.value},{default:()=>[e.createVNode(o.ElIcon,null,{default:()=>e.h(s.icon)})]})))?l:{default:()=>[l]})}})])}});r.Fullscreen=e.defineComponent({name:"DefaultLayoutPageFullscreen",setup(){const{isFullscreen:t,toggle:a}=C.useFullscreen();C.useEventListener("keydown",l=>{l.key==="F11"&&(l.preventDefault(),a())});const{size:u}=f.useSize();return()=>e.createVNode("div",{class:"sky-layout__config",onClick:a},[e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[u.value]},{default:()=>[t.value?e.createVNode(M.FluentFullScreenMinimize20Regular,null,null):e.createVNode(h.EpFullScreen,null,null)]})])}});r.Refresh=e.defineComponent({name:"DefaultLayoutPageRefresh",setup(){const{size:t}=f.useSize(),a=v.useRouter(),u=v.useRoute(),l=()=>{a.replace({name:u.name,query:{t:Date.now()}})};return()=>e.createVNode("div",{class:"sky-layout__config",onClick:l},[e.createVNode(o.ElIcon,{size:f.SizeConfig.iconMap[t.value]},{default:()=>[e.createVNode(z.EpRefresh,null,null)]})])}});r.User=e.defineComponent({name:"DefaultLayoutPageUser",setup(){const t=v.useRouter(),{t:a}=k.useI18n(),{username:u,logout:l}=R.useUser(),s=n=>{n==="edit"||n==="logout"&&(l(),t.replace({name:V.skyConfig.loginRouteName}))};return()=>u.value&&e.createVNode("div",{class:"sky-layout__config"},[e.createVNode(o.ElDropdown,{trigger:"click",onCommand:s},{default:()=>e.createVNode(o.ElText,null,{default:()=>[u.value]}),dropdown:()=>e.createVNode(o.ElDropdownMenu,null,{default:()=>{let n,c;return e.createVNode(e.Fragment,null,[e.createVNode(o.ElDropdownItem,{command:"edit"},N(n=a("user.edit"))?n:{default:()=>[n]}),e.createVNode(o.ElDropdownItem,{command:"logout"},N(c=a("user.logout"))?c:{default:()=>[c]})])}})})])}});r.SubMenu=e.defineComponent({name:"DefaultLayoutPageSubMenu",props:{item:{type:Object,required:!0}},setup(t){const a=v.useRouter(),u=()=>{a.hasRoute(t.item.routeName)&&a.push({name:t.item.routeName,params:t.item.routeParams})},l=e.inject(V.skyConfig.getIconFnName);return()=>e.createVNode(e.Fragment,null,[t.item.children?.length?e.createVNode(o.ElSubMenu,{index:t.item.routeName},{default:()=>t.item.children.map(s=>e.createVNode(r.SubMenu,{key:s.routeName,item:s},null)),title:()=>e.createVNode(e.Fragment,null,[t.item.icon&&l(t.item.icon),e.createVNode("span",null,[t.item.title])])}):e.createVNode(o.ElMenuItem,{index:t.item.routeName,onClick:u},{default:()=>t.item.icon&&l(t.item.icon),title:()=>t.item.title})])}});exports.default=r;
2
2
  //# sourceMappingURL=default.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"default.cjs","sources":["../../src/layouts/default.tsx"],"sourcesContent":["import { EpFullScreen } from '@/icons/EpFullScreen'\nimport { EpRefresh } from '@/icons/EpRefresh'\nimport { FluentFullScreenMinimize20Regular } from '@/icons/FluentFullScreenMinimize20Regular'\nimport { NimbusTextSize } from '@/icons/NimbusTextSize'\nimport { SkyMenuCollapse } from '@/icons/SkyMenuCollapse'\nimport { SlTrans } from '@/icons/SlTrans'\nimport {\n SizeConfig,\n ThemeConfig,\n useLang,\n useMenu,\n useRouteKeepAlive,\n useSize,\n useTab,\n useTheme,\n useUser,\n} from '@/hooks'\nimport { useEventListener, useFullscreen } from '@vueuse/core'\nimport {\n ElDropdown,\n ElDropdownItem,\n ElDropdownMenu,\n ElIcon,\n ElMenu,\n ElMenuItem,\n ElScrollbar,\n ElSubMenu,\n ElTabPane,\n ElTabs,\n ElText,\n type TabPaneName,\n} from 'element-plus'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n KeepAlive,\n Transition,\n watchEffect,\n type PropType,\n type VNode,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { RouterView, useRoute, useRouter, type RouteLocationNormalizedLoaded } from 'vue-router'\nimport { skyConfig, type GetIconFn, type SkyMenu } from '@/setup'\n\nexport interface RouterViewSlot {\n Component: VNode\n route: RouteLocationNormalizedLoaded\n}\n\nconst SkyLayoutPage = defineComponent({\n name: 'SkyLayoutPage',\n setup() {\n const router = useRouter()\n const route = useRoute()\n const { collapse, menus } = useMenu()\n const { removeTab, lastTab, tabs } = useTab()\n const { includeList, addKeepAlive, removeKeepAlive } = useRouteKeepAlive()\n\n const onTabChange = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n router.push({ name: tab.routeName, params: tab.routeParams })\n }\n }\n\n const onTabRemove = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n // 如果当前 tab 是存在,那么尝试删除它的 keepAlive 缓存\n if (tab?.routeKeepAliveName) {\n removeKeepAlive(tab.routeKeepAliveName)\n }\n removeTab(tab.routeName)\n // 如果删除是当前页面并且存在lastTab,就跳转到lastTab\n if (tab.routeName === route.name && lastTab.value) {\n router.replace({ name: lastTab.value.routeName, params: lastTab.value.routeParams })\n }\n }\n }\n\n watchEffect(() => {\n if (route.meta.keepAliveName) {\n addKeepAlive(String(route.meta.keepAliveName))\n }\n })\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <div class=\"sky-layout\">\n <header class=\"sky-layout__header\">\n <SkyLayoutPage.Logo />\n\n <div class=\"sky-layout__header-opt\">\n <SkyLayoutPage.ConfigeSize />\n <SkyLayoutPage.ConfigLang />\n <SkyLayoutPage.ConfigTheme />\n <SkyLayoutPage.Fullscreen />\n <SkyLayoutPage.Refresh />\n <SkyLayoutPage.User />\n </div>\n </header>\n <section class=\"sky-layout__container\">\n <aside class=\"sky-layout__menu\">\n <ElScrollbar>\n <ElMenu\n collapse={collapse.value}\n default-active={route.name}\n unique-opened\n collapse-transition\n >\n {menus.value.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n ))}\n </ElMenu>\n </ElScrollbar>\n <div\n class=\"sky-layout__menu-collapse\"\n onClick={() => (collapse.value = !collapse.value)}\n >\n <SkyMenuCollapse />\n </div>\n </aside>\n <section class=\"sky-layout__main\">\n <div class=\"sky-layout__tab\">\n <ElTabs\n type=\"card\"\n model-value={route.name}\n onTabChange={onTabChange}\n onTabRemove={onTabRemove}\n >\n {tabs.value.map((tab) => (\n <ElTabPane key={tab.routeName} name={tab.routeName} closable={tab.closable}>\n {{\n label: () => (\n <div class=\"sky-layout__tab-pane\">\n {tab.icon && getIcon(tab.icon)}\n <span>{tab.title}</span>\n </div>\n ),\n }}\n </ElTabPane>\n ))}\n </ElTabs>\n </div>\n\n <div class=\"sky-layout__body\">\n <ElScrollbar>\n <RouterView>\n {{\n default: ({ Component, route }: RouterViewSlot) => (\n <Transition\n enter-active-class=\"sky-layout-fade-enter-active\"\n enter-from-class=\"sky-layout-fade-enter-from\"\n enter-to-class=\"sky-layout-fade-enter-to\"\n leave-active-class=\"sky-layout-fade-leave-active\"\n leave-from-class=\"sky-layout-fade-leave-from\"\n leave-to-class=\"sky-layout-fade-leave-to\"\n appear\n mode=\"out-in\"\n >\n <KeepAlive include={includeList.value}>\n {/* UserCreate ---> /user/create 会缓存一次 */}\n {/* UserEdit ---> /user/edit/1、/user/edit/2 ... 会缓存n次,直到关闭当前 tab,从include移除当前component name会等待GC全部释放所有缓存的组件实例;缓存N次不会出现数据错乱吗?默认情况会,但是加上 { key: route.fullPath } 就可以区分相同组件不同路由地址实例(●'◡'●) */}\n {h(Component, { key: route.fullPath })}\n </KeepAlive>\n </Transition>\n ),\n }}\n </RouterView>\n </ElScrollbar>\n </div>\n </section>\n </section>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Logo = defineComponent({\n name: 'DefaultLayoutPageLogo',\n setup() {\n return () =>\n skyConfig.logoImg && (\n <div\n class=\"sky-layout__logo\"\n style={{ backgroundImage: `url(${skyConfig.logoImg})` }}\n ></div>\n )\n },\n})\n\nSkyLayoutPage.ConfigeSize = defineComponent({\n name: 'DefaultLayoutPageConfigeSize',\n setup() {\n const { t } = useI18n()\n const { enabled, size, select } = useSize()\n return () =>\n enabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <NimbusTextSize />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(SizeConfig.options).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={size.value === c.value}\n >\n {t(c.label)}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.ConfigLang = defineComponent({\n name: 'DefaultLayoutPageConfigLang',\n setup() {\n const { messages, t, locale } = useI18n()\n const { lang } = useLang()\n const { size } = useSize()\n const langList = computed(() =>\n Object.keys(messages.value).map((key) => ({\n value: key,\n label: t(`lang.${key}`),\n })),\n )\n const onCommand = (v: string) => {\n lang.value = v\n locale.value = v\n }\n return () =>\n langList.value.length > 1 ? (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <SlTrans />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {langList.value.map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={lang.value === c.value}\n >\n {c.label}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n ) : null\n },\n})\n\nSkyLayoutPage.ConfigTheme = defineComponent({\n name: 'DefaultLayoutPageConfigTheme',\n setup() {\n const { select, theme } = useTheme()\n const { size } = useSize()\n return () =>\n skyConfig.themeEnabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {() => h(ThemeConfig[theme.value].icon)}\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(ThemeConfig).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={theme.value === c.value}\n >\n <ElIcon>{() => h(c.icon)}</ElIcon>\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Fullscreen = defineComponent({\n name: 'DefaultLayoutPageFullscreen',\n setup() {\n // 页面全屏\n const { isFullscreen, toggle } = useFullscreen()\n // F11默认全屏效果不能满足这里的需求,禁止默认全屏行为,采用我们项目的全屏逻辑\n useEventListener('keydown', (e) => {\n if (e.key === 'F11') {\n // 禁用f11\n e.preventDefault()\n toggle()\n }\n })\n const { size } = useSize()\n return () => (\n <div class=\"sky-layout__config\" onClick={toggle}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {isFullscreen.value ? <FluentFullScreenMinimize20Regular /> : <EpFullScreen />}\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Refresh = defineComponent({\n name: 'DefaultLayoutPageRefresh',\n setup() {\n const { size } = useSize()\n const router = useRouter()\n const route = useRoute()\n const onRefresh = () => {\n router.replace({ name: route.name, query: { t: Date.now() } })\n }\n return () => (\n <div class=\"sky-layout__config\" onClick={onRefresh}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <EpRefresh />\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.User = defineComponent({\n name: 'DefaultLayoutPageUser',\n setup() {\n const router = useRouter()\n const { t } = useI18n()\n const { username, logout } = useUser()\n const onCommand = (command: string) => {\n if (command === 'edit') {\n } else if (command === 'logout') {\n logout()\n router.replace({ name: skyConfig.loginRouteName })\n }\n }\n return () =>\n username.value && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => <ElText>{username.value}</ElText>,\n dropdown: () => (\n <ElDropdownMenu>\n {() => (\n <>\n <ElDropdownItem command=\"edit\">{t('user.edit')}</ElDropdownItem>\n <ElDropdownItem command=\"logout\">{t('user.logout')}</ElDropdownItem>\n </>\n )}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.SubMenu = defineComponent({\n name: 'DefaultLayoutPageSubMenu',\n props: {\n item: {\n type: Object as PropType<SkyMenu>,\n required: true,\n },\n },\n setup(props) {\n const router = useRouter()\n\n const onClick = () => {\n if (router.hasRoute(props.item.routeName)) {\n router.push({ name: props.item.routeName, params: props.item.routeParams })\n }\n }\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <>\n {props.item.children?.length ? (\n <ElSubMenu index={props.item.routeName}>\n {{\n default: () =>\n props.item.children!.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n )),\n title: () => (\n <>\n {props.item.icon && getIcon(props.item.icon)}\n <span>{props.item.title}</span>\n </>\n ),\n }}\n </ElSubMenu>\n ) : (\n <ElMenuItem index={props.item.routeName} onClick={onClick}>\n {{\n default: () => props.item.icon && getIcon(props.item.icon),\n title: () => props.item.title,\n }}\n </ElMenuItem>\n )}\n </>\n )\n },\n})\n\nexport default SkyLayoutPage\n"],"names":["_isSlot","s","_isVNode","SkyLayoutPage","defineComponent","name","setup","router","useRouter","route","useRoute","menus","tabs","removeKeepAlive","tab","routeName","removeTab","params","watchEffect","getIcon","inject","skyConfig","_createVNode","default","_slot","menu","SkyMenuCollapse","onTabChange","_slot2","ElTabPane","includeList","backgroundImage","t","select","SizeConfig","size","dropdown","_slot4","ElDropdownMenu","c","_slot3","locale","lang","langList","computed","messages","key","value","label","_slot5","ElDropdownItem","theme","_slot6","toggle","useEventListener","e","query","logout","username","_Fragment","props","item","type","required","ElSubMenu","title"],"mappings":"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"}
1
+ {"version":3,"file":"default.cjs","sources":["../../src/layouts/default.tsx"],"sourcesContent":["import { EpFullScreen } from '@/icons/EpFullScreen'\nimport { EpRefresh } from '@/icons/EpRefresh'\nimport { FluentFullScreenMinimize20Regular } from '@/icons/FluentFullScreenMinimize20Regular'\nimport { NimbusTextSize } from '@/icons/NimbusTextSize'\nimport { SkyMenuCollapse } from '@/icons/SkyMenuCollapse'\nimport { SlTrans } from '@/icons/SlTrans'\nimport {\n SizeConfig,\n ThemeConfig,\n useLang,\n useMenu,\n useRouteKeepAlive,\n useSize,\n useTab,\n useTheme,\n useUser,\n} from '@/hooks'\nimport { useEventListener, useFullscreen } from '@vueuse/core'\nimport {\n ElDropdown,\n ElDropdownItem,\n ElDropdownMenu,\n ElIcon,\n ElMenu,\n ElMenuItem,\n ElScrollbar,\n ElSubMenu,\n ElTabPane,\n ElTabs,\n ElText,\n type TabPaneName,\n} from 'element-plus'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n KeepAlive,\n Transition,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { RouterView, useRoute, useRouter, type RouteLocationNormalizedLoaded } from 'vue-router'\nimport { skyConfig, type GetIconFn, type SkyMenu } from '@/setup'\n\nexport interface RouterViewSlot {\n Component: VNode\n route: RouteLocationNormalizedLoaded\n}\n\nconst SkyLayoutPage = defineComponent({\n name: 'SkyLayoutPage',\n setup() {\n const router = useRouter()\n const route = useRoute()\n const { collapse, menus } = useMenu()\n const { removeTab, lastTab, tabs } = useTab()\n const { includeList, addKeepAlive, removeKeepAlive } = useRouteKeepAlive()\n\n const onTabChange = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n router.push({ name: tab.routeName, params: tab.routeParams })\n }\n }\n\n const onTabRemove = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n // 如果当前 tab 是存在,那么尝试删除它的 keepAlive 缓存\n if (tab?.routeKeepAliveName) {\n removeKeepAlive(tab.routeKeepAliveName)\n }\n removeTab(tab.routeName)\n // 如果删除是当前页面并且存在lastTab,就跳转到lastTab\n if (tab.routeName === route.name && lastTab.value) {\n router.replace({ name: lastTab.value.routeName, params: lastTab.value.routeParams })\n }\n }\n }\n\n watch(\n () => route.meta,\n (routeMeta) => addKeepAlive(String(routeMeta.keepAliveName)),\n {\n immediate: true,\n },\n )\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <div class=\"sky-layout\">\n <header class=\"sky-layout__header\">\n <SkyLayoutPage.Logo />\n\n <div class=\"sky-layout__header-opt\">\n <SkyLayoutPage.ConfigeSize />\n <SkyLayoutPage.ConfigLang />\n <SkyLayoutPage.ConfigTheme />\n <SkyLayoutPage.Fullscreen />\n <SkyLayoutPage.Refresh />\n <SkyLayoutPage.User />\n </div>\n </header>\n <section class=\"sky-layout__container\">\n <aside class=\"sky-layout__menu\">\n <ElScrollbar>\n <ElMenu\n collapse={collapse.value}\n default-active={route.name}\n unique-opened\n collapse-transition\n >\n {menus.value.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n ))}\n </ElMenu>\n </ElScrollbar>\n <div\n class=\"sky-layout__menu-collapse\"\n onClick={() => (collapse.value = !collapse.value)}\n >\n <SkyMenuCollapse />\n </div>\n </aside>\n <section class=\"sky-layout__main\">\n <div class=\"sky-layout__tab\">\n <ElTabs\n type=\"card\"\n model-value={route.name}\n onTabChange={onTabChange}\n onTabRemove={onTabRemove}\n >\n {tabs.value.map((tab) => (\n <ElTabPane key={tab.routeName} name={tab.routeName} closable={tab.closable}>\n {{\n label: () => (\n <div class=\"sky-layout__tab-pane\">\n {tab.icon && getIcon(tab.icon)}\n <span>{tab.title}</span>\n </div>\n ),\n }}\n </ElTabPane>\n ))}\n </ElTabs>\n </div>\n\n <div class=\"sky-layout__body\">\n <ElScrollbar>\n <RouterView>\n {{\n default: ({ Component, route }: RouterViewSlot) => (\n <Transition\n enter-active-class=\"sky-layout-fade-enter-active\"\n enter-from-class=\"sky-layout-fade-enter-from\"\n enter-to-class=\"sky-layout-fade-enter-to\"\n leave-active-class=\"sky-layout-fade-leave-active\"\n leave-from-class=\"sky-layout-fade-leave-from\"\n leave-to-class=\"sky-layout-fade-leave-to\"\n appear\n mode=\"out-in\"\n >\n <KeepAlive include={includeList.value}>\n {/* UserCreate ---> /user/create 会缓存一次 */}\n {/* UserEdit ---> /user/edit/1、/user/edit/2 ... 会缓存n次,直到关闭当前 tab,从include移除当前component name会等待GC全部释放所有缓存的组件实例;缓存N次不会出现数据错乱吗?默认情况会,但是加上 { key: route.fullPath } 就可以区分相同组件不同路由地址实例(●'◡'●) */}\n {h(Component, { key: route.fullPath })}\n </KeepAlive>\n </Transition>\n ),\n }}\n </RouterView>\n </ElScrollbar>\n </div>\n </section>\n </section>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Logo = defineComponent({\n name: 'DefaultLayoutPageLogo',\n setup() {\n return () =>\n skyConfig.logoImg && (\n <div\n class=\"sky-layout__logo\"\n style={{ backgroundImage: `url(${skyConfig.logoImg})` }}\n ></div>\n )\n },\n})\n\nSkyLayoutPage.ConfigeSize = defineComponent({\n name: 'DefaultLayoutPageConfigeSize',\n setup() {\n const { t } = useI18n()\n const { enabled, size, select } = useSize()\n return () =>\n enabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <NimbusTextSize />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(SizeConfig.options).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={size.value === c.value}\n >\n {t(c.label)}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.ConfigLang = defineComponent({\n name: 'DefaultLayoutPageConfigLang',\n setup() {\n const { messages, t, locale } = useI18n()\n const { lang } = useLang()\n const { size } = useSize()\n const langList = computed(() =>\n Object.keys(messages.value).map((key) => ({\n value: key,\n label: t(`lang.${key}`),\n })),\n )\n const onCommand = (v: string) => {\n lang.value = v\n locale.value = v\n }\n return () =>\n langList.value.length > 1 ? (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <SlTrans />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {langList.value.map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={lang.value === c.value}\n >\n {c.label}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n ) : null\n },\n})\n\nSkyLayoutPage.ConfigTheme = defineComponent({\n name: 'DefaultLayoutPageConfigTheme',\n setup() {\n const { select, theme } = useTheme()\n const { size } = useSize()\n return () =>\n skyConfig.themeEnabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {() => h(ThemeConfig[theme.value].icon)}\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(ThemeConfig).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={theme.value === c.value}\n >\n <ElIcon>{() => h(c.icon)}</ElIcon>\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Fullscreen = defineComponent({\n name: 'DefaultLayoutPageFullscreen',\n setup() {\n // 页面全屏\n const { isFullscreen, toggle } = useFullscreen()\n // F11默认全屏效果不能满足这里的需求,禁止默认全屏行为,采用我们项目的全屏逻辑\n useEventListener('keydown', (e) => {\n if (e.key === 'F11') {\n // 禁用f11\n e.preventDefault()\n toggle()\n }\n })\n const { size } = useSize()\n return () => (\n <div class=\"sky-layout__config\" onClick={toggle}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {isFullscreen.value ? <FluentFullScreenMinimize20Regular /> : <EpFullScreen />}\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Refresh = defineComponent({\n name: 'DefaultLayoutPageRefresh',\n setup() {\n const { size } = useSize()\n const router = useRouter()\n const route = useRoute()\n const onRefresh = () => {\n router.replace({ name: route.name, query: { t: Date.now() } })\n }\n return () => (\n <div class=\"sky-layout__config\" onClick={onRefresh}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <EpRefresh />\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.User = defineComponent({\n name: 'DefaultLayoutPageUser',\n setup() {\n const router = useRouter()\n const { t } = useI18n()\n const { username, logout } = useUser()\n const onCommand = (command: string) => {\n if (command === 'edit') {\n } else if (command === 'logout') {\n logout()\n router.replace({ name: skyConfig.loginRouteName })\n }\n }\n return () =>\n username.value && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => <ElText>{username.value}</ElText>,\n dropdown: () => (\n <ElDropdownMenu>\n {() => (\n <>\n <ElDropdownItem command=\"edit\">{t('user.edit')}</ElDropdownItem>\n <ElDropdownItem command=\"logout\">{t('user.logout')}</ElDropdownItem>\n </>\n )}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.SubMenu = defineComponent({\n name: 'DefaultLayoutPageSubMenu',\n props: {\n item: {\n type: Object as PropType<SkyMenu>,\n required: true,\n },\n },\n setup(props) {\n const router = useRouter()\n\n const onClick = () => {\n if (router.hasRoute(props.item.routeName)) {\n router.push({ name: props.item.routeName, params: props.item.routeParams })\n }\n }\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <>\n {props.item.children?.length ? (\n <ElSubMenu index={props.item.routeName}>\n {{\n default: () =>\n props.item.children!.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n )),\n title: () => (\n <>\n {props.item.icon && getIcon(props.item.icon)}\n <span>{props.item.title}</span>\n </>\n ),\n }}\n </ElSubMenu>\n ) : (\n <ElMenuItem index={props.item.routeName} onClick={onClick}>\n {{\n default: () => props.item.icon && getIcon(props.item.icon),\n title: () => props.item.title,\n }}\n </ElMenuItem>\n )}\n </>\n )\n },\n})\n\nexport default SkyLayoutPage\n"],"names":["_isSlot","s","_isVNode","SkyLayoutPage","defineComponent","name","setup","router","useRouter","route","useRoute","menus","tabs","removeKeepAlive","tab","routeName","removeTab","params","watch","immediate","getIcon","inject","skyConfig","_createVNode","default","_slot","menu","SkyMenuCollapse","onTabChange","_slot2","ElTabPane","includeList","backgroundImage","t","select","SizeConfig","size","dropdown","_slot4","ElDropdownMenu","c","_slot3","locale","lang","langList","computed","messages","key","value","label","_slot5","ElDropdownItem","theme","_slot6","toggle","useEventListener","e","query","logout","username","_Fragment","props","item","type","required","ElSubMenu","title"],"mappings":"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"}
@@ -9,7 +9,7 @@ import "element-plus/es/components/sub-menu/style/css";
9
9
  import "element-plus/es/components/tab-pane/style/css";
10
10
  import "element-plus/es/components/tabs/style/css";
11
11
  import "element-plus/es/components/text/style/css";
12
- import { defineComponent as f, watchEffect as j, inject as M, createVNode as e, Transition as A, KeepAlive as K, h as S, isVNode as O, computed as x, Fragment as L } from "vue";
12
+ import { defineComponent as f, watch as j, inject as E, createVNode as e, Transition as A, KeepAlive as K, h as S, isVNode as O, computed as x, Fragment as L } from "vue";
13
13
  import { EpFullScreen as U } from "../icons/EpFullScreen.mjs";
14
14
  import { EpRefresh as q } from "../icons/EpRefresh.mjs";
15
15
  import { FluentFullScreenMinimize20Regular as V } from "../icons/FluentFullScreenMinimize20Regular.mjs";
@@ -33,11 +33,11 @@ import "../hooks/useTreeWithDetails.mjs";
33
33
  import "../hooks/useFormGrid.mjs";
34
34
  import "../hooks/useReferenceArrayInput.mjs";
35
35
  import { useFullscreen as Z, useEventListener as ee } from "@vueuse/core";
36
- import { ElScrollbar as E, ElMenu as le, ElTabs as te, ElTabPane as ae, ElDropdown as h, ElDropdownMenu as C, ElDropdownItem as _, ElIcon as g, ElText as oe, ElSubMenu as ue, ElMenuItem as ne } from "element-plus";
36
+ import { ElScrollbar as M, ElMenu as le, ElTabs as te, ElTabPane as ae, ElDropdown as h, ElDropdownMenu as C, ElDropdownItem as _, ElIcon as g, ElText as oe, ElSubMenu as ue, ElMenuItem as ne } from "element-plus";
37
37
  import { useI18n as T } from "vue-i18n";
38
38
  import { useRouter as N, useRoute as P, RouterView as ie } from "vue-router";
39
39
  import { skyConfig as k } from "../setup/index.mjs";
40
- function d(l) {
40
+ function p(l) {
41
41
  return typeof l == "function" || Object.prototype.toString.call(l) === "[object Object]" && !O(l);
42
42
  }
43
43
  const i = /* @__PURE__ */ f({
@@ -54,25 +54,25 @@ const i = /* @__PURE__ */ f({
54
54
  includeList: c,
55
55
  addKeepAlive: v,
56
56
  removeKeepAlive: R
57
- } = W(), D = (p) => {
58
- const m = s.value.find((r) => r.routeName === p);
57
+ } = W(), D = (d) => {
58
+ const m = s.value.find((r) => r.routeName === d);
59
59
  m && l.push({
60
60
  name: m.routeName,
61
61
  params: m.routeParams
62
62
  });
63
- }, F = (p) => {
64
- const m = s.value.find((r) => r.routeName === p);
63
+ }, F = (d) => {
64
+ const m = s.value.find((r) => r.routeName === d);
65
65
  m && (m?.routeKeepAliveName && R(m.routeKeepAliveName), n(m.routeName), m.routeName === t.name && u.value && l.replace({
66
66
  name: u.value.routeName,
67
67
  params: u.value.routeParams
68
68
  }));
69
69
  };
70
- j(() => {
71
- t.meta.keepAliveName && v(String(t.meta.keepAliveName));
70
+ j(() => t.meta, (d) => v(String(d.keepAliveName)), {
71
+ immediate: !0
72
72
  });
73
- const w = M(k.getIconFnName);
73
+ const w = E(k.getIconFnName);
74
74
  return () => {
75
- let p, m;
75
+ let d, m;
76
76
  return e("div", {
77
77
  class: "sky-layout"
78
78
  }, [e("header", {
@@ -83,17 +83,17 @@ const i = /* @__PURE__ */ f({
83
83
  class: "sky-layout__container"
84
84
  }, [e("aside", {
85
85
  class: "sky-layout__menu"
86
- }, [e(E, null, {
86
+ }, [e(M, null, {
87
87
  default: () => [e(le, {
88
88
  collapse: o.value,
89
89
  "default-active": t.name,
90
90
  "unique-opened": !0,
91
91
  "collapse-transition": !0
92
- }, d(p = a.value.map((r) => e(i.SubMenu, {
92
+ }, p(d = a.value.map((r) => e(i.SubMenu, {
93
93
  key: r.routeName,
94
94
  item: r
95
- }, null))) ? p : {
96
- default: () => [p]
95
+ }, null))) ? d : {
96
+ default: () => [d]
97
97
  })]
98
98
  }), e("div", {
99
99
  class: "sky-layout__menu-collapse",
@@ -107,7 +107,7 @@ const i = /* @__PURE__ */ f({
107
107
  "model-value": t.name,
108
108
  onTabChange: D,
109
109
  onTabRemove: F
110
- }, d(m = s.value.map((r) => e(ae, {
110
+ }, p(m = s.value.map((r) => e(ae, {
111
111
  key: r.routeName,
112
112
  name: r.routeName,
113
113
  closable: r.closable
@@ -119,7 +119,7 @@ const i = /* @__PURE__ */ f({
119
119
  default: () => [m]
120
120
  })]), e("div", {
121
121
  class: "sky-layout__body"
122
- }, [e(E, null, {
122
+ }, [e(M, null, {
123
123
  default: () => [e(ie, null, {
124
124
  default: ({
125
125
  Component: r,
@@ -179,13 +179,13 @@ i.ConfigeSize = /* @__PURE__ */ f({
179
179
  }),
180
180
  dropdown: () => {
181
181
  let n;
182
- return e(C, null, d(n = Object.values(y.options).map((u) => {
182
+ return e(C, null, p(n = Object.values(y.options).map((u) => {
183
183
  let s;
184
184
  return e(_, {
185
185
  key: u.value,
186
186
  command: u.value,
187
187
  disabled: o.value === u.value
188
- }, d(s = l(u.label)) ? s : {
188
+ }, p(s = l(u.label)) ? s : {
189
189
  default: () => [s]
190
190
  });
191
191
  })) ? n : {
@@ -225,7 +225,7 @@ i.ConfigLang = /* @__PURE__ */ f({
225
225
  }),
226
226
  dropdown: () => {
227
227
  let c;
228
- return e(C, null, d(c = u.value.map((v) => e(_, {
228
+ return e(C, null, p(c = u.value.map((v) => e(_, {
229
229
  key: v.value,
230
230
  command: v.value,
231
231
  disabled: a.value === v.value
@@ -260,7 +260,7 @@ i.ConfigTheme = /* @__PURE__ */ f({
260
260
  }),
261
261
  dropdown: () => {
262
262
  let a;
263
- return e(C, null, d(a = Object.values(z).map((n) => e(_, {
263
+ return e(C, null, p(a = Object.values(z).map((n) => e(_, {
264
264
  key: n.value,
265
265
  command: n.value,
266
266
  disabled: t.value === n.value
@@ -348,11 +348,11 @@ i.User = /* @__PURE__ */ f({
348
348
  let u, s;
349
349
  return e(L, null, [e(_, {
350
350
  command: "edit"
351
- }, d(u = t("user.edit")) ? u : {
351
+ }, p(u = t("user.edit")) ? u : {
352
352
  default: () => [u]
353
353
  }), e(_, {
354
354
  command: "logout"
355
- }, d(s = t("user.logout")) ? s : {
355
+ }, p(s = t("user.logout")) ? s : {
356
356
  default: () => [s]
357
357
  })]);
358
358
  }
@@ -374,7 +374,7 @@ i.SubMenu = /* @__PURE__ */ f({
374
374
  name: l.item.routeName,
375
375
  params: l.item.routeParams
376
376
  });
377
- }, a = M(k.getIconFnName);
377
+ }, a = E(k.getIconFnName);
378
378
  return () => e(L, null, [l.item.children?.length ? e(ue, {
379
379
  index: l.item.routeName
380
380
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"default.mjs","sources":["../../src/layouts/default.tsx"],"sourcesContent":["import { EpFullScreen } from '@/icons/EpFullScreen'\nimport { EpRefresh } from '@/icons/EpRefresh'\nimport { FluentFullScreenMinimize20Regular } from '@/icons/FluentFullScreenMinimize20Regular'\nimport { NimbusTextSize } from '@/icons/NimbusTextSize'\nimport { SkyMenuCollapse } from '@/icons/SkyMenuCollapse'\nimport { SlTrans } from '@/icons/SlTrans'\nimport {\n SizeConfig,\n ThemeConfig,\n useLang,\n useMenu,\n useRouteKeepAlive,\n useSize,\n useTab,\n useTheme,\n useUser,\n} from '@/hooks'\nimport { useEventListener, useFullscreen } from '@vueuse/core'\nimport {\n ElDropdown,\n ElDropdownItem,\n ElDropdownMenu,\n ElIcon,\n ElMenu,\n ElMenuItem,\n ElScrollbar,\n ElSubMenu,\n ElTabPane,\n ElTabs,\n ElText,\n type TabPaneName,\n} from 'element-plus'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n KeepAlive,\n Transition,\n watchEffect,\n type PropType,\n type VNode,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { RouterView, useRoute, useRouter, type RouteLocationNormalizedLoaded } from 'vue-router'\nimport { skyConfig, type GetIconFn, type SkyMenu } from '@/setup'\n\nexport interface RouterViewSlot {\n Component: VNode\n route: RouteLocationNormalizedLoaded\n}\n\nconst SkyLayoutPage = defineComponent({\n name: 'SkyLayoutPage',\n setup() {\n const router = useRouter()\n const route = useRoute()\n const { collapse, menus } = useMenu()\n const { removeTab, lastTab, tabs } = useTab()\n const { includeList, addKeepAlive, removeKeepAlive } = useRouteKeepAlive()\n\n const onTabChange = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n router.push({ name: tab.routeName, params: tab.routeParams })\n }\n }\n\n const onTabRemove = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n // 如果当前 tab 是存在,那么尝试删除它的 keepAlive 缓存\n if (tab?.routeKeepAliveName) {\n removeKeepAlive(tab.routeKeepAliveName)\n }\n removeTab(tab.routeName)\n // 如果删除是当前页面并且存在lastTab,就跳转到lastTab\n if (tab.routeName === route.name && lastTab.value) {\n router.replace({ name: lastTab.value.routeName, params: lastTab.value.routeParams })\n }\n }\n }\n\n watchEffect(() => {\n if (route.meta.keepAliveName) {\n addKeepAlive(String(route.meta.keepAliveName))\n }\n })\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <div class=\"sky-layout\">\n <header class=\"sky-layout__header\">\n <SkyLayoutPage.Logo />\n\n <div class=\"sky-layout__header-opt\">\n <SkyLayoutPage.ConfigeSize />\n <SkyLayoutPage.ConfigLang />\n <SkyLayoutPage.ConfigTheme />\n <SkyLayoutPage.Fullscreen />\n <SkyLayoutPage.Refresh />\n <SkyLayoutPage.User />\n </div>\n </header>\n <section class=\"sky-layout__container\">\n <aside class=\"sky-layout__menu\">\n <ElScrollbar>\n <ElMenu\n collapse={collapse.value}\n default-active={route.name}\n unique-opened\n collapse-transition\n >\n {menus.value.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n ))}\n </ElMenu>\n </ElScrollbar>\n <div\n class=\"sky-layout__menu-collapse\"\n onClick={() => (collapse.value = !collapse.value)}\n >\n <SkyMenuCollapse />\n </div>\n </aside>\n <section class=\"sky-layout__main\">\n <div class=\"sky-layout__tab\">\n <ElTabs\n type=\"card\"\n model-value={route.name}\n onTabChange={onTabChange}\n onTabRemove={onTabRemove}\n >\n {tabs.value.map((tab) => (\n <ElTabPane key={tab.routeName} name={tab.routeName} closable={tab.closable}>\n {{\n label: () => (\n <div class=\"sky-layout__tab-pane\">\n {tab.icon && getIcon(tab.icon)}\n <span>{tab.title}</span>\n </div>\n ),\n }}\n </ElTabPane>\n ))}\n </ElTabs>\n </div>\n\n <div class=\"sky-layout__body\">\n <ElScrollbar>\n <RouterView>\n {{\n default: ({ Component, route }: RouterViewSlot) => (\n <Transition\n enter-active-class=\"sky-layout-fade-enter-active\"\n enter-from-class=\"sky-layout-fade-enter-from\"\n enter-to-class=\"sky-layout-fade-enter-to\"\n leave-active-class=\"sky-layout-fade-leave-active\"\n leave-from-class=\"sky-layout-fade-leave-from\"\n leave-to-class=\"sky-layout-fade-leave-to\"\n appear\n mode=\"out-in\"\n >\n <KeepAlive include={includeList.value}>\n {/* UserCreate ---> /user/create 会缓存一次 */}\n {/* UserEdit ---> /user/edit/1、/user/edit/2 ... 会缓存n次,直到关闭当前 tab,从include移除当前component name会等待GC全部释放所有缓存的组件实例;缓存N次不会出现数据错乱吗?默认情况会,但是加上 { key: route.fullPath } 就可以区分相同组件不同路由地址实例(●'◡'●) */}\n {h(Component, { key: route.fullPath })}\n </KeepAlive>\n </Transition>\n ),\n }}\n </RouterView>\n </ElScrollbar>\n </div>\n </section>\n </section>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Logo = defineComponent({\n name: 'DefaultLayoutPageLogo',\n setup() {\n return () =>\n skyConfig.logoImg && (\n <div\n class=\"sky-layout__logo\"\n style={{ backgroundImage: `url(${skyConfig.logoImg})` }}\n ></div>\n )\n },\n})\n\nSkyLayoutPage.ConfigeSize = defineComponent({\n name: 'DefaultLayoutPageConfigeSize',\n setup() {\n const { t } = useI18n()\n const { enabled, size, select } = useSize()\n return () =>\n enabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <NimbusTextSize />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(SizeConfig.options).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={size.value === c.value}\n >\n {t(c.label)}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.ConfigLang = defineComponent({\n name: 'DefaultLayoutPageConfigLang',\n setup() {\n const { messages, t, locale } = useI18n()\n const { lang } = useLang()\n const { size } = useSize()\n const langList = computed(() =>\n Object.keys(messages.value).map((key) => ({\n value: key,\n label: t(`lang.${key}`),\n })),\n )\n const onCommand = (v: string) => {\n lang.value = v\n locale.value = v\n }\n return () =>\n langList.value.length > 1 ? (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <SlTrans />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {langList.value.map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={lang.value === c.value}\n >\n {c.label}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n ) : null\n },\n})\n\nSkyLayoutPage.ConfigTheme = defineComponent({\n name: 'DefaultLayoutPageConfigTheme',\n setup() {\n const { select, theme } = useTheme()\n const { size } = useSize()\n return () =>\n skyConfig.themeEnabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {() => h(ThemeConfig[theme.value].icon)}\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(ThemeConfig).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={theme.value === c.value}\n >\n <ElIcon>{() => h(c.icon)}</ElIcon>\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Fullscreen = defineComponent({\n name: 'DefaultLayoutPageFullscreen',\n setup() {\n // 页面全屏\n const { isFullscreen, toggle } = useFullscreen()\n // F11默认全屏效果不能满足这里的需求,禁止默认全屏行为,采用我们项目的全屏逻辑\n useEventListener('keydown', (e) => {\n if (e.key === 'F11') {\n // 禁用f11\n e.preventDefault()\n toggle()\n }\n })\n const { size } = useSize()\n return () => (\n <div class=\"sky-layout__config\" onClick={toggle}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {isFullscreen.value ? <FluentFullScreenMinimize20Regular /> : <EpFullScreen />}\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Refresh = defineComponent({\n name: 'DefaultLayoutPageRefresh',\n setup() {\n const { size } = useSize()\n const router = useRouter()\n const route = useRoute()\n const onRefresh = () => {\n router.replace({ name: route.name, query: { t: Date.now() } })\n }\n return () => (\n <div class=\"sky-layout__config\" onClick={onRefresh}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <EpRefresh />\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.User = defineComponent({\n name: 'DefaultLayoutPageUser',\n setup() {\n const router = useRouter()\n const { t } = useI18n()\n const { username, logout } = useUser()\n const onCommand = (command: string) => {\n if (command === 'edit') {\n } else if (command === 'logout') {\n logout()\n router.replace({ name: skyConfig.loginRouteName })\n }\n }\n return () =>\n username.value && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => <ElText>{username.value}</ElText>,\n dropdown: () => (\n <ElDropdownMenu>\n {() => (\n <>\n <ElDropdownItem command=\"edit\">{t('user.edit')}</ElDropdownItem>\n <ElDropdownItem command=\"logout\">{t('user.logout')}</ElDropdownItem>\n </>\n )}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.SubMenu = defineComponent({\n name: 'DefaultLayoutPageSubMenu',\n props: {\n item: {\n type: Object as PropType<SkyMenu>,\n required: true,\n },\n },\n setup(props) {\n const router = useRouter()\n\n const onClick = () => {\n if (router.hasRoute(props.item.routeName)) {\n router.push({ name: props.item.routeName, params: props.item.routeParams })\n }\n }\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <>\n {props.item.children?.length ? (\n <ElSubMenu index={props.item.routeName}>\n {{\n default: () =>\n props.item.children!.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n )),\n title: () => (\n <>\n {props.item.icon && getIcon(props.item.icon)}\n <span>{props.item.title}</span>\n </>\n ),\n }}\n </ElSubMenu>\n ) : (\n <ElMenuItem index={props.item.routeName} onClick={onClick}>\n {{\n default: () => props.item.icon && getIcon(props.item.icon),\n title: () => props.item.title,\n }}\n </ElMenuItem>\n )}\n </>\n )\n },\n})\n\nexport default SkyLayoutPage\n"],"names":["_isSlot","s","_isVNode","SkyLayoutPage","defineComponent","name","setup","router","useRouter","route","useRoute","menus","tabs","removeKeepAlive","tab","routeName","removeTab","params","watchEffect","getIcon","inject","skyConfig","_createVNode","default","_slot","menu","SkyMenuCollapse","onTabChange","_slot2","ElTabPane","includeList","backgroundImage","t","select","SizeConfig","size","dropdown","_slot4","ElDropdownMenu","c","_slot3","locale","lang","langList","computed","messages","key","value","label","_slot5","ElDropdownItem","theme","_slot6","toggle","useEventListener","e","query","logout","username","_Fragment","props","item","type","required","ElSubMenu","title"],"mappings":"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"}
1
+ {"version":3,"file":"default.mjs","sources":["../../src/layouts/default.tsx"],"sourcesContent":["import { EpFullScreen } from '@/icons/EpFullScreen'\nimport { EpRefresh } from '@/icons/EpRefresh'\nimport { FluentFullScreenMinimize20Regular } from '@/icons/FluentFullScreenMinimize20Regular'\nimport { NimbusTextSize } from '@/icons/NimbusTextSize'\nimport { SkyMenuCollapse } from '@/icons/SkyMenuCollapse'\nimport { SlTrans } from '@/icons/SlTrans'\nimport {\n SizeConfig,\n ThemeConfig,\n useLang,\n useMenu,\n useRouteKeepAlive,\n useSize,\n useTab,\n useTheme,\n useUser,\n} from '@/hooks'\nimport { useEventListener, useFullscreen } from '@vueuse/core'\nimport {\n ElDropdown,\n ElDropdownItem,\n ElDropdownMenu,\n ElIcon,\n ElMenu,\n ElMenuItem,\n ElScrollbar,\n ElSubMenu,\n ElTabPane,\n ElTabs,\n ElText,\n type TabPaneName,\n} from 'element-plus'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n KeepAlive,\n Transition,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { RouterView, useRoute, useRouter, type RouteLocationNormalizedLoaded } from 'vue-router'\nimport { skyConfig, type GetIconFn, type SkyMenu } from '@/setup'\n\nexport interface RouterViewSlot {\n Component: VNode\n route: RouteLocationNormalizedLoaded\n}\n\nconst SkyLayoutPage = defineComponent({\n name: 'SkyLayoutPage',\n setup() {\n const router = useRouter()\n const route = useRoute()\n const { collapse, menus } = useMenu()\n const { removeTab, lastTab, tabs } = useTab()\n const { includeList, addKeepAlive, removeKeepAlive } = useRouteKeepAlive()\n\n const onTabChange = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n router.push({ name: tab.routeName, params: tab.routeParams })\n }\n }\n\n const onTabRemove = (routeName: TabPaneName) => {\n const tab = tabs.value.find((tab) => tab.routeName === routeName)\n if (tab) {\n // 如果当前 tab 是存在,那么尝试删除它的 keepAlive 缓存\n if (tab?.routeKeepAliveName) {\n removeKeepAlive(tab.routeKeepAliveName)\n }\n removeTab(tab.routeName)\n // 如果删除是当前页面并且存在lastTab,就跳转到lastTab\n if (tab.routeName === route.name && lastTab.value) {\n router.replace({ name: lastTab.value.routeName, params: lastTab.value.routeParams })\n }\n }\n }\n\n watch(\n () => route.meta,\n (routeMeta) => addKeepAlive(String(routeMeta.keepAliveName)),\n {\n immediate: true,\n },\n )\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <div class=\"sky-layout\">\n <header class=\"sky-layout__header\">\n <SkyLayoutPage.Logo />\n\n <div class=\"sky-layout__header-opt\">\n <SkyLayoutPage.ConfigeSize />\n <SkyLayoutPage.ConfigLang />\n <SkyLayoutPage.ConfigTheme />\n <SkyLayoutPage.Fullscreen />\n <SkyLayoutPage.Refresh />\n <SkyLayoutPage.User />\n </div>\n </header>\n <section class=\"sky-layout__container\">\n <aside class=\"sky-layout__menu\">\n <ElScrollbar>\n <ElMenu\n collapse={collapse.value}\n default-active={route.name}\n unique-opened\n collapse-transition\n >\n {menus.value.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n ))}\n </ElMenu>\n </ElScrollbar>\n <div\n class=\"sky-layout__menu-collapse\"\n onClick={() => (collapse.value = !collapse.value)}\n >\n <SkyMenuCollapse />\n </div>\n </aside>\n <section class=\"sky-layout__main\">\n <div class=\"sky-layout__tab\">\n <ElTabs\n type=\"card\"\n model-value={route.name}\n onTabChange={onTabChange}\n onTabRemove={onTabRemove}\n >\n {tabs.value.map((tab) => (\n <ElTabPane key={tab.routeName} name={tab.routeName} closable={tab.closable}>\n {{\n label: () => (\n <div class=\"sky-layout__tab-pane\">\n {tab.icon && getIcon(tab.icon)}\n <span>{tab.title}</span>\n </div>\n ),\n }}\n </ElTabPane>\n ))}\n </ElTabs>\n </div>\n\n <div class=\"sky-layout__body\">\n <ElScrollbar>\n <RouterView>\n {{\n default: ({ Component, route }: RouterViewSlot) => (\n <Transition\n enter-active-class=\"sky-layout-fade-enter-active\"\n enter-from-class=\"sky-layout-fade-enter-from\"\n enter-to-class=\"sky-layout-fade-enter-to\"\n leave-active-class=\"sky-layout-fade-leave-active\"\n leave-from-class=\"sky-layout-fade-leave-from\"\n leave-to-class=\"sky-layout-fade-leave-to\"\n appear\n mode=\"out-in\"\n >\n <KeepAlive include={includeList.value}>\n {/* UserCreate ---> /user/create 会缓存一次 */}\n {/* UserEdit ---> /user/edit/1、/user/edit/2 ... 会缓存n次,直到关闭当前 tab,从include移除当前component name会等待GC全部释放所有缓存的组件实例;缓存N次不会出现数据错乱吗?默认情况会,但是加上 { key: route.fullPath } 就可以区分相同组件不同路由地址实例(●'◡'●) */}\n {h(Component, { key: route.fullPath })}\n </KeepAlive>\n </Transition>\n ),\n }}\n </RouterView>\n </ElScrollbar>\n </div>\n </section>\n </section>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Logo = defineComponent({\n name: 'DefaultLayoutPageLogo',\n setup() {\n return () =>\n skyConfig.logoImg && (\n <div\n class=\"sky-layout__logo\"\n style={{ backgroundImage: `url(${skyConfig.logoImg})` }}\n ></div>\n )\n },\n})\n\nSkyLayoutPage.ConfigeSize = defineComponent({\n name: 'DefaultLayoutPageConfigeSize',\n setup() {\n const { t } = useI18n()\n const { enabled, size, select } = useSize()\n return () =>\n enabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <NimbusTextSize />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(SizeConfig.options).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={size.value === c.value}\n >\n {t(c.label)}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.ConfigLang = defineComponent({\n name: 'DefaultLayoutPageConfigLang',\n setup() {\n const { messages, t, locale } = useI18n()\n const { lang } = useLang()\n const { size } = useSize()\n const langList = computed(() =>\n Object.keys(messages.value).map((key) => ({\n value: key,\n label: t(`lang.${key}`),\n })),\n )\n const onCommand = (v: string) => {\n lang.value = v\n locale.value = v\n }\n return () =>\n langList.value.length > 1 ? (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <SlTrans />\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {langList.value.map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={lang.value === c.value}\n >\n {c.label}\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n ) : null\n },\n})\n\nSkyLayoutPage.ConfigTheme = defineComponent({\n name: 'DefaultLayoutPageConfigTheme',\n setup() {\n const { select, theme } = useTheme()\n const { size } = useSize()\n return () =>\n skyConfig.themeEnabled && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={select}>\n {{\n default: () => (\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {() => h(ThemeConfig[theme.value].icon)}\n </ElIcon>\n ),\n dropdown: () => (\n <ElDropdownMenu>\n {Object.values(ThemeConfig).map((c) => (\n <ElDropdownItem\n key={c.value}\n command={c.value}\n disabled={theme.value === c.value}\n >\n <ElIcon>{() => h(c.icon)}</ElIcon>\n </ElDropdownItem>\n ))}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Fullscreen = defineComponent({\n name: 'DefaultLayoutPageFullscreen',\n setup() {\n // 页面全屏\n const { isFullscreen, toggle } = useFullscreen()\n // F11默认全屏效果不能满足这里的需求,禁止默认全屏行为,采用我们项目的全屏逻辑\n useEventListener('keydown', (e) => {\n if (e.key === 'F11') {\n // 禁用f11\n e.preventDefault()\n toggle()\n }\n })\n const { size } = useSize()\n return () => (\n <div class=\"sky-layout__config\" onClick={toggle}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n {isFullscreen.value ? <FluentFullScreenMinimize20Regular /> : <EpFullScreen />}\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.Refresh = defineComponent({\n name: 'DefaultLayoutPageRefresh',\n setup() {\n const { size } = useSize()\n const router = useRouter()\n const route = useRoute()\n const onRefresh = () => {\n router.replace({ name: route.name, query: { t: Date.now() } })\n }\n return () => (\n <div class=\"sky-layout__config\" onClick={onRefresh}>\n <ElIcon size={SizeConfig.iconMap[size.value]}>\n <EpRefresh />\n </ElIcon>\n </div>\n )\n },\n})\n\nSkyLayoutPage.User = defineComponent({\n name: 'DefaultLayoutPageUser',\n setup() {\n const router = useRouter()\n const { t } = useI18n()\n const { username, logout } = useUser()\n const onCommand = (command: string) => {\n if (command === 'edit') {\n } else if (command === 'logout') {\n logout()\n router.replace({ name: skyConfig.loginRouteName })\n }\n }\n return () =>\n username.value && (\n <div class=\"sky-layout__config\">\n <ElDropdown trigger=\"click\" onCommand={onCommand}>\n {{\n default: () => <ElText>{username.value}</ElText>,\n dropdown: () => (\n <ElDropdownMenu>\n {() => (\n <>\n <ElDropdownItem command=\"edit\">{t('user.edit')}</ElDropdownItem>\n <ElDropdownItem command=\"logout\">{t('user.logout')}</ElDropdownItem>\n </>\n )}\n </ElDropdownMenu>\n ),\n }}\n </ElDropdown>\n </div>\n )\n },\n})\n\nSkyLayoutPage.SubMenu = defineComponent({\n name: 'DefaultLayoutPageSubMenu',\n props: {\n item: {\n type: Object as PropType<SkyMenu>,\n required: true,\n },\n },\n setup(props) {\n const router = useRouter()\n\n const onClick = () => {\n if (router.hasRoute(props.item.routeName)) {\n router.push({ name: props.item.routeName, params: props.item.routeParams })\n }\n }\n\n const getIcon = inject<GetIconFn>(skyConfig.getIconFnName)!\n\n return () => (\n <>\n {props.item.children?.length ? (\n <ElSubMenu index={props.item.routeName}>\n {{\n default: () =>\n props.item.children!.map((menu) => (\n <SkyLayoutPage.SubMenu key={menu.routeName} item={menu} />\n )),\n title: () => (\n <>\n {props.item.icon && getIcon(props.item.icon)}\n <span>{props.item.title}</span>\n </>\n ),\n }}\n </ElSubMenu>\n ) : (\n <ElMenuItem index={props.item.routeName} onClick={onClick}>\n {{\n default: () => props.item.icon && getIcon(props.item.icon),\n title: () => props.item.title,\n }}\n </ElMenuItem>\n )}\n </>\n )\n },\n})\n\nexport default SkyLayoutPage\n"],"names":["_isSlot","s","_isVNode","SkyLayoutPage","defineComponent","name","setup","router","useRouter","route","useRoute","menus","tabs","removeKeepAlive","tab","routeName","removeTab","params","watch","immediate","getIcon","inject","skyConfig","_createVNode","default","_slot","menu","SkyMenuCollapse","onTabChange","_slot2","ElTabPane","includeList","backgroundImage","t","select","SizeConfig","size","dropdown","_slot4","ElDropdownMenu","c","_slot3","locale","lang","langList","computed","messages","key","value","label","_slot5","ElDropdownItem","theme","_slot6","toggle","useEventListener","e","query","logout","username","_Fragment","props","item","type","required","ElSubMenu","title"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../setup/index.cjs"),f=require("../hooks/useUser.cjs"),g=require("../hooks/usePermission.cjs");require("../hooks/useMenu.cjs");const p=require("../hooks/useTab.cjs");require("../hooks/useRouteKeepAlive.cjs");require("../hooks/useSize.cjs");require("../hooks/useLang.cjs");require("../hooks/useTheme.cjs");require("../hooks/useList.cjs");require("../hooks/useHiddenTitle.cjs");require("../hooks/useForm.cjs");require("../hooks/useShow.cjs");require("../hooks/useReferenceArrayField.cjs");require("../hooks/useTreeWithDetails.cjs");require("../hooks/useFormGrid.cjs");require("../hooks/useReferenceArrayInput.cjs");require("vue");const y=()=>[{name:e.skyConfig.layoutRouteName,path:"/",component:()=>e.skyConfig.layoutPage??Promise.resolve().then(()=>require("../layouts/default.cjs")),redirect:{name:e.skyConfig.welcomeRouteName},children:[{name:e.skyConfig.welcomeRouteName,path:"welcome",component:()=>e.skyConfig.welcomePage??Promise.resolve().then(()=>require("../pages/welcome.cjs")),meta:{tab:!0,tabTitle:"欢迎界面",resource:"*",action:"*",row:"*",column:"*"}}]},{name:e.skyConfig.loginRouteName,path:"/login",component:()=>e.skyConfig.loginPage??Promise.resolve().then(()=>require("../pages/login.cjs"))},{name:e.skyConfig.notFoundRouteName,path:"/:pathMatch(.*)*",component:()=>e.skyConfig.notFoundPage??Promise.resolve().then(()=>require("../pages/not-found.cjs"))}],c=(n,s)=>{const{isLogin:a}=f.useUser();if(n.hasRoute(e.skyConfig.loginRouteName)){if(s.name===e.skyConfig.loginRouteName)return a.value?{name:e.skyConfig.layoutRouteName}:!0;if(!a.value)return{name:e.skyConfig.loginRouteName}}},l=async(n,s)=>{const a=[],i=typeof e.skyConfig.resources=="function"?await e.skyConfig.resources():e.skyConfig.resources;if(i)for(const o of i){const u=[{comp:o.list,name:e.skyConfig.getListRouteName(o.name),path:o.name,action:"list"},{comp:o.create,name:e.skyConfig.getCreateRouteName(o.name),path:`${o.name}/create`,action:"create"},{comp:o.edit,name:e.skyConfig.getEditRouteName(o.name),path:`${o.name}/edit/:id`,action:"edit"},{comp:o.show,name:e.skyConfig.getShowRouteName(o.name),path:`${o.name}/show/:id`,action:"show"}];for(const t of u)t.comp&&e.skyConfig.dataProvider?.canAccess?.({resource:o.name,action:t.action},s)?(n.hasRoute(t.name)||n.addRoute(e.skyConfig.layoutRouteName,{name:t.name,path:t.path,component:t.comp,meta:{tab:!0,tabTitle:t.comp.title||`${o.name} ${t.action}`,resource:o.name,action:t.action,keepAliveName:t.comp.keepAliveName,icon:t.comp.icon}}),a.push(t.name)):n.hasRoute(t.name)&&n.removeRoute(t.name)}return a},d=n=>({beforeEach:async a=>{const i=c(n,a);if(typeof i<"u")return i;const o=await e.skyConfig.dataProvider?.getPermissions?.(),{addTab:u,lastTab:t}=p.useTab(),r=a.meta;let m;return o&&(g.usePermission().permissions.value=o,m=await l(n,o),typeof a.name=="string"&&m.includes(a.name))?(u({routeName:a.name,routeParams:a.params,routeKeepAliveName:r.keepAliveName,title:r.tabTitle,icon:r.icon}),!0):a.name===e.skyConfig.welcomeRouteName?(u({routeName:a.name,routeParams:a.params,routeKeepAliveName:r.keepAliveName,title:r.tabTitle,icon:r.icon}),!0):a.name===e.skyConfig.notFoundRouteName?t.value?.routeName&&m?.includes(t.value.routeName)?{name:t.value.routeName,params:t.value.routeParams}:{name:e.skyConfig.welcomeRouteName}:!1}});exports.addLayoutRoutes=l;exports.checkAuth=c;exports.getRoutes=y;exports.guard=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../setup/index.cjs"),f=require("../hooks/useUser.cjs"),g=require("../hooks/usePermission.cjs");require("../hooks/useMenu.cjs");const p=require("../hooks/useTab.cjs");require("../hooks/useRouteKeepAlive.cjs");require("../hooks/useSize.cjs");require("../hooks/useLang.cjs");require("../hooks/useTheme.cjs");require("../hooks/useList.cjs");require("../hooks/useHiddenTitle.cjs");require("../hooks/useForm.cjs");require("../hooks/useShow.cjs");require("../hooks/useReferenceArrayField.cjs");require("../hooks/useTreeWithDetails.cjs");require("../hooks/useFormGrid.cjs");require("../hooks/useReferenceArrayInput.cjs");require("vue");const y=()=>[{name:e.skyConfig.layoutRouteName,path:"/",component:()=>e.skyConfig.layoutPage??Promise.resolve().then(()=>require("../layouts/default.cjs")),redirect:{name:e.skyConfig.welcomeRouteName},children:[{name:e.skyConfig.welcomeRouteName,path:"welcome",component:()=>e.skyConfig.welcomePage??Promise.resolve().then(()=>require("../pages/welcome.cjs")),meta:{tab:!0,tabTitle:"欢迎界面",resource:"*",action:"*",row:"*",column:"*"}}]},{name:e.skyConfig.loginRouteName,path:"/login",component:()=>e.skyConfig.loginPage??Promise.resolve().then(()=>require("../pages/login.cjs"))},{name:e.skyConfig.notFoundRouteName,path:"/:pathMatch(.*)*",component:()=>e.skyConfig.notFoundPage??Promise.resolve().then(()=>require("../pages/not-found.cjs"))}],c=(n,s)=>{const{isLogin:a}=f.useUser();if(n.hasRoute(e.skyConfig.loginRouteName)){if(s.name===e.skyConfig.loginRouteName)return a.value?{name:e.skyConfig.layoutRouteName}:!0;if(!a.value)return{name:e.skyConfig.loginRouteName}}},l=async(n,s)=>{const a=[],i=typeof e.skyConfig.resources=="function"?await e.skyConfig.resources():e.skyConfig.resources;if(i)for(const t of i){const u=[{comp:t.list,name:e.skyConfig.getListRouteName(t.name),path:t.name,action:"list"},{comp:t.create,name:e.skyConfig.getCreateRouteName(t.name),path:`${t.name}/create`,action:"create"},{comp:t.edit,name:e.skyConfig.getEditRouteName(t.name),path:`${t.name}/edit/:id`,action:"edit"},{comp:t.show,name:e.skyConfig.getShowRouteName(t.name),path:`${t.name}/show/:id`,action:"show"}];for(const o of u)o.comp&&e.skyConfig.dataProvider?.canAccess?.({resource:t.name,action:o.action},s)?(n.hasRoute(o.name)||n.addRoute(e.skyConfig.layoutRouteName,{name:o.name,path:o.path,component:o.comp,meta:{tab:!0,tabTitle:o.comp.title||`${t.name} ${o.action}`,resource:t.name,action:o.action,keepAliveName:o.comp.keepAlive?o.comp.name:void 0,icon:o.comp.icon}}),a.push(o.name)):n.hasRoute(o.name)&&n.removeRoute(o.name)}return a},d=n=>({beforeEach:async a=>{const i=c(n,a);if(typeof i<"u")return i;const t=await e.skyConfig.dataProvider?.getPermissions?.(),{addTab:u,lastTab:o}=p.useTab(),r=a.meta;let m;return t&&(g.usePermission().permissions.value=t,m=await l(n,t),typeof a.name=="string"&&m.includes(a.name))?(u({routeName:a.name,routeParams:a.params,routeKeepAliveName:r.keepAliveName,title:r.tabTitle,icon:r.icon}),!0):a.name===e.skyConfig.welcomeRouteName?(u({routeName:a.name,routeParams:a.params,routeKeepAliveName:r.keepAliveName,title:r.tabTitle,icon:r.icon}),!0):a.name===e.skyConfig.notFoundRouteName?o.value?.routeName&&m?.includes(o.value.routeName)?{name:o.value.routeName,params:o.value.routeParams}:{name:e.skyConfig.welcomeRouteName}:!1}});exports.addLayoutRoutes=l;exports.checkAuth=c;exports.getRoutes=y;exports.guard=d;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/router/index.ts"],"sourcesContent":["import type { RouteLocationNormalizedGeneric, Router } from 'vue-router'\r\n\r\nimport { skyConfig } from '@/setup'\r\nimport type { RouteRecordRaw } from 'vue-router'\r\nimport { usePermission, useTab, useUser } from '@/hooks'\r\nimport type { CanAccessItem } from '@/provides'\r\n\r\nexport type SkyLayoutRouteMeta = {\r\n tab: true\r\n resource: string\r\n action: 'list' | 'create' | 'edit' | 'show'\r\n row: string\r\n column: string\r\n tabTitle: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport const getRoutes = (): RouteRecordRaw[] => {\r\n return [\r\n {\r\n name: skyConfig.layoutRouteName,\r\n path: '/',\r\n component: () => skyConfig.layoutPage ?? import('@/layouts/default'),\r\n redirect: { name: skyConfig.welcomeRouteName },\r\n children: [\r\n {\r\n name: skyConfig.welcomeRouteName,\r\n path: 'welcome',\r\n component: () => skyConfig.welcomePage ?? import('@/pages/welcome'),\r\n meta: {\r\n tab: true,\r\n tabTitle: '欢迎界面',\r\n resource: '*',\r\n action: '*',\r\n row: '*',\r\n column: '*',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: skyConfig.loginRouteName,\r\n path: '/login',\r\n component: () => skyConfig.loginPage ?? import('@/pages/login'),\r\n },\r\n {\r\n name: skyConfig.notFoundRouteName,\r\n path: '/:pathMatch(.*)*',\r\n component: () => skyConfig.notFoundPage ?? import('@/pages/not-found'),\r\n },\r\n ]\r\n}\r\n\r\nexport const checkAuth = (router: Router, to: RouteLocationNormalizedGeneric) => {\r\n const { isLogin } = useUser()\r\n\r\n // 检测是否需要登录\r\n // openLogin - 表示开启登录界面功能\r\n // isLogin - 表示是否已经登录\r\n const openLogin = router.hasRoute(skyConfig.loginRouteName)\r\n if (openLogin) {\r\n if (to.name === skyConfig.loginRouteName) {\r\n if (isLogin.value) {\r\n return { name: skyConfig.layoutRouteName }\r\n } else {\r\n return true\r\n }\r\n } else {\r\n if (!isLogin.value) {\r\n return { name: skyConfig.loginRouteName }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const addLayoutRoutes = async (router: Router, permissions: CanAccessItem[]) => {\r\n const result: string[] = []\r\n const resources =\r\n typeof skyConfig.resources === 'function' ? await skyConfig.resources() : skyConfig.resources\r\n if (resources) {\r\n for (const resource of resources) {\r\n const routes = [\r\n {\r\n comp: resource.list,\r\n name: skyConfig.getListRouteName(resource.name),\r\n path: resource.name,\r\n action: 'list',\r\n },\r\n {\r\n comp: resource.create,\r\n name: skyConfig.getCreateRouteName(resource.name),\r\n path: `${resource.name}/create`,\r\n action: 'create',\r\n },\r\n {\r\n comp: resource.edit,\r\n name: skyConfig.getEditRouteName(resource.name),\r\n path: `${resource.name}/edit/:id`,\r\n action: 'edit',\r\n },\r\n {\r\n comp: resource.show,\r\n name: skyConfig.getShowRouteName(resource.name),\r\n path: `${resource.name}/show/:id`,\r\n action: 'show',\r\n },\r\n ]\r\n for (const route of routes) {\r\n if (\r\n route.comp &&\r\n skyConfig.dataProvider?.canAccess?.(\r\n { resource: resource.name, action: route.action },\r\n permissions,\r\n )\r\n ) {\r\n if (!router.hasRoute(route.name)) {\r\n router.addRoute(skyConfig.layoutRouteName, {\r\n name: route.name,\r\n path: route.path,\r\n component: route.comp,\r\n meta: {\r\n tab: true,\r\n tabTitle: route.comp.title || `${resource.name} ${route.action}`,\r\n resource: resource.name,\r\n action: route.action,\r\n keepAliveName: route.comp.keepAliveName,\r\n icon: route.comp.icon,\r\n },\r\n })\r\n }\r\n result.push(route.name)\r\n } else {\r\n if (router.hasRoute(route.name)) {\r\n router.removeRoute(route.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const guard = (router: Router) => {\r\n const beforeEach = async (to: RouteLocationNormalizedGeneric) => {\r\n const authTo = checkAuth(router, to)\r\n\r\n if (typeof authTo !== 'undefined') {\r\n return authTo\r\n }\r\n\r\n // 获取所有权限\r\n const permissions = await skyConfig.dataProvider?.getPermissions?.()\r\n\r\n const { addTab, lastTab } = useTab()\r\n\r\n const meta = to.meta as SkyLayoutRouteMeta\r\n\r\n let routes: string[] | undefined\r\n if (permissions) {\r\n // 每次路由获取权限,需要全局存储下来\r\n usePermission().permissions.value = permissions\r\n\r\n routes = await addLayoutRoutes(router, permissions)\r\n\r\n if (typeof to.name === 'string' && routes.includes(to.name)) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n }\r\n }\r\n\r\n // 所有都支持访问 welcome\r\n if (to.name === skyConfig.welcomeRouteName) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n } else if (to.name === skyConfig.notFoundRouteName) {\r\n if (lastTab.value?.routeName && routes?.includes(lastTab.value.routeName)) {\r\n return { name: lastTab.value.routeName, params: lastTab.value.routeParams }\r\n }\r\n return { name: skyConfig.welcomeRouteName }\r\n }\r\n\r\n // 无权限\r\n return false\r\n }\r\n\r\n return {\r\n beforeEach,\r\n }\r\n}\r\n"],"names":["getRoutes","skyConfig","checkAuth","router","to","isLogin","useUser","addLayoutRoutes","permissions","result","resources","resource","routes","route","guard","authTo","addTab","lastTab","useTab","meta","usePermission"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/router/index.ts"],"sourcesContent":["import type { RouteLocationNormalizedGeneric, Router } from 'vue-router'\r\n\r\nimport { skyConfig } from '@/setup'\r\nimport type { RouteRecordRaw } from 'vue-router'\r\nimport { usePermission, useTab, useUser } from '@/hooks'\r\nimport type { CanAccessItem } from '@/provides'\r\n\r\nexport type SkyLayoutRouteMeta = {\r\n tab: true\r\n resource: string\r\n action: 'list' | 'create' | 'edit' | 'show'\r\n row: string\r\n column: string\r\n tabTitle: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport const getRoutes = (): RouteRecordRaw[] => {\r\n return [\r\n {\r\n name: skyConfig.layoutRouteName,\r\n path: '/',\r\n component: () => skyConfig.layoutPage ?? import('@/layouts/default'),\r\n redirect: { name: skyConfig.welcomeRouteName },\r\n children: [\r\n {\r\n name: skyConfig.welcomeRouteName,\r\n path: 'welcome',\r\n component: () => skyConfig.welcomePage ?? import('@/pages/welcome'),\r\n meta: {\r\n tab: true,\r\n tabTitle: '欢迎界面',\r\n resource: '*',\r\n action: '*',\r\n row: '*',\r\n column: '*',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: skyConfig.loginRouteName,\r\n path: '/login',\r\n component: () => skyConfig.loginPage ?? import('@/pages/login'),\r\n },\r\n {\r\n name: skyConfig.notFoundRouteName,\r\n path: '/:pathMatch(.*)*',\r\n component: () => skyConfig.notFoundPage ?? import('@/pages/not-found'),\r\n },\r\n ]\r\n}\r\n\r\nexport const checkAuth = (router: Router, to: RouteLocationNormalizedGeneric) => {\r\n const { isLogin } = useUser()\r\n\r\n // 检测是否需要登录\r\n // openLogin - 表示开启登录界面功能\r\n // isLogin - 表示是否已经登录\r\n const openLogin = router.hasRoute(skyConfig.loginRouteName)\r\n if (openLogin) {\r\n if (to.name === skyConfig.loginRouteName) {\r\n if (isLogin.value) {\r\n return { name: skyConfig.layoutRouteName }\r\n } else {\r\n return true\r\n }\r\n } else {\r\n if (!isLogin.value) {\r\n return { name: skyConfig.loginRouteName }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const addLayoutRoutes = async (router: Router, permissions: CanAccessItem[]) => {\r\n const result: string[] = []\r\n const resources =\r\n typeof skyConfig.resources === 'function' ? await skyConfig.resources() : skyConfig.resources\r\n if (resources) {\r\n for (const resource of resources) {\r\n const routes = [\r\n {\r\n comp: resource.list,\r\n name: skyConfig.getListRouteName(resource.name),\r\n path: resource.name,\r\n action: 'list',\r\n },\r\n {\r\n comp: resource.create,\r\n name: skyConfig.getCreateRouteName(resource.name),\r\n path: `${resource.name}/create`,\r\n action: 'create',\r\n },\r\n {\r\n comp: resource.edit,\r\n name: skyConfig.getEditRouteName(resource.name),\r\n path: `${resource.name}/edit/:id`,\r\n action: 'edit',\r\n },\r\n {\r\n comp: resource.show,\r\n name: skyConfig.getShowRouteName(resource.name),\r\n path: `${resource.name}/show/:id`,\r\n action: 'show',\r\n },\r\n ]\r\n for (const route of routes) {\r\n if (\r\n route.comp &&\r\n skyConfig.dataProvider?.canAccess?.(\r\n { resource: resource.name, action: route.action },\r\n permissions,\r\n )\r\n ) {\r\n if (!router.hasRoute(route.name)) {\r\n router.addRoute(skyConfig.layoutRouteName, {\r\n name: route.name,\r\n path: route.path,\r\n component: route.comp,\r\n meta: {\r\n tab: true,\r\n tabTitle: route.comp.title || `${resource.name} ${route.action}`,\r\n resource: resource.name,\r\n action: route.action,\r\n keepAliveName: route.comp.keepAlive ? route.comp.name : undefined,\r\n icon: route.comp.icon,\r\n },\r\n })\r\n }\r\n result.push(route.name)\r\n } else {\r\n if (router.hasRoute(route.name)) {\r\n router.removeRoute(route.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const guard = (router: Router) => {\r\n const beforeEach = async (to: RouteLocationNormalizedGeneric) => {\r\n const authTo = checkAuth(router, to)\r\n\r\n if (typeof authTo !== 'undefined') {\r\n return authTo\r\n }\r\n\r\n // 获取所有权限\r\n const permissions = await skyConfig.dataProvider?.getPermissions?.()\r\n\r\n const { addTab, lastTab } = useTab()\r\n\r\n const meta = to.meta as SkyLayoutRouteMeta\r\n\r\n let routes: string[] | undefined\r\n if (permissions) {\r\n // 每次路由获取权限,需要全局存储下来\r\n usePermission().permissions.value = permissions\r\n\r\n routes = await addLayoutRoutes(router, permissions)\r\n\r\n if (typeof to.name === 'string' && routes.includes(to.name)) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n }\r\n }\r\n\r\n // 所有都支持访问 welcome\r\n if (to.name === skyConfig.welcomeRouteName) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n } else if (to.name === skyConfig.notFoundRouteName) {\r\n if (lastTab.value?.routeName && routes?.includes(lastTab.value.routeName)) {\r\n return { name: lastTab.value.routeName, params: lastTab.value.routeParams }\r\n }\r\n return { name: skyConfig.welcomeRouteName }\r\n }\r\n\r\n // 无权限\r\n return false\r\n }\r\n\r\n return {\r\n beforeEach,\r\n }\r\n}\r\n"],"names":["getRoutes","skyConfig","checkAuth","router","to","isLogin","useUser","addLayoutRoutes","permissions","result","resources","resource","routes","route","guard","authTo","addTab","lastTab","useTab","meta","usePermission"],"mappings":"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"}
@@ -56,53 +56,53 @@ const x = () => [
56
56
  if (!a.value)
57
57
  return { name: e.loginRouteName };
58
58
  }
59
- }, N = async (m, i) => {
59
+ }, d = async (m, i) => {
60
60
  const a = [], n = typeof e.resources == "function" ? await e.resources() : e.resources;
61
61
  if (n)
62
- for (const t of n) {
62
+ for (const o of n) {
63
63
  const u = [
64
64
  {
65
- comp: t.list,
66
- name: e.getListRouteName(t.name),
67
- path: t.name,
65
+ comp: o.list,
66
+ name: e.getListRouteName(o.name),
67
+ path: o.name,
68
68
  action: "list"
69
69
  },
70
70
  {
71
- comp: t.create,
72
- name: e.getCreateRouteName(t.name),
73
- path: `${t.name}/create`,
71
+ comp: o.create,
72
+ name: e.getCreateRouteName(o.name),
73
+ path: `${o.name}/create`,
74
74
  action: "create"
75
75
  },
76
76
  {
77
- comp: t.edit,
78
- name: e.getEditRouteName(t.name),
79
- path: `${t.name}/edit/:id`,
77
+ comp: o.edit,
78
+ name: e.getEditRouteName(o.name),
79
+ path: `${o.name}/edit/:id`,
80
80
  action: "edit"
81
81
  },
82
82
  {
83
- comp: t.show,
84
- name: e.getShowRouteName(t.name),
85
- path: `${t.name}/show/:id`,
83
+ comp: o.show,
84
+ name: e.getShowRouteName(o.name),
85
+ path: `${o.name}/show/:id`,
86
86
  action: "show"
87
87
  }
88
88
  ];
89
- for (const o of u)
90
- o.comp && e.dataProvider?.canAccess?.(
91
- { resource: t.name, action: o.action },
89
+ for (const t of u)
90
+ t.comp && e.dataProvider?.canAccess?.(
91
+ { resource: o.name, action: t.action },
92
92
  i
93
- ) ? (m.hasRoute(o.name) || m.addRoute(e.layoutRouteName, {
94
- name: o.name,
95
- path: o.path,
96
- component: o.comp,
93
+ ) ? (m.hasRoute(t.name) || m.addRoute(e.layoutRouteName, {
94
+ name: t.name,
95
+ path: t.path,
96
+ component: t.comp,
97
97
  meta: {
98
98
  tab: !0,
99
- tabTitle: o.comp.title || `${t.name} ${o.action}`,
100
- resource: t.name,
101
- action: o.action,
102
- keepAliveName: o.comp.keepAliveName,
103
- icon: o.comp.icon
99
+ tabTitle: t.comp.title || `${o.name} ${t.action}`,
100
+ resource: o.name,
101
+ action: t.action,
102
+ keepAliveName: t.comp.keepAlive ? t.comp.name : void 0,
103
+ icon: t.comp.icon
104
104
  }
105
- }), a.push(o.name)) : m.hasRoute(o.name) && m.removeRoute(o.name);
105
+ }), a.push(t.name)) : m.hasRoute(t.name) && m.removeRoute(t.name);
106
106
  }
107
107
  return a;
108
108
  }, M = (m) => ({
@@ -110,9 +110,9 @@ const x = () => [
110
110
  const n = f(m, a);
111
111
  if (typeof n < "u")
112
112
  return n;
113
- const t = await e.dataProvider?.getPermissions?.(), { addTab: u, lastTab: o } = l(), r = a.meta;
113
+ const o = await e.dataProvider?.getPermissions?.(), { addTab: u, lastTab: t } = l(), r = a.meta;
114
114
  let c;
115
- return t && (p().permissions.value = t, c = await N(m, t), typeof a.name == "string" && c.includes(a.name)) ? (u({
115
+ return o && (p().permissions.value = o, c = await d(m, o), typeof a.name == "string" && c.includes(a.name)) ? (u({
116
116
  routeName: a.name,
117
117
  routeParams: a.params,
118
118
  routeKeepAliveName: r.keepAliveName,
@@ -124,11 +124,11 @@ const x = () => [
124
124
  routeKeepAliveName: r.keepAliveName,
125
125
  title: r.tabTitle,
126
126
  icon: r.icon
127
- }), !0) : a.name === e.notFoundRouteName ? o.value?.routeName && c?.includes(o.value.routeName) ? { name: o.value.routeName, params: o.value.routeParams } : { name: e.welcomeRouteName } : !1;
127
+ }), !0) : a.name === e.notFoundRouteName ? t.value?.routeName && c?.includes(t.value.routeName) ? { name: t.value.routeName, params: t.value.routeParams } : { name: e.welcomeRouteName } : !1;
128
128
  }
129
129
  });
130
130
  export {
131
- N as addLayoutRoutes,
131
+ d as addLayoutRoutes,
132
132
  f as checkAuth,
133
133
  x as getRoutes,
134
134
  M as guard
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/router/index.ts"],"sourcesContent":["import type { RouteLocationNormalizedGeneric, Router } from 'vue-router'\r\n\r\nimport { skyConfig } from '@/setup'\r\nimport type { RouteRecordRaw } from 'vue-router'\r\nimport { usePermission, useTab, useUser } from '@/hooks'\r\nimport type { CanAccessItem } from '@/provides'\r\n\r\nexport type SkyLayoutRouteMeta = {\r\n tab: true\r\n resource: string\r\n action: 'list' | 'create' | 'edit' | 'show'\r\n row: string\r\n column: string\r\n tabTitle: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport const getRoutes = (): RouteRecordRaw[] => {\r\n return [\r\n {\r\n name: skyConfig.layoutRouteName,\r\n path: '/',\r\n component: () => skyConfig.layoutPage ?? import('@/layouts/default'),\r\n redirect: { name: skyConfig.welcomeRouteName },\r\n children: [\r\n {\r\n name: skyConfig.welcomeRouteName,\r\n path: 'welcome',\r\n component: () => skyConfig.welcomePage ?? import('@/pages/welcome'),\r\n meta: {\r\n tab: true,\r\n tabTitle: '欢迎界面',\r\n resource: '*',\r\n action: '*',\r\n row: '*',\r\n column: '*',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: skyConfig.loginRouteName,\r\n path: '/login',\r\n component: () => skyConfig.loginPage ?? import('@/pages/login'),\r\n },\r\n {\r\n name: skyConfig.notFoundRouteName,\r\n path: '/:pathMatch(.*)*',\r\n component: () => skyConfig.notFoundPage ?? import('@/pages/not-found'),\r\n },\r\n ]\r\n}\r\n\r\nexport const checkAuth = (router: Router, to: RouteLocationNormalizedGeneric) => {\r\n const { isLogin } = useUser()\r\n\r\n // 检测是否需要登录\r\n // openLogin - 表示开启登录界面功能\r\n // isLogin - 表示是否已经登录\r\n const openLogin = router.hasRoute(skyConfig.loginRouteName)\r\n if (openLogin) {\r\n if (to.name === skyConfig.loginRouteName) {\r\n if (isLogin.value) {\r\n return { name: skyConfig.layoutRouteName }\r\n } else {\r\n return true\r\n }\r\n } else {\r\n if (!isLogin.value) {\r\n return { name: skyConfig.loginRouteName }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const addLayoutRoutes = async (router: Router, permissions: CanAccessItem[]) => {\r\n const result: string[] = []\r\n const resources =\r\n typeof skyConfig.resources === 'function' ? await skyConfig.resources() : skyConfig.resources\r\n if (resources) {\r\n for (const resource of resources) {\r\n const routes = [\r\n {\r\n comp: resource.list,\r\n name: skyConfig.getListRouteName(resource.name),\r\n path: resource.name,\r\n action: 'list',\r\n },\r\n {\r\n comp: resource.create,\r\n name: skyConfig.getCreateRouteName(resource.name),\r\n path: `${resource.name}/create`,\r\n action: 'create',\r\n },\r\n {\r\n comp: resource.edit,\r\n name: skyConfig.getEditRouteName(resource.name),\r\n path: `${resource.name}/edit/:id`,\r\n action: 'edit',\r\n },\r\n {\r\n comp: resource.show,\r\n name: skyConfig.getShowRouteName(resource.name),\r\n path: `${resource.name}/show/:id`,\r\n action: 'show',\r\n },\r\n ]\r\n for (const route of routes) {\r\n if (\r\n route.comp &&\r\n skyConfig.dataProvider?.canAccess?.(\r\n { resource: resource.name, action: route.action },\r\n permissions,\r\n )\r\n ) {\r\n if (!router.hasRoute(route.name)) {\r\n router.addRoute(skyConfig.layoutRouteName, {\r\n name: route.name,\r\n path: route.path,\r\n component: route.comp,\r\n meta: {\r\n tab: true,\r\n tabTitle: route.comp.title || `${resource.name} ${route.action}`,\r\n resource: resource.name,\r\n action: route.action,\r\n keepAliveName: route.comp.keepAliveName,\r\n icon: route.comp.icon,\r\n },\r\n })\r\n }\r\n result.push(route.name)\r\n } else {\r\n if (router.hasRoute(route.name)) {\r\n router.removeRoute(route.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const guard = (router: Router) => {\r\n const beforeEach = async (to: RouteLocationNormalizedGeneric) => {\r\n const authTo = checkAuth(router, to)\r\n\r\n if (typeof authTo !== 'undefined') {\r\n return authTo\r\n }\r\n\r\n // 获取所有权限\r\n const permissions = await skyConfig.dataProvider?.getPermissions?.()\r\n\r\n const { addTab, lastTab } = useTab()\r\n\r\n const meta = to.meta as SkyLayoutRouteMeta\r\n\r\n let routes: string[] | undefined\r\n if (permissions) {\r\n // 每次路由获取权限,需要全局存储下来\r\n usePermission().permissions.value = permissions\r\n\r\n routes = await addLayoutRoutes(router, permissions)\r\n\r\n if (typeof to.name === 'string' && routes.includes(to.name)) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n }\r\n }\r\n\r\n // 所有都支持访问 welcome\r\n if (to.name === skyConfig.welcomeRouteName) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n } else if (to.name === skyConfig.notFoundRouteName) {\r\n if (lastTab.value?.routeName && routes?.includes(lastTab.value.routeName)) {\r\n return { name: lastTab.value.routeName, params: lastTab.value.routeParams }\r\n }\r\n return { name: skyConfig.welcomeRouteName }\r\n }\r\n\r\n // 无权限\r\n return false\r\n }\r\n\r\n return {\r\n beforeEach,\r\n }\r\n}\r\n"],"names":["getRoutes","skyConfig","checkAuth","router","to","isLogin","useUser","addLayoutRoutes","permissions","result","resources","resource","routes","route","guard","authTo","addTab","lastTab","useTab","meta","usePermission"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/router/index.ts"],"sourcesContent":["import type { RouteLocationNormalizedGeneric, Router } from 'vue-router'\r\n\r\nimport { skyConfig } from '@/setup'\r\nimport type { RouteRecordRaw } from 'vue-router'\r\nimport { usePermission, useTab, useUser } from '@/hooks'\r\nimport type { CanAccessItem } from '@/provides'\r\n\r\nexport type SkyLayoutRouteMeta = {\r\n tab: true\r\n resource: string\r\n action: 'list' | 'create' | 'edit' | 'show'\r\n row: string\r\n column: string\r\n tabTitle: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport const getRoutes = (): RouteRecordRaw[] => {\r\n return [\r\n {\r\n name: skyConfig.layoutRouteName,\r\n path: '/',\r\n component: () => skyConfig.layoutPage ?? import('@/layouts/default'),\r\n redirect: { name: skyConfig.welcomeRouteName },\r\n children: [\r\n {\r\n name: skyConfig.welcomeRouteName,\r\n path: 'welcome',\r\n component: () => skyConfig.welcomePage ?? import('@/pages/welcome'),\r\n meta: {\r\n tab: true,\r\n tabTitle: '欢迎界面',\r\n resource: '*',\r\n action: '*',\r\n row: '*',\r\n column: '*',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: skyConfig.loginRouteName,\r\n path: '/login',\r\n component: () => skyConfig.loginPage ?? import('@/pages/login'),\r\n },\r\n {\r\n name: skyConfig.notFoundRouteName,\r\n path: '/:pathMatch(.*)*',\r\n component: () => skyConfig.notFoundPage ?? import('@/pages/not-found'),\r\n },\r\n ]\r\n}\r\n\r\nexport const checkAuth = (router: Router, to: RouteLocationNormalizedGeneric) => {\r\n const { isLogin } = useUser()\r\n\r\n // 检测是否需要登录\r\n // openLogin - 表示开启登录界面功能\r\n // isLogin - 表示是否已经登录\r\n const openLogin = router.hasRoute(skyConfig.loginRouteName)\r\n if (openLogin) {\r\n if (to.name === skyConfig.loginRouteName) {\r\n if (isLogin.value) {\r\n return { name: skyConfig.layoutRouteName }\r\n } else {\r\n return true\r\n }\r\n } else {\r\n if (!isLogin.value) {\r\n return { name: skyConfig.loginRouteName }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const addLayoutRoutes = async (router: Router, permissions: CanAccessItem[]) => {\r\n const result: string[] = []\r\n const resources =\r\n typeof skyConfig.resources === 'function' ? await skyConfig.resources() : skyConfig.resources\r\n if (resources) {\r\n for (const resource of resources) {\r\n const routes = [\r\n {\r\n comp: resource.list,\r\n name: skyConfig.getListRouteName(resource.name),\r\n path: resource.name,\r\n action: 'list',\r\n },\r\n {\r\n comp: resource.create,\r\n name: skyConfig.getCreateRouteName(resource.name),\r\n path: `${resource.name}/create`,\r\n action: 'create',\r\n },\r\n {\r\n comp: resource.edit,\r\n name: skyConfig.getEditRouteName(resource.name),\r\n path: `${resource.name}/edit/:id`,\r\n action: 'edit',\r\n },\r\n {\r\n comp: resource.show,\r\n name: skyConfig.getShowRouteName(resource.name),\r\n path: `${resource.name}/show/:id`,\r\n action: 'show',\r\n },\r\n ]\r\n for (const route of routes) {\r\n if (\r\n route.comp &&\r\n skyConfig.dataProvider?.canAccess?.(\r\n { resource: resource.name, action: route.action },\r\n permissions,\r\n )\r\n ) {\r\n if (!router.hasRoute(route.name)) {\r\n router.addRoute(skyConfig.layoutRouteName, {\r\n name: route.name,\r\n path: route.path,\r\n component: route.comp,\r\n meta: {\r\n tab: true,\r\n tabTitle: route.comp.title || `${resource.name} ${route.action}`,\r\n resource: resource.name,\r\n action: route.action,\r\n keepAliveName: route.comp.keepAlive ? route.comp.name : undefined,\r\n icon: route.comp.icon,\r\n },\r\n })\r\n }\r\n result.push(route.name)\r\n } else {\r\n if (router.hasRoute(route.name)) {\r\n router.removeRoute(route.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const guard = (router: Router) => {\r\n const beforeEach = async (to: RouteLocationNormalizedGeneric) => {\r\n const authTo = checkAuth(router, to)\r\n\r\n if (typeof authTo !== 'undefined') {\r\n return authTo\r\n }\r\n\r\n // 获取所有权限\r\n const permissions = await skyConfig.dataProvider?.getPermissions?.()\r\n\r\n const { addTab, lastTab } = useTab()\r\n\r\n const meta = to.meta as SkyLayoutRouteMeta\r\n\r\n let routes: string[] | undefined\r\n if (permissions) {\r\n // 每次路由获取权限,需要全局存储下来\r\n usePermission().permissions.value = permissions\r\n\r\n routes = await addLayoutRoutes(router, permissions)\r\n\r\n if (typeof to.name === 'string' && routes.includes(to.name)) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n }\r\n }\r\n\r\n // 所有都支持访问 welcome\r\n if (to.name === skyConfig.welcomeRouteName) {\r\n addTab({\r\n routeName: to.name,\r\n routeParams: to.params,\r\n routeKeepAliveName: meta.keepAliveName,\r\n title: meta.tabTitle,\r\n icon: meta.icon,\r\n })\r\n return true\r\n } else if (to.name === skyConfig.notFoundRouteName) {\r\n if (lastTab.value?.routeName && routes?.includes(lastTab.value.routeName)) {\r\n return { name: lastTab.value.routeName, params: lastTab.value.routeParams }\r\n }\r\n return { name: skyConfig.welcomeRouteName }\r\n }\r\n\r\n // 无权限\r\n return false\r\n }\r\n\r\n return {\r\n beforeEach,\r\n }\r\n}\r\n"],"names":["getRoutes","skyConfig","checkAuth","router","to","isLogin","useUser","addLayoutRoutes","permissions","result","resources","resource","routes","route","guard","authTo","addTab","lastTab","useTab","meta","usePermission"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/setup/index.ts"],"sourcesContent":["import type { CanAccessItem, DataProvider } from '@/provides/dataProvider'\r\nimport { h, type App, type Component, type VNode } from 'vue'\r\nimport { default as en } from '@/i18n/locales/en'\r\nimport { createI18n } from 'vue-i18n'\r\nimport type { RouteParamsGeneric } from 'vue-router'\r\nimport { ElIcon } from 'element-plus'\r\n\r\nexport type SkyLanguage = typeof en\r\n\r\nexport type SkyComponent = Component & {\r\n title?: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport interface SkyResource {\r\n name: string\r\n list?: SkyComponent\r\n create?: SkyComponent\r\n edit?: SkyComponent\r\n show?: SkyComponent\r\n}\r\n\r\nexport interface SkyMenu {\r\n routeName: string\r\n routeParams?: RouteParamsGeneric\r\n title: string\r\n icon?: string\r\n children?: SkyMenu[]\r\n permission: CanAccessItem\r\n}\r\n\r\nexport type SkyConfig = {\r\n sizeName: string\r\n langName: string\r\n tokenName: string\r\n usernameName: string\r\n collapseName: string\r\n tabsName: string\r\n tabListStackName: string\r\n notFoundRouteName: string\r\n loginRouteName: string\r\n welcomeRouteName: string\r\n layoutRouteName: string\r\n permissionThrottle: number\r\n dataProvider?: DataProvider\r\n icons?: Record<string, Component>\r\n menus?: SkyMenu[]\r\n resources?: SkyResource[] | (() => Promise<SkyResource[]>)\r\n getRandomRouteName: () => string\r\n getListRouteName: (resource: string) => string\r\n getCreateRouteName: (resource: string) => string\r\n getEditRouteName: (resource: string) => string\r\n getShowRouteName: (resource: string) => string\r\n locales: Record<string, SkyLanguage>\r\n loginPage?: Component | Promise<Component>\r\n layoutPage?: Component | Promise<Component>\r\n notFoundPage?: Component | Promise<Component>\r\n welcomePage?: Component | Promise<Component>\r\n logoImg?: string\r\n loginImg?: string\r\n themeEnabled: boolean\r\n getIconFnName: string\r\n}\r\n\r\nexport type SkyConfigKey = keyof SkyConfig\r\n\r\nexport const getRandomRouteName = () => Math.random().toString(16).slice(2)\r\nexport const getListRouteName = (resource: string) => `/sky/layout/${resource}`\r\nexport const getCreateRouteName = (resource: string) => `/sky/layout/${resource}/create`\r\nexport const getEditRouteName = (resource: string) => `/sky/layout/${resource}/edit`\r\nexport const getShowRouteName = (resource: string) => `/sky/layout/${resource}/show`\r\n\r\nexport const skyConfig: SkyConfig = {\r\n sizeName: 'sky:size',\r\n langName: 'sky:lang',\r\n tokenName: 'sky:user:token',\r\n usernameName: 'sky:user:username',\r\n collapseName: 'sky:menu:collapse',\r\n tabsName: 'sky:tab:tabs',\r\n tabListStackName: 'sky:tab:tabListStack',\r\n notFoundRouteName: '/sky/not-found',\r\n loginRouteName: '/sky/login',\r\n welcomeRouteName: '/sky/welcome',\r\n layoutRouteName: '/sky/layout',\r\n permissionThrottle: 5000,\r\n getRandomRouteName,\r\n getListRouteName,\r\n getCreateRouteName,\r\n getEditRouteName,\r\n getShowRouteName,\r\n locales: {\r\n en,\r\n },\r\n themeEnabled: false,\r\n getIconFnName: 'getIconFn',\r\n}\r\n\r\nexport type GetIconFn = (icon: string) => VNode | undefined\r\n\r\nexport const skyAdmin = {\r\n install: (app: App, config: Partial<SkyConfig>) => {\r\n Object.assign(skyConfig, config)\r\n\r\n app.use(\r\n createI18n({\r\n // 适配 composition API\r\n legacy: false,\r\n locale: 'en',\r\n fallbackLocale: 'en',\r\n messages: skyConfig.locales,\r\n }),\r\n )\r\n\r\n app.provide<GetIconFn>(skyConfig.getIconFnName, (icon) => {\r\n if (skyConfig.icons?.[icon]) {\r\n return h(ElIcon, null, {\r\n default: () => h(skyConfig.icons![icon]!),\r\n })\r\n }\r\n })\r\n },\r\n}\r\n"],"names":["getRandomRouteName","getListRouteName","resource","getCreateRouteName","getEditRouteName","getShowRouteName","skyConfig","en","skyAdmin","app","config","createI18n","icon","h","ElIcon"],"mappings":"2LAoEaA,EAAqB,IAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,EAC7DC,EAAoBC,GAAqB,eAAeA,CAAQ,GAChEC,EAAsBD,GAAqB,eAAeA,CAAQ,UAClEE,EAAoBF,GAAqB,eAAeA,CAAQ,QAChEG,EAAoBH,GAAqB,eAAeA,CAAQ,QAEhEI,EAAuB,CAClC,SAAU,WACV,SAAU,WACV,UAAW,iBACX,aAAc,oBACd,aAAc,oBACd,SAAU,eACV,iBAAkB,uBAClB,kBAAmB,iBACnB,eAAgB,aAChB,iBAAkB,eAClB,gBAAiB,cACjB,mBAAoB,IACpB,mBAAAN,EACA,iBAAAC,EACA,mBAAAE,EACA,iBAAAC,EACA,iBAAAC,EACA,QAAS,CAAA,GACPE,EAAAA,OAAA,EAEF,aAAc,GACd,cAAe,WACjB,EAIaC,EAAW,CACtB,QAAS,CAACC,EAAUC,IAA+B,CACjD,OAAO,OAAOJ,EAAWI,CAAM,EAE/BD,EAAI,IACFE,aAAW,CAET,OAAQ,GACR,OAAQ,KACR,eAAgB,KAChB,SAAUL,EAAU,OAAA,CACrB,CAAA,EAGHG,EAAI,QAAmBH,EAAU,cAAgBM,GAAS,CACxD,GAAIN,EAAU,QAAQM,CAAI,EACxB,OAAOC,EAAAA,EAAEC,EAAAA,OAAQ,KAAM,CACrB,QAAS,IAAMD,EAAAA,EAAEP,EAAU,MAAOM,CAAI,CAAE,CAAA,CACzC,CAEL,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/setup/index.ts"],"sourcesContent":["import type { CanAccessItem, DataProvider } from '@/provides/dataProvider'\r\nimport { h, type App, type Component, type VNode } from 'vue'\r\nimport { default as en } from '@/i18n/locales/en'\r\nimport { createI18n } from 'vue-i18n'\r\nimport type { RouteParamsGeneric } from 'vue-router'\r\nimport { ElIcon } from 'element-plus'\r\n\r\nexport type SkyLanguage = typeof en\r\n\r\nexport type SkyComponent = Component & {\r\n title?: string\r\n // 是否添加到 keepAlive 列表\r\n // keepAliveName?: string\r\n keepAlive?: boolean\r\n icon?: string\r\n}\r\n\r\nexport interface SkyResource {\r\n name: string\r\n list?: SkyComponent\r\n create?: SkyComponent\r\n edit?: SkyComponent\r\n show?: SkyComponent\r\n}\r\n\r\nexport interface SkyMenu {\r\n routeName: string\r\n routeParams?: RouteParamsGeneric\r\n title: string\r\n icon?: string\r\n children?: SkyMenu[]\r\n permission: CanAccessItem\r\n}\r\n\r\nexport type SkyConfig = {\r\n sizeName: string\r\n langName: string\r\n tokenName: string\r\n usernameName: string\r\n collapseName: string\r\n tabsName: string\r\n tabListStackName: string\r\n notFoundRouteName: string\r\n loginRouteName: string\r\n welcomeRouteName: string\r\n layoutRouteName: string\r\n permissionThrottle: number\r\n dataProvider?: DataProvider\r\n icons?: Record<string, Component>\r\n menus?: SkyMenu[]\r\n resources?: SkyResource[] | (() => Promise<SkyResource[]>)\r\n getRandomRouteName: () => string\r\n getListRouteName: (resource: string) => string\r\n getCreateRouteName: (resource: string) => string\r\n getEditRouteName: (resource: string) => string\r\n getShowRouteName: (resource: string) => string\r\n locales: Record<string, SkyLanguage>\r\n loginPage?: Component | Promise<Component>\r\n layoutPage?: Component | Promise<Component>\r\n notFoundPage?: Component | Promise<Component>\r\n welcomePage?: Component | Promise<Component>\r\n logoImg?: string\r\n loginImg?: string\r\n themeEnabled: boolean\r\n getIconFnName: string\r\n}\r\n\r\nexport type SkyConfigKey = keyof SkyConfig\r\n\r\nexport const getRandomRouteName = () => Math.random().toString(16).slice(2)\r\nexport const getListRouteName = (resource: string) => `/sky/layout/${resource}`\r\nexport const getCreateRouteName = (resource: string) => `/sky/layout/${resource}/create`\r\nexport const getEditRouteName = (resource: string) => `/sky/layout/${resource}/edit`\r\nexport const getShowRouteName = (resource: string) => `/sky/layout/${resource}/show`\r\n\r\nexport const skyConfig: SkyConfig = {\r\n sizeName: 'sky:size',\r\n langName: 'sky:lang',\r\n tokenName: 'sky:user:token',\r\n usernameName: 'sky:user:username',\r\n collapseName: 'sky:menu:collapse',\r\n tabsName: 'sky:tab:tabs',\r\n tabListStackName: 'sky:tab:tabListStack',\r\n notFoundRouteName: '/sky/not-found',\r\n loginRouteName: '/sky/login',\r\n welcomeRouteName: '/sky/welcome',\r\n layoutRouteName: '/sky/layout',\r\n permissionThrottle: 5000,\r\n getRandomRouteName,\r\n getListRouteName,\r\n getCreateRouteName,\r\n getEditRouteName,\r\n getShowRouteName,\r\n locales: {\r\n en,\r\n },\r\n themeEnabled: false,\r\n getIconFnName: 'getIconFn',\r\n}\r\n\r\nexport type GetIconFn = (icon: string) => VNode | undefined\r\n\r\nexport const skyAdmin = {\r\n install: (app: App, config: Partial<SkyConfig>) => {\r\n Object.assign(skyConfig, config)\r\n\r\n app.use(\r\n createI18n({\r\n // 适配 composition API\r\n legacy: false,\r\n locale: 'en',\r\n fallbackLocale: 'en',\r\n messages: skyConfig.locales,\r\n }),\r\n )\r\n\r\n app.provide<GetIconFn>(skyConfig.getIconFnName, (icon) => {\r\n if (skyConfig.icons?.[icon]) {\r\n return h(ElIcon, null, {\r\n default: () => h(skyConfig.icons![icon]!),\r\n })\r\n }\r\n })\r\n },\r\n}\r\n"],"names":["getRandomRouteName","getListRouteName","resource","getCreateRouteName","getEditRouteName","getShowRouteName","skyConfig","en","skyAdmin","app","config","createI18n","icon","h","ElIcon"],"mappings":"2LAqEaA,EAAqB,IAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,EAC7DC,EAAoBC,GAAqB,eAAeA,CAAQ,GAChEC,EAAsBD,GAAqB,eAAeA,CAAQ,UAClEE,EAAoBF,GAAqB,eAAeA,CAAQ,QAChEG,EAAoBH,GAAqB,eAAeA,CAAQ,QAEhEI,EAAuB,CAClC,SAAU,WACV,SAAU,WACV,UAAW,iBACX,aAAc,oBACd,aAAc,oBACd,SAAU,eACV,iBAAkB,uBAClB,kBAAmB,iBACnB,eAAgB,aAChB,iBAAkB,eAClB,gBAAiB,cACjB,mBAAoB,IACpB,mBAAAN,EACA,iBAAAC,EACA,mBAAAE,EACA,iBAAAC,EACA,iBAAAC,EACA,QAAS,CAAA,GACPE,EAAAA,OAAA,EAEF,aAAc,GACd,cAAe,WACjB,EAIaC,EAAW,CACtB,QAAS,CAACC,EAAUC,IAA+B,CACjD,OAAO,OAAOJ,EAAWI,CAAM,EAE/BD,EAAI,IACFE,aAAW,CAET,OAAQ,GACR,OAAQ,KACR,eAAgB,KAChB,SAAUL,EAAU,OAAA,CACrB,CAAA,EAGHG,EAAI,QAAmBH,EAAU,cAAgBM,GAAS,CACxD,GAAIN,EAAU,QAAQM,CAAI,EACxB,OAAOC,EAAAA,EAAEC,EAAAA,OAAQ,KAAM,CACrB,QAAS,IAAMD,EAAAA,EAAEP,EAAU,MAAOM,CAAI,CAAE,CAAA,CACzC,CAEL,CAAC,CACH,CACF"}
@@ -5,7 +5,7 @@ import { RouteParamsGeneric } from 'vue-router';
5
5
  export type SkyLanguage = typeof en;
6
6
  export type SkyComponent = Component & {
7
7
  title?: string;
8
- keepAliveName?: string;
8
+ keepAlive?: boolean;
9
9
  icon?: string;
10
10
  };
11
11
  export interface SkyResource {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/setup/index.ts"],"sourcesContent":["import type { CanAccessItem, DataProvider } from '@/provides/dataProvider'\r\nimport { h, type App, type Component, type VNode } from 'vue'\r\nimport { default as en } from '@/i18n/locales/en'\r\nimport { createI18n } from 'vue-i18n'\r\nimport type { RouteParamsGeneric } from 'vue-router'\r\nimport { ElIcon } from 'element-plus'\r\n\r\nexport type SkyLanguage = typeof en\r\n\r\nexport type SkyComponent = Component & {\r\n title?: string\r\n // 是否添加到 keepAlive 列表\r\n keepAliveName?: string\r\n icon?: string\r\n}\r\n\r\nexport interface SkyResource {\r\n name: string\r\n list?: SkyComponent\r\n create?: SkyComponent\r\n edit?: SkyComponent\r\n show?: SkyComponent\r\n}\r\n\r\nexport interface SkyMenu {\r\n routeName: string\r\n routeParams?: RouteParamsGeneric\r\n title: string\r\n icon?: string\r\n children?: SkyMenu[]\r\n permission: CanAccessItem\r\n}\r\n\r\nexport type SkyConfig = {\r\n sizeName: string\r\n langName: string\r\n tokenName: string\r\n usernameName: string\r\n collapseName: string\r\n tabsName: string\r\n tabListStackName: string\r\n notFoundRouteName: string\r\n loginRouteName: string\r\n welcomeRouteName: string\r\n layoutRouteName: string\r\n permissionThrottle: number\r\n dataProvider?: DataProvider\r\n icons?: Record<string, Component>\r\n menus?: SkyMenu[]\r\n resources?: SkyResource[] | (() => Promise<SkyResource[]>)\r\n getRandomRouteName: () => string\r\n getListRouteName: (resource: string) => string\r\n getCreateRouteName: (resource: string) => string\r\n getEditRouteName: (resource: string) => string\r\n getShowRouteName: (resource: string) => string\r\n locales: Record<string, SkyLanguage>\r\n loginPage?: Component | Promise<Component>\r\n layoutPage?: Component | Promise<Component>\r\n notFoundPage?: Component | Promise<Component>\r\n welcomePage?: Component | Promise<Component>\r\n logoImg?: string\r\n loginImg?: string\r\n themeEnabled: boolean\r\n getIconFnName: string\r\n}\r\n\r\nexport type SkyConfigKey = keyof SkyConfig\r\n\r\nexport const getRandomRouteName = () => Math.random().toString(16).slice(2)\r\nexport const getListRouteName = (resource: string) => `/sky/layout/${resource}`\r\nexport const getCreateRouteName = (resource: string) => `/sky/layout/${resource}/create`\r\nexport const getEditRouteName = (resource: string) => `/sky/layout/${resource}/edit`\r\nexport const getShowRouteName = (resource: string) => `/sky/layout/${resource}/show`\r\n\r\nexport const skyConfig: SkyConfig = {\r\n sizeName: 'sky:size',\r\n langName: 'sky:lang',\r\n tokenName: 'sky:user:token',\r\n usernameName: 'sky:user:username',\r\n collapseName: 'sky:menu:collapse',\r\n tabsName: 'sky:tab:tabs',\r\n tabListStackName: 'sky:tab:tabListStack',\r\n notFoundRouteName: '/sky/not-found',\r\n loginRouteName: '/sky/login',\r\n welcomeRouteName: '/sky/welcome',\r\n layoutRouteName: '/sky/layout',\r\n permissionThrottle: 5000,\r\n getRandomRouteName,\r\n getListRouteName,\r\n getCreateRouteName,\r\n getEditRouteName,\r\n getShowRouteName,\r\n locales: {\r\n en,\r\n },\r\n themeEnabled: false,\r\n getIconFnName: 'getIconFn',\r\n}\r\n\r\nexport type GetIconFn = (icon: string) => VNode | undefined\r\n\r\nexport const skyAdmin = {\r\n install: (app: App, config: Partial<SkyConfig>) => {\r\n Object.assign(skyConfig, config)\r\n\r\n app.use(\r\n createI18n({\r\n // 适配 composition API\r\n legacy: false,\r\n locale: 'en',\r\n fallbackLocale: 'en',\r\n messages: skyConfig.locales,\r\n }),\r\n )\r\n\r\n app.provide<GetIconFn>(skyConfig.getIconFnName, (icon) => {\r\n if (skyConfig.icons?.[icon]) {\r\n return h(ElIcon, null, {\r\n default: () => h(skyConfig.icons![icon]!),\r\n })\r\n }\r\n })\r\n },\r\n}\r\n"],"names":["getRandomRouteName","getListRouteName","resource","getCreateRouteName","getEditRouteName","getShowRouteName","skyConfig","en","skyAdmin","app","config","createI18n","icon","h","ElIcon"],"mappings":";;;;AAoEO,MAAMA,IAAqB,MAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,GAC7DC,IAAmB,CAACC,MAAqB,eAAeA,CAAQ,IAChEC,IAAqB,CAACD,MAAqB,eAAeA,CAAQ,WAClEE,IAAmB,CAACF,MAAqB,eAAeA,CAAQ,SAChEG,IAAmB,CAACH,MAAqB,eAAeA,CAAQ,SAEhEI,IAAuB;AAAA,EAClC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,oBAAAN;AAAA,EACA,kBAAAC;AAAA,EACA,oBAAAE;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAS;AAAA,IACP,IAAAE;AAAA,EAAA;AAAA,EAEF,cAAc;AAAA,EACd,eAAe;AACjB,GAIaC,IAAW;AAAA,EACtB,SAAS,CAACC,GAAUC,MAA+B;AACjD,WAAO,OAAOJ,GAAWI,CAAM,GAE/BD,EAAI;AAAA,MACFE,EAAW;AAAA;AAAA,QAET,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,UAAUL,EAAU;AAAA,MAAA,CACrB;AAAA,IAAA,GAGHG,EAAI,QAAmBH,EAAU,eAAe,CAACM,MAAS;AACxD,UAAIN,EAAU,QAAQM,CAAI;AACxB,eAAOC,EAAEC,GAAQ,MAAM;AAAA,UACrB,SAAS,MAAMD,EAAEP,EAAU,MAAOM,CAAI,CAAE;AAAA,QAAA,CACzC;AAAA,IAEL,CAAC;AAAA,EACH;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/setup/index.ts"],"sourcesContent":["import type { CanAccessItem, DataProvider } from '@/provides/dataProvider'\r\nimport { h, type App, type Component, type VNode } from 'vue'\r\nimport { default as en } from '@/i18n/locales/en'\r\nimport { createI18n } from 'vue-i18n'\r\nimport type { RouteParamsGeneric } from 'vue-router'\r\nimport { ElIcon } from 'element-plus'\r\n\r\nexport type SkyLanguage = typeof en\r\n\r\nexport type SkyComponent = Component & {\r\n title?: string\r\n // 是否添加到 keepAlive 列表\r\n // keepAliveName?: string\r\n keepAlive?: boolean\r\n icon?: string\r\n}\r\n\r\nexport interface SkyResource {\r\n name: string\r\n list?: SkyComponent\r\n create?: SkyComponent\r\n edit?: SkyComponent\r\n show?: SkyComponent\r\n}\r\n\r\nexport interface SkyMenu {\r\n routeName: string\r\n routeParams?: RouteParamsGeneric\r\n title: string\r\n icon?: string\r\n children?: SkyMenu[]\r\n permission: CanAccessItem\r\n}\r\n\r\nexport type SkyConfig = {\r\n sizeName: string\r\n langName: string\r\n tokenName: string\r\n usernameName: string\r\n collapseName: string\r\n tabsName: string\r\n tabListStackName: string\r\n notFoundRouteName: string\r\n loginRouteName: string\r\n welcomeRouteName: string\r\n layoutRouteName: string\r\n permissionThrottle: number\r\n dataProvider?: DataProvider\r\n icons?: Record<string, Component>\r\n menus?: SkyMenu[]\r\n resources?: SkyResource[] | (() => Promise<SkyResource[]>)\r\n getRandomRouteName: () => string\r\n getListRouteName: (resource: string) => string\r\n getCreateRouteName: (resource: string) => string\r\n getEditRouteName: (resource: string) => string\r\n getShowRouteName: (resource: string) => string\r\n locales: Record<string, SkyLanguage>\r\n loginPage?: Component | Promise<Component>\r\n layoutPage?: Component | Promise<Component>\r\n notFoundPage?: Component | Promise<Component>\r\n welcomePage?: Component | Promise<Component>\r\n logoImg?: string\r\n loginImg?: string\r\n themeEnabled: boolean\r\n getIconFnName: string\r\n}\r\n\r\nexport type SkyConfigKey = keyof SkyConfig\r\n\r\nexport const getRandomRouteName = () => Math.random().toString(16).slice(2)\r\nexport const getListRouteName = (resource: string) => `/sky/layout/${resource}`\r\nexport const getCreateRouteName = (resource: string) => `/sky/layout/${resource}/create`\r\nexport const getEditRouteName = (resource: string) => `/sky/layout/${resource}/edit`\r\nexport const getShowRouteName = (resource: string) => `/sky/layout/${resource}/show`\r\n\r\nexport const skyConfig: SkyConfig = {\r\n sizeName: 'sky:size',\r\n langName: 'sky:lang',\r\n tokenName: 'sky:user:token',\r\n usernameName: 'sky:user:username',\r\n collapseName: 'sky:menu:collapse',\r\n tabsName: 'sky:tab:tabs',\r\n tabListStackName: 'sky:tab:tabListStack',\r\n notFoundRouteName: '/sky/not-found',\r\n loginRouteName: '/sky/login',\r\n welcomeRouteName: '/sky/welcome',\r\n layoutRouteName: '/sky/layout',\r\n permissionThrottle: 5000,\r\n getRandomRouteName,\r\n getListRouteName,\r\n getCreateRouteName,\r\n getEditRouteName,\r\n getShowRouteName,\r\n locales: {\r\n en,\r\n },\r\n themeEnabled: false,\r\n getIconFnName: 'getIconFn',\r\n}\r\n\r\nexport type GetIconFn = (icon: string) => VNode | undefined\r\n\r\nexport const skyAdmin = {\r\n install: (app: App, config: Partial<SkyConfig>) => {\r\n Object.assign(skyConfig, config)\r\n\r\n app.use(\r\n createI18n({\r\n // 适配 composition API\r\n legacy: false,\r\n locale: 'en',\r\n fallbackLocale: 'en',\r\n messages: skyConfig.locales,\r\n }),\r\n )\r\n\r\n app.provide<GetIconFn>(skyConfig.getIconFnName, (icon) => {\r\n if (skyConfig.icons?.[icon]) {\r\n return h(ElIcon, null, {\r\n default: () => h(skyConfig.icons![icon]!),\r\n })\r\n }\r\n })\r\n },\r\n}\r\n"],"names":["getRandomRouteName","getListRouteName","resource","getCreateRouteName","getEditRouteName","getShowRouteName","skyConfig","en","skyAdmin","app","config","createI18n","icon","h","ElIcon"],"mappings":";;;;AAqEO,MAAMA,IAAqB,MAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,GAC7DC,IAAmB,CAACC,MAAqB,eAAeA,CAAQ,IAChEC,IAAqB,CAACD,MAAqB,eAAeA,CAAQ,WAClEE,IAAmB,CAACF,MAAqB,eAAeA,CAAQ,SAChEG,IAAmB,CAACH,MAAqB,eAAeA,CAAQ,SAEhEI,IAAuB;AAAA,EAClC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,oBAAAN;AAAA,EACA,kBAAAC;AAAA,EACA,oBAAAE;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAS;AAAA,IACP,IAAAE;AAAA,EAAA;AAAA,EAEF,cAAc;AAAA,EACd,eAAe;AACjB,GAIaC,IAAW;AAAA,EACtB,SAAS,CAACC,GAAUC,MAA+B;AACjD,WAAO,OAAOJ,GAAWI,CAAM,GAE/BD,EAAI;AAAA,MACFE,EAAW;AAAA;AAAA,QAET,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,UAAUL,EAAU;AAAA,MAAA,CACrB;AAAA,IAAA,GAGHG,EAAI,QAAmBH,EAAU,eAAe,CAACM,MAAS;AACxD,UAAIN,EAAU,QAAQM,CAAI;AACxB,eAAOC,EAAEC,GAAQ,MAAM;AAAA,UACrB,SAAS,MAAMD,EAAEP,EAAU,MAAOM,CAAI,CAAE;AAAA,QAAA,CACzC;AAAA,IAEL,CAAC;AAAA,EACH;AACF;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skyline-vue-admin",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },