liveh5-nuxt/app/components/x-van-date/index.vue
xingyy 2e08e6efcb feat(collect-code): 新增收款二维码功能
- 添加新的 API接口和相关组件
- 实现用户认证和艺术品列表展示- 新增个人资料填写页面- 优化首页和登录页面样式
2025-02-05 17:00:22 +08:00

109 lines
2.0 KiB
Vue

<script setup>
import { ref, computed } from 'vue'
import dayjs from 'dayjs'
const props = defineProps({
modelValue: {
type: [Date, String, Number],
default: () => new Date() // 默认当前日期
},
label: {
type: String,
default: '日期'
},
required: {
type: Boolean,
default: false
},
placeholder: {
type: String,
default: '请选择日期'
},
disabled: {
type: Boolean,
default: false
},
minDate: {
type: Date,
default: () => new Date(1900, 0, 1)
},
maxDate: {
type: Date,
default: () => new Date(2100, 11, 31)
},
format: {
type: String,
default: 'YYYY-MM-DD'
}
})
const emit = defineEmits(['update:modelValue', 'change'])
const show = ref(false)
// 显示文本
const displayText = computed(() => {
return dayjs(props.modelValue).format(props.format)
})
// 默认值
const defaultValue = computed(() => {
const date = props.modelValue || new Date()
return [
date.getFullYear(),
date.getMonth() + 1,
date.getDate()
]
})
// 确认选择
const onConfirm = ({ selectedValues }) => {
show.value = false
const date = new Date(selectedValues[0], selectedValues[1] - 1, selectedValues[2])
emit('update:modelValue', date)
emit('change', date)
}
// 取消选择
const onCancel = () => {
show.value = false
}
// 重置为当前日期
const reset = () => {
emit('update:modelValue', new Date())
}
defineExpose({
reset
})
</script>
<template>
<div>
<van-field
:model-value="displayText"
@click="show = true"
readonly
:disabled="disabled"
:required="required"
:placeholder="placeholder"
:label="label"
class="mb-10px"
is-link
/>
<van-popup
v-model:show="show"
position="bottom"
>
<van-date-picker
:min-date="minDate"
:max-date="maxDate"
:model-value="defaultValue"
@confirm="onConfirm"
@cancel="onCancel"
title="选择日期"
/>
</van-popup>
</div>
</template>