123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <template>
- <view class="calendar-content" v-if="showCalendar">
- <text class="example-info">日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等。</text>
- <uni-section title="插入模式" type="line"></uni-section>
- <view>
- <!-- 插入模式 -->
- <uni-calendar class="uni-calendar--hook" :selected="info.selected" :showMonth="false" @change="change" @monthSwitch="monthSwitch" />
- </view>
- <uni-section title="弹出模式" type="line"></uni-section>
- <view class="example-body">
- <button class="calendar-button" type="button" @click="open">打开日历</button>
- </view>
- <uni-calendar ref="calendar" class="uni-calendar--hook" :clear-date="true" :date="info.date" :insert="info.insert" :lunar="info.lunar" :startDate="info.startDate" :endDate="info.endDate" :range="info.range" @confirm="confirm" @close="close" />
- </view>
- </template>
- <script>
- /**
- * 获取任意时间
- */
- function getDate(date, AddDayCount = 0) {
- if (!date) {
- date = new Date()
- }
- if (typeof date !== 'object') {
- date = date.replace(/-/g, '/')
- }
- const dd = new Date(date)
- dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
- const y = dd.getFullYear()
- const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
- const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
- return {
- fullDate: y + '-' + m + '-' + d,
- year: y,
- month: m,
- date: d,
- day: dd.getDay()
- }
- }
- export default {
- components: {},
- data() {
- return {
- showCalendar: false,
- info: {
- lunar: true,
- range: true,
- insert: false,
- selected: []
- }
- }
- },
- onReady() {
- this.$nextTick(() => {
- this.showCalendar = true
- })
- // TODO 模拟请求异步同步数据
- setTimeout(() => {
- this.info.date = getDate(new Date(), -30).fullDate
- this.info.startDate = getDate(new Date(), -60).fullDate
- this.info.endDate = getDate(new Date(), 30).fullDate
- this.info.selected = [{
- date: getDate(new Date(), -3).fullDate,
- info: '打卡'
- },
- {
- date: getDate(new Date(), -2).fullDate,
- info: '签到',
- data: {
- custom: '自定义信息',
- name: '自定义消息头'
- }
- },
- {
- date: getDate(new Date(), -1).fullDate,
- info: '已打卡'
- }
- ]
- }, 2000)
- },
- methods: {
- open() {
- this.$refs.calendar.open()
- },
- close() {
- console.log('弹窗关闭');
- },
- change(e) {
- console.log('change 返回:', e)
- // 模拟动态打卡
- if (this.info.selected.length > 5) return
- this.info.selected.push({
- date: e.fulldate,
- info: '打卡'
- })
- },
- confirm(e) {
- console.log('confirm 返回:', e)
- },
- monthSwitch(e) {
- console.log('monthSwitchs 返回:', e)
- }
- }
- }
- </script>
- <style>
- @charset "UTF-8";
- /* 头条小程序组件内不能引入字体 */
- /* #ifdef MP-TOUTIAO */
- @font-face {
- font-family: uniicons;
- font-weight: normal;
- font-style: normal;
- src: url("~@/static/uni.ttf") format("truetype");
- }
- /* #endif */
- /* #ifndef APP-NVUE */
- page {
- display: flex;
- flex-direction: column;
- box-sizing: border-box;
- background-color: #efeff4;
- min-height: 100%;
- height: auto;
- }
- view {
- font-size: 14px;
- line-height: inherit;
- }
- .example {
- padding: 0 15px 15px;
- }
- .example-info {
- padding: 15px;
- color: #3b4144;
- background: #ffffff;
- }
- .example-body {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- flex-direction: row;
- flex-wrap: wrap;
- justify-content: center;
- padding: 0;
- font-size: 14px;
- background-color: #ffffff;
- }
- /* #endif */
- .example {
- padding: 0 15px;
- }
- .example-info {
- /* #ifndef APP-NVUE */
- display: block;
- /* #endif */
- padding: 15px;
- color: #3b4144;
- background-color: #ffffff;
- font-size: 14px;
- line-height: 20px;
- }
- .example-info-text {
- font-size: 14px;
- line-height: 20px;
- color: #3b4144;
- }
- .example-body {
- flex-direction: column;
- padding: 15px;
- background-color: #ffffff;
- }
- .word-btn-white {
- font-size: 18px;
- color: #FFFFFF;
- }
- .word-btn {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- flex-direction: row;
- align-items: center;
- justify-content: center;
- border-radius: 6px;
- height: 48px;
- margin: 15px;
- background-color: #007AFF;
- }
- .word-btn--hover {
- background-color: #4ca2ff;
- }
- .example-body {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- flex-direction: row;
- }
- .calendar-button {
- flex: 1;
- font-weight: bold;
- font-size: 32rpx;
- }
- </style>
|