96 lines
1.9 KiB
Vue
96 lines
1.9 KiB
Vue
<template>
|
|
<view>
|
|
<u-form-item
|
|
:label="label"
|
|
:prop="prop"
|
|
:required="required"
|
|
:label-position="labelPosition"
|
|
@click="fnShowPicker"
|
|
>
|
|
<view class="select_content">
|
|
<u-input
|
|
:value="value || '请选择'"
|
|
border="none"
|
|
input-align="right"
|
|
readonly
|
|
/>
|
|
<u-icon name="arrow-right"></u-icon>
|
|
</view>
|
|
</u-form-item>
|
|
<u-line/>
|
|
<u-datetime-picker
|
|
v-model="currentValue"
|
|
:show="visible"
|
|
:max-date="maxDate"
|
|
:min-date="minDate"
|
|
:mode="mode"
|
|
@cancel="visible = false"
|
|
@confirm="fnConfirm"
|
|
/>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import dayjs from "dayjs";
|
|
|
|
export default {
|
|
props: {
|
|
value: {
|
|
type: String,
|
|
required: true,
|
|
default: "",
|
|
},
|
|
label: {
|
|
type: String,
|
|
default: "时间",
|
|
},
|
|
prop: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
mode: {
|
|
type: String,
|
|
default: "datetime",
|
|
},
|
|
labelPosition: {
|
|
type: String,
|
|
default: "left",
|
|
},
|
|
required: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
maxDate: {
|
|
type: Number,
|
|
default: dayjs().add(10, "year").valueOf(),
|
|
},
|
|
minDate: {
|
|
type: Number,
|
|
default: dayjs().subtract(10, "year").valueOf(),
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
visible: false,
|
|
currentValue: this.value ? dayjs(this.value).valueOf() : new Date().getTime(),
|
|
}
|
|
},
|
|
methods: {
|
|
fnShowPicker() {
|
|
this.visible = true
|
|
},
|
|
fnConfirm({mode, value}) {
|
|
if (mode === "datetime")
|
|
this.$emit('input', dayjs(value).format("YYYY-MM-DD HH:mm"))
|
|
else if (mode === "date")
|
|
this.$emit('input', dayjs(value).format("YYYY-MM-DD"))
|
|
else if (mode === "year-month")
|
|
this.$emit('input', dayjs(value).format("YYYY-MM"))
|
|
this.visible = false;
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss"></style>
|