@ditari/bsui 5.0.29 → 5.1.0

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.
Files changed (98) hide show
  1. package/dist/cjs/components/card/Card.cjs +49 -0
  2. package/dist/cjs/components/card/Card.cjs.map +1 -0
  3. package/dist/cjs/components/card/index.cjs +8 -0
  4. package/dist/cjs/components/card/index.cjs.map +1 -0
  5. package/dist/cjs/components/card/style.cjs +40 -0
  6. package/dist/cjs/components/card/style.cjs.map +1 -0
  7. package/dist/cjs/components/index.cjs +11 -0
  8. package/dist/cjs/components/index.cjs.map +1 -1
  9. package/dist/cjs/components/layout/AppContext.cjs +7 -0
  10. package/dist/cjs/components/layout/AppContext.cjs.map +1 -0
  11. package/dist/cjs/components/layout/Layout.vue2.cjs +11 -16
  12. package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
  13. package/dist/cjs/components/layout/Show.cjs +6 -1
  14. package/dist/cjs/components/layout/Show.cjs.map +1 -1
  15. package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs +0 -1
  16. package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs.map +1 -1
  17. package/dist/cjs/components/layout/components/menu/Menu.cjs +38 -39
  18. package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
  19. package/dist/cjs/components/table-form/TableForm.cjs +109 -0
  20. package/dist/cjs/components/table-form/TableForm.cjs.map +1 -0
  21. package/dist/cjs/components/table-form/TableFormItem.cjs +112 -0
  22. package/dist/cjs/components/table-form/TableFormItem.cjs.map +1 -0
  23. package/dist/cjs/components/table-form/index.cjs +16 -0
  24. package/dist/cjs/components/table-form/index.cjs.map +1 -0
  25. package/dist/cjs/components/table-form/interface.cjs +58 -0
  26. package/dist/cjs/components/table-form/interface.cjs.map +1 -0
  27. package/dist/cjs/components/table-form/style.cjs +124 -0
  28. package/dist/cjs/components/table-form/style.cjs.map +1 -0
  29. package/dist/cjs/hooks/useDesign.cjs +31 -0
  30. package/dist/cjs/hooks/useDesign.cjs.map +1 -0
  31. package/dist/cjs/index.cjs +13 -3
  32. package/dist/cjs/index.cjs.map +1 -1
  33. package/dist/cjs/utils/withInstall.cjs +18 -0
  34. package/dist/cjs/utils/withInstall.cjs.map +1 -0
  35. package/dist/esm/components/card/Card.mjs +47 -0
  36. package/dist/esm/components/card/Card.mjs.map +1 -0
  37. package/dist/esm/components/card/index.mjs +4 -0
  38. package/dist/esm/components/card/index.mjs.map +1 -0
  39. package/dist/esm/components/card/style.mjs +38 -0
  40. package/dist/esm/components/card/style.mjs.map +1 -0
  41. package/dist/esm/components/index.mjs +5 -0
  42. package/dist/esm/components/index.mjs.map +1 -1
  43. package/dist/esm/components/layout/AppContext.mjs +5 -0
  44. package/dist/esm/components/layout/AppContext.mjs.map +1 -0
  45. package/dist/esm/components/layout/Layout.vue2.mjs +12 -17
  46. package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
  47. package/dist/esm/components/layout/Show.mjs +7 -2
  48. package/dist/esm/components/layout/Show.mjs.map +1 -1
  49. package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs +0 -1
  50. package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs.map +1 -1
  51. package/dist/esm/components/layout/components/menu/Menu.mjs +41 -42
  52. package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
  53. package/dist/esm/components/table-form/TableForm.mjs +106 -0
  54. package/dist/esm/components/table-form/TableForm.mjs.map +1 -0
  55. package/dist/esm/components/table-form/TableFormItem.mjs +110 -0
  56. package/dist/esm/components/table-form/TableFormItem.mjs.map +1 -0
  57. package/dist/esm/components/table-form/index.mjs +10 -0
  58. package/dist/esm/components/table-form/index.mjs.map +1 -0
  59. package/dist/esm/components/table-form/interface.mjs +54 -0
  60. package/dist/esm/components/table-form/interface.mjs.map +1 -0
  61. package/dist/esm/components/table-form/style.mjs +122 -0
  62. package/dist/esm/components/table-form/style.mjs.map +1 -0
  63. package/dist/esm/hooks/useDesign.mjs +28 -0
  64. package/dist/esm/hooks/useDesign.mjs.map +1 -0
  65. package/dist/esm/index.mjs +4 -0
  66. package/dist/esm/index.mjs.map +1 -1
  67. package/dist/esm/utils/withInstall.mjs +16 -0
  68. package/dist/esm/utils/withInstall.mjs.map +1 -0
  69. package/dist/types/components/card/Card.d.ts +6 -0
  70. package/dist/types/components/card/Card.d.ts.map +1 -0
  71. package/dist/types/components/card/index.d.ts +3 -0
  72. package/dist/types/components/card/index.d.ts.map +1 -0
  73. package/dist/types/components/card/style.d.ts +9 -0
  74. package/dist/types/components/card/style.d.ts.map +1 -0
  75. package/dist/types/components/index.d.ts +2 -0
  76. package/dist/types/components/index.d.ts.map +1 -1
  77. package/dist/types/components/layout/AppContext.d.ts +11 -0
  78. package/dist/types/components/layout/AppContext.d.ts.map +1 -0
  79. package/dist/types/components/layout/Layout.vue.d.ts +11 -2
  80. package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
  81. package/dist/types/components/layout/Show.d.ts.map +1 -1
  82. package/dist/types/components/layout/components/layout/ThemeApp.vue.d.ts.map +1 -1
  83. package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
  84. package/dist/types/components/table-form/TableForm.d.ts +57 -0
  85. package/dist/types/components/table-form/TableForm.d.ts.map +1 -0
  86. package/dist/types/components/table-form/TableFormItem.d.ts +23 -0
  87. package/dist/types/components/table-form/TableFormItem.d.ts.map +1 -0
  88. package/dist/types/components/table-form/index.d.ts +9 -0
  89. package/dist/types/components/table-form/index.d.ts.map +1 -0
  90. package/dist/types/components/table-form/interface.d.ts +57 -0
  91. package/dist/types/components/table-form/interface.d.ts.map +1 -0
  92. package/dist/types/components/table-form/style.d.ts +12 -0
  93. package/dist/types/components/table-form/style.d.ts.map +1 -0
  94. package/dist/types/hooks/useDesign.d.ts +8 -0
  95. package/dist/types/hooks/useDesign.d.ts.map +1 -0
  96. package/dist/types/utils/withInstall.d.ts +12 -0
  97. package/dist/types/utils/withInstall.d.ts.map +1 -0
  98. package/package.json +3 -3
