@jiangood/open-admin 1.3.4 → 2.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 (149) hide show
  1. package/config/config.js +3 -0
  2. package/package.json +5 -9
  3. package/src/.umi-production/appData.json +324 -338
  4. package/src/.umi-production/core/helmet.ts +1 -1
  5. package/src/.umi-production/core/history.ts +1 -1
  6. package/src/.umi-production/core/historyIntelli.ts +1 -1
  7. package/src/.umi-production/core/pluginConfig.ts +1 -1
  8. package/src/.umi-production/core/polyfill.ts +216 -216
  9. package/src/.umi-production/core/route.tsx +2 -3
  10. package/src/.umi-production/exports.ts +3 -3
  11. package/src/.umi-production/testBrowser.tsx +1 -1
  12. package/src/.umi-production/tsconfig.json +1 -1
  13. package/src/.umi-production/umi.ts +2 -2
  14. package/src/framework/components/ErrorBoundary/index.tsx +86 -0
  15. package/src/framework/components/Gap/{index.jsx → index.tsx} +1 -1
  16. package/src/framework/components/NamedIcon/index.d.ts +6 -4
  17. package/src/framework/components/NamedIcon/index.jsx +9 -6
  18. package/src/framework/components/OrgTree/{index.jsx → index.tsx} +10 -19
  19. package/src/framework/components/PageLoading/{index.jsx → index.tsx} +2 -5
  20. package/src/framework/components/ProModal/index.tsx +1 -1
  21. package/src/framework/components/ProTable/components/ToolBar/{index.jsx → index.tsx} +3 -3
  22. package/src/framework/components/ProTable/index.less +1 -1
  23. package/src/framework/components/ProTable/{index.jsx → index.tsx} +9 -7
  24. package/src/framework/components/ProTable/utils/index.ts +62 -0
  25. package/src/framework/components/RoleTree/{index.jsx → index.tsx} +7 -17
  26. package/src/framework/components/ValueType/{index.jsx → index.tsx} +2 -1
  27. package/src/framework/components/index.ts +2 -1
  28. package/src/framework/components/system/{ButtonList.jsx → ButtonList.tsx} +2 -2
  29. package/src/framework/components/system/index.tsx +4 -4
  30. package/src/framework/fields/BaseRemoteSelect/index.tsx +129 -0
  31. package/src/framework/fields/FieldDictSelect/{index.jsx → index.tsx} +10 -4
  32. package/src/framework/fields/FieldRemoteSelect/index.tsx +37 -0
  33. package/src/framework/fields/FieldRemoteSelectMultiple/index.tsx +29 -0
  34. package/src/framework/fields/FieldRemoteSelectMultipleInline/index.tsx +33 -0
  35. package/src/framework/fields/FieldRemoteTree/index.tsx +31 -0
  36. package/src/framework/fields/FieldRemoteTreeCascader/index.tsx +39 -0
  37. package/src/framework/fields/FieldRemoteTreeSelect/index.tsx +39 -0
  38. package/src/framework/fields/FieldRemoteTreeSelectMultiple/index.tsx +43 -0
  39. package/src/framework/fields/FieldSysOrgTree/{index.jsx → index.tsx} +2 -2
  40. package/src/framework/fields/FieldSysOrgTreeSelect/{index.jsx → index.tsx} +2 -2
  41. package/src/framework/fields/FieldTable/{index.jsx → index.tsx} +5 -5
  42. package/src/framework/fields/FieldUploadFile/{index.jsx → index.tsx} +1 -3
  43. package/src/framework/index.ts +0 -1
  44. package/src/framework/utils/ArrayUtils.ts +186 -0
  45. package/src/framework/utils/EventBusUtils.ts +0 -1
  46. package/src/framework/utils/MessageUtils.tsx +0 -2
  47. package/src/framework/utils/TreeUtils.ts +2 -2
  48. package/src/framework/utils/index.ts +1 -1
  49. package/src/framework/utils/system/FormRegistryUtils.ts +0 -1
  50. package/src/framework/utils/system/PermUtils.ts +2 -2
  51. package/src/framework/views/ViewApproveStatus/index.tsx +11 -0
  52. package/src/framework/views/ViewBoolean/index.tsx +6 -0
  53. package/src/framework/views/ViewFile/{index.jsx → index.tsx} +4 -4
  54. package/src/framework/views/ViewImage/{index.jsx → index.tsx} +3 -3
  55. package/src/framework/views/ViewPassword/{index.jsx → index.tsx} +2 -2
  56. package/src/framework/views/ViewProcessInstanceProgressButton/{index.jsx → index.tsx} +1 -2
  57. package/src/layouts/PageRender.jsx +6 -6
  58. package/src/layouts/admin/HeaderRight.jsx +2 -2
  59. package/src/layouts/admin/TabPageRender.jsx +28 -13
  60. package/src/layouts/admin/index.jsx +15 -14
  61. package/src/layouts/admin/index.less +1 -1
  62. package/src/layouts/index.jsx +12 -13
  63. package/src/layouts/index.less +2 -2
  64. package/src/pages/login.jsx +132 -4
  65. package/src/{framework/pages/LoginPage.less → pages/login.less} +3 -3
  66. package/src/pages/system/api/index.jsx +10 -10
  67. package/src/pages/system/dict/index.jsx +4 -3
  68. package/src/pages/system/file/index.jsx +6 -5
  69. package/src/pages/system/job/index.jsx +10 -9
  70. package/src/pages/system/{sysManual → manual}/index.jsx +1 -1
  71. package/src/pages/system/org/index.jsx +4 -5
  72. package/src/pages/system/role/index.jsx +5 -5
  73. package/src/pages/system/role/perm.jsx +6 -6
  74. package/src/pages/system/user/UserPerm.jsx +4 -4
  75. package/src/pages/system/user/index.jsx +2 -2
  76. package/src/pages/userCenter/ChangePassword.jsx +3 -5
  77. package/src/pages/userCenter/manual.jsx +1 -1
  78. package/src/pages/userCenter/message.jsx +1 -1
  79. package/src/framework/components/DownloadFileButton/index.d.ts +0 -11
  80. package/src/framework/components/Gap/index.d.ts +0 -23
  81. package/src/framework/components/LinkButton/index.d.ts +0 -14
  82. package/src/framework/components/OrgTree/index.d.ts +0 -4
  83. package/src/framework/components/Page/index.d.ts +0 -17
  84. package/src/framework/components/PageLoading/index.d.ts +0 -1
  85. package/src/framework/components/ProTable/index.d.ts +0 -42
  86. package/src/framework/components/ProTable/utils/index.js +0 -43
  87. package/src/framework/components/RoleTree/index.d.ts +0 -4
  88. package/src/framework/components/ViewRange/index.d.ts +0 -14
  89. package/src/framework/components/system/ButtonList.d.ts +0 -8
  90. package/src/framework/fields/FieldBoolean/index.d.ts +0 -9
  91. package/src/framework/fields/FieldDate/index.d.ts +0 -23
  92. package/src/framework/fields/FieldDateRange/index.d.ts +0 -22
  93. package/src/framework/fields/FieldDictSelect/index.d.ts +0 -12
  94. package/src/framework/fields/FieldEditor/index.d.ts +0 -14
  95. package/src/framework/fields/FieldNumberRange/index.d.ts +0 -10
  96. package/src/framework/fields/FieldPercent/index.d.ts +0 -8
  97. package/src/framework/fields/FieldRemoteSelect/index.d.ts +0 -44
  98. package/src/framework/fields/FieldRemoteSelect/index.jsx +0 -66
  99. package/src/framework/fields/FieldRemoteSelectMultiple/index.d.ts +0 -20
  100. package/src/framework/fields/FieldRemoteSelectMultiple/index.jsx +0 -85
  101. package/src/framework/fields/FieldRemoteSelectMultipleInline/index.d.ts +0 -21
  102. package/src/framework/fields/FieldRemoteSelectMultipleInline/index.jsx +0 -88
  103. package/src/framework/fields/FieldRemoteTree/index.d.ts +0 -20
  104. package/src/framework/fields/FieldRemoteTree/index.jsx +0 -50
  105. package/src/framework/fields/FieldRemoteTreeCascader/index.d.ts +0 -18
  106. package/src/framework/fields/FieldRemoteTreeCascader/index.jsx +0 -59
  107. package/src/framework/fields/FieldRemoteTreeSelect/index.d.ts +0 -19
  108. package/src/framework/fields/FieldRemoteTreeSelect/index.jsx +0 -57
  109. package/src/framework/fields/FieldRemoteTreeSelectMultiple/index.d.ts +0 -20
  110. package/src/framework/fields/FieldRemoteTreeSelectMultiple/index.jsx +0 -62
  111. package/src/framework/fields/FieldSysOrgTree/index.d.ts +0 -9
  112. package/src/framework/fields/FieldSysOrgTreeSelect/index.d.ts +0 -9
  113. package/src/framework/fields/FieldTable/index.d.ts +0 -14
  114. package/src/framework/fields/FieldTableSelect/index.d.ts +0 -19
  115. package/src/framework/fields/FieldUploadFile/index.d.ts +0 -31
  116. package/src/framework/pages/LoginPage.d.ts +0 -16
  117. package/src/framework/pages/LoginPage.jsx +0 -135
  118. package/src/framework/pages/LoginPageUtils.ts +0 -36
  119. package/src/framework/pages/index.ts +0 -2
  120. package/src/framework/utils/ArrUtils.ts +0 -229
  121. package/src/framework/views/ViewApproveStatus/index.d.ts +0 -5
  122. package/src/framework/views/ViewApproveStatus/index.jsx +0 -15
  123. package/src/framework/views/ViewBoolean/index.d.ts +0 -3
  124. package/src/framework/views/ViewBoolean/index.jsx +0 -4
  125. package/src/framework/views/ViewBooleanEnableDisable/index.d.ts +0 -5
  126. package/src/framework/views/ViewFile/index.d.ts +0 -10
  127. package/src/framework/views/ViewFileButton/index.d.ts +0 -10
  128. package/src/framework/views/ViewImage/index.d.ts +0 -6
  129. package/src/framework/views/ViewPassword/index.d.ts +0 -5
  130. package/src/framework/views/ViewProcessInstanceProgress/index.d.ts +0 -12
  131. package/src/framework/views/ViewProcessInstanceProgressButton/index.d.ts +0 -6
  132. package/src/framework/views/ViewText/index.d.ts +0 -16
  133. package/src/pages/test/views.jsx +0 -95
  134. package/src/framework/components/DownloadFileButton/{index.jsx → index.tsx} +0 -0
  135. package/src/framework/components/LinkButton/{index.jsx → index.tsx} +0 -0
  136. package/src/framework/components/Page/{index.jsx → index.tsx} +0 -0
  137. package/src/framework/components/ValueType/{registry.jsx → registry.tsx} +1 -1
  138. /package/src/framework/components/ViewRange/{index.jsx → index.tsx} +0 -0
  139. /package/src/framework/fields/FieldBoolean/{index.jsx → index.tsx} +0 -0
  140. /package/src/framework/fields/FieldDate/{index.jsx → index.tsx} +0 -0
  141. /package/src/framework/fields/FieldDateRange/{index.jsx → index.tsx} +0 -0
  142. /package/src/framework/fields/FieldEditor/{index.jsx → index.tsx} +0 -0
  143. /package/src/framework/fields/FieldNumberRange/{index.jsx → index.tsx} +0 -0
  144. /package/src/framework/fields/FieldPercent/{index.jsx → index.tsx} +0 -0
  145. /package/src/framework/fields/FieldTableSelect/{index.jsx → index.tsx} +0 -0
  146. /package/src/framework/views/ViewBooleanEnableDisable/{index.jsx → index.tsx} +0 -0
  147. /package/src/framework/views/ViewFileButton/{index.jsx → index.tsx} +0 -0
  148. /package/src/framework/views/ViewProcessInstanceProgress/{index.jsx → index.tsx} +0 -0
  149. /package/src/framework/views/ViewText/{index.jsx → index.tsx} +0 -0
