@ditari/bsui 1.1.59 → 1.1.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ditari/bsui
2
2
 
3
+ ## 1.1.61
4
+
5
+ ### Patch Changes
6
+
7
+ - 1. 修改菜单匹配逻辑
8
+
9
+ ## 1.1.60
10
+
11
+ ### Patch Changes
12
+
13
+ - 1. 更新日期组件
14
+
3
15
  ## 1.1.59
4
16
 
5
17
  ### Patch Changes
@@ -24,12 +24,10 @@ var __spreadValues = (a, b) => {
24
24
  var RangePicker = /* @__PURE__ */ vue.defineComponent({
25
25
  name: "DRangePicker",
26
26
  props: {
27
- value: {
28
- type: Object
29
- },
27
+ value: Object,
30
28
  field: {
31
- required: true,
32
- default: []
29
+ type: Array,
30
+ required: true
33
31
  },
34
32
  format: {
35
33
  default: "YYYY-MM-DD"
@@ -44,43 +42,26 @@ var RangePicker = /* @__PURE__ */ vue.defineComponent({
44
42
  attrs
45
43
  }) {
46
44
  const dates = vue.ref([]);
47
- const internalModel = vue.ref((props == null ? void 0 : props.value) || {});
48
- vue.watch(() => props.value, (val) => {
49
- internalModel.value = val ? __spreadValues({}, val) : {};
45
+ vue.watch(() => props.value, () => {
46
+ if (!props.value)
47
+ return;
48
+ dates.value = props.field.map((key) => {
49
+ var _a;
50
+ return ((_a = props.value) == null ? void 0 : _a[key]) || null;
51
+ });
50
52
  }, {
53
+ immediate: true,
51
54
  deep: true
52
55
  });
53
- const onChange = (dates2) => {
54
- if (!dates2) {
55
- props.field.forEach((key) => {
56
- internalModel.value[key] = "";
57
- });
58
- } else {
59
- props.field.forEach((key, index) => {
60
- internalModel.value[key] = dates2[index];
61
- });
62
- }
63
- emit("update:value", internalModel.value);
64
- };
65
- const watchExpressions = props.field.map((key) => () => {
66
- var _a;
67
- return (_a = props.value) == null ? void 0 : _a[key];
68
- });
69
- const watchHandler = (newValues) => {
70
- const isClear = props.field.every((key, index) => {
71
- return newValues[index] === "" || newValues[index] === void 0;
72
- });
73
- if (isClear) {
74
- dates.value = [];
56
+ const onChange = (range) => {
57
+ const updated = __spreadValues({}, props.value || {});
58
+ if (!range) {
59
+ props.field.forEach((key) => updated[key] = "");
75
60
  } else {
76
- props.field.forEach((key, index) => {
77
- dates.value && (dates.value[index] = newValues[index]);
78
- });
61
+ props.field.forEach((key, i) => updated[key] = range[i]);
79
62
  }
63
+ emit("update:value", __spreadValues({}, updated));
80
64
  };
81
- vue.watch(watchExpressions, watchHandler, {
82
- immediate: true
83
- });
84
65
  return () => vue.createVNode("div", null, [vue.createVNode(antDesignVue.RangePicker, vue.mergeProps(attrs, {
85
66
  "value": dates.value,
86
67
  "onUpdate:value": ($event) => dates.value = $event,
@@ -1 +1 @@
1
- {"version":3,"file":"RangePicker.cjs","sources":["../../../src/date/RangePicker.tsx"],"sourcesContent":["import { defineComponent, ref, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { RangePicker } from \"ant-design-vue\";\n\n/**\n * 日期范围控件\n */\nexport default defineComponent({\n name: \"DRangePicker\",\n props: {\n value: {\n type: Object as PropType<{ [name: string]: unknown }>\n },\n field: {\n required: true,\n default: [] as string[]\n },\n format: {\n default: \"YYYY-MM-DD\"\n },\n valueFormat: {\n default: \"YYYY-MM-DD\"\n }\n },\n emits: [\"update:value\"],\n setup(props, { emit, attrs }) {\n const dates = ref<string[]>([]);\n\n //内部model\n const internalModel = ref<{ [name: string]: unknown }>(props?.value || {});\n\n watch(\n () => props.value,\n (val: any) => {\n // 要监听val 进行赋值,因为如果父组件直接改变val的整个对象,那么internalModel就会失去对value的依赖追踪\n // 导致数据不同步\n internalModel.value = val ? { ...val } : {};\n },\n {\n deep: true\n }\n );\n\n // 监听日期变化\n const onChange = (dates: [any, any]) => {\n if (!dates) {\n props.field.forEach((key) => {\n internalModel.value[key] = \"\";\n });\n } else {\n props.field.forEach((key, index) => {\n internalModel.value[key] = dates[index];\n });\n }\n emit(\"update:value\", internalModel.value);\n };\n\n //循环字段\n // eslint-disable-next-line vue/no-setup-props-destructure\n const watchExpressions = props.field.map((key) => () => {\n return props.value?.[key];\n });\n\n const watchHandler = (newValues: any) => {\n // 判断是否被置空只有这两个字段同时为空,才是表明被置空\n const isClear = props.field.every((key, index) => {\n return newValues[index] === \"\" || newValues[index] === undefined;\n });\n if (isClear) {\n dates.value = [];\n } else {\n props.field.forEach((key, index) => {\n dates.value && (dates.value[index] = newValues[index]);\n });\n }\n };\n //监听多个字段变化\n watch(watchExpressions, watchHandler, { immediate: true });\n\n return () => (\n <div>\n <RangePicker\n {...attrs}\n v-model:value={dates.value}\n onChange={onChange}\n format={props.format}\n valueFormat={props.valueFormat}\n style={{ width: \"100%\" }}\n ></RangePicker>\n </div>\n );\n }\n});\n"],"names":["defineComponent","name","props","value","type","Object","field","required","default","format","valueFormat","emits","setup","emit","attrs","dates","ref","internalModel","watch","val","deep","onChange","forEach","key","index","watchExpressions","map","watchHandler","newValues","isClear","every","undefined","immediate","_createVNode","RangePicker","_mergeProps","$event","width"],"mappings":"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"}
1
+ {"version":3,"file":"RangePicker.cjs","sources":["../../../src/date/RangePicker.tsx"],"sourcesContent":["// ✅ DRangePicker.vue\nimport { defineComponent, ref, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { RangePicker } from \"ant-design-vue\";\n\nexport default defineComponent({\n name: \"DRangePicker\",\n props: {\n value: Object as PropType<{ [key: string]: any }>,\n field: {\n type: Array as PropType<string[]>,\n required: true\n },\n format: {\n default: \"YYYY-MM-DD\"\n },\n valueFormat: {\n default: \"YYYY-MM-DD\"\n }\n },\n emits: [\"update:value\"],\n setup(props, { emit, attrs }) {\n const dates = ref<any[]>([]);\n\n // 同步外部值到内部日期控件\n watch(\n () => props.value,\n () => {\n if (!props.value) return;\n dates.value = props.field.map((key) => props.value?.[key] || null);\n },\n { immediate: true, deep: true }\n );\n\n const onChange = (range: [any, any] | null) => {\n const updated = { ...(props.value || {}) };\n if (!range) {\n props.field.forEach((key) => (updated[key] = \"\"));\n } else {\n props.field.forEach((key, i) => (updated[key] = range[i]));\n }\n emit(\"update:value\", { ...updated });\n };\n\n return () => (\n <div>\n <RangePicker\n {...attrs}\n v-model:value={dates.value}\n onChange={onChange}\n format={props.format}\n valueFormat={props.valueFormat}\n style={{ width: \"100%\" }}\n />\n </div>\n );\n }\n});\n"],"names":["defineComponent","name","props","value","Object","field","type","Array","required","format","default","valueFormat","emits","setup","emit","attrs","dates","ref","watch","map","key","immediate","deep","onChange","range","updated","forEach","i","_createVNode","RangePicker","_mergeProps","$event","width"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKA,kCAA+BA,mBAAA,CAAA;AAAA,EAC7BC,IAAM,EAAA,cAAA;AAAA,EACNC,KAAO,EAAA;AAAA,IACLC,KAAOC,EAAAA,MAAAA;AAAAA,IACPC,KAAO,EAAA;AAAA,MACLC,IAAMC,EAAAA,KAAAA;AAAAA,MACNC,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,IACAC,MAAQ,EAAA;AAAA,MACNC,OAAS,EAAA,YAAA;AAAA,KACX;AAAA,IACAC,WAAa,EAAA;AAAA,MACXD,OAAS,EAAA,YAAA;AAAA,KACX;AAAA,GACF;AAAA,EACAE,KAAAA,EAAO,CAAC,cAAc,CAAA;AAAA,EACtBC,MAAMX,KAAO,EAAA;AAAA,IAAEY,IAAAA;AAAAA,IAAMC,KAAAA;AAAAA,GAAS,EAAA;AAC5B,IAAMC,MAAAA,KAAAA,GAAQC,OAAW,CAAA,EAAE,CAAA,CAAA;AAG3BC,IACEA,SAAA,CAAA,MAAMhB,KAAMC,CAAAA,KAAAA,EACZ,MAAM;AACJ,MAAA,IAAI,CAACD,KAAMC,CAAAA,KAAAA;AAAO,QAAA,OAAA;AAClBa,MAAAA,KAAAA,CAAMb,KAAQD,GAAAA,KAAAA,CAAMG,KAAMc,CAAAA,GAAAA,CAAKC,CAAQlB,GAAAA,KAAAA;;AAAAA,QAAMC,OAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,CAAAA,KAAAA,KAAND,mBAAckB,GAAQ,CAAA,KAAA,IAAA,CAAA;AAAA,OAAI,CAAA,CAAA;AAAA,KAEnE,EAAA;AAAA,MAAEC,SAAW,EAAA,IAAA;AAAA,MAAMC,IAAM,EAAA,IAAA;AAAA,KAC3B,CAAA,CAAA;AAEA,IAAA,MAAMC,WAAYC,CAA6B,KAAA,KAAA;AAC7C,MAAA,MAAMC,OAAU,GAAA,cAAA,CAAA,EAAA,EAAMvB,KAAMC,CAAAA,KAAAA,IAAS,EAAC,CAAA,CAAA;AACtC,MAAA,IAAI,CAACqB,KAAO,EAAA;AACVtB,QAAAA,KAAAA,CAAMG,MAAMqB,OAASN,CAAAA,CAAAA,GAAAA,KAASK,OAAQL,CAAAA,GAAG,IAAI,EAAG,CAAA,CAAA;AAAA,OAC3C,MAAA;AACLlB,QAAMG,KAAAA,CAAAA,KAAAA,CAAMqB,OAAQ,CAAA,CAACN,GAAKO,EAAAA,CAAAA,KAAOF,QAAQL,GAAG,CAAA,GAAII,KAAMG,CAAAA,CAAC,CAAE,CAAA,CAAA;AAAA,OAC3D;AACAb,MAAK,IAAA,CAAA,cAAA,EAAgB,mBAAKW,OAAS,CAAA,CAAA,CAAA;AAAA,KACrC,CAAA;AAEA,IAAO,OAAA,MAAAG,gBAAAA,KAAAA,EAAAA,IAAAA,EAAAA,CAAAA,eAAAC,CAAAA,wBAAAA,EAAAC,eAGGf,KAAK,EAAA;AAAA,MAAA,SACMC,KAAMb,CAAAA,KAAAA;AAAAA,MAAK,gBAAA,EAAA4B,CAAXf,MAAAA,KAAAA,KAAAA,CAAMb,KAAK4B,GAAAA,MAAAA;AAAAA,MAAA,UAChBR,EAAAA,QAAAA;AAAAA,MAAQ,UACVrB,KAAMO,CAAAA,MAAAA;AAAAA,MAAM,eACPP,KAAMS,CAAAA,WAAAA;AAAAA,MAAW,OACvB,EAAA;AAAA,QAAEqB,KAAO,EAAA,MAAA;AAAA,OAAO;AAAA,KAG5B,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -1,16 +1,11 @@
1
1
  import type { PropType } from "vue";
2
- /**
3
- * 日期范围控件
4
- */
5
2
  declare const _default: import("vue").DefineComponent<{
6
- value: {
7
- type: PropType<{
8
- [name: string]: unknown;
9
- }>;
10
- };
3
+ value: PropType<{
4
+ [key: string]: any;
5
+ }>;
11
6
  field: {
7
+ type: PropType<string[]>;
12
8
  required: true;
13
- default: string[];
14
9
  };
15
10
  format: {
16
11
  default: string;
@@ -19,14 +14,12 @@ declare const _default: import("vue").DefineComponent<{
19
14
  default: string;
20
15
  };
21
16
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:value"[], "update:value", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
- value: {
23
- type: PropType<{
24
- [name: string]: unknown;
25
- }>;
26
- };
17
+ value: PropType<{
18
+ [key: string]: any;
19
+ }>;
27
20
  field: {
21
+ type: PropType<string[]>;
28
22
  required: true;
29
- default: string[];
30
23
  };
31
24
  format: {
32
25
  default: string;
@@ -37,7 +30,6 @@ declare const _default: import("vue").DefineComponent<{
37
30
  }>> & {
38
31
  "onUpdate:value"?: ((...args: any[]) => any) | undefined;
39
32
  }, {
40
- field: string[];
41
33
  format: string;
42
34
  valueFormat: string;
43
35
  }, {}>;
@@ -84,7 +84,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
84
84
  if (rs == null ? void 0 : rs.parentItem) {
85
85
  openMenusKeys.value = [rs.parentItem.key];
86
86
  } else {
87
- openMenusKeys.value = [rs.matchItem.key];
87
+ openMenusKeys.value = rs ? [rs == null ? void 0 : rs.matchItem.key] : [];
88
88
  }
89
89
  }
90
90
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.cjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\nimport useMenuCore from \"./useMenuCore\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n const { findMatchedMenuById, findMenuItemByUrl } = useMenuCore();\n\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n useMenu();\n function useMenu() {\n /**\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\n */\n watch(\n () => route.fullPath,\n async (path) => {\n const flag = selectedMenuKeys.value.some(\n (item: string) => item === path\n );\n if (!flag) {\n let menuItem = findMenuItemByUrl(path, list.value);\n\n // 如果没有精确匹配,尝试匹配父级路径\n if (!menuItem) {\n menuItem = findClosestParentMenu(path, list.value);\n }\n if (!menuItem) {\n openMenusKeys.value = [];\n selectedMenuKeys.value = [path];\n } else {\n const rs = getFullParentChain(menuItem.id, list.value as never);\n if (!getCollapsed.value) {\n openMenusKeys.value = rs!;\n }\n selectedMenuKeys.value = [menuItem.key];\n }\n }\n }\n );\n\n watch(\n () => getCollapsed.value,\n (val) => {\n const id = selectedMenuKeys.value[0];\n const rs = findMatchedMenuById(id, list.value as never);\n\n if (val) {\n openMenusKeys.value = [];\n } else {\n if (rs?.parentItem) {\n openMenusKeys.value = [rs.parentItem.key];\n } else {\n openMenusKeys.value = [rs!.matchItem.key];\n }\n }\n }\n );\n\n /**\n * 根据URL路径查找最接近的父级菜单\n */\n const findClosestParentMenu = (url: string, menus: any[]): any => {\n // 移除查询参数和哈希\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n const pathSegments = cleanUrl.split(\"/\").filter(Boolean);\n\n // 从最长路径开始尝试匹配\n for (let i = pathSegments.length; i > 0; i--) {\n const testPath = \"/\" + pathSegments.slice(0, i).join(\"/\");\n const foundItem = findMenuItemByUrl(testPath, menus);\n if (foundItem) return foundItem;\n }\n\n return null;\n };\n\n /**\n * 获取从根到目标菜单项的完整 key 链\n * @param targetId 目标菜单项 id\n * @param menus 菜单数据\n * @param parentChain 递归传递的父级链\n */\n const getFullParentChain = (\n targetId: string,\n menus: any[],\n parentChain: string[] = []\n ): string[] | null => {\n for (const menu of menus) {\n // 找到目标项,返回完整链(包含自身 key)\n if (menu.id === targetId) {\n return [...parentChain, menu.key];\n }\n\n // 递归查找子菜单\n if (menu.children?.length) {\n const result = getFullParentChain(\n targetId,\n menu.children,\n [...parentChain, menu.key] // 传递当前层级的 key\n );\n if (result) return result;\n }\n }\n return null;\n };\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n const rs = findMatchedMenuById(key, list.value);\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === rs.matchItem.url && item.components);\n\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + rs.matchItem.url, \"_blank\");\n } else {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [rs.matchItem?.key];\n if (rs.matchItem?.url !== route.path) {\n // 判断目标路由和当前路由是否相等;\n // 不相等的时候再跳转\n router.push(rs.matchItem?.url).then((r) => {\n if (r) {\n console.warn(r);\n }\n });\n }\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.key}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","useMenu","watch","fullPath","path","flag","value","some","item","menuItem","findClosestParentMenu","rs","getFullParentChain","id","key","val","parentItem","matchItem","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","targetId","parentChain","menu","children","result","onClick","keyPath","findRoute","getRoutes","find","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":"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"}
1
+ {"version":3,"file":"Menu.cjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\nimport useMenuCore from \"./useMenuCore\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n const { findMatchedMenuById, findMenuItemByUrl } = useMenuCore();\n\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n useMenu();\n function useMenu() {\n /**\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\n */\n watch(\n () => route.fullPath,\n async (path) => {\n const flag = selectedMenuKeys.value.some(\n (item: string) => item === path\n );\n if (!flag) {\n let menuItem = findMenuItemByUrl(path, list.value);\n\n // 如果没有精确匹配,尝试匹配父级路径\n if (!menuItem) {\n menuItem = findClosestParentMenu(path, list.value);\n }\n if (!menuItem) {\n openMenusKeys.value = [];\n selectedMenuKeys.value = [path];\n } else {\n const rs = getFullParentChain(menuItem.id, list.value as never);\n if (!getCollapsed.value) {\n openMenusKeys.value = rs!;\n }\n selectedMenuKeys.value = [menuItem.key];\n }\n }\n }\n );\n\n watch(\n () => getCollapsed.value,\n (val) => {\n const id = selectedMenuKeys.value[0];\n const rs = findMatchedMenuById(id, list.value as never);\n\n if (val) {\n openMenusKeys.value = [];\n } else {\n if (rs?.parentItem) {\n openMenusKeys.value = [rs.parentItem.key];\n } else {\n openMenusKeys.value = rs ? [rs?.matchItem.key] : [];\n }\n }\n }\n );\n\n /**\n * 根据URL路径查找最接近的父级菜单\n */\n const findClosestParentMenu = (url: string, menus: any[]): any => {\n // 移除查询参数和哈希\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n const pathSegments = cleanUrl.split(\"/\").filter(Boolean);\n\n // 从最长路径开始尝试匹配\n for (let i = pathSegments.length; i > 0; i--) {\n const testPath = \"/\" + pathSegments.slice(0, i).join(\"/\");\n const foundItem = findMenuItemByUrl(testPath, menus);\n if (foundItem) return foundItem;\n }\n\n return null;\n };\n\n /**\n * 获取从根到目标菜单项的完整 key 链\n * @param targetId 目标菜单项 id\n * @param menus 菜单数据\n * @param parentChain 递归传递的父级链\n */\n const getFullParentChain = (\n targetId: string,\n menus: any[],\n parentChain: string[] = []\n ): string[] | null => {\n for (const menu of menus) {\n // 找到目标项,返回完整链(包含自身 key)\n if (menu.id === targetId) {\n return [...parentChain, menu.key];\n }\n\n // 递归查找子菜单\n if (menu.children?.length) {\n const result = getFullParentChain(\n targetId,\n menu.children,\n [...parentChain, menu.key] // 传递当前层级的 key\n );\n if (result) return result;\n }\n }\n return null;\n };\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n const rs = findMatchedMenuById(key, list.value);\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === rs.matchItem.url && item.components);\n\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + rs.matchItem.url, \"_blank\");\n } else {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [rs.matchItem?.key];\n if (rs.matchItem?.url !== route.path) {\n // 判断目标路由和当前路由是否相等;\n // 不相等的时候再跳转\n router.push(rs.matchItem?.url).then((r) => {\n if (r) {\n console.warn(r);\n }\n });\n }\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.key}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","useMenu","watch","fullPath","path","flag","value","some","item","menuItem","findClosestParentMenu","rs","getFullParentChain","id","key","val","parentItem","matchItem","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","targetId","parentChain","menu","children","result","onClick","keyPath","findRoute","getRoutes","find","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":"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"}
@@ -1,16 +1,11 @@
1
1
  import type { PropType } from "vue";
2
- /**
3
- * 日期范围控件
4
- */
5
2
  declare const _default: import("vue").DefineComponent<{
6
- value: {
7
- type: PropType<{
8
- [name: string]: unknown;
9
- }>;
10
- };
3
+ value: PropType<{
4
+ [key: string]: any;
5
+ }>;
11
6
  field: {
7
+ type: PropType<string[]>;
12
8
  required: true;
13
- default: string[];
14
9
  };
15
10
  format: {
16
11
  default: string;
@@ -19,14 +14,12 @@ declare const _default: import("vue").DefineComponent<{
19
14
  default: string;
20
15
  };
21
16
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:value"[], "update:value", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
- value: {
23
- type: PropType<{
24
- [name: string]: unknown;
25
- }>;
26
- };
17
+ value: PropType<{
18
+ [key: string]: any;
19
+ }>;
27
20
  field: {
21
+ type: PropType<string[]>;
28
22
  required: true;
29
- default: string[];
30
23
  };
31
24
  format: {
32
25
  default: string;
@@ -37,7 +30,6 @@ declare const _default: import("vue").DefineComponent<{
37
30
  }>> & {
38
31
  "onUpdate:value"?: ((...args: any[]) => any) | undefined;
39
32
  }, {
40
- field: string[];
41
33
  format: string;
42
34
  valueFormat: string;
43
35
  }, {}>;
@@ -20,12 +20,10 @@ var __spreadValues = (a, b) => {
20
20
  var RangePicker = /* @__PURE__ */ defineComponent({
21
21
  name: "DRangePicker",
22
22
  props: {
23
- value: {
24
- type: Object
25
- },
23
+ value: Object,
26
24
  field: {
27
- required: true,
28
- default: []
25
+ type: Array,
26
+ required: true
29
27
  },
30
28
  format: {
31
29
  default: "YYYY-MM-DD"
@@ -40,43 +38,26 @@ var RangePicker = /* @__PURE__ */ defineComponent({
40
38
  attrs
41
39
  }) {
42
40
  const dates = ref([]);
43
- const internalModel = ref((props == null ? void 0 : props.value) || {});
44
- watch(() => props.value, (val) => {
45
- internalModel.value = val ? __spreadValues({}, val) : {};
41
+ watch(() => props.value, () => {
42
+ if (!props.value)
43
+ return;
44
+ dates.value = props.field.map((key) => {
45
+ var _a;
46
+ return ((_a = props.value) == null ? void 0 : _a[key]) || null;
47
+ });
46
48
  }, {
49
+ immediate: true,
47
50
  deep: true
48
51
  });
49
- const onChange = (dates2) => {
50
- if (!dates2) {
51
- props.field.forEach((key) => {
52
- internalModel.value[key] = "";
53
- });
54
- } else {
55
- props.field.forEach((key, index) => {
56
- internalModel.value[key] = dates2[index];
57
- });
58
- }
59
- emit("update:value", internalModel.value);
60
- };
61
- const watchExpressions = props.field.map((key) => () => {
62
- var _a;
63
- return (_a = props.value) == null ? void 0 : _a[key];
64
- });
65
- const watchHandler = (newValues) => {
66
- const isClear = props.field.every((key, index) => {
67
- return newValues[index] === "" || newValues[index] === void 0;
68
- });
69
- if (isClear) {
70
- dates.value = [];
52
+ const onChange = (range) => {
53
+ const updated = __spreadValues({}, props.value || {});
54
+ if (!range) {
55
+ props.field.forEach((key) => updated[key] = "");
71
56
  } else {
72
- props.field.forEach((key, index) => {
73
- dates.value && (dates.value[index] = newValues[index]);
74
- });
57
+ props.field.forEach((key, i) => updated[key] = range[i]);
75
58
  }
59
+ emit("update:value", __spreadValues({}, updated));
76
60
  };
77
- watch(watchExpressions, watchHandler, {
78
- immediate: true
79
- });
80
61
  return () => createVNode("div", null, [createVNode(RangePicker$1, mergeProps(attrs, {
81
62
  "value": dates.value,
82
63
  "onUpdate:value": ($event) => dates.value = $event,
@@ -1 +1 @@
1
- {"version":3,"file":"RangePicker.mjs","sources":["../../../src/date/RangePicker.tsx"],"sourcesContent":["import { defineComponent, ref, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { RangePicker } from \"ant-design-vue\";\n\n/**\n * 日期范围控件\n */\nexport default defineComponent({\n name: \"DRangePicker\",\n props: {\n value: {\n type: Object as PropType<{ [name: string]: unknown }>\n },\n field: {\n required: true,\n default: [] as string[]\n },\n format: {\n default: \"YYYY-MM-DD\"\n },\n valueFormat: {\n default: \"YYYY-MM-DD\"\n }\n },\n emits: [\"update:value\"],\n setup(props, { emit, attrs }) {\n const dates = ref<string[]>([]);\n\n //内部model\n const internalModel = ref<{ [name: string]: unknown }>(props?.value || {});\n\n watch(\n () => props.value,\n (val: any) => {\n // 要监听val 进行赋值,因为如果父组件直接改变val的整个对象,那么internalModel就会失去对value的依赖追踪\n // 导致数据不同步\n internalModel.value = val ? { ...val } : {};\n },\n {\n deep: true\n }\n );\n\n // 监听日期变化\n const onChange = (dates: [any, any]) => {\n if (!dates) {\n props.field.forEach((key) => {\n internalModel.value[key] = \"\";\n });\n } else {\n props.field.forEach((key, index) => {\n internalModel.value[key] = dates[index];\n });\n }\n emit(\"update:value\", internalModel.value);\n };\n\n //循环字段\n // eslint-disable-next-line vue/no-setup-props-destructure\n const watchExpressions = props.field.map((key) => () => {\n return props.value?.[key];\n });\n\n const watchHandler = (newValues: any) => {\n // 判断是否被置空只有这两个字段同时为空,才是表明被置空\n const isClear = props.field.every((key, index) => {\n return newValues[index] === \"\" || newValues[index] === undefined;\n });\n if (isClear) {\n dates.value = [];\n } else {\n props.field.forEach((key, index) => {\n dates.value && (dates.value[index] = newValues[index]);\n });\n }\n };\n //监听多个字段变化\n watch(watchExpressions, watchHandler, { immediate: true });\n\n return () => (\n <div>\n <RangePicker\n {...attrs}\n v-model:value={dates.value}\n onChange={onChange}\n format={props.format}\n valueFormat={props.valueFormat}\n style={{ width: \"100%\" }}\n ></RangePicker>\n </div>\n );\n }\n});\n"],"names":["name","props","value","type","Object","field","required","default","format","valueFormat","emits","setup","emit","attrs","dates","ref","internalModel","watch","val","deep","onChange","forEach","key","index","watchExpressions","map","watchHandler","newValues","isClear","every","undefined","immediate","_createVNode","RangePicker","_mergeProps","$event","width"],"mappings":"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"}
1
+ {"version":3,"file":"RangePicker.mjs","sources":["../../../src/date/RangePicker.tsx"],"sourcesContent":["// ✅ DRangePicker.vue\nimport { defineComponent, ref, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { RangePicker } from \"ant-design-vue\";\n\nexport default defineComponent({\n name: \"DRangePicker\",\n props: {\n value: Object as PropType<{ [key: string]: any }>,\n field: {\n type: Array as PropType<string[]>,\n required: true\n },\n format: {\n default: \"YYYY-MM-DD\"\n },\n valueFormat: {\n default: \"YYYY-MM-DD\"\n }\n },\n emits: [\"update:value\"],\n setup(props, { emit, attrs }) {\n const dates = ref<any[]>([]);\n\n // 同步外部值到内部日期控件\n watch(\n () => props.value,\n () => {\n if (!props.value) return;\n dates.value = props.field.map((key) => props.value?.[key] || null);\n },\n { immediate: true, deep: true }\n );\n\n const onChange = (range: [any, any] | null) => {\n const updated = { ...(props.value || {}) };\n if (!range) {\n props.field.forEach((key) => (updated[key] = \"\"));\n } else {\n props.field.forEach((key, i) => (updated[key] = range[i]));\n }\n emit(\"update:value\", { ...updated });\n };\n\n return () => (\n <div>\n <RangePicker\n {...attrs}\n v-model:value={dates.value}\n onChange={onChange}\n format={props.format}\n valueFormat={props.valueFormat}\n style={{ width: \"100%\" }}\n />\n </div>\n );\n }\n});\n"],"names":["name","props","value","Object","field","type","Array","required","format","default","valueFormat","emits","setup","emit","attrs","dates","ref","watch","map","key","immediate","deep","onChange","range","updated","forEach","i","_createVNode","RangePicker","_mergeProps","$event","width"],"mappings":";;;;;;;;;;;;;;;;;;;AAKA,kCAA+B,eAAA,CAAA;AAAA,EAC7BA,IAAM,EAAA,cAAA;AAAA,EACNC,KAAO,EAAA;AAAA,IACLC,KAAOC,EAAAA,MAAAA;AAAAA,IACPC,KAAO,EAAA;AAAA,MACLC,IAAMC,EAAAA,KAAAA;AAAAA,MACNC,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,IACAC,MAAQ,EAAA;AAAA,MACNC,OAAS,EAAA,YAAA;AAAA,KACX;AAAA,IACAC,WAAa,EAAA;AAAA,MACXD,OAAS,EAAA,YAAA;AAAA,KACX;AAAA,GACF;AAAA,EACAE,KAAAA,EAAO,CAAC,cAAc,CAAA;AAAA,EACtBC,MAAMX,KAAO,EAAA;AAAA,IAAEY,IAAAA;AAAAA,IAAMC,KAAAA;AAAAA,GAAS,EAAA;AAC5B,IAAMC,MAAAA,KAAAA,GAAQC,GAAW,CAAA,EAAE,CAAA,CAAA;AAG3BC,IACE,KAAA,CAAA,MAAMhB,KAAMC,CAAAA,KAAAA,EACZ,MAAM;AACJ,MAAA,IAAI,CAACD,KAAMC,CAAAA,KAAAA;AAAO,QAAA,OAAA;AAClBa,MAAAA,KAAAA,CAAMb,KAAQD,GAAAA,KAAAA,CAAMG,KAAMc,CAAAA,GAAAA,CAAKC,CAAQlB,GAAAA,KAAAA;;AAAAA,QAAMC,OAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,CAAAA,KAAAA,KAAND,mBAAckB,GAAQ,CAAA,KAAA,IAAA,CAAA;AAAA,OAAI,CAAA,CAAA;AAAA,KAEnE,EAAA;AAAA,MAAEC,SAAW,EAAA,IAAA;AAAA,MAAMC,IAAM,EAAA,IAAA;AAAA,KAC3B,CAAA,CAAA;AAEA,IAAA,MAAMC,WAAYC,CAA6B,KAAA,KAAA;AAC7C,MAAA,MAAMC,OAAU,GAAA,cAAA,CAAA,EAAA,EAAMvB,KAAMC,CAAAA,KAAAA,IAAS,EAAC,CAAA,CAAA;AACtC,MAAA,IAAI,CAACqB,KAAO,EAAA;AACVtB,QAAAA,KAAAA,CAAMG,MAAMqB,OAASN,CAAAA,CAAAA,GAAAA,KAASK,OAAQL,CAAAA,GAAG,IAAI,EAAG,CAAA,CAAA;AAAA,OAC3C,MAAA;AACLlB,QAAMG,KAAAA,CAAAA,KAAAA,CAAMqB,OAAQ,CAAA,CAACN,GAAKO,EAAAA,CAAAA,KAAOF,QAAQL,GAAG,CAAA,GAAII,KAAMG,CAAAA,CAAC,CAAE,CAAA,CAAA;AAAA,OAC3D;AACAb,MAAK,IAAA,CAAA,cAAA,EAAgB,mBAAKW,OAAS,CAAA,CAAA,CAAA;AAAA,KACrC,CAAA;AAEA,IAAO,OAAA,MAAAG,YAAAA,KAAAA,EAAAA,IAAAA,EAAAA,CAAAA,WAAAC,CAAAA,aAAAA,EAAAC,WAGGf,KAAK,EAAA;AAAA,MAAA,SACMC,KAAMb,CAAAA,KAAAA;AAAAA,MAAK,gBAAA,EAAA4B,CAAXf,MAAAA,KAAAA,KAAAA,CAAMb,KAAK4B,GAAAA,MAAAA;AAAAA,MAAA,UAChBR,EAAAA,QAAAA;AAAAA,MAAQ,UACVrB,KAAMO,CAAAA,MAAAA;AAAAA,MAAM,eACPP,KAAMS,CAAAA,WAAAA;AAAAA,MAAW,OACvB,EAAA;AAAA,QAAEqB,KAAO,EAAA,MAAA;AAAA,OAAO;AAAA,KAG5B,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -80,7 +80,7 @@ var Menu = /* @__PURE__ */ defineComponent({
80
80
  if (rs == null ? void 0 : rs.parentItem) {
81
81
  openMenusKeys.value = [rs.parentItem.key];
82
82
  } else {
83
- openMenusKeys.value = [rs.matchItem.key];
83
+ openMenusKeys.value = rs ? [rs == null ? void 0 : rs.matchItem.key] : [];
84
84
  }
85
85
  }
86
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.mjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\nimport useMenuCore from \"./useMenuCore\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n const { findMatchedMenuById, findMenuItemByUrl } = useMenuCore();\n\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n useMenu();\n function useMenu() {\n /**\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\n */\n watch(\n () => route.fullPath,\n async (path) => {\n const flag = selectedMenuKeys.value.some(\n (item: string) => item === path\n );\n if (!flag) {\n let menuItem = findMenuItemByUrl(path, list.value);\n\n // 如果没有精确匹配,尝试匹配父级路径\n if (!menuItem) {\n menuItem = findClosestParentMenu(path, list.value);\n }\n if (!menuItem) {\n openMenusKeys.value = [];\n selectedMenuKeys.value = [path];\n } else {\n const rs = getFullParentChain(menuItem.id, list.value as never);\n if (!getCollapsed.value) {\n openMenusKeys.value = rs!;\n }\n selectedMenuKeys.value = [menuItem.key];\n }\n }\n }\n );\n\n watch(\n () => getCollapsed.value,\n (val) => {\n const id = selectedMenuKeys.value[0];\n const rs = findMatchedMenuById(id, list.value as never);\n\n if (val) {\n openMenusKeys.value = [];\n } else {\n if (rs?.parentItem) {\n openMenusKeys.value = [rs.parentItem.key];\n } else {\n openMenusKeys.value = [rs!.matchItem.key];\n }\n }\n }\n );\n\n /**\n * 根据URL路径查找最接近的父级菜单\n */\n const findClosestParentMenu = (url: string, menus: any[]): any => {\n // 移除查询参数和哈希\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n const pathSegments = cleanUrl.split(\"/\").filter(Boolean);\n\n // 从最长路径开始尝试匹配\n for (let i = pathSegments.length; i > 0; i--) {\n const testPath = \"/\" + pathSegments.slice(0, i).join(\"/\");\n const foundItem = findMenuItemByUrl(testPath, menus);\n if (foundItem) return foundItem;\n }\n\n return null;\n };\n\n /**\n * 获取从根到目标菜单项的完整 key 链\n * @param targetId 目标菜单项 id\n * @param menus 菜单数据\n * @param parentChain 递归传递的父级链\n */\n const getFullParentChain = (\n targetId: string,\n menus: any[],\n parentChain: string[] = []\n ): string[] | null => {\n for (const menu of menus) {\n // 找到目标项,返回完整链(包含自身 key)\n if (menu.id === targetId) {\n return [...parentChain, menu.key];\n }\n\n // 递归查找子菜单\n if (menu.children?.length) {\n const result = getFullParentChain(\n targetId,\n menu.children,\n [...parentChain, menu.key] // 传递当前层级的 key\n );\n if (result) return result;\n }\n }\n return null;\n };\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n const rs = findMatchedMenuById(key, list.value);\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === rs.matchItem.url && item.components);\n\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + rs.matchItem.url, \"_blank\");\n } else {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [rs.matchItem?.key];\n if (rs.matchItem?.url !== route.path) {\n // 判断目标路由和当前路由是否相等;\n // 不相等的时候再跳转\n router.push(rs.matchItem?.url).then((r) => {\n if (r) {\n console.warn(r);\n }\n });\n }\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.key}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","useMenu","watch","fullPath","path","flag","value","some","item","menuItem","findClosestParentMenu","rs","getFullParentChain","id","key","val","parentItem","matchItem","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","targetId","parentChain","menu","children","result","onClick","keyPath","findRoute","getRoutes","find","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":"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"}
1
+ {"version":3,"file":"Menu.mjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\nimport useMenuCore from \"./useMenuCore\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n const { findMatchedMenuById, findMenuItemByUrl } = useMenuCore();\n\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n useMenu();\n function useMenu() {\n /**\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\n */\n watch(\n () => route.fullPath,\n async (path) => {\n const flag = selectedMenuKeys.value.some(\n (item: string) => item === path\n );\n if (!flag) {\n let menuItem = findMenuItemByUrl(path, list.value);\n\n // 如果没有精确匹配,尝试匹配父级路径\n if (!menuItem) {\n menuItem = findClosestParentMenu(path, list.value);\n }\n if (!menuItem) {\n openMenusKeys.value = [];\n selectedMenuKeys.value = [path];\n } else {\n const rs = getFullParentChain(menuItem.id, list.value as never);\n if (!getCollapsed.value) {\n openMenusKeys.value = rs!;\n }\n selectedMenuKeys.value = [menuItem.key];\n }\n }\n }\n );\n\n watch(\n () => getCollapsed.value,\n (val) => {\n const id = selectedMenuKeys.value[0];\n const rs = findMatchedMenuById(id, list.value as never);\n\n if (val) {\n openMenusKeys.value = [];\n } else {\n if (rs?.parentItem) {\n openMenusKeys.value = [rs.parentItem.key];\n } else {\n openMenusKeys.value = rs ? [rs?.matchItem.key] : [];\n }\n }\n }\n );\n\n /**\n * 根据URL路径查找最接近的父级菜单\n */\n const findClosestParentMenu = (url: string, menus: any[]): any => {\n // 移除查询参数和哈希\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n const pathSegments = cleanUrl.split(\"/\").filter(Boolean);\n\n // 从最长路径开始尝试匹配\n for (let i = pathSegments.length; i > 0; i--) {\n const testPath = \"/\" + pathSegments.slice(0, i).join(\"/\");\n const foundItem = findMenuItemByUrl(testPath, menus);\n if (foundItem) return foundItem;\n }\n\n return null;\n };\n\n /**\n * 获取从根到目标菜单项的完整 key 链\n * @param targetId 目标菜单项 id\n * @param menus 菜单数据\n * @param parentChain 递归传递的父级链\n */\n const getFullParentChain = (\n targetId: string,\n menus: any[],\n parentChain: string[] = []\n ): string[] | null => {\n for (const menu of menus) {\n // 找到目标项,返回完整链(包含自身 key)\n if (menu.id === targetId) {\n return [...parentChain, menu.key];\n }\n\n // 递归查找子菜单\n if (menu.children?.length) {\n const result = getFullParentChain(\n targetId,\n menu.children,\n [...parentChain, menu.key] // 传递当前层级的 key\n );\n if (result) return result;\n }\n }\n return null;\n };\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n const rs = findMatchedMenuById(key, list.value);\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === rs.matchItem.url && item.components);\n\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + rs.matchItem.url, \"_blank\");\n } else {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [rs.matchItem?.key];\n if (rs.matchItem?.url !== route.path) {\n // 判断目标路由和当前路由是否相等;\n // 不相等的时候再跳转\n router.push(rs.matchItem?.url).then((r) => {\n if (r) {\n console.warn(r);\n }\n });\n }\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.key}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","useMenu","watch","fullPath","path","flag","value","some","item","menuItem","findClosestParentMenu","rs","getFullParentChain","id","key","val","parentItem","matchItem","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","targetId","parentChain","menu","children","result","onClick","keyPath","findRoute","getRoutes","find","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ditari/bsui",
3
- "version": "1.1.59",
3
+ "version": "1.1.61",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "",