useAside.hook.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { shallowReactive, ref } from 'vue'
  2. import { icon } from '@/plugins'
  3. import { renderLang, renderIcon } from '@/utils'
  4. import { themeColor, setItem, getCharts } from './useLayout.hook'
  5. import { PackagesCategoryEnum, PackagesCategoryName, PackagesType } from '@/packages/index.d'
  6. // 图表
  7. import { usePackagesStore } from '@/store/modules/packagesStore/packagesStore'
  8. import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
  9. // 图标
  10. const { BarChartIcon } = icon.ionicons5
  11. const {
  12. TableSplitIcon,
  13. RoadmapIcon,
  14. SpellCheckIcon,
  15. GraphicalDataFlowIcon,
  16. } = icon.carbon
  17. // 图表
  18. const { getPackagesList } = usePackagesStore()
  19. const menuOptions = shallowReactive<{
  20. key: string
  21. icon: ReturnType<typeof renderIcon>
  22. label: ReturnType<typeof renderLang>
  23. list: PackagesType
  24. }[]>([])
  25. const packagesListObj = {
  26. [PackagesCategoryEnum.CHARTS]: {
  27. icon: renderIcon(RoadmapIcon),
  28. label: renderLang(PackagesCategoryName.CHARTS),
  29. },
  30. [PackagesCategoryEnum.INFORMATION]: {
  31. icon: renderIcon(SpellCheckIcon),
  32. label: renderLang(PackagesCategoryName.INFORMATION),
  33. },
  34. [PackagesCategoryEnum.TABLES]: {
  35. icon: renderIcon(TableSplitIcon),
  36. label: renderLang(PackagesCategoryName.TABLES),
  37. },
  38. [PackagesCategoryEnum.DECORATES]: {
  39. icon: renderIcon(GraphicalDataFlowIcon),
  40. label: renderLang(PackagesCategoryName.DECORATES),
  41. },
  42. }
  43. // 处理列表
  44. const handlePackagesList = () => {
  45. for (const val in getPackagesList) {
  46. menuOptions.push({
  47. key: val,
  48. // @ts-ignore
  49. icon: packagesListObj[val].icon,
  50. // @ts-ignore
  51. label: packagesListObj[val].label,
  52. // @ts-ignore
  53. list: getPackagesList[val],
  54. })
  55. }
  56. }
  57. handlePackagesList()
  58. // 记录选中值
  59. let beforeSelect: string = menuOptions[0]['key']
  60. const selectValue = ref<string>(menuOptions[0]['key'])
  61. // 选中的对象值
  62. const selectOptions = ref(menuOptions[0])
  63. // 点击 item
  64. const clickItemHandle = (key: string, item: any) => {
  65. selectOptions.value = item
  66. // 处理折叠
  67. if (beforeSelect === key) {
  68. setItem(ChartLayoutStoreEnum.CHARTS, !getCharts.value)
  69. } else {
  70. setItem(ChartLayoutStoreEnum.CHARTS, true)
  71. }
  72. beforeSelect = key
  73. }
  74. export {
  75. getCharts,
  76. BarChartIcon,
  77. themeColor,
  78. selectOptions,
  79. selectValue,
  80. clickItemHandle,
  81. menuOptions,
  82. }