Files
FirstUI-vue/pages/component/form/calendar/calendar.vue
2024-03-11 11:01:03 +08:00

169 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!--本文件由FirstUI授权予新疆天衡创新研究院有限公司会员ID20 4 9营业执照号 9 1 65 0 1 04 MA7 9 5A 07 X5专用请尊重知识产权勿私下传播违者追究法律责任-->
<view class="fui-wrap">
<view class="fui-page__hd">
<view class="fui-page__title fui-align__center" @tap="vip">Calendar <image
src="/static/images/index/light/icon_member_3x.png"></image>
</view>
<view class="fui-page__desc">Calendar 日历用于选择日期区间支持单选多选区间选择</view>
</view>
<view class="fui-page__bd">
<view class="fui-section__title">单个日期选择/按年加载,滑动切换月份</view>
<fui-calendar @change="change"></fui-calendar>
<view class="fui-section__title">多个日期选择/显示农历</view>
<fui-calendar type="2" :isMultiple="false" showLunar @change="change1"></fui-calendar>
<view class="fui-section__title">设置自定义描述/角标</view>
<fui-calendar badgeColor="#09BE4F" :isMultiple="false" @change="change" @dateChange="dateChange"
ref="calendarRef"></fui-calendar>
<view class="fui-section__title">设置默认值/范围/仅展示不可选择</view>
<fui-calendar type="2" :isMultiple="false" language="en" :value="value" disabled minDate="2021-01-01"
maxDate="2023-12-31">
</fui-calendar>
<view class="fui-section__title">区间选择/底部弹出选择</view>
<view class="fui-flex__center">
<fui-button type="gray" btn-size="medium" text="日期区间选择" bold :margin="['48rpx','0','0']"
@click="btnSelect"></fui-button>
</view>
<view class="fui-result">您的选择为{{result}}</view>
<fui-bottom-popup :show="show">
<view class="fui-scroll__wrap">
<view class="fui-calendar-title">请选择日期</view>
<fui-calendar type="3" :isMultiple="false" showLunar showBtn @change="change2"></fui-calendar>
<view class="fui-icon__close" @tap.stop="closePopup">
<fui-icon name="close" :size="48"></fui-icon>
</view>
</view>
</fui-bottom-popup>
</view>
</view>
</template>
<script>
export default {
data() {
return {
//默认值,多选
value: ['2021-01-06', '2021-01-16', '2021-01-26', '2021-02-08', '2022-01-08', '2022-01-10', '2022-01-20'],
//区间选择默认值设置
// value2:['2021-12-06', '2021-12-31'],
show: false,
result: '',
descrDate: ''
}
},
onLoad() {
uni.showLoading({
title: '请稍候...'
})
setTimeout(() => {
uni.hideLoading()
}, 500)
},
onReady() {
if (!this.$refs.calendarRef) return;
//设置自定义描述数据
this.$refs.calendarRef.setDescr(this.getDescr)
//设置角标返回数组中数据判定为true则显示角标为false则不显示角标
this.$refs.calendarRef.setBadge(this.getDescr)
},
methods: {
vip() {
this.fui.href("/pages/my/qa/qa?index=2&title=VIP专属内容")
},
change(e) {
console.log(e)
this.fui.toast(e.value)
},
change1(e) {
console.log(e)
this.fui.toast(e.value.join(','))
},
btnSelect() {
this.show = true
},
closePopup() {
this.show = false
},
change2(e) {
this.result = JSON.stringify(e)
this.closePopup()
},
//返回Promise的获取描述数据的函数
getDescr(year, month, days) {
//year, month, days 为 组件返回数据
console.log(year, month, days)
this.descrDate = `${year}-${month}`
return new Promise((resolve, reject) => {
//模拟获取到数据且处理后返回
setTimeout(() => {
//返回数据需要处理成和 days格式一致,没有描述则使用空字符串(描述文本不可过长)
if (true) {
//成功后处理描述数据数据顺序需要与days中日期保持一致
const descrArr = []
days.forEach((item, index) => {
//此处仅为模拟判断,具体逻辑需自行结合数据判断
let descr = ''
if (month % 2 === 0) {
descr = (index + 1) % 2 === 0 ? '有号' : ''
} else {
descr = index % 2 === 0 ? '有号' : ''
}
descrArr.push(descr)
})
resolve(descrArr)
} else {
//失败
reject(false)
}
}, 200)
})
},
dateChange(e) {
console.log(e)
//设置自定义描述数据。页面过于复杂时可能还未获取到组件实例可在onReady中初始执行一次
const date = `${e.year}-${e.month}`
if (this.descrDate === date) return;
this.$refs.calendarRef && this.$refs.calendarRef.setDescr(this.getDescr)
}
}
}
</script>
<style>
.fui-wrap {
padding-bottom: 64rpx;
}
.fui-section__title {
margin-left: 32rpx;
box-sizing: border-box;
}
.fui-result {
width: 100%;
padding: 64rpx 32rpx 32rpx;
box-sizing: border-box;
font-size: 28rpx;
font-weight: normal;
word-break: break-all;
}
.fui-scroll__wrap {
padding-top: 30rpx;
position: relative;
}
.fui-calendar-title {
font-size: 30rpx;
font-weight: bold;
text-align: center;
padding-bottom: 24rpx;
}
.fui-icon__close {
position: absolute;
top: 24rpx;
right: 24rpx;
}
</style>