@ditari/bsui 1.0.37 → 1.0.38
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.
- package/dist/cjs/components/layout/NavTabs.vue.cjs.js +1 -1
- package/dist/cjs/components/menu/Menu.cjs.js +1 -1
- package/dist/cjs/store/modules/Menu.cjs.js +1 -1
- package/dist/cjs/store/modules/Menu.d.ts +6 -0
- package/dist/cjs/store/modules/NavTab.cjs.js +1 -1
- package/dist/cjs/store/modules/NavTab.d.ts +6 -0
- package/dist/css/index.css +1 -1
- package/dist/css/layout/style/index.css +1 -1
- package/dist/css/layout/style/navtab.css +1 -1
- package/dist/esm/components/layout/NavTabs.vue.esm.js +49 -49
- package/dist/esm/components/menu/Menu.esm.js +56 -37
- package/dist/esm/store/modules/Menu.d.ts +6 -0
- package/dist/esm/store/modules/Menu.esm.js +12 -7
- package/dist/esm/store/modules/NavTab.d.ts +6 -0
- package/dist/esm/store/modules/NavTab.esm.js +18 -6
- package/dist/style/layout/style/navtab.scss +1 -3
- package/package.json +1 -1
- package/src/components/layout/NavTabs.vue +29 -14
- package/src/components/layout/style/navtab.scss +1 -3
- package/src/components/menu/Menu.jsx +67 -28
- package/src/store/modules/Menu.ts +6 -1
- package/src/store/modules/NavTab.ts +13 -0
- package/src/store/modules/test/index.ts +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),_=require("vue-router"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),_=require("vue-router"),C=require("@ant-design/icons-vue"),y=require("pinia"),S=require("../../store/modules/NavTab.cjs.js"),g=require("../../store/modules/KeepAlive.cjs.js"),q=require("../../store/modules/Menu.cjs.js"),N={class:"ditari-nav"},T=e.createElementVNode("div",{class:"tab-dividers"},null,-1),B={key:0,class:"tab-close"},K={name:"DNavTabs"},E=e.defineComponent({...K,setup(V){const l=_.useRoute(),p=_.useRouter(),c=S.useNavTabsStore(),v=g.useKeepAliveStore(),h=q.useMenuStore(),n=e.computed(()=>c.getList),{selectedMenuKeys:u}=y.storeToRefs(h),r=e.ref("");e.watchEffect(()=>{r.value=u.value.length>0?u.value[0]:""}),d(),e.watch(()=>l.path,()=>{d()});function d(){c.save(l),u.value=[l.path],v.save(l)}const m=a=>{if(a!==l.path){const t=n.value.filter(s=>s.path===a)[0];p.push({path:t.path,query:t.query,params:t.params})}},f=(a,t)=>{const s=n.value.filter(i=>i.path===t)[0];a.stopPropagation(),c.deleteTabs(t),p.push(n.value[n.value.length-1].fullPath),s.name&&v.deleteKeepAlive(s.name)},b=a=>{var t;return!((t=a.meta)!=null&&t.keepOpen)||n.value.length===0};return(a,t)=>{const s=e.resolveComponent("a-tab-pane"),i=e.resolveComponent("a-tabs");return e.openBlock(),e.createElementBlock("div",N,[e.createVNode(i,{activeKey:r.value,"onUpdate:activeKey":t[0]||(t[0]=o=>r.value=o),type:"card",onTabClick:m},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(n),o=>(e.openBlock(),e.createBlock(s,{key:o.path},{tab:e.withCtx(()=>[T,e.createElementVNode("div",{class:e.normalizeClass(["tab-item",{active:r.value===o.path}])},e.toDisplayString(o.meta.title),3),b(o)?(e.openBlock(),e.createElementBlock("div",B,[e.createVNode(e.unref(C.CloseOutlined),{onClick:k=>f(k,o.fullPath)},null,8,["onClick"])])):e.createCommentVNode("",!0)]),_:2},1024))),128))]),_:1},8,["activeKey"])])}}});exports.default=E;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),v=require("vue-router"),h=require("pinia"),b=require("../../store/modules/Menu.cjs.js"),K=require("../../store/modules/Settings.cjs.js");function U(o){return typeof o=="function"||Object.prototype.toString.call(o)==="[object Object]"&&!t.isVNode(o)}const j=t.defineComponent({name:"DMenu",setup(){const o=v.useRouter(),f=v.useRoute(),{componentName:s,prop:q}=t.inject("menuIcon"),g=b.useMenuStore(),{list:a,openMenusKeys:l,selectedMenuKeys:u}=h.storeToRefs(g),N=K.useSettingsStore(),{getCollapsed:S}=h.storeToRefs(N);t.watchEffect(()=>{const e=u.value.length>0?u.value[0]:"",n=i(a.value,e);l.value=n||[]});function i(e,n){for(let r=0;r<e.length;r++){if(e[r].url===n||n.startsWith(e[r].url))return[e[r].url];if(e[r].children&&e[r].children.length>0){const c=i(e[r].children,n);if(c)return[e[r].url,...c]}}return null}const m=({item:e,key:n,keyPath:r})=>{l.value=r,u.value=[n],f.path!==n&&o.push(n).then(c=>c?console.warn(c):null)},V=e=>t.createVNode(t.Fragment,null,[t.createVNode(t.resolveComponent("a-menu-item"),{key:e.url},{icon:()=>d(e),default:()=>e.title})]),M=["anticon","anticon-menu","ant-menu-item-icon"],d=e=>t.createVNode(t.Fragment,null,[e.icon?y(e.icon):t.withDirectives(t.createVNode("div",{className:M},[e.title.substring(0,1)]),[[t.vShow,S.value]])]),y=e=>s==="nativeHtml"?t.createVNode("span",{innerHTML:e},null):t.h(t.resolveComponent(s),{prop:e}),p=e=>t.createVNode(t.Fragment,null,[t.createVNode(t.resolveComponent("a-sub-menu"),{key:e.url},{title:()=>e.title,icon:()=>d(e),default:()=>e.children.map(n=>!n.children||n.children.length===0?C(n):p(n))})]),C=e=>t.createVNode(t.Fragment,null,[t.createVNode(t.resolveComponent("a-menu-item"),{key:e.url},{default:()=>e.title})]);return()=>{let e;return t.createVNode(t.Fragment,null,[l.value,t.createVNode(t.resolveComponent("a-menu"),{mode:"inline",theme:"dark",openKeys:l.value,"onUpdate:openKeys":n=>l.value=n,selectedKeys:u.value,"onUpdate:selectedKeys":n=>u.value=n,onClick:m},U(e=a.value.map(n=>{var r;return!n.children||((r=n.children)==null?void 0:r.length)===0?V(n):p(n)}))?e:{default:()=>[e]})])}}});exports.default=j;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("pinia"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("pinia"),s=require("../types.cjs.js"),r=t.defineStore(s.MENU_ID,{state:()=>({list:[],openMenusKeys:[],selectedMenuKeys:[]}),getters:{getMenu:e=>e.list},actions:{save(e){this.list=e}},persist:!0});exports.useMenuStore=r;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export declare const useMenuStore: import("pinia").StoreDefinition<string, {
|
|
2
2
|
list: never[];
|
|
3
|
+
openMenusKeys: any;
|
|
4
|
+
selectedMenuKeys: any;
|
|
3
5
|
}, {
|
|
4
6
|
getMenu: (state: {
|
|
5
7
|
list: never[];
|
|
8
|
+
openMenusKeys: any;
|
|
9
|
+
selectedMenuKeys: any;
|
|
6
10
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
7
11
|
list: never[];
|
|
12
|
+
openMenusKeys: any;
|
|
13
|
+
selectedMenuKeys: any;
|
|
8
14
|
}>) => never[];
|
|
9
15
|
}, {
|
|
10
16
|
save(data: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("pinia"),l=require("../types.cjs.js"),r=a.defineStore(l.NAV_TAB_ID,{state:()=>({list:[],activeKey:""}),getters:{getList:t=>t.list,getActiveKey:t=>t.activeKey},actions:{setActiveKey(t){this.activeKey=t},save(t){if(this.list.some(i=>i.path===t.path))return;const e={path:t.path,fullPath:t.fullPath,query:t.query,params:t.params,meta:t.meta,name:t.name||""};this.list.push(e)},deleteTabs(t){this.list.splice(this.list.findIndex(s=>s.fullPath===t),1)},setNavTitle(t,s){for(let e=0;e<this.list.length;e++)if(this.list[e].fullPath===s){this.list[e].meta.title=t;break}}},persist:!0});exports.useNavTabsStore=r;
|
|
@@ -55,4 +55,10 @@ export declare const useNavTabsStore: import("pinia").StoreDefinition<string, {
|
|
|
55
55
|
* @param key url路径
|
|
56
56
|
*/
|
|
57
57
|
deleteTabs(key: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* 设置标题
|
|
60
|
+
* @param title 标题
|
|
61
|
+
* @param path url
|
|
62
|
+
*/
|
|
63
|
+
setNavTitle(title: string, path: string): void;
|
|
58
64
|
}>;
|
package/dist/css/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ditari-bsui-grid{position:relative;display:grid}.ditari-bsui-grid .ditari-bsui-grid--item{border:1px solid #4e4e4e;margin-left:-1px;margin-top:-1px}.ditari-bsui-grid-form .ant-form-item{margin-bottom:0;height:100%}.ditari-bsui-grid-form .ant-form-item .ant-form-item-label{border-right:1px solid #4e4e4e}.ditari-bsui-grid-form .ant-form-item .ant-input,.ditari-bsui-grid-form .ant-form-item .ant-select-selector,.ditari-bsui-grid-form .ant-form-item .ant-input-number{border:0;border-radius:0}.ditari-bsui-grid-form .ant-form-item .ant-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-select-selector:focus,.ditari-bsui-grid-form .ant-form-item .ant-input-number:focus{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item .ant-input .ant-input-number-input,.ditari-bsui-grid-form .ant-form-item .ant-select-selector .ant-input-number-input,.ditari-bsui-grid-form .ant-form-item .ant-input-number .ant-input-number-input{border:0;border-radius:0}.ditari-bsui-grid-form .ant-form-item .ant-input .ant-input-number-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-select-selector .ant-input-number-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-input-number .ant-input-number-input:focus{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item .ant-input[disabled]{color:#525252}.ditari-bsui-grid-form .ant-form-item-has-error .ant-form-item-explain{display:block}.ditari-bsui-grid-form .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus{box-shadow:0 0 0px 2px red;border-radius:0}.ditari-bsui-grid-form .ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input{box-shadow:0 0 0px 2px #ff4d4f}.ditari-menu{height:calc(100vh - 240px);overflow:scroll}.ditari-menu::-webkit-scrollbar{width:0 !important;display:none}.ditari-layout-sider{background-color:#162157}.ditari-layout-sider .ant-menu-dark{background-color:#162157}.ditari-layout-sider .ant-menu-dark .ant-menu-inline.ant-menu-sub{background-color:#101847}.ditari-breadcrumb .ant-breadcrumb-separator{display:none}.ditari-breadcrumb .breadcrumb{display:flex}.ditari-breadcrumb .breadcrumb .breadcrumb-item:first-child .breadcrumb-link{border-radius:6px 0 0 6px;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%)}.ditari-breadcrumb .breadcrumb .breadcrumb-item:last-child:not(:last-child) .breadcrumb-link{border-radius:0 6px 6px 0;clip-path:polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%)}.ditari-breadcrumb .breadcrumb-link{display:block;padding:4px 12px;background:#f0f2f5;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%)}.breadcrumb-enter-active{transition:all .25s}.breadcrumb-enter-from,.breadcrumb-leave-active{opacity:0;transform:translateX(30px) skewX(-50deg)}.ditari-list-layout{padding:20px;height:100%}.ditari-list-layout .wrapper{display:flex;flex-direction:column}.ditari-list-layout .ditari-list-table{flex:1}.ditari-list-layout .ditari-list-table .ant-card-body{display:flex;flex-direction:column;height:100%}.ditari-list-layout .ditari-list-form .ant-card-body{padding-bottom:0}.ditari-list-layout .wrapper{height:100%}.ditari-ant-back-top{right:4px;bottom:120px}.ditari-layout{height:100%}.ditari-layout .ditari-layout-sider{position:fixed;left:0;top:0;bottom:0;z-index:1}.ditari-layout .ditari-top-layout{position:fixed;left:200px;right:0;z-index:210}.ditari-layout .ditari-layout-content{margin-left:200px;margin-top:84px}.fade-enter-active,.fade-leave-active{transition:opacity .1s ease}.fade-enter-from,.fade-leave-to{opacity:0}.main-enter-active{transition:.2s}.main-leave-active{transition:.15s}.main-enter-from{opacity:0;margin-left:-20px}.main-leave-to{opacity:0;margin-left:20px}.ditari-layout-header{display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:42px;border-bottom:1px solid #f0f2f5;background-color:#fff}.ditari-layout-header .ditari-layout-header-left{display:flex;justify-content:center}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed{margin-right:20px;cursor:pointer;width:42px;line-height:30px;text-align:center;transition-duration:.2s}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed:hover{background-color:#f0f2f5;border-radius:4px}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed .icon{transition-duration:.2s}.ditari-user-menu{display:flex;align-items:center;height:100%}.ditari-user-menu .ditari-operation-items{margin-left:10px;height:100%}.ditari-user-menu .ditari-operation-items .ant-dropdown-link{display:flex;align-items:center;justify-content:center;height:100%}.collapsed-animation{transform:rotate(-180deg)}.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-
|
|
1
|
+
.ditari-bsui-grid{position:relative;display:grid}.ditari-bsui-grid .ditari-bsui-grid--item{border:1px solid #4e4e4e;margin-left:-1px;margin-top:-1px}.ditari-bsui-grid-form .ant-form-item{margin-bottom:0;height:100%}.ditari-bsui-grid-form .ant-form-item .ant-form-item-label{border-right:1px solid #4e4e4e}.ditari-bsui-grid-form .ant-form-item .ant-input,.ditari-bsui-grid-form .ant-form-item .ant-select-selector,.ditari-bsui-grid-form .ant-form-item .ant-input-number{border:0;border-radius:0}.ditari-bsui-grid-form .ant-form-item .ant-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-select-selector:focus,.ditari-bsui-grid-form .ant-form-item .ant-input-number:focus{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item .ant-input .ant-input-number-input,.ditari-bsui-grid-form .ant-form-item .ant-select-selector .ant-input-number-input,.ditari-bsui-grid-form .ant-form-item .ant-input-number .ant-input-number-input{border:0;border-radius:0}.ditari-bsui-grid-form .ant-form-item .ant-input .ant-input-number-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-select-selector .ant-input-number-input:focus,.ditari-bsui-grid-form .ant-form-item .ant-input-number .ant-input-number-input:focus{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item .ant-input[disabled]{color:#525252}.ditari-bsui-grid-form .ant-form-item-has-error .ant-form-item-explain{display:block}.ditari-bsui-grid-form .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{box-shadow:0 0 0 2px #1890ff}.ditari-bsui-grid-form .ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus{box-shadow:0 0 0px 2px red;border-radius:0}.ditari-bsui-grid-form .ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input{box-shadow:0 0 0px 2px #ff4d4f}.ditari-menu{height:calc(100vh - 240px);overflow:scroll}.ditari-menu::-webkit-scrollbar{width:0 !important;display:none}.ditari-layout-sider{background-color:#162157}.ditari-layout-sider .ant-menu-dark{background-color:#162157}.ditari-layout-sider .ant-menu-dark .ant-menu-inline.ant-menu-sub{background-color:#101847}.ditari-breadcrumb .ant-breadcrumb-separator{display:none}.ditari-breadcrumb .breadcrumb{display:flex}.ditari-breadcrumb .breadcrumb .breadcrumb-item:first-child .breadcrumb-link{border-radius:6px 0 0 6px;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%)}.ditari-breadcrumb .breadcrumb .breadcrumb-item:last-child:not(:last-child) .breadcrumb-link{border-radius:0 6px 6px 0;clip-path:polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%)}.ditari-breadcrumb .breadcrumb-link{display:block;padding:4px 12px;background:#f0f2f5;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%)}.breadcrumb-enter-active{transition:all .25s}.breadcrumb-enter-from,.breadcrumb-leave-active{opacity:0;transform:translateX(30px) skewX(-50deg)}.ditari-list-layout{padding:20px;height:100%}.ditari-list-layout .wrapper{display:flex;flex-direction:column}.ditari-list-layout .ditari-list-table{flex:1}.ditari-list-layout .ditari-list-table .ant-card-body{display:flex;flex-direction:column;height:100%}.ditari-list-layout .ditari-list-form .ant-card-body{padding-bottom:0}.ditari-list-layout .wrapper{height:100%}.ditari-ant-back-top{right:4px;bottom:120px}.ditari-layout{height:100%}.ditari-layout .ditari-layout-sider{position:fixed;left:0;top:0;bottom:0;z-index:1}.ditari-layout .ditari-top-layout{position:fixed;left:200px;right:0;z-index:210}.ditari-layout .ditari-layout-content{margin-left:200px;margin-top:84px}.fade-enter-active,.fade-leave-active{transition:opacity .1s ease}.fade-enter-from,.fade-leave-to{opacity:0}.main-enter-active{transition:.2s}.main-leave-active{transition:.15s}.main-enter-from{opacity:0;margin-left:-20px}.main-leave-to{opacity:0;margin-left:20px}.ditari-layout-header{display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:42px;border-bottom:1px solid #f0f2f5;background-color:#fff}.ditari-layout-header .ditari-layout-header-left{display:flex;justify-content:center}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed{margin-right:20px;cursor:pointer;width:42px;line-height:30px;text-align:center;transition-duration:.2s}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed:hover{background-color:#f0f2f5;border-radius:4px}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed .icon{transition-duration:.2s}.ditari-user-menu{display:flex;align-items:center;height:100%}.ditari-user-menu .ditari-operation-items{margin-left:10px;height:100%}.ditari-user-menu .ditari-operation-items .ant-dropdown-link{display:flex;align-items:center;justify-content:center;height:100%}.collapsed-animation{transform:rotate(-180deg)}.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;margin-left:10px;display:flex;align-items:center;justify-content:center;border-radius:50%}.ditari-nav .ant-tabs-tab .tab-close:hover{background-color:#63aeff;color:#fff}.ditari-nav .ant-tabs-tab .tab-close .anticon{margin:0}.ditari-nav .ant-tabs-tab-active+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-nav-wrap{padding:4px 8px 0}.ditari-nav .ant-tabs-tab::before,.ditari-nav .ant-tabs-tab::after{position:absolute;bottom:0;content:"";width:20px;height:20px;border-radius:100%;box-shadow:0 0 0 40px rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab::before{left:-20px;clip-path:inset(50% -10px 0 50%)}.ditari-nav .ant-tabs-tab::after{right:-20px;clip-path:inset(50% 50% 0 -10px)}.ditari-nav .ant-tabs-tab:hover::before,.ditari-nav .ant-tabs-tab:hover::after{box-shadow:0 0 0 30px #065de1}.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::after{z-index:10;box-shadow:0 0 0 30px #fff}.ditari-nav .tab-dividers{position:absolute;z-index:0;height:14px;top:50%;left:0;margin-top:-7px}.ditari-nav .tab-dividers::before{content:"";display:block;position:absolute;top:0;left:1px;bottom:0;width:1px;opacity:1;background-color:#fff;transition:opacity .2s ease,background-color .3s}.ditari-show-layout{position:relative}.ditari-show-layout .ant-card{margin-bottom:10px}.ditari-show-layout .ant-card .ant-card-head{padding:10px 24px}.ditari-show-layout .ant-card .ant-card-head .ant-card-head-title{padding:0}.ditari-show-layout .ant-card:last-child{margin-bottom:0}.ditari-show-layout .ditari-page-header{position:sticky;top:84px;z-index:10;padding:4px 24px;transition:all .3s}.ditari-show-layout .ditari-page-header.active{box-shadow:7px 12px 20px 0 #e0e0e0}.ditari-show-layout .ditari-show-footer{position:fixed;right:0;bottom:0;left:200px;z-index:10;padding:10px;background:#fff;box-shadow:4px -2px 5px 3px #e0e0e0}.ditari-bsui-pagination{margin-top:24px;text-align:center}.ant-table.ant-table-bordered>.ant-table-container{border-bottom:1px solid #f0f0f0}.ditari-bsui-desensitize .value{padding:0 4px}.ditari-bsui-modal .ant-modal-body{padding:0}.ditari-bsui-modal .content{max-height:200px;overflow-y:scroll}.ditari-bsui-modal .content::-webkit-scrollbar{width:0 !important;display:none}.ant-table.ant-table-bordered>.ant-table-container{border-bottom:1px solid #f0f0f0}@media screen and (min-width: 320px){.modal{font-size:12px}}@media screen and (min-width: 640px){.modal{font-size:14px}}@media screen and (min-width: 1024px){.modal{font-size:16px}}@media screen and (min-width: 1440px){.modal{font-size:18px}}@media screen and (max-width: 640px){.modal-sm{width:100%;height:100%;min-width:240px;min-height:160px}}@media screen and (min-width: 640px)and (max-width: 1024px){.modal-md{margin:100px auto;max-width:600px;max-height:480px}}@media screen and (min-width: 1024px)and (max-width: 1440px){.modal-lg{margin:100px auto;max-width:800px;max-height:600px}}@media screen and (min-width: 1440px){.modal-xl{margin:100px auto}}html,body,#app{height:100%;background:#f0f2f5}html::-webkit-scrollbar,body::-webkit-scrollbar,#app::-webkit-scrollbar{width:0 !important;display:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ditari-breadcrumb .ant-breadcrumb-separator{display:none}.ditari-breadcrumb .breadcrumb{display:flex}.ditari-breadcrumb .breadcrumb .breadcrumb-item:first-child .breadcrumb-link{border-radius:6px 0 0 6px;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%)}.ditari-breadcrumb .breadcrumb .breadcrumb-item:last-child:not(:last-child) .breadcrumb-link{border-radius:0 6px 6px 0;clip-path:polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%)}.ditari-breadcrumb .breadcrumb-link{display:block;padding:4px 12px;background:#f0f2f5;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%)}.breadcrumb-enter-active{transition:all .25s}.breadcrumb-enter-from,.breadcrumb-leave-active{opacity:0;transform:translateX(30px) skewX(-50deg)}.ditari-list-layout{padding:20px;height:100%}.ditari-list-layout .wrapper{display:flex;flex-direction:column}.ditari-list-layout .ditari-list-table{flex:1}.ditari-list-layout .ditari-list-table .ant-card-body{display:flex;flex-direction:column;height:100%}.ditari-list-layout .ditari-list-form .ant-card-body{padding-bottom:0}.ditari-list-layout .wrapper{height:100%}.ditari-ant-back-top{right:4px;bottom:120px}.ditari-layout{height:100%}.ditari-layout .ditari-layout-sider{position:fixed;left:0;top:0;bottom:0;z-index:1}.ditari-layout .ditari-top-layout{position:fixed;left:200px;right:0;z-index:210}.ditari-layout .ditari-layout-content{margin-left:200px;margin-top:84px}.fade-enter-active,.fade-leave-active{transition:opacity .1s ease}.fade-enter-from,.fade-leave-to{opacity:0}.main-enter-active{transition:.2s}.main-leave-active{transition:.15s}.main-enter-from{opacity:0;margin-left:-20px}.main-leave-to{opacity:0;margin-left:20px}.ditari-layout-header{display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:42px;border-bottom:1px solid #f0f2f5;background-color:#fff}.ditari-layout-header .ditari-layout-header-left{display:flex;justify-content:center}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed{margin-right:20px;cursor:pointer;width:42px;line-height:30px;text-align:center;transition-duration:.2s}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed:hover{background-color:#f0f2f5;border-radius:4px}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed .icon{transition-duration:.2s}.ditari-user-menu{display:flex;align-items:center;height:100%}.ditari-user-menu .ditari-operation-items{margin-left:10px;height:100%}.ditari-user-menu .ditari-operation-items .ant-dropdown-link{display:flex;align-items:center;justify-content:center;height:100%}.collapsed-animation{transform:rotate(-180deg)}.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-
|
|
1
|
+
.ditari-breadcrumb .ant-breadcrumb-separator{display:none}.ditari-breadcrumb .breadcrumb{display:flex}.ditari-breadcrumb .breadcrumb .breadcrumb-item:first-child .breadcrumb-link{border-radius:6px 0 0 6px;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%)}.ditari-breadcrumb .breadcrumb .breadcrumb-item:last-child:not(:last-child) .breadcrumb-link{border-radius:0 6px 6px 0;clip-path:polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%)}.ditari-breadcrumb .breadcrumb-link{display:block;padding:4px 12px;background:#f0f2f5;clip-path:polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%)}.breadcrumb-enter-active{transition:all .25s}.breadcrumb-enter-from,.breadcrumb-leave-active{opacity:0;transform:translateX(30px) skewX(-50deg)}.ditari-list-layout{padding:20px;height:100%}.ditari-list-layout .wrapper{display:flex;flex-direction:column}.ditari-list-layout .ditari-list-table{flex:1}.ditari-list-layout .ditari-list-table .ant-card-body{display:flex;flex-direction:column;height:100%}.ditari-list-layout .ditari-list-form .ant-card-body{padding-bottom:0}.ditari-list-layout .wrapper{height:100%}.ditari-ant-back-top{right:4px;bottom:120px}.ditari-layout{height:100%}.ditari-layout .ditari-layout-sider{position:fixed;left:0;top:0;bottom:0;z-index:1}.ditari-layout .ditari-top-layout{position:fixed;left:200px;right:0;z-index:210}.ditari-layout .ditari-layout-content{margin-left:200px;margin-top:84px}.fade-enter-active,.fade-leave-active{transition:opacity .1s ease}.fade-enter-from,.fade-leave-to{opacity:0}.main-enter-active{transition:.2s}.main-leave-active{transition:.15s}.main-enter-from{opacity:0;margin-left:-20px}.main-leave-to{opacity:0;margin-left:20px}.ditari-layout-header{display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:42px;border-bottom:1px solid #f0f2f5;background-color:#fff}.ditari-layout-header .ditari-layout-header-left{display:flex;justify-content:center}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed{margin-right:20px;cursor:pointer;width:42px;line-height:30px;text-align:center;transition-duration:.2s}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed:hover{background-color:#f0f2f5;border-radius:4px}.ditari-layout-header .ditari-layout-header-left .ditari-side-collapsed .icon{transition-duration:.2s}.ditari-user-menu{display:flex;align-items:center;height:100%}.ditari-user-menu .ditari-operation-items{margin-left:10px;height:100%}.ditari-user-menu .ditari-operation-items .ant-dropdown-link{display:flex;align-items:center;justify-content:center;height:100%}.collapsed-animation{transform:rotate(-180deg)}.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;margin-left:10px;display:flex;align-items:center;justify-content:center;border-radius:50%}.ditari-nav .ant-tabs-tab .tab-close:hover{background-color:#63aeff;color:#fff}.ditari-nav .ant-tabs-tab .tab-close .anticon{margin:0}.ditari-nav .ant-tabs-tab-active+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-nav-wrap{padding:4px 8px 0}.ditari-nav .ant-tabs-tab::before,.ditari-nav .ant-tabs-tab::after{position:absolute;bottom:0;content:"";width:20px;height:20px;border-radius:100%;box-shadow:0 0 0 40px rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab::before{left:-20px;clip-path:inset(50% -10px 0 50%)}.ditari-nav .ant-tabs-tab::after{right:-20px;clip-path:inset(50% 50% 0 -10px)}.ditari-nav .ant-tabs-tab:hover::before,.ditari-nav .ant-tabs-tab:hover::after{box-shadow:0 0 0 30px #065de1}.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::after{z-index:10;box-shadow:0 0 0 30px #fff}.ditari-nav .tab-dividers{position:absolute;z-index:0;height:14px;top:50%;left:0;margin-top:-7px}.ditari-nav .tab-dividers::before{content:"";display:block;position:absolute;top:0;left:1px;bottom:0;width:1px;opacity:1;background-color:#fff;transition:opacity .2s ease,background-color .3s}.ditari-show-layout{position:relative}.ditari-show-layout .ant-card{margin-bottom:10px}.ditari-show-layout .ant-card .ant-card-head{padding:10px 24px}.ditari-show-layout .ant-card .ant-card-head .ant-card-head-title{padding:0}.ditari-show-layout .ant-card:last-child{margin-bottom:0}.ditari-show-layout .ditari-page-header{position:sticky;top:84px;z-index:10;padding:4px 24px;transition:all .3s}.ditari-show-layout .ditari-page-header.active{box-shadow:7px 12px 20px 0 #e0e0e0}.ditari-show-layout .ditari-show-footer{position:fixed;right:0;bottom:0;left:200px;z-index:10;padding:10px;background:#fff;box-shadow:4px -2px 5px 3px #e0e0e0}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-
|
|
1
|
+
.ditari-nav{background:linear-gradient(270deg, #019cfe 0%, #0165fe 100%)}.ditari-nav .ant-tabs-nav{margin:0}.ditari-nav .ant-tabs-content-holder{display:none}.ditari-nav .ant-tabs-tab{position:relative;margin-left:0 !important;border:0 !important;transition:none !important;border-radius:10px 10px 0 0 !important;color:#fff}.ditari-nav .ant-tabs-tab:first-child .tab-dividers::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:not(.ant-tabs-tab-active){background:rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active){background:#065de1}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active) .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab:hover:not(.ant-tabs-tab-active)+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-tab .ant-tabs-tab-btn{display:flex;align-items:center}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;margin-left:10px;display:flex;align-items:center;justify-content:center;border-radius:50%}.ditari-nav .ant-tabs-tab .tab-close:hover{background-color:#63aeff;color:#fff}.ditari-nav .ant-tabs-tab .tab-close .anticon{margin:0}.ditari-nav .ant-tabs-tab-active+.ant-tabs-tab .tab-dividers::before{opacity:0}.ditari-nav .ant-tabs-nav-wrap{padding:4px 8px 0}.ditari-nav .ant-tabs-tab::before,.ditari-nav .ant-tabs-tab::after{position:absolute;bottom:0;content:"";width:20px;height:20px;border-radius:100%;box-shadow:0 0 0 40px rgba(0,0,0,0)}.ditari-nav .ant-tabs-tab::before{left:-20px;clip-path:inset(50% -10px 0 50%)}.ditari-nav .ant-tabs-tab::after{right:-20px;clip-path:inset(50% 50% 0 -10px)}.ditari-nav .ant-tabs-tab:hover::before,.ditari-nav .ant-tabs-tab:hover::after{box-shadow:0 0 0 30px #065de1}.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::before,.ditari-nav .ant-tabs-tab.ant-tabs-tab-active::after{z-index:10;box-shadow:0 0 0 30px #fff}.ditari-nav .tab-dividers{position:absolute;z-index:0;height:14px;top:50%;left:0;margin-top:-7px}.ditari-nav .tab-dividers::before{content:"";display:block;position:absolute;top:0;left:1px;bottom:0;width:1px;opacity:1;background-color:#fff;transition:opacity .2s ease,background-color .3s}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import { defineComponent as T, computed as N,
|
|
2
|
-
import { useRoute as
|
|
3
|
-
import { CloseOutlined as
|
|
4
|
-
import "../../store/modules/Breadcrumb.esm.js";
|
|
5
|
-
import "../../store/modules/DataDictionary.esm.js";
|
|
6
|
-
import { useKeepAliveStore as E } from "../../store/modules/KeepAlive.esm.js";
|
|
7
|
-
import "../../store/modules/Menu.esm.js";
|
|
8
|
-
import { useNavTabsStore as L } from "../../store/modules/NavTab.esm.js";
|
|
9
|
-
import "../../store/modules/Settings.esm.js";
|
|
10
|
-
import "../../store/modules/User.esm.js";
|
|
1
|
+
import { defineComponent as T, computed as N, ref as w, watchEffect as x, watch as A, resolveComponent as f, openBlock as l, createElementBlock as p, createVNode as _, withCtx as h, Fragment as B, renderList as E, unref as b, createBlock as P, createElementVNode as C, normalizeClass as R, toDisplayString as V, createCommentVNode as q } from "vue";
|
|
2
|
+
import { useRoute as D, useRouter as L } from "vue-router";
|
|
3
|
+
import { CloseOutlined as M } from "@ant-design/icons-vue";
|
|
11
4
|
import { storeToRefs as O } from "pinia";
|
|
12
|
-
|
|
5
|
+
import { useNavTabsStore as z } from "../../store/modules/NavTab.esm.js";
|
|
6
|
+
import { useKeepAliveStore as F } from "../../store/modules/KeepAlive.esm.js";
|
|
7
|
+
import { useMenuStore as U } from "../../store/modules/Menu.esm.js";
|
|
8
|
+
const j = { class: "ditari-nav" }, G = /* @__PURE__ */ C("div", { class: "tab-dividers" }, null, -1), H = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "tab-close"
|
|
11
|
+
}, I = {
|
|
13
12
|
name: "DNavTabs"
|
|
14
13
|
}, te = /* @__PURE__ */ T({
|
|
15
|
-
...
|
|
16
|
-
setup(
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
...I,
|
|
15
|
+
setup(J) {
|
|
16
|
+
const n = D(), v = L(), c = z(), m = F(), k = U(), o = N(() => c.getList), { selectedMenuKeys: u } = O(k), r = w("");
|
|
17
|
+
x(() => {
|
|
18
|
+
r.value = u.value.length > 0 ? u.value[0] : "";
|
|
19
|
+
}), d(), A(
|
|
20
|
+
() => n.path,
|
|
20
21
|
() => {
|
|
21
22
|
d();
|
|
22
23
|
}
|
|
23
24
|
);
|
|
24
25
|
function d() {
|
|
25
|
-
|
|
26
|
+
c.save(n), u.value = [n.path], m.save(n);
|
|
26
27
|
}
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
29
|
-
const e =
|
|
30
|
-
|
|
28
|
+
const y = (t) => {
|
|
29
|
+
if (t !== n.path) {
|
|
30
|
+
const e = o.value.filter((s) => s.path === t)[0];
|
|
31
|
+
v.push({
|
|
31
32
|
path: e.path,
|
|
32
33
|
query: e.query,
|
|
33
34
|
params: e.params
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
|
-
},
|
|
37
|
-
const
|
|
38
|
-
|
|
37
|
+
}, S = (t, e) => {
|
|
38
|
+
const s = o.value.filter((i) => i.path === e)[0];
|
|
39
|
+
t.stopPropagation(), c.deleteTabs(e), v.push(o.value[o.value.length - 1].fullPath), s.name && m.deleteKeepAlive(s.name);
|
|
40
|
+
}, g = (t) => {
|
|
41
|
+
var e;
|
|
42
|
+
return !((e = t.meta) != null && e.keepOpen) || o.value.length === 0;
|
|
39
43
|
};
|
|
40
|
-
return (
|
|
41
|
-
const
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
activeKey:
|
|
45
|
-
"onUpdate:activeKey": e[0] || (e[0] = (
|
|
44
|
+
return (t, e) => {
|
|
45
|
+
const s = f("a-tab-pane"), i = f("a-tabs");
|
|
46
|
+
return l(), p("div", j, [
|
|
47
|
+
_(i, {
|
|
48
|
+
activeKey: r.value,
|
|
49
|
+
"onUpdate:activeKey": e[0] || (e[0] = (a) => r.value = a),
|
|
46
50
|
type: "card",
|
|
47
|
-
onTabClick:
|
|
51
|
+
onTabClick: y
|
|
48
52
|
}, {
|
|
49
|
-
default:
|
|
50
|
-
(
|
|
51
|
-
key:
|
|
53
|
+
default: h(() => [
|
|
54
|
+
(l(!0), p(B, null, E(b(o), (a) => (l(), P(s, {
|
|
55
|
+
key: a.path
|
|
52
56
|
}, {
|
|
53
|
-
tab:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}, null, 8, ["onClick"]))
|
|
65
|
-
])
|
|
66
|
-
];
|
|
67
|
-
}),
|
|
57
|
+
tab: h(() => [
|
|
58
|
+
G,
|
|
59
|
+
C("div", {
|
|
60
|
+
class: R(["tab-item", { active: r.value === a.path }])
|
|
61
|
+
}, V(a.meta.title), 3),
|
|
62
|
+
g(a) ? (l(), p("div", H, [
|
|
63
|
+
_(b(M), {
|
|
64
|
+
onClick: (K) => S(K, a.fullPath)
|
|
65
|
+
}, null, 8, ["onClick"])
|
|
66
|
+
])) : q("", !0)
|
|
67
|
+
]),
|
|
68
68
|
_: 2
|
|
69
69
|
}, 1024))), 128))
|
|
70
70
|
]),
|
|
@@ -1,71 +1,90 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useRouter as
|
|
3
|
-
import { storeToRefs as
|
|
4
|
-
import { useMenuStore as
|
|
5
|
-
import { useSettingsStore as
|
|
6
|
-
function
|
|
7
|
-
return typeof
|
|
1
|
+
import { defineComponent as w, inject as j, watchEffect as k, createVNode as r, Fragment as i, resolveComponent as s, isVNode as N, withDirectives as I, vShow as R, h as D } from "vue";
|
|
2
|
+
import { useRouter as H, useRoute as O } from "vue-router";
|
|
3
|
+
import { storeToRefs as v } from "pinia";
|
|
4
|
+
import { useMenuStore as T } from "../../store/modules/Menu.esm.js";
|
|
5
|
+
import { useSettingsStore as V } from "../../store/modules/Settings.esm.js";
|
|
6
|
+
function _(l) {
|
|
7
|
+
return typeof l == "function" || Object.prototype.toString.call(l) === "[object Object]" && !N(l);
|
|
8
8
|
}
|
|
9
|
-
const
|
|
9
|
+
const q = /* @__PURE__ */ w({
|
|
10
10
|
name: "DMenu",
|
|
11
11
|
setup() {
|
|
12
|
-
const
|
|
13
|
-
componentName:
|
|
14
|
-
prop:
|
|
15
|
-
} =
|
|
16
|
-
list:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} =
|
|
12
|
+
const l = H(), m = O(), {
|
|
13
|
+
componentName: a,
|
|
14
|
+
prop: x
|
|
15
|
+
} = j("menuIcon"), g = T(), {
|
|
16
|
+
list: d,
|
|
17
|
+
openMenusKeys: o,
|
|
18
|
+
selectedMenuKeys: u
|
|
19
|
+
} = v(g), S = V(), {
|
|
20
|
+
getCollapsed: y
|
|
21
|
+
} = v(S);
|
|
22
|
+
k(() => {
|
|
23
|
+
const e = u.value.length > 0 ? u.value[0] : "", t = p(d.value, e);
|
|
24
|
+
o.value = t || [];
|
|
25
|
+
});
|
|
26
|
+
function p(e, t) {
|
|
27
|
+
for (let n = 0; n < e.length; n++) {
|
|
28
|
+
if (e[n].url === t || t.startsWith(e[n].url))
|
|
29
|
+
return [e[n].url];
|
|
30
|
+
if (e[n].children && e[n].children.length > 0) {
|
|
31
|
+
const c = p(e[n].children, t);
|
|
32
|
+
if (c)
|
|
33
|
+
return [e[n].url, ...c];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const M = ({
|
|
20
39
|
item: e,
|
|
21
40
|
key: t,
|
|
22
|
-
keyPath:
|
|
41
|
+
keyPath: n
|
|
23
42
|
}) => {
|
|
24
|
-
|
|
25
|
-
},
|
|
43
|
+
o.value = n, u.value = [t], m.path !== t && l.push(t).then((c) => c ? console.warn(c) : null);
|
|
44
|
+
}, b = (e) => r(i, null, [r(s("a-menu-item"), {
|
|
26
45
|
key: e.url
|
|
27
46
|
}, {
|
|
28
|
-
icon: () =>
|
|
47
|
+
icon: () => f(e),
|
|
29
48
|
default: () => e.title
|
|
30
|
-
})]),
|
|
31
|
-
className:
|
|
32
|
-
}, [e.title.substring(0, 1)]), [[
|
|
49
|
+
})]), C = ["anticon", "anticon-menu", "ant-menu-item-icon"], f = (e) => r(i, null, [e.icon ? K(e.icon) : I(r("div", {
|
|
50
|
+
className: C
|
|
51
|
+
}, [e.title.substring(0, 1)]), [[R, y.value]])]), K = (e) => a === "nativeHtml" ? r("span", {
|
|
33
52
|
innerHTML: e
|
|
34
|
-
}, null) :
|
|
53
|
+
}, null) : D(s(a), {
|
|
35
54
|
prop: e
|
|
36
|
-
}),
|
|
55
|
+
}), h = (e) => r(i, null, [r(s("a-sub-menu"), {
|
|
37
56
|
key: e.url
|
|
38
57
|
}, {
|
|
39
58
|
title: () => e.title,
|
|
40
|
-
icon: () =>
|
|
59
|
+
icon: () => f(e),
|
|
41
60
|
default: () => e.children.map(
|
|
42
|
-
(t) => !t.children || t.children.length === 0 ?
|
|
61
|
+
(t) => !t.children || t.children.length === 0 ? U(t) : h(t)
|
|
43
62
|
// 递归调用
|
|
44
63
|
)
|
|
45
|
-
})]),
|
|
64
|
+
})]), U = (e) => r(i, null, [r(s("a-menu-item"), {
|
|
46
65
|
key: e.url
|
|
47
66
|
}, {
|
|
48
67
|
default: () => e.title
|
|
49
68
|
})]);
|
|
50
69
|
return () => {
|
|
51
70
|
let e;
|
|
52
|
-
return
|
|
71
|
+
return r(i, null, [o.value, r(s("a-menu"), {
|
|
53
72
|
mode: "inline",
|
|
54
73
|
theme: "dark",
|
|
55
|
-
openKeys:
|
|
56
|
-
"onUpdate:openKeys": (t) =>
|
|
74
|
+
openKeys: o.value,
|
|
75
|
+
"onUpdate:openKeys": (t) => o.value = t,
|
|
57
76
|
selectedKeys: u.value,
|
|
58
77
|
"onUpdate:selectedKeys": (t) => u.value = t,
|
|
59
|
-
onClick:
|
|
60
|
-
},
|
|
61
|
-
var
|
|
62
|
-
return !t.children || ((
|
|
78
|
+
onClick: M
|
|
79
|
+
}, _(e = d.value.map((t) => {
|
|
80
|
+
var n;
|
|
81
|
+
return !t.children || ((n = t.children) == null ? void 0 : n.length) === 0 ? b(t) : h(t);
|
|
63
82
|
})) ? e : {
|
|
64
83
|
default: () => [e]
|
|
65
|
-
});
|
|
84
|
+
})]);
|
|
66
85
|
};
|
|
67
86
|
}
|
|
68
87
|
});
|
|
69
88
|
export {
|
|
70
|
-
|
|
89
|
+
q as default
|
|
71
90
|
};
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export declare const useMenuStore: import("pinia").StoreDefinition<string, {
|
|
2
2
|
list: never[];
|
|
3
|
+
openMenusKeys: any;
|
|
4
|
+
selectedMenuKeys: any;
|
|
3
5
|
}, {
|
|
4
6
|
getMenu: (state: {
|
|
5
7
|
list: never[];
|
|
8
|
+
openMenusKeys: any;
|
|
9
|
+
selectedMenuKeys: any;
|
|
6
10
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
7
11
|
list: never[];
|
|
12
|
+
openMenusKeys: any;
|
|
13
|
+
selectedMenuKeys: any;
|
|
8
14
|
}>) => never[];
|
|
9
15
|
}, {
|
|
10
16
|
save(data: any): void;
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { defineStore as
|
|
2
|
-
import { MENU_ID as
|
|
3
|
-
const o =
|
|
1
|
+
import { defineStore as t } from "pinia";
|
|
2
|
+
import { MENU_ID as s } from "../types.esm.js";
|
|
3
|
+
const o = t(s, {
|
|
4
4
|
state: () => ({
|
|
5
|
-
|
|
5
|
+
// 菜单数据
|
|
6
|
+
list: [],
|
|
7
|
+
// 展开的菜单数据
|
|
8
|
+
openMenusKeys: [],
|
|
9
|
+
// 当前激活的菜单
|
|
10
|
+
selectedMenuKeys: []
|
|
6
11
|
}),
|
|
7
12
|
getters: {
|
|
8
|
-
getMenu: (
|
|
13
|
+
getMenu: (e) => e.list
|
|
9
14
|
},
|
|
10
15
|
actions: {
|
|
11
|
-
save(
|
|
12
|
-
this.list =
|
|
16
|
+
save(e) {
|
|
17
|
+
this.list = e;
|
|
13
18
|
}
|
|
14
19
|
},
|
|
15
20
|
persist: !0
|
|
@@ -55,4 +55,10 @@ export declare const useNavTabsStore: import("pinia").StoreDefinition<string, {
|
|
|
55
55
|
* @param key url路径
|
|
56
56
|
*/
|
|
57
57
|
deleteTabs(key: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* 设置标题
|
|
60
|
+
* @param title 标题
|
|
61
|
+
* @param path url
|
|
62
|
+
*/
|
|
63
|
+
setNavTitle(title: string, path: string): void;
|
|
58
64
|
}>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineStore as
|
|
1
|
+
import { defineStore as a } from "pinia";
|
|
2
2
|
import { NAV_TAB_ID as l } from "../types.esm.js";
|
|
3
|
-
const n =
|
|
3
|
+
const n = a(l, {
|
|
4
4
|
state: () => ({
|
|
5
5
|
// 多标签列表
|
|
6
6
|
list: [],
|
|
@@ -24,9 +24,9 @@ const n = i(l, {
|
|
|
24
24
|
* @param route
|
|
25
25
|
*/
|
|
26
26
|
save(t) {
|
|
27
|
-
if (this.list.some((
|
|
27
|
+
if (this.list.some((i) => i.path === t.path))
|
|
28
28
|
return;
|
|
29
|
-
const
|
|
29
|
+
const e = {
|
|
30
30
|
path: t.path,
|
|
31
31
|
fullPath: t.fullPath,
|
|
32
32
|
query: t.query,
|
|
@@ -34,7 +34,7 @@ const n = i(l, {
|
|
|
34
34
|
meta: t.meta,
|
|
35
35
|
name: t.name || ""
|
|
36
36
|
};
|
|
37
|
-
this.list.push(
|
|
37
|
+
this.list.push(e);
|
|
38
38
|
},
|
|
39
39
|
/**
|
|
40
40
|
* 删除标签
|
|
@@ -42,9 +42,21 @@ const n = i(l, {
|
|
|
42
42
|
*/
|
|
43
43
|
deleteTabs(t) {
|
|
44
44
|
this.list.splice(
|
|
45
|
-
this.list.findIndex((
|
|
45
|
+
this.list.findIndex((s) => s.fullPath === t),
|
|
46
46
|
1
|
|
47
47
|
);
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* 设置标题
|
|
51
|
+
* @param title 标题
|
|
52
|
+
* @param path url
|
|
53
|
+
*/
|
|
54
|
+
setNavTitle(t, s) {
|
|
55
|
+
for (let e = 0; e < this.list.length; e++)
|
|
56
|
+
if (this.list[e].fullPath === s) {
|
|
57
|
+
this.list[e].meta.title = t;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
48
60
|
}
|
|
49
61
|
},
|
|
50
62
|
persist: !0
|
package/package.json
CHANGED
|
@@ -2,27 +2,35 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* 标签组件
|
|
4
4
|
*/
|
|
5
|
-
import { computed, Ref, watch } from "vue";
|
|
5
|
+
import { computed, Ref, watch, watchEffect, ref } from "vue";
|
|
6
6
|
import { useRoute, useRouter } from "vue-router";
|
|
7
7
|
import { CloseOutlined } from "@ant-design/icons-vue";
|
|
8
|
-
import { useNavTabsStore, useKeepAliveStore } from "../../store";
|
|
9
|
-
import { INavTab } from "../../store/modules/NavTab";
|
|
10
8
|
import { storeToRefs } from "pinia";
|
|
11
9
|
|
|
10
|
+
import { useNavTabsStore } from "../../store/modules/NavTab";
|
|
11
|
+
import { useKeepAliveStore } from "../../store/modules/KeepAlive";
|
|
12
|
+
import { useMenuStore } from "../../store/modules/Menu";
|
|
13
|
+
import type { INavTab } from "../../store/modules/NavTab";
|
|
14
|
+
|
|
12
15
|
const route = useRoute();
|
|
13
16
|
const router = useRouter();
|
|
14
17
|
|
|
15
18
|
const navStore = useNavTabsStore();
|
|
16
19
|
const keepAliveStore = useKeepAliveStore();
|
|
20
|
+
const menuStore = useMenuStore();
|
|
17
21
|
|
|
18
22
|
//标签列表
|
|
19
23
|
const navTabs: Ref<INavTab[]> = computed(() => navStore.getList);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
const { selectedMenuKeys } = storeToRefs(menuStore);
|
|
25
|
+
//当前被激活的标签 通过选中的菜单得到
|
|
26
|
+
const activeKey = ref("");
|
|
27
|
+
watchEffect(() => {
|
|
28
|
+
activeKey.value =
|
|
29
|
+
selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : "";
|
|
30
|
+
});
|
|
23
31
|
//首次进入页面或者刷新的时候执行
|
|
24
32
|
setNavTabs();
|
|
25
|
-
|
|
33
|
+
// 监听路由变化
|
|
26
34
|
watch(
|
|
27
35
|
() => route.path,
|
|
28
36
|
() => {
|
|
@@ -36,7 +44,8 @@ function setNavTabs() {
|
|
|
36
44
|
// 保存标签
|
|
37
45
|
navStore.save(route);
|
|
38
46
|
// 设置激活的标签
|
|
39
|
-
navStore.setActiveKey(route.path);
|
|
47
|
+
//navStore.setActiveKey(route.path);
|
|
48
|
+
selectedMenuKeys.value = [route.path];
|
|
40
49
|
keepAliveStore.save(route);
|
|
41
50
|
}
|
|
42
51
|
|
|
@@ -52,7 +61,7 @@ const onClick = (key: string) => {
|
|
|
52
61
|
router.push({
|
|
53
62
|
path: rs.path,
|
|
54
63
|
query: rs.query,
|
|
55
|
-
params: rs.params
|
|
64
|
+
params: rs.params
|
|
56
65
|
});
|
|
57
66
|
}
|
|
58
67
|
};
|
|
@@ -76,6 +85,15 @@ const onClose = ($event: any, key: string) => {
|
|
|
76
85
|
keepAliveStore.deleteKeepAlive(rs.name);
|
|
77
86
|
}
|
|
78
87
|
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 标签关闭 状态函数
|
|
91
|
+
* @param item
|
|
92
|
+
* 根据item和当前 navTabs 长度来判断是否要隐藏关闭标签按钮
|
|
93
|
+
*/
|
|
94
|
+
const closeStatus = (item: INavTab) => {
|
|
95
|
+
return !item.meta?.keepOpen || navTabs.value.length === 0;
|
|
96
|
+
};
|
|
79
97
|
</script>
|
|
80
98
|
<script lang="ts">
|
|
81
99
|
export default {
|
|
@@ -91,11 +109,8 @@ export default {
|
|
|
91
109
|
<div class="tab-item" :class="{ active: activeKey === item.path }">
|
|
92
110
|
{{ item.meta.title }}
|
|
93
111
|
</div>
|
|
94
|
-
<div class="tab-close">
|
|
95
|
-
<CloseOutlined
|
|
96
|
-
v-if="!item.meta?.keepOpen"
|
|
97
|
-
@click="onClose($event, item.fullPath)"
|
|
98
|
-
/>
|
|
112
|
+
<div class="tab-close" v-if="closeStatus(item)">
|
|
113
|
+
<CloseOutlined @click="onClose($event, item.fullPath)" />
|
|
99
114
|
</div>
|
|
100
115
|
</template>
|
|
101
116
|
</a-tab-pane>
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineComponent,
|
|
3
|
+
h,
|
|
4
|
+
inject,
|
|
5
|
+
ref,
|
|
6
|
+
resolveComponent,
|
|
7
|
+
watchEffect
|
|
8
|
+
} from "vue";
|
|
9
|
+
import { useRouter, useRoute } from "vue-router";
|
|
3
10
|
|
|
4
11
|
import { storeToRefs } from "pinia";
|
|
5
12
|
|
|
@@ -10,15 +17,40 @@ export default defineComponent({
|
|
|
10
17
|
name: "DMenu",
|
|
11
18
|
setup() {
|
|
12
19
|
const router = useRouter();
|
|
20
|
+
const route = useRoute();
|
|
13
21
|
const { componentName, prop } = inject("menuIcon");
|
|
14
|
-
|
|
22
|
+
// 菜单store
|
|
23
|
+
const menuStore = useMenuStore();
|
|
24
|
+
const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);
|
|
25
|
+
// 设置store
|
|
15
26
|
const settingsStore = useSettingsStore();
|
|
16
|
-
|
|
17
27
|
const { getCollapsed } = storeToRefs(settingsStore);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
|
|
29
|
+
watchEffect(() => {
|
|
30
|
+
// 会被触发两次
|
|
31
|
+
// 当前激活的url
|
|
32
|
+
const activatedUrl =
|
|
33
|
+
selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : "";
|
|
34
|
+
const parentUrls = getParentUrls(list.value, activatedUrl);
|
|
35
|
+
openMenusKeys.value = parentUrls || [];
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
function getParentUrls(menus, url) {
|
|
39
|
+
for (let i = 0; i < menus.length; i++) {
|
|
40
|
+
if (menus[i].url === url || url.startsWith(menus[i].url)) {
|
|
41
|
+
// 如果当前菜单项的url与传入的url相等,说明找到了当前菜单项
|
|
42
|
+
return [menus[i].url];
|
|
43
|
+
} else if (menus[i].children && menus[i].children.length > 0) {
|
|
44
|
+
// 如果当前菜单项有子菜单,则递归查找子菜单
|
|
45
|
+
const parentUrls = getParentUrls(menus[i].children, url);
|
|
46
|
+
if (parentUrls) {
|
|
47
|
+
// 如果子菜单中存在当前url,则将当前菜单项的url添加到返回结果中
|
|
48
|
+
return [menus[i].url, ...parentUrls];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
22
54
|
|
|
23
55
|
/**
|
|
24
56
|
* 监听菜单点击事件
|
|
@@ -27,10 +59,14 @@ export default defineComponent({
|
|
|
27
59
|
* @param keyPath
|
|
28
60
|
*/
|
|
29
61
|
const onClick = ({ item, key, keyPath }) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
62
|
+
openMenusKeys.value = keyPath;
|
|
63
|
+
|
|
64
|
+
selectedMenuKeys.value = [key];
|
|
65
|
+
// 判断目标路由和当前路由是否相等
|
|
66
|
+
// 不相等的时候再跳转
|
|
67
|
+
route.path !== key
|
|
68
|
+
? router.push(key).then((r) => (r ? console.warn(r) : null))
|
|
69
|
+
: null;
|
|
34
70
|
};
|
|
35
71
|
/**
|
|
36
72
|
* 监听菜单展开事件
|
|
@@ -117,22 +153,25 @@ export default defineComponent({
|
|
|
117
153
|
};
|
|
118
154
|
|
|
119
155
|
return () => (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
156
|
+
<>
|
|
157
|
+
{openMenusKeys.value}
|
|
158
|
+
<a-menu
|
|
159
|
+
mode="inline"
|
|
160
|
+
theme="dark"
|
|
161
|
+
v-model:openKeys={openMenusKeys.value}
|
|
162
|
+
v-model:selectedKeys={selectedMenuKeys.value}
|
|
163
|
+
onClick={onClick}
|
|
164
|
+
>
|
|
165
|
+
{list.value.map((menu) => {
|
|
166
|
+
if (!menu.children || menu.children?.length === 0) {
|
|
167
|
+
// 没有children属性或者children的长度等于0
|
|
168
|
+
return renderMenu(menu);
|
|
169
|
+
} else {
|
|
170
|
+
return renderSub(menu);
|
|
171
|
+
}
|
|
172
|
+
})}
|
|
173
|
+
</a-menu>
|
|
174
|
+
</>
|
|
136
175
|
);
|
|
137
176
|
}
|
|
138
177
|
});
|
|
@@ -7,7 +7,12 @@ import { MENU_ID } from "../types";
|
|
|
7
7
|
export const useMenuStore = defineStore(MENU_ID, {
|
|
8
8
|
state: () => {
|
|
9
9
|
return {
|
|
10
|
-
|
|
10
|
+
// 菜单数据
|
|
11
|
+
list: [],
|
|
12
|
+
// 展开的菜单数据
|
|
13
|
+
openMenusKeys: [] as any,
|
|
14
|
+
// 当前激活的菜单
|
|
15
|
+
selectedMenuKeys: [] as any
|
|
11
16
|
};
|
|
12
17
|
},
|
|
13
18
|
getters: {
|
|
@@ -73,6 +73,19 @@ export const useNavTabsStore = defineStore(NAV_TAB_ID, {
|
|
|
73
73
|
this.list.findIndex((v) => v.fullPath === key),
|
|
74
74
|
1
|
|
75
75
|
);
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* 设置标题
|
|
79
|
+
* @param title 标题
|
|
80
|
+
* @param path url
|
|
81
|
+
*/
|
|
82
|
+
setNavTitle(title: string, path: string) {
|
|
83
|
+
for (let i = 0; i < this.list.length; i++) {
|
|
84
|
+
if (this.list[i].fullPath === path) {
|
|
85
|
+
this.list[i].meta.title = title;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
76
89
|
}
|
|
77
90
|
},
|
|
78
91
|
persist: true
|