feffery_antd_components 0.1.4 → 0.1.7
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/DESCRIPTION +1 -1
- package/NAMESPACE +2 -0
- package/Project.toml +1 -1
- package/README.md +2 -2
- package/build/lib/feffery_antd_components/AntdAffix.py +54 -0
- package/build/lib/feffery_antd_components/AntdAlert.py +58 -0
- package/build/lib/feffery_antd_components/AntdAnchor.py +60 -0
- package/build/lib/feffery_antd_components/AntdAvatar.py +79 -0
- package/build/lib/feffery_antd_components/AntdBackTop.py +52 -0
- package/build/lib/feffery_antd_components/AntdBadge.py +70 -0
- package/build/lib/feffery_antd_components/AntdBreadcrumb.py +74 -0
- package/build/lib/feffery_antd_components/AntdButton.py +68 -0
- package/build/lib/feffery_antd_components/AntdCalendar.py +75 -0
- package/build/lib/feffery_antd_components/AntdCard.py +86 -0
- package/build/lib/feffery_antd_components/AntdCardGrid.py +52 -0
- package/build/lib/feffery_antd_components/AntdCarousel.py +56 -0
- package/build/lib/feffery_antd_components/AntdCascader.py +93 -0
- package/build/lib/feffery_antd_components/AntdCheckbox.py +71 -0
- package/build/lib/feffery_antd_components/AntdCheckboxGroup.py +79 -0
- package/build/lib/feffery_antd_components/AntdCol.py +146 -0
- package/build/lib/feffery_antd_components/AntdCollapse.py +79 -0
- package/build/lib/feffery_antd_components/AntdComment.py +88 -0
- package/build/lib/feffery_antd_components/AntdContent.py +50 -0
- package/build/lib/feffery_antd_components/AntdCountdown.py +72 -0
- package/build/lib/feffery_antd_components/AntdDatePicker.py +95 -0
- package/build/lib/feffery_antd_components/AntdDateRangePicker.py +91 -0
- package/build/lib/feffery_antd_components/AntdDescriptionItem.py +58 -0
- package/build/lib/feffery_antd_components/AntdDescriptions.py +76 -0
- package/build/lib/feffery_antd_components/AntdDivider.py +62 -0
- package/build/lib/feffery_antd_components/AntdDraggerUpload.py +84 -0
- package/build/lib/feffery_antd_components/AntdDrawer.py +72 -0
- package/build/lib/feffery_antd_components/AntdDropdown.py +84 -0
- package/build/lib/feffery_antd_components/AntdEmpty.py +54 -0
- package/build/lib/feffery_antd_components/AntdFooter.py +50 -0
- package/build/lib/feffery_antd_components/AntdForm.py +72 -0
- package/build/lib/feffery_antd_components/AntdFormItem.py +84 -0
- package/build/lib/feffery_antd_components/AntdHeader.py +50 -0
- package/build/lib/feffery_antd_components/AntdIcon.py +48 -0
- package/build/lib/feffery_antd_components/AntdImage.py +62 -0
- package/build/lib/feffery_antd_components/AntdInput.py +101 -0
- package/build/lib/feffery_antd_components/AntdInputNumber.py +101 -0
- package/build/lib/feffery_antd_components/AntdLayout.py +50 -0
- package/build/lib/feffery_antd_components/AntdMentions.py +76 -0
- package/build/lib/feffery_antd_components/AntdMenu.py +81 -0
- package/build/lib/feffery_antd_components/AntdMessage.py +56 -0
- package/build/lib/feffery_antd_components/AntdModal.py +88 -0
- package/build/lib/feffery_antd_components/AntdNotification.py +60 -0
- package/build/lib/feffery_antd_components/AntdPageHeader.py +62 -0
- package/build/lib/feffery_antd_components/AntdPagination.py +95 -0
- package/build/lib/feffery_antd_components/AntdParagraph.py +70 -0
- package/build/lib/feffery_antd_components/AntdPasteImage.py +52 -0
- package/build/lib/feffery_antd_components/AntdPopconfirm.py +80 -0
- package/build/lib/feffery_antd_components/AntdPopover.py +74 -0
- package/build/lib/feffery_antd_components/AntdProgress.py +88 -0
- package/build/lib/feffery_antd_components/AntdRadio.py +54 -0
- package/build/lib/feffery_antd_components/AntdRadioGroup.py +89 -0
- package/build/lib/feffery_antd_components/AntdRate.py +60 -0
- package/build/lib/feffery_antd_components/AntdResult.py +52 -0
- package/build/lib/feffery_antd_components/AntdRibbon.py +54 -0
- package/build/lib/feffery_antd_components/AntdRow.py +72 -0
- package/build/lib/feffery_antd_components/AntdSelect.py +121 -0
- package/build/lib/feffery_antd_components/AntdSider.py +68 -0
- package/build/lib/feffery_antd_components/AntdSkeleton.py +86 -0
- package/build/lib/feffery_antd_components/AntdSlider.py +68 -0
- package/build/lib/feffery_antd_components/AntdSpace.py +60 -0
- package/build/lib/feffery_antd_components/AntdSpin.py +68 -0
- package/build/lib/feffery_antd_components/AntdStatistic.py +74 -0
- package/build/lib/feffery_antd_components/AntdSteps.py +72 -0
- package/build/lib/feffery_antd_components/AntdSwitch.py +75 -0
- package/build/lib/feffery_antd_components/AntdTabPane.py +66 -0
- package/build/lib/feffery_antd_components/AntdTable.py +264 -0
- package/build/lib/feffery_antd_components/AntdTabs.py +81 -0
- package/build/lib/feffery_antd_components/AntdTag.py +54 -0
- package/build/lib/feffery_antd_components/AntdTestLink.py +58 -0
- package/build/lib/feffery_antd_components/AntdText.py +72 -0
- package/build/lib/feffery_antd_components/AntdTimePicker.py +95 -0
- package/build/lib/feffery_antd_components/AntdTimeRangePicker.py +95 -0
- package/build/lib/feffery_antd_components/AntdTimeline.py +68 -0
- package/build/lib/feffery_antd_components/AntdTitle.py +74 -0
- package/build/lib/feffery_antd_components/AntdTooltip.py +64 -0
- package/build/lib/feffery_antd_components/AntdTransfer.py +99 -0
- package/build/lib/feffery_antd_components/AntdTree.py +103 -0
- package/build/lib/feffery_antd_components/AntdTreeSelect.py +107 -0
- package/build/lib/feffery_antd_components/AntdTypography.py +50 -0
- package/build/lib/feffery_antd_components/AntdUpload.py +92 -0
- package/build/lib/feffery_antd_components/AntdWatermark.py +64 -0
- package/build/lib/feffery_antd_components/Link.py +58 -0
- package/build/lib/feffery_antd_components/__init__.py +53 -0
- package/build/lib/feffery_antd_components/_imports_.py +161 -0
- package/build/lib/feffery_antd_components/feffery_antd_components.min.js +344 -0
- package/build/lib/feffery_antd_components/metadata.json +15596 -0
- package/build/lib/feffery_antd_components/package-info.json +81 -0
- package/feffery_antd_components/AntdAnchor.py +9 -3
- package/feffery_antd_components/AntdButton.py +5 -3
- package/feffery_antd_components/AntdCascader.py +5 -3
- package/feffery_antd_components/AntdDatePicker.py +5 -3
- package/feffery_antd_components/AntdDateRangePicker.py +5 -3
- package/feffery_antd_components/AntdDraggerUpload.py +6 -4
- package/feffery_antd_components/AntdImage.py +2 -2
- package/feffery_antd_components/AntdInput.py +5 -3
- package/feffery_antd_components/AntdInputNumber.py +5 -3
- package/feffery_antd_components/AntdMentions.py +5 -3
- package/feffery_antd_components/AntdMessage.py +5 -3
- package/feffery_antd_components/AntdPasteImage.py +52 -0
- package/feffery_antd_components/AntdSelect.py +7 -3
- package/feffery_antd_components/AntdTable.py +27 -3
- package/feffery_antd_components/AntdTimePicker.py +5 -3
- package/feffery_antd_components/AntdTimeRangePicker.py +5 -3
- package/feffery_antd_components/AntdTree.py +6 -10
- package/feffery_antd_components/AntdTreeSelect.py +7 -3
- package/feffery_antd_components/AntdUpload.py +16 -4
- package/feffery_antd_components/AntdWatermark.py +64 -0
- package/feffery_antd_components/_imports_.py +4 -0
- package/feffery_antd_components/feffery_antd_components.min.js +13 -13
- package/feffery_antd_components/metadata.json +680 -43
- package/feffery_antd_components/package-info.json +18 -14
- package/package.json +18 -14
- package/src/FefferyAntdComponents.jl +5 -3
- package/src/jl/'feffery'_antdanchor.jl +4 -1
- package/src/jl/'feffery'_antdbutton.jl +2 -1
- package/src/jl/'feffery'_antdcascader.jl +2 -1
- package/src/jl/'feffery'_antddatepicker.jl +2 -1
- package/src/jl/'feffery'_antddaterangepicker.jl +2 -1
- package/src/jl/'feffery'_antddraggerupload.jl +2 -1
- package/src/jl/'feffery'_antdimage.jl +2 -2
- package/src/jl/'feffery'_antdinput.jl +2 -1
- package/src/jl/'feffery'_antdinputnumber.jl +2 -1
- package/src/jl/'feffery'_antdmentions.jl +2 -1
- package/src/jl/'feffery'_antdmessage.jl +2 -1
- package/src/jl/'feffery'_antdpasteimage.jl +28 -0
- package/src/jl/'feffery'_antdselect.jl +3 -1
- package/src/jl/'feffery'_antdtable.jl +19 -5
- package/src/jl/'feffery'_antdtimepicker.jl +2 -1
- package/src/jl/'feffery'_antdtimerangepicker.jl +2 -1
- package/src/jl/'feffery'_antdtree.jl +3 -5
- package/src/jl/'feffery'_antdtreeselect.jl +3 -1
- package/src/jl/'feffery'_antdupload.jl +9 -2
- package/src/jl/'feffery'_antdwatermark.jl +39 -0
- package/src/lib/components/AntdAnchor.react.js +18 -3
- package/src/lib/components/AntdButton.react.js +5 -1
- package/src/lib/components/AntdCascader.react.js +5 -0
- package/src/lib/components/AntdDatePicker.react.js +5 -0
- package/src/lib/components/AntdDateRangePicker.react.js +5 -0
- package/src/lib/components/AntdDraggerUpload.react.js +41 -11
- package/src/lib/components/AntdImage.react.js +8 -2
- package/src/lib/components/AntdInput.react.js +8 -0
- package/src/lib/components/AntdInputNumber.react.js +5 -0
- package/src/lib/components/AntdMentions.react.js +5 -0
- package/src/lib/components/AntdMessage.react.js +6 -1
- package/src/lib/components/AntdPasteImage.react.js +170 -0
- package/src/lib/components/AntdSelect.react.js +11 -0
- package/src/lib/components/AntdTable.react.js +69 -6
- package/src/lib/components/AntdTimePicker.react.js +5 -0
- package/src/lib/components/AntdTimeRangePicker.react.js +5 -0
- package/src/lib/components/AntdTree.react.js +6 -13
- package/src/lib/components/AntdTreeSelect.react.js +11 -0
- package/src/lib/components/AntdUpload.react.js +78 -24
- package/src/lib/components/AntdWatermark.react.js +115 -0
- package/src/lib/components/styles.css +12 -11
- package/src/lib/components/tabs/AntdTabs.react.js +4 -0
- package/src/lib/index.js +5 -1
- package/usage.py +76 -1033
- package/webpack.config.js +9 -3
|
@@ -5,7 +5,7 @@ import 'antd/dist/antd.css';
|
|
|
5
5
|
|
|
6
6
|
const { Link } = Anchor;
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// 定义锚点组件AntdAnchor,api参数参考https://ant.design/components/anchor-cn/
|
|
9
9
|
export default class AntdAnchor extends Component {
|
|
10
10
|
render() {
|
|
11
11
|
// 取得必要属性或参数
|
|
@@ -17,6 +17,9 @@ export default class AntdAnchor extends Component {
|
|
|
17
17
|
align,
|
|
18
18
|
containerId,
|
|
19
19
|
targetOffset,
|
|
20
|
+
affix,
|
|
21
|
+
bounds,
|
|
22
|
+
offsetTop,
|
|
20
23
|
loading_state
|
|
21
24
|
} = this.props;
|
|
22
25
|
|
|
@@ -66,7 +69,10 @@ export default class AntdAnchor extends Component {
|
|
|
66
69
|
className={className}
|
|
67
70
|
style={style}
|
|
68
71
|
getContainer={containerId ? () => document.getElementById(containerId) : containerId}
|
|
69
|
-
targetOffset={targetOffset}
|
|
72
|
+
targetOffset={targetOffset}
|
|
73
|
+
affix={affix}
|
|
74
|
+
bounds={bounds}
|
|
75
|
+
offsetTop={offsetTop}>
|
|
70
76
|
{linkDict}
|
|
71
77
|
</Anchor>
|
|
72
78
|
}
|
|
@@ -108,9 +114,18 @@ AntdAnchor.propTypes = {
|
|
|
108
114
|
// 设置其绑定的容器id
|
|
109
115
|
containerId: PropTypes.string,
|
|
110
116
|
|
|
111
|
-
//
|
|
117
|
+
// 设置锚点位移偏移量,默认与offsetTop相同
|
|
112
118
|
targetOffset: PropTypes.number,
|
|
113
119
|
|
|
120
|
+
// 设置是否开启“固定模式”,默认为true
|
|
121
|
+
affix: PropTypes.bool,
|
|
122
|
+
|
|
123
|
+
// 设置锚点区域的边界像素大小,默认为5
|
|
124
|
+
bounds: PropTypes.number,
|
|
125
|
+
|
|
126
|
+
// 设置距离窗口顶部触发锚定效果的指定像素偏移量
|
|
127
|
+
offsetTop: PropTypes.number,
|
|
128
|
+
|
|
114
129
|
loading_state: PropTypes.shape({
|
|
115
130
|
/**
|
|
116
131
|
* Determines if the component is loading or not
|
|
@@ -22,7 +22,7 @@ export default class AntdButton extends Component {
|
|
|
22
22
|
shape,
|
|
23
23
|
size,
|
|
24
24
|
nClicks,
|
|
25
|
-
|
|
25
|
+
loading,
|
|
26
26
|
loading_state
|
|
27
27
|
} = this.props;
|
|
28
28
|
|
|
@@ -45,6 +45,7 @@ export default class AntdButton extends Component {
|
|
|
45
45
|
// 更新nClicks
|
|
46
46
|
setProps({ nClicks: nClicks })
|
|
47
47
|
}}
|
|
48
|
+
loading={loading}
|
|
48
49
|
data-dash-is-loading={
|
|
49
50
|
(loading_state && loading_state.is_loading) || undefined
|
|
50
51
|
}
|
|
@@ -95,6 +96,9 @@ AntdButton.propTypes = {
|
|
|
95
96
|
// 记录按钮从渲染后开始被点击的次数,默认为0
|
|
96
97
|
nClicks: PropTypes.number,
|
|
97
98
|
|
|
99
|
+
// 用于设置是否为按钮渲染“加载中不可点击”效果,默认为false
|
|
100
|
+
loading: PropTypes.bool,
|
|
101
|
+
|
|
98
102
|
loading_state: PropTypes.shape({
|
|
99
103
|
/**
|
|
100
104
|
* Determines if the component is loading or not
|
|
@@ -33,6 +33,7 @@ export default class AntdCascader extends Component {
|
|
|
33
33
|
maxTagCount,
|
|
34
34
|
multiple,
|
|
35
35
|
expandTrigger,
|
|
36
|
+
status,
|
|
36
37
|
setProps,
|
|
37
38
|
persistence,
|
|
38
39
|
persisted_props,
|
|
@@ -71,6 +72,7 @@ export default class AntdCascader extends Component {
|
|
|
71
72
|
persisted_props={persisted_props}
|
|
72
73
|
persistence_type={persistence_type}
|
|
73
74
|
expandTrigger={expandTrigger}
|
|
75
|
+
status={status}
|
|
74
76
|
showSearch={filter}
|
|
75
77
|
onChange={onSelect}
|
|
76
78
|
data-dash-is-loading={
|
|
@@ -169,6 +171,9 @@ AntdCascader.propTypes = {
|
|
|
169
171
|
// 设置子菜单展开交互方式,可选的有'click'和'hover',默认为'click'
|
|
170
172
|
expandTrigger: PropTypes.oneOf(['click', 'hover']),
|
|
171
173
|
|
|
174
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
175
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
176
|
+
|
|
172
177
|
loading_state: PropTypes.shape({
|
|
173
178
|
/**
|
|
174
179
|
* Determines if the component is loading or not
|
|
@@ -54,6 +54,7 @@ export default class AntdDatePicker extends Component {
|
|
|
54
54
|
defaultValue,
|
|
55
55
|
bordered,
|
|
56
56
|
size,
|
|
57
|
+
status,
|
|
57
58
|
persistence,
|
|
58
59
|
persisted_props,
|
|
59
60
|
persistence_type,
|
|
@@ -90,6 +91,7 @@ export default class AntdDatePicker extends Component {
|
|
|
90
91
|
value={value ? moment(value, format) : undefined}
|
|
91
92
|
defaultValue={defaultValue ? moment(defaultValue, format) : undefined}
|
|
92
93
|
showTime={showTime}
|
|
94
|
+
status={status}
|
|
93
95
|
persistence={persistence}
|
|
94
96
|
persisted_props={persisted_props}
|
|
95
97
|
persistence_type={persistence_type}
|
|
@@ -156,6 +158,9 @@ AntdDatePicker.propTypes = {
|
|
|
156
158
|
'small', 'middle', 'large'
|
|
157
159
|
]),
|
|
158
160
|
|
|
161
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
162
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
163
|
+
|
|
159
164
|
/**
|
|
160
165
|
* Object that holds the loading state object coming from dash-renderer
|
|
161
166
|
*/
|
|
@@ -55,6 +55,7 @@ export default class AntdDateRangePicker extends Component {
|
|
|
55
55
|
bordered,
|
|
56
56
|
size,
|
|
57
57
|
defaultPickerValue,
|
|
58
|
+
status,
|
|
58
59
|
persistence,
|
|
59
60
|
persisted_props,
|
|
60
61
|
persistence_type,
|
|
@@ -101,6 +102,7 @@ export default class AntdDateRangePicker extends Component {
|
|
|
101
102
|
[moment(defaultValue[0], format), moment(defaultValue[1], format)] :
|
|
102
103
|
undefined
|
|
103
104
|
}
|
|
105
|
+
status={status}
|
|
104
106
|
persistence={persistence}
|
|
105
107
|
persisted_props={persisted_props}
|
|
106
108
|
persistence_type={persistence_type}
|
|
@@ -161,6 +163,9 @@ AntdDateRangePicker.propTypes = {
|
|
|
161
163
|
// 设置日期面板默认的时间位置
|
|
162
164
|
defaultPickerValue: PropTypes.string,
|
|
163
165
|
|
|
166
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
167
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
168
|
+
|
|
164
169
|
/**
|
|
165
170
|
* Object that holds the loading state object coming from dash-renderer
|
|
166
171
|
*/
|
|
@@ -26,6 +26,7 @@ const AntdDraggerUpload = (props) => {
|
|
|
26
26
|
fileListMaxLength,
|
|
27
27
|
fileTypes,
|
|
28
28
|
fileMaxSize,
|
|
29
|
+
showUploadList,
|
|
29
30
|
multiple,
|
|
30
31
|
directory,
|
|
31
32
|
failedTooltipInfo,
|
|
@@ -65,16 +66,38 @@ const AntdDraggerUpload = (props) => {
|
|
|
65
66
|
|
|
66
67
|
if (info.file.status === 'done') {
|
|
67
68
|
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
// 检查是否为多文件上传模式
|
|
70
|
+
if (multiple || directory) {
|
|
71
|
+
// 检查上传列表中是否全部文件都已完成上传
|
|
72
|
+
if (info.fileList.every(file => file.status === 'done')) {
|
|
73
|
+
console.log(info.fileList)
|
|
74
|
+
// 更新任务记录
|
|
75
|
+
setProps({
|
|
76
|
+
lastUploadTaskRecord: info.fileList.map(
|
|
77
|
+
(file) => {
|
|
78
|
+
return {
|
|
79
|
+
fileName: file.name,
|
|
80
|
+
fileSize: file.size,
|
|
81
|
+
completeTimestamp: new Date().getTime(),
|
|
82
|
+
taskStatus: 'success',
|
|
83
|
+
taskId: uploadId
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
})
|
|
76
88
|
}
|
|
77
|
-
}
|
|
89
|
+
} else {
|
|
90
|
+
// 更新任务记录
|
|
91
|
+
setProps({
|
|
92
|
+
lastUploadTaskRecord: {
|
|
93
|
+
fileName: info.file.name,
|
|
94
|
+
fileSize: info.file.size,
|
|
95
|
+
completeTimestamp: new Date().getTime(),
|
|
96
|
+
taskStatus: 'success',
|
|
97
|
+
taskId: uploadId
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
}
|
|
78
101
|
message.success(`${info.file.name} 上传成功!`);
|
|
79
102
|
} else if (info.file.status === 'error') {
|
|
80
103
|
|
|
@@ -106,7 +129,11 @@ const AntdDraggerUpload = (props) => {
|
|
|
106
129
|
)
|
|
107
130
|
|
|
108
131
|
// 基于fileListMaxLength参数设置,对fileList状态进行更新
|
|
109
|
-
|
|
132
|
+
if (fileListMaxLength) {
|
|
133
|
+
updateFileList(info.fileList.slice(-fileListMaxLength))
|
|
134
|
+
} else {
|
|
135
|
+
updateFileList(info.fileList)
|
|
136
|
+
}
|
|
110
137
|
},
|
|
111
138
|
};
|
|
112
139
|
|
|
@@ -187,6 +214,9 @@ AntdDraggerUpload.propTypes = {
|
|
|
187
214
|
// 自定义上传失败文件鼠标悬浮tooltip文字内容,默认为'上传失败'
|
|
188
215
|
failedTooltipInfo: PropTypes.string,
|
|
189
216
|
|
|
217
|
+
// 设置是否显示已上传文件列表,默认为true
|
|
218
|
+
showUploadList: PropTypes.bool,
|
|
219
|
+
|
|
190
220
|
// 用于在每次文件上传动作完成后,记录相关的信息
|
|
191
221
|
lastUploadTaskRecord: PropTypes.exact({
|
|
192
222
|
// 记录文件名称
|
|
@@ -230,7 +260,7 @@ AntdDraggerUpload.propTypes = {
|
|
|
230
260
|
|
|
231
261
|
// 设置默认参数
|
|
232
262
|
AntdDraggerUpload.defaultProps = {
|
|
233
|
-
fileListMaxLength:
|
|
263
|
+
fileListMaxLength: null,
|
|
234
264
|
fileMaxSize: 500,
|
|
235
265
|
lastUploadTaskRecord: {},
|
|
236
266
|
locale: 'zh-cn'
|
|
@@ -96,10 +96,16 @@ AntdImage.propTypes = {
|
|
|
96
96
|
alt: PropTypes.string,
|
|
97
97
|
|
|
98
98
|
// 设置像素宽度
|
|
99
|
-
width: PropTypes.
|
|
99
|
+
width: PropTypes.oneOfType([
|
|
100
|
+
PropTypes.number,
|
|
101
|
+
PropTypes.string
|
|
102
|
+
]),
|
|
100
103
|
|
|
101
104
|
// 设置图像高度
|
|
102
|
-
height: PropTypes.
|
|
105
|
+
height: PropTypes.oneOfType([
|
|
106
|
+
PropTypes.number,
|
|
107
|
+
PropTypes.string
|
|
108
|
+
]),
|
|
103
109
|
|
|
104
110
|
// 设置图片源地址,单个字符串传入时为单图片模式
|
|
105
111
|
// 多个字符串数组传入时为多图片切换模式
|
|
@@ -43,6 +43,7 @@ export default class AntdInput extends Component {
|
|
|
43
43
|
showCount,
|
|
44
44
|
nClicksSearch,
|
|
45
45
|
nSubmit,
|
|
46
|
+
status,
|
|
46
47
|
setProps,
|
|
47
48
|
loading_state,
|
|
48
49
|
persistence,
|
|
@@ -82,6 +83,7 @@ export default class AntdInput extends Component {
|
|
|
82
83
|
defaultValue={defaultValue}
|
|
83
84
|
disabled={disabled}
|
|
84
85
|
maxLength={maxLength}
|
|
86
|
+
status={status}
|
|
85
87
|
onChange={onChange}
|
|
86
88
|
onPressEnter={onPressEnter}
|
|
87
89
|
persistence={persistence}
|
|
@@ -105,6 +107,7 @@ export default class AntdInput extends Component {
|
|
|
105
107
|
defaultValue={defaultValue}
|
|
106
108
|
disabled={disabled}
|
|
107
109
|
maxLength={maxLength}
|
|
110
|
+
status={status}
|
|
108
111
|
onSearch={onSearch}
|
|
109
112
|
onChange={onChange}
|
|
110
113
|
onPressEnter={onPressEnter}
|
|
@@ -130,6 +133,7 @@ export default class AntdInput extends Component {
|
|
|
130
133
|
disabled={disabled}
|
|
131
134
|
maxLength={maxLength}
|
|
132
135
|
showCount={showCount}
|
|
136
|
+
status={status}
|
|
133
137
|
onChange={onChange}
|
|
134
138
|
onPressEnter={onPressEnter}
|
|
135
139
|
persistence={persistence}
|
|
@@ -152,6 +156,7 @@ export default class AntdInput extends Component {
|
|
|
152
156
|
value={value}
|
|
153
157
|
defaultValue={defaultValue}
|
|
154
158
|
maxLength={maxLength}
|
|
159
|
+
status={status}
|
|
155
160
|
onChange={(e) => {
|
|
156
161
|
// 若启用md5加密
|
|
157
162
|
if (passwordUseMd5) {
|
|
@@ -254,6 +259,9 @@ AntdInput.propTypes = {
|
|
|
254
259
|
// 记录search模式下搜索按钮被点按的次数
|
|
255
260
|
nClicksSearch: PropTypes.number,
|
|
256
261
|
|
|
262
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
263
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
264
|
+
|
|
257
265
|
/**
|
|
258
266
|
* Dash-assigned callback that should be called to report property changes
|
|
259
267
|
* to Dash, to make them available for callbacks.
|
|
@@ -37,6 +37,7 @@ export default class AntdInputNumber extends Component {
|
|
|
37
37
|
readOnly,
|
|
38
38
|
stringMode,
|
|
39
39
|
nSubmit,
|
|
40
|
+
status,
|
|
40
41
|
setProps,
|
|
41
42
|
persistence,
|
|
42
43
|
persisted_props,
|
|
@@ -78,6 +79,7 @@ export default class AntdInputNumber extends Component {
|
|
|
78
79
|
precision={precision}
|
|
79
80
|
readOnly={readOnly}
|
|
80
81
|
stringMode={stringMode}
|
|
82
|
+
status={status}
|
|
81
83
|
onChange={onChange}
|
|
82
84
|
onPressEnter={onPressEnter}
|
|
83
85
|
onStep={onStep}
|
|
@@ -169,6 +171,9 @@ AntdInputNumber.propTypes = {
|
|
|
169
171
|
// 记录聚焦于输入框内部时,enter键被点按的次数
|
|
170
172
|
nSubmit: PropTypes.number,
|
|
171
173
|
|
|
174
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
175
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
176
|
+
|
|
172
177
|
loading_state: PropTypes.shape({
|
|
173
178
|
/**
|
|
174
179
|
* Determines if the component is loading or not
|
|
@@ -21,6 +21,7 @@ export default class AntdMentions extends Component {
|
|
|
21
21
|
value,
|
|
22
22
|
options,
|
|
23
23
|
disabled,
|
|
24
|
+
status,
|
|
24
25
|
setProps,
|
|
25
26
|
loading_state
|
|
26
27
|
} = this.props;
|
|
@@ -66,6 +67,7 @@ export default class AntdMentions extends Component {
|
|
|
66
67
|
defaultValue={defaultValue}
|
|
67
68
|
placement={placement}
|
|
68
69
|
disabled={disabled}
|
|
70
|
+
status={status}
|
|
69
71
|
onChange={onChange}
|
|
70
72
|
onSelect={onSelect}
|
|
71
73
|
getPopupContainer={(triggerNode) => triggerNode.parentNode.parentNode.parentNode}
|
|
@@ -136,6 +138,9 @@ AntdMentions.propTypes = {
|
|
|
136
138
|
// 设置是否禁用,默认为false
|
|
137
139
|
disabled: PropTypes.bool,
|
|
138
140
|
|
|
141
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
142
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
143
|
+
|
|
139
144
|
loading_state: PropTypes.shape({
|
|
140
145
|
/**
|
|
141
146
|
* Determines if the component is loading or not
|
|
@@ -17,6 +17,7 @@ export default class AntdMessage extends Component {
|
|
|
17
17
|
type,
|
|
18
18
|
duration,
|
|
19
19
|
icon,
|
|
20
|
+
top,
|
|
20
21
|
loading_state,
|
|
21
22
|
setProps
|
|
22
23
|
} = this.props;
|
|
@@ -25,7 +26,8 @@ export default class AntdMessage extends Component {
|
|
|
25
26
|
className: className,
|
|
26
27
|
style: style,
|
|
27
28
|
content: content,
|
|
28
|
-
duration: duration
|
|
29
|
+
duration: duration,
|
|
30
|
+
top: top
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
if (icon) {
|
|
@@ -91,6 +93,9 @@ AntdMessage.propTypes = {
|
|
|
91
93
|
// 设置通知从显示到自动消失的时长(秒),默认为3,当传入0时表示不会自动消失
|
|
92
94
|
duration: PropTypes.number,
|
|
93
95
|
|
|
96
|
+
// 设置消息距离顶端的像素距离,默认为8
|
|
97
|
+
top: PropTypes.number,
|
|
98
|
+
|
|
94
99
|
// 设置自定义icon,与AntdIcon中支持的图标相对应
|
|
95
100
|
icon: PropTypes.string,
|
|
96
101
|
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Card, Button, ConfigProvider, Image as Image_ } from 'antd';
|
|
4
|
+
import zhCN from 'antd/lib/locale/zh_CN';
|
|
5
|
+
import { Gluejar } from '@charliewilco/gluejar'
|
|
6
|
+
import { DeleteOutlined } from '@ant-design/icons';
|
|
7
|
+
import './styles.css'
|
|
8
|
+
import 'antd/dist/antd.css';
|
|
9
|
+
|
|
10
|
+
const urlToBase64 = (url) => {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
let image = new Image();
|
|
13
|
+
image.onload = function () {
|
|
14
|
+
let canvas = document.createElement('canvas');
|
|
15
|
+
canvas.width = this.naturalWidth;
|
|
16
|
+
canvas.height = this.naturalHeight;
|
|
17
|
+
// 将图片插入画布并开始绘制
|
|
18
|
+
canvas.getContext('2d').drawImage(image, 0, 0);
|
|
19
|
+
// result
|
|
20
|
+
let result = canvas.toDataURL('image/png')
|
|
21
|
+
resolve(result);
|
|
22
|
+
};
|
|
23
|
+
// CORS 策略,会存在跨域问题https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror
|
|
24
|
+
image.setAttribute("crossOrigin", 'Anonymous');
|
|
25
|
+
image.src = url;
|
|
26
|
+
// 图片加载失败的错误处理
|
|
27
|
+
image.onerror = () => {
|
|
28
|
+
reject(new Error('urlToBase64 error'));
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 定义图片粘贴组件AntdPasteImage,api参数参考https://github.com/charliewilco/react-gluejar
|
|
35
|
+
const AntdPasteImage = (props) => {
|
|
36
|
+
// 取得必要属性或参数
|
|
37
|
+
let {
|
|
38
|
+
id,
|
|
39
|
+
className,
|
|
40
|
+
style,
|
|
41
|
+
currentPastedImages,
|
|
42
|
+
deletedIdx,
|
|
43
|
+
imageHeight,
|
|
44
|
+
setProps,
|
|
45
|
+
loading_state
|
|
46
|
+
} = props;
|
|
47
|
+
|
|
48
|
+
const handlePaste = useCallback(async (files) => {
|
|
49
|
+
let results = []
|
|
50
|
+
for (let i = 0; i < files.images.length; i++) {
|
|
51
|
+
if (deletedIdx.indexOf(i) === -1) {
|
|
52
|
+
let result = await urlToBase64(files.images[i])
|
|
53
|
+
results.push(result)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
setProps({
|
|
57
|
+
currentPastedImages: results
|
|
58
|
+
})
|
|
59
|
+
}, []);
|
|
60
|
+
|
|
61
|
+
const handleDelete = useCallback((idx) => {
|
|
62
|
+
if (!deletedIdx) {
|
|
63
|
+
deletedIdx = [idx]
|
|
64
|
+
} else if (deletedIdx.indexOf(idx) === -1) {
|
|
65
|
+
deletedIdx.push(idx)
|
|
66
|
+
}
|
|
67
|
+
setProps({
|
|
68
|
+
currentPastedImages: currentPastedImages.filter((value, idx) => deletedIdx.indexOf(idx) === -1),
|
|
69
|
+
deletedIdx: deletedIdx
|
|
70
|
+
})
|
|
71
|
+
}, []);
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<div id={id}
|
|
75
|
+
className={className}
|
|
76
|
+
style={style}
|
|
77
|
+
data-dash-is-loading={
|
|
78
|
+
(loading_state && loading_state.is_loading) || undefined
|
|
79
|
+
}>
|
|
80
|
+
<Gluejar
|
|
81
|
+
key={0}
|
|
82
|
+
onPaste={handlePaste}>
|
|
83
|
+
{({ images }) => {
|
|
84
|
+
if (images.length > 0) {
|
|
85
|
+
return (
|
|
86
|
+
<ConfigProvider locale={zhCN}>
|
|
87
|
+
<Card style={{ height: '100%', border: 'none' }}>
|
|
88
|
+
{
|
|
89
|
+
images.map((image, idx) => {
|
|
90
|
+
return deletedIdx.indexOf(idx) === -1 ? (
|
|
91
|
+
<Card.Grid
|
|
92
|
+
style={{ width: '25%', height: imageHeight, padding: 5, cursor: 'pointer', position: 'relative' }}
|
|
93
|
+
>
|
|
94
|
+
<Button shape="circle" size={"small"} icon={<DeleteOutlined />}
|
|
95
|
+
style={{ position: 'absolute', 'right': 10, top: 10, zIndex: 1 }}
|
|
96
|
+
onClick={() => handleDelete(idx)} />
|
|
97
|
+
<Image_ src={image}
|
|
98
|
+
key={idx}
|
|
99
|
+
alt={`Pasted: ${idx}`}
|
|
100
|
+
width={"100%"}
|
|
101
|
+
height={"100%"}
|
|
102
|
+
style={{ borderTop: '1px solid #f0f0f0', objectFit: 'contain' }} />
|
|
103
|
+
</Card.Grid>
|
|
104
|
+
) : null
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
</Card>
|
|
109
|
+
</ConfigProvider>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
</Gluejar>
|
|
116
|
+
</div >
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// 定义参数或属性
|
|
121
|
+
AntdPasteImage.propTypes = {
|
|
122
|
+
// 部件id
|
|
123
|
+
id: PropTypes.string,
|
|
124
|
+
|
|
125
|
+
// css类名
|
|
126
|
+
className: PropTypes.string,
|
|
127
|
+
|
|
128
|
+
// 自定义css字典
|
|
129
|
+
style: PropTypes.object,
|
|
130
|
+
|
|
131
|
+
// 存储当前保存的所有图片的base64字符串
|
|
132
|
+
currentPastedImages: PropTypes.arrayOf(PropTypes.any),
|
|
133
|
+
|
|
134
|
+
// 记录生命周期内第几次接受新图片粘贴,进而辅助删除图片操作
|
|
135
|
+
deletedIdx: PropTypes.arrayOf(PropTypes.number),
|
|
136
|
+
|
|
137
|
+
// 设置每张图片块的像素高度,默认为200
|
|
138
|
+
imageHeight: PropTypes.number,
|
|
139
|
+
|
|
140
|
+
loading_state: PropTypes.shape({
|
|
141
|
+
/**
|
|
142
|
+
* Determines if the component is loading or not
|
|
143
|
+
*/
|
|
144
|
+
is_loading: PropTypes.bool,
|
|
145
|
+
/**
|
|
146
|
+
* Holds which property is loading
|
|
147
|
+
*/
|
|
148
|
+
prop_name: PropTypes.string,
|
|
149
|
+
/**
|
|
150
|
+
* Holds the name of the component that is loading
|
|
151
|
+
*/
|
|
152
|
+
component_name: PropTypes.string
|
|
153
|
+
}),
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Dash-assigned callback that should be called to report property changes
|
|
157
|
+
* to Dash, to make them available for callbacks.
|
|
158
|
+
*/
|
|
159
|
+
setProps: PropTypes.func
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
// 设置默认参数
|
|
163
|
+
AntdPasteImage.defaultProps = {
|
|
164
|
+
className: 'feffery-paste-image-container',
|
|
165
|
+
imageHeight: 200,
|
|
166
|
+
currentPastedImages: [],
|
|
167
|
+
deletedIdx: []
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export default AntdPasteImage;
|
|
@@ -38,6 +38,8 @@ export default class AntdSelect extends Component {
|
|
|
38
38
|
maxTagCount,
|
|
39
39
|
listHeight,
|
|
40
40
|
colorsMode,
|
|
41
|
+
placement,
|
|
42
|
+
status,
|
|
41
43
|
loading_state,
|
|
42
44
|
persistence,
|
|
43
45
|
persisted_props,
|
|
@@ -148,6 +150,8 @@ export default class AntdSelect extends Component {
|
|
|
148
150
|
listHeight={listHeight}
|
|
149
151
|
disabled={disabled}
|
|
150
152
|
showSearch={true}
|
|
153
|
+
placement={placement}
|
|
154
|
+
status={status}
|
|
151
155
|
persistence={persistence}
|
|
152
156
|
persisted_props={persisted_props}
|
|
153
157
|
persistence_type={persistence_type}
|
|
@@ -273,6 +277,13 @@ AntdSelect.propTypes = {
|
|
|
273
277
|
// 色带模式下用于设置连续色带还是离散色带,可选的有'sequential'、'diverging'
|
|
274
278
|
colorsMode: PropTypes.oneOf(['sequential', 'diverging']),
|
|
275
279
|
|
|
280
|
+
// 用于设置悬浮展开层的方位,可选的有'bottomLeft'、'bottomRight'、'topLeft'、'topRight'
|
|
281
|
+
// 默认为'bottomLeft'
|
|
282
|
+
placement: PropTypes.oneOf(['bottomLeft', 'bottomRight', 'topLeft', 'topRight']),
|
|
283
|
+
|
|
284
|
+
// 设置校验状态,可选的有'error'、'warning'
|
|
285
|
+
status: PropTypes.oneOf(['error', 'warning']),
|
|
286
|
+
|
|
276
287
|
loading_state: PropTypes.shape({
|
|
277
288
|
/**
|
|
278
289
|
* Determines if the component is loading or not
|