@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.
Files changed (44) hide show
  1. package/package.json +6 -5
  2. package/skills/xfe-web-components/GUIDE.md +78 -0
  3. package/skills/xfe-web-components/SKILL.md +78 -0
  4. package/skills/xfe-web-components/TEMPLATE.md +170 -0
  5. package/skills/xfe-web-components/references/ApiService.md +136 -0
  6. package/skills/xfe-web-components/references/CInput.md +196 -0
  7. package/skills/xfe-web-components/references/CTable.md +274 -0
  8. package/skills/xfe-web-components/references/CVideo.md +94 -0
  9. package/skills/xfe-web-components/references/Clock.md +53 -0
  10. package/skills/xfe-web-components/references/ConfigProvider.md +198 -0
  11. package/skills/xfe-web-components/references/Countdown.md +109 -0
  12. package/skills/xfe-web-components/references/Counter.md +75 -0
  13. package/skills/xfe-web-components/references/Currency.md +112 -0
  14. package/skills/xfe-web-components/references/EffectAddressCascade.md +110 -0
  15. package/skills/xfe-web-components/references/EffectBrandSelect.md +231 -0
  16. package/skills/xfe-web-components/references/EffectBrandTransfer.md +143 -0
  17. package/skills/xfe-web-components/references/EffectCategoryCascade.md +227 -0
  18. package/skills/xfe-web-components/references/EffectFileUpload.md +348 -0
  19. package/skills/xfe-web-components/references/EffectLabelSelect.md +222 -0
  20. package/skills/xfe-web-components/references/EffectMerchantSelect.md +183 -0
  21. package/skills/xfe-web-components/references/EffectReservoirSelect.md +178 -0
  22. package/skills/xfe-web-components/references/EffectScopeSelect.md +220 -0
  23. package/skills/xfe-web-components/references/EffectSeriesSelect.md +204 -0
  24. package/skills/xfe-web-components/references/EffectSeriesSelectV2.md +154 -0
  25. package/skills/xfe-web-components/references/EffectSkuRecognize.md +149 -0
  26. package/skills/xfe-web-components/references/EffectSkuSelect.md +251 -0
  27. package/skills/xfe-web-components/references/EffectSkuTable.md +184 -0
  28. package/skills/xfe-web-components/references/EffectSpuSelect.md +189 -0
  29. package/skills/xfe-web-components/references/EffectStaffSelect.md +150 -0
  30. package/skills/xfe-web-components/references/EffectWarehouseSelect.md +183 -0
  31. package/skills/xfe-web-components/references/EffectWithFilePanel.md +205 -0
  32. package/skills/xfe-web-components/references/FileUpload.md +126 -0
  33. package/skills/xfe-web-components/references/Iconfont.md +31 -0
  34. package/skills/xfe-web-components/references/Loading.md +68 -0
  35. package/skills/xfe-web-components/references/MultiWindow.md +145 -0
  36. package/skills/xfe-web-components/references/OSSImage.md +230 -0
  37. package/skills/xfe-web-components/references/PrivacyField.md +90 -0
  38. package/skills/xfe-web-components/references/QRCode.md +148 -0
  39. package/skills/xfe-web-components/references/RichTextEditor.md +119 -0
  40. package/skills/xfe-web-components/references/SearchForm.md +270 -0
  41. package/skills/xfe-web-components/references/SearchList.md +128 -0
  42. package/skills/xfe-web-components/references/WithModal.md +328 -0
  43. package/skills/xfe-web-components/references/WithPanel.md +307 -0
  44. 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
+ ```