@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.
- package/AsyncExe/index.tsx +9 -0
- package/AsyncExe/src/index.tsx +118 -0
- package/AsyncExe/src/lang/en.tsx +11 -0
- package/AsyncExe/src/lang/index.tsx +21 -0
- package/AsyncExe/src/lang/zh-cn.tsx +11 -0
- package/Demo/index.module.less +11 -0
- package/Demo/index.tsx +32 -0
- package/LICENSE +21 -0
- package/README.md +9 -0
- package/SearchAssistanceSelect/index.tsx +3 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/api/index.js +6 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/api/server.js +14 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/index.less +23 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/index.tsx +115 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/popover.tsx +42 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/AdvancedSearch/searchboard.tsx +359 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/server.js +15 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/tabList/index.js +55 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/api/treeData/index.js +26 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customNode/index.tsx +62 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customNode/style.less +9 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/customModal.tsx +234 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/index.tsx +245 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/customOrg/style.less +27 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dept/index.tsx +104 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dept/style.less +9 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dropdownList/index.tsx +74 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dropdownList/style.less +19 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/recently/index.tsx +86 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/roleList/index.tsx +61 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/search/index.tsx +109 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/subordinate/index.tsx +64 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/tabList/index.tsx +99 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/tabList/style.less +86 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/index.tsx +298 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/searchModal.tsx +109 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/searchTabs.tsx +153 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/style.less +41 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/index.tsx +211 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/searchTransferRight.tsx +93 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/transfer/style.less +69 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/treeData/index.tsx +407 -0
- package/SearchAssistanceSelect/src/SearchAssistanceComponent/treeData/style.less +9 -0
- package/SearchAssistanceSelect/src/index.tsx +73 -0
- package/SearchAssistanceSelect/src/style.less +29 -0
- package/UploadFileMenu/download.ts +15 -0
- package/UploadFileMenu/index.tsx +3 -0
- package/UploadFileMenu/src/api/index.js +44 -0
- package/UploadFileMenu/src/api/server.js +9 -0
- package/UploadFileMenu/src/index.tsx +256 -0
- package/index.js +10 -0
- 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
|
+
}
|