aldehyde 0.2.420 → 0.2.422

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 (216) hide show
  1. package/lib/controls/date-picker/index.d.ts.map +1 -1
  2. package/lib/controls/date-picker/index.js +8 -15
  3. package/lib/controls/date-picker/index.js.map +1 -1
  4. package/lib/controls/file-view/index.d.ts.map +1 -1
  5. package/lib/controls/file-view/index.js +5 -3
  6. package/lib/controls/file-view/index.js.map +1 -1
  7. package/lib/detail/button/view-button.d.ts +1 -0
  8. package/lib/detail/button/view-button.d.ts.map +1 -1
  9. package/lib/detail/button/view-button.js +3 -3
  10. package/lib/detail/button/view-button.js.map +1 -1
  11. package/lib/hooks/use-tabs/index.d.ts.map +1 -1
  12. package/lib/hooks/use-tabs/index.js +3 -0
  13. package/lib/hooks/use-tabs/index.js.map +1 -1
  14. package/lib/layout2/components/search-menu.js +1 -1
  15. package/lib/layout2/components/search-menu.js.map +1 -1
  16. package/lib/layout2/components/user-button.d.ts +3 -0
  17. package/lib/layout2/components/user-button.d.ts.map +1 -1
  18. package/lib/layout2/components/user-button.js +27 -7
  19. package/lib/layout2/components/user-button.js.map +1 -1
  20. package/lib/layout2/header.d.ts +2 -0
  21. package/lib/layout2/header.d.ts.map +1 -1
  22. package/lib/layout2/header.js +3 -3
  23. package/lib/layout2/header.js.map +1 -1
  24. package/lib/layout2/page.d.ts.map +1 -1
  25. package/lib/layout2/page.js +7 -5
  26. package/lib/layout2/page.js.map +1 -1
  27. package/lib/layout2/sider.d.ts +2 -0
  28. package/lib/layout2/sider.d.ts.map +1 -1
  29. package/lib/layout2/sider.js +2 -2
  30. package/lib/layout2/sider.js.map +1 -1
  31. package/lib/layout3/header.d.ts +2 -0
  32. package/lib/layout3/header.d.ts.map +1 -1
  33. package/lib/layout3/header.js +4 -4
  34. package/lib/layout3/header.js.map +1 -1
  35. package/lib/layout3/page.d.ts.map +1 -1
  36. package/lib/layout3/page.js +6 -4
  37. package/lib/layout3/page.js.map +1 -1
  38. package/lib/layout3/sider.d.ts +2 -0
  39. package/lib/layout3/sider.d.ts.map +1 -1
  40. package/lib/layout3/sider.js +2 -2
  41. package/lib/layout3/sider.js.map +1 -1
  42. package/lib/layout4/header.d.ts +2 -0
  43. package/lib/layout4/header.d.ts.map +1 -1
  44. package/lib/layout4/header.js +4 -4
  45. package/lib/layout4/header.js.map +1 -1
  46. package/lib/layout4/page.d.ts.map +1 -1
  47. package/lib/layout4/page.js +7 -5
  48. package/lib/layout4/page.js.map +1 -1
  49. package/lib/layout4/sider.d.ts +2 -0
  50. package/lib/layout4/sider.d.ts.map +1 -1
  51. package/lib/layout4/sider.js +2 -2
  52. package/lib/layout4/sider.js.map +1 -1
  53. package/lib/layout5/header.d.ts +2 -0
  54. package/lib/layout5/header.d.ts.map +1 -1
  55. package/lib/layout5/header.js +2 -2
  56. package/lib/layout5/header.js.map +1 -1
  57. package/lib/layout5/page.d.ts.map +1 -1
  58. package/lib/layout5/page.js +7 -5
  59. package/lib/layout5/page.js.map +1 -1
  60. package/lib/layout5/sider.d.ts +2 -0
  61. package/lib/layout5/sider.d.ts.map +1 -1
  62. package/lib/layout5/sider.js +2 -2
  63. package/lib/layout5/sider.js.map +1 -1
  64. package/lib/list/card-list/card-list-item.js +1 -1
  65. package/lib/list/card-list/card-list-item.js.map +1 -1
  66. package/lib/lowcode-components/bar-chart/index.d.ts.map +1 -1
  67. package/lib/lowcode-components/bar-chart/index.js +9 -1
  68. package/lib/lowcode-components/bar-chart/index.js.map +1 -1
  69. package/lib/lowcode-components/base-map/index.d.ts.map +1 -1
  70. package/lib/lowcode-components/base-map/index.js +9 -1
  71. package/lib/lowcode-components/base-map/index.js.map +1 -1
  72. package/lib/lowcode-components/capsule-bar-chart/index.d.ts.map +1 -1
  73. package/lib/lowcode-components/capsule-bar-chart/index.js +9 -1
  74. package/lib/lowcode-components/capsule-bar-chart/index.js.map +1 -1
  75. package/lib/lowcode-components/circular-progress-chart/index.d.ts.map +1 -1
  76. package/lib/lowcode-components/circular-progress-chart/index.js +9 -1
  77. package/lib/lowcode-components/circular-progress-chart/index.js.map +1 -1
  78. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  79. package/lib/lowcode-components/column-3d-chart/index.js +9 -1
  80. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  81. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  82. package/lib/lowcode-components/column-chart/index.js +9 -1
  83. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  84. package/lib/lowcode-components/effectScatter-map/index.d.ts.map +1 -1
  85. package/lib/lowcode-components/effectScatter-map/index.js +9 -1
  86. package/lib/lowcode-components/effectScatter-map/index.js.map +1 -1
  87. package/lib/lowcode-components/effectScatter-map-3d/index.d.ts.map +1 -1
  88. package/lib/lowcode-components/effectScatter-map-3d/index.js +9 -1
  89. package/lib/lowcode-components/effectScatter-map-3d/index.js.map +1 -1
  90. package/lib/lowcode-components/gauge-chart/index.d.ts.map +1 -1
  91. package/lib/lowcode-components/gauge-chart/index.js +9 -1
  92. package/lib/lowcode-components/gauge-chart/index.js.map +1 -1
  93. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  94. package/lib/lowcode-components/line-bar-chart/index.js +9 -1
  95. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  96. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  97. package/lib/lowcode-components/line-chart/index.js +9 -1
  98. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  99. package/lib/lowcode-components/liquid-chart/index.d.ts.map +1 -1
  100. package/lib/lowcode-components/liquid-chart/index.js +9 -1
  101. package/lib/lowcode-components/liquid-chart/index.js.map +1 -1
  102. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.d.ts.map +1 -1
  103. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js +2 -0
  104. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js.map +1 -1
  105. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
  106. package/lib/lowcode-components/lowcode-view/index.d.ts +2 -1
  107. package/lib/lowcode-components/lowcode-view/index.d.ts.map +1 -1
  108. package/lib/lowcode-components/lowcode-view/index.js +2 -2
  109. package/lib/lowcode-components/lowcode-view/index.js.map +1 -1
  110. package/lib/lowcode-components/lowcode-view/index.less +7 -0
  111. package/lib/lowcode-components/pie-chart/index.d.ts.map +1 -1
  112. package/lib/lowcode-components/pie-chart/index.js +9 -1
  113. package/lib/lowcode-components/pie-chart/index.js.map +1 -1
  114. package/lib/lowcode-components/progress-chart/index.d.ts.map +1 -1
  115. package/lib/lowcode-components/progress-chart/index.js +9 -1
  116. package/lib/lowcode-components/progress-chart/index.js.map +1 -1
  117. package/lib/routable/ltmpl-route.d.ts +2 -1
  118. package/lib/routable/ltmpl-route.d.ts.map +1 -1
  119. package/lib/routable/ltmpl-route.js +11 -5
  120. package/lib/routable/ltmpl-route.js.map +1 -1
  121. package/lib/routable/splitview-ltmpl-route.d.ts.map +1 -1
  122. package/lib/routable/splitview-ltmpl-route.js +11 -4
  123. package/lib/routable/splitview-ltmpl-route.js.map +1 -1
  124. package/lib/table/act-table.d.ts +4 -0
  125. package/lib/table/act-table.d.ts.map +1 -1
  126. package/lib/table/act-table.js +37 -12
  127. package/lib/table/act-table.js.map +1 -1
  128. package/lib/table/column/column-builder.d.ts.map +1 -1
  129. package/lib/table/column/column-builder.js +6 -8
  130. package/lib/table/column/column-builder.js.map +1 -1
  131. package/lib/table/index.css +29 -2
  132. package/lib/table/page-config-button.d.ts +15 -0
  133. package/lib/table/page-config-button.d.ts.map +1 -0
  134. package/lib/table/page-config-button.js +156 -0
  135. package/lib/table/page-config-button.js.map +1 -0
  136. package/lib/table/pagination.d.ts +1 -0
  137. package/lib/table/pagination.d.ts.map +1 -1
  138. package/lib/table/pagination.js +2 -2
  139. package/lib/table/pagination.js.map +1 -1
  140. package/lib/table/query-table.d.ts.map +1 -1
  141. package/lib/table/query-table.js +1 -1
  142. package/lib/table/query-table.js.map +1 -1
  143. package/lib/table/relation-table.d.ts +1 -0
  144. package/lib/table/relation-table.d.ts.map +1 -1
  145. package/lib/tmpl/hcservice-v3.d.ts +9 -0
  146. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  147. package/lib/tmpl/hcservice-v3.js +154 -0
  148. package/lib/tmpl/hcservice-v3.js.map +1 -1
  149. package/lib/tmpl/interface.d.ts +21 -0
  150. package/lib/tmpl/interface.d.ts.map +1 -1
  151. package/lib/tmpl/interface.js.map +1 -1
  152. package/lib/units/index.d.ts +9 -4
  153. package/lib/units/index.d.ts.map +1 -1
  154. package/lib/units/index.js +49 -13
  155. package/lib/units/index.js.map +1 -1
  156. package/lib/welcome/HCWelcome.js +10 -0
  157. package/lib/welcome/HCWelcome.js.map +1 -1
  158. package/lib/welcome/components/menu-card.less +1 -0
  159. package/lib/welcome/components/user-menus.d.ts +16 -0
  160. package/lib/welcome/components/user-menus.d.ts.map +1 -0
  161. package/lib/welcome/components/user-menus.js +210 -0
  162. package/lib/welcome/components/user-menus.js.map +1 -0
  163. package/lib/welcome/components/user-menus.less +193 -0
  164. package/package.json +1 -1
  165. package/src/aldehyde/controls/date-picker/index.tsx +12 -4
  166. package/src/aldehyde/controls/file-view/index.tsx +5 -1
  167. package/src/aldehyde/detail/button/view-button.tsx +7 -6
  168. package/src/aldehyde/hooks/use-tabs/index.tsx +3 -0
  169. package/src/aldehyde/layout2/components/search-menu.tsx +1 -1
  170. package/src/aldehyde/layout2/components/user-button.tsx +45 -8
  171. package/src/aldehyde/layout2/header.tsx +5 -3
  172. package/src/aldehyde/layout2/page.tsx +8 -7
  173. package/src/aldehyde/layout2/sider.tsx +4 -3
  174. package/src/aldehyde/layout3/header.tsx +6 -4
  175. package/src/aldehyde/layout3/page.tsx +7 -4
  176. package/src/aldehyde/layout3/sider.tsx +4 -3
  177. package/src/aldehyde/layout4/header.tsx +6 -4
  178. package/src/aldehyde/layout4/page.tsx +8 -5
  179. package/src/aldehyde/layout4/sider.tsx +4 -3
  180. package/src/aldehyde/layout5/header.tsx +4 -2
  181. package/src/aldehyde/layout5/page.tsx +8 -5
  182. package/src/aldehyde/layout5/sider.tsx +4 -3
  183. package/src/aldehyde/list/card-list/card-list-item.tsx +1 -1
  184. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +12 -2
  185. package/src/aldehyde/lowcode-components/base-map/index.tsx +12 -2
  186. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +12 -2
  187. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +12 -2
  188. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +12 -2
  189. package/src/aldehyde/lowcode-components/column-chart/index.tsx +12 -2
  190. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +12 -2
  191. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +12 -2
  192. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +12 -2
  193. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +12 -2
  194. package/src/aldehyde/lowcode-components/line-chart/index.tsx +12 -2
  195. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +12 -2
  196. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
  197. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +3 -1
  198. package/src/aldehyde/lowcode-components/lowcode-view/index.less +7 -0
  199. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +3 -1
  200. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +12 -2
  201. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +12 -2
  202. package/src/aldehyde/routable/ltmpl-route.tsx +13 -5
  203. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +12 -3
  204. package/src/aldehyde/table/act-table.tsx +44 -13
  205. package/src/aldehyde/table/column/column-builder.tsx +13 -20
  206. package/src/aldehyde/table/index.css +29 -2
  207. package/src/aldehyde/table/page-config-button.tsx +199 -0
  208. package/src/aldehyde/table/pagination.tsx +8 -7
  209. package/src/aldehyde/table/query-table.tsx +1 -0
  210. package/src/aldehyde/tmpl/hcservice-v3.tsx +136 -0
  211. package/src/aldehyde/tmpl/interface.tsx +22 -0
  212. package/src/aldehyde/units/index.tsx +34 -3
  213. package/src/aldehyde/welcome/HCWelcome.js +10 -0
  214. package/src/aldehyde/welcome/components/menu-card.less +1 -0
  215. package/src/aldehyde/welcome/components/user-menus.less +193 -0
  216. package/src/aldehyde/welcome/components/user-menus.tsx +275 -0
