aldehyde 0.2.236 → 0.2.238

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 (262) hide show
  1. package/lib/controls/action/index.d.ts +2 -0
  2. package/lib/controls/action/index.d.ts.map +1 -1
  3. package/lib/controls/chemstruc/graph.d.ts +2 -0
  4. package/lib/controls/chemstruc/graph.d.ts.map +1 -1
  5. package/lib/controls/collapse-card/index.d.ts +2 -0
  6. package/lib/controls/collapse-card/index.d.ts.map +1 -1
  7. package/lib/controls/color-picker/index.d.ts +2 -0
  8. package/lib/controls/color-picker/index.d.ts.map +1 -1
  9. package/lib/controls/cquery/cquick-button.d.ts +2 -0
  10. package/lib/controls/cquery/cquick-button.d.ts.map +1 -1
  11. package/lib/controls/date-picker/index.d.ts.map +1 -1
  12. package/lib/controls/date-picker/index.js +9 -1
  13. package/lib/controls/date-picker/index.js.map +1 -1
  14. package/lib/controls/entity-select/entity-select.d.ts +2 -0
  15. package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
  16. package/lib/controls/entity-select/lab-tree-select.d.ts +2 -0
  17. package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
  18. package/lib/controls/entity-select/popover-entity-select.d.ts +2 -0
  19. package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
  20. package/lib/controls/password-setter/index.d.ts +2 -0
  21. package/lib/controls/password-setter/index.d.ts.map +1 -1
  22. package/lib/controls/relation-existion/index.d.ts +2 -0
  23. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  24. package/lib/controls/rfield/index.d.ts +2 -0
  25. package/lib/controls/rfield/index.d.ts.map +1 -1
  26. package/lib/controls/select/index.d.ts +2 -0
  27. package/lib/controls/select/index.d.ts.map +1 -1
  28. package/lib/controls/signature/index.d.ts +2 -0
  29. package/lib/controls/signature/index.d.ts.map +1 -1
  30. package/lib/controls/text/ellipsis-text.d.ts +2 -0
  31. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  32. package/lib/controls/upload/index.d.ts +2 -0
  33. package/lib/controls/upload/index.d.ts.map +1 -1
  34. package/lib/controls/upload/mult-file-upload.d.ts +2 -0
  35. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  36. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts +2 -0
  37. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  38. package/lib/detail/button/bottom-submit-button-bar.d.ts +2 -0
  39. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  40. package/lib/detail/button/cquery-button-bar.d.ts +2 -0
  41. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  42. package/lib/detail/button/fix-right-submit-button-bar.d.ts +2 -0
  43. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  44. package/lib/detail/edit/fields-edit-card.d.ts +2 -0
  45. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  46. package/lib/detail/edit/modal-row-edit.d.ts +2 -0
  47. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  48. package/lib/detail/edit/row-edit-card.d.ts +2 -0
  49. package/lib/detail/edit/row-edit-card.d.ts.map +1 -1
  50. package/lib/detail/rightbar/index.d.ts +2 -0
  51. package/lib/detail/rightbar/index.d.ts.map +1 -1
  52. package/lib/detail/view/act-dtmpl-view.d.ts +2 -0
  53. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  54. package/lib/detail/view/act-dtmpl-view.js +1 -1
  55. package/lib/detail/view/act-dtmpl-view.js.map +1 -1
  56. package/lib/detail/view/field-view-group.d.ts +2 -0
  57. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  58. package/lib/detail/view/modal-dtmpl-view.d.ts +2 -0
  59. package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
  60. package/lib/detail/view/snapshot-timeline.d.ts +2 -0
  61. package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
  62. package/lib/detail/view/tab-act-dtmpl-view.d.ts +2 -0
  63. package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
  64. package/lib/detail/view/tab-act-dtmpl-view.js +3 -3
  65. package/lib/detail/view/tab-act-dtmpl-view.js.map +1 -1
  66. package/lib/export/export-frame.d.ts +2 -0
  67. package/lib/export/export-frame.d.ts.map +1 -1
  68. package/lib/export/select-code-export-frame.d.ts +2 -0
  69. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  70. package/lib/form/dtmpl-form.d.ts +2 -0
  71. package/lib/form/dtmpl-form.d.ts.map +1 -1
  72. package/lib/form/field-group-form.d.ts +2 -0
  73. package/lib/form/field-group-form.d.ts.map +1 -1
  74. package/lib/form/form-Item-group.d.ts +2 -0
  75. package/lib/form/form-Item-group.d.ts.map +1 -1
  76. package/lib/form/form-Item-group.js +3 -2
  77. package/lib/form/form-Item-group.js.map +1 -1
  78. package/lib/hooks/use-match-route/index.d.ts +10 -0
  79. package/lib/hooks/use-match-route/index.d.ts.map +1 -0
  80. package/lib/hooks/use-match-route/index.js +41 -0
  81. package/lib/hooks/use-match-route/index.js.map +1 -0
  82. package/lib/hooks/use-tabs/index.d.ts +18 -0
  83. package/lib/hooks/use-tabs/index.d.ts.map +1 -0
  84. package/lib/hooks/use-tabs/index.js +112 -0
  85. package/lib/hooks/use-tabs/index.js.map +1 -0
  86. package/lib/import/excel-import.d.ts +2 -0
  87. package/lib/import/excel-import.d.ts.map +1 -1
  88. package/lib/layout/MainPage.js +1 -1
  89. package/lib/layout/MainPage.js.map +1 -1
  90. package/lib/layout/coverstyle.css +1 -1
  91. package/lib/layout/menu/block.d.ts +2 -0
  92. package/lib/layout/menu/block.d.ts.map +1 -1
  93. package/lib/layout/menu/l2menu-quick-bar.d.ts +2 -0
  94. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  95. package/lib/layout/menu/menu-2layers.d.ts +2 -0
  96. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  97. package/lib/layout/menu/reset-password.d.ts +2 -0
  98. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  99. package/lib/layout/menu/user-bar.d.ts +2 -0
  100. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  101. package/lib/layout/menu/userinfo-bar.d.ts +2 -0
  102. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  103. package/lib/layout/sidebar/index.js +4 -2
  104. package/lib/layout/sidebar/index.js.map +1 -1
  105. package/lib/layout2/components/userButton.d.ts.map +1 -1
  106. package/lib/layout2/components/userButton.js +14 -2
  107. package/lib/layout2/components/userButton.js.map +1 -1
  108. package/lib/layout2/header.d.ts.map +1 -1
  109. package/lib/layout2/header.js +4 -66
  110. package/lib/layout2/header.js.map +1 -1
  111. package/lib/layout2/main.d.ts +1 -1
  112. package/lib/layout2/main.d.ts.map +1 -1
  113. package/lib/layout2/main.js +3 -3
  114. package/lib/layout2/main.js.map +1 -1
  115. package/lib/layout2/page.d.ts.map +1 -1
  116. package/lib/layout2/page.js +20 -2
  117. package/lib/layout2/page.js.map +1 -1
  118. package/lib/layout2/sider.d.ts +1 -2
  119. package/lib/layout2/sider.d.ts.map +1 -1
  120. package/lib/layout2/sider.js +6 -125
  121. package/lib/layout2/sider.js.map +1 -1
  122. package/lib/layout2/tabs/tabs-context.d.ts +20 -0
  123. package/lib/layout2/tabs/tabs-context.d.ts.map +1 -0
  124. package/lib/layout2/tabs/tabs-context.js +9 -0
  125. package/lib/layout2/tabs/tabs-context.js.map +1 -0
  126. package/lib/layout2/tabs/tabs-layout.d.ts +4 -0
  127. package/lib/layout2/tabs/tabs-layout.d.ts.map +1 -0
  128. package/lib/layout2/tabs/tabs-layout.js +87 -0
  129. package/lib/layout2/tabs/tabs-layout.js.map +1 -0
  130. package/lib/locale/LocaleProvider.d.ts +2 -0
  131. package/lib/locale/LocaleProvider.d.ts.map +1 -1
  132. package/lib/locale/LocaleProvider.js +7 -1
  133. package/lib/locale/LocaleProvider.js.map +1 -1
  134. package/lib/locale/useLocale.d.ts +2 -0
  135. package/lib/locale/useLocale.d.ts.map +1 -1
  136. package/lib/locale/useLocale.js +8 -2
  137. package/lib/locale/useLocale.js.map +1 -1
  138. package/lib/login/login.d.ts +2 -0
  139. package/lib/login/login.d.ts.map +1 -1
  140. package/lib/login2/login-page.js +1 -1
  141. package/lib/login2/login-page.js.map +1 -1
  142. package/lib/login2/login.d.ts.map +1 -1
  143. package/lib/login2/login.js +5 -0
  144. package/lib/login2/login.js.map +1 -1
  145. package/lib/module/dtmpl-edit-card.d.ts +2 -0
  146. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  147. package/lib/module/dtmpl-edit-page.d.ts +2 -0
  148. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  149. package/lib/module/dtmpl-view-card.d.ts.map +1 -1
  150. package/lib/module/dtmpl-view-card.js +0 -10
  151. package/lib/module/dtmpl-view-card.js.map +1 -1
  152. package/lib/module/ltmpl-modal.d.ts +2 -0
  153. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  154. package/lib/module/ltmpl-table.d.ts +4 -0
  155. package/lib/module/ltmpl-table.d.ts.map +1 -1
  156. package/lib/module/ltmpl-table.js +3 -2
  157. package/lib/module/ltmpl-table.js.map +1 -1
  158. package/lib/routable/ltmpl-route.d.ts +1 -0
  159. package/lib/routable/ltmpl-route.d.ts.map +1 -1
  160. package/lib/routable/ltmpl-route.js +20 -9
  161. package/lib/routable/ltmpl-route.js.map +1 -1
  162. package/lib/routable/ttmpl-route.d.ts +1 -0
  163. package/lib/routable/ttmpl-route.d.ts.map +1 -1
  164. package/lib/routable/ttmpl-route.js +2 -2
  165. package/lib/routable/ttmpl-route.js.map +1 -1
  166. package/lib/routable/withroute.d.ts.map +1 -1
  167. package/lib/routable/withroute.js +8 -2
  168. package/lib/routable/withroute.js.map +1 -1
  169. package/lib/table/act-table.d.ts +7 -1
  170. package/lib/table/act-table.d.ts.map +1 -1
  171. package/lib/table/act-table.js +76 -32
  172. package/lib/table/act-table.js.map +1 -1
  173. package/lib/table/column/column-builder.d.ts +1 -0
  174. package/lib/table/column/column-builder.d.ts.map +1 -1
  175. package/lib/table/column/column-builder.js +2 -2
  176. package/lib/table/column/column-builder.js.map +1 -1
  177. package/lib/table/modal-select-table.d.ts +2 -0
  178. package/lib/table/modal-select-table.d.ts.map +1 -1
  179. package/lib/table/modal-select-table.js +1 -1
  180. package/lib/table/modal-select-table.js.map +1 -1
  181. package/lib/table/pagination.d.ts +2 -0
  182. package/lib/table/pagination.d.ts.map +1 -1
  183. package/lib/table/query-table.d.ts +4 -0
  184. package/lib/table/query-table.d.ts.map +1 -1
  185. package/lib/table/query-table.js +35 -4
  186. package/lib/table/query-table.js.map +1 -1
  187. package/lib/table/relation-table.d.ts +2 -0
  188. package/lib/table/relation-table.d.ts.map +1 -1
  189. package/lib/table/relation-table.js +1 -1
  190. package/lib/table/relation-table.js.map +1 -1
  191. package/lib/table/report-table.d.ts.map +1 -1
  192. package/lib/table/report-table.js +4 -2
  193. package/lib/table/report-table.js.map +1 -1
  194. package/lib/table/select-table.d.ts +2 -0
  195. package/lib/table/select-table.d.ts.map +1 -1
  196. package/lib/table/select-table.js +2 -1
  197. package/lib/table/select-table.js.map +1 -1
  198. package/lib/table/selected-rows-card.d.ts +3 -0
  199. package/lib/table/selected-rows-card.d.ts.map +1 -1
  200. package/lib/table/selected-rows-card.js +2 -1
  201. package/lib/table/selected-rows-card.js.map +1 -1
  202. package/lib/table/stat/restat.d.ts +2 -0
  203. package/lib/table/stat/restat.d.ts.map +1 -1
  204. package/lib/tmpl/hcservice-v3.d.ts +2 -0
  205. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  206. package/lib/tmpl/hcservice-v3.js +22 -0
  207. package/lib/tmpl/hcservice-v3.js.map +1 -1
  208. package/lib/tmpl/interface.d.ts +10 -1
  209. package/lib/tmpl/interface.d.ts.map +1 -1
  210. package/lib/tmpl/interface.js.map +1 -1
  211. package/lib/tree/act-tree.d.ts +6 -1
  212. package/lib/tree/act-tree.d.ts.map +1 -1
  213. package/lib/tree/act-tree.js +5 -5
  214. package/lib/tree/act-tree.js.map +1 -1
  215. package/lib/tree/tmpl-tree.d.ts +2 -0
  216. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  217. package/lib/units/index.d.ts +5 -1
  218. package/lib/units/index.d.ts.map +1 -1
  219. package/lib/units/index.js +25 -0
  220. package/lib/units/index.js.map +1 -1
  221. package/lib/welcome/quick-entrance.d.ts +2 -0
  222. package/lib/welcome/quick-entrance.d.ts.map +1 -1
  223. package/lib/welcome/workbench.d.ts +2 -0
  224. package/lib/welcome/workbench.d.ts.map +1 -1
  225. package/package.json +2 -1
  226. package/src/aldehyde/controls/date-picker/index.tsx +15 -1
  227. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +1 -1
  228. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +2 -5
  229. package/src/aldehyde/form/form-Item-group.tsx +4 -3
  230. package/src/aldehyde/hooks/use-match-route/index.tsx +63 -0
  231. package/src/aldehyde/hooks/use-tabs/index.tsx +130 -0
  232. package/src/aldehyde/layout/MainPage.tsx +1 -1
  233. package/src/aldehyde/layout/coverstyle.css +1 -1
  234. package/src/aldehyde/layout/sidebar/index.tsx +4 -4
  235. package/src/aldehyde/layout2/components/userButton.tsx +20 -3
  236. package/src/aldehyde/layout2/header.tsx +5 -69
  237. package/src/aldehyde/layout2/main.tsx +4 -3
  238. package/src/aldehyde/layout2/page.tsx +25 -3
  239. package/src/aldehyde/layout2/sider.tsx +5 -133
  240. package/src/aldehyde/layout2/tabs/tabs-context.tsx +30 -0
  241. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +152 -0
  242. package/src/aldehyde/locale/LocaleProvider.tsx +13 -2
  243. package/src/aldehyde/locale/useLocale.ts +10 -2
  244. package/src/aldehyde/login2/login-page.tsx +1 -1
  245. package/src/aldehyde/login2/login.tsx +6 -1
  246. package/src/aldehyde/module/dtmpl-view-card.tsx +0 -11
  247. package/src/aldehyde/module/ltmpl-table.tsx +13 -27
  248. package/src/aldehyde/routable/ltmpl-route.tsx +37 -46
  249. package/src/aldehyde/routable/ttmpl-route.tsx +3 -2
  250. package/src/aldehyde/routable/withroute.tsx +12 -2
  251. package/src/aldehyde/table/act-table.tsx +96 -45
  252. package/src/aldehyde/table/column/column-builder.tsx +7 -6
  253. package/src/aldehyde/table/modal-select-table.tsx +3 -2
  254. package/src/aldehyde/table/query-table.tsx +44 -4
  255. package/src/aldehyde/table/relation-table.tsx +1 -2
  256. package/src/aldehyde/table/report-table.tsx +9 -7
  257. package/src/aldehyde/table/select-table.tsx +2 -1
  258. package/src/aldehyde/table/selected-rows-card.tsx +3 -0
  259. package/src/aldehyde/tmpl/hcservice-v3.tsx +20 -0
  260. package/src/aldehyde/tmpl/interface.tsx +17 -4
  261. package/src/aldehyde/tree/act-tree.tsx +7 -5
  262. package/src/aldehyde/units/index.tsx +40 -1
