aldehyde 0.2.339 → 0.2.342

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 (204) 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/entity-select/entity-select.d.ts +2 -0
  12. package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
  13. package/lib/controls/entity-select/lab-tree-select.d.ts +2 -0
  14. package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
  15. package/lib/controls/entity-select/popover-entity-select.d.ts +2 -0
  16. package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
  17. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +123 -3
  18. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js +11 -11
  19. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js.map +1 -1
  20. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +210 -0
  21. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.ttf +0 -0
  22. package/lib/controls/password-setter/index.d.ts +2 -0
  23. package/lib/controls/password-setter/index.d.ts.map +1 -1
  24. package/lib/controls/relation-existion/index.d.ts +2 -0
  25. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  26. package/lib/controls/rfield/index.d.ts +2 -0
  27. package/lib/controls/rfield/index.d.ts.map +1 -1
  28. package/lib/controls/select/index.d.ts +2 -0
  29. package/lib/controls/select/index.d.ts.map +1 -1
  30. package/lib/controls/signature/index.d.ts +2 -0
  31. package/lib/controls/signature/index.d.ts.map +1 -1
  32. package/lib/controls/text/ellipsis-text.d.ts +2 -0
  33. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  34. package/lib/controls/upload/index.d.ts +2 -0
  35. package/lib/controls/upload/index.d.ts.map +1 -1
  36. package/lib/controls/upload/mult-file-upload.d.ts +2 -0
  37. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  38. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts +2 -0
  39. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  40. package/lib/detail/button/bottom-submit-button-bar.d.ts +2 -0
  41. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  42. package/lib/detail/button/cquery-button-bar.d.ts +2 -0
  43. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  44. package/lib/detail/button/fix-right-submit-button-bar.d.ts +2 -0
  45. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  46. package/lib/detail/edit/fields-edit-card.d.ts +2 -0
  47. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  48. package/lib/detail/edit/modal-row-edit.d.ts +2 -0
  49. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  50. package/lib/detail/edit/popover-edit-card.d.ts +2 -0
  51. package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
  52. package/lib/detail/rightbar/index.d.ts +2 -0
  53. package/lib/detail/rightbar/index.d.ts.map +1 -1
  54. package/lib/detail/view/act-dtmpl-view.d.ts +2 -0
  55. package/lib/detail/view/act-dtmpl-view.d.ts.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/export/export-frame.d.ts +2 -0
  65. package/lib/export/export-frame.d.ts.map +1 -1
  66. package/lib/export/select-code-export-frame.d.ts +2 -0
  67. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  68. package/lib/form/dtmpl-form.d.ts +2 -0
  69. package/lib/form/dtmpl-form.d.ts.map +1 -1
  70. package/lib/form/field-group-form.d.ts +2 -0
  71. package/lib/form/field-group-form.d.ts.map +1 -1
  72. package/lib/form/form-Item-group.d.ts +2 -0
  73. package/lib/form/form-Item-group.d.ts.map +1 -1
  74. package/lib/import/excel-import.d.ts +2 -0
  75. package/lib/import/excel-import.d.ts.map +1 -1
  76. package/lib/index.d.ts +2 -1
  77. package/lib/index.d.ts.map +1 -1
  78. package/lib/index.js +3 -1
  79. package/lib/index.js.map +1 -1
  80. package/lib/layout/menu/block.d.ts +2 -0
  81. package/lib/layout/menu/block.d.ts.map +1 -1
  82. package/lib/layout/menu/l2menu-message-bar.d.ts +3 -1
  83. package/lib/layout/menu/l2menu-message-bar.d.ts.map +1 -1
  84. package/lib/layout/menu/l2menu-message-bar.js +8 -10
  85. package/lib/layout/menu/l2menu-message-bar.js.map +1 -1
  86. package/lib/layout/menu/l2menu-quick-bar.d.ts +4 -1
  87. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  88. package/lib/layout/menu/l2menu-quick-bar.js +4 -9
  89. package/lib/layout/menu/l2menu-quick-bar.js.map +1 -1
  90. package/lib/layout/menu/menu-2layers.d.ts +2 -0
  91. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  92. package/lib/layout/menu/reset-password.d.ts +2 -0
  93. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  94. package/lib/layout/menu/user-bar.d.ts +2 -0
  95. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  96. package/lib/layout/menu/userinfo-bar.d.ts +2 -0
  97. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  98. package/lib/layout2/components/theme-button.js +1 -1
  99. package/lib/layout2/components/theme-button.js.map +1 -1
  100. package/lib/layout2/components/user-button.d.ts.map +1 -1
  101. package/lib/layout2/components/user-button.js +10 -3
  102. package/lib/layout2/components/user-button.js.map +1 -1
  103. package/lib/layout2/header.js +5 -5
  104. package/lib/layout2/header.js.map +1 -1
  105. package/lib/layout2/page.d.ts.map +1 -1
  106. package/lib/layout2/page.js +10 -7
  107. package/lib/layout2/page.js.map +1 -1
  108. package/lib/layout3/header.js +3 -3
  109. package/lib/layout3/header.js.map +1 -1
  110. package/lib/layout3/page.js +3 -3
  111. package/lib/layout3/page.js.map +1 -1
  112. package/lib/layout4/header.js +3 -3
  113. package/lib/layout4/header.js.map +1 -1
  114. package/lib/layout4/page.js +3 -3
  115. package/lib/layout4/page.js.map +1 -1
  116. package/lib/layout5/css/header.css +32 -0
  117. package/lib/layout5/header.d.ts +9 -0
  118. package/lib/layout5/header.d.ts.map +1 -0
  119. package/lib/layout5/header.js +123 -0
  120. package/lib/layout5/header.js.map +1 -0
  121. package/lib/layout5/imgs/home.png +0 -0
  122. package/lib/layout5/page.d.ts +7 -0
  123. package/lib/layout5/page.d.ts.map +1 -0
  124. package/lib/layout5/page.js +54 -0
  125. package/lib/layout5/page.js.map +1 -0
  126. package/lib/layout5/sider.d.ts +10 -0
  127. package/lib/layout5/sider.d.ts.map +1 -0
  128. package/lib/layout5/sider.js +150 -0
  129. package/lib/layout5/sider.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 +8 -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 +3 -1
  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/lowcode-components/base-table/index.js +3 -2
  141. package/lib/lowcode-components/base-table/index.js.map +1 -1
  142. package/lib/module/dtmpl-edit-card.d.ts +2 -0
  143. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  144. package/lib/module/dtmpl-edit-page.d.ts +4 -0
  145. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  146. package/lib/module/dtmpl-edit-page.js +46 -31
  147. package/lib/module/dtmpl-edit-page.js.map +1 -1
  148. package/lib/module/ltmpl-modal.d.ts +2 -0
  149. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  150. package/lib/module/ltmpl-table.d.ts +2 -0
  151. package/lib/module/ltmpl-table.d.ts.map +1 -1
  152. package/lib/table/act-table.d.ts +2 -0
  153. package/lib/table/act-table.d.ts.map +1 -1
  154. package/lib/table/modal-select-table.d.ts +2 -0
  155. package/lib/table/modal-select-table.d.ts.map +1 -1
  156. package/lib/table/pagination.d.ts +2 -0
  157. package/lib/table/pagination.d.ts.map +1 -1
  158. package/lib/table/query-table.d.ts +2 -0
  159. package/lib/table/query-table.d.ts.map +1 -1
  160. package/lib/table/relation-table.d.ts +2 -0
  161. package/lib/table/relation-table.d.ts.map +1 -1
  162. package/lib/table/select-table.d.ts +2 -0
  163. package/lib/table/select-table.d.ts.map +1 -1
  164. package/lib/table/selected-rows-card.d.ts +2 -0
  165. package/lib/table/selected-rows-card.d.ts.map +1 -1
  166. package/lib/table/stat/restat.d.ts +2 -0
  167. package/lib/table/stat/restat.d.ts.map +1 -1
  168. package/lib/tree/act-tree.d.ts +2 -0
  169. package/lib/tree/act-tree.d.ts.map +1 -1
  170. package/lib/tree/block-menu-auth-tree.d.ts +2 -0
  171. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  172. package/lib/tree/tmpl-tree.d.ts +2 -0
  173. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  174. package/lib/welcome/quick-entrance.d.ts +2 -0
  175. package/lib/welcome/quick-entrance.d.ts.map +1 -1
  176. package/lib/welcome/workbench.d.ts +2 -0
  177. package/lib/welcome/workbench.d.ts.map +1 -1
  178. package/package.json +1 -1
  179. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +123 -3
  180. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js +1 -1
  181. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +210 -0
  182. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.ttf +0 -0
  183. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.woff +0 -0
  184. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.woff2 +0 -0
  185. package/src/aldehyde/index.tsx +5 -1
  186. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +38 -14
  187. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +34 -17
  188. package/src/aldehyde/layout2/components/theme-button.tsx +1 -1
  189. package/src/aldehyde/layout2/components/user-button.tsx +10 -2
  190. package/src/aldehyde/layout2/header.tsx +5 -5
  191. package/src/aldehyde/layout2/page.tsx +13 -8
  192. package/src/aldehyde/layout3/header.tsx +3 -3
  193. package/src/aldehyde/layout3/page.tsx +3 -3
  194. package/src/aldehyde/layout4/header.tsx +3 -3
  195. package/src/aldehyde/layout4/page.tsx +3 -3
  196. package/src/aldehyde/layout5/css/header.css +32 -0
  197. package/src/aldehyde/layout5/header.tsx +169 -0
  198. package/src/aldehyde/layout5/imgs/home.png +0 -0
  199. package/src/aldehyde/layout5/page.tsx +79 -0
  200. package/src/aldehyde/layout5/sider.tsx +214 -0
  201. package/src/aldehyde/locale/LocaleProvider.tsx +21 -10
  202. package/src/aldehyde/locale/useLocale.ts +6 -3
  203. package/src/aldehyde/lowcode-components/base-table/index.tsx +2 -2
  204. package/src/aldehyde/module/dtmpl-edit-page.tsx +76 -57
@@ -0,0 +1,214 @@
1
+ import { ConfigProvider, Layout, Menu, MenuProps, Space, Tooltip, theme } from "antd";
2
+ import React, { useEffect, useRef, useState } from "react";
3
+ import { NavLink, useParams, useSearchParams } from "react-router-dom";
4
+ import { generate } from "@ant-design/colors";
5
+ import {
6
+ getLeftMostRouteInfo,
7
+ getTargetMenuItemIdRouteList,
8
+ handlePropsMenuToAntdMenu,
9
+ } from "../layout2/util/menu-util";
10
+ import { useLayoutContext } from "../layout2/layout-context";
11
+ import { MenuType } from "../layout2/type/layout-type";
12
+ import { useLocale } from "../locale/useLocale";
13
+ import IconFont from "../layout2/components/icon-font";
14
+ import homePng from "./imgs/home.png";
15
+
16
+ type SiderPropsType = {
17
+ menuList: MenuType[];
18
+ collapsed: boolean;
19
+ systemName: string;
20
+ };
21
+
22
+ type MenuItem = Required<MenuProps>["items"][number];
23
+ type SecoundFloorMenuList = MenuType[][];
24
+
25
+ /**
26
+ * @param menuList 自定义的menu
27
+ * @returns 下标为 n 对应第 n 个根节点对应的第二层级menu
28
+ * @desc 获取第二层级 menu 与其下标映射的数组
29
+ */
30
+ const getSecoundFloorMenuList = (
31
+ menuList: MenuType[]
32
+ ): SecoundFloorMenuList => {
33
+ const secoundFloorMenuList: SecoundFloorMenuList = Array.from({
34
+ length: menuList.length,
35
+ }).map(() => Array.from({ length: 0 }));
36
+
37
+ for (let i = 0; i < menuList.length; i++) {
38
+ const menuItem = menuList[i];
39
+ Array.isArray(menuItem.children) &&
40
+ (secoundFloorMenuList[i] = menuItem.children);
41
+ }
42
+ return secoundFloorMenuList;
43
+ };
44
+
45
+ const { useToken } = theme;
46
+
47
+ const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed, systemName }) => {
48
+ const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
49
+ const { translate, getLocale } = useLocale();
50
+ const secoundFloorMenuList = useRef<SecoundFloorMenuList>([]);
51
+ const [menu, setMenu] = useState<MenuItem[]>([]);
52
+ // menu select
53
+ const [selectedKeys, setSelectedKeys] = useState([]);
54
+ const [openKeys, setOpenKeys] = useState([]);
55
+ const { sourceId } = useParams();
56
+ const [search] = useSearchParams();
57
+ const menuId: string = search.get("menuId");
58
+ const { token: { colorPrimary } } = useToken();
59
+ const colors = generate(colorPrimary);
60
+
61
+ useEffect(() => {
62
+ secoundFloorMenuList.current = getSecoundFloorMenuList(menuList);
63
+ }, [menuList]);
64
+
65
+ // menu
66
+ const getMenuWithSecoundFloor = (secoundFloorMenu: SecoundFloorMenuList[number]) => {
67
+ return handlePropsMenuToAntdMenu(secoundFloorMenu, (menuItem) => {
68
+ const { disabled, label, children, icon } = menuItem;
69
+ const renderIcon = icon ? <IconFont type={icon} /> : "";
70
+ if (disabled)
71
+ return (
72
+ <div
73
+ style={{
74
+ color: "inherit",
75
+ width: "100%",
76
+ height: "100%",
77
+ display: "block",
78
+ }}
79
+ >
80
+ {translate("${" + label + "}")}
81
+ </div>
82
+ );
83
+ const { path, target } = getLeftMostRouteInfo(menuItem);
84
+ if (Array.isArray(children) && !children.length)
85
+ return (
86
+ <Tooltip title={translate("${" + label + "}")}>
87
+ <NavLink
88
+ to={`/${path}`}
89
+ target={target}
90
+ style={{
91
+ color: "inherit",
92
+ width: "100%",
93
+ height: "100%",
94
+ display: "block",
95
+ textOverflow: "ellipsis",
96
+ overflow: "hidden",
97
+ }}
98
+ >
99
+ <Space size={"small"}>{renderIcon}{translate("${" + label + "}")}</Space>
100
+ </NavLink>
101
+ </Tooltip>
102
+ );
103
+ return <Space size={"small"}>{renderIcon}{translate("${" + label + "}")}</Space>;
104
+ });
105
+ };
106
+
107
+ useEffect(() => {
108
+ if (!menuList.length) {
109
+ setMenu([]);
110
+ return;
111
+ }
112
+ const targetId =
113
+ menuId !== undefined ? menuId : sourceId !== undefined ? sourceId : null;
114
+ if (!targetId) return;
115
+ const curSiderMenuList =
116
+ secoundFloorMenuList.current[menuItemIdToFirstFloorIdxMap[targetId]];
117
+ if (curSiderMenuList) {
118
+ setMenu(getMenuWithSecoundFloor(curSiderMenuList));
119
+ const temIds = getTargetMenuItemIdRouteList(curSiderMenuList, targetId);
120
+ setTimeout(() => {
121
+ setSelectedKeys(temIds);
122
+ setOpenKeys(temIds);
123
+ }, 10);
124
+ }
125
+ }, [sourceId, menuId, menuList, getLocale()]);
126
+
127
+ // default select keys
128
+ useEffect(() => {
129
+ if (sourceId === undefined) {
130
+ if (secoundFloorMenuList.current[0] !== undefined) {
131
+ setMenu(getMenuWithSecoundFloor(secoundFloorMenuList.current[0]));
132
+ setSelectedKeys([]);
133
+ setOpenKeys([]);
134
+ }
135
+ setDocumentTitle("");
136
+ } else {
137
+ const documentTitle =
138
+ menuList[menuItemIdToFirstFloorIdxMap[sourceId]]?.label;
139
+ setDocumentTitle(translate("${" + documentTitle + "}"));
140
+ }
141
+ }, [menuList, sourceId, getLocale()]);
142
+
143
+ return (
144
+ <Layout.Sider collapsed={collapsed} collapsedWidth={0} width={230} style={{ background: colors[0] }}>
145
+ <NavLink
146
+ style={{
147
+ width: "100%",
148
+ height: "55px",
149
+ display: "flex",
150
+ paddingLeft: "10px",
151
+ alignItems: "center",
152
+ fontSize: "18px",
153
+ userSelect: "none",
154
+ color: "inherit",
155
+ borderBottom: "1px solid rgba(0,21,41,.08)",
156
+ }}
157
+ to={"/v5/home"}
158
+ >
159
+ <img
160
+ src={homePng}
161
+ alt="home"
162
+ width={35}
163
+ height={35}
164
+ style={{ marginRight: 5 }}
165
+ />
166
+ <Tooltip title={translate("${" + systemName + "}")}>
167
+ <span
168
+ style={{
169
+ width: "100%",
170
+ overflow: "hidden",
171
+ textOverflow: "ellipsis",
172
+ whiteSpace: "nowrap",
173
+ fontWeight: "bolder",
174
+ color: "rgba(0,0,0,0.88)",
175
+ }}
176
+ >
177
+ {translate("${" + systemName + "}")}
178
+ </span>
179
+ </Tooltip>
180
+ </NavLink>
181
+ <ConfigProvider
182
+ theme={{
183
+ components: {
184
+ Menu: {
185
+ itemBg: "transparent",
186
+ itemHoverColor: "#222",
187
+ itemColor: "#222",
188
+ itemSelectedBg: colors[1],
189
+ groupTitleColor: "#222",
190
+ fontSize: 14,
191
+ },
192
+ },
193
+ }}
194
+ >
195
+ <Menu
196
+ mode="inline"
197
+ items={menu}
198
+ selectedKeys={selectedKeys}
199
+ openKeys={openKeys}
200
+ inlineCollapsed={false}
201
+ style={{
202
+ userSelect: "none",
203
+ borderInlineEnd: "none",
204
+ height: "calc(100% - 55px)",
205
+ overflowY: "auto",
206
+ }}
207
+ onOpenChange={(val) => setOpenKeys([...val])}
208
+ />
209
+ </ConfigProvider>
210
+ </Layout.Sider>
211
+ );
212
+ };
213
+
214
+ export default Sider;
@@ -1,7 +1,7 @@
1
1
 
