Skip to content

Commit b0d60a0

Browse files
authored
feat: ✨ picker和selectPicker添加clearable属性
1 parent a50c0be commit b0d60a0

File tree

10 files changed

+194
-117
lines changed

10 files changed

+194
-117
lines changed

docs/component/picker.md

Lines changed: 75 additions & 64 deletions
Large diffs are not rendered by default.

docs/component/select-picker.md

Lines changed: 49 additions & 40 deletions
Large diffs are not rendered by default.

src/pages/picker/Index.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<wd-picker label="before-confirm" :columns="columns0" v-model="value7" :before-confirm="beforeConfirm" />
1515
<wd-picker label="错误" v-model="value10" error :columns="columns0" />
1616
<wd-picker label="必填" v-model="value11" :columns="columns0" required />
17+
<wd-picker label="可清空" :clearable="true" v-model="value15" :columns="columns5" :column-change="onChangeDistrict" />
1718
</wd-cell-group>
1819
</demo-block>
1920
<demo-block title="label 不传" transparent>
@@ -105,6 +106,7 @@ const columns4 = ref([
105106
])
106107
107108
const value5 = ref(['110000', '110100', '110102'])
109+
const value15 = ref(['110000', '110100', '110102'])
108110
const columns5 = ref([district[0], district[district[0][0].value], district[district[district[0][0].value][0].value]])
109111
110112
const value6 = ref(['中南大学', '软件工程'])

src/pages/selectPicker/Index.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,19 @@
1414
<wd-select-picker label="before-confirm" v-model="value9" :columns="columns1" @confirm="handleConfirm9" :before-confirm="beforeConfirm" />
1515
<wd-select-picker label="标题" v-model="value10" title="多选" :columns="columns1" @confirm="handleConfirm10" />
1616
<wd-select-picker label="错误" error v-model="value11" :columns="columns1" @confirm="handleConfirm11" />
17-
<wd-select-picker label="必填" required v-model="value12" :columns="columns1" @confirm="handleConfirm12" />
17+
<wd-select-picker clearable label="必填" required v-model="value12" :columns="columns1" @confirm="handleConfirm12" />
1818
<wd-select-picker label="可搜索" filterable v-model="value13" :columns="columns1" @confirm="handleConfirm13" />
1919
<wd-select-picker label="单选可搜索" filterable v-model="value18" type="radio" :columns="columns1" @confirm="handleConfirm13" />
2020
<wd-select-picker label="自动完成" type="radio" :show-confirm="false" v-model="value19" :columns="columns1" @confirm="handleConfirm2" />
21+
<wd-select-picker
22+
label="可清空"
23+
clearable
24+
type="radio"
25+
:show-confirm="false"
26+
v-model="value20"
27+
:columns="columns1"
28+
@confirm="handleConfirm2"
29+
/>
2130
</wd-cell-group>
2231
</view>
2332
<demo-block title="label不传" transparent>
@@ -128,6 +137,7 @@ const value16 = ref<string[]>(['103'])
128137
const value17 = ref<string[]>(['102'])
129138
const value18 = ref<string>('102')
130139
const value19 = ref<string>('101')
140+
const value20 = ref<string>('101')
131141
132142
const customShow = ref<string>('奢侈品')
133143

src/uni_modules/wot-design-uni/components/wd-picker/index.scss

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
color: $-dark-color-gray;
2626
}
2727

