219 lines
5.5 KiB
Vue
219 lines
5.5 KiB
Vue
<template>
|
||
<demo-block card :title="t('basicUsage')">
|
||
<van-picker
|
||
:title="t('title')"
|
||
:columns="t('textColumns')"
|
||
@change="onChange1"
|
||
/>
|
||
</demo-block>
|
||
|
||
<demo-block card :title="t('defaultIndex')">
|
||
<van-picker
|
||
:title="t('title')"
|
||
:columns="t('textColumns')"
|
||
:default-index="2"
|
||
@change="onChange1"
|
||
/>
|
||
</demo-block>
|
||
|
||
<demo-block card :title="t('multipleColumns')">
|
||
<van-picker
|
||
:title="t('title')"
|
||
:columns="t('dateColumns')"
|
||
@cancel="onCancel"
|
||
@confirm="onConfirm"
|
||
/>
|
||
</demo-block>
|
||
|
||
<demo-block card v-if="!isWeapp" :title="t('cascade')">
|
||
<van-picker :title="t('title')" :columns="t('cascadeColumns')" />
|
||
</demo-block>
|
||
|
||
<demo-block card :title="t('disableOption')">
|
||
<van-picker :title="t('title')" :columns="t('disabledColumns')" />
|
||
</demo-block>
|
||
|
||
<demo-block card :title="t('setColumnValues')">
|
||
<van-picker
|
||
ref="picker"
|
||
:title="t('title')"
|
||
:columns="columns"
|
||
@change="onChange2"
|
||
/>
|
||
</demo-block>
|
||
|
||
<demo-block card :title="t('loadingStatus')">
|
||
<van-picker loading :title="t('title')" :columns="columns" />
|
||
</demo-block>
|
||
|
||
<demo-block card v-if="!isWeapp" :title="t('withPopup')">
|
||
<van-field
|
||
v-model="fieldValue"
|
||
readonly
|
||
clickable
|
||
:label="t('city')"
|
||
:placeholder="t('chooseCity')"
|
||
@click="onClickField"
|
||
/>
|
||
<van-popup v-model:show="showPicker" round position="bottom">
|
||
<van-picker
|
||
:title="t('title')"
|
||
:columns="t('textColumns')"
|
||
@cancel="onCancel2"
|
||
@confirm="onConfirm2"
|
||
/>
|
||
</van-popup>
|
||
</demo-block>
|
||
<demo-block card :title="t('customChildrenKey')">
|
||
<van-picker
|
||
:title="t('title')"
|
||
:columns="t('customChildrenColumns')"
|
||
:columns-field-names="customFieldName"
|
||
/>
|
||
</demo-block>
|
||
</template>
|
||
|
||
<script lang="ts">
|
||
import { ref, computed, reactive, toRefs } from 'vue';
|
||
import { dateColumns, cascadeColumns, cascadeColumnsCustomKey } from './data';
|
||
import { useTranslate } from '@demo/use-translate';
|
||
import { Toast } from '../../toast';
|
||
|
||
const i18n = {
|
||
'zh-CN': {
|
||
city: '城市',
|
||
cascade: '级联选择',
|
||
withPopup: '搭配弹出层使用',
|
||
chooseCity: '选择城市',
|
||
showToolbar: '展示顶部栏',
|
||
dateColumns: dateColumns['zh-CN'],
|
||
defaultIndex: '默认选中项',
|
||
disableOption: '禁用选项',
|
||
cascadeColumns: cascadeColumns['zh-CN'],
|
||
multipleColumns: '多列选择',
|
||
setColumnValues: '动态设置选项',
|
||
customChildrenKey: '自定义 Columns 结构',
|
||
customChildrenColumns: cascadeColumnsCustomKey['zh-CN'],
|
||
textColumns: [
|
||
'杭州',
|
||
'宁波',
|
||
'温州',
|
||
'绍兴',
|
||
'湖州',
|
||
'嘉兴',
|
||
'金华',
|
||
'衢州',
|
||
],
|
||
disabledColumns: [
|
||
{ text: '杭州', disabled: true },
|
||
{ text: '宁波' },
|
||
{ text: '温州' },
|
||
],
|
||
column3: {
|
||
浙江: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
|
||
福建: ['福州', '厦门', '莆田', '三明', '泉州'],
|
||
},
|
||
toastContent: (value: string, index: number) =>
|
||
`当前值:${value}, 当前索引:${index}`,
|
||
},
|
||
'en-US': {
|
||
city: 'City',
|
||
cascade: 'Cascade',
|
||
withPopup: 'With Popup',
|
||
chooseCity: 'Choose City',
|
||
showToolbar: 'Show Toolbar',
|
||
dateColumns: dateColumns['en-US'],
|
||
defaultIndex: 'Default Index',
|
||
disableOption: 'Disable Option',
|
||
cascadeColumns: cascadeColumns['en-US'],
|
||
multipleColumns: 'Multiple Columns',
|
||
setColumnValues: 'Set Column Values',
|
||
customChildrenKey: 'Custom Columns Fields',
|
||
customChildrenColumns: cascadeColumnsCustomKey['en-US'],
|
||
textColumns: ['Delaware', 'Florida', 'Georqia', 'Indiana', 'Maine'],
|
||
disabledColumns: [
|
||
{ text: 'Delaware', disabled: true },
|
||
{ text: 'Florida' },
|
||
{ text: 'Georqia' },
|
||
],
|
||
column3: {
|
||
Group1: ['Delaware', 'Florida', 'Georqia', 'Indiana', 'Maine'],
|
||
Group2: ['Alabama', 'Kansas', 'Louisiana', 'Texas'],
|
||
},
|
||
toastContent: (value: string, index: number) =>
|
||
`Value: ${value}, Index:${index}`,
|
||
},
|
||
};
|
||
|
||
export default {
|
||
setup() {
|
||
const t = useTranslate(i18n);
|
||
const picker = ref();
|
||
const state = reactive({
|
||
showPicker: false,
|
||
fieldValue: '',
|
||
customFieldName: {
|
||
text: 'cityName',
|
||
children: 'cities',
|
||
},
|
||
});
|
||
|
||
const columns = computed(() => {
|
||
const column = t('column3');
|
||
return [
|
||
{
|
||
values: Object.keys(column),
|
||
className: 'column1',
|
||
},
|
||
{
|
||
values: column[Object.keys(column)[0]],
|
||
className: 'column2',
|
||
defaultIndex: 2,
|
||
},
|
||
];
|
||
});
|
||
|
||
const onChange1 = (value: string, index: number) => {
|
||
Toast(t('toastContent', value, index));
|
||
};
|
||
|
||
const onChange2 = (values: string[]) => {
|
||
picker.value.setColumnValues(1, t('column3')[values[0]]);
|
||
};
|
||
|
||
const onConfirm = (value: string, index: number) => {
|
||
Toast(t('toastContent', value, index));
|
||
};
|
||
|
||
const onCancel = () => Toast(t('cancel'));
|
||
|
||
const onCancel2 = () => {
|
||
state.showPicker = false;
|
||
};
|
||
|
||
const onClickField = () => {
|
||
state.showPicker = true;
|
||
};
|
||
|
||
const onConfirm2 = (value: string) => {
|
||
state.showPicker = false;
|
||
state.fieldValue = value;
|
||
};
|
||
|
||
return {
|
||
...toRefs(state),
|
||
t,
|
||
picker,
|
||
columns,
|
||
onCancel,
|
||
onCancel2,
|
||
onChange1,
|
||
onChange2,
|
||
onConfirm,
|
||
onConfirm2,
|
||
onClickField,
|
||
};
|
||
},
|
||
};
|
||
</script>
|