@@ -0,0 +1,63 @@
1
+ import { useEffect, useState } from 'react';
2
+ import {useLocation, useMatches, useOutlet, useParams, useSearchParams} from 'react-router-dom';
3
+
4
+ interface MatchRouteType {
5
+ // 菜单名称
6
+ title: string;
7
+ // tab对应的url
8
+ pathname: string;
9
+ // 要渲染的组件
10
+ children: any;
11
+ // 路由,和pathname区别是,详情页 pathname是 /:id,routePath是 /1
12
+ routePath: string;
13
+ // 图标
14
+ icon?: string;
15
+ // searchParmStr:string;
16
+ //key:string;
17
+ }
18
+
19
+ export function useMatchRoute(): MatchRouteType | undefined {
20
+ // 获取路由组件实例
21
+ const children = useOutlet();
22
+ // 获取所有路由
23
+ const matches = useMatches();
24
+ // 获取当前url
25
+ const { pathname,search } = useLocation();
26
+
27
+ const { sourceId } = useParams();
28
+
29
+ // //const lastRoute = matches[matches.length - 1];
30
+ // const [searchParams, setSearchParams] = useSearchParams();
31
+ // console.log(searchParams.toString());
32
+ // let searchParmStr=searchParams.toString();
33
+ // if(searchParmStr){
34
+ // searchParmStr="?"+searchParmStr;
35
+ // }
36
+ let urlName=pathname+search;
37
+ //let urlName=pathname;
38
+ const [matchRoute, setMatchRoute] = useState<MatchRouteType | undefined>();
39
+
40
+ // 监听pathname变了,说明路由有变化,重新匹配,返回新路由信息
41
+ useEffect(() => {
42
+ // 获取当前匹配的路由
43
+ //const lastRoute = matches[matches.length - 1];
44
+
45
+ // if (!lastRoute?.handle) return;
46
+ //let sourceId=lastRoute?.params['sourceId'];
47
+ let sourceId_=sourceId;
48
+ if(pathname.indexOf("/home")>0){
49
+ sourceId_="home";
50
+ }
51
+ setMatchRoute({
52
+ title:sourceId_||'其他',
53
+ pathname:urlName,
54
+ children,
55
+ routePath: pathname,
56
+ //icon: (lastRoute?.handle as any)?.icon,
57
+ });
58
+
59
+ },[urlName])
60
+
61
+
62
+ return matchRoute;
63
+ }
@@ -0,0 +1,130 @@
1
+ import { useMatchRoute } from '../use-match-route';
2
+ // import { router } from '@/router';
3
+ import { useSessionStorageState } from 'ahooks';
4
+ import { omit } from 'lodash-es';
5
+ import React, { useCallback, useEffect, useState } from 'react';
6
+ import {useNavigate} from "react-router-dom";
7
+
8
+ export interface KeepAliveTab {
9
+ title: string;
10
+ routePath: string;
11
+ key: string;
12
+ pathname: string;
13
+ // searchParmStr:string;
14
+ icon?: string;
15
+ children: React.ReactNode;
16
+ }
17
+
18
+ function getKey() {
19
+ return new Date().getTime().toString();
20
+ }
21
+
22
+ export function useTabs() {
23
+ // 存放页面记录
24
+ const [keepAliveTabs, setKeepAliveTabs] = useSessionStorageState<KeepAliveTab[]>('keepAliveTabs', {
25
+ defaultValue: [],
26
+ serializer: value => {
27
+ // 把 children 剔除掉,不然会报错
28
+ return JSON.stringify(value.map(item => omit(item, ['children'])))
29
+ },
30
+ });
31
+ // 当前激活的tab
32
+ const [activeTabRoutePath, setActiveTabRoutePath] = useState<string>('');
33
+
34
+ const matchRoute = useMatchRoute();
35
+ let navigate = useNavigate();
36
+ // 关闭tab
37
+ const closeTab = useCallback(
38
+ (routePath: string = activeTabRoutePath || '') => {
39
+ if (!keepAliveTabs?.length) {
40
+ return;
41
+ }
42
+ const index = (keepAliveTabs || []).findIndex(o => o.routePath === routePath);
43
+ if (keepAliveTabs[index].routePath === activeTabRoutePath && keepAliveTabs.length > 1) {
44
+ if (index > 0) {
45
+ navigate(keepAliveTabs[index - 1].pathname);
46
+ } else {
47
+ navigate(keepAliveTabs[index + 1].pathname);
48
+ }
49
+ }
50
+ keepAliveTabs.splice(index, 1);
51
+ setKeepAliveTabs([...keepAliveTabs]);
52
+ },
53
+ [activeTabRoutePath],
54
+ );
55
+
56
+ // 关闭除了自己其它tab
57
+ const closeOtherTab = useCallback((routePath: string = activeTabRoutePath || '') => {
58
+ if (!keepAliveTabs?.length) {
59
+ return;
60
+ }
61
+ const tab = keepAliveTabs.find(o => o.routePath === routePath);
62
+ setKeepAliveTabs(keepAliveTabs.filter(o => o.routePath === routePath));
63
+ //router.navigate(tab?.pathname || routePath);
64
+ }, [activeTabRoutePath]);
65
+
66
+ // 刷新tab
67
+ const refreshTab = useCallback((routePath: string = activeTabRoutePath || '') => {
68
+
69
+ // setKeepAliveTabs(prev => {
70
+ // const index = (prev || []).findIndex(tab => tab.pathname === routePath);
71
+ //
72
+ // if (index >= 0 && prev) {
73
+ // // 这个是react的特性,key变了,组件会卸载重新渲染
74
+ // prev[index].key = getKey();
75
+ // }
76
+ // return [...prev || []];
77
+ // });
78
+ }, [activeTabRoutePath]);
79
+
80
+ useEffect(() => {
81
+ if (!matchRoute) return;
82
+
83
+ const existKeepAliveTab = (keepAliveTabs || []).find(o => o.routePath === matchRoute?.routePath);
84
+
85
+ // 如果不存在则需要插入
86
+ if (!existKeepAliveTab) {
87
+ setKeepAliveTabs([...(keepAliveTabs || []), {
88
+ title: matchRoute.title,
89
+ key: getKey(),
90
+ routePath: matchRoute.routePath,
91
+ pathname: matchRoute.pathname,
92
+ children: matchRoute.children,
93
+ icon: matchRoute.icon
94
+ // searchParmStr:matchRoute.searchParmStr||""
95
+ }]);
96
+ } else if (existKeepAliveTab.pathname !== matchRoute.pathname) {
97
+ // 如果是同一个路由,但是参数不同,我们只需要刷新当前页签并且把pathname设置为新的pathname, children设置为新的children
98
+ setKeepAliveTabs(prev => {
99
+ const index = (prev || []).findIndex(tab => tab.routePath === matchRoute.routePath);
100
+ if (index >= 0 && prev) {
101
+ prev[index].key = getKey();
102
+ prev[index].pathname = matchRoute.pathname;
103
+ prev[index].children = matchRoute.children;
104
+ // prev[index].searchParmStr=matchRoute.searchParmStr ||""
105
+ }
106
+ return [...(prev || [])];
107
+ });
108
+ } else if (!existKeepAliveTab.children) {
109
+ // 如果pathname相同,但是children为空,说明重缓存中加载的数据,我们只需要刷新当前页签并且把children设置为新的children
110
+ setKeepAliveTabs(prev => {
111
+ const index = (prev || []).findIndex(tab => tab.routePath === matchRoute.routePath);
112
+ if (index >= 0 && prev) {
113
+ prev[index].key = getKey();
114
+ prev[index].children = matchRoute.children;
115
+ }
116
+ return [...(prev || [])];
117
+ });
118
+ }
119
+ setActiveTabRoutePath(matchRoute.routePath);
120
+ }, [matchRoute])
121
+
122
+ return {
123
+ tabs: keepAliveTabs,
124
+ activeTabRoutePath,
125
+ closeTab,
126
+ closeOtherTab,
127
+ refreshTab,
128
+ setTabs: setKeepAliveTabs,
129
+ }
130
+ }
@@ -292,7 +292,7 @@ class MainPage extends React.PureComponent<MainPageProps, MainPageState> {
292
292
  <SideBar
293
293
  header={leftHeader}
294
294
  collapsedHeader={leftCollapsedHeader}
295
- title={translate("${" + sideBartitle + "}")}
295
+ title={sideBartitle}
296
296
  logo={sideBarLogo}
297
297
  blockMenu={this.findCurrentBlock()}
298
298
  currentL2MenuId={currentL2MenuId}
@@ -17,7 +17,7 @@
17
17
  font-size: 20px;
18
18
  }
