@ditari/bsui 5.1.0 → 5.1.2

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 (88) hide show
  1. package/dist/cjs/components/date/RangePicker.vue2.cjs +3 -2
  2. package/dist/cjs/components/date/RangePicker.vue2.cjs.map +1 -1
  3. package/dist/cjs/components/index.cjs +2 -0
  4. package/dist/cjs/components/index.cjs.map +1 -1
  5. package/dist/cjs/components/layout/AppContext.cjs.map +1 -1
  6. package/dist/cjs/components/layout/Layout.vue2.cjs +14 -4
  7. package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
  8. package/dist/cjs/components/layout/List.cjs +33 -28
  9. package/dist/cjs/components/layout/List.cjs.map +1 -1
  10. package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs +41 -11
  11. package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs.map +1 -1
  12. package/dist/cjs/components/layout/components/layout/RouterContentName.vue.cjs +10 -0
  13. package/dist/cjs/components/layout/components/layout/RouterContentName.vue.cjs.map +1 -0
  14. package/dist/cjs/components/layout/components/layout/RouterContentName.vue2.cjs +52 -0
  15. package/dist/cjs/components/layout/components/layout/RouterContentName.vue2.cjs.map +1 -0
  16. package/dist/cjs/components/layout/components/menu/Menu.cjs +3 -2
  17. package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
  18. package/dist/cjs/components/layout/index.cjs +2 -0
  19. package/dist/cjs/components/layout/index.cjs.map +1 -1
  20. package/dist/cjs/components/tab/Tab.vue2.cjs +137 -28
  21. package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
  22. package/dist/cjs/components/table-form/interface.cjs +1 -1
  23. package/dist/cjs/components/table-form/interface.cjs.map +1 -1
  24. package/dist/cjs/index.cjs +2 -0
  25. package/dist/cjs/index.cjs.map +1 -1
  26. package/dist/esm/components/date/RangePicker.vue2.mjs +4 -3
  27. package/dist/esm/components/date/RangePicker.vue2.mjs.map +1 -1
  28. package/dist/esm/components/index.mjs +1 -0
  29. package/dist/esm/components/index.mjs.map +1 -1
  30. package/dist/esm/components/layout/AppContext.mjs.map +1 -1
  31. package/dist/esm/components/layout/Layout.vue2.mjs +15 -5
  32. package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
  33. package/dist/esm/components/layout/List.mjs +34 -29
  34. package/dist/esm/components/layout/List.mjs.map +1 -1
  35. package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs +43 -13
  36. package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs.map +1 -1
  37. package/dist/esm/components/layout/components/layout/RouterContentName.vue.mjs +6 -0
  38. package/dist/esm/components/layout/components/layout/RouterContentName.vue.mjs.map +1 -0
  39. package/dist/esm/components/layout/components/layout/RouterContentName.vue2.mjs +48 -0
  40. package/dist/esm/components/layout/components/layout/RouterContentName.vue2.mjs.map +1 -0
  41. package/dist/esm/components/layout/components/menu/Menu.mjs +3 -2
  42. package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
  43. package/dist/esm/components/layout/index.mjs +1 -0
  44. package/dist/esm/components/layout/index.mjs.map +1 -1
  45. package/dist/esm/components/tab/Tab.vue2.mjs +139 -30
  46. package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
  47. package/dist/esm/components/table-form/interface.mjs +1 -1
  48. package/dist/esm/components/table-form/interface.mjs.map +1 -1
  49. package/dist/esm/index.mjs +1 -0
  50. package/dist/esm/index.mjs.map +1 -1
  51. package/dist/types/components/date/RangePicker.vue.d.ts +3 -0
  52. package/dist/types/components/date/RangePicker.vue.d.ts.map +1 -1
  53. package/dist/types/components/layout/AppContext.d.ts +3 -0
  54. package/dist/types/components/layout/AppContext.d.ts.map +1 -1
  55. package/dist/types/components/layout/Layout.vue.d.ts +51 -3
  56. package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
  57. package/dist/types/components/layout/List.d.ts.map +1 -1
  58. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +11 -0
  59. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -1
  60. package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts +4 -14
  61. package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts.map +1 -1
  62. package/dist/types/components/layout/components/layout/RouterContentName.vue.d.ts +19 -0
  63. package/dist/types/components/layout/components/layout/RouterContentName.vue.d.ts.map +1 -0
  64. package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
  65. package/dist/types/components/layout/index.d.ts +1 -0
  66. package/dist/types/components/layout/index.d.ts.map +1 -1
  67. package/dist/types/components/tab/Tab.vue.d.ts +11 -0
  68. package/dist/types/components/tab/Tab.vue.d.ts.map +1 -1
  69. package/dist/types/components/table-form/TableFormItem.d.ts +4 -4
  70. package/dist/types/components/table-form/interface.d.ts +2 -2
  71. package/dist/types/components/table-form/interface.d.ts.map +1 -1
  72. package/package.json +3 -3
  73. package/dist/cjs/_virtual/_commonjsHelpers.cjs +0 -47
  74. package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +0 -1
  75. package/dist/cjs/_virtual/dayjs.min.cjs +0 -12
  76. package/dist/cjs/_virtual/dayjs.min.cjs.map +0 -1
  77. package/dist/cjs/_virtual/dayjs.min2.cjs +0 -6
  78. package/dist/cjs/_virtual/dayjs.min2.cjs.map +0 -1
  79. package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs +0 -20
  80. package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs.map +0 -1
  81. package/dist/esm/_virtual/_commonjsHelpers.mjs +0 -41
  82. package/dist/esm/_virtual/_commonjsHelpers.mjs.map +0 -1
  83. package/dist/esm/_virtual/dayjs.min.mjs +0 -8
  84. package/dist/esm/_virtual/dayjs.min.mjs.map +0 -1
  85. package/dist/esm/_virtual/dayjs.min2.mjs +0 -4
  86. package/dist/esm/_virtual/dayjs.min2.mjs.map +0 -1
  87. package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs +0 -18
  88. package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.cjs","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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"}
