@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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),_=require("vue-router"),b=require("@ant-design/icons-vue");require("../../store/modules/Breadcrumb.cjs.js");require("../../store/modules/DataDictionary.cjs.js");const k=require("../../store/modules/KeepAlive.cjs.js");require("../../store/modules/Menu.cjs.js");const q=require("../../store/modules/NavTab.cjs.js");require("../../store/modules/Settings.cjs.js");require("../../store/modules/User.cjs.js");const C=require("pinia"),y={class:"ditari-nav"},N=e.createElementVNode("div",{class:"tab-dividers"},null,-1),T={class:"tab-close"},B={name:"DNavTabs"},K=e.defineComponent({...B,setup(g){const n=_.useRoute(),i=_.useRouter(),r=q.useNavTabsStore(),p=k.useKeepAliveStore(),s=e.computed(()=>r.getList),{activeKey:c}=C.storeToRefs(r);v(),e.watch(()=>n.path,()=>{v()});function v(){r.save(n),r.setActiveKey(n.path),p.save(n)}const m=l=>{if(l!==n.path){const t=s.value.filter(o=>o.path===l)[0];i.push({path:t.path,query:t.query,params:t.params})}},f=(l,t)=>{const o=s.value.filter(u=>u.path===t)[0];l.stopPropagation(),r.deleteTabs(t),i.push(s.value[s.value.length-1].fullPath),o.name&&p.deleteKeepAlive(o.name)};return(l,t)=>{const o=e.resolveComponent("a-tab-pane"),u=e.resolveComponent("a-tabs");return e.openBlock(),e.createElementBlock("div",y,[e.createVNode(u,{activeKey:e.unref(c),"onUpdate:activeKey":t[0]||(t[0]=a=>e.isRef(c)?c.value=a:null),type:"card",onTabClick:m},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),a=>(e.openBlock(),e.createBlock(o,{key:a.path},{tab:e.withCtx(()=>{var d;return[N,e.createElementVNode("div",{class:e.normalizeClass(["tab-item",{active:e.unref(c)===a.path}])},e.toDisplayString(a.meta.title),3),e.createElementVNode("div",T,[(d=a.meta)!=null&&d.keepOpen?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(b.CloseOutlined),{key:0,onClick:h=>f(h,a.fullPath)},null,8,["onClick"]))])]}),_:2},1024))),128))]),_:1},8,["activeKey"])])}}});exports.default=K;
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 e=require("vue"),S=require("vue-router"),V=require("pinia"),C=require("../../store/modules/Menu.cjs.js"),b=require("../../store/modules/Settings.cjs.js");function y(o){return typeof o=="function"||Object.prototype.toString.call(o)==="[object Object]"&&!e.isVNode(o)}const M=e.defineComponent({name:"DMenu",setup(){const o=S.useRouter(),{componentName:s,prop:K}=e.inject("menuIcon"),{list:d}=C.useMenuStore(),p=b.useSettingsStore(),{getCollapsed:v}=V.storeToRefs(p),l=e.ref([]),c=e.ref([]),m=({item:t,key:n,keyPath:r})=>{console.log(t,n,r),l.value=r,c.value=[n],o.push(n).then(a=>a?console.warn(a):null)},f=t=>e.createVNode(e.Fragment,null,[e.createVNode(e.resolveComponent("a-menu-item"),{key:t.url},{icon:()=>u(t),default:()=>t.title})]),g=["anticon","anticon-menu","ant-menu-item-icon"],u=t=>e.createVNode(e.Fragment,null,[t.icon?h(t.icon):e.withDirectives(e.createVNode("div",{className:g},[t.title.substring(0,1)]),[[e.vShow,v.value]])]),h=t=>s==="nativeHtml"?e.createVNode("span",{innerHTML:t},null):e.h(e.resolveComponent(s),{prop:t}),i=t=>e.createVNode(e.Fragment,null,[e.createVNode(e.resolveComponent("a-sub-menu"),{key:t.url},{title:()=>t.title,icon:()=>u(t),default:()=>t.children.map(n=>!n.children||n.children.length===0?N(n):i(n))})]),N=t=>e.createVNode(e.Fragment,null,[e.createVNode(e.resolveComponent("a-menu-item"),{key:t.url},{default:()=>t.title})]);return()=>{let t;return e.createVNode(e.resolveComponent("a-menu"),{mode:"inline",theme:"dark",openKeys:l.value,"onUpdate:openKeys":n=>l.value=n,selectedKeys:c.value,"onUpdate:selectedKeys":n=>c.value=n,onClick:m},y(t=d.map(n=>{var r;return!n.children||((r=n.children)==null?void 0:r.length)===0?f(n):i(n)}))?t:{default:()=>[t]})}}});exports.default=M;
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"),r=require("../types.cjs.js"),s=t.defineStore(r.MENU_ID,{state:()=>({list:[]}),getters:{getMenu:e=>e.list},actions:{save(e){this.list=e}},persist:!0});exports.useMenuStore=s;
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 i=require("pinia"),r=require("../types.cjs.js"),l=i.defineStore(r.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(a=>a.path===t.path))return;const s={path:t.path,fullPath:t.fullPath,query:t.query,params:t.params,meta:t.meta,name:t.name||""};this.list.push(s)},deleteTabs(t){this.list.splice(this.list.findIndex(e=>e.fullPath===t),1)}},persist:!0});exports.useNavTabsStore=l;
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
  }>;