19
19
  .ant-message{
20
- z-index: 1090;
20
+ z-index: 2090;
21
21
  }
22
22
  .ant-tabs-bar{
23
23
  z-index: 99;
@@ -20,7 +20,9 @@ const SideBar: React.FC<SideBarProps> = (props) => {
20
20
  const { translate } = useLocale();
21
21
  const { token } = useToken();
22
22
  let syyy = { "--logo-blue-background": token.colorPrimary } as CSSProperties;
23
- let { collapsed,header,collapsedHeader } = props;
23
+ let { collapsed,header,collapsedHeader ,title} = props;
24
+ let programLabel= title ? title : Units.programName_NavLeft();
25
+ programLabel=translate("${"+ programLabel +"}");
24
26
  return (
25
27
  <div>
26
28
  <Scrollbars
@@ -67,9 +69,7 @@ const SideBar: React.FC<SideBarProps> = (props) => {
67
69
  ) : (
68
70
  <></>
69
71
  )}
70
- {translate(
71
- props.title ? props.title : Units.programName_NavLeft()
72
- )}
72
+ {programLabel}
73
73
  </>
74
74
  </h1>
75
75
  </>
@@ -3,7 +3,7 @@ import {
3
3
  CaretDownOutlined,
4
4
  ClearOutlined,
5
5
  LoginOutlined,
6
- LogoutOutlined,
6
+ LogoutOutlined, MenuFoldOutlined, MenuUnfoldOutlined,
7
7
  SettingOutlined,
8
8
  UnlockOutlined,
9
9
  UserOutlined,
@@ -16,6 +16,8 @@ import { useLocale } from "../../locale/useLocale";
16
16
  import { NavLink, useNavigate } from "react-router-dom";
17
17
  import ResetPassword from "../../layout/menu/reset-password";
18
18
  import HCDataSource from "../../tmpl/hc-data-source";
19
+ import { useSessionStorageState } from 'ahooks';
20
+ import {KeepAliveTab} from "../../hooks/use-tabs";
19
21
 
20
22
  type DropDownMenuType = {
21
23
  label: string | number | ReactNode;
@@ -26,8 +28,10 @@ type DropDownMenuType = {
26
28
 
27
29
  const UserButton: React.FC<ButtonProps> = (props) => {
28
30
  // translate
29
- const { translate } = useLocale();
30
-
31
+ const { translate,changeSiderCollapsed,getSiderCollapsed } = useLocale();
32
+ const [keepAliveTabs, setKeepAliveTabs] = useSessionStorageState<KeepAliveTab[]>('keepAliveTabs', {
33
+ defaultValue: [],
34
+ });
31
35
  // navigation
32
36
  const navigate = useNavigate();
33
37
 
@@ -65,6 +69,7 @@ const UserButton: React.FC<ButtonProps> = (props) => {
65
69
 
66
70
  // logout
67
71
  const logout = async () => {
72
+ setKeepAliveTabs([]);
68
73
  await HcserviceV3.logout2();
69
74
  navigate("/login2");
70
75
  };
@@ -123,6 +128,17 @@ const UserButton: React.FC<ButtonProps> = (props) => {
123
128
  show: () => {
124
129
  return isLogin && userConfig.cleanCachable;
125
130
  },
131
+ },{
132
+ label: (
133
+ <span onClick={() => changeSiderCollapsed()}>
134
+ {getSiderCollapsed()?translate("${显示侧边栏}"):translate("${隐藏侧边栏}")}
135
+ </span>
136
+ ),
137
+ key: "collapseSider",
138
+ icon: <span>{getSiderCollapsed()? <MenuUnfoldOutlined /> :<MenuFoldOutlined /> }</span>,
139
+ show: () => {
140
+ return isLogin ;
141
+ },
126
142
  },
127
143
  {
128
144
  label: <span onClick={logout}>{translate("${退出}")}</span>,
@@ -132,6 +148,7 @@ const UserButton: React.FC<ButtonProps> = (props) => {
132
148
  return isLogin;
133
149
  },
134
150
  },
151
+
135
152
  ];
136
153
  const cleanDropdownMenuList: GetProp<MenuProps, "items"> = dropdownMenuList
137
154
  .filter((item) => {
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  ConfigProvider,
3
- Flex,
4
3
  Layout,
5
4
  Menu,
6
5
  MenuProps,
@@ -23,7 +22,7 @@ import {
23
22
  import { useLocale } from "../locale/useLocale";
24
23
  import { generate } from "@ant-design/colors";
25
24
  import { useLayoutContext } from "./LayoutContext";
26
- import ThemeColorGetter from "../table/column/theme-color-getter";
25
+ import { useSessionStorageState } from 'ahooks';
27
26
 
28
27
  type HeaderPropsType = {
29
28
  systemName: string;
@@ -33,69 +32,6 @@ type HeaderPropsType = {
33
32
 
34
33
  type MenuItem = Required<MenuProps>["items"][number];
35
34
 
36
- // const items: MenuItem[] = [
37
- // {
38
- // label: "Navigation One",
39
- // key: "mail",
40
- // icon: <img src={png1} alt="1" width={16} height={16}></img>,
41
- // },
42
- // {
43
- // label: "Navigation Two",
44
- // key: "app",
45
- // disabled: false,
46
- // icon: <img src={png2} alt="2" width={16} height={16}></img>,
47
- // },
48
- // {
49
- // label: "Navigation Two",
50
- // key: "app2",
51
- // disabled: false,
52
- // icon: <img src={png3} alt="2" width={16} height={16}></img>,
53
- // },
54
- // {
55
- // label: "Navigation Two",
56
- // key: "app3",
57
- // disabled: false,
58
- // icon: <img src={png4} alt="2" width={16} height={16}></img>,
59
- // },
60
- // {
61
- // label: "Navigation Two",
62
- // key: "app4",
63
- // disabled: true,
64
- // icon: <img src={png5} alt="2" width={16} height={16}></img>,
65
- // },
66
- // {
67
- // label: "Navigation Three - Submenu",
68
- // key: "SubMenu",
69
- // icon: <img src={png6} alt="2" width={16} height={16}></img>,
70
- // children: [
71
- // {
72
- // type: "group",
73
- // label: "Item 1",
74
- // children: [
75
- // { label: "Option 1", key: "setting:1" },
76
- // { label: "Option 2", key: "setting:2" },
77
- // ],
78
- // },
79
- // {
80
- // type: "group",
81
- // label: "Item 2",
82
- // children: [
83
- // { label: "Option 3", key: "setting:3" },
84
- // { label: "Option 4", key: "setting:4" },
85
- // ],
86
- // },
87
- // ],
88
- // },
89
- // {
90
- // key: "alipay",
91
- // label: (
92
- // <a href="https://ant.design" target="_blank" rel="noopener noreferrer">
93
- // Navigation Four - Link
94
- // </a>
95
- // ),
96
- // icon: <img src={png6} alt="2" width={16} height={16}></img>,
97
- // },
98
- // ];
99
35
 
100
36
  const { useToken } = theme;
101
37
 
@@ -210,7 +146,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style }) => {
210
146
  setDocumentTitle(translate("${" + documentTitle + "}"));
211
147
  }
212
148
  }, [menuList, sourceId]);
213
-
149
+ let systemLabel= translate("${"+systemName+"}");
214
150
  return (
215
151
  <Layout.Header
216
152
  style={{
@@ -234,7 +170,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style }) => {
234
170
  userSelect: "none",
235
171
  color: "inherit",
236
172
  }}
237
- to={"/v2"}
173
+ to={"/v2/home"}
238
174
  >
239
175
  <img
240
176
  src={homePng}
@@ -245,7 +181,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style }) => {
245
181
  marginRight: 5,
246
182
  }}
247
183
  />
248
- <Tooltip title={systemName}>
184
+ <Tooltip title={systemLabel}>
249
185
  <span
250
186
  style={{
251
187
  width: "100%",
@@ -255,7 +191,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style }) => {
255
191
  whiteSpace: "nowrap",
256
192
  }}
257
193
  >
258
- {systemName}
194
+ {translate(systemLabel)}
259
195
  </span>
260
196
  </Tooltip>
261
197
  </NavLink>
@@ -1,6 +1,7 @@
1
+ import React from "react";
1
2
  import { Layout } from "antd";
2
- import React, { useState } from "react";
3
- import { Outlet } from "react-router-dom";
3
+ import TabsLayout from "./tabs/tabs-layout";
4
+
4
5
 
5
6
  type MainPropsType = {
6
7
  style?: typeof Layout.Content.defaultProps.style;
@@ -18,7 +19,7 @@ const Main: React.FC<MainPropsType> = ({ style, children }) => {
18
19
  padding: 10,
19
20
  }}
20
21
  >
21
- {children ? children : <Outlet />}
22
+ {children ? children :<TabsLayout/>}
22
23
  </div>
23
24
  </Layout.Content>
24
25
  );
@@ -1,6 +1,5 @@
1
1
  import { Layout, theme } from "antd";
2
2
  import React, {
3
- HTMLAttributeAnchorTarget,
4
3
  useEffect,
5
4
  useRef,
6
5
  useState,
@@ -15,6 +14,8 @@ import { useVarCssColor } from "../hooks/useVarCssColor";
15
14
  import { generate } from "@ant-design/colors";
16
15
  import { LayoutProvider, useLayoutContext } from "./LayoutContext";
17
16
  import DocumentTitle from "react-document-title";
17
+ import Units from '../units';
18
+ import {useLocale} from "../locale/useLocale";
18
19
 
19
20
  type PagePropsType = {
20
21
  children?: React.ReactNode;
@@ -112,13 +113,21 @@ const handleMenuRes = (menuList: MenuConfigAPIType["blocks"]): MenuType[] => {
112
113
  return retList;
113
114
  };
114
115
 
116
+
117
+
115
118
  const getMenuConfig = async (): Promise<{
116
119
  systemName: string;
117
120
  menu: MenuType[];
118
121
  }> => {
122
+
119
123
  const res = await HcserviceV3.requestBlocks("", "");
120
124
 
121
125
  const menuList: MenuType[] = handleMenuRes(res.blocks);
126
+ let tmp={};
127
+ menuList.forEach((menu: MenuType) => {
128
+ getMenuMap(menu,tmp);
129
+ })
130
+ Units.setMenuMap(tmp);
122
131
 
123
132
  return {
124
133
  menu: menuList,
@@ -126,6 +135,16 @@ const getMenuConfig = async (): Promise<{
126
135
  };
127
136
  };
128
137
 
138
+ const getMenuMap=(menu:MenuType,menuMap:object={})=>{
139
+ if(menu){
140
+ menuMap[menu.id]=menu.label;
141
+ // eslint-disable-next-line no-unused-expressions
142
+ menu.children?.forEach((m: MenuType) => {
143
+ getMenuMap(m,menuMap);
144
+ })
145
+ }
146
+ }
147
+
129
148
  const { useToken } = theme;
130
149
 
131
150
  const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
@@ -133,6 +152,7 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
133
152
  documentTitle,
134
153
  updateMenuItemIdToFirstFloorIdxMap,
135
154
  } = useLayoutContext();
155
+ const { getSiderCollapsed } = useLocale();
136
156
  const {
137
157
  token: { colorPrimary },
138
158
  } = useToken();
@@ -145,6 +165,8 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
145
165
 
146
166
  const [menu, SetMenu] = useState<MenuType[]>([]);
147
167
 
168
+
169
+
148
170
  useEffect(() => {
149
171
  getMenuConfig().then(({ menu, systemName: name }) => {
150
172
  setSystemName(name);
@@ -170,9 +192,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
170
192
  }}
171
193
  >
172
194
  <Layout style={{ height: "100%" }}>
173
- <Header systemName={systemName} menuList={menu}></Header>
195
+ <Header systemName={systemName?systemName:Units.programName_NavLeft()} menuList={menu}></Header>
174
196
  <Layout>
175
- <Sider menuList={menu}></Sider>
197
+ <Sider menuList={menu} collapsed={getSiderCollapsed()}></Sider>
176
198
  <Main>{props.children}</Main>
177
199
  </Layout>
178
200
  </Layout>