@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
package/SearchAssistanceSelect/src/SearchAssistanceComponent/component/dropdownList/style.less
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.search-dropdown-page{
|
|
2
|
+
&-pro{
|
|
3
|
+
.ant-dropdown-menu{
|
|
4
|
+
max-height: 300px;
|
|
5
|
+
overflow-y: auto;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
&-org{
|
|
9
|
+
display: flex;
|
|
10
|
+
justify-content: space-between;
|
|
11
|
+
padding: 0px 10px;
|
|
12
|
+
height: 37px;
|
|
13
|
+
width: 100%;
|
|
14
|
+
align-items: center;
|
|
15
|
+
background-color: #fafafa;
|
|
16
|
+
border-bottom: 1px solid #e7e7e7;
|
|
17
|
+
font-size: 12px;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import TabList from '../tabList';
|
|
3
|
+
import { recentUserPage } from '../../api/tabList';
|
|
4
|
+
import { Pagination } from 'dcp-design-react';
|
|
5
|
+
|
|
6
|
+
const RecentlyPageIndex = (props) => {
|
|
7
|
+
const {
|
|
8
|
+
mode,
|
|
9
|
+
selectedKeys,
|
|
10
|
+
targetKeys,
|
|
11
|
+
onDataChange,
|
|
12
|
+
onValueChange,
|
|
13
|
+
onItemSelect,
|
|
14
|
+
onDoubleClickChange,
|
|
15
|
+
} = props;
|
|
16
|
+
const [dataSource, setDataSource] = useState<any[]>([]);
|
|
17
|
+
const [itemKeys, setItemKeys] = useState<any[]>([]);
|
|
18
|
+
const [total, setTotal] = useState(0);
|
|
19
|
+
const [page, setPage] = useState(1);
|
|
20
|
+
const [fetchParams, setFetchParams] = useState<any>({
|
|
21
|
+
currentPage: 1,
|
|
22
|
+
pageSize: 10,
|
|
23
|
+
});
|
|
24
|
+
const dataList = useRef<any[]>([]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
setItemKeys(selectedKeys || []);
|
|
27
|
+
}, [selectedKeys]);
|
|
28
|
+
const itemSelect = (value, checked) => {
|
|
29
|
+
if (mode === 'multiple') {
|
|
30
|
+
onItemSelect && onItemSelect(value, checked);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setItemKeys([value]);
|
|
34
|
+
const field = dataSource.find((item) => item.id === value);
|
|
35
|
+
onValueChange && onValueChange(field);
|
|
36
|
+
};
|
|
37
|
+
const getData = async (params) => {
|
|
38
|
+
const res = await recentUserPage(params);
|
|
39
|
+
if (res.code === 200) {
|
|
40
|
+
const list = res?.data?.map((item) => {
|
|
41
|
+
return {
|
|
42
|
+
...item,
|
|
43
|
+
key: item.id,
|
|
44
|
+
title: item.name,
|
|
45
|
+
// deptName: item.departmentName,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
setDataSource(list || []);
|
|
49
|
+
list.forEach((item) => {
|
|
50
|
+
if (!dataList.current.find((items) => items.id === item.id)) {
|
|
51
|
+
dataList.current.push(item);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
onDataChange && onDataChange(dataList.current);
|
|
55
|
+
setTotal(res.data.total);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const pageChange = (page, pageSize) => {
|
|
59
|
+
setPage(page);
|
|
60
|
+
setFetchParams({ ...fetchParams, currentPage: page });
|
|
61
|
+
};
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
getData({});
|
|
64
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
65
|
+
}, []);
|
|
66
|
+
return (
|
|
67
|
+
<div className="recetly-page-index search-page-list">
|
|
68
|
+
<TabList
|
|
69
|
+
onDoubleClickChange={onDoubleClickChange}
|
|
70
|
+
onItemSelect={itemSelect}
|
|
71
|
+
selectedKeys={itemKeys}
|
|
72
|
+
dataSource={dataSource.filter((item) => !targetKeys.includes(item.id))}
|
|
73
|
+
/>
|
|
74
|
+
{/* <Pagination
|
|
75
|
+
simple
|
|
76
|
+
size="small"
|
|
77
|
+
current={page}
|
|
78
|
+
defaultCurrent={1}
|
|
79
|
+
showTotal={(total) => `共 ${total} 条`}
|
|
80
|
+
total={total}
|
|
81
|
+
onChange={pageChange}
|
|
82
|
+
/> */}
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
};
|
|
86
|
+
export default RecentlyPageIndex;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import TabList from "../tabList";
|
|
3
|
+
import { getRoleList } from "../../api/tabList";
|
|
4
|
+
import { getUserInfo } from "@/utils/cookies";
|
|
5
|
+
|
|
6
|
+
const RoleListPage = (props) => {
|
|
7
|
+
const {
|
|
8
|
+
mode,
|
|
9
|
+
selectedKeys,
|
|
10
|
+
targetKeys,
|
|
11
|
+
onDataChange,
|
|
12
|
+
onValueChange,
|
|
13
|
+
onItemSelect,
|
|
14
|
+
params = {},
|
|
15
|
+
} = props;
|
|
16
|
+
const [dataSource, setDataSource] = useState<any[]>([]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
getData({ loginUserId: getUserInfo().id, ...params });
|
|
19
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
20
|
+
}, [params]);
|
|
21
|
+
const getData = async (params) => {
|
|
22
|
+
const res = await getRoleList(params);
|
|
23
|
+
if (res.code === 200) {
|
|
24
|
+
const list = res.data.map((item) => {
|
|
25
|
+
return {
|
|
26
|
+
...item,
|
|
27
|
+
key: item.id,
|
|
28
|
+
title: item.name,
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
setDataSource(list || []);
|
|
32
|
+
onDataChange && onDataChange(list);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const [itemKeys, setItemKeys] = useState<any[]>([]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
setItemKeys(selectedKeys || []);
|
|
39
|
+
}, [selectedKeys]);
|
|
40
|
+
const itemSelect = (value, checked) => {
|
|
41
|
+
if (mode === "multiple") {
|
|
42
|
+
onItemSelect && onItemSelect(value, checked);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setItemKeys([value]);
|
|
46
|
+
const field = dataSource.find((item) => item.id === value);
|
|
47
|
+
onValueChange &&
|
|
48
|
+
onValueChange({ ...field, value: field.id, label: field.userName });
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div className="dept-page">
|
|
53
|
+
<TabList
|
|
54
|
+
onItemSelect={itemSelect}
|
|
55
|
+
selectedKeys={itemKeys}
|
|
56
|
+
dataSource={dataSource.filter((item) => !targetKeys.includes(item.id))}
|
|
57
|
+
/>
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
export default RoleListPage;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import TabList from '../tabList';
|
|
3
|
+
import { getUsersByConditions, getOrgsByConditions } from '../../api/tabList';
|
|
4
|
+
import { Pagination } from 'dcp-design-react';
|
|
5
|
+
|
|
6
|
+
const SearchPageIndex = (props) => {
|
|
7
|
+
const {
|
|
8
|
+
mode,
|
|
9
|
+
selectedKeys,
|
|
10
|
+
targetKeys,
|
|
11
|
+
onDataChange,
|
|
12
|
+
onValueChange,
|
|
13
|
+
onItemSelect,
|
|
14
|
+
searchValue,
|
|
15
|
+
params = {},
|
|
16
|
+
onDoubleClickChange,
|
|
17
|
+
type,
|
|
18
|
+
} = props;
|
|
19
|
+
const [dataSource, setDataSource] = useState<any[]>([]);
|
|
20
|
+
const [itemKeys, setItemKeys] = useState<any[]>([]);
|
|
21
|
+
const [total, setTotal] = useState(0);
|
|
22
|
+
const [page, setPage] = useState(1);
|
|
23
|
+
const [fetchParams, setFetchParams] = useState<any>({});
|
|
24
|
+
const [loading, setLoading] = useState<boolean>(false);
|
|
25
|
+
const dataList = useRef<any[]>([]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
setItemKeys(selectedKeys || []);
|
|
28
|
+
}, [selectedKeys]);
|
|
29
|
+
const itemSelect = (value, checked) => {
|
|
30
|
+
if (mode === 'multiple') {
|
|
31
|
+
onItemSelect && onItemSelect(value, checked);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
setItemKeys([value]);
|
|
35
|
+
const field = dataSource.find((item) => item.id === value);
|
|
36
|
+
onValueChange && onValueChange({ ...field, value: field.id, label: field.userName });
|
|
37
|
+
};
|
|
38
|
+
const fetchHandleApi = async (params) => {
|
|
39
|
+
if (type !== 'org') {
|
|
40
|
+
return getUsersByConditions(params);
|
|
41
|
+
}
|
|
42
|
+
return getOrgsByConditions(params);
|
|
43
|
+
};
|
|
44
|
+
const getData = async (params) => {
|
|
45
|
+
setLoading(true);
|
|
46
|
+
const res = await fetchHandleApi(params).finally(() => {
|
|
47
|
+
setLoading(false);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
if (res.code === 200) {
|
|
51
|
+
const data = res.data?.records || res.data?.list;
|
|
52
|
+
const list = data.map((item) => {
|
|
53
|
+
return {
|
|
54
|
+
...item,
|
|
55
|
+
key: item.id,
|
|
56
|
+
title: item.userName || item.name,
|
|
57
|
+
// deptName: item.departmentName | item.parentOrgName,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
setDataSource(list || []);
|
|
61
|
+
list.forEach((item) => {
|
|
62
|
+
if (!dataList.current.find((items) => items.id === item.id)) {
|
|
63
|
+
dataList.current.push(item);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
onDataChange && onDataChange(dataList.current);
|
|
67
|
+
setTotal(res.data.total);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const pageChange = (page, pageSize) => {
|
|
71
|
+
setPage(page);
|
|
72
|
+
setFetchParams({ ...fetchParams, currentPage: page });
|
|
73
|
+
};
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (fetchParams.currentPage) {
|
|
76
|
+
getData(fetchParams);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
}, [fetchParams]);
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
setFetchParams({ pageSize: 10, currentPage: 1, ...params });
|
|
83
|
+
}, [params]);
|
|
84
|
+
// const ondrownChange = (field) => {
|
|
85
|
+
// setFetchParams({ pageSize: 10, currentPage: 1, orgTypeCode: field.key });
|
|
86
|
+
// };
|
|
87
|
+
return (
|
|
88
|
+
<div className="recetly-page-index search-page-list">
|
|
89
|
+
{/* <DropDownList onDataChange={ondrownChange} /> */}
|
|
90
|
+
<TabList
|
|
91
|
+
onItemSelect={itemSelect}
|
|
92
|
+
loading={loading}
|
|
93
|
+
onDoubleClickChange={onDoubleClickChange}
|
|
94
|
+
selectedKeys={itemKeys}
|
|
95
|
+
dataSource={dataSource.filter((item) => !targetKeys.includes(item.id))}
|
|
96
|
+
/>
|
|
97
|
+
<Pagination
|
|
98
|
+
simple
|
|
99
|
+
size="small"
|
|
100
|
+
current={page}
|
|
101
|
+
defaultCurrent={1}
|
|
102
|
+
showTotal={(total) => `共 ${total} 条`}
|
|
103
|
+
total={total}
|
|
104
|
+
onChange={pageChange}
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
export default SearchPageIndex;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import DropDownList from '../dropdownList';
|
|
3
|
+
import TabList from '../tabList';
|
|
4
|
+
import { getMySubordinates } from '../../api/tabList';
|
|
5
|
+
import { getUserInfo } from '@/utils/cookies';
|
|
6
|
+
|
|
7
|
+
const SubordinateIndex = (props) => {
|
|
8
|
+
const {
|
|
9
|
+
mode,
|
|
10
|
+
selectedKeys,
|
|
11
|
+
targetKeys,
|
|
12
|
+
onDataChange,
|
|
13
|
+
onValueChange,
|
|
14
|
+
onDoubleClickChange,
|
|
15
|
+
onItemSelect,
|
|
16
|
+
} = props;
|
|
17
|
+
const [dataSource, setDataSource] = useState<any[]>([]);
|
|
18
|
+
const ondrownChange = (field) => {
|
|
19
|
+
getData({ userId: getUserInfo().id, orgTypeCode: field.key });
|
|
20
|
+
};
|
|
21
|
+
const getData = async (params) => {
|
|
22
|
+
const res = await getMySubordinates(params);
|
|
23
|
+
if (res.code === 200) {
|
|
24
|
+
const list =
|
|
25
|
+
res.data?.map((item) => {
|
|
26
|
+
return {
|
|
27
|
+
...item,
|
|
28
|
+
key: item.id,
|
|
29
|
+
title: item.userName,
|
|
30
|
+
deptName: item.departmentName,
|
|
31
|
+
};
|
|
32
|
+
}) || [];
|
|
33
|
+
setDataSource(list || []);
|
|
34
|
+
onDataChange && onDataChange(list);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const [itemKeys, setItemKeys] = useState<any[]>([]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
setItemKeys(selectedKeys || []);
|
|
41
|
+
}, [selectedKeys]);
|
|
42
|
+
const itemSelect = (value, checked) => {
|
|
43
|
+
if (mode === 'multiple') {
|
|
44
|
+
onItemSelect && onItemSelect(value, checked);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setItemKeys([value]);
|
|
48
|
+
const field = dataSource.find((item) => item.id === value);
|
|
49
|
+
onValueChange && onValueChange({ ...field, value: field.id, label: field.userName });
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<div className="dept-page">
|
|
54
|
+
<DropDownList onDataChange={ondrownChange} />
|
|
55
|
+
<TabList
|
|
56
|
+
onDoubleClickChange={onDoubleClickChange}
|
|
57
|
+
onItemSelect={itemSelect}
|
|
58
|
+
selectedKeys={itemKeys}
|
|
59
|
+
dataSource={dataSource.filter((item) => !targetKeys.includes(item.id))}
|
|
60
|
+
/>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
export default SubordinateIndex;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { List } from 'dcp-design-react';
|
|
3
|
+
import { CheckOutlined, EditOutlined, DeleteOutlined } from '@/icons';
|
|
4
|
+
import './style.less';
|
|
5
|
+
const AvaNode = ({ title }) => {
|
|
6
|
+
return <div className="tab-list-page-avatar">{title?.slice(-2)}</div>;
|
|
7
|
+
};
|
|
8
|
+
const TabList = (props) => {
|
|
9
|
+
const {
|
|
10
|
+
dataSource,
|
|
11
|
+
selectedKeys,
|
|
12
|
+
onItemSelect,
|
|
13
|
+
onDoubleClickChange,
|
|
14
|
+
type = 'default',
|
|
15
|
+
onItemAction,
|
|
16
|
+
loading = false,
|
|
17
|
+
} = props;
|
|
18
|
+
const [dataList, setDataList] = useState<any[]>([]);
|
|
19
|
+
const timer = useRef<any>(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
setDataList(dataSource || []);
|
|
22
|
+
}, [dataSource]);
|
|
23
|
+
const actionHandle = (e, flag, info) => {
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
if (flag === 'edit') {
|
|
26
|
+
onItemAction && onItemAction('edit', info);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (flag === 'del') {
|
|
30
|
+
onItemAction && onItemAction('del', info);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return (
|
|
34
|
+
<div className="tab-list-page">
|
|
35
|
+
<List
|
|
36
|
+
itemLayout="horizontal"
|
|
37
|
+
dataSource={dataList}
|
|
38
|
+
loading={loading}
|
|
39
|
+
size="small"
|
|
40
|
+
renderItem={(item) => (
|
|
41
|
+
<List.Item
|
|
42
|
+
onClick={() => {
|
|
43
|
+
clearTimeout(timer.current);
|
|
44
|
+
timer.current = setTimeout(() => {
|
|
45
|
+
onItemSelect(item.id, !selectedKeys.includes(item.id));
|
|
46
|
+
}, 300);
|
|
47
|
+
}}
|
|
48
|
+
onDoubleClick={() => {
|
|
49
|
+
clearTimeout(timer.current);
|
|
50
|
+
onDoubleClickChange(item.id);
|
|
51
|
+
}}
|
|
52
|
+
className={selectedKeys.includes(item.id) ? 'tab-list-page-field-selected' : ''}
|
|
53
|
+
>
|
|
54
|
+
<List.Item.Meta
|
|
55
|
+
avatar={<AvaNode title={item.title} />}
|
|
56
|
+
title={
|
|
57
|
+
<>
|
|
58
|
+
<div>
|
|
59
|
+
<span>{item.title}</span> <span>{item.jobName}</span>
|
|
60
|
+
</div>
|
|
61
|
+
{selectedKeys.includes(item.id) && (
|
|
62
|
+
<>
|
|
63
|
+
<span className="sanjiao"></span>
|
|
64
|
+
<CheckOutlined />
|
|
65
|
+
</>
|
|
66
|
+
)}
|
|
67
|
+
{type === 'edit' ? (
|
|
68
|
+
<div className="item-action">
|
|
69
|
+
<EditOutlined
|
|
70
|
+
onClick={(e) => actionHandle(e, 'edit', item)}
|
|
71
|
+
style={{ marginRight: 8, fontSize: 14 }}
|
|
72
|
+
/>
|
|
73
|
+
<DeleteOutlined
|
|
74
|
+
onClick={(e) => actionHandle(e, 'del', item)}
|
|
75
|
+
style={{ marginRight: 8, fontSize: 14 }}
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
) : (
|
|
79
|
+
<></>
|
|
80
|
+
)}
|
|
81
|
+
</>
|
|
82
|
+
}
|
|
83
|
+
description={
|
|
84
|
+
item.orgName ? (
|
|
85
|
+
<div>
|
|
86
|
+
<span>{item.orgName}</span> <span>{item.departmentName}</span>
|
|
87
|
+
</div>
|
|
88
|
+
) : (
|
|
89
|
+
<></>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
/>
|
|
93
|
+
</List.Item>
|
|
94
|
+
)}
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
export default TabList;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
.tab-list-page{
|
|
2
|
+
padding: 0px 0px 0px 10px;
|
|
3
|
+
.ant-list{
|
|
4
|
+
// height: 378px;
|
|
5
|
+
height: 100%;
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
}
|
|
8
|
+
&-org{
|
|
9
|
+
width: 100%;
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: space-between;
|
|
12
|
+
align-items: center;
|
|
13
|
+
}
|
|
14
|
+
.ant-list-sm .ant-list-item{
|
|
15
|
+
position: relative;
|
|
16
|
+
.ant-list-item-meta-title{
|
|
17
|
+
display: flex;
|
|
18
|
+
justify-content: space-between;
|
|
19
|
+
align-items: center;
|
|
20
|
+
.item-action{
|
|
21
|
+
.anticon{
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
&-field-selected{
|
|
28
|
+
background-color:#eaf8fe;
|
|
29
|
+
.sanjiao{
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0;
|
|
32
|
+
right: 0;
|
|
33
|
+
height: 0;
|
|
34
|
+
width: 0;
|
|
35
|
+
border-top: 21px solid #0b93da;
|
|
36
|
+
border-left: 22px solid transparent;
|
|
37
|
+
}
|
|
38
|
+
.anticon-check{
|
|
39
|
+
position: absolute;
|
|
40
|
+
font-size: 12px;
|
|
41
|
+
color: #fff;
|
|
42
|
+
top: 0;
|
|
43
|
+
right: 1px
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
.ant-list-item:hover{
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
background-color:#eaf8fe;
|
|
49
|
+
}
|
|
50
|
+
&-avatar{
|
|
51
|
+
width: 30px;
|
|
52
|
+
height: 30px;
|
|
53
|
+
border-radius: 50%;
|
|
54
|
+
background:rgb(85, 177, 249) ;
|
|
55
|
+
color: rgb(255, 255, 255);
|
|
56
|
+
text-align: center;
|
|
57
|
+
line-height: 30px;
|
|
58
|
+
font-size: 12px;
|
|
59
|
+
}
|
|
60
|
+
.ant-list-sm .ant-list-item{
|
|
61
|
+
padding: 6px;
|
|
62
|
+
}
|
|
63
|
+
.ant-list-item-meta{
|
|
64
|
+
align-items: center;
|
|
65
|
+
}
|
|
66
|
+
.ant-list-item-meta-title{
|
|
67
|
+
font-size: 12px;
|
|
68
|
+
}
|
|
69
|
+
.ant-list-item-meta-description{
|
|
70
|
+
font-size: 12px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
.search-page-list{
|
|
75
|
+
height: 100%;
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
.tab-list-page{
|
|
79
|
+
flex: 1;
|
|
80
|
+
overflow-y: auto;
|
|
81
|
+
}
|
|
82
|
+
.ant-pagination{
|
|
83
|
+
text-align: center;
|
|
84
|
+
font-size: 12px;
|
|
85
|
+
}
|
|
86
|
+
}
|