<template>
	<view class="u-page">
		<u-navbar
			title="datetimePicker 时间日期选择器"
			@leftClick="navigateBack"
			safeAreaInsetTop
			fixed
			placeholder
		></u-navbar>
		<u-cell-group>
			<u-cell
				@click="showDatetimePicker(index)"
				:title="item.title"
				v-for="(item, index) in list"
				:key="index"
				isLink
			>
				<image
					slot="icon"
					class="u-cell-icon"
					:src="item.iconUrl"
					mode="widthFix"
				></image>
			</u-cell>
		</u-cell-group>
		<u-datetime-picker
			:show="show1"
			v-model="value1"
			mode="datetime"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show2"
			v-model="value2"
			mode="date"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show3"
			v-model="value3"
			mode="year-month"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show4"
			v-model="value4"
			mode="time"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show5"
			v-model="value5"
			:filter="filter"
			mode="date"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show6"
			v-model="value6"
			mode="date"
			:formatter="formatter"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
		<u-datetime-picker
			:show="show7"
			v-model="value7"
			mode="datetime"
			:minDate="1587524800000"
			:maxDate="1786778555000"
			closeOnClickOverlay
			@confirm="confirm"
			@cancel="cancel"
			@change="change"
			@close="close"
		></u-datetime-picker>
	</view>
</template>
<script>
	export default {
		data() {
			const d = new Date()
			const year = d.getFullYear()
			let month = uni.$u.padZero(d.getMonth() + 1)
			const date = d.getDate()
			return {
				current: 0,
				value1: Number(new Date()),
				value2: Number(new Date()),
				value3: Number(new Date()),
				value4: '05:28',
				value5: Number(new Date()),
				value6: Number(new Date()),
				value7: Number(new Date()),
				show1: false,
				show2: false,
				show3: false,
				show4: false,
				show5: false,
				show6: false,
				show7: false,
				list: [{
						title: '完整日期时间',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/6.png'
					},
					{
						title: '年月日',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/4.png'
					},
					{
						title: '年月',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/3.png'
					},
					{
						title: '时间',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/5.png'
					}, {
						title: '过滤器(保留偶数年)',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/2.png'
					}, {
						title: '格式化',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/1.png'
					}, {
						title: '限制最大最小值',
						iconUrl: 'https://cdn.uviewui.com/uview/demo/datetime-picker/7.png'
					}
				]
			}
		},
		methods: {
			close() {
				this[`show${this.current}`] = false
			},
			cancel() {
				this[`show${this.current}`] = false
			},
			confirm(e) {
				this[`show${this.current}`] = false
				this.result(e.value, e.mode)
			},
			change(e) {
				// console.log('change', e)
			},
			navigateBack() {
				uni.navigateBack()
			},
			formatter(mode, value) {
				if (mode === 'year') {
					return `${value}年`;
				}
				if (mode === 'month') {
					return `${value}月`;
				}
				return value;
			},
			filter(mode, options) {
				if (mode === 'year') {
					return options.filter((option) => option % 2 === 0);
				}

				return options;
			},
			showDatetimePicker(index) {
				this.current = index + 1
				this[`show${index + 1}`] = true
			},
			result(time, mode) {
				const timeFormat = uni.$u.timeFormat,
					toast = uni.$u.toast
				switch (mode) {
					case 'datetime':
						return toast(timeFormat(time, 'yyyy-mm-dd hh:MM'))
					case 'date':
						return toast(timeFormat(time, 'yyyy-mm-dd'))
					case 'year-month':
						return toast(timeFormat(time, 'yyyy-mm'))
					case 'time':
						return toast(time)
					default:
						return ''
				}
			},
			filter(type, options) {
				if (type === 'year') {
					return options.filter((option) => option % 2 === 0)
				}

				return options;
			},
			formatter(type, value) {
				if (type === 'year') {
					return `${value}年`
				}
				if (type === 'month') {
					return `${value}月`
				}
				if (type === 'day') {
					return `${value}日`
				}
				return value
			},
		},
	}
</script>

<style lang="scss">
	.u-page {
		padding: 0;
	}
</style>