@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.
Files changed (129) hide show
  1. package/dist/configs/components/form/input.json +48 -2
  2. package/dist/configs/components/form/richText.json +2 -1
  3. package/dist/configs/components/form/uploader.json +62 -14
  4. package/dist/configs/components/grid/col.js +4 -1
  5. package/dist/configs/components/grid/grid.js +8 -3
  6. package/dist/configs/components/grid/row.js +51 -3
  7. package/dist/configs/components/repeater.js +4 -1
  8. package/dist/configs/components/table.json +1 -0
  9. package/dist/configs/components/wd-bubble.js +6 -0
  10. package/dist/configs/components/wd-button.js +6 -0
  11. package/dist/configs/components/wd-divider.js +7 -18
  12. package/dist/configs/components/wd-icon.js +7 -0
  13. package/dist/configs/components/wd-image.js +7 -0
  14. package/dist/configs/components/wd-link.js +7 -2
  15. package/dist/configs/components/wd-text.js +14 -6
  16. package/dist/configs/index.js +0 -2
  17. package/dist/docs/common/componentList.js +1 -1
  18. package/dist/web/actions/showModal/index.js +1 -1
  19. package/dist/web/components/calendar/index.js +2 -2
  20. package/dist/web/components/flow/components/index.js +0 -4
  21. package/dist/web/components/flow/frame/index.js +4 -3
  22. package/dist/web/components/flow/frame/types.js +11 -5
  23. package/dist/web/components/flow/frame/utils.js +60 -1
  24. package/dist/web/components/flow/modules/chart/Chart.js +2 -3
  25. package/dist/web/components/flow/modules/combination/index.js +1 -1
  26. package/dist/web/components/flow/modules/operations/components/button/index.js +11 -0
  27. package/dist/web/components/flow/modules/operations/components/button/style.css +5 -0
  28. package/dist/web/components/flow/modules/operations/components/index.js +6 -0
  29. package/dist/web/components/flow/modules/operations/components/popup/index.js +100 -0
  30. package/dist/web/components/flow/modules/operations/components/popup/style.css +154 -0
  31. package/dist/web/components/flow/modules/operations/components/popup/types.js +1 -0
  32. package/dist/web/components/flow/modules/operations/components/user-select/index.js +43 -0
  33. package/dist/web/components/flow/modules/operations/components/user-select/style.css +4 -0
  34. package/dist/web/components/flow/modules/operations/components/user-select/types.js +1 -0
  35. package/dist/web/components/flow/modules/operations/config/approval-form-config.js +140 -0
  36. package/dist/web/components/flow/modules/operations/config/control-config.js +218 -0
  37. package/dist/web/components/flow/modules/operations/config/index.js +2 -0
  38. package/dist/web/components/flow/modules/operations/config/types.js +1 -0
  39. package/dist/web/components/flow/modules/operations/control.js +26 -0
  40. package/dist/web/components/flow/modules/operations/controls-items/add-assignee-btn.js +33 -0
  41. package/dist/web/components/flow/modules/operations/controls-items/apply-cc-btn.js +12 -0
  42. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/index.js +188 -0
  43. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/style.css +51 -0
  44. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/index.js +64 -0
  45. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/types.js +1 -0
  46. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/view-model.js +83 -0
  47. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/index.js +16 -0
  48. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/style.css +56 -0
  49. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/index.js +47 -0
  50. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/style.css +60 -0
  51. package/dist/web/components/flow/modules/operations/controls-items/cancel-apply-btn.js +15 -0
  52. package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/index.js +11 -0
  53. package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/style.css +26 -0
  54. package/dist/web/components/flow/modules/operations/controls-items/flow-task-info-modal.js +98 -0
  55. package/dist/web/components/flow/modules/operations/controls-items/index.js +18 -0
  56. package/dist/web/components/flow/modules/operations/controls-items/initiation-btn.js +25 -0
  57. package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/index.js +50 -0
  58. package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/style.css +28 -0
  59. package/dist/web/components/flow/modules/operations/controls-items/roll-back-modal.js +104 -0
  60. package/dist/web/components/flow/modules/operations/controls-items/types.js +1 -0
  61. package/dist/web/components/flow/modules/operations/index.js +2 -0
  62. package/dist/web/components/flow/modules/operations/style.css +20 -0
  63. package/dist/web/components/flow/modules/operations/view-model.js +137 -0
  64. package/dist/web/components/flow/services/ideData/instance.js +2 -2
  65. package/dist/web/components/flow/services/ideData/pageDetail.js +1 -0
  66. package/dist/web/components/form/uploader/index.css +19 -0
  67. package/dist/web/components/form/uploader/index.js +21 -3
  68. package/dist/web/components/form/uploader/uploader.h5.js +14 -8
  69. package/dist/web/components/form/uploader/uploader.pc.js +29 -16
  70. package/dist/web/components/form/uploaderFile/index.css +5 -2
  71. package/dist/web/components/form/uploaderFile/uploadFile.h5.js +15 -12
  72. package/dist/web/components/form/uploaderFile/uploadFile.pc.js +11 -8
  73. package/dist/web/components/form/userOrgSelect/common/fetch-data-service.js +0 -1
  74. package/dist/web/components/form/userOrgSelect/component/depart-select/index.js +1 -1
  75. package/dist/web/components/form/userOrgSelect/component/user-select-h5/index.js +9 -5
  76. package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-select-h5.js +4 -2
  77. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +2 -2
  78. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-select-pc.js +4 -2
  79. package/dist/web/components/grid/col.js +81 -18
  80. package/dist/web/components/grid/grid.js +1 -1
  81. package/dist/web/components/grid/row.js +4 -2
  82. package/dist/web/components/index.js +1 -1
  83. package/dist/web/components/listView/index.js +4 -3
  84. package/dist/web/components/lottery/index.js +122 -123
  85. package/dist/web/components/table/ExportFileModalByApi/index.js +1 -1
  86. package/dist/web/components/table/ImportFileModal/index.js +1 -1
  87. package/dist/web/components/table/ImportFileModalByApi/index.js +1 -1
  88. package/dist/web/components/wd-bubble/wd-bubble.js +11 -3
  89. package/dist/web/components/wd-button/wd-button.js +22 -13
  90. package/dist/web/components/wd-divider/wd-divider.js +10 -7
  91. package/dist/web/components/wd-icon/wd-icon.js +12 -3
  92. package/dist/web/components/wd-image/index.js +12 -5
  93. package/dist/web/components/wd-link/wd-link.js +11 -3
  94. package/dist/web/components/wd-text/wd-text.js +15 -3
  95. package/dist/web/utils/hooks/use-cloud-id-temp-url.js +7 -3
  96. package/dist/web/utils/platform.js +0 -1
  97. package/dist/web/utils/tool.js +11 -0
  98. package/dist/web/utils/widget-api/index.js +3 -0
  99. package/package.json +5 -3
  100. package/dist/configs/components/auth.json +0 -17
  101. package/dist/web/components/flow/components/FlowUserSelect/index.css +0 -116
  102. package/dist/web/components/flow/components/FlowUserSelect/index.js +0 -115
  103. package/dist/web/components/flow/components/HighlightTextarea/index.css +0 -42
  104. package/dist/web/components/flow/components/HighlightTextarea/index.js +0 -131
  105. package/dist/web/components/flow/components/UserSelectModel/UserSelect.js +0 -72
  106. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.css +0 -8
  107. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.js +0 -82
  108. package/dist/web/components/flow/components/UserSelectModel/index.js +0 -18
  109. package/dist/web/components/flow/components/WedaUserTransfer/index.css +0 -3
  110. package/dist/web/components/flow/components/WedaUserTransfer/index.js +0 -162
  111. package/dist/web/components/flow/modules/control/ApprovalDrawer.css +0 -144
  112. package/dist/web/components/flow/modules/control/ApprovalDrawer.js +0 -178
  113. package/dist/web/components/flow/modules/control/ApprovalPopup.css +0 -115
  114. package/dist/web/components/flow/modules/control/ApprovalPopup.js +0 -240
  115. package/dist/web/components/flow/modules/control/Control.css +0 -29
  116. package/dist/web/components/flow/modules/control/Control.js +0 -105
  117. package/dist/web/components/flow/modules/control/ControlMobile.css +0 -101
  118. package/dist/web/components/flow/modules/control/ControlMobile.js +0 -148
  119. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.css +0 -3
  120. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.js +0 -31
  121. package/dist/web/components/flow/modules/control/constants/index.js +0 -35
  122. package/dist/web/components/flow/modules/control/index.js +0 -15
  123. package/dist/web/components/flow/modules/control/provider/index.js +0 -17
  124. package/dist/web/components/flow/modules/control/provider/useControlModel.js +0 -252
  125. package/dist/web/components/flow/modules/control/provider/useMobileModel.js +0 -84
  126. package/dist/web/components/flow/modules/control/provider/useRevokeAndBackHook.js +0 -84
  127. package/dist/web/components/flow/modules/control/utils/ControlModelUtils.js +0 -57
  128. package/dist/web/components/flow/modules/control/utils/index.js +0 -3
  129. package/dist/web/components/flow/modules/control/utils/tools.js +0 -3
@@ -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
+ };
@@ -7,6 +7,9 @@ export function getParentForm($node) {
7
7
  if (cur.parent) {
8
8
  cur = cur.parent;
9
9
  }
10
+ else {
11
+ cur = cur.getOwnerWidget();
12
+ }
10
13
  }
11
14
  return cur;
12
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/weda-ui",
3
- "version": "3.4.5",
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-vant": "3.0.0-rc.7",
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.7",
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,8 +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
- }
@@ -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
- }
@@ -1,3 +0,0 @@
1
- .weda-workbench__flow-user-search {
2
- background-color: #fff !important;
3
- }