@ebfe/vantkit-doc 0.0.2 → 0.0.4
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/es/index.d.ts +7 -0
- package/es/index.js +3 -7
- package/lib/@ebfe/vant-kit.cjs.js +20 -0
- package/lib/@ebfe/vant-kit.es.js +16 -0
- package/lib/@ebfe/vant-kit.js +29 -0
- package/lib/@ebfe/vant-kit.min.js +20 -0
- package/lib/index.css +0 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +28 -7
- package/lib/web-types.json +284 -0
- package/package.json +2 -2
- package/es/coloring-avatar/README.md +0 -110
- package/es/date-picker/README.md +0 -248
- package/es/date-range-picker/README.md +0 -369
- package/es/field-date-picker/README.md +0 -101
- package/es/field-date-range-picker/README.md +0 -134
- package/es/field-mask-txt/README.md +0 -281
- package/es/field-multi-picker/README.md +0 -115
- package/es/field-single-picker/README.md +0 -107
- package/es/mask-txt/README.md +0 -214
- package/es/multi-picker/README.md +0 -183
- package/es/single-picker/README.md +0 -239
- package/lib/coloring-avatar/README.md +0 -110
- package/lib/date-picker/README.md +0 -248
- package/lib/date-range-picker/README.md +0 -369
- package/lib/field-date-picker/README.md +0 -101
- package/lib/field-date-range-picker/README.md +0 -134
- package/lib/field-mask-txt/README.md +0 -281
- package/lib/field-multi-picker/README.md +0 -115
- package/lib/field-single-picker/README.md +0 -107
- package/lib/mask-txt/README.md +0 -214
- package/lib/multi-picker/README.md +0 -183
- package/lib/single-picker/README.md +0 -239
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# FieldSinglePicker
|
|
2
|
-
|
|
3
|
-
### 介绍
|
|
4
|
-
|
|
5
|
-
基于 SinglePicker 以及 vant 的 field 组件进行二次封装,方便处理表单中的单项选择需求场景。
|
|
6
|
-
|
|
7
|
-
- 支持传入所有 SinglePicker props(类型 TSinglePickerProps)
|
|
8
|
-
- 支持传入所有的 [vant field props](https://vant-ui.github.io/vant/#/zh-CN/field#props)
|
|
9
|
-
|
|
10
|
-
**主要功能描述**
|
|
11
|
-
|
|
12
|
-
- 集成 SinglePicker 所有功能
|
|
13
|
-
|
|
14
|
-
**对开发者的解脱**
|
|
15
|
-
|
|
16
|
-
- 符合 ui 设计
|
|
17
|
-
- 默认场景下 van-field 绑定值就是展示值,FieldSinglePicker 内部将绑定值与展示值表单真正需要收集的值分隔开。
|
|
18
|
-
|
|
19
|
-
## 代码演示
|
|
20
|
-
|
|
21
|
-
### 基础用法
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<template>
|
|
25
|
-
<van-form ref="FormRef">
|
|
26
|
-
modelValue: {{ pickerValue }}
|
|
27
|
-
<FieldSinglePicker
|
|
28
|
-
v-model="pickerValue"
|
|
29
|
-
:field-props="{
|
|
30
|
-
name: 'singlePicker',
|
|
31
|
-
label: '单选',
|
|
32
|
-
placeholder: '请选择',
|
|
33
|
-
required: true,
|
|
34
|
-
rules: [{ required: true, message: '请选择' }],
|
|
35
|
-
}"
|
|
36
|
-
:picker-props="{
|
|
37
|
-
title: '基础用法',
|
|
38
|
-
columns: columns,
|
|
39
|
-
columnsFieldNames: columnsFieldNames,
|
|
40
|
-
}"
|
|
41
|
-
>
|
|
42
|
-
<template #columns-top>
|
|
43
|
-
<div class="desc">这就是基础组件 - SinglePicker</div>
|
|
44
|
-
</template>
|
|
45
|
-
</FieldSinglePicker>
|
|
46
|
-
<van-button round block type="primary" @click="handleSubmit"> 提交 </van-button>
|
|
47
|
-
</van-form>
|
|
48
|
-
</template>
|
|
49
|
-
|
|
50
|
-
<script setup lang="ts">
|
|
51
|
-
import { useWrapperRef } from '@ebfe/vhooks';
|
|
52
|
-
import { FieldSinglePicker } from '@ebfe/vant-kit';
|
|
53
|
-
import { Form as VanForm, Button as VanButton, FormInstance } from 'vant';
|
|
54
|
-
import { ref } from 'vue';
|
|
55
|
-
|
|
56
|
-
const FormRef = ref<FormInstance>();
|
|
57
|
-
const handleSubmit = () => {
|
|
58
|
-
FormRef.value?.validate().then(() => {
|
|
59
|
-
// eslint-disable-next-line no-console
|
|
60
|
-
console.log('submit', FormRef.value?.getValues?.());
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const columns = [
|
|
65
|
-
{ name: '选项1', value: '1' },
|
|
66
|
-
{ name: '选项2', value: '2' },
|
|
67
|
-
];
|
|
68
|
-
const columnsFieldNames = {
|
|
69
|
-
text: 'name',
|
|
70
|
-
value: 'value',
|
|
71
|
-
};
|
|
72
|
-
const [pickerValue, _setPickerValue] = useWrapperRef<string | undefined>(undefined);
|
|
73
|
-
</script>
|
|
74
|
-
|
|
75
|
-
<style scoped lang="less">
|
|
76
|
-
.desc {
|
|
77
|
-
font-size: 12px;
|
|
78
|
-
text-align: center;
|
|
79
|
-
}
|
|
80
|
-
</style>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## API
|
|
84
|
-
|
|
85
|
-
### Props
|
|
86
|
-
|
|
87
|
-
继承 TSinglePickerProps 的同时
|
|
88
|
-
|
|
89
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
90
|
-
| ---------- | ------------------ | ---------------- | ------ |
|
|
91
|
-
| fieldProps | 当前选中项对应的值 | vant field props | - |
|
|
92
|
-
|
|
93
|
-
### Events
|
|
94
|
-
|
|
95
|
-
继承 SinglePicker
|
|
96
|
-
|
|
97
|
-
| 事件名 | 说明 | 回调参数 |
|
|
98
|
-
| :----- | :--- | :------- |
|
|
99
|
-
| - | - | - |
|
|
100
|
-
|
|
101
|
-
### Slots
|
|
102
|
-
|
|
103
|
-
继承 SinglePicker
|
|
104
|
-
|
|
105
|
-
| 名称 | 说明 | 参数 |
|
|
106
|
-
| :--- | :--- | :--- |
|
|
107
|
-
| - | - | - |
|
package/es/mask-txt/README.md
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
# MaskTxt
|
|
2
|
-
|
|
3
|
-
### 介绍
|
|
4
|
-
|
|
5
|
-
脱敏文本组件
|
|
6
|
-
|
|
7
|
-
**主要功能描述**
|
|
8
|
-
|
|
9
|
-
- 自动处理数据源(加密数据)的解密逻辑
|
|
10
|
-
- 针对不同项目、业务场景,支持自定义:
|
|
11
|
-
- 加解密方法
|
|
12
|
-
- 脱敏占位符号
|
|
13
|
-
- 脱敏展示的策略
|
|
14
|
-
- 内部已经支持部分策略(身份证、手机号、邮箱、银行卡号),可自由配置。
|
|
15
|
-
- 也支持完全自定义
|
|
16
|
-
- 针对 ui,支持自定义:
|
|
17
|
-
- 默认展示的图标大小
|
|
18
|
-
- 完全自定义展示逻辑
|
|
19
|
-
|
|
20
|
-
**对开发者的解脱**
|
|
21
|
-
|
|
22
|
-
- 默认的 ui、交互处理
|
|
23
|
-
- 当数据源不符合与后端约定的格式,组件内部兜底加解密的展示。
|
|
24
|
-
|
|
25
|
-
## 代码演示
|
|
26
|
-
|
|
27
|
-
### 基础用法
|
|
28
|
-
|
|
29
|
-
必要配置项:
|
|
30
|
-
|
|
31
|
-
- preset 预设,一般在一个项目中是通用的
|
|
32
|
-
- encrypt 加密方法
|
|
33
|
-
- decrypt 解密方法
|
|
34
|
-
- fetchPlaintext 获取未脱敏数据的异步方法
|
|
35
|
-
- maskId 数据标识
|
|
36
|
-
- mask-txt 数据源(加密且脱敏)
|
|
37
|
-
|
|
38
|
-
> 内部兜底逻辑:
|
|
39
|
-
>
|
|
40
|
-
> - 如果数据源符合要求(加密且脱敏 - 根据是否包含脱敏占位符号来判断),则走调用接口的逻辑。
|
|
41
|
-
> - 反之,不符合要求,走前端兜底策略
|
|
42
|
-
> - 例如再右侧示例中输入 12345678 和 123\*_678 的展示效果是一致的,只不过当数据源本身包含脱敏占位符(默认为 _)时,点击小眼睛会走调用接口逻辑,界面可以观察到 loading 效果。
|
|
43
|
-
|
|
44
|
-
```html
|
|
45
|
-
<template>
|
|
46
|
-
<demo-block title="基础用法">
|
|
47
|
-
<section>
|
|
48
|
-
<span class="desc">设置初始值: 加密且脱敏</span>
|
|
49
|
-
<van-field label="明文" placeholder="请输入" v-model="dataSourcePlainTxt" />
|
|
50
|
-
<van-field disabled label="密文" v-model="dataSourceCipherTxt" placeholder="输入明文, 制造密文" />
|
|
51
|
-
<mask-txt :preset="commonPreset" mask-id="maskId" :mask-txt="dataSourceCipherTxt" />
|
|
52
|
-
</section>
|
|
53
|
-
</demo-block>
|
|
54
|
-
</template>
|
|
55
|
-
|
|
56
|
-
<script setup lang="ts">
|
|
57
|
-
import { MaskTxt, TMaskTxtProps } from '@ebfe/vant-kit';
|
|
58
|
-
import { useWrapperRef } from '@ebfe/vhooks';
|
|
59
|
-
import { Field as VanField } from 'vant';
|
|
60
|
-
import { getAesCryptoTool } from '@ebfe/utils';
|
|
61
|
-
import { computed } from 'vue';
|
|
62
|
-
|
|
63
|
-
const { AES_Encrypt, AES_Dencrypt } = getAesCryptoTool({
|
|
64
|
-
key: '12345678',
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* 制造数据源
|
|
69
|
-
*/
|
|
70
|
-
const [dataSourcePlainTxt] = useWrapperRef('');
|
|
71
|
-
const dataSourceCipherTxt = computed(() => commonPreset.encrypt?.(dataSourcePlainTxt.value) as string);
|
|
72
|
-
|
|
73
|
-
const commonPreset: TMaskTxtProps['preset'] = {
|
|
74
|
-
decrypt: AES_Dencrypt,
|
|
75
|
-
encrypt: AES_Encrypt,
|
|
76
|
-
fetchPlaintext: async (_maskId) => {
|
|
77
|
-
return new Promise<string>((resolve) => {
|
|
78
|
-
setTimeout(() => {
|
|
79
|
-
// eslint-disable-next-line no-console
|
|
80
|
-
console.log('模拟接口调用');
|
|
81
|
-
resolve(dataSourceCipherTxt.value!);
|
|
82
|
-
}, 1000);
|
|
83
|
-
});
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
</script>
|
|
87
|
-
|
|
88
|
-
<style scoped lang="less">
|
|
89
|
-
section {
|
|
90
|
-
padding: 0px 16px;
|
|
91
|
-
display: flex;
|
|
92
|
-
flex-direction: column;
|
|
93
|
-
justify-content: center;
|
|
94
|
-
align-items: center;
|
|
95
|
-
gap: 12px;
|
|
96
|
-
|
|
97
|
-
.desc {
|
|
98
|
-
font-size: 12px;
|
|
99
|
-
align-self: flex-start;
|
|
100
|
-
color: #aaa;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
</style>
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### 自定义脱敏占位符号
|
|
107
|
-
|
|
108
|
-
preset.placeholder
|
|
109
|
-
|
|
110
|
-
```ts
|
|
111
|
-
const commonPreset: TMaskTxtProps['preset'] = {
|
|
112
|
-
……
|
|
113
|
-
placeholder: '$'
|
|
114
|
-
};
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### 自带一些内置脱敏策略
|
|
118
|
-
|
|
119
|
-
preset.maskType
|
|
120
|
-
|
|
121
|
-
`TMaskTxtProps['preset']['maskType']`
|
|
122
|
-
|
|
123
|
-
### 自定义脱敏策略
|
|
124
|
-
|
|
125
|
-
preset.maskStrategy
|
|
126
|
-
|
|
127
|
-
`TMaskTxtProps['preset']['maskStrategy']`
|
|
128
|
-
|
|
129
|
-
```ts
|
|
130
|
-
const commonPreset: TMaskTxtProps['preset'] = {
|
|
131
|
-
……
|
|
132
|
-
placeholder: '😀',
|
|
133
|
-
maskStrategy(str) {
|
|
134
|
-
try {
|
|
135
|
-
return `👉${str.replace(/./g, '😀')}👈`;
|
|
136
|
-
} catch (_) {
|
|
137
|
-
_;
|
|
138
|
-
return '';
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 更改默认展示的图标大小
|
|
145
|
-
|
|
146
|
-
```html
|
|
147
|
-
<mask-txt …… icon-size="30" />
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### 完全自定义展示逻辑
|
|
151
|
-
|
|
152
|
-
- 插槽支持暴露完善的 api
|
|
153
|
-
|
|
154
|
-
```html
|
|
155
|
-
<mask-txt :preset="commonPreset" mask-id="maskId" :mask-txt="dataSourceCipherTxt">
|
|
156
|
-
<template
|
|
157
|
-
#default="{
|
|
158
|
-
showValue,
|
|
159
|
-
loading,
|
|
160
|
-
isPlaintextVisible,
|
|
161
|
-
toggleVisibility,
|
|
162
|
-
}"
|
|
163
|
-
>
|
|
164
|
-
<van-button @click="toggleVisibility">
|
|
165
|
-
<span style="color: red">{{ showValue }}</span>
|
|
166
|
-
<van-icon v-if="!loading" :size="16" :name="isPlaintextVisible ? 'eye' : 'browsing-history'" />
|
|
167
|
-
<van-loading v-else :size="16" type="spinner" />
|
|
168
|
-
</van-button>
|
|
169
|
-
</template>
|
|
170
|
-
</mask-txt>
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## API
|
|
174
|
-
|
|
175
|
-
### Props
|
|
176
|
-
|
|
177
|
-
`TMaskTxtProps`
|
|
178
|
-
|
|
179
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
180
|
-
| -------- | ----------------------------------- | -------------------------------------- | ------------ | ---------------- | --- |
|
|
181
|
-
| maskId | 数据标识,来源于后端,也需传递给后端 | string | - |
|
|
182
|
-
| maskTxt | 数据源(默认期望加密且脱敏) | string | - |
|
|
183
|
-
| iconSize | 默认所展示的图标大小 | string \| number | 16 |
|
|
184
|
-
| preset | 一些预设 | `Omit<IUseMaskedFieldOptions, 'maskId' | 'modelValue' | 'onValueUpdate'` | - |
|
|
185
|
-
|
|
186
|
-
```ts
|
|
187
|
-
interface IUseMaskedFieldOptions {
|
|
188
|
-
modelValue: ComputedRef<string>;
|
|
189
|
-
maskId: ComputedRef<string>;
|
|
190
|
-
fetchPlaintext: (maskId: string) => Promise<string>;
|
|
191
|
-
decrypt: (cipher: string) => string;
|
|
192
|
-
encrypt?: (plain: string) => string;
|
|
193
|
-
placeholder?: string;
|
|
194
|
-
/**
|
|
195
|
-
* 自定义脱敏函数(最高优先级)
|
|
196
|
-
* 若提供,则忽略 maskType 和 placeholder
|
|
197
|
-
*/
|
|
198
|
-
maskStrategy?: (str: string) => string;
|
|
199
|
-
/**
|
|
200
|
-
* 使用内置脱敏策略(中优先级)
|
|
201
|
-
* 若未提供 maskStrategy,则使用此策略
|
|
202
|
-
*/
|
|
203
|
-
maskType?: TMaskType;
|
|
204
|
-
onValueUpdate?: (value: string) => void;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
type TMaskType = 'id' | 'phone' | 'bankCard' | 'email';
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### slots
|
|
211
|
-
|
|
212
|
-
| 名称 | 说明 | 参数 |
|
|
213
|
-
| :------ | :----------------- | :---------------------------------------------------------------- |
|
|
214
|
-
| default | 控制组件的展示效果 | `{ show-value, loading, is-plaintext-visible, toggle-visibility}` |
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
# MultiPicker
|
|
2
|
-
|
|
3
|
-
### 介绍
|
|
4
|
-
|
|
5
|
-
主要基于 vant 的 Popup、CheckboxGroup 等组件进行二次封装,方便处理多项选择的需求场景。
|
|
6
|
-
|
|
7
|
-
**主要功能描述**
|
|
8
|
-
|
|
9
|
-
- 支持自定义触发器
|
|
10
|
-
- 支持开启搜索功能
|
|
11
|
-
- 自定义文本提示信息
|
|
12
|
-
|
|
13
|
-
**对开发者的解脱**
|
|
14
|
-
|
|
15
|
-
- 符合 ui 设计
|
|
16
|
-
- 打开收起逻辑的编写
|
|
17
|
-
- 对所选项的 `真实值`、`展示值` 的处理
|
|
18
|
-
- 基于上次选中的结果进行编辑后,点击取消,回滚上次选中的状态
|
|
19
|
-
|
|
20
|
-
## 代码演示
|
|
21
|
-
|
|
22
|
-
### 基础用法
|
|
23
|
-
|
|
24
|
-
```html
|
|
25
|
-
<template>
|
|
26
|
-
<MultiPicker
|
|
27
|
-
v-model="pickerValue"
|
|
28
|
-
:options="options"
|
|
29
|
-
:field-names="fieldNames"
|
|
30
|
-
title="基础用法"
|
|
31
|
-
tip-txt="💫这是一段提示文本: 你可以根据业务需要自行定制展示的内容"
|
|
32
|
-
>
|
|
33
|
-
<template #trigger="{ triggerPopupShow, showValue }">
|
|
34
|
-
<div class="trigger-box">
|
|
35
|
-
<van-button type="primary" @click="triggerPopupShow"> 点击打开多选-选择器🤪 </van-button>
|
|
36
|
-
<p>show value: {{ showValue }}</p>
|
|
37
|
-
<p>modelValue: {{ pickerValue }}</p>
|
|
38
|
-
</div>
|
|
39
|
-
</template>
|
|
40
|
-
</MultiPicker>
|
|
41
|
-
</template>
|
|
42
|
-
|
|
43
|
-
<script setup lang="ts">
|
|
44
|
-
import { useWrapperRef } from '@ebfe/vhooks';
|
|
45
|
-
import { MultiPicker } from '@ebfe/vant-kit';
|
|
46
|
-
import { Button as VanButton } from 'vant';
|
|
47
|
-
|
|
48
|
-
const options = [
|
|
49
|
-
{ name: '选项1', value: '1' },
|
|
50
|
-
{ name: '选项2', value: '2', disabled: true },
|
|
51
|
-
{ name: '选项3', value: '3' },
|
|
52
|
-
];
|
|
53
|
-
const fieldNames = {
|
|
54
|
-
label: 'name',
|
|
55
|
-
value: 'value',
|
|
56
|
-
};
|
|
57
|
-
const [pickerValue, _setPickerValue] = useWrapperRef<string[]>([]);
|
|
58
|
-
</script>
|
|
59
|
-
|
|
60
|
-
<style scoped lang="less">
|
|
61
|
-
.trigger-box {
|
|
62
|
-
display: flex;
|
|
63
|
-
flex-direction: column;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
align-items: center;
|
|
66
|
-
}
|
|
67
|
-
</style>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### 开启搜索功能
|
|
71
|
-
|
|
72
|
-
- 传入 show-earch 展示搜索框
|
|
73
|
-
- 侦听 search 事件处理搜索逻辑
|
|
74
|
-
|
|
75
|
-
> 💫 对交互细节的优化:如果在输入关键字进行搜索后,新的数据源为空,此时点击确定,更新的值依旧为最近一次选中的选项。
|
|
76
|
-
|
|
77
|
-
```html
|
|
78
|
-
<template>
|
|
79
|
-
<MultiPicker
|
|
80
|
-
v-model="pickerValue"
|
|
81
|
-
:options="options"
|
|
82
|
-
:field-names="fieldNames"
|
|
83
|
-
title="基础用法"
|
|
84
|
-
tip-txt="💫开启了搜索功能"
|
|
85
|
-
show-search
|
|
86
|
-
@search="onSearch"
|
|
87
|
-
>
|
|
88
|
-
<template #trigger="{ triggerPopupShow, showValue }">
|
|
89
|
-
<div class="trigger-box">
|
|
90
|
-
<van-button type="primary" @click="triggerPopupShow"> 带搜索框🔍 </van-button>
|
|
91
|
-
<p>show value: {{ showValue }}</p>
|
|
92
|
-
<p>modelValue: {{ pickerValue }}</p>
|
|
93
|
-
</div>
|
|
94
|
-
</template>
|
|
95
|
-
</MultiPicker>
|
|
96
|
-
</template>
|
|
97
|
-
|
|
98
|
-
<script setup lang="ts">
|
|
99
|
-
import { useWrapperRef } from '@ebfe/vhooks';
|
|
100
|
-
import { MultiPicker } from '@ebfe/vant-kit';
|
|
101
|
-
import { Button as VanButton } from 'vant';
|
|
102
|
-
import { checkStrIsEmpty } from '@ebfe/utils';
|
|
103
|
-
|
|
104
|
-
const optionsDataSource = [
|
|
105
|
-
{ name: '选项1', value: '1' },
|
|
106
|
-
{ name: '选项2', value: '2', disabled: true },
|
|
107
|
-
{ name: '选项3', value: '3' },
|
|
108
|
-
{ name: '选项4', value: '4', disabled: true },
|
|
109
|
-
{ name: '选项5', value: '5' },
|
|
110
|
-
{ name: '选项6', value: '6' },
|
|
111
|
-
{ name: '选项7', value: '7', disabled: true },
|
|
112
|
-
{ name: '选项8', value: '8' },
|
|
113
|
-
{ name: '选项9', value: '9' },
|
|
114
|
-
{ name: '选项10', value: '10' },
|
|
115
|
-
{ name: '选项11', value: '11', disabled: true },
|
|
116
|
-
{ name: '选项12', value: '12' },
|
|
117
|
-
{ name: '选项13', value: '13', disabled: true },
|
|
118
|
-
{ name: '选项14', value: '14' },
|
|
119
|
-
{ name: '选项15', value: '15' },
|
|
120
|
-
{ name: '选项16', value: '16', disabled: true },
|
|
121
|
-
{ name: '选项17', value: '17' },
|
|
122
|
-
{ name: '选项18', value: '18' },
|
|
123
|
-
{ name: '选项19', value: '19' },
|
|
124
|
-
{ name: '选项20', value: '20' },
|
|
125
|
-
];
|
|
126
|
-
const [options, setOptions] = useWrapperRef(optionsDataSource);
|
|
127
|
-
|
|
128
|
-
const fieldNames = {
|
|
129
|
-
label: 'name',
|
|
130
|
-
value: 'value',
|
|
131
|
-
};
|
|
132
|
-
const [pickerValue, _setPickerValue] = useWrapperRef<string[]>([]);
|
|
133
|
-
|
|
134
|
-
const onSearch = (keywords: string) => {
|
|
135
|
-
if (checkStrIsEmpty(keywords)) {
|
|
136
|
-
setOptions(optionsDataSource);
|
|
137
|
-
} else {
|
|
138
|
-
setOptions(
|
|
139
|
-
optionsDataSource.filter((item) => item.name.toLocaleLowerCase().includes(keywords.toLocaleLowerCase()))
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
</script>
|
|
144
|
-
|
|
145
|
-
<style scoped lang="less">
|
|
146
|
-
.trigger-box {
|
|
147
|
-
display: flex;
|
|
148
|
-
flex-direction: column;
|
|
149
|
-
justify-content: center;
|
|
150
|
-
align-items: center;
|
|
151
|
-
}
|
|
152
|
-
</style>
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## API
|
|
156
|
-
|
|
157
|
-
### Props
|
|
158
|
-
|
|
159
|
-
TMultiPickerProps
|
|
160
|
-
|
|
161
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
162
|
-
| ------------ | ------------------ | -------------------------------------------------------------------------------------- | ---------------------------------- |
|
|
163
|
-
| v-model | 当前选中项对应的值 | string[] | - |
|
|
164
|
-
| options | 选项 | Array<{ label: string; value: string; disabled?: boolean }> (label、value支持属性别名) | - |
|
|
165
|
-
| fieldNames | 字段别名 | { label?: string; value?: string; } | { label: 'label', value: 'value' } |
|
|
166
|
-
| title | 标题 | string | - |
|
|
167
|
-
| tipTxt | 文本提示信息 | string | - |
|
|
168
|
-
| show-search | 是否显示搜索框 | boolean | false |
|
|
169
|
-
| search-delay | 搜索防抖时间(ms) | number | 300 |
|
|
170
|
-
|
|
171
|
-
### Events
|
|
172
|
-
|
|
173
|
-
| 事件名 | 说明 | 回调参数 |
|
|
174
|
-
| :------------- | :----------------------------- | :------------------------------------------------------- |
|
|
175
|
-
| confirm | 点击确认后触发的事件 | TConfirmEventPayload = { values: any[]; options: any[] } |
|
|
176
|
-
| search | 在搜索框输入时,触发的搜索事件 | keywords |
|
|
177
|
-
| toggleCheckbox | 触发选中、取消选中时的事件 | values |
|
|
178
|
-
|
|
179
|
-
### Slots
|
|
180
|
-
|
|
181
|
-
| 名称 | 说明 | 参数 |
|
|
182
|
-
| :------ | :----- | :-------------------------------------------------------------------------------- |
|
|
183
|
-
| trigger | 触发器 | `{ trigger-popup-show: () => void; show-value: string; selected-options: any[] }` |
|