1
+ {"version":3,"file":"Menu.cjs","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 ? [rs!.matchItem?.key]\r\n : [];\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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"}
@@ -3,6 +3,7 @@
3
3
  var List = require('./List.cjs');
4
4
  var Show = require('./Show.cjs');
5
5
  require('./Layout.vue.cjs');
6
+ var AppContext = require('./AppContext.cjs');
6
7
  require('./components/index.cjs');
7
8
  var Layout_vue_vue_type_script_setup_true_lang = require('./Layout.vue2.cjs');
8
9
  var ThemeApp_vue_vue_type_script_setup_true_lang = require('./components/layout/ThemeApp.vue2.cjs');
@@ -25,6 +26,7 @@ Layout_vue_vue_type_script_setup_true_lang.default.install = function(app) {
25
26
 
26
27
  exports.List = List.default;
27
28
  exports.Show = Show.default;
29
+ exports.AppContextKey = AppContext.AppContextKey;
28
30
  exports.Layout = Layout_vue_vue_type_script_setup_true_lang.default;
29
31
  exports.AppTheme = ThemeApp_vue_vue_type_script_setup_true_lang.default;
30
32
  exports.HeaderLayout = HeaderLayout_vue_vue_type_script_setup_true_lang.default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/layout/index.ts"],"sourcesContent":["import List from \"./List\";\r\nimport Show from \"./Show\";\r\nimport type { App } from \"vue\";\r\n\r\nimport Layout from \"./Layout.vue\";\r\n\r\nexport * from \"./components\";\r\n\r\nList.install = function (app: App) {\r\n app.component(List.name!, List);\r\n return app;\r\n};\r\n\r\nShow.install = function (app: App) {\r\n app.component(Show.name!, Show);\r\n return app;\r\n};\r\nLayout.install = function (app: App) {\r\n app.component(\"DLayout\", Layout);\r\n return app;\r\n};\r\n\r\nexport { Layout, List, Show };\r\n"],"names":["List","Show","Layout"],"mappings":";;;;;;;;;;;;AAQAA,YAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,YAAA,CAAK,IAAA,EAAOA,YAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AAEAC,YAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,YAAA,CAAK,IAAA,EAAOA,YAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AACAC,kDAAA,CAAO,OAAA,GAAU,SAAU,GAAA,EAAU;AACnC,EAAA,GAAA,CAAI,SAAA,CAAU,WAAWA,kDAAM,CAAA;AAC/B,EAAA,OAAO,GAAA;AACT,CAAA;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/layout/index.ts"],"sourcesContent":["import List from \"./List\";\r\nimport Show from \"./Show\";\r\nimport type { App } from \"vue\";\r\n\r\nimport Layout from \"./Layout.vue\";\r\n\r\nexport * from \"./AppContext\";\r\nexport * from \"./components\";\r\n\r\nList.install = function (app: App) {\r\n app.component(List.name!, List);\r\n return app;\r\n};\r\n\r\nShow.install = function (app: App) {\r\n app.component(Show.name!, Show);\r\n return app;\r\n};\r\nLayout.install = function (app: App) {\r\n app.component(\"DLayout\", Layout);\r\n return app;\r\n};\r\n\r\nexport { Layout, List, Show };\r\n"],"names":["List","Show","Layout"],"mappings":";;;;;;;;;;;;;AASAA,YAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,YAAA,CAAK,IAAA,EAAOA,YAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AAEAC,YAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,YAAA,CAAK,IAAA,EAAOA,YAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AACAC,kDAAA,CAAO,OAAA,GAAU,SAAU,GAAA,EAAU;AACnC,EAAA,GAAA,CAAI,SAAA,CAAU,WAAWA,kDAAM,CAAA;AAC/B,EAAA,OAAO,GAAA;AACT,CAAA;;;;;;;;;;"}
@@ -6,6 +6,7 @@ var vue = require('vue');
6
6
  var vueRouter = require('vue-router');
7
7
  var antDesignVue = require('ant-design-vue');
8
8
  var pinia = require('pinia');
9
+ var AppContext = require('../layout/AppContext.cjs');
9
10
  var Search = require('./Search.cjs');
10
11
  var iconsVue = require('@ant-design/icons-vue');
11
12
  var store = require('@ditari/store');
@@ -13,12 +14,16 @@ var css = require('@emotion/css');
13
14
 
14
15
  "use strict";
15
16
  const _hoisted_1 = { class: "d-tabs-nav" };
16
- const _hoisted_2 = { class: "tab-item" };
17
- const _hoisted_3 = {
17
+ const _hoisted_2 = {
18
18
  key: 0,
19
+ class: "tab-item"
20
+ };
21
+ const _hoisted_3 = { class: "tab-item" };
22
+ const _hoisted_4 = {
23
+ key: 2,
19
24
  class: "tab-close"
20
25
  };
21
- const _hoisted_4 = ["onClick"];
26
+ const _hoisted_5 = ["onClick"];
22
27
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
23
28
  __name: "Tab",
24
29
  setup(__props) {
@@ -30,6 +35,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
30
35
  onChange,
31
36
  onClose
32
37
  } = useTab();
38
+ const { enableTabContextMenu, onContextMenuClick } = useTabsContextMenu();
33
39
  function useStyle() {
34
40
  const { useToken } = antDesignVue.theme;
35
41
  const { token } = useToken();
@@ -117,7 +123,49 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
117
123
  onClose: onClose2
118
124
  };
119
125
  }
