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.
- package/lib/controls/action/index.d.ts +2 -0
- package/lib/controls/action/index.d.ts.map +1 -1
- package/lib/controls/chemstruc/graph.d.ts +2 -0
- package/lib/controls/chemstruc/graph.d.ts.map +1 -1
- package/lib/controls/collapse-card/index.d.ts +2 -0
- package/lib/controls/collapse-card/index.d.ts.map +1 -1
- package/lib/controls/color-picker/index.d.ts +2 -0
- package/lib/controls/color-picker/index.d.ts.map +1 -1
- package/lib/controls/cquery/cquick-button.d.ts +2 -0
- package/lib/controls/cquery/cquick-button.d.ts.map +1 -1
- package/lib/controls/entity-select/entity-select.d.ts +2 -0
- package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
- package/lib/controls/entity-select/lab-tree-select.d.ts +2 -0
- package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
- package/lib/controls/entity-select/popover-entity-select.d.ts +2 -0
- package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
- package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +123 -3
- package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js +11 -11
- package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js.map +1 -1
- package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +210 -0
- package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.ttf +0 -0
- package/lib/controls/password-setter/index.d.ts +2 -0
- package/lib/controls/password-setter/index.d.ts.map +1 -1
- package/lib/controls/relation-existion/index.d.ts +2 -0
- package/lib/controls/relation-existion/index.d.ts.map +1 -1
- package/lib/controls/rfield/index.d.ts +2 -0
- package/lib/controls/rfield/index.d.ts.map +1 -1
- package/lib/controls/select/index.d.ts +2 -0
- package/lib/controls/select/index.d.ts.map +1 -1
- package/lib/controls/signature/index.d.ts +2 -0
- package/lib/controls/signature/index.d.ts.map +1 -1
- package/lib/controls/text/ellipsis-text.d.ts +2 -0
- package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
- package/lib/controls/upload/index.d.ts +2 -0
- package/lib/controls/upload/index.d.ts.map +1 -1
- package/lib/controls/upload/mult-file-upload.d.ts +2 -0
- package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
- package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts +2 -0
- package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
- package/lib/detail/button/bottom-submit-button-bar.d.ts +2 -0
- package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
- package/lib/detail/button/cquery-button-bar.d.ts +2 -0
- package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
- package/lib/detail/button/fix-right-submit-button-bar.d.ts +2 -0
- package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
- package/lib/detail/edit/fields-edit-card.d.ts +2 -0
- package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
- package/lib/detail/edit/modal-row-edit.d.ts +2 -0
- package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
- package/lib/detail/edit/popover-edit-card.d.ts +2 -0
- package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
- package/lib/detail/rightbar/index.d.ts +2 -0
- package/lib/detail/rightbar/index.d.ts.map +1 -1
- package/lib/detail/view/act-dtmpl-view.d.ts +2 -0
- package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
- package/lib/detail/view/field-view-group.d.ts +2 -0
- package/lib/detail/view/field-view-group.d.ts.map +1 -1
- package/lib/detail/view/modal-dtmpl-view.d.ts +2 -0
- package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
- package/lib/detail/view/snapshot-timeline.d.ts +2 -0
- package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
- package/lib/detail/view/tab-act-dtmpl-view.d.ts +2 -0
- package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
- package/lib/export/export-frame.d.ts +2 -0
- package/lib/export/export-frame.d.ts.map +1 -1
- package/lib/export/select-code-export-frame.d.ts +2 -0
- package/lib/export/select-code-export-frame.d.ts.map +1 -1
- package/lib/form/dtmpl-form.d.ts +2 -0
- package/lib/form/dtmpl-form.d.ts.map +1 -1
- package/lib/form/field-group-form.d.ts +2 -0
- package/lib/form/field-group-form.d.ts.map +1 -1
- package/lib/form/form-Item-group.d.ts +2 -0
- package/lib/form/form-Item-group.d.ts.map +1 -1
- package/lib/import/excel-import.d.ts +2 -0
- package/lib/import/excel-import.d.ts.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/layout/menu/block.d.ts +2 -0
- package/lib/layout/menu/block.d.ts.map +1 -1
- package/lib/layout/menu/l2menu-message-bar.d.ts +3 -1
- package/lib/layout/menu/l2menu-message-bar.d.ts.map +1 -1
- package/lib/layout/menu/l2menu-message-bar.js +8 -10
- package/lib/layout/menu/l2menu-message-bar.js.map +1 -1
- package/lib/layout/menu/l2menu-quick-bar.d.ts +4 -1
- package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
- package/lib/layout/menu/l2menu-quick-bar.js +4 -9
- package/lib/layout/menu/l2menu-quick-bar.js.map +1 -1
- package/lib/layout/menu/menu-2layers.d.ts +2 -0
- package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
- package/lib/layout/menu/reset-password.d.ts +2 -0
- package/lib/layout/menu/reset-password.d.ts.map +1 -1
- package/lib/layout/menu/user-bar.d.ts +2 -0
- package/lib/layout/menu/user-bar.d.ts.map +1 -1
- package/lib/layout/menu/userinfo-bar.d.ts +2 -0
- package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
- package/lib/layout2/components/theme-button.js +1 -1
- package/lib/layout2/components/theme-button.js.map +1 -1
- package/lib/layout2/components/user-button.d.ts.map +1 -1
- package/lib/layout2/components/user-button.js +10 -3
- package/lib/layout2/components/user-button.js.map +1 -1
- package/lib/layout2/header.js +5 -5
- package/lib/layout2/header.js.map +1 -1
- package/lib/layout2/page.d.ts.map +1 -1
- package/lib/layout2/page.js +10 -7
- package/lib/layout2/page.js.map +1 -1
- package/lib/layout3/header.js +3 -3
- package/lib/layout3/header.js.map +1 -1
- package/lib/layout3/page.js +3 -3
- package/lib/layout3/page.js.map +1 -1
- package/lib/layout4/header.js +3 -3
- package/lib/layout4/header.js.map +1 -1
- package/lib/layout4/page.js +3 -3
- package/lib/layout4/page.js.map +1 -1
- package/lib/layout5/css/header.css +32 -0
- package/lib/layout5/header.d.ts +9 -0
- package/lib/layout5/header.d.ts.map +1 -0
- package/lib/layout5/header.js +123 -0
- package/lib/layout5/header.js.map +1 -0
- package/lib/layout5/imgs/home.png +0 -0
- package/lib/layout5/page.d.ts +7 -0
- package/lib/layout5/page.d.ts.map +1 -0
- package/lib/layout5/page.js +54 -0
- package/lib/layout5/page.js.map +1 -0
- package/lib/layout5/sider.d.ts +10 -0
- package/lib/layout5/sider.d.ts.map +1 -0
- package/lib/layout5/sider.js +150 -0
- package/lib/layout5/sider.js.map +1 -0
- package/lib/locale/LocaleProvider.d.ts +2 -0
- package/lib/locale/LocaleProvider.d.ts.map +1 -1
- package/lib/locale/LocaleProvider.js +8 -1
- package/lib/locale/LocaleProvider.js.map +1 -1
- package/lib/locale/useLocale.d.ts +2 -0
- package/lib/locale/useLocale.d.ts.map +1 -1
- package/lib/locale/useLocale.js +3 -1
- package/lib/locale/useLocale.js.map +1 -1
- package/lib/login/login.d.ts +2 -0
- package/lib/login/login.d.ts.map +1 -1
- package/lib/lowcode-components/base-table/index.js +3 -2
- package/lib/lowcode-components/base-table/index.js.map +1 -1
- package/lib/module/dtmpl-edit-card.d.ts +2 -0
- package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
- package/lib/module/dtmpl-edit-page.d.ts +4 -0
- package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
- package/lib/module/dtmpl-edit-page.js +46 -31
- package/lib/module/dtmpl-edit-page.js.map +1 -1
- package/lib/module/ltmpl-modal.d.ts +2 -0
- package/lib/module/ltmpl-modal.d.ts.map +1 -1
- package/lib/module/ltmpl-table.d.ts +2 -0
- package/lib/module/ltmpl-table.d.ts.map +1 -1
- package/lib/table/act-table.d.ts +2 -0
- package/lib/table/act-table.d.ts.map +1 -1
- package/lib/table/modal-select-table.d.ts +2 -0
- package/lib/table/modal-select-table.d.ts.map +1 -1
- package/lib/table/pagination.d.ts +2 -0
- package/lib/table/pagination.d.ts.map +1 -1
- package/lib/table/query-table.d.ts +2 -0
- package/lib/table/query-table.d.ts.map +1 -1
- package/lib/table/relation-table.d.ts +2 -0
- package/lib/table/relation-table.d.ts.map +1 -1
- package/lib/table/select-table.d.ts +2 -0
- package/lib/table/select-table.d.ts.map +1 -1
- package/lib/table/selected-rows-card.d.ts +2 -0
- package/lib/table/selected-rows-card.d.ts.map +1 -1
- package/lib/table/stat/restat.d.ts +2 -0
- package/lib/table/stat/restat.d.ts.map +1 -1
- package/lib/tree/act-tree.d.ts +2 -0
- package/lib/tree/act-tree.d.ts.map +1 -1
- package/lib/tree/block-menu-auth-tree.d.ts +2 -0
- package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
- package/lib/tree/tmpl-tree.d.ts +2 -0
- package/lib/tree/tmpl-tree.d.ts.map +1 -1
- package/lib/welcome/quick-entrance.d.ts +2 -0
- package/lib/welcome/quick-entrance.d.ts.map +1 -1
- package/lib/welcome/workbench.d.ts +2 -0
- package/lib/welcome/workbench.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +123 -3
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.js +1 -1
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +210 -0
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.ttf +0 -0
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.woff +0 -0
- package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.woff2 +0 -0
- package/src/aldehyde/index.tsx +5 -1
- package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +38 -14
- package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +34 -17
- package/src/aldehyde/layout2/components/theme-button.tsx +1 -1
- package/src/aldehyde/layout2/components/user-button.tsx +10 -2
- package/src/aldehyde/layout2/header.tsx +5 -5
- package/src/aldehyde/layout2/page.tsx +13 -8
- package/src/aldehyde/layout3/header.tsx +3 -3
- package/src/aldehyde/layout3/page.tsx +3 -3
- package/src/aldehyde/layout4/header.tsx +3 -3
- package/src/aldehyde/layout4/page.tsx +3 -3
- package/src/aldehyde/layout5/css/header.css +32 -0
- package/src/aldehyde/layout5/header.tsx +169 -0
- package/src/aldehyde/layout5/imgs/home.png +0 -0
- package/src/aldehyde/layout5/page.tsx +79 -0
- package/src/aldehyde/layout5/sider.tsx +214 -0
- package/src/aldehyde/locale/LocaleProvider.tsx +21 -10
- package/src/aldehyde/locale/useLocale.ts +6 -3
- package/src/aldehyde/lowcode-components/base-table/index.tsx +2 -2
- 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
|
|
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 ,
|
|
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 }}
|
|
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
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
>
|