@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,359 @@
1
+ /*
2
+ * @Author: 谭冬洋
3
+ * @Date: 2024-08-14 10:24:33
4
+ * @LastEditors: 谭冬洋
5
+ * @LastEditTime: 2024-08-26 13:56:46
6
+ * @FilePath: \faw-component\src\modules\AdvancedSearch\searchboard.tsx
7
+ */
8
+ import React, { useEffect, useRef, useState, forwardRef, useImperativeHandle } from 'react';
9
+ import PropTypes from 'prop-types';
10
+ import { QmForm, QmSpace, QmButton } from 'dcp-design-react';
11
+ import type { FormRef, IFormItem } from 'dcp-design-react/lib/form';
12
+ import SearchSelect from '../index';
13
+ import { getRoleList, getOrgAndDept, getOrgsByConditions } from '../api/tabList';
14
+ import './index.less';
15
+ import { getUserInfo } from '@/utils/cookies';
16
+ import { getOrgTypeList } from './api';
17
+
18
+ const SearchBoard: React.FC<any> = forwardRef(
19
+ (
20
+ {
21
+ type = 'default', // 高级搜索的类型
22
+ value = '', // 外部筛选框数据
23
+ onSearch = () => {}, // 筛选
24
+ changeValue = () => {}, // 改变form值
25
+ onClose = () => {}, // 关闭Popover
26
+ },
27
+ ref
28
+ ) => {
29
+ useImperativeHandle(ref, () => ({
30
+ getFormValue: () => formRef.current?.GET_FIELDS_VALUE(),
31
+ }));
32
+
33
+ useEffect(() => {
34
+ setFilters(createFormList());
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [type]);
37
+ const createFormList = (): Array<IFormItem> => {
38
+ const formData = formRef.current?.GET_FIELDS_VALUE() || {};
39
+ switch (type) {
40
+ case 'branch':
41
+ //分部
42
+ return [
43
+ // {
44
+ // type: 'INPUT',
45
+ // label: '分部名称',
46
+ // fieldName: 'name',
47
+ // onChange: (value) => {
48
+ // changeValue(value);
49
+ // },
50
+ // },
51
+ // {
52
+ // type: 'INPUT',
53
+ // label: '上级分部',
54
+ // fieldName: 'h',
55
+ // render: (formItem) => {
56
+ // return (
57
+ // <InputDemo
58
+ // value={formData[formItem.fieldName]}
59
+ // modalInfo={{ title: '分部', fieldName: formItem.fieldName }}
60
+ // changeFormData={changeFormData}
61
+ // />
62
+ // );
63
+ // },
64
+ // },
65
+ {
66
+ type: 'SELECT',
67
+ label: '组织维度',
68
+ fieldName: 'orgTypeCode',
69
+ allowClear: false,
70
+ options: {
71
+ itemList: [
72
+ { text: '启明信息技术股份有限公司', value: '0' },
73
+ { text: '客户维度', value: '1' },
74
+ { text: '公交交换维度', value: '2' },
75
+ ],
76
+ },
77
+ },
78
+ ];
79
+ case 'dept':
80
+ //分部
81
+ return [
82
+ // {
83
+ // type: 'INPUT',
84
+ // label: '部门名称',
85
+ // fieldName: 'name',
86
+ // onChange: (value) => {
87
+ // changeValue(value);
88
+ // },
89
+ // },
90
+ // {
91
+ // type: 'INPUT',
92
+ // label: '分部',
93
+ // fieldName: 'e',
94
+ // render: (formItem) => {
95
+ // return (
96
+ // <InputDemo
97
+ // value={formData[formItem.fieldName]}
98
+ // modalInfo={{ title: '多分部', fieldName: formItem.fieldName }}
99
+ // changeFormData={changeFormData}
100
+ // />
101
+ // );
102
+ // },
103
+ // },
104
+ // {
105
+ // type: 'INPUT',
106
+ // label: '部门编号',
107
+ // fieldName: 'code',
108
+ // },
109
+ // {
110
+ // type: 'INPUT',
111
+ // label: '上级分部',
112
+ // fieldName: 'h',
113
+ // render: (formItem) => {
114
+ // return (
115
+ // <InputDemo
116
+ // value={formData[formItem.fieldName]}
117
+ // modalInfo={{ title: '分部', fieldName: formItem.fieldName }}
118
+ // changeFormData={changeFormData}
119
+ // />
120
+ // );
121
+ // },
122
+ // },
123
+ {
124
+ type: 'SELECT',
125
+ label: '组织维度',
126
+ fieldName: 'orgTypeCode',
127
+ allowClear: false,
128
+ options: {
129
+ itemList: [
130
+ { text: '启明信息技术股份有限公司', value: '0' },
131
+ { text: '客户维度', value: '1' },
132
+ { text: '公交交换维度', value: '2' },
133
+ ],
134
+ },
135
+ },
136
+ ];
137
+ case 'role':
138
+ //分部
139
+ return [
140
+ {
141
+ type: 'INPUT',
142
+ label: '名称',
143
+ fieldName: 'name',
144
+ onChange: (value) => {
145
+ changeValue(value);
146
+ },
147
+ },
148
+ // {
149
+ // type: 'INPUT',
150
+ // label: '说明',
151
+ // fieldName: 'e',
152
+ // },
153
+ ];
154
+ case 'org':
155
+ //分部
156
+ return [
157
+ {
158
+ type: 'INPUT',
159
+ label: '组织名称',
160
+ fieldName: 'name',
161
+ onChange: (value) => {
162
+ changeValue(value);
163
+ },
164
+ },
165
+ {
166
+ type: 'SELECT',
167
+ label: '组织维度',
168
+ fieldName: 'orgTypeCode',
169
+ allowClear: false,
170
+ },
171
+ {
172
+ type: 'INPUT',
173
+ label: '组织编码',
174
+ fieldName: 'code',
175
+ allowClear: false,
176
+ },
177
+ {
178
+ type: 'INPUT',
179
+ label: '上级组织',
180
+ fieldName: 'deptId',
181
+ render: (option, vm) => {
182
+ return (
183
+ <SearchSelect
184
+ $$form={vm}
185
+ option={option}
186
+ fetchOptions={getOrgsByConditions}
187
+ params={{}}
188
+ items={[
189
+ {
190
+ label: '组织结构',
191
+ key: '4',
192
+ type: 'org',
193
+ },
194
+ ]}
195
+ type={'org'}
196
+ />
197
+ );
198
+ },
199
+ },
200
+ ];
201
+ default:
202
+ // 默认
203
+ return [
204
+ {
205
+ type: 'INPUT',
206
+ label: '姓名',
207
+ fieldName: 'name',
208
+ onChange: (value) => {
209
+ changeValue(value);
210
+ },
211
+ },
212
+ {
213
+ type: 'SELECT',
214
+ label: '组织维度',
215
+ fieldName: 'orgTypeCode',
216
+ allowClear: false,
217
+ },
218
+ {
219
+ type: 'SELECT',
220
+ label: '状态',
221
+ fieldName: 'deleted',
222
+ allowClear: false,
223
+ options: {
224
+ itemList: [
225
+ { text: '在职', value: 0 },
226
+ { text: '其他', value: 1 },
227
+ // { text: '全部', value: '0' },
228
+ // { text: '在职', value: '1' },
229
+ // { text: '试用', value: '2' },
230
+ // { text: '正式', value: '3' },
231
+ // { text: '临时', value: '4' },
232
+ // { text: '试用延期', value: '5' },
233
+ // { text: '解聘', value: '6' },
234
+ // { text: '离职', value: '7' },
235
+ // { text: '退休', value: '8' },
236
+ // { text: '无效', value: '9' },
237
+ ],
238
+ },
239
+ },
240
+
241
+ {
242
+ type: 'INPUT',
243
+ label: '部门',
244
+ fieldName: 'orgIdList',
245
+ render: (option, vm) => {
246
+ return (
247
+ <SearchSelect
248
+ type={''}
249
+ $$form={vm}
250
+ option={option}
251
+ mode={'multiple'}
252
+ fetchOptions={getOrgAndDept}
253
+ params={{}}
254
+ items={[
255
+ {
256
+ label: '组织结构',
257
+ key: '4',
258
+ type: 'dept',
259
+ },
260
+ ]}
261
+ />
262
+ );
263
+ },
264
+ },
265
+ {
266
+ type: 'INPUT',
267
+ label: '岗位',
268
+ fieldName: 'jobName',
269
+ },
270
+ {
271
+ type: 'INPUT',
272
+ label: '角色',
273
+ fieldName: 'roleId',
274
+ render: (option, vm) => {
275
+ return (
276
+ <SearchSelect
277
+ type={''}
278
+ fetchOptions={getRoleList}
279
+ params={{ loginUserId: getUserInfo().id }}
280
+ items={[
281
+ {
282
+ label: '角色',
283
+ key: '6',
284
+ type: 'role',
285
+ },
286
+ ]}
287
+ $$form={vm}
288
+ option={option}
289
+ />
290
+ );
291
+ },
292
+ },
293
+ ];
294
+ }
295
+ };
296
+
297
+ const formRef = useRef<FormRef>(null);
298
+ const [filters, setFilters] = useState<Array<IFormItem>>(createFormList());
299
+ useEffect(() => {
300
+ formRef?.current?.SET_FIELDS_VALUE({ name: value });
301
+ }, [value]);
302
+
303
+ const fetchData = async () => {
304
+ const res = await getOrgTypeList({ currentPage: 1, pageSize: 50 });
305
+ if (res.code === 200) {
306
+ const data = res.data?.list.map((i) => ({
307
+ text: i.name,
308
+ value: i.code,
309
+ }));
310
+ formRef.current?.SET_FORM_ITEM('orgTypeCode', { 'options.itemList': data }, true);
311
+ if (data && data.length > 0) {
312
+ formRef.current?.SET_FIELDS_VALUE({ orgTypeCode: data[0].value });
313
+ }
314
+ }
315
+ };
316
+ useEffect(() => {
317
+ if (type !== 'role') {
318
+ fetchData();
319
+ }
320
+ if (type === 'default') {
321
+ formRef.current?.SET_FIELDS_VALUE({ deleted: 0 });
322
+ }
323
+ // eslint-disable-next-line react-hooks/exhaustive-deps
324
+ }, []);
325
+
326
+ // 重置form
327
+ const resetForm = () => {
328
+ formRef.current!.RESET_FORM();
329
+ changeValue(undefined);
330
+ };
331
+
332
+ return (
333
+ <>
334
+ <div style={{ padding: '20px 0 60px' }} className="tdy_popover">
335
+ <QmForm items={filters} ref={formRef} fieldsChange={(items) => setFilters(items)} />
336
+ <QmSpace className={`fixed-footer`}>
337
+ <QmButton type="primary" click={onSearch}>
338
+ 搜索
339
+ </QmButton>
340
+
341
+ <QmButton onClick={resetForm}>重置</QmButton>
342
+ <QmButton onClick={onClose}>取消</QmButton>
343
+ </QmSpace>
344
+ </div>
345
+ </>
346
+ );
347
+ }
348
+ );
349
+
350
+ SearchBoard.displayName = 'SearchBoard';
351
+
352
+ SearchBoard.propTypes = {
353
+ value: PropTypes.string,
354
+ onSearch: PropTypes.func,
355
+ changeValue: PropTypes.func,
356
+ onClose: PropTypes.func,
357
+ };
358
+
359
+ export default SearchBoard;
@@ -0,0 +1,15 @@
1
+ /*
2
+ * @Author: 焦质晔
3
+ * @Date: 2021-07-20 16:37:14
4
+ * @Last Modified by: 焦质晔
5
+ * @Last Modified time: 2022-12-10 22:37:39
6
+ */
7
+ import env from '@/config/envMaps';
8
+ const { prefix } = env;
9
+
10
+ export default {
11
+ QFC_BASE: `${prefix}/dcp-base-user`,
12
+ QFC_PUBLIC: `${prefix}/dcp-base-public`,
13
+ QFC_AUTH: `${prefix}/dcp-base-auth`,
14
+ GWGL_SERVICE: `/gwgl-service`,
15
+ };
@@ -0,0 +1,55 @@
1
+ import axios from '@/api/fetch';
2
+ import SERVER from '../server';
3
+
4
+ export const getMySubordinates = (params) => {
5
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getMySubordinates`, params);
6
+ };
7
+ export const getDeptUsers = (params) => {
8
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getDeptUsers`, params);
9
+ };
10
+ export const getOrgsByConditions = (params) => {
11
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getOrgsByConditions`, params);
12
+ };
13
+ export const recentUserPage = (params) => {
14
+ return axios.post(`${SERVER.QFC_BASE}/custom/getCommonGroup`, params);
15
+ };
16
+
17
+ export const getUsersByConditions = (params) => {
18
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getUsersByConditions`, params);
19
+ };
20
+
21
+ // 查询角色
22
+ export const getRoleList = (params) => {
23
+ return axios.post(`${SERVER.QFC_AUTH}/role/list`, params);
24
+ };
25
+ // 查询部门
26
+ export const getOrgAndDept = (params) => {
27
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getOrgAndDept`, {
28
+ orgName: params.name,
29
+ });
30
+ };
31
+ //同部门选择更新人员
32
+ export const updateRecentUser = (params) => {
33
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/updateRecentUser`, params);
34
+ };
35
+
36
+ // 查询自定义组
37
+ export const getAllCustomGroups = (params) => {
38
+ return axios.post(`${SERVER.QFC_BASE}/custom/getAllCustomGroups`, params);
39
+ };
40
+ // 新增自定义组
41
+ export const createCustomGroups = (params) => {
42
+ return axios.post(`${SERVER.QFC_BASE}/custom/createCustomGroup`, params);
43
+ };
44
+ // 查询组内人员
45
+ export const getUsersByCustomGroup = (params) => {
46
+ return axios.post(`${SERVER.QFC_BASE}/custom/getUsersByCustomGroup`, params);
47
+ };
48
+ // 删除自定义组
49
+ export const deleteCustomGroup = (params) => {
50
+ return axios.post(`${SERVER.QFC_BASE}/custom/deleteCustomGroup`, params);
51
+ };
52
+ // 更新自定义组
53
+ export const updateCustomGroup = (params) => {
54
+ return axios.post(`${SERVER.QFC_BASE}/custom/updateCustomGroup`, params);
55
+ };
@@ -0,0 +1,26 @@
1
+ import axios from '@/api/fetch';
2
+ import SERVER from '../server';
3
+
4
+ // 执行登录
5
+ export const getTreeDataList = (params) => {
6
+ return axios.post(`${SERVER.QFC_BASE}/org/getTreeForNeed`, params);
7
+ };
8
+
9
+ // 查询组织
10
+ export const getOrgTypeList = (params) => {
11
+ return axios.post(`${SERVER.QFC_BASE}/orgtype/page`, params);
12
+ };
13
+ // 查询人员
14
+ export const getOrgPerson = (params) => {
15
+ return axios.post(`${SERVER.QFC_BASE}/staff/getStaffOfOrgNew`, params);
16
+ };
17
+
18
+ // 查询组织部门
19
+ export const getUsersUnderOrg = (params) => {
20
+ return axios.post(`${SERVER.QFC_BASE}/lowcode/getUsersUnderOrg`, params);
21
+ };
22
+
23
+ // 查询收文发文单位
24
+ export const getDeptTreeNode = (params) => {
25
+ return axios.post(`${SERVER.GWGL_SERVICE}/api/v1/organization-and-user/getDeptTreeNode`, params);
26
+ };
@@ -0,0 +1,62 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import TabList from '../tabList';
3
+ import './style.less';
4
+
5
+ const CustomNode = (props) => {
6
+ const [data, setData] = useState([]);
7
+ const [itemKeys, setItemKeys] = useState<any[]>([]);
8
+ const {
9
+ customData,
10
+ mode,
11
+ selectedKeys,
12
+ targetKeys,
13
+ onDataChange,
14
+ onValueChange,
15
+ onItemSelect,
16
+ onDoubleClickChange,
17
+ } = props;
18
+ const [dataSource, setDataSource] = useState<any[]>([]);
19
+ useEffect(() => {
20
+ if (customData?.length) {
21
+ const list = customData.map((item) => {
22
+ return {
23
+ ...item,
24
+ title: item.name,
25
+ key: item.id,
26
+ value: item.id,
27
+ orgName: (item.centerMainJobList && item.centerMainJobList[0]?.orgName) || '',
28
+ departmentName: (item.centerMainJobList && item.centerMainJobList[0]?.deptName) || '',
29
+ deptName: (item.centerMainJobList && item.centerMainJobList[0]?.deptName) || '',
30
+ };
31
+ });
32
+ setDataSource(list);
33
+ onDataChange && onDataChange(list);
34
+ }
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [customData]);
37
+ useEffect(() => {
38
+ setItemKeys(selectedKeys || []);
39
+ }, [selectedKeys]);
40
+ const itemSelect = (value, checked) => {
41
+ console.log(value);
42
+ if (mode === 'multiple') {
43
+ onItemSelect && onItemSelect(value, checked);
44
+ return;
45
+ }
46
+ setItemKeys([value]);
47
+ const field = dataSource.find((item) => item.id === value);
48
+ onValueChange && onValueChange(field);
49
+ };
50
+ return (
51
+ <div className="custom-node-page">
52
+ <TabList
53
+ onDoubleClickChange={onDoubleClickChange}
54
+ onItemSelect={itemSelect}
55
+ selectedKeys={itemKeys}
56
+ dataSource={dataSource.filter((item) => !targetKeys.includes(item.id))}
57
+ />
58
+ </div>
59
+ );
60
+ };
61
+
62
+ export default CustomNode;
@@ -0,0 +1,9 @@
1
+ .custom-node-page{
2
+ height: 100%;
3
+ display: flex;
4
+ flex-direction: column;
5
+ .tab-list-page{
6
+ flex: 1;
7
+ overflow-y: auto;
8
+ }
9
+ }