@@ -0,0 +1,193 @@
1
+ .user-menus {
2
+ position: relative;
3
+ overflow: hidden;
4
+ border-radius: 0.75rem;
5
+ padding: 1.25rem;
6
+ border: 1px solid;
7
+
8
+ .heard {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+
13
+ .title {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 0.5rem;
17
+
18
+ .line {
19
+ width: 0.25rem;
20
+ height: 1.25rem;
21
+ border-radius: 9999px;
22
+ }
23
+
24
+ .text {
25
+ font-weight: 600;
26
+ margin: 0;
27
+ }
28
+ }
29
+ }
30
+
31
+ .user-menu-item {
32
+ transition-property: all;
33
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
34
+ transition-duration: .15s;
35
+ padding: 12px;
36
+ border-radius: 8px;
37
+ overflow: hidden;
38
+ cursor: pointer;
39
+ display: flex;
40
+ justify-content: center;
41
+ align-content: space-between;
42
+ flex-wrap: wrap;
43
+ position: relative;
44
+
45
+ .menu-title {
46
+ width: 100%;
47
+ text-align: center;
48
+ color: var(--ant-color-text-secondary);
49
+ margin-top: 8px;
50
+ }
51
+
52
+
53
+ .icon-wrapper {
54
+ position: relative;
55
+ display: flex;
56
+ height: 3rem;
57
+ width: 3rem;
58
+ align-items: center;
59
+ justify-content: center;
60
+ transition-property: all;
61
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
62
+ transition-duration: 0.3s;
63
+ animation-duration: 0.3s;
64
+ border-radius: 0.75rem;
65
+ opacity: 1;
66
+ }
67
+
68
+ .icon-animated {
69
+ font-size: 24px;
70
+ transition-property: all;
71
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
72
+ transition-duration: 300ms;
73
+ }
74
+
75
+ .user-menu-item-bg {
76
+ position: absolute;
77
+ top: 0;
78
+ left: 0;
79
+ transition-property: opacity;
80
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
81
+ transition-duration: .3s;
82
+ opacity: 0;
83
+ width: 100%;
84
+ height: 100%;
85
+ }
86
+ }
87
+
88
+ .user-menu-item:hover {
89
+ transform: translateY(-1px);
90
+
91
+ .icon-animated {
92
+ transform: scale(1.1) rotate(6deg);
93
+ }
94
+
95
+ .user-menu-item-bg {
96
+ opacity: 1;
97
+ }
98
+
99
+ .menu-title {
100
+ font-weight: bolder;
101
+ color: var(--ant-color-text-base)
102
+ }
103
+ }
104
+
105
+ .user-menus-items-grid {
106
+ display: grid;
107
+ margin-top: 1rem;
108
+ grid-template-columns: repeat(3, minmax(0, 1fr));
109
+ gap: 0.5rem;
110
+
111
+ @media (min-width: 740px) {
112
+ grid-template-columns: repeat(4, minmax(0, 1fr));
113
+ }
114
+
115
+ @media (min-width: 840px) {
116
+ grid-template-columns: repeat(5, minmax(0, 1fr));
117
+ }
118
+
119
+ }
120
+
121
+ .user-page-config {
122
+ margin-top: 1rem;
123
+
124
+ .page-config-item-card {
125
+ position: relative;
126
+ overflow: hidden;
127
+ border-radius: 0.75rem;
128
+ padding: 1.25rem;
129
+ transition-property: transform, box-shadow;
130
+ display: flex;
131
+ align-items: flex-start;
132
+ justify-content: space-between;
133
+ border: 1px solid;
134
+ cursor: pointer;
135
+ height: 100%;
136
+
137
+ .ant-row {
138
+ width: 100%;
139
+ }
140
+
141
+ .icon-wrapper {
142
+ position: relative;
143
+ display: flex;
144
+ height: 3rem;
145
+ width: 3rem;
146
+ align-items: center;
147
+ justify-content: center;
148
+ transition-property: all;
149
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
150
+ transition-duration: 0.3s;
151
+ animation-duration: 0.3s;
152
+ border-radius: 0.75rem;
153
+ opacity: 1;
154
+ }
155
+
156
+ .item-title {
157
+ margin-bottom: 12px;
158
+ font-weight: 600;
159
+ font-size: 16px;
160
+ }
161
+
162
+ .tag {
163
+ padding: 4px 10px;
164
+ border-radius: 9999px;
165
+ font-size: 12px;
166
+ line-height: 16px;
167
+ }
168
+
169
+ }
170
+
171
+ .page-config-item-card:hover {
172
+ transform: translateY(-1px);
173
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
174
+
175
+ .icon-wrapper {
176
+ transform: scale(1.1);
177
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.04);
178
+ }
179
+
180
+ .item-title {
181
+ color: var(--ant-color-primary);
182
+ }
183
+ }
184
+
185
+ .icon-animated {
186
+ font-size: 24px;
187
+ transition-property: all;
188
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
189
+ transition-duration: 300ms;
190
+ }
191
+ }
192
+
193
+ }
@@ -0,0 +1,275 @@
1
+ import React, { useState, useEffect, useMemo, useContext } from "react";
2
+ import { Button, theme, Drawer, Tree, Empty, Space, Flex, Row, Col, Divider } from "antd";
3
+ import { RocketTwoTone, PlusOutlined } from "@ant-design/icons";
4
+ import { useNavigate } from "react-router-dom";
5
+ import "antd/dist/reset.css";
6
+ import HcserviceV3 from "../../tmpl/hcservice-v3";
7
+ import { Level2Menu, ThemeConfig } from "../../tmpl/interface";
8
+ import IconFont from "../../icon/aliIcon";
9
+ import { useLocale } from "../../locale/useLocale";
10
+ import Units from "../../units";
11
+ import { KeepAliveTabContext } from '../../layout2/tabs/tabs-context';
12
+ import "./user-menus.less";
13
+
14
+ const { useToken } = theme;
15
+
16
+ /**
17
+ * 我的
18
+ * 我的菜单、用户页面自定义配置
19
+ *
20
+ */
21
+
22
+ // 查询指定节点
23
+ const findNodeById = (tree, type, value) => {
24
+ for (const node of tree) {
25
+ if (node[type] === value) return node;
26
+ if (node.children?.length) {
27
+ const found = findNodeById(node.children, type, value);
28
+ if (found) return found;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+
34
+ interface MenuType extends Level2Menu {
35
+ url: string;
36
+ children?: MenuType[];
37
+ }
38
+
39
+ interface Props {
40
+ menus: MenuType[];
41
+ leafMenus: MenuType[];
42
+ themeConfig?: ThemeConfig;
43
+ }
44
+
45
+ interface DrawerProps {
46
+ open: boolean;
47
+ onClose: () => void;
48
+ menus: MenuType[];
49
+ selectMenus: string[];
50
+ onOk: (val: string[]) => void;
51
+ btnLoading: boolean;
52
+ }
53
+
54
+ interface PageConfig extends Level2Menu {
55
+ url?: string;
56
+ children?: { name: string, content: string, menuCode: string; recordCode: string }[];
57
+ }
58
+
59
+ const RenderDrawer = (props: DrawerProps) => {
60
+ const { open, onClose, menus, selectMenus, onOk, btnLoading } = props;
61
+ const [checkMenus, setCheckMenus] = useState<string[]>([]);
62
+ const { translate } = useLocale();
63
+
64
+ useEffect(() => {
65
+ setCheckMenus(selectMenus);
66
+ }, [selectMenus]);
67
+
68
+ const handleTreeData = (arr: MenuType[]) => {
69
+ return arr.map(item => {
70
+ const newItem = { ...item, key: item.id };
71
+ if (newItem.children && Array.isArray(newItem.children)) {
72
+ newItem.children = handleTreeData(newItem.children);
73
+ }
74
+ return newItem;
75
+ });
76
+ }
77
+
78
+ const treeData = useMemo(() => {
79
+ if (!menus?.length) {
80
+ return [];
81
+ }
82
+ const temMenus = handleTreeData(menus);
83
+ return temMenus;
84
+ }, [menus]);
85
+
86
+ const defaultExpandedKeys = useMemo(() => menus.map(r => r.id), menus);
87
+
88
+ return <Drawer
89
+ title={translate("我的菜单")}
90
+ onClose={onClose}
91
+ open={open}
92
+ extra={
93
+ <Button loading={btnLoading} type="primary" disabled={!treeData?.length} onClick={() => onOk(checkMenus)}>{translate("${保存}")}</Button>
94
+ }
95
+ >
96
+ {treeData?.length ?
97
+ <Tree
98
+ checkStrictly
99
+ defaultExpandedKeys={defaultExpandedKeys}
100
+ checkable
101
+ multiple
102
+ checkedKeys={checkMenus}
103
+ selectedKeys={checkMenus}
104
+ onSelect={(val) => setCheckMenus(val as string[])}
105
+ onCheck={(val: any) => setCheckMenus(val.checked)}
106
+ treeData={treeData}
107
+ /> :
108
+ <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
109
+ </Drawer>;
110
+ }
111
+
112
+ const Index = (props: Props) => {
113
+ const { menus, leafMenus, themeConfig } = props;
114
+ const [quickMenu, setQuickMenu] = useState<MenuType[]>([]);
115
+ const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
116
+ const [pageConfigs, setPageConfigs] = useState<PageConfig[]>([]);
117
+ const [loading, setLoading] = useState<boolean>(false);
118
+ const navigate = useNavigate();
119
+ const { translate } = useLocale();
120
+ const { token } = useToken();
121
+ const { closeTab } = useContext(KeepAliveTabContext);
122
+
123
+ const getQuickMenu = async () => {
124
+ let temData = await HcserviceV3.getQuickMenu();
125
+ const temMenu = temData.map(item => {
126
+ const menuItem = findNodeById(menus, "id", item.menuCode);
127
+ return menuItem;
128
+ }).filter(Boolean);
129
+ setQuickMenu(temMenu);
130
+ };
131
+
132
+ const selectMenuIds = useMemo(() => quickMenu?.map(r => r.id), [quickMenu]);
133
+
134
+ const getPageConfigCommon = async () => {
135
+ const pageConfig = await HcserviceV3.getPageConfigCommon();
136
+ if (!pageConfig) {
137
+ return;
138
+ }
139
+ const config = pageConfig.reduce((total, item) => {
140
+ if (total[item.menuCode]) {
141
+ total[item.menuCode].children.push(item);
142
+ } else {
143
+ const menu = leafMenus.find(r => r.id === item.menuCode);
144
+ if (!menu) {
145
+ return total;
146
+ }
147
+ total[item.menuCode] = { ...menu, children: [item] };
148
+ }
149
+ return total;
150
+ }, {});
151
+ const arr: PageConfig[] = Object.values(config);
152
+ setPageConfigs(arr);
153
+ }
154
+
155
+ useEffect(() => {
156
+ if (menus?.length && themeConfig?.allowUsermenu) {
157
+ getQuickMenu();
158
+ }
159
+ }, [menus, themeConfig]);
160
+
161
+ useEffect(() => {
162
+ if (themeConfig?.allowUserConfig && leafMenus?.length) {
163
+ getPageConfigCommon();
164
+ }
165
+ }, [leafMenus, themeConfig])
166
+
167
+ // 更新我的菜单
168
+ const onChangeQuickMenu = async (codes: string[]) => {
169
+ setLoading(true);
170
+ const status = await HcserviceV3.postQuickMenu(codes);
171
+ setLoading(false);
172
+ if (!status) {
173
+ return;
174
+ }
175
+ setDrawerOpen(false);
176
+ getQuickMenu();
177
+ }
178
+
179
+ // 我的菜单项渲染
180
+ const renderItem = (item: MenuType, type?: string) => {
181
+ const renderIcon = item.icon ? <IconFont type={item.icon} /> : type === "add" ? <PlusOutlined /> : <RocketTwoTone />;
182
+ const iconColor = item.themeColor || token.colorPrimary;
183
+ return <div className="user-menu-item" onClick={() => type === "add" ? setDrawerOpen(true) : navigate(`/${item.url}`)}>
184
+ <div className="user-menu-item-bg" style={{ background: ` ${iconColor}1A` }} />
185
+ <div className={`icon-wrapper`} style={{ color: iconColor, background: ` ${iconColor}1A` }}>
186
+ <div className="icon-animated">{renderIcon}</div>
187
+ </div>
188
+ <span className="menu-title">{item.title}</span>
189
+ </div>;
190
+ };
191
+
192
+ // 自定义菜单跳转
193
+ const onClickPageConfig = (val: { menuCode: string, content: string, url: string }) => {
194
+ if (!val.url) {
195
+ return;
196
+ }
197
+ const { criteriaData, ...content } = val.content ? JSON.parse(val.content) : {};
198
+ Units.setUserPageConfig(val.menuCode, content);
199
+ let serial_number = new Date().getTime();
200
+ const temUrl = val.url.split("?")[0];
201
+ // 关闭指定页面,清除缓存
202
+ closeTab(`/${temUrl}`);
203
+ if (criteriaData) {
204
+ const newfliter = Units.transQueryParamsToStr({ ...criteriaData, serial_number });
205
+ navigate(`/${temUrl}?${newfliter}`);
206
+ } else {
207
+ navigate(`/${val.url}`);
208
+ }
209
+ }
210
+
211
+ // 自定义菜单项渲染
212
+ const renderPageConfigItem = (item: PageConfig) => {
213
+ const renderIcon = item.icon ? <IconFont type={item.icon} /> : <RocketTwoTone />;
214
+ const iconColor = item.themeColor || token.colorPrimary;
215
+ const children = item.children || [];
216
+ return <div className="page-config-item-card" style={{ borderColor: `${token.colorBorder}CC`, backgroundColor: token.colorBgContainer }} onClick={() => navigate(`/${item.url}`)}>
217
+ <Space size={16} align="start" >
218
+ <div className="icon-wrapper" style={{ color: iconColor, background: `${iconColor}1A` }}>
219
+ <div className="icon-animated">{renderIcon}</div>
220
+ </div>
221
+ <div>
222
+ <h3 className="item-title" onClick={() => navigate(`/${item.url}`)}>{item.title}</h3>
223
+ <Flex gap="small" align="center" wrap>
224
+ {children.map((cItem) => (
225
+ <span
226
+ onClick={(e) => {
227
+ e.stopPropagation();
228
+ onClickPageConfig({ ...cItem, url: item.url });
229
+ }}
230
+ key={cItem.recordCode} className="tag" style={{ color: iconColor, background: `${iconColor}1A` }}>
231
+ {cItem.name}
232
+ </span>
233
+ ))}
234
+ </Flex>
235
+ </div>
236
+ </Space>
237
+ </div>;
238
+ };
239
+
240
+ return <><div className="user-menus" style={{ borderColor: `${token.colorBorder}CC`, backgroundColor: token.colorBgContainer }}>
241
+ <div className="heard">
242
+ <div className="title">
243
+ <div className="line" style={{ background: token.colorPrimary }} />
244
+ <h3 className="text">{translate("${我的}")}</h3>
245
+ </div>
246
+ {themeConfig?.allowUsermenu ?
247
+ <div className="setting">
248
+ <Button type="link" icon={<IconFont type="icon-icon-test8" />} onClick={() => setDrawerOpen(true)}>{translate("${设置}")}</Button>
249
+ </div> : ""}
250
+ </div>
251
+ {themeConfig?.allowUsermenu ?
252
+ <div className="user-menus-items-grid">
253
+ {quickMenu.map((item) => renderItem(item))}
254
+ {renderItem({ title: translate("${添加}"), themeColor: token.colorPrimary } as MenuType, "add")}
255
+ </div> : ""}
256
+ {themeConfig?.allowUserConfig && themeConfig?.allowUsermenu && pageConfigs?.length ? <Divider /> : ""}
257
+ {themeConfig?.allowUserConfig && pageConfigs?.length ? <>
258
+ <div className="heard">
259
+ <div className="title">
260
+ <div className="line" style={{ background: token.colorPrimary }} />
261
+ <h3 className="text">{translate("${自定义菜单}")}</h3>
262
+ </div>
263
+ </div>
264
+ <div className="user-page-config">
265
+ <Row gutter={[16, 16]}>
266
+ {pageConfigs.map((item) => <Col span={8}>{renderPageConfigItem(item)}</Col>)}
267
+ </Row>
268
+ </div>
269
+ </> : ""}
270
+ </div>
271
+ {drawerOpen ? <RenderDrawer open={drawerOpen} onClose={() => setDrawerOpen(false)} onOk={onChangeQuickMenu} menus={menus} selectMenus={selectMenuIds} btnLoading={loading} /> : ""}
272
+ </>;
273
+ }
274
+
275
+ export default Index;