@qmlight/web-platform-components 1.0.0

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 (52) hide show
  1. package/AsyncExe/index.tsx +9 -0
  2. package/AsyncExe/src/index.tsx +118 -0
  3. package/AsyncExe/src/lang/en.tsx +11 -0
  4. package/AsyncExe/src/lang/index.tsx +21 -0
  5. package/AsyncExe/src/lang/zh-cn.tsx +11 -0
  6. package/Demo/index.module.less +11 -0
  7. package/Demo/index.tsx +32 -0
  8. package/LICENSE +21 -0
  9. package/README.md +9 -0
  10. package/SearchAssistanceSelect/index.tsx +3 -0
  11. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/api/index.js +6 -0
  12. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/api/server.js +14 -0
  13. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/index.less +23 -0
  14. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/index.tsx +115 -0
  15. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/popover.tsx +42 -0
  16. package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/searchboard.tsx +359 -0
  17. package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/server.js +15 -0
  18. package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/tabList/index.js +55 -0
  19. package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/treeData/index.js +26 -0
  20. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customNode/index.tsx +62 -0
  21. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customNode/style.less +9 -0
  22. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/customModal.tsx +234 -0
  23. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/index.tsx +245 -0
  24. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/style.less +27 -0
  25. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dept/index.tsx +104 -0
  26. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dept/style.less +9 -0
  27. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dropdownList/index.tsx +74 -0
  28. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dropdownList/style.less +19 -0
  29. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/recently/index.tsx +86 -0
  30. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/roleList/index.tsx +61 -0
  31. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/search/index.tsx +109 -0
  32. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/subordinate/index.tsx +64 -0
  33. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/tabList/index.tsx +99 -0
  34. package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/tabList/style.less +86 -0
  35. package/SearchAssistanceSelect/src/SearchAssistanceComponent/index.tsx +298 -0
  36. package/SearchAssistanceSelect/src/SearchAssistanceComponent/searchModal.tsx +109 -0
  37. package/SearchAssistanceSelect/src/SearchAssistanceComponent/searchTabs.tsx +153 -0
  38. package/SearchAssistanceSelect/src/SearchAssistanceComponent/style.less +41 -0
  39. package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/index.tsx +211 -0
  40. package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/searchTransferRight.tsx +93 -0
  41. package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/style.less +69 -0
  42. package/SearchAssistanceSelect/src/SearchAssistanceComponent/treeData/index.tsx +407 -0
  43. package/SearchAssistanceSelect/src/SearchAssistanceComponent/treeData/style.less +9 -0
  44. package/SearchAssistanceSelect/src/index.tsx +73 -0
  45. package/SearchAssistanceSelect/src/style.less +29 -0
  46. package/UploadFileMenu/download.ts +15 -0
  47. package/UploadFileMenu/index.tsx +3 -0
  48. package/UploadFileMenu/src/api/index.js +44 -0
  49. package/UploadFileMenu/src/api/server.js +9 -0
  50. package/UploadFileMenu/src/index.tsx +256 -0
  51. package/index.js +10 -0
  52. package/package.json +22 -0