2
2
  import React, { ReactNode, createContext, useEffect, useState } from "react";
3
3
  import { useNavigatorLanguage } from "./useLocale";
4
- import {getLangWithLangApiMp, getLangWithLangMp } from "./langMp";
4
+ import { getLangWithLangApiMp, getLangWithLangMp } from "./langMp";
5
5
  import { LocaleType } from "./langMp";
6
6
  import HcserviceV3 from "../tmpl/hcservice-v3";
7
7
 
@@ -10,18 +10,22 @@ export const LocaleContext = createContext<{
10
10
  langPkg: any;
11
11
  availableLang: string[];
12
12
  changeLocale: (locale: LocaleType) => void;
13
- siderCollapsed:boolean;
14
- changeSiderCollapsed:()=>void;
13
+ siderCollapsed: boolean;
14
+ changeSiderCollapsed: () => void;
15
15
  t: (...strs: string[]) => string;
16
16
  translate: (...strs: string[]) => string;
17
- getServiceLangStr?: ()=>string;
17
+ getServiceLangStr?: () => string;
18
+ compactTheme?: boolean;
19
+ changeCompactTheme?: () => void;
18
20
  }>({
19
21
  locale: undefined,
20
22
  availableLang: [],
21
23
  langPkg: {},
22
- changeLocale: () => {},
23
- siderCollapsed:false,
24
- changeSiderCollapsed:()=>{},
24
+ changeLocale: () => { },
25
+ siderCollapsed: false,
26
+ changeSiderCollapsed: () => { },
27
+ compactTheme: false,
28
+ changeCompactTheme: () => { },
25
29
  t: (...str) => str.join(""),
26
30
  translate: (str) => {
27
31
  let res = [],
@@ -83,6 +87,8 @@ export const LocaleProvider = ({
83
87
 
84
88
  const [siderCollapsed, setSiderCollapsed] = useState<boolean>(false);
85
89
 
90
+ const [compactTheme, setCompactTheme] = useState<boolean>(localStorage.getItem("compactTheme") === "true");
91
+
86
92
  const [langPkg, setLangPkg] = useState(
87
93
  localeStorageLangPkg ? localeStorageLangPkg : {}
88
94
  );
@@ -92,11 +98,16 @@ export const LocaleProvider = ({
92
98
  setLocale(locale);
93
99
  };
94
100
 
95
- const changeSiderCollapsed = () => {
101
+ const changeSiderCollapsed = () => {
96
102
  setSiderCollapsed(!siderCollapsed);
97
103
  };
98
104
 
99
- const getServiceLangStr = () => {
105
+ const changeCompactTheme = () => {
106
+ setCompactTheme(!compactTheme);
107
+ localStorage.setItem("compactTheme", `${!compactTheme}`);
108
+ };
109
+
110
+ const getServiceLangStr = () => {
100
111
  const langStr = getLangWithLangApiMp(locale);
101
112
  return langStr;
102
113
  };
@@ -207,7 +218,7 @@ export const LocaleProvider = ({
207
218
 
208
219
  return (
209
220
  <LocaleContext.Provider
210
- value={{ locale, availableLang, langPkg, changeLocale,siderCollapsed,changeSiderCollapsed, t, translate ,getServiceLangStr}}
221
+ value={{ locale, availableLang, langPkg, changeLocale, siderCollapsed, changeSiderCollapsed, t, translate, getServiceLangStr, compactTheme, changeCompactTheme }}
211
222
  >
212
223
  {children}
213
224
  </LocaleContext.Provider>
@@ -41,7 +41,9 @@ export const useLocale = () => {
41
41
  t,
42
42
  translate,
43
43
  availableLang,
44
- getServiceLangStr
44
+ getServiceLangStr,
45
+ compactTheme,
46
+ changeCompactTheme
45
47
  } = useContext(LocaleContext);
46
48
 
47
49
  return {
@@ -59,7 +61,8 @@ export const useLocale = () => {
59
61
  },
60
62
  t,
61
63
  translate,
62
- availableLang,getServiceLangStr,
63
-
64
+ availableLang, getServiceLangStr,
65
+ compactTheme,
66
+ changeCompactTheme
64
67
  };
65
68
  };
@@ -1,6 +1,6 @@
1
1
  import React, { ForwardedRef, forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
2
2
  import _ from "lodash";
3
- import { ConfigProvider } from "antd";
3
+ import { ConfigProvider, Empty } from "antd";
4
4
  import HcserviceV3 from "../../tmpl/hcservice-v3";
5
5
  import { DataConfigProps } from "../data";
6
6
  import { ViewControl } from "../../index";
@@ -195,7 +195,7 @@ const Index = forwardRef((props: ComponentProps, ref: ForwardedRef<ComponentRef>
195
195
  }
196
196
  }, [dataConfig?.sourceType, dataConfig?.sourceId]);
197
197
 
198
- const renderEmpty = () => <div className={'base-table-empty'} style={{ ...bodyStyle }}>暂无数据</div>;
198
+ const renderEmpty = () => <div className={'base-table-empty'} style={{ ...bodyStyle }}><Empty styles={{ description: { color: bodyStyle.color || "#000000" } }} image={Empty.PRESENTED_IMAGE_SIMPLE} description="暂无数据" /></div>;
199
199
 
200
200
  return (
201
201
  <div className={'base-table'} ref={tableRef} style={carousel.enable ? { overflowX: "auto" } : { overflow: "auto" }}>
@@ -36,12 +36,12 @@ interface ModalEditorProps extends DtmplBaseProps {
36
36
  pageType: PageType;
37
37
  placement?: "top" | "right" | "bottom" | "left";
38
38
  title?: ReactNode;
39
- extendButtons?:ReactNode[];
39
+ extendButtons?: ReactNode[];
40
40
  }
41
41
 
42
42
  interface ModalEditorState {
43
43
  id?: string;
44
- queryingCode?:string;
44
+ queryingCode?: string;
45
45
  dtmplConfig?: DtmplConfig;
46
46
  loading?: boolean;
47
47
  serial?: number;
@@ -80,7 +80,7 @@ export default class DtmplEditPage extends React.PureComponent<
80
80
  state = {
81
81
  id: "modelDtmplEdit" + Units.getRandomNum(6),
82
82
  dtmplConfig: undefined,
83
- queryingCode:undefined,
83
+ queryingCode: undefined,
84
84
  loading: false,
85
85
  serial: 1,
86
86
  dtmplData: undefined,
@@ -100,7 +100,7 @@ export default class DtmplEditPage extends React.PureComponent<
100
100
  prevProps.sourceId != this.props.sourceId ||
101
101
  prevProps.code != this.props.code ||
102
102
  prevProps.addTmplId != this.props.addTmplId ||
103
- !dtmplConfig || dtmplConfig=='null'
103
+ !dtmplConfig || dtmplConfig == 'null'
104
104
  ) {
105
105
  await this.loadConfigData();
106
106
  } else {
@@ -135,15 +135,15 @@ export default class DtmplEditPage extends React.PureComponent<
135
135
  );
136
136
  }
137
137
  // 直接复制
138
- if(dtmplConfig?.entity && dtmplConfig?.entity?.code==code){
139
- let dtmplData=dtmplConfig.entity;
140
- dtmplConfig.entity=undefined;
138
+ if (dtmplConfig?.entity && dtmplConfig?.entity?.code == code) {
139
+ let dtmplData = dtmplConfig.entity;
140
+ dtmplConfig.entity = undefined;
141
141
  this.setState({
142
142
  dtmplData,
143
143
  id: code,
144
144
  loading: false,
145
145
  });
146
- }else{
146
+ } else {
147
147
  await this.loadData(dtmplConfig);
148
148
  }
149
149
  this.setState({
@@ -152,6 +152,33 @@ export default class DtmplEditPage extends React.PureComponent<
152
152
  });
153
153
  };
154
154
 
155
+ // 表单关联项secondCriteria处理start
156
+ getSubDtmplData = async (valueField, code) => {
157
+ const { serverKey } = this.props;
158
+ const dtmplData = await HcserviceV3.requestDtmplData(serverKey, valueField.id, code.split("@R@")[0], null);
159
+ const subField = valueField.subRelValueField;
160
+ const subData = dtmplData.fieldMap[subField.id];
161
+ if (subField.subRelValueField && subData) { // 存在下级关联项
162
+ return this.getSubDtmplData(subField, subData);
163
+ }
164
+ return subData;
165
+ }
166
+
167
+ getSecondCriteria = async (field) => {
168
+ const { parentFormInstance } = this.props;
169
+ const { relValueField, baseCriteria = {} } = field;
170
+ if (relValueField) {
171
+ let relValueData = parentFormInstance.getFieldValue(relValueField.id);
172
+ if (relValueField.subRelValueField && relValueData) {
173
+ relValueData = await this.getSubDtmplData(relValueField, relValueData);
174
+ }
175
+ field.baseCriteria = { ...(baseCriteria || {}), "secondCriteria": relValueData };
176
+ field.configChanged = true;
177
+ }
178
+ return field;
179
+ }
180
+ // 表单关联项secondCriteria处理end
181
+
155
182
  loadData = async (dtmplConfig: DtmplConfig) => {
156
183
  const {
157
184
  sourceId,
@@ -160,12 +187,21 @@ export default class DtmplEditPage extends React.PureComponent<
160
187
  open,
161
188
  serverKey,
162
189
  codeSource,
190
+ parentFormInstance
163
191
  } = this.props;
164
192
 
165
193
  if (!open) {
166
194
  return;
167
195
  }
168
196
 
197
+ //根据 parentFormInstance 完善 dtmplConfig
198
+ if (parentFormInstance && dtmplConfig) {
199
+ if (!dtmplConfig.buildInFuncFields) {
200
+ dtmplConfig.buildInFuncFields = TmplConfigAnalysis.buildInFuncFields(dtmplConfig);
201
+ }
202
+ dtmplConfig.buildInFuncFields = await Promise.all(dtmplConfig.buildInFuncFields.map(field => this.getSecondCriteria(field)));
203
+ }
204
+
169
205
  if (dtmplConfig?.autoSaveInterval && dtmplConfig?.autoSaveInterval > 0) {
170
206
  if (this.autoSaveInterval) {
171
207
  clearInterval(this.autoSaveInterval);
@@ -189,8 +225,8 @@ export default class DtmplEditPage extends React.PureComponent<
189
225
  if (code) {
190
226
  this.setState({
191
227
  loading: true,
192
- queryingCode:code,
193
- dtmplData:undefined,
228
+ queryingCode: code,
229
+ dtmplData: undefined,
194
230
  });
195
231
 
196
232
  const dtmplData_: DtmplData = await HcserviceV3.getDtmplData(
@@ -200,8 +236,8 @@ export default class DtmplEditPage extends React.PureComponent<
200
236
  code
201
237
  );
202
238
 
203
- if( (!this.state.queryingCode || this.state.queryingCode==dtmplData_.code) &&
204
- (!dtmplData_.sourceId || (this.props.sourceId==dtmplData_.sourceId))){
239
+ if ((!this.state.queryingCode || this.state.queryingCode == dtmplData_.code) &&
240
+ (!dtmplData_.sourceId || (this.props.sourceId == dtmplData_.sourceId))) {
205
241
  this.setState({
206
242
  dtmplData: dtmplData_,
207
243
  id: code,
@@ -237,7 +273,7 @@ export default class DtmplEditPage extends React.PureComponent<
237
273
 
238
274
  doSubmit = (actionId?: number, codes?: string[], params?: object) => {
239
275
  const { mainCode } = this.props;
240
- this.setState({loading:true})
276
+ this.setState({ loading: true })
241
277
  //if (actionId) {
242
278
  this.formRef.current.setFieldsValue({ actionId: actionId });
243
279
  // }
@@ -252,7 +288,7 @@ export default class DtmplEditPage extends React.PureComponent<
252
288
 
253
289
  getFooter = () => {
254
290
  const { onCancel, serverKey } = this.props;
255
- const { dtmplData, serial,loading} = this.state;
291
+ const { dtmplData, serial, loading } = this.state;
256
292
  const footerButtons = [];
257
293
  const { dtmplConfig } = this.state;
258
294
  const { translate } = this.context;
@@ -300,9 +336,9 @@ export default class DtmplEditPage extends React.PureComponent<
300
336
  return footerButtons;
301
337
  };
302
338
 
303
- onFinish=(code)=>{
304
- this.setState({loading:false})
305
- if(code){
339
+ onFinish = (code) => {
340
+ this.setState({ loading: false })
341
+ if (code) {
306
342
  this.props.onOk(code);
307
343
  }
308
344
  }
@@ -319,69 +355,52 @@ export default class DtmplEditPage extends React.PureComponent<
319
355
  placement,
320
356
  maxColsOnRow,
321
357
  title,
322
- serverKey,parentFormInstance
358
+ serverKey, parentFormInstance
323
359
  } = this.props;
324
360
  const { dtmplConfig, id, dtmplData } = this.state;
325
361
 
326
362
  let title1 = title ? title : dtmplConfig ? dtmplConfig.title : "";
327
363
  const { translate } = this.context;
328
364
  //判断是不是 字符串
329
- if (typeof title1 === "string"){
330
- title1=translate("${" + title1 + "}");
365
+ if (typeof title1 === "string") {
366
+ title1 = translate("${" + title1 + "}");
331
367
  }
332
368
 
333
-
334
- //根据 parentFormInstance 完善 dtmplConfig
335
- if(parentFormInstance && dtmplConfig){//
336
- if (!dtmplConfig.buildInFuncFields) {
337
- dtmplConfig.buildInFuncFields = TmplConfigAnalysis.buildInFuncFields(dtmplConfig);
338
- }
339
- for (let field of dtmplConfig.buildInFuncFields){
340
- if(field.relValueField ){
341
- if(!field.baseCriteria){
342
- field.baseCriteria={}
343
- }
344
- field.baseCriteria={...field.baseCriteria,"secondCriteria":parentFormInstance.getFieldValue(field.relValueField.id)};
345
- field.configChanged=true;
346
- }
347
- }
348
- }
349
369
  return (
350
370
  <>
351
- {" "}
352
371
  {pageType == "modal" ? (
353
- // <Draggable handle=".ant-modal-header">
372
+ // <Draggable handle=".ant-modal-header">
354
373
  <DraggableModal
355
374
  open={open}
356
375
  width={width}
357
376
  title={title1}
358
377
  closable={false}
359
- styles={{body:{ height: height, overflow: "auto" }}}
378
+ styles={{ body: { height: height, overflow: "auto" } }}
360
379
  destroyOnHidden={true}
361
- centered
380
+ centered
362
381
  onCancel={onCancel}
363
382
  footer={this.getFooter()}
364
383
  children={<Scrollbars autoHide autoHideTimeout={1000}>
365
384
  <div onClick={this.onClickBody}>
366
385
  <DtmplForm
367
- serverKey={serverKey}
368
- mainCode={mainCode}
369
- parentId={id}
370
- dtmplConfig={dtmplConfig}
371
- formRef={this.formRef}
372
- sourceId={sourceId}
373
- onFinish={this.onFinish}
374
- maxColsOnRow={maxColsOnRow}
375
- showConfirm={false}
376
- dtmplData={dtmplData}
377
- onValuesChange={this.onValuesChange}
378
- parentFormInstance={parentFormInstance}
386
+ serverKey={serverKey}
387
+ mainCode={mainCode}
388
+ parentId={id}
389
+ dtmplConfig={dtmplConfig}
390
+ formRef={this.formRef}
391
+ sourceId={sourceId}
392
+ onFinish={this.onFinish}
393
+ maxColsOnRow={maxColsOnRow}
394
+ showConfirm={false}
395
+ dtmplData={dtmplData}
396
+ onValuesChange={this.onValuesChange}
397
+ parentFormInstance={parentFormInstance}
379
398
  />
380
399
  </div>
381
400
  </Scrollbars>}
382
401
  >
383
402
  </DraggableModal>
384
- // </Draggable>
403
+ // </Draggable>
385
404
  ) : pageType == "drawer" ? (
386
405
 
387
406
  <Drawer
@@ -393,11 +412,11 @@ export default class DtmplEditPage extends React.PureComponent<
393
412
  width={width}
394
413
  onClose={onCancel}
395
414
  open={open}
396
- height={placement=="top" || placement=="bottom" ? height : "calc(100%)"}
415
+ height={placement == "top" || placement == "bottom" ? height : "calc(100%)"}
397
416
  style={{
398
- maxWidth: (placement=="top" || placement=="bottom")? "100vw" :"92vw",
399
- border:"2px solid #d9d9d9",
400
- width: width,
417
+ maxWidth: (placement == "top" || placement == "bottom") ? "100vw" : "92vw",
418
+ border: "2px solid #d9d9d9",
419
+ width: width,
401
420
  }}
402
421
  extra={<Space>{this.getFooter()}</Space>}
403
422
  >