126
+ function useTabsContextMenu() {
127
+ const appContext = vue.inject(
128
+ AppContext.AppContextKey,
129
+ null
130
+ );
131
+ const store$1 = store.useNavTabStore();
132
+ const router = vueRouter.useRouter();
133
+ const onContextMenuClick2 = ({ key }, targetKey) => {
134
+ var _a, _b, _c, _d;
135
+ switch (key) {
136
+ case "reload":
137
+ if (targetKey !== activeKey.value) {
138
+ router.push(targetKey).then(() => {
139
+ var _a2;
140
+ return (_a2 = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a2.call(appContext);
141
+ });
142
+ } else {
143
+ (_a = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a.call(appContext);
144
+ }
145
+ break;
146
+ case "other":
147
+ (_b = store$1.closeOtherTabs) == null ? void 0 : _b.call(store$1, targetKey);
148
+ router.push(targetKey);
149
+ break;
150
+ case "left":
151
+ (_c = store$1.closeLeftTabs) == null ? void 0 : _c.call(store$1, targetKey);
152
+ router.push(targetKey);
153
+ break;
154
+ case "right":
155
+ (_d = store$1.closeRightTabs) == null ? void 0 : _d.call(store$1, targetKey);
156
+ router.push(targetKey);
157
+ break;
158
+ }
159
+ };
160
+ return {
161
+ enableTabContextMenu: (appContext == null ? void 0 : appContext.enableTabContextMenu) || false,
162
+ onContextMenuClick: onContextMenuClick2
163
+ };
164
+ }
120
165
  return (_ctx, _cache) => {
166
+ const _component_a_menu_item = vue.resolveComponent("a-menu-item");
167
+ const _component_a_menu = vue.resolveComponent("a-menu");
168
+ const _component_a_dropdown = vue.resolveComponent("a-dropdown");
121
169
  const _component_a_tab_pane = vue.resolveComponent("a-tab-pane");
122
170
  const _component_a_tabs = vue.resolveComponent("a-tabs");
123
171
  return vue.openBlock(), vue.createElementBlock(
@@ -158,47 +206,108 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
158
206
  2
159
207
  /* CLASS */
160
208
  ),
161
- _cache[1] || (_cache[1] = vue.createElementVNode(
209
+ _cache[5] || (_cache[5] = vue.createElementVNode(
162
210
  "div",
163
211
  { class: "tab-dividers" },
164
212
  null,
165
213
  -1
166
214
  /* CACHED */
167
215
  )),
168
- vue.createCommentVNode(` <a-dropdown :trigger="['contextmenu']">`),
169
- vue.createElementVNode(
216
+ !vue.unref(enableTabContextMenu) ? (vue.openBlock(), vue.createElementBlock(
170
217
  "div",
171
218
  _hoisted_2,
172
219
  vue.toDisplayString(((_a = item.meta) == null ? void 0 : _a.title) || "\u65E0\u6807\u9898"),
173
220
  1
174
221
  /* TEXT */
175
- ),
176
- vue.createCommentVNode(" <template #overlay>"),
177
- vue.createCommentVNode(" <a-menu>"),
178
- vue.createCommentVNode(' <a-menu-item key="1">'),
179
- vue.createCommentVNode(" <ReloadOutlined />"),
180
- vue.createCommentVNode(" \u91CD\u65B0\u52A0\u8F7D"),
181
- vue.createCommentVNode(" </a-menu-item>"),
182
- vue.createCommentVNode(' <a-menu-item key="2">'),
183
- vue.createCommentVNode(" <CloseOutlined />"),
184
- vue.createCommentVNode(" \u5173\u95ED\u5176\u4ED6"),
185
- vue.createCommentVNode(" </a-menu-item>"),
186
- vue.createCommentVNode(' <a-menu-item key="3"'),
187
- vue.createCommentVNode(" >\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E"),
188
- vue.createCommentVNode(" </a-menu-item>"),
189
- vue.createCommentVNode(' <a-menu-item key="3"'),
190
- vue.createCommentVNode(" >\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E"),
191
- vue.createCommentVNode(" </a-menu-item>"),
192
- vue.createCommentVNode(" </a-menu>"),
193
- vue.createCommentVNode(" </template>"),
194
- vue.createCommentVNode(" </a-dropdown>"),
195
- vue.unref(closeBtnStatus)(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
222
+ )) : vue.createCommentVNode("v-if", true),
223
+ vue.unref(enableTabContextMenu) ? (vue.openBlock(), vue.createBlock(
224
+ _component_a_dropdown,
225
+ {
226
+ key: 1,
227
+ trigger: ["contextmenu"]
228
+ },
229
+ {
230
+ overlay: vue.withCtx(() => [
231
+ vue.createVNode(_component_a_menu, {
232
+ onClick: (e) => vue.unref(onContextMenuClick)(e, item.fullPath)
233
+ }, {
234
+ default: vue.withCtx(() => [
235
+ vue.createVNode(_component_a_menu_item, { key: "reload" }, {
236
+ default: vue.withCtx(() => [
237
+ vue.createVNode(vue.unref(iconsVue.ReloadOutlined)),
238
+ _cache[1] || (_cache[1] = vue.createTextVNode(
239
+ " \u91CD\u65B0\u52A0\u8F7D ",
240
+ -1
241
+ /* CACHED */
242
+ ))
243
+ ]),
244
+ _: 1
245
+ /* STABLE */
246
+ }),
247
+ vue.createVNode(_component_a_menu_item, { key: "other" }, {
248
+ default: vue.withCtx(() => [
249
+ vue.createVNode(vue.unref(iconsVue.CloseOutlined)),
250
+ _cache[2] || (_cache[2] = vue.createTextVNode(
251
+ " \u5173\u95ED\u5176\u4ED6 ",
252
+ -1
253
+ /* CACHED */
254
+ ))
255
+ ]),
256
+ _: 1
257
+ /* STABLE */
258
+ }),
259
+ vue.createVNode(_component_a_menu_item, { key: "right" }, {
260
+ default: vue.withCtx(() => [..._cache[3] || (_cache[3] = [
261
+ vue.createTextVNode(
262
+ "\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E ",
263
+ -1
264
+ /* CACHED */
265
+ )
266
+ ])]),
267
+ _: 1
268
+ /* STABLE */
269
+ }),
270
+ vue.createVNode(_component_a_menu_item, { key: "left" }, {
271
+ default: vue.withCtx(() => [..._cache[4] || (_cache[4] = [
272
+ vue.createTextVNode(
273
+ "\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E ",
274
+ -1
275
+ /* CACHED */
276
+ )
277
+ ])]),
278
+ _: 1
279
+ /* STABLE */
280
+ })
281
+ ]),
282
+ _: 1
283
+ /* STABLE */
284
+ }, 8, ["onClick"])
285
+ ]),
286
+ default: vue.withCtx(() => {
287
+ var _a2;
288
+ return [
289
+ vue.createElementVNode(
290
+ "div",
291
+ _hoisted_3,
292
+ vue.toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
293
+ 1
294
+ /* TEXT */
295
+ )
296
+ ];
297
+ }),
298
+ _: 2
299
+ /* DYNAMIC */
300
+ },
301
+ 1024
302
+ /* DYNAMIC_SLOTS */
303
+ )) : vue.createCommentVNode("v-if", true),
304
+ vue.unref(closeBtnStatus)(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
196
305
  vue.createElementVNode("div", {
197
306
  class: vue.normalizeClass(["close-btn", vue.unref(closeBtnStyle)]),
198
307
  onClick: ($event) => vue.unref(onClose)($event, item.fullPath)
199
308
  }, [
200
309
  vue.createVNode(vue.unref(iconsVue.CloseOutlined))
201
- ], 10, _hoisted_4)
310
+ ], 10, _hoisted_5)
202
311
  ])) : vue.createCommentVNode("v-if", true)
203
312
  ];
204
313
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue2.cjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["theme","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","list","activeKey","storeToRefs","watch","onChange","onClose","closeBtnStatus","_createElementBlock","_normalizeClass","_unref","_createVNode","Search","_createElementVNode","_Fragment","_renderList","_createBlock","_createCommentVNode","_toDisplayString","_openBlock","CloseOutlined"],"mappings":"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"}
1
+ {"version":3,"file":"Tab.vue2.cjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n type ComputedRef,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../layout/AppContext\";\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nconst { enableTabContextMenu, onContextMenuClick } =\r\n useTabsContextMenu();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n\r\nfunction useTabsContextMenu() {\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n const store = useNavTabStore();\r\n const router = useRouter();\r\n\r\n const onContextMenuClick = (\r\n { key }: { key: string },\r\n targetKey: string\r\n ) => {\r\n switch (key) {\r\n case \"reload\":\r\n // 如果点击的不是当前激活页,先跳转再刷新\r\n if (targetKey !== activeKey.value) {\r\n router\r\n .push(targetKey)\r\n .then(() => appContext?.onReloadPage?.());\r\n } else {\r\n appContext?.onReloadPage?.();\r\n }\r\n break;\r\n case \"other\":\r\n store.closeOtherTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"left\":\r\n store.closeLeftTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"right\":\r\n store.closeRightTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n }\r\n };\r\n\r\n return {\r\n enableTabContextMenu:\r\n appContext?.enableTabContextMenu || false,\r\n onContextMenuClick\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <div\r\n class=\"tab-item\"\r\n v-if=\"!enableTabContextMenu\"\r\n >\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <a-dropdown\r\n :trigger=\"['contextmenu']\"\r\n v-if=\"enableTabContextMenu\"\r\n >\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <template #overlay>\r\n <a-menu\r\n @click=\"\r\n e =>\r\n onContextMenuClick(e, item.fullPath)\r\n \"\r\n >\r\n <a-menu-item key=\"reload\">\r\n <ReloadOutlined />\r\n 重新加载\r\n </a-menu-item>\r\n <a-menu-item key=\"other\">\r\n <CloseOutlined />\r\n 关闭其他\r\n </a-menu-item>\r\n <a-menu-item key=\"right\"\r\n >关闭右侧标签\r\n </a-menu-item>\r\n <a-menu-item key=\"left\"\r\n >关闭左侧标签\r\n </a-menu-item>\r\n </a-menu>\r\n </template>\r\n </a-dropdown>\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["theme","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","list","activeKey","storeToRefs","watch","onChange","onClose","closeBtnStatus","inject","AppContextKey","onContextMenuClick","_a","_createElementBlock","_normalizeClass","_unref","_createVNode","Search","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString","ReloadOutlined","CloseOutlined"],"mappings":"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"}
@@ -26,7 +26,7 @@ const tableFormItemProps = {
26
26
  format: {
27
27
  type: Function,
28
28
  // 默认值
29
- default: (value, _name) => value
29
+ default: void 0
30
30
  }
31
31
  };
32
32
  const DEFAULT_STYLES_CONFIG = {
@@ -1 +1 @@
1
- {"version":3,"file":"interface.cjs","sources":["../../../../src/components/table-form/interface.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from \"vue\";\r\n\r\n// 接口:定义你的 Props 应该有哪些属性和类型\r\nexport interface DTableFormItemProps {\r\n name: string;\r\n label?: string;\r\n required?: boolean;\r\n rules?: unknown[]; // 简化,实际应定义详细校验规则类型\r\n colon?: boolean;\r\n extra?: string;\r\n}\r\n\r\nexport type Formatter = (value: unknown, name: unknown) => unknown;\r\n\r\n// 运行时 Props 的定义 (常量)\r\nexport const tableFormItemProps = {\r\n // 字典名字\r\n dicName: {\r\n type: String,\r\n default: undefined\r\n },\r\n format: {\r\n type: Function as PropType<Formatter>,\r\n // 默认值\r\n default: (value: unknown, _name: unknown) => value\r\n }\r\n};\r\n\r\n// ⭐️ 导出默认值常量\r\nexport const DEFAULT_STYLES_CONFIG: StylesConfig = {\r\n rowHeight: 32,\r\n borderColor: \"#dfdfdf\",\r\n borderWidth: 1,\r\n labelBgColor: \"#EEEEEE\",\r\n focusBorderColor: \"#1677ff\"\r\n};\r\n\r\nexport interface StylesConfig {\r\n /**\r\n * 表格行高度\r\n */\r\n rowHeight?: number;\r\n // 边框颜色\r\n borderColor?: string;\r\n // 边框\r\n borderWidth?: number;\r\n // 标签颜色label\r\n labelBgColor?: string;\r\n //焦点边框颜色\r\n focusBorderColor?: string;\r\n}\r\n\r\nexport const tableFormProps = {\r\n colCount: {\r\n type: Number,\r\n default: 4,\r\n required: true as const\r\n },\r\n readonly: {\r\n type: Boolean,\r\n default: false\r\n },\r\n stylesConfig: {\r\n type: Object as PropType<StylesConfig>,\r\n default: () => ({ ...DEFAULT_STYLES_CONFIG })\r\n }\r\n};\r\n\r\n// 导出 Prop 类型,供外部使用 (例如,在 TSX 中使用)\r\nexport type TableFormItemProps = Partial<ExtractPropTypes<typeof tableFormItemProps>>;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAeO,MAAM,kBAAA,GAAqB;AAAA;AAAA,EAEhC,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA;AAAA,IAEN,OAAA,EAAS,CAAC,KAAA,EAAgB,KAAA,KAAmB;AAAA;AAEjD;AAGO,MAAM,qBAAA,GAAsC;AAAA,EACjD,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,CAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,gBAAA,EAAkB;AACpB;AAiBO,MAAM,cAAA,GAAiB;AAAA,EAC5B,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAO,cAAA,CAAA,EAAA,EAAK,qBAAA;AAAA;AAEzB;;;;;;"}
1
+ {"version":3,"file":"interface.cjs","sources":["../../../../src/components/table-form/interface.ts"],"sourcesContent":["import { isUndefined } from \"lodash\";\r\nimport type { ExtractPropTypes, PropType } from \"vue\";\r\n\r\n// 接口:定义你的 Props 应该有哪些属性和类型\r\nexport interface DTableFormItemProps {\r\n name: string;\r\n label?: string;\r\n required?: boolean;\r\n rules?: unknown[]; // 简化,实际应定义详细校验规则类型\r\n colon?: boolean;\r\n extra?: string;\r\n}\r\n\r\nexport type Formatter = (\r\n value: unknown,\r\n name: unknown\r\n) => unknown;\r\n\r\n// 运行时 Props 的定义 (常量)\r\nexport const tableFormItemProps = {\r\n // 字典名字\r\n dicName: {\r\n type: String,\r\n default: undefined\r\n },\r\n format: {\r\n type: Function as PropType<Formatter> | undefined,\r\n // 默认值\r\n default: undefined\r\n }\r\n};\r\n\r\n// ⭐️ 导出默认值常量\r\nexport const DEFAULT_STYLES_CONFIG: StylesConfig = {\r\n rowHeight: 32,\r\n borderColor: \"#dfdfdf\",\r\n borderWidth: 1,\r\n labelBgColor: \"#EEEEEE\",\r\n focusBorderColor: \"#1677ff\"\r\n};\r\n\r\nexport interface StylesConfig {\r\n /**\r\n * 表格行高度\r\n */\r\n rowHeight?: number;\r\n // 边框颜色\r\n borderColor?: string;\r\n // 边框\r\n borderWidth?: number;\r\n // 标签颜色label\r\n labelBgColor?: string;\r\n //焦点边框颜色\r\n focusBorderColor?: string;\r\n}\r\n\r\nexport const tableFormProps = {\r\n colCount: {\r\n type: Number,\r\n default: 4,\r\n required: true as const\r\n },\r\n readonly: {\r\n type: Boolean,\r\n default: false\r\n },\r\n stylesConfig: {\r\n type: Object as PropType<StylesConfig>,\r\n default: () => ({ ...DEFAULT_STYLES_CONFIG })\r\n }\r\n};\r\n\r\n// 导出 Prop 类型,供外部使用 (例如,在 TSX 中使用)\r\nexport type TableFormItemProps = Partial<\r\n ExtractPropTypes<typeof tableFormItemProps>\r\n>;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAmBO,MAAM,kBAAA,GAAqB;AAAA;AAAA,EAEhC,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA;AAAA,IAEN,OAAA,EAAS,KAAA;AAAA;AAEb;AAGO,MAAM,qBAAA,GAAsC;AAAA,EACjD,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,CAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,gBAAA,EAAkB;AACpB;AAiBO,MAAM,cAAA,GAAiB;AAAA,EAC5B,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAO,cAAA,CAAA,EAAA,EAAK,qBAAA;AAAA;AAEzB;;;;;;"}
@@ -12,6 +12,7 @@ var RangePicker_vue_vue_type_script_setup_true_lang = require('./components/date
12
12
  var FormLayout = require('./components/form/FormLayout.cjs');
13
13
  var Moon = require('./components/icon/Moon.vue.cjs');
14
14
  var Sun = require('./components/icon/Sun.vue.cjs');
15
+ var AppContext = require('./components/layout/AppContext.cjs');
15
16
  var ThemeApp_vue_vue_type_script_setup_true_lang = require('./components/layout/components/layout/ThemeApp.vue2.cjs');
16
17
  var HeaderLayout_vue_vue_type_script_setup_true_lang = require('./components/layout/components/layout/HeaderLayout.vue2.cjs');
17
18
  var Menu = require('./components/layout/components/menu/Menu.cjs');
@@ -46,6 +47,7 @@ exports.RangePicker = RangePicker_vue_vue_type_script_setup_true_lang.default;
46
47
  exports.FormLayout = FormLayout.default;
47
48
  exports.Moon = Moon.default;
48
49
  exports.Sun = Sun.default;
50
+ exports.AppContextKey = AppContext.AppContextKey;
49
51
  exports.AppTheme = ThemeApp_vue_vue_type_script_setup_true_lang.default;
50
52
  exports.HeaderLayout = HeaderLayout_vue_vue_type_script_setup_true_lang.default;
51
53
  exports.Menu = Menu.default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,OAAA,GAAU,CAAC,GAAA,KAAa;AACnC,EAAA,MAAA,CAAO,IAAA,CAAKA,OAAU,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AACrC,IAAA,MAAM,SAAA,GAAYA,QAChB,GACF,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA;AAEf,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACH;AAEA,YAAe;AAAA;AAAA,EAEb;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,OAAA,GAAU,CAAC,GAAA,KAAa;AACnC,EAAA,MAAA,CAAO,IAAA,CAAKA,OAAU,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AACrC,IAAA,MAAM,SAAA,GAAYA,QAChB,GACF,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA;AAEf,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACH;AAEA,YAAe;AAAA;AAAA,EAEb;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, watch, resolveComponent, createBlock, openBlock } from 'vue';
1
+ import { defineComponent, useAttrs, ref, watch, resolveComponent, createBlock, openBlock, mergeProps, unref } from 'vue';
2
2
 
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -60,6 +60,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
60
60
  };
61
61
  const props = __props;
62
62
  const emits = __emit;
63
+ const attrs = useAttrs();
63
64
  const innerValue = ref(null);
64
65
  watch(
65
66
  () => props.value,
@@ -107,14 +108,14 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
107
108
  };
108
109
  return (_ctx, _cache) => {
109
110
  const _component_a_range_picker = resolveComponent("a-range-picker");
110
- return openBlock(), createBlock(_component_a_range_picker, {
111
+ return openBlock(), createBlock(_component_a_range_picker, mergeProps(unref(attrs), {
111
112
  style: { "width": "100%" },
112
113
  value: innerValue.value,
113
114
  "onUpdate:value": _cache[0] || (_cache[0] = ($event) => innerValue.value = $event),
114
115
  placeholder: ["\u5F00\u59CB\u65F6\u95F4", "\u7ED3\u675F\u65F6\u95F4"],
115
116
  onChange: handleChange,
116
117
  valueFormat: __props.format
117
- }, null, 8, ["value", "valueFormat"]);
118
+ }), null, 16, ["value", "valueFormat"]);
118
119
  };
119
120
  }
120
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RangePicker.vue2.mjs","sources":["../../../../src/components/date/RangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { ref, watch } from \"vue\";\r\n\r\n// 工具函数:规范化路径\r\nconst normalizePath = (\r\n field: string | string[]\r\n): string[] => {\r\n return Array.isArray(field) ? field : [field];\r\n};\r\n\r\n// 工具函数:获取嵌套值\r\nconst getNestedValue = <T extends Record<string, unknown>>(\r\n obj: T,\r\n field: string | string[]\r\n): string | null | undefined => {\r\n const path = normalizePath(field);\r\n let current: unknown = obj;\r\n\r\n for (const key of path) {\r\n if (\r\n current &&\r\n typeof current === \"object\" &&\r\n key in current\r\n ) {\r\n current = (current as Record<string, unknown>)[key];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return current as string | null | undefined;\r\n};\r\n\r\n// 工具函数:设置嵌套值\r\nconst setNestedValue = <T extends Record<string, unknown>>(\r\n obj: T,\r\n field: string | string[],\r\n value: string | null\r\n): T => {\r\n const path = normalizePath(field);\r\n const newObj = { ...obj };\r\n let current: Record<string, unknown> = newObj;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n const key = path[i];\r\n if (\r\n !(key in current) ||\r\n typeof current[key] !== \"object\" ||\r\n current[key] === null\r\n ) {\r\n current[key] = {};\r\n } else {\r\n current[key] = { ...current[key] };\r\n }\r\n current = current[key] as Record<string, unknown>;\r\n }\r\n\r\n current[path[path.length - 1]] = value;\r\n return newObj as T;\r\n};\r\n\r\n// 定义 props 类型\r\ninterface Props {\r\n value: Record<string, unknown>;\r\n startField?: string | string[];\r\n endField?: string | string[];\r\n format?: string;\r\n}\r\n\r\nconst props = defineProps({\n value: { type: Object, required: true, default: () => ({}) },\n startField: { type: [String, Array], required: false, default: \"startTime\" },\n endField: { type: [String, Array], required: false, default: \"endTime\" },\n format: { type: String, required: false, default: \"YYYY-MM-DD\" }\n});\r\n\r\n// 定义 emits 类型\r\nconst emits = defineEmits([\"update:value\", \"change\"]);\r\n\r\n// 内部值,用于日期选择器\r\nconst innerValue = ref<any>(null); // 使用 any 代替 Dayjs\r\n\r\n// 监听外部 value 变化,同步内部值\r\nwatch(\r\n () => props.value,\r\n newVal => {\r\n const start = getNestedValue(newVal, props.startField);\r\n const end = getNestedValue(newVal, props.endField);\r\n\r\n if (start && end) {\r\n innerValue.value = [start, end];\r\n } else {\r\n innerValue.value = null;\r\n }\r\n },\r\n { immediate: true, deep: true }\r\n);\r\n\r\n// 处理日期变化\r\nconst handleChange = (dates: [any, any]) => {\r\n let updatedValue = { ...props.value };\r\n\r\n if (dates && dates.length === 2) {\r\n const [startTime, endTime] = dates;\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.startField,\r\n startTime ? startTime : null\r\n );\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.endField,\r\n endTime ? endTime : null\r\n );\r\n // 更新 innerValue 为当前选择的日期范围数组\r\n innerValue.value = dates;\r\n } else {\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.startField,\r\n null\r\n );\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.endField,\r\n null\r\n );\r\n // 清空 innerValue\r\n innerValue.value = null;\r\n }\r\n\r\n emits(\"update:value\", updatedValue);\r\n emits(\"change\", updatedValue);\r\n};\r\n</script>\r\n\r\n<template>\r\n <a-range-picker\r\n style=\"width: 100%\"\r\n v-model:value=\"innerValue\"\r\n :placeholder=\"['开始时间', '结束时间']\"\r\n @change=\"handleChange\"\r\n :valueFormat=\"format\"\r\n />\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"RangePicker.vue2.mjs","sources":["../../../../src/components/date/RangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { ref, useAttrs, watch } from \"vue\";\r\n\r\n// 工具函数:规范化路径\r\nconst normalizePath = (\r\n field: string | string[]\r\n): string[] => {\r\n return Array.isArray(field) ? field : [field];\r\n};\r\n\r\n// 工具函数:获取嵌套值\r\nconst getNestedValue = <T extends Record<string, unknown>>(\r\n obj: T,\r\n field: string | string[]\r\n): string | null | undefined => {\r\n const path = normalizePath(field);\r\n let current: unknown = obj;\r\n\r\n for (const key of path) {\r\n if (\r\n current &&\r\n typeof current === \"object\" &&\r\n key in current\r\n ) {\r\n current = (current as Record<string, unknown>)[key];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return current as string | null | undefined;\r\n};\r\n\r\n// 工具函数:设置嵌套值\r\nconst setNestedValue = <T extends Record<string, unknown>>(\r\n obj: T,\r\n field: string | string[],\r\n value: string | null\r\n): T => {\r\n const path = normalizePath(field);\r\n const newObj = { ...obj };\r\n let current: Record<string, unknown> = newObj;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n const key = path[i];\r\n if (\r\n !(key in current) ||\r\n typeof current[key] !== \"object\" ||\r\n current[key] === null\r\n ) {\r\n current[key] = {};\r\n } else {\r\n current[key] = { ...current[key] };\r\n }\r\n current = current[key] as Record<string, unknown>;\r\n }\r\n\r\n current[path[path.length - 1]] = value;\r\n return newObj as T;\r\n};\r\n\r\n// 定义 props 类型\r\ninterface Props {\r\n value: Record<string, unknown>;\r\n startField?: string | string[];\r\n endField?: string | string[];\r\n format?: string;\r\n}\r\n\r\nconst props = defineProps({\n value: { type: Object, required: true, default: () => ({}) },\n startField: { type: [String, Array], required: false, default: \"startTime\" },\n endField: { type: [String, Array], required: false, default: \"endTime\" },\n format: { type: String, required: false, default: \"YYYY-MM-DD\" }\n});\r\n\r\n// 定义 emits 类型\r\nconst emits = defineEmits([\"update:value\", \"change\"]);\r\n\r\nconst attrs = useAttrs();\r\n\r\n// 内部值,用于日期选择器\r\nconst innerValue = ref<any>(null); // 使用 any 代替 Dayjs\r\n\r\n// 监听外部 value 变化,同步内部值\r\nwatch(\r\n () => props.value,\r\n newVal => {\r\n const start = getNestedValue(newVal, props.startField);\r\n const end = getNestedValue(newVal, props.endField);\r\n\r\n if (start && end) {\r\n innerValue.value = [start, end];\r\n } else {\r\n innerValue.value = null;\r\n }\r\n },\r\n { immediate: true, deep: true }\r\n);\r\n\r\n// 处理日期变化\r\nconst handleChange = (dates: [any, any]) => {\r\n let updatedValue = { ...props.value };\r\n\r\n if (dates && dates.length === 2) {\r\n const [startTime, endTime] = dates;\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.startField,\r\n startTime ? startTime : null\r\n );\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.endField,\r\n endTime ? endTime : null\r\n );\r\n // 更新 innerValue 为当前选择的日期范围数组\r\n innerValue.value = dates;\r\n } else {\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.startField,\r\n null\r\n );\r\n updatedValue = setNestedValue(\r\n updatedValue,\r\n props.endField,\r\n null\r\n );\r\n // 清空 innerValue\r\n innerValue.value = null;\r\n }\r\n\r\n emits(\"update:value\", updatedValue);\r\n emits(\"change\", updatedValue);\r\n};\r\n</script>\r\n\r\n<template>\r\n <a-range-picker\r\n v-bind=\"attrs\"\r\n style=\"width: 100%\"\r\n v-model:value=\"innerValue\"\r\n :placeholder=\"['开始时间', '结束时间']\"\r\n @change=\"handleChange\"\r\n :valueFormat=\"format\"\r\n />\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["_createBlock","_mergeProps","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,KACa;AACb,MAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAAA,IAC9C,CAAA;AAGA,IAAA,MAAM,cAAA,GAAiB,CACrB,GAAA,EACA,KAAA,KAC8B;AAC9B,MAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,MAAA,IAAI,OAAA,GAAmB,GAAA;AAEvB,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,IACE,OAAA,IACA,OAAO,OAAA,KAAY,QAAA,IACnB,OAAO,OAAA,EACP;AACA,UAAA,OAAA,GAAW,QAAoC,GAAG,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,OAAO,KAAA,CAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAGA,IAAA,MAAM,cAAA,GAAiB,CACrB,GAAA,EACA,KAAA,EACA,KAAA,KACM;AACN,MAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,MAAA,MAAM,SAAS,cAAA,CAAA,EAAA,EAAK,GAAA,CAAA;AACpB,MAAA,IAAI,OAAA,GAAmC,MAAA;AAEvC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IACE,EAAE,GAAA,IAAO,OAAA,CAAA,IACT,OAAO,OAAA,CAAQ,GAAG,CAAA,KAAM,QAAA,IACxB,OAAA,CAAQ,GAAG,CAAA,KAAM,IAAA,EACjB;AACA,UAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAAA,QAClB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,cAAA,CAAA,EAAA,EAAK,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,QACjC;AACA,QAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,MACvB;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AACjC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAUA,IAAA,MAAM,KAAA,GAAQ,OAAA;AAQd,IAAA,MAAM,KAAA,GAAQ,MAAA;AAEd,IAAA,MAAM,QAAQ,QAAA,EAAS;AAGvB,IAAA,MAAM,UAAA,GAAa,IAAS,IAAI,CAAA;AAGhC,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,CAAA,MAAA,KAAU;AACR,QAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,MAAA,EAAQ,KAAA,CAAM,UAAU,CAAA;AACrD,QAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA;AAEjD,QAAA,IAAI,SAAS,GAAA,EAAK;AAChB,UAAA,UAAA,CAAW,KAAA,GAAQ,CAAC,KAAA,EAAO,GAAG,CAAA;AAAA,QAChC,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,IAAA;AAAK,KAChC;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAsB;AAC1C,MAAA,IAAI,YAAA,GAAe,mBAAK,KAAA,CAAM,KAAA,CAAA;AAE9B,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC/B,QAAA,MAAM,CAAC,SAAA,EAAW,OAAO,CAAA,GAAI,KAAA;AAC7B,QAAA,YAAA,GAAe,cAAA;AAAA,UACb,YAAA;AAAA,UACA,KAAA,CAAM,UAAA;AAAA,UACN,YAAY,SAAA,GAAY;AAAA,SAC1B;AACA,QAAA,YAAA,GAAe,cAAA;AAAA,UACb,YAAA;AAAA,UACA,KAAA,CAAM,QAAA;AAAA,UACN,UAAU,OAAA,GAAU;AAAA,SACtB;AAEA,QAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,YAAA,GAAe,cAAA;AAAA,UACb,YAAA;AAAA,UACA,KAAA,CAAM,UAAA;AAAA,UACN;AAAA,SACF;AACA,QAAA,YAAA,GAAe,cAAA;AAAA,UACb,YAAA;AAAA,UACA,KAAA,CAAM,QAAA;AAAA,UACN;AAAA,SACF;AAEA,QAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AAAA,MACrB;AAEA,MAAA,KAAA,CAAM,gBAAgB,YAAY,CAAA;AAClC,MAAA,KAAA,CAAM,UAAU,YAAY,CAAA;AAAA,IAC9B,CAAA;;;0BAIEA,WAAA,CAOE,2BAPFC,UAAA,CAOEC,KAAA,CAAA,KAAA,CAAA,EANa;AAAA,QACb,KAAA,EAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AAAA,QACQ,OAAO,UAAA,CAAA,KAAA;AAAA,gEAAA,UAAA,CAAU,KAAA,GAAA,MAAA,CAAA;AAAA,QACxB,WAAA,EAAa,CAAA,0BAAA,EAAA,0BAAA,CAAA;AAAA,QACb,QAAA,EAAQ,YAAA;AAAA,QACR,aAAa,OAAA,CAAA;AAAA;;;;;;;"}
@@ -17,6 +17,7 @@ export { default as RangePicker } from './date/RangePicker.vue2.mjs';
17
17
  export { default as FormLayout } from './form/FormLayout.mjs';
18
18
  export { default as Moon } from './icon/Moon.vue.mjs';
19
19
  export { default as Sun } from './icon/Sun.vue.mjs';
20
+ export { AppContextKey } from './layout/AppContext.mjs';
20
21
  export { default as AppTheme } from './layout/components/layout/ThemeApp.vue2.mjs';
21
22
  export { default as HeaderLayout } from './layout/components/layout/HeaderLayout.vue2.mjs';
22
23
  export { default as Menu } from './layout/components/menu/Menu.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +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
+ {"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 // 缓存方式 Name:组件名称 Path:路径缓\r\n keepAliveMode: \"Name\" | \"Path\";\r\n // 多标签重载\r\n onReloadPage?: () => void;\r\n // 多标签是否开启右键菜单\r\n enableTabContextMenu?: boolean;\r\n}\r\n"],"names":[],"mappings":";AAEO,MAAM,aAAA,GAAgB,OAAO,gBAAgB;;;;"}
@@ -8,8 +8,10 @@ import { useAppStore, useKeepAliveStore } from '@ditari/store';
8
8
  import { css } from '@emotion/css';
9
9
  import './components/layout/HeaderLayout.vue.mjs';
10
10
  import './components/layout/RouterContent.vue.mjs';
11
+ import './components/layout/RouterContentName.vue.mjs';
11
12
  import _sfc_main$1 from './components/layout/HeaderLayout.vue2.mjs';
12
- import _sfc_main$2 from './components/layout/RouterContent.vue2.mjs';
13
+ import _sfc_main$2 from './components/layout/RouterContentName.vue2.mjs';
14
+ import _sfc_main$3 from './components/layout/RouterContent.vue2.mjs';
13
15
 
14
16
  "use strict";
15
17
  const _hoisted_1 = { class: "app-side" };
@@ -20,7 +22,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
20
22
  content: ""
21
23
  }) },