@@ -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-item{margin-right:10px}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;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
+ .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-item{margin-right:10px}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;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
+ .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-item{margin-right:10px}.ditari-nav .ant-tabs-tab .tab-close{padding:4px;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
+ .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, watch as g, resolveComponent as f, openBlock as i, createElementBlock as h, createVNode as S, unref as c, isRef as A, withCtx as b, Fragment as R, renderList as x, createBlock as C, createElementVNode as u, normalizeClass as B, toDisplayString as P, createCommentVNode as V } from "vue";
2
- import { useRoute as q, useRouter as w } from "vue-router";
3
- import { CloseOutlined as D } from "@ant-design/icons-vue";
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
- const z = { class: "ditari-nav" }, F = /* @__PURE__ */ u("div", { class: "tab-dividers" }, null, -1), U = { class: "tab-close" }, j = {
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
- ...j,
16
- setup(G) {
17
- const a = q(), m = w(), s = L(), v = E(), n = N(() => s.getList), { activeKey: l } = O(s);
18
- d(), g(
19
- () => a.path,
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
- s.save(a), s.setActiveKey(a.path), v.save(a);
26
+ c.save(n), u.value = [n.path], m.save(n);
26
27
  }
27
- const k = (r) => {
28
- if (r !== a.path) {
29
- const e = n.value.filter((o) => o.path === r)[0];
30
- m.push({
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
- }, y = (r, e) => {
37
- const o = n.value.filter((p) => p.path === e)[0];
38
- r.stopPropagation(), s.deleteTabs(e), m.push(n.value[n.value.length - 1].fullPath), o.name && v.deleteKeepAlive(o.name);
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 (r, e) => {
41
- const o = f("a-tab-pane"), p = f("a-tabs");
42
- return i(), h("div", z, [
43
- S(p, {
44
- activeKey: c(l),
45
- "onUpdate:activeKey": e[0] || (e[0] = (t) => A(l) ? l.value = t : null),
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: k
51
+ onTabClick: y
48
52
  }, {
49
- default: b(() => [
50
- (i(!0), h(R, null, x(c(n), (t) => (i(), C(o, {
51
- key: t.path
53
+ default: h(() => [
54
+ (l(!0), p(B, null, E(b(o), (a) => (l(), P(s, {
55
+ key: a.path
52
56
  }, {
53
- tab: b(() => {
54
- var _;
55
- return [
56
- F,
57
- u("div", {
58
- class: B(["tab-item", { active: c(l) === t.path }])
59
- }, P(t.meta.title), 3),
60
- u("div", U, [
61
- (_ = t.meta) != null && _.keepOpen ? V("", !0) : (i(), C(c(D), {
62
- key: 0,
63
- onClick: (K) => y(K, t.fullPath)
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 K, inject as M, ref as f, createVNode as n, resolveComponent as l, isVNode as j, Fragment as s, withDirectives as w, vShow as N, h as k } from "vue";
2
- import { useRouter as I } from "vue-router";
3
- import { storeToRefs as D } from "pinia";
4
- import { useMenuStore as H } from "../../store/modules/Menu.esm.js";
5
- import { useSettingsStore as O } from "../../store/modules/Settings.esm.js";
6
- function R(o) {
7
- return typeof o == "function" || Object.prototype.toString.call(o) === "[object Object]" && !j(o);
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 L = /* @__PURE__ */ K({
9
+ const q = /* @__PURE__ */ w({
10
10
  name: "DMenu",
11
11
  setup() {
12
- const o = I(), {
13
- componentName: i,
14
- prop: T
15
- } = M("menuIcon"), {
16
- list: m
17
- } = H(), h = O(), {
18
- getCollapsed: v
19
- } = D(h), c = f([]), u = f([]), S = ({
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: r
41
+ keyPath: n
23
42
  }) => {
24
- console.log(e, t, r), c.value = r, u.value = [t], o.push(t).then((p) => p ? console.warn(p) : null);
25
- }, g = (e) => n(s, null, [n(l("a-menu-item"), {
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: () => a(e),
47
+ icon: () => f(e),
29
48
  default: () => e.title
30
- })]), y = ["anticon", "anticon-menu", "ant-menu-item-icon"], a = (e) => n(s, null, [e.icon ? b(e.icon) : w(n("div", {
31
- className: y
32
- }, [e.title.substring(0, 1)]), [[N, v.value]])]), b = (e) => i === "nativeHtml" ? n("span", {
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) : k(l(i), {
53
+ }, null) : D(s(a), {
35
54
  prop: e
36
- }), d = (e) => n(s, null, [n(l("a-sub-menu"), {
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: () => a(e),
59
+ icon: () => f(e),
41
60
  default: () => e.children.map(
42
- (t) => !t.children || t.children.length === 0 ? C(t) : d(t)
61
+ (t) => !t.children || t.children.length === 0 ? U(t) : h(t)
43
62
  // 递归调用
44
63
  )
45
- })]), C = (e) => n(s, null, [n(l("a-menu-item"), {
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 n(l("a-menu"), {
71
+ return r(i, null, [o.value, r(s("a-menu"), {
53
72
  mode: "inline",
54
73
  theme: "dark",
55
- openKeys: c.value,
56
- "onUpdate:openKeys": (t) => c.value = 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: S
60
- }, R(e = m.map((t) => {
61
- var r;
62
- return !t.children || ((r = t.children) == null ? void 0 : r.length) === 0 ? g(t) : d(t);
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
- L as default
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 e } from "pinia";
2
- import { MENU_ID as r } from "../types.esm.js";
3
- const o = e(r, {
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
- list: []
5
+ // 菜单数据
6
+ list: [],
7
+ // 展开的菜单数据
8
+ openMenusKeys: [],
9
+ // 当前激活的菜单
10
+ selectedMenuKeys: []
6
11
  }),
7
12
  getters: {
8
- getMenu: (t) => t.list
13
+ getMenu: (e) => e.list
9
14
  },
10
15
  actions: {
11
- save(t) {
12
- this.list = t;
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 i } from "pinia";
1
+ import { defineStore as a } from "pinia";
2
2
  import { NAV_TAB_ID as l } from "../types.esm.js";
3
- const n = i(l, {
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((a) => a.path === t.path))
27
+ if (this.list.some((i) => i.path === t.path))
28
28
  return;
29
- const s = {
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(s);
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((e) => e.fullPath === t),
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
@@ -49,11 +49,9 @@
49
49
  display: flex;
50
50
  align-items: center;
51
51
  }
52
- .tab-item {
53
- margin-right: 10px;
54
- }
55
52
  .tab-close {
56
53
  padding: 4px;
54
+ margin-left: 10px;
57
55
  display: flex;
58
56
  align-items: center;
59
57
  justify-content: center;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ditari/bsui",
3
- "version": "1.0.37",
3
+ "version": "1.0.38",
4
4
  "files": [
5
5
  "dist/**",
6
6
  "src"
@@ -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
- //激活的标签 转化成Ref对象 不然v-model无法操作更新
21
- const { activeKey } = storeToRefs(navStore);
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>
@@ -49,11 +49,9 @@
49
49
  display: flex;
50
50
  align-items: center;
51
51
  }
52
- .tab-item {
53
- margin-right: 10px;
54
- }
55
52
  .tab-close {
56
53
  padding: 4px;
54
+ margin-left: 10px;
57
55
  display: flex;
58
56
  align-items: center;
59
57
  justify-content: center;
@@ -1,5 +1,12 @@
1
- import { defineComponent, h, inject, ref, resolveComponent } from "vue";
2
- import { useRouter } from "vue-router";
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
- const { list } = useMenuStore();
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
- const openKeys = ref([]);
20
- // 当前选中的菜单
21
- const selectedKeys = ref([]);
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
- console.log(item, key, keyPath);
31
- openKeys.value = keyPath;
32
- selectedKeys.value = [key];
33
- router.push(key).then((r) => (r ? console.warn(r) : null));
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
- <a-menu
121
- mode="inline"
122
- theme="dark"
123
- v-model:openKeys={openKeys.value}
124
- v-model:selectedKeys={selectedKeys.value}
125
- onClick={onClick}
126
- >
127
- {list.map((menu) => {
128
- if (!menu.children || menu.children?.length === 0) {
129
- // 没有children属性或者children的长度等于0
130
- return renderMenu(menu);
131
- } else {
132
- return renderSub(menu);
133
- }
134
- })}
135
- </a-menu>
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
- list: []
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
@@ -1,3 +0,0 @@
1
- import { defineStore } from "pinia";
2
-
3
- export const useTestStore = defineStore("testid", {});