28-
:deep(.wd-picker__arrow){
28+
:deep(.wd-picker__arrow),
29+
:deep(.wd-picker__clear) {
2930
color: $-dark-color;
3031
}
3132

@@ -78,13 +79,15 @@
7879
.wd-picker__cell {
7980
font-size: $-cell-title-fs-large;
8081
}
81-
:deep(.wd-picker__arrow) {
82+
:deep(.wd-picker__arrow),
83+
:deep(.wd-picker__clear) {
8284
font-size: $-cell-icon-size-large;
8385
}
8486
}
8587
@include when(error) {
8688
.wd-picker__value,
87-
:deep(.wd-picker__arrow) {
89+
:deep(.wd-picker__arrow),
90+
:deep(.wd-picker__clear) {
8891
color: $-input-error-color;
8992
}
9093
}
@@ -170,7 +173,7 @@
170173
color: $-input-placeholder-color;
171174
}
172175

173-
@include edeep(arrow) {
176+
@include edeep(arrow,clear) {
174177
display: block;
175178
font-size: $-cell-icon-size;
176179
color: $-cell-arrow-color;

src/uni_modules/wot-design-uni/components/wd-picker/types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ export const pickerProps = {
147147
/**
148148
* 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。
149149
*/
150-
immediateChange: makeBooleanProp(false)
150+
immediateChange: makeBooleanProp(false),
151+
/**
152+
* 显示清空按钮
153+
*/
154+
clearable: makeBooleanProp(false)
151155
}
152156

153157
export type PickerProps = ExtractPropTypes<typeof pickerProps>

src/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
<view :class="`wd-picker__value ${ellipsis && 'is-ellipsis'} ${customValueClass} ${showValue ? '' : 'wd-picker__placeholder'}`">
2222
{{ showValue ? showValue : placeholder || translate('placeholder') }}
2323
</view>
24-
<wd-icon v-if="!disabled && !readonly" custom-class="wd-picker__arrow" name="arrow-right" />
24+
<wd-icon v-if="showArrow" custom-class="wd-picker__arrow" name="arrow-right" />
25+
<wd-icon v-else-if="showClear" custom-class="wd-picker__clear" name="error-fill" @click.stop="handleClear" />
2526
</view>
2627
<view v-if="errorMessage" class="wd-picker__error-message">{{ errorMessage }}</view>
2728
</view>
@@ -384,6 +385,21 @@ function setLoading(loading: boolean) {
384385
innerLoading.value = loading
385386
}
386387
388+
// 是否展示清除按钮
389+
const showClear = computed(() => {
390+
return props.clearable && !props.disabled && !props.readonly && showValue.value.length
391+
})
392+
393+
function handleClear() {
394+
const clearValue = isArray(pickerValue.value) ? [] : ''
395+
emit('update:modelValue', clearValue)
396+
}
397+
398+
// 是否展示箭头
399+
const showArrow = computed(() => {
400+
return !props.disabled && !props.readonly && !showClear.value
401+
})
402+
387403
defineExpose<PickerExpose>({
388404
close,
389405
open,

src/uni_modules/wot-design-uni/components/wd-select-picker/index.scss

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
}
3131

3232
:deep(.wd-select-picker__arrow),
33-
:deep(.wd-select-picker__close) {
33+
:deep(.wd-select-picker__close),
34+
:deep(.wd-select-picker__clear) {
3435
color: $-dark-color;
3536
}
3637

@@ -71,14 +72,16 @@
7172
.wd-select-picker__value {
7273
color: $-input-error-color;
7374
}
74-
:deep(.wd-select-picker__arrow) {
75+
:deep(.wd-select-picker__arrow),
76+
:deep(.wd-select-picker__clear) {
7577
color: $-input-error-color;
7678
}
7779
}
7880
@include when(large) {
7981
font-size: $-cell-title-fs-large;
8082

81-
:deep(.wd-select-picker__arrow ){
83+
:deep(.wd-select-picker__arrow),
84+
:deep(.wd-select-picker__clear) {
8285
font-size: $-cell-icon-size-large;
8386
}
8487
}
@@ -129,7 +132,7 @@
129132
@include e(body) {
130133
flex: 1;
131134
}
132-
@include edeep(arrow) {
135+
@include edeep(arrow, clear) {
133136
display: block;
134137
font-size: $-cell-icon-size;
135138
color: $-cell-arrow-color;

src/uni_modules/wot-design-uni/components/wd-select-picker/types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@ export const selectPickerProps = {
8383
/** 自定义值样式类 */
8484
customValueClass: makeStringProp(''),
8585
/** 是否显示确认按钮(radio类型生效),默认值为:true */
86-
showConfirm: makeBooleanProp(true)
86+
showConfirm: makeBooleanProp(true),
87+
/**
88+
* 显示清空按钮
89+
*/
90+
clearable: makeBooleanProp(false)
8791
}
8892
export type SelectPickerProps = ExtractPropTypes<typeof selectPickerProps>
8993

src/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
>
2626
{{ showValue || placeholder || translate('placeholder') }}
2727
</view>
28-
<wd-icon v-if="!disabled && !readonly" custom-class="wd-select-picker__arrow" name="arrow-right" />
28+
<wd-icon v-if="showArrow" custom-class="wd-select-picker__arrow" name="arrow-right" />
29+
<wd-icon v-else-if="showClear" custom-class="wd-select-picker__clear" name="error-fill" @click.stop="handleClear" />
2930
</view>
3031

3132
<view v-if="errorMessage" class="wd-select-picker__error-message">{{ errorMessage }}</view>
@@ -430,6 +431,20 @@ const showConfirm = computed(() => {
430431
return (props.type === 'radio' && props.showConfirm) || props.type === 'checkbox'
431432
})
432433
434+
// 是否展示清除按钮
435+
const showClear = computed(() => {
436+
return props.clearable && !props.disabled && !props.readonly && showValue.value.length
437+
})
438+
439+
function handleClear() {
440+
emit('update:modelValue', props.type === 'checkbox' ? [] : '')
441+
}
442+
443+
// 是否展示箭头
444+
const showArrow = computed(() => {
445+
return !props.disabled && !props.readonly && !showClear.value
446+
})
447+
433448
defineExpose<SelectPickerExpose>({
434449
close,
435450
open

0 commit comments

Comments
 (0)