@@ -0,0 +1,211 @@
1
+ import React, { useEffect, useState, useRef } from 'react';
2
+
3
+ import SearchTransferRight from './searchTransferRight';
4
+ import { Input, Transfer } from 'dcp-design-react';
5
+ import { getUsersUnderOrg } from '../api/treeData';
6
+ import { getUsersByCustomGroup } from '../api/tabList';
7
+ // import AdvancedSearch from '../AdvancedSearch';
8
+
9
+ const { Search } = Input;
10
+ import './style.less';
11
+
12
+ const searchTransfer = ({ onSearch }) => {
13
+ return (
14
+ <div className="search-transfer-action">
15
+ <Search bordered={false} onSearch={onSearch} allowClear />
16
+ </div>
17
+ );
18
+ };
19
+ const searchLeft = ({ type, onSearch, value, onSearchChange }) => {
20
+ console.log(type);
21
+ return type !== 'dept' && type !== 'doc' && type !== 'customNode' ? (
22
+ <div className="search-transfer-action">
23
+ <Search
24
+ bordered={false}
25
+ value={value}
26
+ onChange={onSearchChange}
27
+ onSearch={(value) => onSearch({ name: value, type })}
28
+ allowClear
29
+ />
30
+ </div>
31
+ ) : (
32
+ <></>
33
+ );
34
+ };
35
+ const TransferIndex = ({
36
+ leftChildren,
37
+ data,
38
+ onValueChange,
39
+ onTabChange,
40
+ type,
41
+ params = {},
42
+ customData = [],
43
+ }) => {
44
+ const [transferDataSource, setTransferDataSource] = useState<any[]>([]);
45
+ const [targetKeys, setTargetKeys] = useState<string[]>([]);
46
+ const typeValue = useRef<any>({});
47
+ const [searchValue, setSearchValue] = useState('');
48
+ const [leftValue, setLeftValue] = useState('');
49
+ useEffect(() => {
50
+ if (data) {
51
+ setTargetKeys(data.map((item) => item.id) || []);
52
+ }
53
+ }, [data]);
54
+ const getUserData = async (list) => {
55
+ const lists = transferDataSource
56
+ .filter((item) => list.includes(item.id) && item.orgtype)
57
+ .map((item) => item.id);
58
+ console.log(list);
59
+ console.log(transferDataSource);
60
+ let dataList: any[] = [];
61
+ if (lists.length && type === 'default') {
62
+ const res = await getUsersUnderOrg({
63
+ orgIdList: lists,
64
+ orgTypeCode: typeValue.current.key,
65
+ });
66
+ if (res.code === 200) {
67
+ dataList = lists.map((item, index) => {
68
+ const field = transferDataSource.find((items) => items.id === item) || {};
69
+ return {
70
+ ...field,
71
+ title: `${field.title}(${res.data.orgList[index].userCount || 0})`,
72
+ userList: res.data.orgList[index].userList.map((items) => {
73
+ return {
74
+ ...items,
75
+ title: items.userName,
76
+ key: items.id,
77
+ deptName: items.departmentName,
78
+ };
79
+ }),
80
+ userCount: res.data.orgList[index].userCount,
81
+ };
82
+ });
83
+ }
84
+ }
85
+ if (lists.length && type === 'customOrg') {
86
+ const res = await getUsersByCustomGroup({ ids: lists });
87
+ if (res.code === 200) {
88
+ dataList = lists.map((item, index) => {
89
+ const field = transferDataSource.find((items) => items.id === item) || {};
90
+ return {
91
+ ...field,
92
+ title: `${field.title}(${res.data[index].userCount || 0})`,
93
+ userList: res.data[index].userList.map((items) => {
94
+ return {
95
+ ...items,
96
+ title: items.userName,
97
+ key: items.id,
98
+ deptName: items.departmentName,
99
+ };
100
+ }),
101
+ userCount: res.data[index].userCount,
102
+ };
103
+ });
104
+ }
105
+ }
106
+ const newData = data;
107
+ list.forEach((item) => {
108
+ const field = transferDataSource.find((items) => items.id === item) || {};
109
+ const obj = dataList.find((items) => items.id === item);
110
+ const newField = data.find((items) => items.id === item);
111
+ if (!newField) {
112
+ newData.push(obj || field);
113
+ }
114
+ });
115
+
116
+ onValueChange && onValueChange(newData);
117
+ };
118
+ const onTypeChange = (value) => {
119
+ typeValue.current = value;
120
+ };
121
+ const onSearch = (type, value) => {
122
+ console.log(value);
123
+ if (type === 'left') {
124
+ onTabChange && onTabChange(value);
125
+ // setSearchValue(value);
126
+ }
127
+ if (type === 'right') {
128
+ // console.log(value);
129
+ setSearchValue(value);
130
+ }
131
+ };
132
+
133
+ const onDoubleClickChange = (item) => {
134
+ getUserData([item]);
135
+ };
136
+ const onDoubleClickRightChange = (item) => {
137
+ onValueChange && onValueChange(data.filter((items) => items.id !== item.id));
138
+ };
139
+ const onSearchChange = (e) => {
140
+ setLeftValue(e.target.value);
141
+ };
142
+ return (
143
+ <div className="transfer-index-page">
144
+ <div className="transfer-index-page-tree">
145
+ <Transfer
146
+ dataSource={transferDataSource}
147
+ showSelectAll={false}
148
+ targetKeys={targetKeys}
149
+ titles={[
150
+ searchLeft({
151
+ type,
152
+ onSearch: (value) => onSearch('left', value),
153
+ value: leftValue,
154
+ onSearchChange,
155
+ }),
156
+ searchTransfer({ onSearch: (value) => onSearch('right', value) }),
157
+ ]}
158
+ onChange={(keys, direction, moveKeys) => {
159
+ if (direction === 'right') {
160
+ getUserData(moveKeys);
161
+ }
162
+ if (direction === 'left') {
163
+ onValueChange && onValueChange(data.filter((item) => keys.includes(item.id)));
164
+ }
165
+ }}
166
+ >
167
+ {({ direction, onItemSelect, selectedKeys, onItemSelectAll }) => {
168
+ if (direction === 'left') {
169
+ return React.cloneElement(leftChildren, {
170
+ height: 300,
171
+ mode: 'multiple',
172
+ onDataChange: (data) => {
173
+ console.log(123);
174
+ console.log(data);
175
+ setTransferDataSource(data);
176
+ },
177
+ onTypeChange: onTypeChange,
178
+ targetKeys: targetKeys,
179
+ onItemSelect: onItemSelect,
180
+ selectedKeys: selectedKeys,
181
+ onItemSelectAll: onItemSelectAll,
182
+ onDoubleClickChange: onDoubleClickChange,
183
+ data: data,
184
+ type: type,
185
+ params: params,
186
+ customData,
187
+ });
188
+ }
189
+ if (direction === 'right') {
190
+ return (
191
+ <SearchTransferRight
192
+ onItemSelect={onItemSelect}
193
+ selectedKeys={selectedKeys}
194
+ onValueChange={onValueChange}
195
+ onDoubleClickChange={onDoubleClickRightChange}
196
+ items={
197
+ data.filter((item) =>
198
+ searchValue ? item.title?.indexOf(searchValue) > -1 : true
199
+ ) || []
200
+ }
201
+ type={type}
202
+ />
203
+ );
204
+ }
205
+ }}
206
+ </Transfer>
207
+ </div>
208
+ </div>
209
+ );
210
+ };
211
+ export default TransferIndex;
@@ -0,0 +1,93 @@
1
+ import React, { useRef } from 'react';
2
+ import { List } from 'dcp-design-react';
3
+ import { InteractionOutlined, FolderOutlined, CheckOutlined } from '@/icons';
4
+ const AvaNode = ({ title }) => {
5
+ return <div className="tab-list-page-avatar">{title?.slice(-2)}</div>;
6
+ };
7
+ const SearchTransferRight = (props) => {
8
+ const {
9
+ items,
10
+ selectedKeys,
11
+ onItemSelect,
12
+ onValueChange,
13
+ type = 'default',
14
+ onDoubleClickChange,
15
+ } = props;
16
+ console.log(items);
17
+ const timer = useRef<any>(null);
18
+ const pushChange = (e, field) => {
19
+ e.stopPropagation();
20
+ const list = items.filter((item) => item.id !== field.id);
21
+ field?.userList?.forEach((item) => {
22
+ if (!list.find((items) => items.id === item.id)) {
23
+ list.push(item);
24
+ }
25
+ });
26
+ onValueChange && onValueChange(list);
27
+ };
28
+ return (
29
+ <div className="search-transfer-right-page tab-list-page">
30
+ <List
31
+ itemLayout="horizontal"
32
+ dataSource={items}
33
+ size="small"
34
+ renderItem={(item: any) => (
35
+ <List.Item
36
+ onClick={() => {
37
+ clearTimeout(timer.current);
38
+ timer.current = setTimeout(() => {
39
+ onItemSelect(item.key, !selectedKeys.includes(item.key));
40
+ }, 300);
41
+ }}
42
+ onDoubleClick={() => {
43
+ onDoubleClickChange(item);
44
+ clearTimeout(timer.current);
45
+ }}
46
+ className={selectedKeys.includes(item.key) ? 'tab-list-page-field-selected' : ''}
47
+ >
48
+ {type !== 'org' && ![0, 1, 2, 'customOrg'].includes(item.orgtype) ? (
49
+ <List.Item.Meta
50
+ avatar={<AvaNode title={item.title} />}
51
+ title={
52
+ <div>
53
+ <span>{item.title}</span> <span>{item.jobName}</span>
54
+ {selectedKeys.includes(item.key) && (
55
+ <>
56
+ <span className="sanjiao"></span>
57
+ <CheckOutlined />
58
+ </>
59
+ )}
60
+ </div>
61
+ }
62
+ description={
63
+ <div>
64
+ <span>{item.orgName}</span> <span>{item.deptName}</span>
65
+ </div>
66
+ }
67
+ />
68
+ ) : (
69
+ <div className="tab-list-page-org">
70
+ <div>
71
+ <FolderOutlined /> {item.title}
72
+ {selectedKeys.includes(item.key) && (
73
+ <>
74
+ <span className="sanjiao"></span>
75
+ <CheckOutlined />
76
+ </>
77
+ )}
78
+ </div>
79
+
80
+ {type === 'default' || type == 'customOrg' ? (
81
+ <InteractionOutlined onClick={(e) => pushChange(e, item)} />
82
+ ) : (
83
+ <></>
84
+ )}
85
+ </div>
86
+ )}
87
+ </List.Item>
88
+ )}
89
+ />
90
+ </div>
91
+ );
92
+ };
93
+ export default SearchTransferRight;
@@ -0,0 +1,69 @@
1
+ .transfer-index-page{
2
+ height: 439px;
3
+ padding: 10px;
4
+ &-tree{
5
+ height: 100%;
6
+ .ant-transfer-list-header-selected{
7
+ display: none;
8
+ }
9
+ }
10
+ .ant-transfer-list{
11
+ position: relative;
12
+ }
13
+ .ant-transfer{
14
+ height: 100%;
15
+ }
16
+ .ant-transfer-list-header{
17
+ padding: 0px;
18
+ }
19
+ .ant-transfer-list-body-customize-wrapper{
20
+ height: 100%;
21
+
22
+ }
23
+ .search-transfer-action{
24
+ display: flex;
25
+ height: 38px;
26
+ &-diver{
27
+ height: 38px;
28
+ border-left: 1px solid #d9d9d9;
29
+
30
+
31
+ }
32
+ .ant-row{
33
+ width: 100%;
34
+ .ant-input-affix-wrapper{
35
+ border: 0;
36
+ }
37
+ }
38
+ .hight-search{
39
+ top: 38px!important;
40
+ padding:0px!important;
41
+ .tdy_popover{
42
+ padding: 5px 10px 60px 10px!important;
43
+ height: 368px;
44
+ overflow-y: auto;
45
+ }
46
+ .ant-row{
47
+ width: 100%;
48
+ .ant-input-affix-wrapper{
49
+ border:1px solid #d9d9d9;
50
+ }
51
+ }
52
+ }
53
+ .ant-btn-link{
54
+ height: 38px;
55
+ }
56
+ .ant-input-affix-wrapper{
57
+ height: 38px;
58
+ }
59
+ .ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button{
60
+ height: 38px;
61
+ border: 0;
62
+ }
63
+ }
64
+
65
+ }
66
+ .search-transfer-right-page{
67
+ height: 100%;
68
+ overflow-y: auto;
69
+ }