| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- <template>
- <div class="demo">
- <h2>{{ translate('basic') }}</h2>
- <nut-cell
- :title="translate('chooseCity')"
- :desc="index"
- @click="
- () => {
- show = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model:visible="show"
- :columns="columns"
- :title="translate('chooseCity')"
- @change="change"
- @confirm="(options) => confirm('index', options)"
- ></nut-picker>
- <h2>{{ translate('defaultSelected') }}</h2>
- <nut-cell
- :title="translate('chooseCity')"
- :desc="defult"
- @click="
- () => {
- showDefult = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model="selectedValue"
- v-model:visible="showDefult"
- :columns="columns"
- :title="translate('chooseCity')"
- @confirm="(options) => confirm('defult', options)"
- >
- </nut-picker>
- <h2>{{ translate('tileDesc') }}</h2>
- <nut-cell
- :title="translate('chooseCity')"
- :desc="defult"
- @click="
- () => {
- showTile = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model="selectedValue"
- v-model:visible="showTile"
- :columns="columns"
- :title="translate('chooseCity')"
- :threeDimensional="false"
- @confirm="(options) => confirm('defult', options)"
- >
- </nut-picker>
- <h2>{{ translate('multipleColumns') }}</h2>
- <nut-cell
- :title="translate('chooseTime')"
- :desc="multiple"
- @click="
- () => {
- showMultiple = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model="selectedTime"
- v-model:visible="showMultiple"
- :columns="multipleColumns"
- :title="translate('chooseTime')"
- @confirm="(options) => confirm('multiple', options)"
- >
- </nut-picker>
- <h2>{{ translate('cascade') }}</h2>
- <nut-cell
- :title="translate('chooseCity')"
- :desc="cascader"
- @click="
- () => {
- showCascader = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model:visible="showCascader"
- v-model="selectedCascader"
- :columns="cascaderColumns"
- :title="translate('chooseCity')"
- @confirm="(options) => confirm('cascader', options)"
- ></nut-picker>
- <h2>{{ translate('async') }}</h2>
- <nut-cell
- :title="translate('chooseCity')"
- :desc="async"
- @click="
- () => {
- showAsync = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model="asyncValue"
- v-model:visible="showAsync"
- :columns="asyncColumns"
- :title="translate('chooseCity')"
- @confirm="(options) => confirm('async', options)"
- ></nut-picker>
- <h2>{{ translate('custom') }}</h2>
- <nut-cell
- :title="translate('validTime')"
- :desc="effect"
- @click="
- () => {
- showEffect = true;
- }
- "
- ></nut-cell>
- <nut-picker
- v-model:visible="showEffect"
- :columns="effectColumns"
- :title="translate('chooseDate')"
- @confirm="(options) => confirm('effect', options)"
- >
- <nut-button block type="primary" @click="alwaysFun">{{ translate('always') }}</nut-button></nut-picker
- >
- </div>
- </template>
- <script lang="ts">
- import { toRefs, ref, onMounted, reactive, computed } from 'vue';
- import { createComponent } from '@/packages/utils/create';
- import { PickerOption } from './types';
- const { createDemo, translate } = createComponent('picker');
- import { useTranslate } from '@/sites/assets/util/useTranslate';
- import { Internation } from './doc.en';
- useTranslate(Internation);
- export default createDemo({
- props: {},
- setup() {
- const selectedValue = ref(['ZheJiang']);
- const selectedTime = ref(['Wednesday', 'Afternoon']);
- const selectedCascader = ref(['FuJian', 'FuZhou', 'TaiJiang']);
- const asyncValue = ref<string[]>([]);
- const columsNum = ref([]);
- const columns = computed(() => [
- { text: translate('nanJing'), value: 'NanJing' },
- { text: translate('wuXi'), value: 'WuXi' },
- { text: translate('zangZu'), value: 'ZangZu' },
- { text: translate('beiJing'), value: 'BeiJing' },
- { text: translate('lianYunGang'), value: 'LianYunGang' },
- { text: translate('zheJiang'), value: 'ZheJiang' },
- { text: translate('jiangSu'), value: 'JiangSu' }
- ]);
- const multipleColumns = computed(() => [
- [
- { text: translate('monday'), value: 'Monday' },
- { text: translate('tuesday'), value: 'Tuesday' },
- { text: translate('wednesday'), value: 'Wednesday' },
- { text: translate('thursday'), value: 'Thursday' },
- { text: translate('friday'), value: 'Friday' }
- ],
- [
- { text: translate('morning'), value: 'Morning' },
- { text: translate('afternoon'), value: 'Afternoon' },
- { text: translate('evening'), value: 'Evening' }
- ]
- ]);
- const cascaderColumns = computed(() => [
- {
- text: translate('zheJiang'),
- value: 'ZheJiang',
- children: [
- {
- text: translate('hangZhou'),
- value: 'HangZhou',
- children: [
- { text: translate('xiHu'), value: 'XiHu' },
- { text: translate('yuHang'), value: 'YuHang' }
- ]
- },
- {
- text: translate('wenZhou'),
- value: 'WenZhou',
- children: [
- { text: translate('luCheng'), value: 'LuCheng' },
- { text: translate('ouHai'), value: 'OuHai' }
- ]
- }
- ]
- },
- {
- text: translate('fuJian'),
- value: 'FuJian',
- children: [
- {
- text: translate('fuZhou'),
- value: 'FuZhou',
- children: [
- { text: translate('guLou'), value: 'GuLou' },
- { text: translate('taiJiang'), value: 'TaiJiang' }
- ]
- },
- {
- text: translate('xiaMen'),
- value: 'XiaMen',
- children: [
- { text: translate('siMing'), value: 'SiMing' },
- { text: translate('haiCang'), value: 'HaiCang' }
- ]
- }
- ]
- }
- ]);
- const bf = {
- ZheJiang: [
- {
- text: translate('hangZhou'),
- value: 'HangZhou',
- children: [
- { text: translate('xiHu'), value: 'XiHu' },
- { text: translate('yuHang'), value: 'YuHang' }
- ]
- },
- {
- text: translate('wenZhou'),
- value: 'WenZhou',
- children: [
- { text: translate('luCheng'), value: 'LuCheng' },
- { text: translate('ouHai'), value: 'OuHai' }
- ]
- }
- ],
- FuJian: [
- {
- text: translate('fuZhou'),
- value: 'FuZhou',
- children: [
- { text: translate('guLou'), value: 'GuLou' },
- { text: translate('taiJiang'), value: 'TaiJiang' }
- ]
- },
- {
- text: translate('xiaMen'),
- value: 'XiaMen',
- children: [
- { text: translate('siMing'), value: 'SiMing' },
- { text: translate('haiCang'), value: 'HaiCang' }
- ]
- }
- ]
- };
- const jkColumns = ref([
- {
- text: translate('zheJiang'),
- value: 'ZheJiang',
- children: []
- },
- {
- text: translate('fuJian'),
- value: 'FuJian',
- children: []
- }
- ]);
- const effectColumns = ref([
- { text: '2022-01', value: 'January' },
- { text: '2022-02', value: 'February' },
- { text: '2022-03', value: 'March' },
- { text: '2022-04', value: 'April' },
- { text: '2022-05', value: 'May' },
- { text: '2022-06', value: 'June' },
- { text: '2022-07', value: 'July' },
- { text: '2022-08', value: 'August' },
- { text: '2022-09', value: 'September' },
- { text: '2022-10', value: 'October' },
- { text: '2022-11', value: 'November' },
- { text: '2022-12', value: 'December' }
- ]);
- const asyncColumns = ref<PickerOption[]>([]);
- const show = ref(false);
- const showDefult = ref(false);
- const showMultiple = ref(false);
- const showCascader = ref(false);
- const showAsync = ref(false);
- const showEffect = ref(false);
- const showTile = ref(false);
- const showJK = ref(false);
- const desc = reactive({
- index: '',
- defult: '',
- multiple: '',
- cascader: '',
- async: '',
- effect: ''
- });
- const open = (index: number) => {
- switch (index) {
- case 0:
- show.value = true;
- break;
- case 1:
- showDefult.value = true;
- break;
- case 2:
- showMultiple.value = true;
- break;
- case 3:
- showCascader.value = true;
- break;
- case 4:
- showAsync.value = true;
- break;
- default:
- showCascader.value = true;
- }
- };
- onMounted(() => {
- for (let i = 1; i < 60; i++) {
- columsNum.value.push({ text: i, value: i });
- }
- setTimeout(() => {
- asyncColumns.value = [
- { text: translate('nanJing'), value: 'NanJing' },
- { text: translate('wuXi'), value: 'WuXi' },
- { text: translate('zangZu'), value: 'ZangZu' },
- { text: translate('beiJing'), value: 'BeiJing' },
- { text: translate('lianYunGang'), value: 'LianYunGang' },
- { text: translate('zheJiang'), value: 'ZheJiang' },
- { text: translate('jiangSu'), value: 'JiangSu' }
- ];
- asyncValue.value = ['ZangZu'];
- }, 500);
- });
- const confirm = (tag: string, { selectedValue }: { selectedValue: string[] }) => {
- (desc as any)[tag] = selectedValue.join(',');
- };
- const change = ({ selectedValue }: { selectedValue: string[] }) => {
- console.log(selectedValue);
- };
- // change
- const changeJK = (data) => {
- const { columnIndex, selectedOptions, selectedValue } = data;
- if (columnIndex == 0) {
- jkColumns.value.forEach((colum) => {
- if (colum.value == selectedValue[columnIndex] && colum.children.length == 0) {
- colum.children = bf[selectedValue[columnIndex]];
- }
- });
- }
- };
- const alwaysFun = () => {
- showEffect.value = false;
- desc.effect = translate('always');
- };
- return {
- selectedValue,
- asyncValue,
- columns,
- show,
- showDefult,
- showAsync,
- ...toRefs(desc),
- showMultiple,
- showCascader,
- open,
- multipleColumns,
- cascaderColumns,
- confirm,
- change,
- asyncColumns,
- effectColumns,
- showEffect,
- alwaysFun,
- translate,
- selectedTime,
- selectedCascader,
- columsNum,
- showTile,
- showJK,
- jkColumns,
- changeJK
- };
- }
- });
- </script>
- <style lang="scss" scoped></style>
|