@@ -0,0 +1,47 @@
1
+ import { defineComponent, createVNode } from 'vue';
2
+ import { cx } from '@emotion/css';
3
+ import { useDesign } from '../../hooks/useDesign.mjs';
4
+ import { withInstall } from '../../utils/withInstall.mjs';
5
+ import { useStyle } from './style.mjs';
6
+
7
+ "use strict";
8
+ const _Card = /* @__PURE__ */ defineComponent({
9
+ name: "DCard",
10
+ props: {
11
+ title: String
12
+ },
13
+ setup(props, {
14
+ slots
15
+ }) {
16
+ const {
17
+ getPrefixCls
18
+ } = useDesign("card");
19
+ const styles = useStyle();
20
+ return () => {
21
+ var _a;
22
+ const rootCls = getPrefixCls();
23
+ const headerCls = getPrefixCls("head");
24
+ const iconCls = getPrefixCls("icon");
25
+ const titleCls = getPrefixCls("title");
26
+ const actionCls = getPrefixCls("action");
27
+ const bodyCls = getPrefixCls("body");
28
+ return createVNode("div", {
29
+ "class": cx(rootCls, styles.container)
30
+ }, [createVNode("div", {
31
+ "class": cx(headerCls, styles.header)
32
+ }, [slots.icon && createVNode("div", {
33
+ "class": cx(iconCls, styles.icon)
34
+ }, [slots.icon()]), createVNode("div", {
35
+ "class": cx(titleCls, styles.header_title)
36
+ }, [props.title])]), slots.action && createVNode("div", {
37
+ "class": cx(actionCls, styles.action)
38
+ }, [slots.action()]), createVNode("div", {
39
+ "class": cx(bodyCls, styles.body)
40
+ }, [(_a = slots.default) == null ? void 0 : _a.call(slots)])]);
41
+ };
42
+ }
43
+ });
44
+ const Card = withInstall(_Card);
45
+
46
+ export { Card };
47
+ //# sourceMappingURL=Card.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.mjs","sources":["../../../../src/components/card/Card.tsx"],"sourcesContent":["// components/card/index.tsx\r\nimport { defineComponent } from \"vue\";\r\n\r\nimport { cx } from \"@emotion/css\"; // 引入 cx\r\n\r\nimport { useDesign } from \"../../hooks/useDesign\"; // 引入我们刚才写的 hook\r\nimport { withInstall } from \"../../utils/withInstall\";\r\n\r\nimport { useStyle } from \"./style\";\r\n\r\nconst _Card = defineComponent({\r\n name: \"DCard\",\r\n props: {\r\n title: String\r\n },\r\n setup(props, { slots }) {\r\n // 初始化 Design Hook,传入组件名 'card'\r\n const { getPrefixCls } = useDesign(\"card\");\r\n\r\n // 初始化 Emotion 样式\r\n const styles = useStyle();\r\n\r\n return () => {\r\n // 生成语义化类名\r\n const rootCls = getPrefixCls();\r\n const headerCls = getPrefixCls(\"head\");\r\n const iconCls = getPrefixCls(\"icon\");\r\n const titleCls = getPrefixCls(\"title\");\r\n const actionCls = getPrefixCls(\"action\");\r\n const bodyCls = getPrefixCls(\"body\");\r\n\r\n return (\r\n <div class={cx(rootCls, styles.container)}>\r\n {/* Header 区域 */}\r\n <div class={cx(headerCls, styles.header)}>\r\n {slots.icon && <div class={cx(iconCls, styles.icon)}>{slots.icon()}</div>}\r\n <div class={cx(titleCls, styles.header_title)}>{props.title}</div>\r\n </div>\r\n {/*action*/}\r\n {slots.action && <div class={cx(actionCls, styles.action)}>{slots.action()}</div>}\r\n\r\n {/* Body 区域 */}\r\n <div class={cx(bodyCls, styles.body)}>{slots.default?.()}</div>\r\n </div>\r\n );\r\n };\r\n }\r\n});\r\n\r\nexport const Card = withInstall(_Card);\r\n"],"names":["_Card","defineComponent","name","props","title","String","setup","slots","getPrefixCls","useDesign","styles","useStyle","rootCls","headerCls","iconCls","titleCls","actionCls","bodyCls","_createVNode","cx","container","header","icon","header_title","action","body","default","Card","withInstall"],"mappings":";;;;;;;AAUA,MAAMA,wBAAQC,eAAAA,CAAgB;AAAA,EAC5BC,IAAAA,EAAM,OAAA;AAAA,EACNC,KAAAA,EAAO;AAAA,IACLC,KAAAA,EAAOC;AAAAA,GACT;AAAA,EACAC,MAAMH,KAAAA,EAAO;AAAA,IAAEI;AAAAA,GAAM,EAAG;AAEtB,IAAA,MAAM;AAAA,MAAEC;AAAAA,KAAa,GAAIC,UAAU,MAAM,CAAA;AAGzC,IAAA,MAAMC,SAASC,QAAAA,EAAS;AAExB,IAAA,OAAO,MAAM;AAtBjB,MAAA,IAAA,EAAA;AAwBM,MAAA,MAAMC,UAAUJ,YAAAA,EAAa;AAC7B,MAAA,MAAMK,SAAAA,GAAYL,aAAa,MAAM,CAAA;AACrC,MAAA,MAAMM,OAAAA,GAAUN,aAAa,MAAM,CAAA;AACnC,MAAA,MAAMO,QAAAA,GAAWP,aAAa,OAAO,CAAA;AACrC,MAAA,MAAMQ,SAAAA,GAAYR,aAAa,QAAQ,CAAA;AACvC,MAAA,MAAMS,OAAAA,GAAUT,aAAa,MAAM,CAAA;AAEnC,MAAA,OAAAU,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACcC,EAAAA,CAAGP,OAAAA,EAASF,MAAAA,CAAOU,SAAS;AAAA,OAAC,EAAA,CAAAF,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAE3BC,EAAAA,CAAGN,SAAAA,EAAWH,MAAAA,CAAOW,MAAM;AAAA,OAAC,EAAA,CACrCd,KAAAA,CAAMe,IAAAA,IAAIJ,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAgBC,EAAAA,CAAGL,OAAAA,EAASJ,MAAAA,CAAOY,IAAI;AAAA,OAAC,EAAA,CAAGf,KAAAA,CAAMe,IAAAA,EAAM,CAAA,CAAA,EAAOJ,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAC7DC,EAAAA,CAAGJ,QAAAA,EAAUL,MAAAA,CAAOa,YAAY;AAAA,OAAC,EAAA,CAAGpB,KAAAA,CAAMC,KAAK,CAAA,CAAA,CAAA,CAAA,EAG5DG,KAAAA,CAAMiB,MAAAA,IAAMN,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAgBC,EAAAA,CAAGH,SAAAA,EAAWN,MAAAA,CAAOc,MAAM;AAAA,OAAC,EAAA,CAAGjB,KAAAA,CAAMiB,MAAAA,EAAQ,CAAA,CAAA,EAAON,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAGrEC,EAAAA,CAAGF,OAAAA,EAASP,MAAAA,CAAOe,IAAI;AAAA,SAAC,CAAA,CAAGlB,EAAAA,GAAAA,KAAAA,CAAMmB,YAANnB,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,CAAAA,KAAAA,CAAiB,CAAA,CAAA,CAAA,CAAA;AAAA,IAG9D,CAAA;AAAA,EACF;AACF,CAAC,CAAA;AAEM,MAAMoB,IAAAA,GAAOC,YAAY5B,KAAK;;;;"}
@@ -0,0 +1,4 @@
1
+ export { Card } from './Card.mjs';
2
+
3
+ "use strict";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,38 @@
1
+ import { css } from '@emotion/css';
2
+
3
+ "use strict";
4
+ const useStyle = () => {
5
+ return {
6
+ container: css`
7
+ display: flex;
8
+ flex-direction: column;
9
+ background-color: #fff;
10
+ `,
11
+ header: css`
12
+ display: flex;
13
+ margin-bottom: 20px;
14
+ `,
15
+ header_title: css`
16
+ line-height: 1.5;
17
+ /* 如果标题过长,防止换行破坏布局,可以加这行 */
18
+ white-space: nowrap;
19
+ `,
20
+ // 可选:如果你需要对 icon 容器做特殊处理(例如防止图标被压缩)
21
+ icon: css`
22
+ margin-right: 10px;
23
+ display: inline-flex;
24
+ align-items: center;
25
+ flex-shrink: 0; /* 防止标题过长时挤压图标 */
26
+ `,
27
+ action: css`
28
+ margin-bottom: 10px;
29
+ `,
30
+ body: css`
31
+ display: flex;
32
+ flex-direction: column;
33
+ `
34
+ };
35
+ };
36
+
37
+ export { useStyle };
38
+ //# sourceMappingURL=style.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.mjs","sources":["../../../../src/components/card/style.ts"],"sourcesContent":["import { css } from \"@emotion/css\";\r\n\r\nexport const useStyle = () => {\r\n return {\r\n container: css`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: #fff;\r\n `,\r\n header: css`\r\n display: flex;\r\n margin-bottom: 20px;\r\n `,\r\n header_title: css`\r\n line-height: 1.5;\r\n /* 如果标题过长,防止换行破坏布局,可以加这行 */\r\n white-space: nowrap;\r\n `,\r\n // 可选:如果你需要对 icon 容器做特殊处理(例如防止图标被压缩)\r\n icon: css`\r\n margin-right: 10px;\r\n display: inline-flex;\r\n align-items: center;\r\n flex-shrink: 0; /* 防止标题过长时挤压图标 */\r\n `,\r\n action: css`\r\n margin-bottom: 10px;\r\n `,\r\n body: css`\r\n display: flex;\r\n flex-direction: column;\r\n `\r\n };\r\n};\r\n"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,MAAM;AAC5B,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAKX,MAAA,EAAQ,GAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAIR,YAAA,EAAc,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA;AAAA,IAMd,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAMN,MAAA,EAAQ,GAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAGR,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GAIR;AACF;;;;"}
@@ -1,3 +1,4 @@
1
+ import './card/index.mjs';
1
2
  import './date/index.mjs';
