@lingxiteam/ebe-utils 0.0.27 → 0.0.29
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/es/constants.js +0 -1
- package/es/index.js +52 -36
- package/es/node/move.d.ts +1 -0
- package/es/node/move.js +7 -4
- package/es/requestQueue.d.ts +9 -0
- package/es/requestQueue.js +59 -0
- package/lib/h5public/src/components/common/PreviewFile/index.tsx +3 -7
- package/lib/h5public/src/components/factory/package.json +1 -1
- package/lib/h5public/src/components/factory/src/BlockSelect/components/CheckBox/index.tsx +14 -4
- package/lib/h5public/src/components/factory/src/BlockSelect/components/Icon/index.tsx +4 -4
- package/lib/h5public/src/components/factory/src/BlockSelect/index.tsx +13 -21
- package/lib/h5public/src/components/factory/src/Button/index.tsx +1 -0
- package/lib/h5public/src/components/factory/src/Card/index.less +11 -24
- package/lib/h5public/src/components/factory/src/Card/index.tsx +61 -22
- package/lib/h5public/src/components/factory/src/DGroup/index.less +7 -3
- package/lib/h5public/src/components/factory/src/DformFile/FormFile.tsx +17 -4
- package/lib/h5public/src/components/factory/src/DformFile/assets/closeIcon.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/default.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/fileName.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/img.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/js.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/pdf.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/ppt.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/txt.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/word.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/xls.png +0 -0
- package/lib/h5public/src/components/factory/src/DformFile/assets/zip.png +0 -0
- package/lib/h5public/src/components/factory/src/DynamicDataContainer/YieldMethod.ts +33 -0
- package/lib/h5public/src/components/factory/src/DynamicDataContainer/index.less +41 -5
- package/lib/h5public/src/components/factory/src/DynamicDataContainer/index.tsx +18 -3
- package/lib/h5public/src/components/factory/src/DynamicDataContainer/useDynamicDataContainer.ts +14 -1
- package/lib/h5public/src/components/factory/src/DynamicList/index.tsx +4 -2
- package/lib/h5public/src/components/factory/src/DynamicTable/Table.tsx +3 -1
- package/lib/h5public/src/components/factory/src/Image/BasicImage/index.tsx +36 -1
- package/lib/h5public/src/components/factory/src/StackColumn/loader.tsx +1 -1
- package/lib/h5public/src/components/factory/src/StaticTabs/index.tsx +1 -1
- package/lib/h5public/src/components/factory/src/VerificationCode/index.tsx +14 -3
- package/lib/h5public/src/components/factory/src/VideoPlayer/loader.ts +1 -1
- package/lib/h5public/src/components/factory/src/utils/CustomModule.tsx +3 -0
- package/lib/h5public/src/components/factory/src/utils/hooks/useFormItem.ts +3 -0
- package/lib/h5public/src/hooks/usePageForm.ts +2 -3
- package/lib/h5public/src/utils/native.ts +94 -0
- package/lib/node/move.d.ts +1 -0
- package/lib/node/move.js +6 -3
- package/lib/pcpublic/src/components/common/PreviewFile/index.tsx +8 -0
- package/lib/pcpublic/src/components/common/PreviewFile/utils.ts +45 -0
- package/lib/pcpublic/src/components/pcfactory/package.json +1 -1
- package/lib/pcpublic/src/components/pcfactory/src/CollapsePanel/index.tsx +6 -4
- package/lib/pcpublic/src/components/pcfactory/src/DynamicDataContainer/YieldMethod.ts +33 -0
- package/lib/pcpublic/src/components/pcfactory/src/DynamicDataContainer/index.tsx +18 -3
- package/lib/pcpublic/src/components/pcfactory/src/DynamicDataContainer/useDynamicDataContainer.ts +14 -1
- package/lib/pcpublic/src/components/pcfactory/src/Img/index.tsx +34 -2
- package/lib/pcpublic/src/components/pcfactory/src/LoopList/index.tsx +9 -4
- package/lib/pcpublic/src/components/pcfactory/src/ModalSelect/BaseModalSelect.tsx +8 -1
- package/lib/pcpublic/src/components/pcfactory/src/StdUpload/index.tsx +39 -13
- package/lib/pcpublic/src/components/pcfactory/src/SuperSelect/ComSelect.tsx +22 -14
- package/lib/pcpublic/src/components/pcfactory/src/Table/FormatCell/index.tsx +12 -1
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useCMDActions.ts +54 -12
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useColumns.tsx +516 -485
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useCommon.ts +40 -2
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useDataSource.ts +3 -34
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useExpandable.tsx +1 -1
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/usePagination.ts +30 -3
- package/lib/pcpublic/src/components/pcfactory/src/Table/hooks/useRowEdit.ts +34 -12
- package/lib/pcpublic/src/components/pcfactory/src/Table/index.tsx +15 -4
- package/lib/pcpublic/src/components/pcfactory/src/Tabs/index.tsx +2 -0
- package/lib/pcpublic/src/components/pcfactory/src/Tag/index.tsx +2 -2
- package/lib/pcpublic/src/components/pcfactory/src/TreeTable/index.tsx +13 -2
- package/lib/pcpublic/src/components/pcfactory/src/styles/components/Card.less +1 -1
- package/lib/pcpublic/src/components/pcfactory/src/styles/components/FormGroup.less +8 -4
- package/lib/pcpublic/src/components/pcfactory/src/styles/components/Icon.less +4 -0
- package/lib/pcpublic/src/components/pcfactory/src/styles/components/StdUpload.less +3 -3
- package/lib/pcpublic/src/components/pcfactory/src/utils/CustomModule.tsx +3 -0
- package/lib/pcpublic/src/components/pcfactory/src/utils/common.ts +15 -0
- package/lib/pcpublic/src/hooks/usePageForm.ts +2 -3
- package/lib/pcpublic/src/utils/exportCustomData/index.tsx +0 -3
- package/lib/public/src/hooks/useExportCustomDataFile.ts +4 -0
- package/lib/public/src/services/api/index.ts +12 -0
- package/lib/public/src/utils/Context/context.tsx +1 -0
- package/lib/public/src/utils/historytool.ts +3 -0
- package/lib/public/src/utils/lcdpBaseApi.ts +2 -2
- package/lib/public/src/utils/platform/utils/fileUtils.ts +12 -11
- package/lib/public/src/utils/polyfills.ts +4 -0
- package/lib/public/src/utils/popoverUtils.ts +56 -0
- package/lib/public/src/utils/service/baseRequest.ts +8 -8
- package/lib/public/src/utils/service/urlHelper.ts +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { PlatformOS } from '@/utils/LcdpTerminalType';
|
|
2
|
+
import { NativeCallbackType } from '@lingxiteam/types';
|
|
3
|
+
|
|
4
|
+
const nativeCallback = (method: string, callback?: NativeCallbackType) => {
|
|
5
|
+
const {
|
|
6
|
+
success = () => {},
|
|
7
|
+
fail = () => {},
|
|
8
|
+
androidFailFunName = `${method}Fail`,
|
|
9
|
+
androidSuccessFunName = `${method}Success`,
|
|
10
|
+
iOSFailFunName = `${method}Fail`,
|
|
11
|
+
iOSSuccessFunName = `${method}Success`,
|
|
12
|
+
} = callback || {};
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
window[androidFailFunName] = fail;
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
window[androidSuccessFunName] = success;
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
window[iOSFailFunName] = fail;
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
window[iOSSuccessFunName] = success;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 调用iOS函数方法 原生可以通过method+Success/Fail方法回调
|
|
25
|
+
* @param method iOS方法名
|
|
26
|
+
* @param params H5入参
|
|
27
|
+
* @param success 成功函数回调
|
|
28
|
+
* @param fail 失败函数回调
|
|
29
|
+
*/
|
|
30
|
+
const execIOS = (
|
|
31
|
+
method: string,
|
|
32
|
+
params?: string,
|
|
33
|
+
callback?: NativeCallbackType,
|
|
34
|
+
) => {
|
|
35
|
+
if ((window as any).webkit && (window as any).webkit.messageHandlers) {
|
|
36
|
+
(window as any).webkit.messageHandlers[method].postMessage(params);
|
|
37
|
+
nativeCallback(method, callback);
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
} else if (window[method]) {
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
window[method](params);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 调用Android函数方法 原生可以通过method+Success/Fail方法回调
|
|
47
|
+
* @param method Android方法名
|
|
48
|
+
* @param params H5入参
|
|
49
|
+
* @param success 成功函数回调
|
|
50
|
+
* @param fail 失败函数回调
|
|
51
|
+
*/
|
|
52
|
+
const execAndroid = (
|
|
53
|
+
method: string,
|
|
54
|
+
data?: string,
|
|
55
|
+
callback?: NativeCallbackType,
|
|
56
|
+
) => {
|
|
57
|
+
let params = data;
|
|
58
|
+
const { androidWebName = 'Android' } = callback || {};
|
|
59
|
+
if (params) {
|
|
60
|
+
params = JSON.stringify(params);
|
|
61
|
+
}
|
|
62
|
+
if (
|
|
63
|
+
(window as any)[androidWebName] &&
|
|
64
|
+
(window as any)[androidWebName][method]
|
|
65
|
+
) {
|
|
66
|
+
(window as any)[androidWebName][method](params);
|
|
67
|
+
nativeCallback(method, callback);
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
} else if (window[method]) {
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
window[method](params);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* 调用原生函数方法 原生可以通过method+Success/Fail方法回调
|
|
77
|
+
* @param method 原生方法名
|
|
78
|
+
* @param params H5入参
|
|
79
|
+
* @param success 成功函数回调
|
|
80
|
+
* @param fail 失败函数回调
|
|
81
|
+
*/
|
|
82
|
+
const nativeExec = (
|
|
83
|
+
method: string,
|
|
84
|
+
params?: any,
|
|
85
|
+
callback?: NativeCallbackType,
|
|
86
|
+
) => {
|
|
87
|
+
if (PlatformOS().iOS) {
|
|
88
|
+
execIOS(method, params, callback);
|
|
89
|
+
} else if (PlatformOS().Android) {
|
|
90
|
+
execAndroid(method, params, callback);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export default nativeExec;
|
package/lib/node/move.d.ts
CHANGED
package/lib/node/move.js
CHANGED
|
@@ -25,7 +25,7 @@ module.exports = __toCommonJS(move_exports);
|
|
|
25
25
|
var import_fs_extra = require("fs-extra");
|
|
26
26
|
var import_path = require("path");
|
|
27
27
|
var import_getAllImportFiles = require("./babel/getAllImportFiles");
|
|
28
|
-
var copyFileSyncAlias = (cwd, from, to) => {
|
|
28
|
+
var copyFileSyncAlias = (cwd, from, to, plugin) => {
|
|
29
29
|
var _a;
|
|
30
30
|
let context = (0, import_fs_extra.readFileSync)(from, "utf-8");
|
|
31
31
|
const importList = ((_a = context.match(/from '@\/([^']+)'/g)) == null ? void 0 : _a.map((match) => match.slice(8, -1))) || [];
|
|
@@ -34,10 +34,13 @@ var copyFileSyncAlias = (cwd, from, to) => {
|
|
|
34
34
|
const filePath = (0, import_path.relative)((0, import_path.dirname)(from), absolute);
|
|
35
35
|
context = context.replace(`@/${source}`, filePath);
|
|
36
36
|
});
|
|
37
|
+
if (plugin) {
|
|
38
|
+
context = plugin(to, context);
|
|
39
|
+
}
|
|
37
40
|
(0, import_fs_extra.writeFileSync)(to, context, "utf-8");
|
|
38
41
|
};
|
|
39
42
|
async function move(moveConfig) {
|
|
40
|
-
const { target, outDir, cwd = process.cwd() } = moveConfig;
|
|
43
|
+
const { target, outDir, cwd = process.cwd(), plugin } = moveConfig;
|
|
41
44
|
const resolvedTarget = (0, import_path.isAbsolute)(target) ? target : (0, import_path.join)(cwd, target);
|
|
42
45
|
if (!(0, import_fs_extra.existsSync)(resolvedTarget)) {
|
|
43
46
|
throw new Error(`指定的入口文件不存在: ${resolvedTarget}`);
|
|
@@ -55,7 +58,7 @@ async function move(moveConfig) {
|
|
|
55
58
|
const filePath = (0, import_path.relative)(cwd, file);
|
|
56
59
|
const absTarget = (0, import_path.isAbsolute)(outDir) ? (0, import_path.join)(outDir, filePath) : (0, import_path.join)(cwd, outDir, filePath);
|
|
57
60
|
(0, import_fs_extra.mkdirpSync)((0, import_path.dirname)(absTarget));
|
|
58
|
-
copyFileSyncAlias(cwd, file, absTarget);
|
|
61
|
+
copyFileSyncAlias(cwd, file, absTarget, plugin);
|
|
59
62
|
});
|
|
60
63
|
console.log(`[COPY] 共拷贝文件数 ${count}`);
|
|
61
64
|
const pkg = (0, import_path.join)(cwd, "package.json");
|
|
@@ -27,6 +27,7 @@ import security from '@/utils/Security';
|
|
|
27
27
|
import { LocaleFunction } from '@lingxiteam/types';
|
|
28
28
|
import {
|
|
29
29
|
CAN_SCALE,
|
|
30
|
+
getPreviewModeWithDate,
|
|
30
31
|
isUrlFormat,
|
|
31
32
|
LOCAL_PREVIEW,
|
|
32
33
|
parseFileInfo,
|
|
@@ -324,6 +325,13 @@ const PreviewFile: React.FC<PreviewFileProps> = (props) => {
|
|
|
324
325
|
}
|
|
325
326
|
return true;
|
|
326
327
|
}
|
|
328
|
+
// 目前仅支持判断图片类型,当没有文件名的时候通过dataUrl进行判断
|
|
329
|
+
// @ts-ignore
|
|
330
|
+
const imgeType = getPreviewModeWithDate(fileBlob?.dataUrl);
|
|
331
|
+
if (imgeType) {
|
|
332
|
+
fileInfo.previewMode = imgeType;
|
|
333
|
+
return true;
|
|
334
|
+
}
|
|
327
335
|
return false;
|
|
328
336
|
});
|
|
329
337
|
if (target?.previewMode === PREVIEW_MODE.TXT && fileBlob instanceof Blob) {
|
|
@@ -84,7 +84,52 @@ export const parseFileInfo = (
|
|
|
84
84
|
}
|
|
85
85
|
return newFileInfo;
|
|
86
86
|
};
|
|
87
|
+
export const getPreviewModeWithDate = (dataUrl: string) => {
|
|
88
|
+
if (typeof dataUrl === 'string' && dataUrl.length > 0) {
|
|
89
|
+
const base64String = dataUrl.split(',')[1];
|
|
90
|
+
const binaryString = atob(base64String);
|
|
91
|
+
if (binaryString.length < 4) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const bytes = new Uint8Array(4);
|
|
95
|
+
|
|
96
|
+
// eslint-disable-next-line no-plusplus
|
|
97
|
+
for (let i = 0; i < 4; i++) {
|
|
98
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
99
|
+
}
|
|
87
100
|
|
|
101
|
+
const arr = bytes.subarray(0, 4);
|
|
102
|
+
let header = '';
|
|
103
|
+
// eslint-disable-next-line no-plusplus
|
|
104
|
+
for (let i = 0; i < arr.length; i++) {
|
|
105
|
+
header += arr[i].toString(16);
|
|
106
|
+
}
|
|
107
|
+
// 文件类型匹配
|
|
108
|
+
let type = null;
|
|
109
|
+
switch (header) {
|
|
110
|
+
case '89504e47':
|
|
111
|
+
type = 'image/png';
|
|
112
|
+
break;
|
|
113
|
+
case '47494638':
|
|
114
|
+
type = 'image/gif';
|
|
115
|
+
break;
|
|
116
|
+
case 'ffd8ffe0':
|
|
117
|
+
case 'ffd8ffe1':
|
|
118
|
+
case 'ffd8ffe2':
|
|
119
|
+
case 'ffd8ffe3':
|
|
120
|
+
case 'ffd8ffe8':
|
|
121
|
+
type = 'image/jpeg';
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
if (type?.startsWith('image/')) {
|
|
127
|
+
return PREVIEW_MODE.IMG;
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
};
|
|
88
133
|
// 判断是否是网络地址,是的话不调用后端接口预览
|
|
89
134
|
export const isUrlFormat = (id: string) =>
|
|
90
135
|
/^https?:\/\/[^\s/$.?#].[^\s]*$/i.test(id);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LingxiForwardRef } from '@lingxiteam/types';
|
|
2
2
|
import { Collapse } from 'antd';
|
|
3
3
|
import type { CollapsePanelProps } from 'antd/lib/collapse';
|
|
4
|
-
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
5
5
|
import CommIcon from '../Icon';
|
|
6
6
|
import type { PrefixIconIconProps } from '../Icon/PropsType';
|
|
7
7
|
import { useChildRenderContext } from '../utils';
|
|
@@ -61,7 +61,7 @@ const CollapsePanel = LingxiForwardRef<any, MyCollapsePanelProps>(
|
|
|
61
61
|
appId,
|
|
62
62
|
mode: 'engine',
|
|
63
63
|
});
|
|
64
|
-
const renderHeader = () => {
|
|
64
|
+
const renderHeader = useCallback(() => {
|
|
65
65
|
const headStyle: { backgroundColor?: string } = {};
|
|
66
66
|
if (headerColor) {
|
|
67
67
|
headStyle.backgroundColor = headerColor;
|
|
@@ -146,12 +146,13 @@ const CollapsePanel = LingxiForwardRef<any, MyCollapsePanelProps>(
|
|
|
146
146
|
</div>
|
|
147
147
|
);
|
|
148
148
|
}
|
|
149
|
-
};
|
|
149
|
+
}, [titleColor, header]);
|
|
150
150
|
|
|
151
151
|
renderRef.current = visible ? (
|
|
152
152
|
<Panel
|
|
153
153
|
{...restProps}
|
|
154
154
|
header={renderHeader()}
|
|
155
|
+
id={props.$$componentItem.uid}
|
|
155
156
|
key={currentProps?.key ?? currentIndex}
|
|
156
157
|
>
|
|
157
158
|
<div
|
|
@@ -172,8 +173,9 @@ const CollapsePanel = LingxiForwardRef<any, MyCollapsePanelProps>(
|
|
|
172
173
|
props.$$componentItem.uid,
|
|
173
174
|
renderRef,
|
|
174
175
|
);
|
|
175
|
-
}, [
|
|
176
|
+
}, []);
|
|
176
177
|
|
|
178
|
+
// TODO 暂时通过监听children解决循环列表内子控件未及时更新问题
|
|
177
179
|
useUpdateEffect(() => {
|
|
178
180
|
// 监听需要更新的属性
|
|
179
181
|
childRenderContext.update?.();
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class YieldMethod {
|
|
2
|
+
private cacheMap: {
|
|
3
|
+
methodName: string;
|
|
4
|
+
func: (...args: any[]) => any;
|
|
5
|
+
params?: any[];
|
|
6
|
+
}[] = [];
|
|
7
|
+
|
|
8
|
+
appendTo(methodName: string, func: (...args: any[]) => any, params?: any[]) {
|
|
9
|
+
this.cacheMap.push({
|
|
10
|
+
methodName,
|
|
11
|
+
func,
|
|
12
|
+
params,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
run(method?: string) {
|
|
17
|
+
let result = null;
|
|
18
|
+
|
|
19
|
+
this.cacheMap = this.cacheMap.filter(
|
|
20
|
+
({ func, params = [], methodName }) => {
|
|
21
|
+
if (!method || methodName === method) {
|
|
22
|
+
result = func?.(...params);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export default YieldMethod;
|
|
@@ -76,7 +76,13 @@ const DynamicDataContainer = LingxiForwardRef<any, DynamicDataContainerProps>(
|
|
|
76
76
|
const [pageData, setPageData] = useState<any>();
|
|
77
77
|
const dynamicHelperRef = useRef<ReturnType<typeof dynamicData2DSL>>();
|
|
78
78
|
|
|
79
|
-
const {
|
|
79
|
+
const {
|
|
80
|
+
dynamicPageRef,
|
|
81
|
+
staticAttrKeys,
|
|
82
|
+
yieldMethod,
|
|
83
|
+
readyComplete,
|
|
84
|
+
engineliftCycle,
|
|
85
|
+
} = useDynamicDataContainer({
|
|
80
86
|
dynamicHelper: dynamicHelperRef.current,
|
|
81
87
|
});
|
|
82
88
|
|
|
@@ -216,7 +222,12 @@ const DynamicDataContainer = LingxiForwardRef<any, DynamicDataContainerProps>(
|
|
|
216
222
|
return undefined;
|
|
217
223
|
},
|
|
218
224
|
setFieldsValue: (assignData: Record<string, unknown>) => {
|
|
219
|
-
|
|
225
|
+
if (readyComplete) {
|
|
226
|
+
return setFieldsValue(assignData, true);
|
|
227
|
+
}
|
|
228
|
+
return yieldMethod.appendTo('setFieldsValue', setFieldsValue, [
|
|
229
|
+
assignData,
|
|
230
|
+
]);
|
|
220
231
|
},
|
|
221
232
|
}));
|
|
222
233
|
|
|
@@ -289,7 +300,11 @@ const DynamicDataContainer = LingxiForwardRef<any, DynamicDataContainerProps>(
|
|
|
289
300
|
renderDynamicPage(
|
|
290
301
|
pageData,
|
|
291
302
|
{ uid: $$componentItem.uid },
|
|
292
|
-
{
|
|
303
|
+
{
|
|
304
|
+
ref: dynamicPageRef,
|
|
305
|
+
staticAttrKeys,
|
|
306
|
+
engineliftCycle,
|
|
307
|
+
},
|
|
293
308
|
)}
|
|
294
309
|
</DynamicDataProvider>
|
|
295
310
|
</Spin>
|
package/lib/pcpublic/src/components/pcfactory/src/DynamicDataContainer/useDynamicDataContainer.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { useEffect, useMemo, useRef } from 'react';
|
|
1
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import YieldMethod from './YieldMethod';
|
|
2
3
|
|
|
3
4
|
export const useDynamicDataContainer = ({
|
|
4
5
|
dynamicHelper,
|
|
@@ -6,6 +7,8 @@ export const useDynamicDataContainer = ({
|
|
|
6
7
|
dynamicHelper?: any;
|
|
7
8
|
}) => {
|
|
8
9
|
const dynamicPageRef = useRef<any>(null);
|
|
10
|
+
const [readyComplete, setReadyComplete] = useState(false);
|
|
11
|
+
const yieldMethod = useMemo(() => new YieldMethod(), []);
|
|
9
12
|
|
|
10
13
|
useEffect(() => {
|
|
11
14
|
dynamicHelper?.updateSandboxContext(
|
|
@@ -20,8 +23,18 @@ export const useDynamicDataContainer = ({
|
|
|
20
23
|
return [];
|
|
21
24
|
}, [dynamicHelper]);
|
|
22
25
|
|
|
26
|
+
const engineliftCycle = {
|
|
27
|
+
engineDidRender: () => {
|
|
28
|
+
setReadyComplete(true);
|
|
29
|
+
yieldMethod.run();
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
23
33
|
return {
|
|
24
34
|
dynamicPageRef,
|
|
25
35
|
staticAttrKeys,
|
|
36
|
+
yieldMethod,
|
|
37
|
+
readyComplete,
|
|
38
|
+
engineliftCycle,
|
|
26
39
|
};
|
|
27
40
|
};
|
|
@@ -39,6 +39,35 @@ const MyImg = React.forwardRef<any, MyImgProps>((props, ref) => {
|
|
|
39
39
|
const [imgSrc, setImgSrc] = useState<string>();
|
|
40
40
|
const [errorSrc, setErrorSrc] = useState<string>();
|
|
41
41
|
|
|
42
|
+
const setImgsrcWithSign = (src: string) => {
|
|
43
|
+
if (
|
|
44
|
+
src &&
|
|
45
|
+
(src.match('downloadFileByFileCode') || src.match('file/download')) &&
|
|
46
|
+
engineApis?.service?.buildXSignUrl
|
|
47
|
+
) {
|
|
48
|
+
// 如果是平台服务,统一添加或更新签名
|
|
49
|
+
if (src.match('X-SIGN=')) {
|
|
50
|
+
// 如果资源地址使用签名模式,需更新地址签名
|
|
51
|
+
setImgSrc(
|
|
52
|
+
engineApis.service.buildXSignUrl({
|
|
53
|
+
url: src.slice(0, src.indexOf('&X-SIGN')),
|
|
54
|
+
version: (window as any).lxSecurityModeInFile || '1.0',
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
} else {
|
|
58
|
+
// 添加签名
|
|
59
|
+
setImgSrc(
|
|
60
|
+
engineApis.service.buildXSignUrl({
|
|
61
|
+
url: src,
|
|
62
|
+
version: (window as any).lxSecurityModeInFile || '1.0',
|
|
63
|
+
}),
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
setImgSrc(src);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
42
71
|
useEffect(() => {
|
|
43
72
|
// srcType设置兼容存量数据,当存量数据无srcType时根据旧的资源优先级进行赋值
|
|
44
73
|
let mySrcType = srcType;
|
|
@@ -52,8 +81,11 @@ const MyImg = React.forwardRef<any, MyImgProps>((props, ref) => {
|
|
|
52
81
|
}
|
|
53
82
|
if (mySrcType === 'fileCode' && fileCode) {
|
|
54
83
|
setImgSrc(engineApis?.service?.getAppFileUrlByFileCode(fileCode));
|
|
84
|
+
} else if (/^\d+$/.test(src)) {
|
|
85
|
+
// 如果src为纯数字,则认为是文件id, 转换成平台文件地址
|
|
86
|
+
setImgSrc(engineApis?.service?.getAppFileUrlById(src));
|
|
55
87
|
} else {
|
|
56
|
-
|
|
88
|
+
setImgsrcWithSign(src);
|
|
57
89
|
}
|
|
58
90
|
}, [src, fileName, fileId, srcType, fileCode]);
|
|
59
91
|
|
|
@@ -68,7 +100,7 @@ const MyImg = React.forwardRef<any, MyImgProps>((props, ref) => {
|
|
|
68
100
|
|
|
69
101
|
useImperativeHandle(ref, () => ({
|
|
70
102
|
setSrc: (href: string) => {
|
|
71
|
-
|
|
103
|
+
setImgsrcWithSign(href);
|
|
72
104
|
},
|
|
73
105
|
setCompFileId: (fileId: string) => {
|
|
74
106
|
setImgSrc(engineApis?.service?.getAppFileUrlById(fileId));
|
|
@@ -166,6 +166,7 @@ const CheckBox = (item: {
|
|
|
166
166
|
{renderIcon({ checked, selectImg, normalImg, getAppFileUrlByFileCode })}
|
|
167
167
|
</div>
|
|
168
168
|
<div
|
|
169
|
+
onClick={() => onChange(item)}
|
|
169
170
|
className={classNames({
|
|
170
171
|
[`${loopListCls}-content`]: true,
|
|
171
172
|
[`${loopListCls}-content-lass`]: isFormCompat,
|
|
@@ -323,6 +324,7 @@ const MyGrid = (props: MyLoopList) => {
|
|
|
323
324
|
gridMode = true, // 存量数据为true
|
|
324
325
|
getEngineApis,
|
|
325
326
|
$$componentItem,
|
|
327
|
+
className,
|
|
326
328
|
...restProps
|
|
327
329
|
} = props;
|
|
328
330
|
|
|
@@ -424,7 +426,11 @@ const MyGrid = (props: MyLoopList) => {
|
|
|
424
426
|
const { MemoLoopItem, renderer, getLoopItemExtraProps } = MemoRenderer;
|
|
425
427
|
|
|
426
428
|
return (
|
|
427
|
-
<Row
|
|
429
|
+
<Row
|
|
430
|
+
gutter={[vspace, hspace]}
|
|
431
|
+
style={{ ...backgroundStyle, ...style }}
|
|
432
|
+
className={className}
|
|
433
|
+
>
|
|
428
434
|
{Array.isArray(gridData) &&
|
|
429
435
|
gridData.map((item, index) => {
|
|
430
436
|
const restItem = item || {};
|
|
@@ -450,9 +456,8 @@ const MyGrid = (props: MyLoopList) => {
|
|
|
450
456
|
},
|
|
451
457
|
...getLoopItemExtraProps?.(item, index),
|
|
452
458
|
};
|
|
453
|
-
|
|
454
459
|
return (
|
|
455
|
-
|
|
460
|
+
<React.Fragment key={gridViewIndex}>
|
|
456
461
|
{!props.disabled ? (
|
|
457
462
|
<WrapperEditorComp>
|
|
458
463
|
<EditorComp
|
|
@@ -494,7 +499,7 @@ const MyGrid = (props: MyLoopList) => {
|
|
|
494
499
|
</DisabledComps>
|
|
495
500
|
</WrapperDisableComps>
|
|
496
501
|
)}
|
|
497
|
-
|
|
502
|
+
</React.Fragment>
|
|
498
503
|
);
|
|
499
504
|
})}
|
|
500
505
|
</Row>
|
|
@@ -64,7 +64,14 @@ const BaseModalSelect = (props: any) => {
|
|
|
64
64
|
);
|
|
65
65
|
}}
|
|
66
66
|
onClick={(e) => {
|
|
67
|
-
!disabled
|
|
67
|
+
if (!disabled) {
|
|
68
|
+
// 图标点击事件优先级最高,其次才是打开默认属性弹窗
|
|
69
|
+
if (onIconClick) {
|
|
70
|
+
onIconClick();
|
|
71
|
+
} else {
|
|
72
|
+
handleClickVisible();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
68
75
|
e.stopPropagation();
|
|
69
76
|
}}
|
|
70
77
|
style={{
|
|
@@ -260,29 +260,43 @@ const FormUpload = LingxiForwardRef<any, MyFormUploadProps>((props, ref) => {
|
|
|
260
260
|
defaultList.map((file: any) => {
|
|
261
261
|
const { fileUrl, url, filePathInServer, fileId } = file;
|
|
262
262
|
let effectDownUrl = fileUrl || url;
|
|
263
|
+
// 兼容外部数据使用filePathInServer字段
|
|
263
264
|
if (
|
|
264
265
|
!effectDownUrl &&
|
|
265
266
|
filePathInServer?.match(/^(http:|https:|\/\/)/)
|
|
266
267
|
) {
|
|
267
268
|
effectDownUrl = filePathInServer;
|
|
268
269
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
270
|
+
|
|
271
|
+
// 资源地址签名处理
|
|
272
|
+
if (effectDownUrl && engineApis.service?.buildXSignUrl) {
|
|
273
|
+
if (effectDownUrl.match('X-SIGN=')) {
|
|
274
|
+
// 如果资源地址使用签名模式,需更新地址签名
|
|
275
|
+
effectDownUrl = engineApis.service.buildXSignUrl({
|
|
276
|
+
url: effectDownUrl.slice(0, effectDownUrl.indexOf('&X-SIGN')),
|
|
277
|
+
version: (window as any).lxSecurityModeInFile || '1.0',
|
|
278
|
+
});
|
|
279
|
+
} else {
|
|
280
|
+
// 添加签名
|
|
281
|
+
effectDownUrl = engineApis.service.buildXSignUrl({
|
|
282
|
+
url: effectDownUrl,
|
|
283
|
+
version: (window as any).lxSecurityModeInFile || '1.0',
|
|
284
|
+
});
|
|
285
|
+
}
|
|
278
286
|
}
|
|
287
|
+
|
|
288
|
+
const finallyUrl =
|
|
289
|
+
effectDownUrl || engineApis?.service?.getAppFileUrlById(fileId);
|
|
290
|
+
const finallyUrlWithoutSign = finallyUrl.match('X-SIGN=')
|
|
291
|
+
? finallyUrl.slice(0, finallyUrl.indexOf('&X-SIGN'))
|
|
292
|
+
: finallyUrl;
|
|
279
293
|
return {
|
|
280
294
|
...file,
|
|
281
|
-
url:
|
|
282
|
-
effectDownUrl || engineApis?.service?.getAppFileUrlById(fileId),
|
|
295
|
+
url: finallyUrl,
|
|
283
296
|
name: file.fileName,
|
|
284
297
|
uid: `-${file.fileId || file.id || effectDownUrl || file.uid}`, // 添加uid
|
|
285
298
|
status: file?.status || 'done', // 后台已存在文件状态为已完成
|
|
299
|
+
fileUrl: file.fileUrl || finallyUrlWithoutSign, // 补充一个没有签名的url地址, 业务数据里使用的应是不带签名的
|
|
286
300
|
};
|
|
287
301
|
}),
|
|
288
302
|
);
|
|
@@ -348,19 +362,26 @@ const FormUpload = LingxiForwardRef<any, MyFormUploadProps>((props, ref) => {
|
|
|
348
362
|
} = resultObject;
|
|
349
363
|
const { status } = f;
|
|
350
364
|
let effectDownUrl = fileUrl || url;
|
|
365
|
+
// 兼容外部数据使用filePathInServer字段
|
|
351
366
|
if (
|
|
352
367
|
!effectDownUrl &&
|
|
353
368
|
filePathInServer?.match(/^(http:|https:|\/\/)/)
|
|
354
369
|
) {
|
|
355
370
|
effectDownUrl = filePathInServer;
|
|
356
371
|
}
|
|
372
|
+
|
|
373
|
+
const finallyUrl =
|
|
374
|
+
effectDownUrl || engineApis?.service?.getAppFileUrlById(fileId);
|
|
375
|
+
const finallyUrlWithoutSign = finallyUrl.match('X-SIGN=')
|
|
376
|
+
? finallyUrl.slice(0, finallyUrl.indexOf('&X-SIGN'))
|
|
377
|
+
: finallyUrl;
|
|
357
378
|
return {
|
|
358
379
|
...f,
|
|
359
380
|
...resultObject,
|
|
360
381
|
name: handleFileName(f.name),
|
|
361
382
|
status: +resultCode !== 0 ? 'error' : status,
|
|
362
|
-
url:
|
|
363
|
-
|
|
383
|
+
url: finallyUrl,
|
|
384
|
+
fileUrl: file.fileUrl || finallyUrlWithoutSign,
|
|
364
385
|
};
|
|
365
386
|
}
|
|
366
387
|
}
|
|
@@ -472,6 +493,11 @@ const FormUpload = LingxiForwardRef<any, MyFormUploadProps>((props, ref) => {
|
|
|
472
493
|
addWaterMark,
|
|
473
494
|
fileId: file.fileId,
|
|
474
495
|
});
|
|
496
|
+
} else if (engineApis?.service?.buildXSignUrl) {
|
|
497
|
+
downUrl = engineApis.service.buildXSignUrl({
|
|
498
|
+
url: downUrl,
|
|
499
|
+
version: (window as any).lxSecurityModeInFile || '1.0',
|
|
500
|
+
});
|
|
475
501
|
}
|
|
476
502
|
} catch (error) {
|
|
477
503
|
console.error(error);
|