<template> <view class="u-demo"> <view class="u-demo-wrap"> <view class="u-demo-title">演示效果</view> <view class="u-demo-area"> <view class="u-demo-result-line">{{ input ? input : 'Picker值' }}</view> <u-picker :mode="mode" :defaultTime="defaultTime" v-model="show" :defaultRegion="defaultRegion" :params="params" end-year="2030" @confirm="confirm" :defaultSelector="defaultSelector" :range="range" :range-key="rangKey" @columnchange="columnchange" ></u-picker> </view> </view> <view class="u-config-wrap"> <view class="u-config-title u-border-bottom">参数配置</view> <view class="u-config-item"> <view class="u-item-title">Picker开关</view> <u-subsection :current="status" :list="['显示', '隐藏']" @change="statusChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">模式选择</view> <u-subsection :list="['单列', '多列', '时间', '地区']" @change="modeChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">默认时间</view> <u-subsection :list="['2019-12-11 20:15:35', '2020-02-05 13:09:42']" @change="defaultTimeChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">显示时分秒</view> <u-subsection :list="['显示', '隐藏']" @change="minSecChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">默认地区</view> <u-subsection :list="['广东-深圳-宝安', '海南-三亚-海棠']" @change="defaultRegionChange"></u-subsection> </view> </view> </view> </template> <script> export default { data() { return { show: false, input: '', rangKey: 'name', mode: 'selector', range: ['一', '片', '冰', '心', '在', '玉', '壶'], defaultTime: '2019-12-11 20:15:35', defaultSelector: [0], defaultRegion: ['广东省', '深圳市', '宝安区'], params: { year: true, month: true, day: true, hour: true, minute: true, second: true, province: true, city: true, area: true, timestamp: true } }; }, computed: { status() { return this.show == true ? 0 : 1; } }, methods: { statusChange(index) { this.show = index == 0 ? true : false; }, modeChange(index) { this.mode = ['selector', 'multiSelector', 'time', 'region'][index]; if (this.mode == 'selector') { this.range = ['一', '片', '冰', '心', '在', '玉', '壶']; this.defaultSelector = [0]; } if (this.mode == 'multiSelector') { this.range = [['亚洲', '欧洲'], ['中国', '日本'], ['北京', '上海', '广州']]; this.defaultSelector = [0, 0, 0]; } this.show = true; }, defaultTimeChange(index) { this.defaultTime = index == 0 ? '2019-12-11 20:15:35' : '2020-02-05 13:09:42'; this.mode = 'time'; this.show = true; }, defaultRegionChange(index) { this.defaultRegion = index == 0 ? ['广东省', '深圳市', '宝安区'] : ['海南省', '三亚市', '海棠区']; this.mode = 'region'; this.show = true; }, minSecChange(index) { if (index == 0) { this.params.hour = true; this.params.minute = true; this.params.second = true; } if (index == 1) { this.params.hour = false; this.params.minute = false; this.params.second = false; } this.mode = 'time'; this.show = true; }, confirm(e) { // console.log(e); this.input = ''; if (this.mode == 'time') { if (this.params.year) this.input += e.year; if (this.params.month) this.input += '-' + e.month; if (this.params.day) this.input += '-' + e.day; if (this.params.hour) this.input += ' ' + e.hour; if (this.params.minute) this.input += ':' + e.minute; if (this.params.second) this.input += ':' + e.second; } else if (this.mode == 'region') { this.input = e.province.label + '-' + e.city.label + '-' + e.area.label; } else if (this.mode == 'selector') { this.input = this.range[e[0]]; } else if (this.mode == 'multiSelector') { this.input = this.range[0][e[0]] + '-' + this.range[1][e[1]] + '-' + this.range[2][e[2]]; } }, columnchange(e) { let column = e.column, index = e.index; this.defaultSelector[column] = index; switch (column) { case 0: switch (index) { case 0: this.range[1] = ['中国', '日本'] this.range[2] = ['北京', '上海', '广州'] break case 1: this.range[1] = ['英国', '法国'] this.range[2] = ['伦敦', '曼彻斯特'] break } this.defaultSelector.splice(1, 1, 0) this.defaultSelector.splice(2, 1, 0) break case 1: //拖动第2列 switch (this.defaultSelector[0]) { //判断第一列是什么 case 0: switch (this.defaultSelector[1]) { case 0: this.range[2] = ['北京', '上海', '广州'] break case 1: this.range[2] = ['东京','北海道'] break } break case 1: switch (this.defaultSelector[1]) { case 0: this.range[2] = ['伦敦', '曼彻斯特'] break case 1: this.range[2] = ['巴黎', '马赛'] break } break } this.defaultSelector.splice(2, 1, 0) break } } } }; </script> <style lang="scss" scoped> .input { border: 1px solid $u-light-color; border-radius: 4px; margin-bottom: 20px; height: 30px; font-size: 26rpx; flex: 1; } .input-wrap { display: flex; } </style>