2
3
  import './dic/index.mjs';
3
4
  import './form/index.mjs';
@@ -6,10 +7,12 @@ import './layout/index.mjs';
6
7
  import './select/index.mjs';
7
8
  import './tab/index.mjs';
8
9
  import './table/index.mjs';
10
+ export { TableForm } from './table-form/index.mjs';
9
11
  export { default as DicRep } from './dic/DicReplace.mjs';
10
12
  export { default as Select } from './select/Select.vue2.mjs';
11
13
  export { default as Tab } from './tab/Tab.vue2.mjs';
12
14
  export { default as Table } from './table/Table.mjs';
15
+ export { Card } from './card/Card.mjs';
13
16
  export { default as RangePicker } from './date/RangePicker.vue2.mjs';
14
17
  export { default as FormLayout } from './form/FormLayout.mjs';
15
18
  export { default as Moon } from './icon/Moon.vue.mjs';
@@ -20,6 +23,8 @@ export { default as Menu } from './layout/components/menu/Menu.mjs';
20
23
  export { default as Layout } from './layout/Layout.vue2.mjs';
21
24
  export { default as List } from './layout/List.mjs';
22
25
  export { default as Show } from './layout/Show.mjs';
26
+ export { DEFAULT_STYLES_CONFIG, tableFormItemProps, tableFormProps } from './table-form/interface.mjs';
27
+ export { TableFormItem } from './table-form/TableFormItem.mjs';
23
28
 
24
29
  "use strict";
25
30
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ const AppContextKey = Symbol("d-bsui-context");
3
+
4
+ export { AppContextKey };
5
+ //# sourceMappingURL=AppContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppContext.mjs","sources":["../../../../src/components/layout/AppContext.ts"],"sourcesContent":["import { ComputedRef, VNode } from \"vue\";\r\n\r\nexport const AppContextKey = Symbol(\"d-bsui-context\");\r\nexport interface AppContext {\r\n // 水印\r\n watermarkContent?: ComputedRef<{ content: string }>;\r\n renderMenuIcon?: (item: {\r\n icon: string;\r\n }) => VNode | VNode[];\r\n}\r\n"],"names":[],"mappings":";AAEO,MAAM,aAAA,GAAgB,OAAO,gBAAgB;;;;"}
@@ -1,6 +1,7 @@
1
- import { defineComponent, watch, ref, provide, computed, resolveComponent, createElementBlock, openBlock, Fragment, createVNode, createBlock, createCommentVNode, normalizeClass, unref, withCtx, createElementVNode, renderSlot } from 'vue';
1
+ import { defineComponent, provide, computed, watch, resolveComponent, createElementBlock, openBlock, Fragment, createVNode, createBlock, createCommentVNode, normalizeClass, unref, withCtx, createElementVNode, renderSlot } from 'vue';
2
2
  import { useRoute } from 'vue-router';
3
3
  import { storeToRefs } from 'pinia';
4
+ import { AppContextKey } from './AppContext.mjs';
4
5
  import Menu from './components/menu/Menu.mjs';
5
6
  import SettingDrawer from './components/settings/SettingDrawer.mjs';
6
7
  import { useAppStore, useKeepAliveStore } from '@ditari/store';
@@ -18,16 +19,19 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
18
19
  watermark: { type: Object, required: false, default: () => ({
19
20
  content: ""
20
21
  }) },
21
- isSettings: { type: Boolean, required: false, default: true }
22
+ isSettings: { type: Boolean, required: false, default: false },
23
+ renderMenuIcon: { type: Function, required: false, default: void 0 }
22
24
  },
23
25
  emits: ["onMenuClick"],
24
26
  setup(__props, { emit: __emit }) {
25
27
  const props = __props;
26
28
  const emits = __emit;
27
29
  const { layout, modeConfig, sideTokenStyle } = storeToRefs(useAppStore());
28
- const route = useRoute();
29
- useWatermark();
30
30
  const { onMenuClick } = useMenu();
31
+ provide(AppContextKey, {
32
+ watermarkContent: computed(() => props.watermark || ""),
33
+ renderMenuIcon: props.renderMenuIcon
34
+ });
31
35
  const {
32
36
  layoutStyle,
33
37
  siderStyle,
@@ -36,6 +40,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
36
40
  } = useStyle();
37
41
  useKeepAlive();
38
42
  function useKeepAlive() {
43
+ const route = useRoute();
39
44
  const { save } = useKeepAliveStore();
40
45
  watch(
41
46
  () => route.path,
@@ -47,17 +52,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
47
52
  }
48
53
  );
49
54
  }
