@cloudbase/weda-ui 3.4.5 → 3.4.6
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/dist/configs/components/form/input.json +48 -2
- package/dist/configs/components/form/richText.json +2 -1
- package/dist/configs/components/form/uploader.json +62 -14
- package/dist/configs/components/grid/col.js +4 -1
- package/dist/configs/components/grid/grid.js +8 -3
- package/dist/configs/components/grid/row.js +51 -3
- package/dist/configs/components/repeater.js +4 -1
- package/dist/configs/components/table.json +1 -0
- package/dist/configs/components/wd-bubble.js +6 -0
- package/dist/configs/components/wd-button.js +6 -0
- package/dist/configs/components/wd-divider.js +7 -18
- package/dist/configs/components/wd-icon.js +7 -0
- package/dist/configs/components/wd-image.js +7 -0
- package/dist/configs/components/wd-link.js +7 -2
- package/dist/configs/components/wd-text.js +14 -6
- package/dist/configs/index.js +0 -2
- package/dist/docs/common/componentList.js +1 -1
- package/dist/web/actions/showModal/index.js +1 -1
- package/dist/web/components/calendar/index.js +2 -2
- package/dist/web/components/flow/components/index.js +0 -4
- package/dist/web/components/flow/frame/index.js +4 -3
- package/dist/web/components/flow/frame/types.js +11 -5
- package/dist/web/components/flow/frame/utils.js +60 -1
- package/dist/web/components/flow/modules/chart/Chart.js +2 -3
- package/dist/web/components/flow/modules/combination/index.js +1 -1
- package/dist/web/components/flow/modules/operations/components/button/index.js +11 -0
- package/dist/web/components/flow/modules/operations/components/button/style.css +5 -0
- package/dist/web/components/flow/modules/operations/components/index.js +6 -0
- package/dist/web/components/flow/modules/operations/components/popup/index.js +100 -0
- package/dist/web/components/flow/modules/operations/components/popup/style.css +154 -0
- package/dist/web/components/flow/modules/operations/components/popup/types.js +1 -0
- package/dist/web/components/flow/modules/operations/components/user-select/index.js +43 -0
- package/dist/web/components/flow/modules/operations/components/user-select/style.css +4 -0
- package/dist/web/components/flow/modules/operations/components/user-select/types.js +1 -0
- package/dist/web/components/flow/modules/operations/config/approval-form-config.js +140 -0
- package/dist/web/components/flow/modules/operations/config/control-config.js +218 -0
- package/dist/web/components/flow/modules/operations/config/index.js +2 -0
- package/dist/web/components/flow/modules/operations/config/types.js +1 -0
- package/dist/web/components/flow/modules/operations/control.js +26 -0
- package/dist/web/components/flow/modules/operations/controls-items/add-assignee-btn.js +33 -0
- package/dist/web/components/flow/modules/operations/controls-items/apply-cc-btn.js +12 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/index.js +188 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/style.css +51 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/index.js +64 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/types.js +1 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/view-model.js +83 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/index.js +16 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/style.css +56 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/index.js +47 -0
- package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/style.css +60 -0
- package/dist/web/components/flow/modules/operations/controls-items/cancel-apply-btn.js +15 -0
- package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/index.js +11 -0
- package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/style.css +26 -0
- package/dist/web/components/flow/modules/operations/controls-items/flow-task-info-modal.js +98 -0
- package/dist/web/components/flow/modules/operations/controls-items/index.js +18 -0
- package/dist/web/components/flow/modules/operations/controls-items/initiation-btn.js +25 -0
- package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/index.js +50 -0
- package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/style.css +28 -0
- package/dist/web/components/flow/modules/operations/controls-items/roll-back-modal.js +104 -0
- package/dist/web/components/flow/modules/operations/controls-items/types.js +1 -0
- package/dist/web/components/flow/modules/operations/index.js +2 -0
- package/dist/web/components/flow/modules/operations/style.css +20 -0
- package/dist/web/components/flow/modules/operations/view-model.js +137 -0
- package/dist/web/components/flow/services/ideData/instance.js +2 -2
- package/dist/web/components/flow/services/ideData/pageDetail.js +1 -0
- package/dist/web/components/form/uploader/index.css +19 -0
- package/dist/web/components/form/uploader/index.js +21 -3
- package/dist/web/components/form/uploader/uploader.h5.js +14 -8
- package/dist/web/components/form/uploader/uploader.pc.js +29 -16
- package/dist/web/components/form/uploaderFile/index.css +5 -2
- package/dist/web/components/form/uploaderFile/uploadFile.h5.js +15 -12
- package/dist/web/components/form/uploaderFile/uploadFile.pc.js +11 -8
- package/dist/web/components/form/userOrgSelect/common/fetch-data-service.js +0 -1
- package/dist/web/components/form/userOrgSelect/component/depart-select/index.js +1 -1
- package/dist/web/components/form/userOrgSelect/component/user-select-h5/index.js +9 -5
- package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-select-h5.js +4 -2
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +2 -2
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-select-pc.js +4 -2
- package/dist/web/components/grid/col.js +81 -18
- package/dist/web/components/grid/grid.js +1 -1
- package/dist/web/components/grid/row.js +4 -2
- package/dist/web/components/index.js +1 -1
- package/dist/web/components/listView/index.js +4 -3
- package/dist/web/components/lottery/index.js +122 -123
- package/dist/web/components/table/ExportFileModalByApi/index.js +1 -1
- package/dist/web/components/table/ImportFileModal/index.js +1 -1
- package/dist/web/components/table/ImportFileModalByApi/index.js +1 -1
- package/dist/web/components/wd-bubble/wd-bubble.js +11 -3
- package/dist/web/components/wd-button/wd-button.js +22 -13
- package/dist/web/components/wd-divider/wd-divider.js +10 -7
- package/dist/web/components/wd-icon/wd-icon.js +12 -3
- package/dist/web/components/wd-image/index.js +12 -5
- package/dist/web/components/wd-link/wd-link.js +11 -3
- package/dist/web/components/wd-text/wd-text.js +15 -3
- package/dist/web/utils/hooks/use-cloud-id-temp-url.js +7 -3
- package/dist/web/utils/platform.js +0 -1
- package/dist/web/utils/tool.js +11 -0
- package/dist/web/utils/widget-api/index.js +3 -0
- package/package.json +5 -3
- package/dist/configs/components/auth.json +0 -17
- package/dist/web/components/flow/components/FlowUserSelect/index.css +0 -116
- package/dist/web/components/flow/components/FlowUserSelect/index.js +0 -115
- package/dist/web/components/flow/components/HighlightTextarea/index.css +0 -42
- package/dist/web/components/flow/components/HighlightTextarea/index.js +0 -131
- package/dist/web/components/flow/components/UserSelectModel/UserSelect.js +0 -72
- package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.css +0 -8
- package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.js +0 -82
- package/dist/web/components/flow/components/UserSelectModel/index.js +0 -18
- package/dist/web/components/flow/components/WedaUserTransfer/index.css +0 -3
- package/dist/web/components/flow/components/WedaUserTransfer/index.js +0 -162
- package/dist/web/components/flow/modules/control/ApprovalDrawer.css +0 -144
- package/dist/web/components/flow/modules/control/ApprovalDrawer.js +0 -178
- package/dist/web/components/flow/modules/control/ApprovalPopup.css +0 -115
- package/dist/web/components/flow/modules/control/ApprovalPopup.js +0 -240
- package/dist/web/components/flow/modules/control/Control.css +0 -29
- package/dist/web/components/flow/modules/control/Control.js +0 -105
- package/dist/web/components/flow/modules/control/ControlMobile.css +0 -101
- package/dist/web/components/flow/modules/control/ControlMobile.js +0 -148
- package/dist/web/components/flow/modules/control/FlowTaskInfoModal.css +0 -3
- package/dist/web/components/flow/modules/control/FlowTaskInfoModal.js +0 -31
- package/dist/web/components/flow/modules/control/constants/index.js +0 -35
- package/dist/web/components/flow/modules/control/index.js +0 -15
- package/dist/web/components/flow/modules/control/provider/index.js +0 -17
- package/dist/web/components/flow/modules/control/provider/useControlModel.js +0 -252
- package/dist/web/components/flow/modules/control/provider/useMobileModel.js +0 -84
- package/dist/web/components/flow/modules/control/provider/useRevokeAndBackHook.js +0 -84
- package/dist/web/components/flow/modules/control/utils/ControlModelUtils.js +0 -57
- package/dist/web/components/flow/modules/control/utils/index.js +0 -3
- package/dist/web/components/flow/modules/control/utils/tools.js +0 -3
package/dist/web/utils/tool.js
CHANGED
|
@@ -107,3 +107,14 @@ export const getFieldsTypeName = (fields) => {
|
|
|
107
107
|
return item;
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* 从 props 中取出 on 开头的
|
|
112
|
+
*/
|
|
113
|
+
export const filterPropsWithOn = (props) => {
|
|
114
|
+
return Object.keys(props).reduce((acc, cur) => {
|
|
115
|
+
if (cur.startsWith('on')) {
|
|
116
|
+
acc[cur] = props[cur];
|
|
117
|
+
}
|
|
118
|
+
return acc;
|
|
119
|
+
}, {});
|
|
120
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/weda-ui",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.6",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index",
|
|
6
6
|
"miniprogram": "mpdist",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"react-error-boundary": "^3.1.4",
|
|
84
84
|
"react-highlight-within-textarea": "3.1.1",
|
|
85
85
|
"react-infinite-scroll-component": "6.1.0",
|
|
86
|
-
"react-
|
|
86
|
+
"react-transition-group": "^4.4.5",
|
|
87
87
|
"spark-md5": "^3.0.2",
|
|
88
88
|
"swr": "^2.0.3",
|
|
89
89
|
"tdesign-icons-react": "0.0.8",
|
|
@@ -103,6 +103,8 @@
|
|
|
103
103
|
"@babel/preset-typescript": "^7.18.6",
|
|
104
104
|
"@cloudbase/cals": "^0.5.1-beta.8",
|
|
105
105
|
"@cloudbase/lowcode-cli": "^0.18.3",
|
|
106
|
+
"@cloudbase/weda-client": "^0.2.45",
|
|
107
|
+
"@cloudbase/weda-cloud-sdk": "^1.0.26",
|
|
106
108
|
"@commitlint/cli": "^16.0.2",
|
|
107
109
|
"@commitlint/config-conventional": "^17.0.0",
|
|
108
110
|
"@craco/craco": "^7.0.0-alpha.7",
|
|
@@ -167,7 +169,7 @@
|
|
|
167
169
|
"jest-preview": "^0.2.6",
|
|
168
170
|
"json-schema-to-ts": "^2.5.5",
|
|
169
171
|
"make-fetch-happen": "^11.0.1",
|
|
170
|
-
"miniprogram-simulate": "^1.5.
|
|
172
|
+
"miniprogram-simulate": "^1.5.8",
|
|
171
173
|
"mkdirp": "^1.0.4",
|
|
172
174
|
"mochawesome": "^7.1.3",
|
|
173
175
|
"mochawesome-merge": "^4.2.1",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://comp-public-1303824488.cos.ap-shanghai.myqcloud.com/schema/lcds_component.json",
|
|
3
|
-
"data": {
|
|
4
|
-
"properties": {}
|
|
5
|
-
},
|
|
6
|
-
"events": [],
|
|
7
|
-
"meta": {
|
|
8
|
-
"name": "Auth",
|
|
9
|
-
"title": "登录",
|
|
10
|
-
"description": "登录组件",
|
|
11
|
-
"icon": "./auth.svg",
|
|
12
|
-
"category": "开放能力",
|
|
13
|
-
"categoryOrder": 1,
|
|
14
|
-
"componentOrder": 1,
|
|
15
|
-
"visible": []
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
.flow-user-select-mobile {
|
|
2
|
-
height: calc(100% - 52px);
|
|
3
|
-
}
|
|
4
|
-
.flow-user-select-mobile .page-info__wrapper-mobile {
|
|
5
|
-
position: relative;
|
|
6
|
-
height: 100%;
|
|
7
|
-
background: #f2f2f2;
|
|
8
|
-
}
|
|
9
|
-
.flow-user-select-mobile .page-info__wrapper-mobile .wedatea2td-table {
|
|
10
|
-
height: calc(100% - 200px) !important;
|
|
11
|
-
}
|
|
12
|
-
.flow-user-select-mobile
|
|
13
|
-
.page-info__wrapper-mobile
|
|
14
|
-
.wedatea2td-table
|
|
15
|
-
.wedatea2td-table__body {
|
|
16
|
-
max-height: calc(100% - 50px) !important;
|
|
17
|
-
}
|
|
18
|
-
.flow-user-select-mobile .page-info__wrapper-mobile footer.selected-info {
|
|
19
|
-
position: absolute;
|
|
20
|
-
bottom: 0;
|
|
21
|
-
left: 0;
|
|
22
|
-
right: 0;
|
|
23
|
-
height: 90px;
|
|
24
|
-
padding: 12px 16px 0 20px;
|
|
25
|
-
box-sizing: border-box;
|
|
26
|
-
background: #fff;
|
|
27
|
-
}
|
|
28
|
-
.flow-user-select-mobile
|
|
29
|
-
.page-info__wrapper-mobile
|
|
30
|
-
footer.selected-info
|
|
31
|
-
.selected-info__left
|
|
32
|
-
.selected-count {
|
|
33
|
-
font-size: 14px;
|
|
34
|
-
color: #2473f2;
|
|
35
|
-
}
|
|
36
|
-
.flow-user-select-mobile
|
|
37
|
-
.page-info__wrapper-mobile
|
|
38
|
-
footer.selected-info
|
|
39
|
-
.selected-info__left
|
|
40
|
-
.selected-people {
|
|
41
|
-
font-size: 12px;
|
|
42
|
-
color: #c2c2c2;
|
|
43
|
-
max-width: 200px;
|
|
44
|
-
text-overflow: ellipsis;
|
|
45
|
-
overflow: hidden;
|
|
46
|
-
white-space: nowrap;
|
|
47
|
-
}
|
|
48
|
-
.flow-user-select-mobile
|
|
49
|
-
.page-info__wrapper-mobile
|
|
50
|
-
footer.selected-info
|
|
51
|
-
.selected-info__left
|
|
52
|
-
.collapse-spread {
|
|
53
|
-
display: inline-block;
|
|
54
|
-
margin-left: 16px;
|
|
55
|
-
width: 8px;
|
|
56
|
-
height: 8px;
|
|
57
|
-
border: none;
|
|
58
|
-
border-top: 2px solid #2473f2;
|
|
59
|
-
border-right: 2px solid #2473f2;
|
|
60
|
-
transform: rotate(-45deg);
|
|
61
|
-
vertical-align: middle;
|
|
62
|
-
}
|
|
63
|
-
.flow-user-select-mobile
|
|
64
|
-
.page-info__wrapper-mobile
|
|
65
|
-
footer.selected-info
|
|
66
|
-
.submit-btn {
|
|
67
|
-
width: 94px;
|
|
68
|
-
height: 40px;
|
|
69
|
-
border-radius: 4px;
|
|
70
|
-
background: #2473f2;
|
|
71
|
-
}
|
|
72
|
-
.flow-user-select-mobile .page-info__wrapper-mobile .loading-dom__wrapper {
|
|
73
|
-
height: calc(100% - 150px);
|
|
74
|
-
display: flex;
|
|
75
|
-
justify-content: space-around;
|
|
76
|
-
align-items: center;
|
|
77
|
-
background: #fff;
|
|
78
|
-
}
|
|
79
|
-
.SelectPersonOrg-popup .selected-title {
|
|
80
|
-
position: sticky;
|
|
81
|
-
top: 0;
|
|
82
|
-
padding: 0 20px;
|
|
83
|
-
height: 40px;
|
|
84
|
-
line-height: 40px;
|
|
85
|
-
display: flex;
|
|
86
|
-
justify-content: space-between;
|
|
87
|
-
border-bottom: 1px solid #dcdee6;
|
|
88
|
-
}
|
|
89
|
-
.SelectPersonOrg-popup .selected-title .tea-btn {
|
|
90
|
-
font-size: 16px;
|
|
91
|
-
}
|
|
92
|
-
.SelectPersonOrg-popup .selected-title .tea-btn--text {
|
|
93
|
-
color: #666;
|
|
94
|
-
}
|
|
95
|
-
.SelectPersonOrg-popup .selected-title .tea-btn--link {
|
|
96
|
-
color: #006eff;
|
|
97
|
-
}
|
|
98
|
-
.SelectPersonOrg-popup .selected-title span {
|
|
99
|
-
font-size: 14px;
|
|
100
|
-
}
|
|
101
|
-
.SelectPersonOrg-popup .selected-person {
|
|
102
|
-
height: calc(100% - 41px);
|
|
103
|
-
padding: 0 20px;
|
|
104
|
-
overflow-y: auto;
|
|
105
|
-
}
|
|
106
|
-
.SelectPersonOrg-popup .selected-person .tea-justify-grid {
|
|
107
|
-
height: 40px;
|
|
108
|
-
line-height: 40px;
|
|
109
|
-
border-bottom: 1px solid #dcdee6;
|
|
110
|
-
}
|
|
111
|
-
.SelectPersonOrg-popup
|
|
112
|
-
.selected-person
|
|
113
|
-
.tea-justify-grid
|
|
114
|
-
.selected-person__name {
|
|
115
|
-
font-size: 14px;
|
|
116
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
|
2
|
-
import React, { useState, useEffect, useMemo } from 'react';
|
|
3
|
-
import { Justify, Button, Icon } from 'tea-component';
|
|
4
|
-
import { Popup } from 'react-vant';
|
|
5
|
-
import { safeJsonParse } from '../../../../utils/tool';
|
|
6
|
-
import { WedaUserTransfer } from '../WedaUserTransfer';
|
|
7
|
-
import './index.css';
|
|
8
|
-
export const FlowUserSelect = (props) => {
|
|
9
|
-
const { visible, approveField, mode, close } = props;
|
|
10
|
-
const [selected, setSelected] = useState([]);
|
|
11
|
-
const [selectedUser, setSelectedUser] = useState([]);
|
|
12
|
-
const [collapse, setCollapseStatus] = useState(true);
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
document.title = '选择人员';
|
|
15
|
-
const selectedAvatar = sessionStorage.getItem('selected');
|
|
16
|
-
selectedAvatar && setSelected(safeJsonParse(selectedAvatar || '[]'));
|
|
17
|
-
}, []);
|
|
18
|
-
const selectedLen = useMemo(() => selected.length, [selected]);
|
|
19
|
-
const removeId = (id) => {
|
|
20
|
-
setSelected(selected.filter((item) => item !== id));
|
|
21
|
-
setSelectedUser(selectedUser.filter((item) => (item === null || item === void 0 ? void 0 : item.UserId) !== id));
|
|
22
|
-
};
|
|
23
|
-
const handleHighLightSelected = (selected, flowData) => {
|
|
24
|
-
let v = '';
|
|
25
|
-
const { opinionUserMap, approveInfo } = flowData;
|
|
26
|
-
selected.forEach((id) => {
|
|
27
|
-
const user = selectedUser.find((user) => (user === null || user === void 0 ? void 0 : user.UserId) === id) || {};
|
|
28
|
-
const name = `@${user === null || user === void 0 ? void 0 : user.Name}`;
|
|
29
|
-
v = `${v + name} `;
|
|
30
|
-
if (!opinionUserMap[id]) {
|
|
31
|
-
opinionUserMap[id] = name;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
flowData.approveInfo = approveInfo + v;
|
|
35
|
-
flowData.opinionUserMap = { ...opinionUserMap };
|
|
36
|
-
};
|
|
37
|
-
const saveSelect = () => {
|
|
38
|
-
var _a;
|
|
39
|
-
const flowData = (_a = safeJsonParse(sessionStorage.getItem('FlowActionsMobile'))) !== null && _a !== void 0 ? _a : {};
|
|
40
|
-
if (approveField === 'assigneeIds') {
|
|
41
|
-
flowData.assigneeIds = selected;
|
|
42
|
-
sessionStorage.setItem('hasSignSubmit', 'hasSignSubmit');
|
|
43
|
-
}
|
|
44
|
-
else if (approveField === 'highLightApprovers') {
|
|
45
|
-
handleHighLightSelected(selected, flowData);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
flowData[approveField] = selected;
|
|
49
|
-
}
|
|
50
|
-
sessionStorage.setItem('FlowActionsMobile', JSON.stringify(flowData));
|
|
51
|
-
sessionStorage.setItem(approveField, JSON.stringify(selectedUser));
|
|
52
|
-
// history.go(-1);
|
|
53
|
-
close === null || close === void 0 ? void 0 : close();
|
|
54
|
-
};
|
|
55
|
-
const onWedaUserSelectChange = ({ keys, rows }) => {
|
|
56
|
-
setSelected(keys);
|
|
57
|
-
setSelectedUser(rows);
|
|
58
|
-
};
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
let lastTouchEnd = 0;
|
|
61
|
-
const touchstartFn = (event) => {
|
|
62
|
-
if (event.touches.length > 1) {
|
|
63
|
-
event.preventDefault();
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
const touchendFn = (event) => {
|
|
67
|
-
const now = new Date().getTime();
|
|
68
|
-
if (now - lastTouchEnd <= 300) {
|
|
69
|
-
event.preventDefault();
|
|
70
|
-
}
|
|
71
|
-
lastTouchEnd = now;
|
|
72
|
-
};
|
|
73
|
-
const gesturestartFn = (event) => {
|
|
74
|
-
event.preventDefault();
|
|
75
|
-
};
|
|
76
|
-
document.addEventListener('touchstart', touchstartFn);
|
|
77
|
-
document.addEventListener('touchend', touchendFn, false);
|
|
78
|
-
// 阻止双指放大
|
|
79
|
-
document.addEventListener('gesturestart', gesturestartFn);
|
|
80
|
-
return () => {
|
|
81
|
-
document.removeEventListener('touchstart', touchstartFn);
|
|
82
|
-
document.removeEventListener('touchend', touchendFn);
|
|
83
|
-
document.removeEventListener('gesturestart', gesturestartFn);
|
|
84
|
-
};
|
|
85
|
-
}, []);
|
|
86
|
-
return (React.createElement(Popup, { visible: visible, position: "bottom", className: "flow-user-select-mobile" },
|
|
87
|
-
React.createElement("section", { className: "page-info__wrapper-mobile" },
|
|
88
|
-
React.createElement(WedaUserTransfer, { multiple: mode === 'multiple', isMobile: true, onSelectedChange: onWedaUserSelectChange, value: selected, className: "flow-user-select-mobile-table" }),
|
|
89
|
-
React.createElement("footer", { className: "selected-info" },
|
|
90
|
-
React.createElement(Justify, { left: React.createElement("div", { className: "selected-info__left" },
|
|
91
|
-
React.createElement("p", { className: "selected-count", onClick: () => setCollapseStatus(false) },
|
|
92
|
-
React.createElement("span", { style: { display: 'inline-block' } },
|
|
93
|
-
"\u5DF2\u9009\uFF1A",
|
|
94
|
-
selectedLen,
|
|
95
|
-
"\u4EBA"),
|
|
96
|
-
React.createElement("span", { className: "collapse-spread" })),
|
|
97
|
-
React.createElement("p", { className: "selected-people" }, selectedUser.map((item) => item === null || item === void 0 ? void 0 : item.Name).join(','))), right: React.createElement(React.Fragment, null,
|
|
98
|
-
React.createElement(Button, { className: "submit-btn", type: "primary", onClick: saveSelect },
|
|
99
|
-
"\u786E\u8BA4(",
|
|
100
|
-
selectedLen,
|
|
101
|
-
")"),
|
|
102
|
-
React.createElement(Button, { type: "link", onClick: () => {
|
|
103
|
-
close === null || close === void 0 ? void 0 : close();
|
|
104
|
-
} }, "\u5173\u95ED")) })),
|
|
105
|
-
React.createElement(Popup, { className: "SelectPersonOrg-popup", visible: !collapse, position: "bottom", style: { height: '440px' } },
|
|
106
|
-
React.createElement(React.Fragment, null,
|
|
107
|
-
React.createElement("p", { className: "selected-title" },
|
|
108
|
-
React.createElement(Button, { type: "text", onClick: () => setCollapseStatus(true) }, "\u53D6\u6D88"),
|
|
109
|
-
React.createElement("span", null,
|
|
110
|
-
"\u5DF2\u9009\uFF1A",
|
|
111
|
-
selectedLen,
|
|
112
|
-
"\u4EBA"),
|
|
113
|
-
React.createElement(Button, { type: "link", onClick: saveSelect }, "\u5B8C\u6210")),
|
|
114
|
-
React.createElement("div", { className: "selected-person" }, selectedUser.map((item) => (React.createElement(Justify, { key: item === null || item === void 0 ? void 0 : item.UserId, left: React.createElement("span", { className: "selected-person__name" }, item === null || item === void 0 ? void 0 : item.Name), right: React.createElement(Icon, { onClick: () => removeId(item === null || item === void 0 ? void 0 : item.UserId), type: "dismiss" }) })))))))));
|
|
115
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
.highlight-textarea-content {
|
|
2
|
-
display: inline-block;
|
|
3
|
-
width: 100%;
|
|
4
|
-
}
|
|
5
|
-
.highlight-textarea {
|
|
6
|
-
position: relative;
|
|
7
|
-
height: 100px;
|
|
8
|
-
border: 1px solid #dcdee6;
|
|
9
|
-
text-align: left;
|
|
10
|
-
overflow: scroll;
|
|
11
|
-
display: inline-block;
|
|
12
|
-
width: 99%;
|
|
13
|
-
margin-bottom: -5px;
|
|
14
|
-
}
|
|
15
|
-
.highlight-textarea .public-DraftEditorPlaceholder-root {
|
|
16
|
-
display: none;
|
|
17
|
-
}
|
|
18
|
-
.highlight-textarea .DraftEditor-root {
|
|
19
|
-
position: absolute;
|
|
20
|
-
width: 100%;
|
|
21
|
-
z-index: 1;
|
|
22
|
-
}
|
|
23
|
-
.highlight-textarea .DraftEditor-root .DraftEditor-editorContainer {
|
|
24
|
-
padding: 5px;
|
|
25
|
-
height: 6em;
|
|
26
|
-
}
|
|
27
|
-
.highlight-textarea
|
|
28
|
-
.DraftEditor-root
|
|
29
|
-
.DraftEditor-editorContainer
|
|
30
|
-
.public-DraftEditor-content {
|
|
31
|
-
height: 100%;
|
|
32
|
-
}
|
|
33
|
-
.highlight-textarea .DraftEditor-root .DraftEditor-editorContainer mark {
|
|
34
|
-
color: #888888;
|
|
35
|
-
background: transparent;
|
|
36
|
-
}
|
|
37
|
-
.highlight-textarea .highlight-textarea-placeholder {
|
|
38
|
-
position: absolute;
|
|
39
|
-
z-index: 0;
|
|
40
|
-
margin: 5px;
|
|
41
|
-
color: #999999;
|
|
42
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
-
import HighlightWithinTextarea from 'react-highlight-within-textarea';
|
|
3
|
-
import { UserSelectModel } from '../UserSelectModel';
|
|
4
|
-
import './index.css';
|
|
5
|
-
export const HighlightTextarea = ({ size = 'pc', placeholder = '请输入', value, onChange, opinionUserMap, setOpinionUserMap, setHighlightPositionMap, }) => {
|
|
6
|
-
const [selectPersonModalShow, setSelectPersonModalShow] = useState(false);
|
|
7
|
-
const range = useRef();
|
|
8
|
-
const [placeholderVisible, setPlaceholderVisible] = useState(!value);
|
|
9
|
-
const [highlightPositions, setHighlightPositions] = useState([]);
|
|
10
|
-
const [copyMsg, setCopyMsg] = useState('');
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (!value) {
|
|
13
|
-
setPlaceholderVisible(true);
|
|
14
|
-
setOpinionUserMap({});
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
setPlaceholderVisible(false);
|
|
18
|
-
const { res: highlightPositions, obj: highlightPositionObj } = checkHighLight(value);
|
|
19
|
-
setHighlightPositions([...highlightPositions]);
|
|
20
|
-
setHighlightPositionMap({ ...highlightPositionObj });
|
|
21
|
-
const newOpinionUserMap = {};
|
|
22
|
-
// value每次change后需要再次检查opinionUserMap
|
|
23
|
-
for (const [id, name] of Object.entries(opinionUserMap)) {
|
|
24
|
-
if (value.indexOf(name) !== -1) {
|
|
25
|
-
newOpinionUserMap[id] = name;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
setOpinionUserMap(newOpinionUserMap);
|
|
29
|
-
}, [value]);
|
|
30
|
-
const checkHighLight = (text) => {
|
|
31
|
-
const highlightList = Object.values(opinionUserMap);
|
|
32
|
-
const len = highlightList.length;
|
|
33
|
-
let v = text;
|
|
34
|
-
let res = [];
|
|
35
|
-
// 回显时使用,必须顺序排列
|
|
36
|
-
let obj = {};
|
|
37
|
-
for (let i = 0; i < len; i++) {
|
|
38
|
-
const indexof = v.indexOf(highlightList[i]);
|
|
39
|
-
const itemLen = highlightList[i].length;
|
|
40
|
-
if (indexof !== -1) {
|
|
41
|
-
const endIndex = indexof + itemLen;
|
|
42
|
-
res.push([indexof, endIndex]);
|
|
43
|
-
obj[indexof] = endIndex;
|
|
44
|
-
const fillText = new Array(itemLen).fill(' ').join(''); // 空格填充
|
|
45
|
-
v = v.substring(0, indexof) + fillText + v.substring(endIndex);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (res.length > 0 && v.includes('@')) {
|
|
49
|
-
// 继续检查剩下文本,是否存在重复@
|
|
50
|
-
const { res: arr, obj: objCopy } = checkHighLight(v);
|
|
51
|
-
res = res.concat(arr);
|
|
52
|
-
obj = { ...obj, ...objCopy };
|
|
53
|
-
}
|
|
54
|
-
return { res, obj };
|
|
55
|
-
};
|
|
56
|
-
const changeValue = (addValue) => {
|
|
57
|
-
var _a;
|
|
58
|
-
const r = range.current;
|
|
59
|
-
(_a = r === null || r === void 0 ? void 0 : r.insertNode) === null || _a === void 0 ? void 0 : _a.call(r, document.createTextNode(addValue));
|
|
60
|
-
onChange(`${value}${addValue}`);
|
|
61
|
-
};
|
|
62
|
-
const getRange = () => {
|
|
63
|
-
// 弹起人员选择弹框
|
|
64
|
-
setSelectPersonModalShow(true);
|
|
65
|
-
// 获取光标选区位置
|
|
66
|
-
const s = window.getSelection();
|
|
67
|
-
const r = s.getRangeAt(0);
|
|
68
|
-
range.current = r;
|
|
69
|
-
};
|
|
70
|
-
const countAtSignal = (value) => {
|
|
71
|
-
let count1 = 0;
|
|
72
|
-
let count2 = 0;
|
|
73
|
-
for (const v of value) {
|
|
74
|
-
if (v === '@') {
|
|
75
|
-
count1 += 1;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
for (const v of copyMsg) {
|
|
79
|
-
if (v === '@') {
|
|
80
|
-
count2 += 1;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return count1 === count2;
|
|
84
|
-
};
|
|
85
|
-
return (React.createElement("div", { className: "highlight-textarea-content" },
|
|
86
|
-
React.createElement("div", { className: "highlight-textarea", onKeyUp: (e) => {
|
|
87
|
-
if (size === 'pc' &&
|
|
88
|
-
e.shiftKey &&
|
|
89
|
-
(e.key === '@' || e.keyCode === 50)) {
|
|
90
|
-
getRange();
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
if (size === 'pc' && e.keyCode === 50) {
|
|
94
|
-
// 判断当下value值是否存在2
|
|
95
|
-
if (!countAtSignal(value)) {
|
|
96
|
-
getRange();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// eslint-disable-next-line rulesdir/no-timer
|
|
100
|
-
setTimeout(() => setCopyMsg(value), 300);
|
|
101
|
-
}, onFocus: () => {
|
|
102
|
-
setPlaceholderVisible(false);
|
|
103
|
-
}, onBlur: () => {
|
|
104
|
-
if (!value) {
|
|
105
|
-
setPlaceholderVisible(true);
|
|
106
|
-
}
|
|
107
|
-
} },
|
|
108
|
-
React.createElement(HighlightWithinTextarea, { value: value, onChange: (value) => {
|
|
109
|
-
onChange(value);
|
|
110
|
-
}, highlight: highlightPositions }),
|
|
111
|
-
placeholderVisible && (React.createElement("div", { className: "highlight-textarea-placeholder" }, placeholder))),
|
|
112
|
-
React.createElement(UserSelectModel, { visible: selectPersonModalShow, placeholder: "\u8BF7\u9009\u62E9\u901A\u77E5\u4EBA\u5458", onClose: () => {
|
|
113
|
-
setSelectPersonModalShow(false);
|
|
114
|
-
}, onChange: (val) => {
|
|
115
|
-
let v = '';
|
|
116
|
-
const newOpinionUserMap = { ...opinionUserMap };
|
|
117
|
-
(val || []).forEach((item, index) => {
|
|
118
|
-
const name = `@${item.text}`;
|
|
119
|
-
v = `${v + item.text} `;
|
|
120
|
-
if (index < val.length - 1) {
|
|
121
|
-
v = `${v}@`;
|
|
122
|
-
}
|
|
123
|
-
if (!opinionUserMap[item.value]) {
|
|
124
|
-
newOpinionUserMap[item.value] = name;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
setOpinionUserMap({ ...newOpinionUserMap });
|
|
128
|
-
changeValue(v || ' ');
|
|
129
|
-
setSelectPersonModalShow(false);
|
|
130
|
-
}, value: [] })));
|
|
131
|
-
};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useRef } from 'react';
|
|
2
|
-
import UserTreeSelect from '../../../form/userOrgSelect/component/user-select-h5';
|
|
3
|
-
export function UserSelect(props) {
|
|
4
|
-
const { multiple = true, isMobile = false, placeholder, visible = false, onClose, } = props;
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
const onBodyClick = (e) => {
|
|
7
|
-
const element = e.target;
|
|
8
|
-
if (element.closest('.wedatea2td-icon-close') ||
|
|
9
|
-
element.closest('.wedatea2td-btn--weak')) {
|
|
10
|
-
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
const evtOptions = { passive: true, capture: true };
|
|
14
|
-
document.addEventListener('click', onBodyClick, evtOptions);
|
|
15
|
-
return () => {
|
|
16
|
-
document.removeEventListener('click', onBodyClick, evtOptions);
|
|
17
|
-
};
|
|
18
|
-
}, []);
|
|
19
|
-
const { userSelectRef } = usePcUserSelectRef(visible);
|
|
20
|
-
const onTreeSelectChange = (value) => {
|
|
21
|
-
var _a, _b, _c;
|
|
22
|
-
const { userIds, users } = value;
|
|
23
|
-
const selectedData = multiple ? users.data : [users.data];
|
|
24
|
-
const userList = selectedData === null || selectedData === void 0 ? void 0 : selectedData.map((user) => ({
|
|
25
|
-
text: (user === null || user === void 0 ? void 0 : user.userName) || (user === null || user === void 0 ? void 0 : user.content) || '-',
|
|
26
|
-
value: user === null || user === void 0 ? void 0 : user.userId,
|
|
27
|
-
}));
|
|
28
|
-
(_a = props === null || props === void 0 ? void 0 : props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, userList || []);
|
|
29
|
-
(_b = props === null || props === void 0 ? void 0 : props.originOnChange) === null || _b === void 0 ? void 0 : _b.call(props, users);
|
|
30
|
-
(_c = props === null || props === void 0 ? void 0 : props.onUserIdChange) === null || _c === void 0 ? void 0 : _c.call(props, userIds);
|
|
31
|
-
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
32
|
-
};
|
|
33
|
-
const commonProps = {
|
|
34
|
-
labelVisible: false,
|
|
35
|
-
decorator: null,
|
|
36
|
-
multiple,
|
|
37
|
-
size: 'auto-width',
|
|
38
|
-
defaultValue: props.value || [],
|
|
39
|
-
placeholder,
|
|
40
|
-
confirmAction: onTreeSelectChange,
|
|
41
|
-
style: {
|
|
42
|
-
display: 'none',
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
const mobileProps = {
|
|
46
|
-
modelType: 'model',
|
|
47
|
-
showType: 'h5',
|
|
48
|
-
dropDownStyle: { width: '190px' },
|
|
49
|
-
modelOpen: visible,
|
|
50
|
-
outerRef: userSelectRef,
|
|
51
|
-
};
|
|
52
|
-
const pcProps = {
|
|
53
|
-
showType: 'pc',
|
|
54
|
-
outerRef: userSelectRef,
|
|
55
|
-
onClose,
|
|
56
|
-
};
|
|
57
|
-
const selectProps = { ...commonProps, ...(isMobile ? mobileProps : pcProps) };
|
|
58
|
-
return React.createElement(UserTreeSelect, { ...selectProps });
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 针对Pc改版后的选人组件设置的自定义hook
|
|
62
|
-
*/
|
|
63
|
-
function usePcUserSelectRef(visible) {
|
|
64
|
-
const userSelectRef = useRef();
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
var _a, _b, _c;
|
|
67
|
-
if (visible) {
|
|
68
|
-
(_c = (_b = (_a = userSelectRef.current) === null || _a === void 0 ? void 0 : _a.methods) === null || _b === void 0 ? void 0 : _b.open) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
69
|
-
}
|
|
70
|
-
}, [visible]);
|
|
71
|
-
return { userSelectRef };
|
|
72
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { safeJsonParse } from '../../../../utils/tool';
|
|
3
|
-
import { UserSelect } from './UserSelect';
|
|
4
|
-
import './UserSelectMobile.css';
|
|
5
|
-
export const UserSelectMobile = (props) => {
|
|
6
|
-
const { visible, approveField, mode, close, values } = props;
|
|
7
|
-
const [selected, setSelected] = useState(values);
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
const selectedAvatar = sessionStorage.getItem('selected');
|
|
10
|
-
selectedAvatar && setSelected(safeJsonParse(selectedAvatar));
|
|
11
|
-
}, []);
|
|
12
|
-
const handleHighLightSelected = (selectedIds, selectedUser, flowData) => {
|
|
13
|
-
let v = '';
|
|
14
|
-
const { opinionUserMap, approveInfo } = flowData;
|
|
15
|
-
selectedIds.forEach((id) => {
|
|
16
|
-
const user = selectedUser.find((user) => (user === null || user === void 0 ? void 0 : user.UserId) === id) || {};
|
|
17
|
-
const name = `@${user === null || user === void 0 ? void 0 : user.Name}`;
|
|
18
|
-
v = `${v + name} `;
|
|
19
|
-
if (!opinionUserMap[id]) {
|
|
20
|
-
opinionUserMap[id] = name;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
flowData.approveInfo = approveInfo + v;
|
|
24
|
-
flowData.opinionUserMap = { ...opinionUserMap };
|
|
25
|
-
};
|
|
26
|
-
const saveSelect = (selectedIds, selectedUser) => {
|
|
27
|
-
var _a;
|
|
28
|
-
const flowData = (_a = safeJsonParse(sessionStorage.getItem('FlowActionsMobile'))) !== null && _a !== void 0 ? _a : {};
|
|
29
|
-
if (approveField === 'assigneeIds') {
|
|
30
|
-
flowData.assigneeIds = selectedIds;
|
|
31
|
-
sessionStorage.setItem('hasSignSubmit', 'hasSignSubmit');
|
|
32
|
-
}
|
|
33
|
-
else if (approveField === 'highLightApprovers') {
|
|
34
|
-
handleHighLightSelected(selectedIds || [], selectedUser, flowData);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
flowData[approveField] = selectedIds;
|
|
38
|
-
}
|
|
39
|
-
sessionStorage.setItem('FlowActionsMobile', JSON.stringify(flowData));
|
|
40
|
-
sessionStorage.setItem(approveField, JSON.stringify(selectedUser));
|
|
41
|
-
};
|
|
42
|
-
const onUserSelectChange = (rows) => {
|
|
43
|
-
var _a;
|
|
44
|
-
const isMultiple = mode === 'multiple';
|
|
45
|
-
const ids = isMultiple ? rows.value : [rows.value];
|
|
46
|
-
const users = (_a = rows.data) === null || _a === void 0 ? void 0 : _a.map((user) => ({
|
|
47
|
-
Name: (user === null || user === void 0 ? void 0 : user.userName) || (user === null || user === void 0 ? void 0 : user.content) || '-',
|
|
48
|
-
UserId: user === null || user === void 0 ? void 0 : user.userId,
|
|
49
|
-
}));
|
|
50
|
-
saveSelect(ids, users);
|
|
51
|
-
};
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
let lastTouchEnd = 0;
|
|
54
|
-
const touchstartFn = (event) => {
|
|
55
|
-
if (event.touches.length > 1) {
|
|
56
|
-
event.preventDefault();
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const touchendFn = (event) => {
|
|
60
|
-
const now = new Date().getTime();
|
|
61
|
-
if (now - lastTouchEnd <= 300) {
|
|
62
|
-
event.preventDefault();
|
|
63
|
-
}
|
|
64
|
-
lastTouchEnd = now;
|
|
65
|
-
};
|
|
66
|
-
const gesturestartFn = (event) => {
|
|
67
|
-
event.preventDefault();
|
|
68
|
-
};
|
|
69
|
-
document.addEventListener('touchstart', touchstartFn);
|
|
70
|
-
document.addEventListener('touchend', touchendFn, false);
|
|
71
|
-
// 阻止双指放大
|
|
72
|
-
document.addEventListener('gesturestart', gesturestartFn);
|
|
73
|
-
return () => {
|
|
74
|
-
document.removeEventListener('touchstart', touchstartFn);
|
|
75
|
-
document.removeEventListener('touchend', touchendFn);
|
|
76
|
-
document.removeEventListener('gesturestart', gesturestartFn);
|
|
77
|
-
};
|
|
78
|
-
}, []);
|
|
79
|
-
return visible ? (React.createElement(UserSelect, { visible: true, isMobile: true, multiple: mode === 'multiple', value: selected, originOnChange: onUserSelectChange, onClose: () => {
|
|
80
|
-
close === null || close === void 0 ? void 0 : close();
|
|
81
|
-
} })) : null;
|
|
82
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { WedaUserTransfer } from '../WedaUserTransfer';
|
|
3
|
-
import { FlowUserSelect } from '../FlowUserSelect';
|
|
4
|
-
import { UserSelect } from './UserSelect';
|
|
5
|
-
import { UserSelectMobile } from './UserSelectMobile';
|
|
6
|
-
const useOld = false;
|
|
7
|
-
export function UserSelectModel(props) {
|
|
8
|
-
if (props.mobileModel) {
|
|
9
|
-
if (useOld) {
|
|
10
|
-
return React.createElement(FlowUserSelect, { ...props });
|
|
11
|
-
}
|
|
12
|
-
return React.createElement(UserSelectMobile, { ...props });
|
|
13
|
-
}
|
|
14
|
-
if (useOld) {
|
|
15
|
-
return React.createElement(WedaUserTransfer, { ...props, setOptions: props === null || props === void 0 ? void 0 : props.onChange });
|
|
16
|
-
}
|
|
17
|
-
return React.createElement(UserSelect, { ...props });
|
|
18
|
-
}
|