@@ -1,8 +0,0 @@
1
- // @ts-ignore
2
- import React from "react";
3
-
4
- declare type ButtonListProps = {
5
- };
6
-
7
- export class ButtonList extends React.Component<ButtonListProps, any> {
8
- }
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { FieldProps } from '../types';
3
-
4
- interface FieldBooleanProps extends FieldProps<boolean> {
5
- type?: 'select' | 'radio' | 'checkbox' | 'switch'; // 默认 select
6
- }
7
-
8
- export class FieldBoolean extends React.Component<FieldBooleanProps, any> {
9
- }
@@ -1,23 +0,0 @@
1
- import React from "react";
2
- import { FieldProps } from '../types';
3
-
4
- interface FieldDateProps extends FieldProps<string | null> {
5
- type: 'YYYY-MM-DD' | 'DAY'|
6
- 'YYYY-MM-DD HH:mm:ss' |
7
- // 年
8
- 'YYYY' | 'YEAR' |
9
- // 年月
10
- 'YYYY-MM' | 'YEAR_MONTH'|
11
- // 季度
12
- 'YYYY-QQ' | 'YEAR_QUARTER'|
13
-
14
- 'YYYY-MM-DD HH:mm' |
15
-
16
- // 时间
17
- 'HH:mm' |
18
- 'HH:mm:ss';
19
- }
20
-
21
- export class FieldDate extends React.Component<FieldDateProps, any> {
22
- static getDefaultValue(type: string): string | null;
23
- }
@@ -1,22 +0,0 @@
1
- import React from "react";
2
- import { FieldProps } from '../types';
3
-
4
- interface FieldDateRangeProps extends FieldProps<string> {
5
- type: 'YYYY-MM-DD' | 'DAY'|
6
- 'YYYY-MM-DD HH:mm:ss' |
7
- // 年
8
- 'YYYY' | 'YEAR' |
9
- // 年月
10
- 'YYYY-MM' | 'YEAR_MONTH'|
11
- // 季度
12
- 'YYYY-QQ' | 'YEAR_QUARTER'|
13
-
14
- 'YYYY-MM-DD HH:mm' |
15
-
16
- // 时间
17
- 'HH:mm' |
18
- 'HH:mm:ss';
19
- }
20
-
21
- export class FieldDateRange extends React.Component<FieldDateRangeProps, any> {
22
- }
@@ -1,12 +0,0 @@
1
- import React from "react";
2
- import {SelectProps} from "antd/es/select";
3
- import { FieldProps } from '../types';
4
-
5
- interface FieldDictSelectProps extends Omit<SelectProps, 'options' | 'children'|'mode' | 'value' | 'onChange'>, FieldProps<any> {
6
- /**
7
- * 字典类型编码
8
- */
9
- typeCode: string;
10
- }
11
-
12
- export function FieldDictSelect(props: FieldDictSelectProps);
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { FieldProps } from '../types';
3
-
4
- /**
5
- * 富文本编辑器
6
- *
7
- * 图片上传相关配置 https://www.tiny.cloud/docs/tinymce/7/image/
8
- */
9
- interface FieldEditProps extends FieldProps<string> {
10
- height?: number;
11
- }
12
-
13
- export class FieldEditor extends React.Component<FieldEditProps, any> {
14
- }
@@ -1,10 +0,0 @@
1
- import React from "react";
2
- import { FieldProps } from '../types';
3
-
4
- interface FieldNumberRangeProps extends FieldProps<string> {
5
- defaultValue?: string;
6
- }
7
-
8
- export class FieldNumberRange extends React.Component<FieldNumberRangeProps, any> {
9
-
10
- }
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import { FieldProps } from '../types';
3
-
4
- /**
5
- * 数字的百分数输入框
6
- */
7
- export class FieldPercent extends React.Component<FieldProps<number>, any> {
8
- }
@@ -1,44 +0,0 @@
1
- import React from 'react';
2
- import { SelectProps } from "antd/es/select";
3
- import { FieldProps } from '../types';
4
-
5
- interface FieldRemoteSelectProps extends Omit<SelectProps, 'value' | 'onChange'>, FieldProps<any> {
6
- /**
7
- * 请求地址
8
- */
9
- url: string;
10
- /**
11
- * 防抖时间(毫秒)
12
- */
13
- debounceTime?: number;
14
- /**
15
- * 请求参数处理函数
16
- */
17
- paramsProcessor?: (params: any) => any;
18
- /**
19
- * 响应数据处理函数
20
- */
21
- dataProcessor?: (data: any) => any;
22
- /**
23
- * 缓存大小
24
- */
25
- cacheSize?: number;
26
- /**
27
- * 初始加载
28
- */
29
- initialLoad?: boolean;
30
- /**
31
- * 搜索时是否清空已选项
32
- */
33
- clearOnSearch?: boolean;
34
- /**
35
- * 请求失败回调
36
- */
37
- onError?: (error: any) => void;
38
- /**
39
- * 加载完成回调
40
- */
41
- onLoad?: (data: any) => void;
42
- }
43
-
44
- export const FieldRemoteSelect: React.FC<FieldRemoteSelectProps>;
@@ -1,66 +0,0 @@
1
- import React, { useState, useEffect, useCallback, useRef } from 'react';
2
- import { Select, Spin, message } from 'antd';
3
- import { debounce } from 'lodash';
4
- import { HttpUtils } from "../../utils";
5
-
6
- export class FieldRemoteSelect extends React.Component {
7
-
8
- static defaultProps = {
9
- placeholder: '请搜索选择'
10
- }
11
-
12
- state = {
13
- dataLoading:true,
14
- data: {}
15
- }
16
-
17
- componentDidMount() {
18
- this.loadData(null);
19
- }
20
-
21
- loadData = (searchText) => {
22
- this.setState({dataLoading:true})
23
- const {url} = this.props;
24
- const params = {
25
- searchText,
26
- selected: this.props.value
27
- };
28
-
29
- HttpUtils.get(url,params).then(data => {
30
- this.setState({data})
31
- }).finally(() => {
32
- this.setState({dataLoading: false})
33
- })
34
- };
35
- handleSearch = searchText => {
36
- this.loadData(searchText)
37
- };
38
-
39
- render() {
40
- let {
41
- value,
42
- placeholder,
43
- ...rest
44
- } = this.props;
45
-
46
- return (
47
- <Select
48
- showSearch={{
49
- filterOption: false,
50
- onSearch: this.handleSearch,
51
- }}
52
- options={this.state.data}
53
- notFoundContent={this.state.dataLoading ? <Spin size="small"/> : '数据为空'}
54
- style={{width: '100%', minWidth: 200}}
55
- allowClear
56
- loading={this.state.dataLoading}
57
- value={value}
58
- {...rest}
59
- />
60
- );
61
- }
62
- }
63
-
64
-
65
-
66
-
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- import {SelectProps} from "antd/es/select";
3
-
4
- interface FieldRemoteSelectMultipleProps extends Omit<SelectProps, 'options' | 'children'| 'mode' | 'value' | 'onChange'> {
5
- /**
6
- * 请求地址
7
- */
8
- url: string;
9
- /**
10
- * 选中的值
11
- */
12
- value?: any[];
13
- /**
14
- * 值变化回调
15
- */
16
- onChange?: (value: any[]) => void;
17
- }
18
-
19
- export class FieldRemoteSelectMultiple extends React.Component<FieldRemoteSelectMultipleProps, any> {
20
- }
@@ -1,85 +0,0 @@
1
- import React from 'react';
2
- import {Select, Spin, message} from 'antd';
3
- import {debounce} from 'lodash';
4
- import {HttpUtils} from "../../utils";
5
-
6
- export class FieldRemoteSelectMultiple extends React.Component {
7
- constructor(props) {
8
- super(props);
9
-
10
- this.fetchIdRef = 0;
11
- this.state = {
12
- options: [],
13
- loading: false,
14
- };
15
-
16
- this.loadDataDebounce = debounce(this.loadData, 800);
17
- }
18
-
19
- static defaultProps = {
20
- placeholder: '请搜索选择'
21
- };
22
-
23
- componentDidMount() {
24
- this.loadData('');
25
- }
26
-
27
- componentWillUnmount() {
28
- this.loadDataDebounce.cancel();
29
- }
30
-
31
- loadData = async (searchText) => {
32
- const {url, value} = this.props;
33
- const fetchId = ++this.fetchIdRef;
34
-
35
- this.setState({loading: true});
36
-
37
- try {
38
- const data = await HttpUtils.get(url, {searchText, selected: value});
39
-
40
- if (fetchId === this.fetchIdRef) {
41
- this.setState({options: data || []});
42
- }
43
- } catch (error) {
44
- console.error('远程搜索失败:', error);
45
- message.error('搜索失败,请重试');
46
- this.setState({options: []});
47
- } finally {
48
- if (fetchId === this.fetchIdRef) {
49
- this.setState({loading: false});
50
- }
51
- }
52
- };
53
-
54
- handleSearch = (value) => {
55
- if (value.trim() === '') {
56
- this.setState({options: []});
57
- return;
58
- }
59
- this.loadDataDebounce(value.trim());
60
- };
61
-
62
- render() {
63
- const {options, loading} = this.state;
64
- const {value, onChange, url, ...selectProps} = this.props;
65
- return (
66
- <Select
67
- showSearch={
68
- {
69
- filterOption: false,
70
- onSearch: this.handleSearch,
71
- }
72
- }
73
- value={value}
74
- onChange={onChange}
75
- options={options}
76
- notFoundContent={loading ? <Spin size="small"/> : '数据为空'}
77
- style={{width: '100%', minWidth: 200}}
78
- allowClear
79
- mode='multiple'
80
- {...selectProps}
81
- >
82
- </Select>
83
- );
84
- }
85
- }
@@ -1,21 +0,0 @@
1
- import React from 'react';
2
- import {SelectProps} from "antd/es/select";
3
- import { FieldProps } from '../types';
4
-
5
- /**
6
- * 多选,但是值是字符串,逗号破解的
7
- */
8
- export interface FieldRemoteSelectMultipleInlineProps extends Omit<SelectProps, 'options' | 'children'| 'mode' | 'value' | 'onChange'>, FieldProps<string> {
9
- /**
10
- * 请求地址
11
- */
12
- url: string;
13
-
14
- /**
15
- * 默认展开所有
16
- */
17
- treeDefaultExpandAll?: boolean;
18
- }
19
-
20
- export class FieldRemoteSelectMultipleInline extends React.Component<FieldRemoteSelectMultipleInlineProps, any> {
21
- }
@@ -1,88 +0,0 @@
1
- import React from 'react';
2
- import {Select, Spin, message} from 'antd';
3
- import {debounce} from 'lodash';
4
- import {HttpUtils, StringUtils} from "../../utils";
5
-
6
- /**
7
- * 多选,但是值是字符串,逗号破解的
8
- */
9
- export class FieldRemoteSelectMultipleInline extends React.Component {
10
- constructor(props) {
11
- super(props);
12
-
13
- this.fetchIdRef = 0;
14
- this.state = {
15
- options: [],
16
- loading: false,
17
- };
18
-
19
- this.loadDataDebounce = debounce(this.loadData, 800);
20
- }
21
-
22
- static defaultProps = {
23
- placeholder: '请搜索选择'
24
- };
25
-
26
- componentDidMount() {
27
- this.loadData('');
28
- }
29
-
30
- componentWillUnmount() {
31
- this.loadDataDebounce.cancel();
32
- }
33
-
34
- loadData = async (searchText) => {
35
- const {url, value} = this.props;
36
- const fetchId = ++this.fetchIdRef;
37
-
38
- this.setState({loading: true});
39
-
40
- try {
41
- const data = await HttpUtils.get(url, {searchText, selected: value});
42
-
43
- if (fetchId === this.fetchIdRef) {
44
- this.setState({options: data || []});
45
- }
46
- } catch (error) {
47
- console.error('远程搜索失败:', error);
48
- message.error('搜索失败,请重试');
49
- this.setState({options: []});
50
- } finally {
51
- if (fetchId === this.fetchIdRef) {
52
- this.setState({loading: false});
53
- }
54
- }
55
- };
56
-
57
- handleSearch = (value) => {
58
- if (value.trim() === '') {
59
- this.setState({options: []});
60
- return;
61
- }
62
- this.loadDataDebounce(value.trim());
63
- };
64
-
65
- render() {
66
- const {options, loading} = this.state;
67
- const {value, onChange, url, ...selectProps} = this.props;
68
- return (
69
- <Select
70
- showSearch={
71
- {
72
- filterOption: false,
73
- onSearch: this.handleSearch,
74
- }
75
- }
76
- value={StringUtils.split(value, ',')}
77
- onChange={arr => onChange && onChange(StringUtils.join(arr, ','))}
78
- options={options}
79
- notFoundContent={loading ? <Spin size="small"/> : '数据为空'}
80
- style={{width: '100%', minWidth: 200}}
81
- allowClear
82
- mode='multiple'
83
- {...selectProps}
84
- >
85
- </Select>
86
- );
87
- }
88
- }
@@ -1,20 +0,0 @@
1
- import React from "react";
2
- import {TreeProps} from "antd";
3
- import { FieldProps } from '../types';
4
-
5
- /**
6
- * 多选树
7
- *
8
- * 区别于下拉框,是扁平展示的树
9
- * 这种需要扁平展示的树,通常都是多选。
10
- *
11
- */
12
- interface FieldRemoteTreeProps extends Omit<TreeProps, 'treeData' | 'checkedKeys' | 'onCheck' | 'multiple' | 'checkable' | 'defaultExpandAll' | 'checkStrictly'>, FieldProps<string[]> {
13
- /**
14
- * 请求地址
15
- */
16
- url: string;
17
- }
18
-
19
- export class FieldRemoteTree extends React.Component<FieldRemoteTreeProps, string> {
20
- }
@@ -1,50 +0,0 @@
1
- import React from "react";
2
- import {Spin, Tree} from "antd";
3
- import {HttpUtils} from "../../utils";
4
-
5
- /**
6
- * 多选树
7
- *
8
- * 区别于下拉框,是扁平展示的树
9
- * 这种需要扁平展示的树,通常都是多选。
10
- *
11
- */
12
- export class FieldRemoteTree extends React.Component {
13
- state = {
14
- treeLoading: true,
15
- treeData: [],
16
- };
17
-
18
- componentDidMount() {
19
- this.loadData();
20
- }
21
-
22
- loadData = async () => {
23
- this.setState({treeLoading: true});
24
- const {url} = this.props;
25
- try {
26
- const treeData = await HttpUtils.get(url);
27
- this.setState({treeData});
28
- } catch (e) {
29
- console.log(e);
30
- } finally {
31
- this.setState({treeLoading: false});
32
- }
33
- };
34
-
35
- render() {
36
- if (this.state.treeLoading) {
37
- return <Spin/>;
38
- }
39
- return <Tree
40
- multiple
41
- checkable
42
- onCheck={e => this.props.onChange && this.props.onChange(e.checked)}
43
- checkedKeys={this.props.value}
44
- treeData={this.state.treeData}
45
- defaultExpandAll
46
- checkStrictly
47
- >
48
- </Tree>;
49
- }
50
- }
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { FieldProps } from '../types';
3
-
4
- /**
5
- * 远程树级联选择器, 类似select,但是树级联
6
- *
7
- * 注意,value为非数组形式,区别于cascader组件
8
- */
9
- interface FieldRemoteTreeCascaderProps extends FieldProps<string> {
10
- /**
11
- * 请求地址
12
- * 要求返回数据格式为:tree
13
- */
14
- url: string;
15
- }
16
-
17
- export class FieldRemoteTreeCascader extends React.Component<FieldRemoteTreeCascaderProps, any> {
18
- }
@@ -1,59 +0,0 @@
1
- import {Cascader, message, Spin} from 'antd';
2
- import React from 'react';
3
- import {HttpUtils, TreeUtils} from "../../utils";
4
-
5
- /**
6
- * 远程树级联选择器, 类似select,但是树级联
7
- *
8
- * 注意,value为非数组形式,区别于cascader组件
9
- */
10
- export class FieldRemoteTreeCascader extends React.Component {
11
- state = {
12
- data: [],
13
- loading: false,
14
- };
15
-
16
- componentDidMount() {
17
- this.loadData();
18
- }
19
-
20
- loadData = async () => {
21
- const {url} = this.props;
22
- this.setState({loading: true});
23
-
24
- try {
25
- const list = await HttpUtils.get(url);
26
- this.setState({data: list});
27
- } catch (e) {
28
- console.log(e);
29
- } finally {
30
- this.setState({loading: false});
31
- }
32
-
33
- };
34
-
35
- render() {
36
- const {data} = this.state;
37
- if (this.state.loading) {
38
- return <Spin/>;
39
- }
40
- const {value, onChange, ...rest} = this.props;
41
-
42
- let arr = [];
43
- if (value != null) {
44
- arr = TreeUtils.getKeyList(data, value);
45
- }
46
-
47
- return (
48
- <Cascader
49
- options={this.state.data}
50
- onChange={arr => {
51
- onChange && onChange(arr[arr.length - 1]);
52
- }}
53
- value={arr}
54
- fieldNames={{label: 'title', value: 'key'}}
55
- {...rest}
56
- />
57
- );
58
- }
59
- }
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import { FieldProps } from '../types';
3
-
4
- interface FieldRemoteTreeSelectProps extends FieldProps<string | number> {
5
- /**
6
- * 请求地址
7
- */
8
- url: string;
9
-
10
- /**
11
- * 默认展开所有
12
- */
13
- treeDefaultExpandAll?: boolean;
14
-
15
- id?: string;
16
- }
17
-
18
- export class FieldRemoteTreeSelect extends React.Component<FieldRemoteTreeSelectProps, any> {
19
- }
@@ -1,57 +0,0 @@
1
- import {Spin, TreeSelect} from 'antd';
2
- import React from 'react';
3
- import {HttpUtils, StringUtils} from "../../utils";
4
-
5
- export class FieldRemoteTreeSelect extends React.Component {
6
- static defaultProps = {
7
- treeDefaultExpandAll: true,
8
- };
9
-
10
- state = {
11
- data: [],
12
- loading: false,
13
- key: this.props.id,
14
- };
15
-
16
- componentDidMount() {
17
- this.loadData();
18
- }
19
-
20
- loadData = async () => {
21
- const {url} = this.props;
22
- this.setState({loading: true});
23
- try {
24
- const rs = await HttpUtils.get(url);
25
- this.setState({data: rs});
26
- } finally {
27
- this.setState({loading: false});
28
- }
29
- };
30
-
31
- render() {
32
- const {value, onChange, treeDefaultExpandAll} = this.props;
33
- const {data, loading} = this.state;
34
-
35
- if (loading) {
36
- return <Spin/>;
37
- }
38
-
39
- return (
40
- <TreeSelect
41
- style={{width: '100%', minWidth: 200}}
42
- allowClear={true}
43
- dropdownStyle={{maxHeight: 400, overflow: 'auto'}}
44
- treeData={data}
45
- showCheckedStrategy={TreeSelect.SHOW_ALL}
46
- value={value || undefined}
47
- onChange={onChange}
48
- filterTreeNode={(inputValue, treeNode) => {
49
- const {title} = treeNode;
50
- return StringUtils.contains(title, inputValue);
51
- }}
52
- treeLine={{showLeafIcon: true}}
53
- treeDefaultExpandAll={treeDefaultExpandAll}
54
- />
55
- );
56
- }
57
- }