22
24
  isSettings: { type: Boolean, required: false, default: false },
23
- renderMenuIcon: { type: Function, required: false, default: void 0 }
25
+ renderMenuIcon: { type: Function, required: false, default: void 0 },
26
+ keepAliveMode: { type: String, required: false, default: "Name" },
27
+ onReloadPage: { type: Function, required: false },
28
+ enableTabContextMenu: { type: Boolean, required: false, default: true }
24
29
  },
25
30
  emits: ["onMenuClick"],
26
31
  setup(__props, { emit: __emit }) {
@@ -30,7 +35,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
30
35
  const { onMenuClick } = useMenu();
31
36
  provide(AppContextKey, {
32
37
  watermarkContent: computed(() => props.watermark || ""),
33
- renderMenuIcon: props.renderMenuIcon
38
+ renderMenuIcon: props.renderMenuIcon,
39
+ keepAliveMode: props.keepAliveMode,
40
+ onReloadPage: props.onReloadPage,
41
+ enableTabContextMenu: props.enableTabContextMenu
34
42
  });
35
43
  const {
36
44
  layoutStyle,
@@ -45,7 +53,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
45
53
  watch(
46
54
  () => route.path,
47
55
  () => {
48
- save(route);
56
+ if (props.keepAliveMode === "Name") {
57
+ save(route);
58
+ }
49
59
  },
50
60
  {
51
61
  immediate: true
@@ -152,7 +162,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
152
162
  class: normalizeClass(unref(rightContentStyle))
153
163
  }, {
154
164
  default: withCtx(() => [
155
- createVNode(_sfc_main$2)
165
+ __props.keepAliveMode === "Name" ? (openBlock(), createBlock(_sfc_main$2, { key: 0 })) : (openBlock(), createBlock(_sfc_main$3, { key: 1 }))
156
166
  ]),
157
167
  _: 1
158
168
  /* STABLE */