50
- function useWatermark() {
51
- const watermarkContent = ref("");
52
- provide("watermarkContent", watermarkContent);
53
- watch(
54
- () => props.watermark,
55
- (val) => {
56
- watermarkContent.value = val.content || "";
57
- },
58
- { deep: true, immediate: true }
59
- );
60
- }
61
55
  function useStyle() {
62
56
  const layoutStyle2 = css`
63
57
  height: 100vh;
@@ -131,7 +125,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
131
125
  theme: "light",
132
126
  collapsible: "",
133
127
  trigger: null,
134
- class: normalizeClass(unref(siderStyle))
128
+ class: normalizeClass(unref(siderStyle)),
129
+ width: unref(layout).sideWidth
135
130
  }, {
136
131
  default: withCtx(() => [
137
132
  createElementVNode("div", _hoisted_1, [
@@ -141,7 +136,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
141
136
  ]),
142
137
  _: 3
143
138
  /* FORWARDED */
144
- }, 8, ["collapsed", "class"]),
139
+ }, 8, ["collapsed", "class", "width"]),
145
140
  createVNode(_component_a_layout, {
146
141
  class: normalizeClass(unref(rightStyle))
147
142
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.vue2.mjs","sources":["../../../../src/components/layout/Layout.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, provide, ref, watch } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport DMenu from \"./components/menu/Menu\";\r\nimport SettingDrawer from \"./components/settings/SettingDrawer\";\r\nimport {\r\n useAppStore,\r\n useKeepAliveStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport HeaderLayout from \"./components/layout/HeaderLayout.vue\";\r\nimport RouterContent from \"./components/layout/RouterContent.vue\";\r\n\r\nconst props = defineProps({\n watermark: { type: Object, required: false, default: () => ({\r\n content: \"\"\r\n }) },\n isSettings: { type: Boolean, required: false, default: true }\n});\r\nconst emits = defineEmits([\"onMenuClick\"]);\r\n\r\nconst { layout, modeConfig, sideTokenStyle } =\r\n storeToRefs(useAppStore());\r\nconst route = useRoute();\r\nuseWatermark();\r\nconst { onMenuClick } = useMenu();\r\n\r\nconst {\r\n layoutStyle,\r\n siderStyle,\r\n rightStyle,\r\n rightContentStyle\r\n} = useStyle();\r\nuseKeepAlive();\r\n\r\nfunction useKeepAlive() {\r\n // 保存需要被缓存的标签\r\n const { save } = useKeepAliveStore();\r\n\r\n watch(\r\n () => route.path,\r\n () => {\r\n save(route);\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n}\r\n\r\nfunction useWatermark() {\r\n const watermarkContent = ref(\"\");\r\n provide(\"watermarkContent\", watermarkContent);\r\n // 监听 watermark 的变化\r\n watch(\r\n () => props.watermark,\r\n val => {\r\n watermarkContent.value = val.content || \"\";\r\n },\r\n { deep: true, immediate: true }\r\n );\r\n}\r\n\r\nfunction useStyle() {\r\n const layoutStyle = css`\r\n height: 100vh;\r\n `;\r\n\r\n const transitionStyle = css`\r\n transition: margin-left 0.4s\r\n cubic-bezier(0.22, 1.2, 0.36, 1);\r\n `;\r\n\r\n const left = computed(\r\n () =>\r\n `${layout.value.collapsed ? layout.value.collapsedWidth : layout.value.sideWidth}px`\r\n );\r\n\r\n const siderStyle = computed(\r\n () => css`\r\n position: fixed !important;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 1;\r\n width: ${layout.value.sideWidth}px;\r\n\r\n .app-side {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ${modeConfig.value.mode === \"light\"\r\n ? `background:${sideTokenStyle.value.bgColor};`\r\n : \"\"}\r\n }\r\n `\r\n );\r\n\r\n const rightStyle = computed(\r\n () => css`\r\n margin-left: ${left.value};\r\n ${transitionStyle}\r\n `\r\n );\r\n\r\n const rightContentStyle = computed(\r\n () => css`\r\n padding-top: ${layout.value.headerHeight}px;\r\n `\r\n );\r\n\r\n return {\r\n layoutStyle,\r\n siderStyle,\r\n rightStyle,\r\n rightContentStyle\r\n };\r\n}\r\n\r\nfunction useMenu() {\r\n const onMenuClick = (item: never) => {\r\n emits(\"onMenuClick\", item);\r\n };\r\n\r\n return {\r\n onMenuClick\r\n };\r\n}\r\n</script>\r\n\r\n<template>\r\n <a-layout :class=\"layoutStyle\">\r\n <a-layout-sider\r\n v-model:collapsed=\"layout.collapsed\"\r\n theme=\"light\"\r\n collapsible\r\n :trigger=\"null\"\r\n :class=\"siderStyle\"\r\n >\r\n <div class=\"app-side\">\r\n <slot name=\"logo\"></slot>\r\n <d-menu @onMenuClick=\"onMenuClick\" />\r\n </div>\r\n </a-layout-sider>\r\n <a-layout :class=\"rightStyle\">\r\n <header-layout>\r\n <slot name=\"headerRight\"></slot>\r\n </header-layout>\r\n <a-layout-content :class=\"rightContentStyle\">\r\n <RouterContent />\r\n </a-layout-content>\r\n </a-layout>\r\n </a-layout>\r\n\r\n <SettingDrawer v-if=\"isSettings\" />\r\n <a-back-top></a-back-top>\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["layoutStyle","siderStyle","rightStyle","rightContentStyle","onMenuClick","_createVNode","_unref","_createElementVNode","_renderSlot","DMenu","HeaderLayout","RouterContent","_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"Layout.vue2.mjs","sources":["../../../../src/components/layout/Layout.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, provide, VNode, watch } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { AppContext, AppContextKey } from \"./AppContext\";\r\nimport DMenu from \"./components/menu/Menu\";\r\nimport SettingDrawer from \"./components/settings/SettingDrawer\";\r\nimport {\r\n useAppStore,\r\n useKeepAliveStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport HeaderLayout from \"./components/layout/HeaderLayout.vue\";\r\nimport RouterContent from \"./components/layout/RouterContent.vue\";\r\n\r\nconst props = defineProps({\n watermark: { type: Object, required: false, default: () => ({\r\n content: \"\"\r\n }) },\n isSettings: { type: Boolean, required: false, default: false },\n renderMenuIcon: { type: Function, required: false, default: undefined }\n});\r\nconst emits = defineEmits([\"onMenuClick\"]);\r\n\r\nconst { layout, modeConfig, sideTokenStyle } =\r\n storeToRefs(useAppStore());\r\n\r\nconst { onMenuClick } = useMenu();\r\n\r\nprovide<AppContext>(AppContextKey, {\r\n watermarkContent: computed(() => props.watermark || \"\"),\r\n renderMenuIcon: props.renderMenuIcon\r\n});\r\n\r\nconst {\r\n layoutStyle,\r\n siderStyle,\r\n rightStyle,\r\n rightContentStyle\r\n} = useStyle();\r\nuseKeepAlive();\r\n\r\nfunction useKeepAlive() {\r\n const route = useRoute();\r\n // 保存需要被缓存的标签\r\n const { save } = useKeepAliveStore();\r\n\r\n watch(\r\n () => route.path,\r\n () => {\r\n save(route);\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n}\r\n\r\nfunction useStyle() {\r\n const layoutStyle = css`\r\n height: 100vh;\r\n `;\r\n\r\n const transitionStyle = css`\r\n transition: margin-left 0.4s\r\n cubic-bezier(0.22, 1.2, 0.36, 1);\r\n `;\r\n\r\n const left = computed(\r\n () =>\r\n `${layout.value.collapsed ? layout.value.collapsedWidth : layout.value.sideWidth}px`\r\n );\r\n\r\n const siderStyle = computed(\r\n () => css`\r\n position: fixed !important;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 1;\r\n width: ${layout.value.sideWidth}px;\r\n\r\n .app-side {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ${modeConfig.value.mode === \"light\"\r\n ? `background:${sideTokenStyle.value.bgColor};`\r\n : \"\"}\r\n }\r\n `\r\n );\r\n\r\n const rightStyle = computed(\r\n () => css`\r\n margin-left: ${left.value};\r\n ${transitionStyle}\r\n `\r\n );\r\n\r\n const rightContentStyle = computed(\r\n () => css`\r\n padding-top: ${layout.value.headerHeight}px;\r\n `\r\n );\r\n\r\n return {\r\n layoutStyle,\r\n siderStyle,\r\n rightStyle,\r\n rightContentStyle\r\n };\r\n}\r\n\r\nfunction useMenu() {\r\n const onMenuClick = (item: never) => {\r\n emits(\"onMenuClick\", item);\r\n };\r\n\r\n return {\r\n onMenuClick\r\n };\r\n}\r\n</script>\r\n\r\n<template>\r\n <a-layout :class=\"layoutStyle\">\r\n <a-layout-sider\r\n v-model:collapsed=\"layout.collapsed\"\r\n theme=\"light\"\r\n collapsible\r\n :trigger=\"null\"\r\n :class=\"siderStyle\"\r\n :width=\"layout.sideWidth\"\r\n >\r\n <div class=\"app-side\">\r\n <slot name=\"logo\"></slot>\r\n <d-menu @onMenuClick=\"onMenuClick\" />\r\n </div>\r\n </a-layout-sider>\r\n <a-layout :class=\"rightStyle\">\r\n <header-layout>\r\n <slot name=\"headerRight\"></slot>\r\n </header-layout>\r\n <a-layout-content :class=\"rightContentStyle\">\r\n <RouterContent />\r\n </a-layout-content>\r\n </a-layout>\r\n </a-layout>\r\n\r\n <SettingDrawer v-if=\"isSettings\" />\r\n <a-back-top></a-back-top>\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["layoutStyle","siderStyle","rightStyle","rightContentStyle","onMenuClick","_createVNode","_unref","_createElementVNode","_renderSlot","DMenu","HeaderLayout","RouterContent","_createBlock"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { defineComponent, ref, inject, computed, createVNode } from 'vue';
1
+ import { defineComponent, inject, computed, createVNode, ref } from 'vue';
2
2
  import { useRoute, useRouter } from 'vue-router';
3
3
  import { theme, Watermark, Flex, PageHeader } from 'ant-design-vue';
4
4
  import { storeToRefs } from 'pinia';
5
5
  import { useWindowScroll } from '@vueuse/core';
6
+ import { AppContextKey } from './AppContext.mjs';
6
7
  import { LeftOutlined } from '@ant-design/icons-vue';
7
8
  import { useAppStore, useNavTabStore } from '@ditari/store';
8
9
  import { css } from '@emotion/css';
@@ -26,7 +27,11 @@ const show = /* @__PURE__ */ defineComponent({
26
27
  const {
27
28
  useToken
28
29
  } = theme;
29
- const watermarkContent = ref(inject("watermarkContent", ""));
30
+ const appContext = inject(AppContextKey, null);
31
+ const watermarkContent = computed(() => {
32
+ var _a;
33
+ return (_a = appContext == null ? void 0 : appContext.watermarkContent) == null ? void 0 : _a.value.content;
34
+ });
30
35
  const {
31
36
  token
32
37
  } = useToken();
@@ -1 +1 @@
1
- {"version":3,"file":"Show.mjs","sources":["../../../../src/components/layout/Show.tsx"],"sourcesContent":["import {\r\n computed,\r\n ComputedRef,\r\n defineComponent,\r\n inject,\r\n ref\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport {\r\n Flex,\r\n PageHeader,\r\n theme,\r\n Watermark\r\n} from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\nimport { useWindowScroll } from \"@vueuse/core\";\r\n\r\nimport { LeftOutlined } from \"@ant-design/icons-vue\";\r\nimport { useAppStore, useNavTabStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst getProps = () => {\r\n return {\r\n close: {\r\n type: Boolean,\r\n default: false\r\n }\r\n };\r\n};\r\nconst show = defineComponent({\r\n name: \"DShowLayout\",\r\n props: getProps(),\r\n setup(props, { slots, expose }) {\r\n const { useToken } = theme;\r\n const watermarkContent = ref(\r\n inject(\"watermarkContent\", \"\")\r\n );\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const { layout, modeConfig, refresh } =\r\n storeToRefs(useAppStore());\r\n const { deleteTabs } = useNavTabStore();\r\n\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const { y } = useWindowScroll();\r\n\r\n const pageHeaderStyle = computed(\r\n () => css`\r\n position: sticky;\r\n top: ${layout.value.headerHeight}px;\r\n z-index: 10;\r\n padding: 0;\r\n transition: all 0.3s;\r\n background-color: ${token.value.colorBgLayout};\r\n\r\n ${y.value > 0\r\n ? \"box-shadow:0 10px 10px rgba(0, 0, 0, 0.15);\"\r\n : \"\"}\r\n .ant-page-header-back {\r\n height: 100%;\r\n margin-right: 0;\r\n\r\n .ant-page-header-back-button {\r\n height: 100%;\r\n padding: 0 6px !important;\r\n display: flex !important;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n .ant-page-header-heading-title {\r\n font-size: 14px;\r\n }\r\n `\r\n );\r\n const contentStyle = computed(\r\n () => css`\r\n padding: 10px 10px\r\n ${slots.bottomFooter ? \"50px\" : \"0\"};\r\n background: ${token.value.colorBgLayout};\r\n `\r\n );\r\n const footerStyle = computed(\r\n () => css`\r\n position: fixed;\r\n right: 0;\r\n bottom: 0;\r\n height: 50px;\r\n left: ${layout.value.collapsed\r\n ? layout.value.collapsedWidth\r\n : layout.value.sideWidth}px;\r\n z-index: 10;\r\n padding: 10px;\r\n background: ${modeConfig.value.mode !== \"light\"\r\n ? token.value.colorBgContainer\r\n : \"#fff\"};\r\n box-shadow: 6px 0 10px rgba(0, 0, 0, 0.15);\r\n transition: left 0.4s\r\n cubic-bezier(0.22, 1.2, 0.36, 1);\r\n `\r\n );\r\n const pageTitle = () => (\r\n <div>{route.meta.title || \"无标题\"}</div>\r\n );\r\n const ghost = ref(false);\r\n\r\n const onBack = () => {\r\n if (props.close) {\r\n // 返回关闭标签\r\n deleteTabs(route.fullPath);\r\n router.go(-1);\r\n } else {\r\n // 不关闭标签\r\n router.go(-1);\r\n }\r\n };\r\n\r\n const onClosePage = () => {\r\n refresh.value = true;\r\n deleteTabs(route.fullPath);\r\n router.go(-1);\r\n };\r\n\r\n expose({\r\n close: onClosePage\r\n });\r\n\r\n return () => (\r\n <Watermark content={watermarkContent.value}>\r\n <Flex vertical={true}>\r\n <PageHeader\r\n ghost={ghost.value}\r\n class={pageHeaderStyle.value}\r\n onBack={() => onBack()}\r\n title={pageTitle()}\r\n >\r\n {{\r\n backIcon: () => (\r\n <div>\r\n <LeftOutlined\r\n style={{ fontSize: \"26px\" }}\r\n />\r\n </div>\r\n ),\r\n extra: () => slots.extra?.(),\r\n footer: () => slots.footer?.(),\r\n subTitle: () => slots.subTitle?.()\r\n }}\r\n </PageHeader>\r\n <div class={contentStyle.value}>\r\n {slots.default?.()}\r\n </div>\r\n {slots.bottomFooter ? (\r\n <div class={footerStyle.value}>\r\n {slots.bottomFooter?.()}\r\n </div>\r\n ) : null}\r\n </Flex>\r\n </Watermark>\r\n );\r\n }\r\n});\r\n\r\nexport default show;\r\n"],"names":["getProps","close","type","Boolean","default","show","defineComponent","name","props","setup","slots","expose","useToken","theme","watermarkContent","ref","inject","token","layout","modeConfig","refresh","storeToRefs","useAppStore","deleteTabs","useNavTabStore","route","useRoute","router","useRouter","y","useWindowScroll","pageHeaderStyle","computed","css","value","headerHeight","colorBgLayout","contentStyle","bottomFooter","footerStyle","collapsed","collapsedWidth","sideWidth","mode","colorBgContainer","pageTitle","_createVNode","meta","title","ghost","onBack","fullPath","go","onClosePage","Watermark","Flex","PageHeader","backIcon","LeftOutlined","fontSize","extra","_a","footer","subTitle"],"mappings":"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"}
1
+ {"version":3,"file":"Show.mjs","sources":["../../../../src/components/layout/Show.tsx"],"sourcesContent":["import {\r\n computed,\r\n ComputedRef,\r\n defineComponent,\r\n inject,\r\n ref\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport {\r\n Flex,\r\n PageHeader,\r\n theme,\r\n Watermark\r\n} from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\nimport { useWindowScroll } from \"@vueuse/core\";\r\n\r\nimport { AppContext, AppContextKey } from \"./AppContext\";\r\nimport { LeftOutlined } from \"@ant-design/icons-vue\";\r\nimport { useAppStore, useNavTabStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst getProps = () => {\r\n return {\r\n close: {\r\n type: Boolean,\r\n default: false\r\n }\r\n };\r\n};\r\nconst show = defineComponent({\r\n name: \"DShowLayout\",\r\n props: getProps(),\r\n setup(props, { slots, expose }) {\r\n const { useToken } = theme;\r\n\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n\r\n const watermarkContent = computed(\r\n () => appContext?.watermarkContent?.value.content\r\n );\r\n\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const { layout, modeConfig, refresh } =\r\n storeToRefs(useAppStore());\r\n const { deleteTabs } = useNavTabStore();\r\n\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const { y } = useWindowScroll();\r\n\r\n const pageHeaderStyle = computed(\r\n () => css`\r\n position: sticky;\r\n top: ${layout.value.headerHeight}px;\r\n z-index: 10;\r\n padding: 0;\r\n transition: all 0.3s;\r\n background-color: ${token.value.colorBgLayout};\r\n\r\n ${y.value > 0\r\n ? \"box-shadow:0 10px 10px rgba(0, 0, 0, 0.15);\"\r\n : \"\"}\r\n .ant-page-header-back {\r\n height: 100%;\r\n margin-right: 0;\r\n\r\n .ant-page-header-back-button {\r\n height: 100%;\r\n padding: 0 6px !important;\r\n display: flex !important;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n .ant-page-header-heading-title {\r\n font-size: 14px;\r\n }\r\n `\r\n );\r\n const contentStyle = computed(\r\n () => css`\r\n padding: 10px 10px\r\n ${slots.bottomFooter ? \"50px\" : \"0\"};\r\n background: ${token.value.colorBgLayout};\r\n `\r\n );\r\n const footerStyle = computed(\r\n () => css`\r\n position: fixed;\r\n right: 0;\r\n bottom: 0;\r\n height: 50px;\r\n left: ${layout.value.collapsed\r\n ? layout.value.collapsedWidth\r\n : layout.value.sideWidth}px;\r\n z-index: 10;\r\n padding: 10px;\r\n background: ${modeConfig.value.mode !== \"light\"\r\n ? token.value.colorBgContainer\r\n : \"#fff\"};\r\n box-shadow: 6px 0 10px rgba(0, 0, 0, 0.15);\r\n transition: left 0.4s\r\n cubic-bezier(0.22, 1.2, 0.36, 1);\r\n `\r\n );\r\n const pageTitle = () => (\r\n <div>{route.meta.title || \"无标题\"}</div>\r\n );\r\n const ghost = ref(false);\r\n\r\n const onBack = () => {\r\n if (props.close) {\r\n // 返回关闭标签\r\n deleteTabs(route.fullPath);\r\n router.go(-1);\r\n } else {\r\n // 不关闭标签\r\n router.go(-1);\r\n }\r\n };\r\n\r\n const onClosePage = () => {\r\n refresh.value = true;\r\n deleteTabs(route.fullPath);\r\n router.go(-1);\r\n };\r\n\r\n expose({\r\n close: onClosePage\r\n });\r\n\r\n return () => (\r\n <Watermark content={watermarkContent.value}>\r\n <Flex vertical={true}>\r\n <PageHeader\r\n ghost={ghost.value}\r\n class={pageHeaderStyle.value}\r\n onBack={() => onBack()}\r\n title={pageTitle()}\r\n >\r\n {{\r\n backIcon: () => (\r\n <div>\r\n <LeftOutlined\r\n style={{ fontSize: \"26px\" }}\r\n />\r\n </div>\r\n ),\r\n extra: () => slots.extra?.(),\r\n footer: () => slots.footer?.(),\r\n subTitle: () => slots.subTitle?.()\r\n }}\r\n </PageHeader>\r\n <div class={contentStyle.value}>\r\n {slots.default?.()}\r\n </div>\r\n {slots.bottomFooter ? (\r\n <div class={footerStyle.value}>\r\n {slots.bottomFooter?.()}\r\n </div>\r\n ) : null}\r\n </Flex>\r\n </Watermark>\r\n );\r\n }\r\n});\r\n\r\nexport default show;\r\n"],"names":["getProps","close","type","Boolean","default","show","defineComponent","name","props","setup","slots","expose","useToken","theme","appContext","inject","AppContextKey","watermarkContent","computed","value","content","token","layout","modeConfig","refresh","storeToRefs","useAppStore","deleteTabs","useNavTabStore","route","useRoute","router","useRouter","y","useWindowScroll","pageHeaderStyle","css","headerHeight","colorBgLayout","contentStyle","bottomFooter","footerStyle","collapsed","collapsedWidth","sideWidth","mode","colorBgContainer","pageTitle","_createVNode","meta","title","ghost","ref","onBack","fullPath","go","onClosePage","Watermark","Flex","PageHeader","backIcon","LeftOutlined","fontSize","extra","_a","footer","subTitle"],"mappings":"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"}
@@ -56,7 +56,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
56
56
  }
57
57
  break;
58
58
  }
59
- console.log(token);
60
59
  }
61
60
  return {
62
61
  appTheme: appTheme2
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeApp.vue2.mjs","sources":["../../../../../../src/components/layout/components/layout/ThemeApp.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Ref, ref, watch } from \"vue\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useAppStore } from \"@ditari/store\";\r\n\r\nconst props = defineProps({\n themeJson: { type: Object, required: false, default: () => ({}) }\n});\r\n\r\nconst { appTheme } = useTheme();\r\n\r\nfunction useTheme(): { appTheme: Ref<unknown> } {\r\n const { modeConfig, isCompact } =\r\n storeToRefs(useAppStore());\r\n const appTheme = ref<Record<string, unknown>>({});\r\n const { useToken } = theme;\r\n const { token } = useToken();\r\n\r\n watch(\r\n () => modeConfig.value.mode,\r\n () => {\r\n handleTheme();\r\n },\r\n { immediate: true }\r\n );\r\n\r\n watch(\r\n () => isCompact.value,\r\n () => {\r\n handleTheme();\r\n }\r\n );\r\n\r\n function handleTheme() {\r\n const isDarkMode =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\")\r\n .matches;\r\n switch (modeConfig.value.mode) {\r\n case \"light\":\r\n if (isCompact.value) {\r\n appTheme.value.algorithm = theme.compactAlgorithm;\r\n appTheme.value.token = {};\r\n } else {\r\n appTheme.value.algorithm = theme.defaultAlgorithm;\r\n appTheme.value.token = {};\r\n }\r\n break;\r\n case \"dark\":\r\n if (isCompact.value) {\r\n appTheme.value.token = props.themeJson;\r\n } else {\r\n appTheme.value.algorithm = theme.darkAlgorithm;\r\n appTheme.value.token = {};\r\n }\r\n break;\r\n case \"os\":\r\n if (isCompact.value && isDarkMode) {\r\n appTheme.value.token = props.themeJson;\r\n }\r\n break;\r\n }\r\n console.log(token);\r\n }\r\n\r\n return {\r\n appTheme\r\n };\r\n}\r\n</script>\r\n\r\n<template>\r\n <a-config-provider :theme=\"appTheme\">\r\n <slot></slot>\r\n </a-config-provider>\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["appTheme","_createBlock","_unref","_renderSlot"],"mappings":";;;;;;;;;;;;AAOA,IAAA,MAAM,KAAA,GAAQ,OAAA;AAId,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,QAAA,EAAS;AAE9B,IAAA,SAAS,QAAA,GAAuC;AAC9C,MAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAU,GAC5B,WAAA,CAAY,aAAa,CAAA;AAC3B,MAAA,MAAMA,SAAAA,GAAW,GAAA,CAA6B,EAAE,CAAA;AAChD,MAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,QAAA,EAAS;AAE3B,MAAA,KAAA;AAAA,QACE,MAAM,WAAW,KAAA,CAAM,IAAA;AAAA,QACvB,MAAM;AACJ,UAAA,WAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA,EAAE,WAAW,IAAA;AAAK,OACpB;AAEA,MAAA,KAAA;AAAA,QACE,MAAM,SAAA,CAAU,KAAA;AAAA,QAChB,MAAM;AACJ,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,OACF;AAEA,MAAA,SAAS,WAAA,GAAc;AACrB,QAAA,MAAM,aACJ,MAAA,CAAO,UAAA,IACP,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAC7C,OAAA;AACL,QAAA,QAAQ,UAAA,CAAW,MAAM,IAAA;AAAM,UAC7B,KAAK,OAAA;AACH,YAAA,IAAI,UAAU,KAAA,EAAO;AACnB,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,gBAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B,CAAA,MAAO;AACL,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,gBAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B;AACA,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,IAAI,UAAU,KAAA,EAAO;AACnB,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,YAC/B,CAAA,MAAO;AACL,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,aAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B;AACA,YAAA;AAAA,UACF,KAAK,IAAA;AACH,YAAA,IAAI,SAAA,CAAU,SAAS,UAAA,EAAY;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,YAC/B;AACA,YAAA;AAAA;AAEJ,QAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,MACnB;AAEA,MAAA,OAAO;AAAA,QACL,QAAA,EAAAA;AAAA,OACF;AAAA,IACF;;;0BAIEC,WAAA,CAEoB,4BAAA,EAAA,EAFA,KAAA,EAAOC,KAAA,CAAA,QAAA,CAAA,EAAQ,EAAA;AAAA,yBACjC,MAAa;AAAA,UAAbC,UAAA,CAAa,IAAA,CAAA,MAAA,EAAA,SAAA;AAAA;;;;;;;;;;"}
1
+ {"version":3,"file":"ThemeApp.vue2.mjs","sources":["../../../../../../src/components/layout/components/layout/ThemeApp.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Ref, ref, watch } from \"vue\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useAppStore } from \"@ditari/store\";\r\n\r\nconst props = defineProps({\n themeJson: { type: Object, required: false, default: () => ({}) }\n});\r\n\r\nconst { appTheme } = useTheme();\r\n\r\nfunction useTheme(): { appTheme: Ref<unknown> } {\r\n const { modeConfig, isCompact } =\r\n storeToRefs(useAppStore());\r\n const appTheme = ref<Record<string, unknown>>({});\r\n const { useToken } = theme;\r\n const { token } = useToken();\r\n\r\n watch(\r\n () => modeConfig.value.mode,\r\n () => {\r\n handleTheme();\r\n },\r\n { immediate: true }\r\n );\r\n\r\n watch(\r\n () => isCompact.value,\r\n () => {\r\n handleTheme();\r\n }\r\n );\r\n\r\n function handleTheme() {\r\n const isDarkMode =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\")\r\n .matches;\r\n switch (modeConfig.value.mode) {\r\n case \"light\":\r\n if (isCompact.value) {\r\n appTheme.value.algorithm = theme.compactAlgorithm;\r\n appTheme.value.token = {};\r\n } else {\r\n appTheme.value.algorithm = theme.defaultAlgorithm;\r\n appTheme.value.token = {};\r\n }\r\n break;\r\n case \"dark\":\r\n if (isCompact.value) {\r\n appTheme.value.token = props.themeJson;\r\n } else {\r\n appTheme.value.algorithm = theme.darkAlgorithm;\r\n appTheme.value.token = {};\r\n }\r\n break;\r\n case \"os\":\r\n if (isCompact.value && isDarkMode) {\r\n appTheme.value.token = props.themeJson;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n appTheme\r\n };\r\n}\r\n</script>\r\n\r\n<template>\r\n <a-config-provider :theme=\"appTheme\">\r\n <slot></slot>\r\n </a-config-provider>\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["appTheme","_createBlock","_unref","_renderSlot"],"mappings":";;;;;;;;;;;;AAOA,IAAA,MAAM,KAAA,GAAQ,OAAA;AAId,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,QAAA,EAAS;AAE9B,IAAA,SAAS,QAAA,GAAuC;AAC9C,MAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAU,GAC5B,WAAA,CAAY,aAAa,CAAA;AAC3B,MAAA,MAAMA,SAAAA,GAAW,GAAA,CAA6B,EAAE,CAAA;AAChD,MAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,QAAA,EAAS;AAE3B,MAAA,KAAA;AAAA,QACE,MAAM,WAAW,KAAA,CAAM,IAAA;AAAA,QACvB,MAAM;AACJ,UAAA,WAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA,EAAE,WAAW,IAAA;AAAK,OACpB;AAEA,MAAA,KAAA;AAAA,QACE,MAAM,SAAA,CAAU,KAAA;AAAA,QAChB,MAAM;AACJ,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,OACF;AAEA,MAAA,SAAS,WAAA,GAAc;AACrB,QAAA,MAAM,aACJ,MAAA,CAAO,UAAA,IACP,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAC7C,OAAA;AACL,QAAA,QAAQ,UAAA,CAAW,MAAM,IAAA;AAAM,UAC7B,KAAK,OAAA;AACH,YAAA,IAAI,UAAU,KAAA,EAAO;AACnB,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,gBAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B,CAAA,MAAO;AACL,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,gBAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B;AACA,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,IAAI,UAAU,KAAA,EAAO;AACnB,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,YAC/B,CAAA,MAAO;AACL,cAAAA,SAAAA,CAAS,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,aAAA;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA,YAC1B;AACA,YAAA;AAAA,UACF,KAAK,IAAA;AACH,YAAA,IAAI,SAAA,CAAU,SAAS,UAAA,EAAY;AACjC,cAAAA,SAAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,YAC/B;AACA,YAAA;AAAA;AACJ,MACF;AAEA,MAAA,OAAO;AAAA,QACL,QAAA,EAAAA;AAAA,OACF;AAAA,IACF;;;0BAIEC,WAAA,CAEoB,4BAAA,EAAA,EAFA,KAAA,EAAOC,KAAA,CAAA,QAAA,CAAA,EAAQ,EAAA;AAAA,yBACjC,MAAa;AAAA,UAAbC,UAAA,CAAa,IAAA,CAAA,MAAA,EAAA,SAAA;AAAA;;;;;;;;;;"}
@@ -1,7 +1,8 @@
1
- import { defineComponent, ref, computed, watch, createVNode, resolveComponent } from 'vue';
1
+ import { defineComponent, inject, computed, watch, createVNode, resolveComponent } from 'vue';
2
2
  import { useRoute, useRouter } from 'vue-router';
3
- import { getActivePinia, storeToRefs } from 'pinia';
4
- import { useAppStore, useMenuStore, useNoStore } from '@ditari/store';
3
+ import { storeToRefs } from 'pinia';
4
+ import { AppContextKey } from '../../AppContext.mjs';
5
+ import { useAppStore, useMenuStore } from '@ditari/store';
5
6
  import { css } from '@emotion/css';
6
7
  import useMenuCore from '../../../../utils/useMenuCore.mjs';
7
8
 
@@ -32,39 +33,37 @@ var Menu = /* @__PURE__ */ defineComponent({
32
33
  setup(_, {
33
34
  emit
34
35
  }) {
35
- const pinia = getActivePinia();
36
- const appStore = pinia ? useAppStore() : null;
37
- const menuStore = pinia ? useMenuStore() : null;
38
- const noStore = pinia ? useNoStore() : null;
39
- const defaultLayout = {
40
- sideWidth: 200,
41
- headerHeight: 44,
42
- collapsedWidth: 80,
43
- collapsed: false
44
- };
45
- const defaultModeConfig = {
46
- mode: "light",
47
- list: [{
48
- value: "light",
49
- label: "\u4EAE\u8272"
50
- }, {
51
- value: "dark",
52
- label: "\u6DF1\u8272"
53
- }, {
54
- value: "os",
55
- label: "\u8DDF\u968F\u7CFB\u7EDF"
56
- }]
57
- };
58
- const defaultMenuList = ref([]);
59
- const defaultOpenKeys = ref([]);
60
- const defaultSelectedKeys = ref([]);
61
- const defaultData = ref([]);
62
- const layout = appStore ? storeToRefs(appStore).layout : ref(defaultLayout);
63
- const modeConfig = appStore ? storeToRefs(appStore).modeConfig : ref(defaultModeConfig);
64
- const menuList = noStore ? storeToRefs(noStore).menuList : defaultMenuList;
65
- const openKeys = menuStore ? storeToRefs(menuStore).openKeys : defaultOpenKeys;
66
- const selectedKeys = menuStore ? storeToRefs(menuStore).selectedKeys : defaultSelectedKeys;
67
- const data = menuStore ? storeToRefs(menuStore).data : defaultData;
36
+ const appStore = useAppStore();
37
+ const menuStore = useMenuStore();
38
+ const appContext = inject(AppContextKey, null);
39
+ const renderMenuIcon = appContext == null ? void 0 : appContext.renderMenuIcon;
40
+ const {
41
+ layout,
42
+ modeConfig
43
+ } = storeToRefs(appStore);
44
+ const {
45
+ openKeys,
46
+ selectedKeys,
47
+ data
48
+ } = storeToRefs(menuStore);
49
+ const menuList = computed(() => {
50
+ const menuData = JSON.parse(JSON.stringify(data.value));
51
+ return renderIcon(menuData);
52
+ });
53
+ function renderIcon(data2) {
54
+ data2.forEach((item) => {
55
+ if (item.icon) {
56
+ const icon = item.icon;
57
+ item.icon = () => renderMenuIcon == null ? void 0 : renderMenuIcon({
58
+ icon
59
+ });
60
+ }
61
+ if (item.children && item.children.length) {
62
+ renderIcon(item.children);
63
+ }
64
+ });
65
+ return data2;
66
+ }
68
67
  const {
69
68
  findMatchedMenuById,
70
69
  findMenuItemByUrl
@@ -88,7 +87,7 @@ var Menu = /* @__PURE__ */ defineComponent({
88
87
 
89
88
  ${modeConfig.value.mode === "light" ? "background:transparent;" : ""}
90
89
  /* Webkit 浏览器 */
91
- ::-webkit-scrollbar {
90
+ ::-webkit-scrollbar {
92
91
  display: none;
93
92
  }
94
93
  }
@@ -165,15 +164,15 @@ var Menu = /* @__PURE__ */ defineComponent({
165
164
  keyPath,
166
165
  item
167
166
  }) => {
168
- var _a, _b, _c, _d, _e;
167
+ var _a, _b, _c, _d;
169
168
  const rs = findMatchedMenuById(key, data.value);
170
- if (((_a = item.originItemValue) == null ? void 0 : _a.isFrame) && ((_b = item.originItemValue) == null ? void 0 : _b.isFrame) === "0") {
169
+ if ((_a = item.originItemValue) == null ? void 0 : _a.isExternalLink) {
171
170
  emit("onMenuClick", item);
172
171
  } else {
173
172
  openKeys.value = keyPath;
174
- selectedKeys.value = [(_c = rs.matchItem) == null ? void 0 : _c.key];
175
- if (((_d = rs.matchItem) == null ? void 0 : _d.url) !== route.path) {
176
- router.push((_e = rs.matchItem) == null ? void 0 : _e.url).then((r) => {
173
+ selectedKeys.value = [(_b = rs.matchItem) == null ? void 0 : _b.key];
174
+ if (((_c = rs.matchItem) == null ? void 0 : _c.url) !== route.path) {
175
+ router.push((_d = rs.matchItem) == null ? void 0 : _d.url).then((r) => {
177
176
  if (r) {
178
177
  console.warn(r);
179
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, ref, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { getActivePinia, storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n useAppStore,\r\n useMenuStore,\r\n useNoStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n // 检查 Pinia 是否可用\r\n const pinia = getActivePinia();\r\n const appStore = pinia ? useAppStore() : null;\r\n const menuStore = pinia ? useMenuStore() : null;\r\n const noStore = pinia ? useNoStore() : null;\r\n\r\n // 提供默认值当 Pinia 不可用时\r\n const defaultLayout = {\r\n sideWidth: 200,\r\n headerHeight: 44,\r\n collapsedWidth: 80,\r\n collapsed: false\r\n };\r\n\r\n const defaultModeConfig = {\r\n mode: \"light\",\r\n list: [\r\n { value: \"light\", label: \"亮色\" },\r\n { value: \"dark\", label: \"深色\" },\r\n { value: \"os\", label: \"跟随系统\" }\r\n ]\r\n };\r\n\r\n const defaultMenuList = ref<any[]>([]);\r\n const defaultOpenKeys = ref<string[]>([]);\r\n const defaultSelectedKeys = ref<string[]>([]);\r\n const defaultData = ref<any[]>([]);\r\n\r\n const layout = appStore ? storeToRefs(appStore).layout : ref(defaultLayout);\r\n const modeConfig = appStore ? storeToRefs(appStore).modeConfig : ref(defaultModeConfig);\r\n const menuList = noStore ? storeToRefs(noStore).menuList : defaultMenuList;\r\n const openKeys = menuStore ? storeToRefs(menuStore).openKeys : defaultOpenKeys;\r\n const selectedKeys = menuStore ? storeToRefs(menuStore).selectedKeys : defaultSelectedKeys;\r\n const data = menuStore ? storeToRefs(menuStore).data : defaultData;\r\n\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuWrapperStyle } = useStyle();\r\n const { onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 根据URL路径查找最接近的父级菜单\r\n */\r\n const findClosestParentMenu = (\r\n url: string,\r\n menus: any[]\r\n ): any => {\r\n // 移除查询参数和哈希\r\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\r\n const pathSegments = cleanUrl\r\n .split(\"/\")\r\n .filter(Boolean);\r\n\r\n // 从最长路径开始尝试匹配\r\n for (let i = pathSegments.length; i > 0; i--) {\r\n const testPath =\r\n \"/\" + pathSegments.slice(0, i).join(\"/\");\r\n const foundItem = findMenuItemByUrl(\r\n testPath,\r\n menus\r\n );\r\n if (foundItem) return foundItem;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n let menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n\r\n // 如果没有精确匹配,尝试匹配父级路径\r\n if (!menuItem) {\r\n menuItem = findClosestParentMenu(\r\n path,\r\n data.value\r\n );\r\n }\r\n\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (\r\n item.originItemValue?.isFrame &&\r\n item.originItemValue?.isFrame === \"0\"\r\n ) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","pinia","getActivePinia","appStore","useAppStore","menuStore","useMenuStore","noStore","useNoStore","defaultLayout","sideWidth","headerHeight","collapsedWidth","collapsed","defaultModeConfig","mode","list","value","label","defaultMenuList","ref","defaultOpenKeys","defaultSelectedKeys","defaultData","layout","storeToRefs","modeConfig","menuList","openKeys","selectedKeys","data","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuWrapperStyle","useStyle","onClick","useMenu","computed","css","route","useRoute","router","useRouter","findClosestParentMenu","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","watch","fullPath","path","flag","some","item","menuItem","rs","getFullParentChain","id","key","val","parentItem","matchItem","targetId","parentChain","menu","children","result","keyPath","originItemValue","isFrame","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
1
+ {"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../../AppContext\";\r\nimport { useAppStore, useMenuStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n // ⭐️ 修复:直接调用 Store 函数,Pinia 内部机制会处理实例缺失时的行为\r\n const appStore = useAppStore();\r\n const menuStore = useMenuStore();\r\n\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n\r\n const renderMenuIcon = appContext?.renderMenuIcon;\r\n\r\n const { layout, modeConfig } = storeToRefs(appStore);\r\n\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(menuStore);\r\n\r\n const menuList = computed(() => {\r\n const menuData = JSON.parse(\r\n JSON.stringify(data.value)\r\n );\r\n return renderIcon(menuData);\r\n });\r\n\r\n function renderIcon(data: []) {\r\n // 需要递归处理\r\n data.forEach(\r\n (item: {\r\n name: string;\r\n icon: unknown;\r\n children: [];\r\n }) => {\r\n if (item.icon) {\r\n const icon = item.icon;\r\n item.icon = () =>\r\n renderMenuIcon?.({ icon } as {\r\n icon: string;\r\n });\r\n }\r\n if (item.children && item.children.length) {\r\n renderIcon(item.children);\r\n }\r\n }\r\n );\r\n return data;\r\n }\r\n\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuWrapperStyle } = useStyle();\r\n const { onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 根据URL路径查找最接近的父级菜单\r\n */\r\n const findClosestParentMenu = (\r\n url: string,\r\n menus: any[]\r\n ): any => {\r\n // 移除查询参数和哈希\r\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\r\n const pathSegments = cleanUrl\r\n .split(\"/\")\r\n .filter(Boolean);\r\n\r\n // 从最长路径开始尝试匹配\r\n for (let i = pathSegments.length; i > 0; i--) {\r\n const testPath =\r\n \"/\" + pathSegments.slice(0, i).join(\"/\");\r\n const foundItem = findMenuItemByUrl(\r\n testPath,\r\n menus\r\n );\r\n if (foundItem) return foundItem;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n let menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n\r\n // 如果没有精确匹配,尝试匹配父级路径\r\n if (!menuItem) {\r\n menuItem = findClosestParentMenu(\r\n path,\r\n data.value\r\n );\r\n }\r\n\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (item.originItemValue?.isExternalLink) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","appStore","useAppStore","menuStore","useMenuStore","appContext","inject","AppContextKey","renderMenuIcon","layout","modeConfig","storeToRefs","openKeys","selectedKeys","data","menuList","computed","menuData","JSON","parse","stringify","value","renderIcon","forEach","item","icon","children","length","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuWrapperStyle","useStyle","onClick","useMenu","css","mode","route","useRoute","router","useRouter","findClosestParentMenu","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","testPath","slice","join","foundItem","watch","fullPath","path","flag","some","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","parentChain","menu","result","keyPath","originItemValue","isExternalLink","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}