@xfe-repo/web-components 1.6.2 → 1.7.1
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/package.json +6 -5
- package/skills/xfe-web-components/GUIDE.md +78 -0
- package/skills/xfe-web-components/SKILL.md +78 -0
- package/skills/xfe-web-components/TEMPLATE.md +170 -0
- package/skills/xfe-web-components/references/ApiService.md +136 -0
- package/skills/xfe-web-components/references/CInput.md +196 -0
- package/skills/xfe-web-components/references/CTable.md +274 -0
- package/skills/xfe-web-components/references/CVideo.md +94 -0
- package/skills/xfe-web-components/references/Clock.md +53 -0
- package/skills/xfe-web-components/references/ConfigProvider.md +198 -0
- package/skills/xfe-web-components/references/Countdown.md +109 -0
- package/skills/xfe-web-components/references/Counter.md +75 -0
- package/skills/xfe-web-components/references/Currency.md +112 -0
- package/skills/xfe-web-components/references/EffectAddressCascade.md +110 -0
- package/skills/xfe-web-components/references/EffectBrandSelect.md +231 -0
- package/skills/xfe-web-components/references/EffectBrandTransfer.md +143 -0
- package/skills/xfe-web-components/references/EffectCategoryCascade.md +227 -0
- package/skills/xfe-web-components/references/EffectFileUpload.md +348 -0
- package/skills/xfe-web-components/references/EffectLabelSelect.md +222 -0
- package/skills/xfe-web-components/references/EffectMerchantSelect.md +183 -0
- package/skills/xfe-web-components/references/EffectReservoirSelect.md +178 -0
- package/skills/xfe-web-components/references/EffectScopeSelect.md +220 -0
- package/skills/xfe-web-components/references/EffectSeriesSelect.md +204 -0
- package/skills/xfe-web-components/references/EffectSeriesSelectV2.md +154 -0
- package/skills/xfe-web-components/references/EffectSkuRecognize.md +149 -0
- package/skills/xfe-web-components/references/EffectSkuSelect.md +251 -0
- package/skills/xfe-web-components/references/EffectSkuTable.md +184 -0
- package/skills/xfe-web-components/references/EffectSpuSelect.md +189 -0
- package/skills/xfe-web-components/references/EffectStaffSelect.md +150 -0
- package/skills/xfe-web-components/references/EffectWarehouseSelect.md +183 -0
- package/skills/xfe-web-components/references/EffectWithFilePanel.md +205 -0
- package/skills/xfe-web-components/references/FileUpload.md +126 -0
- package/skills/xfe-web-components/references/Iconfont.md +31 -0
- package/skills/xfe-web-components/references/Loading.md +68 -0
- package/skills/xfe-web-components/references/MultiWindow.md +145 -0
- package/skills/xfe-web-components/references/OSSImage.md +230 -0
- package/skills/xfe-web-components/references/PrivacyField.md +90 -0
- package/skills/xfe-web-components/references/QRCode.md +148 -0
- package/skills/xfe-web-components/references/RichTextEditor.md +119 -0
- package/skills/xfe-web-components/references/SearchForm.md +270 -0
- package/skills/xfe-web-components/references/SearchList.md +128 -0
- package/skills/xfe-web-components/references/WithModal.md +328 -0
- package/skills/xfe-web-components/references/WithPanel.md +307 -0
- package/skills/xfe-web-components/references/commonFn.md +254 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# commonFn
|
|
2
|
+
|
|
3
|
+
> 通用工具函数和常量集合,提供表格/选择器的默认 Props、状态选项、日期格式化等。
|
|
4
|
+
|
|
5
|
+
## 导入
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
typedMemo,
|
|
10
|
+
getCommonTableProps,
|
|
11
|
+
getCommonSelectProps,
|
|
12
|
+
commonStatusSelectOptions,
|
|
13
|
+
commonYesOrNoSelectOptions,
|
|
14
|
+
commonYesOrNoSelectOptionsMap,
|
|
15
|
+
commonDatePickerNormalize,
|
|
16
|
+
commonDatePickerGetValueProps,
|
|
17
|
+
commonDateRangePickerNormalize,
|
|
18
|
+
commonDateRangePickerGetValueProps,
|
|
19
|
+
getSelectValue,
|
|
20
|
+
getStrValue,
|
|
21
|
+
getInitialValue,
|
|
22
|
+
getFirstValue,
|
|
23
|
+
getSecondValue,
|
|
24
|
+
} from '@xfe-repo/web-components'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 函数和常量
|
|
28
|
+
|
|
29
|
+
### typedMemo
|
|
30
|
+
|
|
31
|
+
保留泛型类型的 `React.memo` 包装。
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
export const typedMemo: <T extends ComponentType>(c: T) => MemoExoticComponent<T>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
interface Props<T> {
|
|
39
|
+
data: T[]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const MyList = typedMemo(<T,>(props: Props<T>) => {
|
|
43
|
+
return <div>{props.data.length}</div>
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### getCommonTableProps
|
|
48
|
+
|
|
49
|
+
返回通用表格默认 Props(无边框样式、横向滚动、无分页)。
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
export const getCommonTableProps: <T = any>(coverProps?: CTableProps<T>) => CTableProps<T>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
<CTable {...getCommonTableProps()} columns={columns} dataSource={data} />
|
|
57
|
+
|
|
58
|
+
// 覆盖默认值
|
|
59
|
+
<CTable {...getCommonTableProps({ pagination: { pageSize: 20 }, bordered: true })} />
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
默认值:
|
|
63
|
+
| 属性 | 值 |
|
|
64
|
+
|------|-----|
|
|
65
|
+
| className | `'table no_border'`(bordered 时为 `'table'`) |
|
|
66
|
+
| scroll | `{ x: true }` |
|
|
67
|
+
| pagination | `false` |
|
|
68
|
+
|
|
69
|
+
### getCommonSelectProps
|
|
70
|
+
|
|
71
|
+
返回通用选择器默认 Props(可搜索、可清除、按 label 过滤)。
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
export const getCommonSelectProps: <T = any>(coverProps?: SelectProps<T>) => SelectProps<T>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
<Select {...getCommonSelectProps()} options={options} />
|
|
79
|
+
|
|
80
|
+
// 覆盖默认值
|
|
81
|
+
<Select {...getCommonSelectProps({ placeholder: '请选择品牌' })} />
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
> ⚠️ **注意调用括号**:`getCommonSelectProps` 是函数,使用时必须加括号调用。
|
|
85
|
+
>
|
|
86
|
+
> - ❌ 漏掉括号,将函数本身展开为 props(运行时不报错但行为异常):
|
|
87
|
+
> ```tsx
|
|
88
|
+
> <Select {...getCommonSelectProps} />
|
|
89
|
+
> ```
|
|
90
|
+
> - ✅ 正确调用函数获取返回值:
|
|
91
|
+
> ```tsx
|
|
92
|
+
> <Select {...getCommonSelectProps()} />
|
|
93
|
+
> ```
|
|
94
|
+
|
|
95
|
+
默认值:
|
|
96
|
+
| 属性 | 值 |
|
|
97
|
+
|------|-----|
|
|
98
|
+
| showSearch | `true` |
|
|
99
|
+
| allowClear | `true` |
|
|
100
|
+
| optionFilterProp | `'label'` |
|
|
101
|
+
| notFoundContent | `'暂无数据'` |
|
|
102
|
+
| placeholder | `'请选择'` |
|
|
103
|
+
|
|
104
|
+
### commonStatusSelectOptions
|
|
105
|
+
|
|
106
|
+
启用/禁用状态选项。
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
export const commonStatusSelectOptions = [
|
|
110
|
+
{ value: 1, label: '启用' },
|
|
111
|
+
{ value: 2, label: '禁用' },
|
|
112
|
+
]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### commonYesOrNoSelectOptions
|
|
116
|
+
|
|
117
|
+
是/否选项。
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
export const commonYesOrNoSelectOptions = [
|
|
121
|
+
{ value: 1, label: '是' },
|
|
122
|
+
{ value: 2, label: '否' },
|
|
123
|
+
]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
也可用于 Radio.Group:
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<Form.Item name="isEnabled" label="是否启用">
|
|
130
|
+
<Radio.Group options={commonYesOrNoSelectOptions} />
|
|
131
|
+
</Form.Item>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### commonYesOrNoSelectOptionsMap
|
|
135
|
+
|
|
136
|
+
是/否映射字典。
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
export const commonYesOrNoSelectOptionsMap: Record<number, string> = { 1: '是', 2: '否' }
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### commonDatePickerNormalize / commonDatePickerGetValueProps
|
|
143
|
+
|
|
144
|
+
用于 antd Form.Item 的 DatePicker `normalize` 和 `getValueProps`,在 Dayjs 和格式化字符串之间转换。
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
<Form.Item name="createDate" label="创建日期" normalize={commonDatePickerNormalize} getValueProps={commonDatePickerGetValueProps}>
|
|
148
|
+
<DatePicker />
|
|
149
|
+
</Form.Item>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
export const commonDatePickerNormalize: (date: Dayjs | null, format?: string) => string
|
|
154
|
+
export const commonDatePickerGetValueProps: (date: string | null) => { value: Dayjs | '' }
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### commonDateRangePickerNormalize / commonDateRangePickerGetValueProps
|
|
158
|
+
|
|
159
|
+
用于 RangePicker 的日期范围转换。
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
<Form.Item name="dateRange" label="日期范围" normalize={commonDateRangePickerNormalize} getValueProps={commonDateRangePickerGetValueProps}>
|
|
163
|
+
<RangePicker />
|
|
164
|
+
</Form.Item>
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
export const commonDateRangePickerNormalize: (dates: Dayjs[] | null, format?: string) => string[]
|
|
169
|
+
export const commonDateRangePickerGetValueProps: (dateStrs: string[] | null) => { value: Dayjs[] | [] }
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
> 日期格式默认为 `'YYYY-MM-DD HH:mm:ss'`。
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### getSelectValue / getStrValue 系列
|
|
177
|
+
|
|
178
|
+
配合 `EffectLabelSelect` 的 `customLabelInValue` 模式使用的解析函数组。当 EffectLabelSelect 设置了 `customLabelInValue` 后,value 不再是简单的 ID,而是一个分号分隔的组合字符串。
|
|
179
|
+
|
|
180
|
+
导入:
|
|
181
|
+
|
|
182
|
+
```tsx
|
|
183
|
+
import { getSelectValue, getStrValue, getInitialValue, getFirstValue, getSecondValue } from '@xfe-repo/web-components'
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### getStrValue
|
|
187
|
+
|
|
188
|
+
生成分号分隔的组合字符串,由 EffectLabelSelect 内部调用。
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
export const getStrValue: (displayType: 'label' | 'value', value?: string, label?: string, labelDicKey?: string) => string | undefined
|
|
192
|
+
|
|
193
|
+
// 示例
|
|
194
|
+
getStrValue('label', '123', '张三', 'phone')
|
|
195
|
+
// => 'label;123;张三;phone'
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### getSelectValue
|
|
199
|
+
|
|
200
|
+
从分号分隔字符串中解析指定字段。
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
type ReturnType = 'label' | 'value' | 'labelDicKey' | 'labelAndValue'
|
|
204
|
+
|
|
205
|
+
export const getSelectValue: (str?: string | null | number, returnType?: ReturnType) => string | undefined
|
|
206
|
+
|
|
207
|
+
// 示例
|
|
208
|
+
const str = 'label;123;张三;phone'
|
|
209
|
+
getSelectValue(str, 'value') // => '123'
|
|
210
|
+
getSelectValue(str, 'label') // => '张三'
|
|
211
|
+
getSelectValue(str, 'labelDicKey') // => 'phone'
|
|
212
|
+
getSelectValue(str, 'labelAndValue') // => '123 - 张三'
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
#### getInitialValue
|
|
216
|
+
|
|
217
|
+
拼接 `value - label` 展示格式。
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
export const getInitialValue: (label?: string, value?: string) => string
|
|
221
|
+
// getInitialValue('张三', '123') => '123 - 张三'
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### getFirstValue / getSecondValue
|
|
225
|
+
|
|
226
|
+
从 `value - label` 格式中提取各部分。
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
export const getFirstValue: (str?: string) => string // 提取 value
|
|
230
|
+
export const getSecondValue: (str?: string) => string // 提取 label
|
|
231
|
+
|
|
232
|
+
// getFirstValue('123 - 张三') => '123'
|
|
233
|
+
// getSecondValue('123 - 张三') => '张三'
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
#### 典型业务使用
|
|
237
|
+
|
|
238
|
+
配合 EffectLabelSelect 的 customLabelInValue 模式:
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
// 搜索表单中使用 EffectLabelSelect
|
|
242
|
+
;<Form.Item name="merchantStr" noStyle>
|
|
243
|
+
<EffectLabelSelect customLabelInValue optionsDisplayType="labelAndValue" labelDic={{ phone: '手机号', name: '商户名' }} />
|
|
244
|
+
</Form.Item>
|
|
245
|
+
|
|
246
|
+
// 提交时解析值
|
|
247
|
+
const handleSubmit = (values) => {
|
|
248
|
+
const params = {
|
|
249
|
+
merchantId: getSelectValue(values.merchantStr, 'value'),
|
|
250
|
+
merchantName: getSelectValue(values.merchantStr, 'label'),
|
|
251
|
+
}
|
|
252
|
+
dispatch(fetchList(params))
|
|
253
|
+
}
|
|
254
|
+
```
|