| | |
| | | } |
| | |
|
| | | }
|
| | | ,{
|
| | | "path" : "pages/staff/meetingCalendar",
|
| | | "style" : |
| | | { |
| | | "navigationBarTitleText": "ä¼è®®æ¥å", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | |
| | | }
|
| | | ,{
|
| | | "path" : "pages/staff/meetingDetail",
|
| | | "style" : |
| | | { |
| | | "navigationBarTitleText": "ä¼è®®è¯¦æ
", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | |
| | | }
|
| | | ],
|
| | | "subPackages": [{
|
| | | "root": "n_pages",
|
| | |
| | | <view class="h2">TASK CENTER</view> |
| | | <view class="task_num">99+</view> |
| | | </view> |
| | | <view class="img_wrap" @click="jump('/pages/staff/task/index')"> |
| | | <view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')"> |
| | | <image class="img" src="@/static/staff/ic_wodehuiyi.png"></image> |
| | | <view class="h1">æçä¼è®®æ¥å</view> |
| | | <view class="h2">MY MEETING CALENDAR</view> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <view class="tabs"> |
| | | <view class="tab" :class="{ active: activeTab === '0' }" @click="tabClick('0')"> |
| | | <text class="name">ä¼è®®æ¥å</text> |
| | | <view class="line"></view> |
| | | </view> |
| | | <view class="tab" :class="{ active: activeTab === '1' }" @click="tabClick('1')"> |
| | | <text class="name">é¢çº¦è®°å½</text> |
| | | <view class="line"></view> |
| | | </view> |
| | | </view> |
| | | <!-- --> |
| | | <template v-if="activeTab == '0'"> |
| | | <uni-calendar @change="changeCalendar" :selected="selected" /> |
| | | <!-- --> |
| | | <view class="card_list"> |
| | | <view class="card_title"> |
| | | <view class="name"> |
| | | <view class="icon"></view> |
| | | <view class="text">仿¥ä¼è®®</view> |
| | | </view> |
| | | <view class="meeting"> |
| | | <view class="text mr24">å
¨é¨ä¼è®®å®¤</view> |
| | | <u-icon name="arrow-down" size="12" color="#999999" /> |
| | | </view> |
| | | </view> |
| | | <view class="list"> |
| | | <view class="item"> |
| | | <view class="head"> |
| | | <view class="name">aaaaaéå</view> |
| | | <view class="status">å³å°å¼å§</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">ä¼è®®æ¶é´ï¼</view> |
| | | <view class="value">12:00-12</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">ä¼è®®å®¤ï¼</view> |
| | | <view class="value">202ä¼è®®å®¤</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">é¢çº¦äººï¼</view> |
| | | <view class="value">æ¨ææ</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">夿³¨ï¼</view> |
| | | <view class="value">--</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <!-- --> |
| | | <template v-if="activeTab === '1'"> |
| | | <view class="card_list"> |
| | | <view class="list"> |
| | | <view class="item" @click="handleDetail()"> |
| | | <view class="head"> |
| | | <view class="name">aaaaaéå</view> |
| | | <view class="status">å³å°å¼å§</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">ä¼è®®æ¶é´ï¼</view> |
| | | <view class="value">12:00-12</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">ä¼è®®å®¤ï¼</view> |
| | | <view class="value">202ä¼è®®å®¤</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">é¢çº¦äººï¼</view> |
| | | <view class="value">æ¨ææ</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">夿³¨ï¼</view> |
| | | <view class="value">--</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | </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 { |
| | | data() { |
| | | return { |
| | | activeTab: '0', |
| | | 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: 'å·²æå¡' |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | methods: { |
| | | tabClick(val) { |
| | | this.activeTab = val; |
| | | }, |
| | | handleDetail(item) { |
| | | uni.navigateTo({ |
| | | // url: `/pages/staff/meetingDetail?id=${item.id}`, |
| | | url: `/pages/staff/meetingDetail`, |
| | | }) |
| | | }, |
| | | changeCalendar(e) { |
| | | console.log(e); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | page { |
| | | background-color: #f7f7f7; |
| | | } |
| | | .main_app { |
| | | padding: 0; |
| | | background-color: #f7f7f7; |
| | | ::v-deep .uni-calendar-item--checked { |
| | | background-color: #279baa; |
| | | border-radius: 8rpx; |
| | | } |
| | | ::v-deep .uni-calendar-item--isDay-text { |
| | | color: #279baa; |
| | | } |
| | | ::v-deep .uni-calendar-item--isDay { |
| | | background-color: #279baa; |
| | | color: #fff; |
| | | border-radius: 8rpx; |
| | | } |
| | | .tabs { |
| | | display: flex; |
| | | background-color: #fff; |
| | | .tab { |
| | | flex: 1; |
| | | height: 88rpx; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | position: relative; |
| | | .line { |
| | | width: 60rpx; |
| | | height: 4rpx; |
| | | background: #fff; |
| | | border-radius: 3rpx; |
| | | position: absolute; |
| | | bottom: 0; |
| | | left: 50%; |
| | | transform: translate(-50%, 0); |
| | | } |
| | | } |
| | | .active { |
| | | font-weight: 500; |
| | | font-size: 30rpx; |
| | | color: #222222; |
| | | .line { |
| | | background-color: #279baa; |
| | | } |
| | | } |
| | | } |
| | | // |
| | | .card_list { |
| | | padding: 30rpx; |
| | | .card_title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 22rpx; |
| | | .name { |
| | | display: flex; |
| | | align-items: center; |
| | | .icon { |
| | | width: 6rpx; |
| | | height: 32rpx; |
| | | background: #279baa; |
| | | border-radius: 4rpx; |
| | | margin-right: 16rpx; |
| | | } |
| | | .text { |
| | | font-weight: 600; |
| | | font-size: 32rpx; |
| | | color: #222222; |
| | | } |
| | | } |
| | | .meeting { |
| | | display: flex; |
| | | height: 52rpx; |
| | | line-height: 52rpx; |
| | | background: #ffffff; |
| | | border-radius: 26rpx; |
| | | border: 2rpx solid #eeeeee; |
| | | padding: 0 24rpx; |
| | | .text { |
| | | font-size: 24rpx; |
| | | color: #333333; |
| | | } |
| | | } |
| | | } |
| | | .list { |
| | | .item { |
| | | padding: 0rpx 30rpx 30rpx; |
| | | background: #ffffff; |
| | | border-radius: 8rpx; |
| | | .head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | padding: 22rpx 0; |
| | | margin-bottom: 22rpx; |
| | | .name { |
| | | font-weight: 600; |
| | | font-size: 32rpx; |
| | | color: #222222; |
| | | } |
| | | .status { |
| | | height: 38rpx; |
| | | line-height: 38rpx; |
| | | padding: 0 16rpx; |
| | | border-radius: 4rpx; |
| | | border: 1rpx solid #999999; |
| | | font-size: 22rpx; |
| | | color: #999999; |
| | | } |
| | | } |
| | | .line { |
| | | display: flex; |
| | | margin-bottom: 12rpx; |
| | | .label { |
| | | width: 140rpx; |
| | | color: #666666; |
| | | } |
| | | .value { |
| | | flex: 1; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <view class="head_app"> |
| | | <view class="title">讨论æºè½ä¼è®®å®¤ç³»ç»éå</view> |
| | | <view class="text">201ä¼è®®å®¤ï½2023å¹´5æ4æ¥ 10:00-12:00</view> |
| | | </view> |
| | | <!-- --> |
| | | <view class="empty"></view> |
| | | <view class="module_list"> |
| | | <view class="item"> |
| | | <view class="label">ä¼è®®å
容</view> |
| | | <view class="value"> |
| | | <!-- <text>主è¦è®¨è®ºæºè½ä¼è®®å®¤ç³»ç»éåï¼è¯·å¤§å®¶ä¸å®è¦ææ¶æ¥å¼ä¼ï¼æ¶é´å®è´µãæè°¢å¤§å®¶ï¼</text> --> |
| | | <u-textarea border="none" v-model="param.aaa" count :maxlength="300" placeholder="请è¾å
¥ä¼è®®å
容" placeholder-class="placeholder9" /> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">åä¼äººå</view> |
| | | <view class="value"> |
| | | <view class="personnel"> |
| | | <view class="per_item" v-for="i in 10"> |
| | | <image src="../../static/logo@2x.png" class="avatar" mode=""></image> |
| | | <view class="name">è¡å
«ä¸</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">æå¡é¡¹</view> |
| | | <view class="value">å¸å¡ | æå½±ä»ª | ç¬è®°æ¬çµè</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">夿³¨</view> |
| | | <view class="value">ä»å¤©äººå¤ï¼è¯·ææ¶åå </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">é¢çº¦äºº</view> |
| | | <view class="value">è¡æ¿é¨ 赵强 18832319899</view> |
| | | </view> |
| | | </view> |
| | | <view class="empty empty2"></view> |
| | | <view class="main_footer"> |
| | | <view class="btn" @click="handleSub('0')">æ¤å</view> |
| | | <view class="btn agree" @click="handleSub('1')">ä¿®æ¹</view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | param: {} |
| | | }; |
| | | }, |
| | | methods: { |
| | | handleSub() { |
| | | |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | page{ |
| | | background-color: #f7f7f7; |
| | | } |
| | | .main_app{ |
| | | padding: 0 ; |
| | | .head_app{ |
| | | padding: 30rpx; |
| | | background-color: #fff; |
| | | .title{ |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | | color: #222222; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | .text{ |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | } |
| | | } |
| | | } |
| | | .module_list { |
| | | background-color: #fff; |
| | | padding: 0 30rpx; |
| | | .item { |
| | | padding: 30rpx 0; |
| | | border-bottom: 1rpx solid #E5E5E5; |
| | | |
| | | .label { |
| | | font-size: 26rpx; |
| | | color: #666666; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .value { |
| | | font-size: 30rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | ::v-deep textarea{ |
| | | padding: 0; |
| | | background-color: #fff !important; |
| | | } |
| | | .personnel{ |
| | | display: flex; |
| | | width: 100%; |
| | | overflow-x: auto; |
| | | .per_item{ |
| | | flex-shrink: 0; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 24rpx; |
| | | .avatar{ |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | border-radius: 50%; |
| | | } |
| | | .name{ |
| | | font-size: 26rpx; |
| | | color: #777777; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .main_footer { |
| | | padding-bottom: 64rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | background-color: #fff; |
| | | .btn { |
| | | width: 336rpx; |
| | | height: 88rpx; |
| | | line-height: 88rpx; |
| | | background: #FFFFFF; |
| | | border-radius: 44rpx; |
| | | border: 1rpx solid #999999; |
| | | font-size: 32rpx; |
| | | text-align: center; |
| | | margin: 16rpx 0; |
| | | } |
| | | |
| | | .agree { |
| | | background: #279BAA; |
| | | color: #fff; |
| | | border: 1rpx solid #279BAA; |
| | | } |
| | | } |
| | | .empty{ |
| | | width: 750rpx; |
| | | height: 20rpx; |
| | | background-color: #f7f7f7; |
| | | margin: 0 -30rpx; |
| | | } |
| | | .empty2{ |
| | | height: 280rpx !important; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | ## 1.4.11ï¼2024-01-10ï¼ |
| | | - ä¿®å¤ åå°ä»å¤©æ¶ï¼æä»½æ¾ç¤ºä¸ä¸è´é®é¢ |
| | | ## 1.4.10ï¼2023-04-10ï¼ |
| | | - ä¿®å¤ æäºæ
åµ monthSwitch æªè§¦åçBug |
| | | ## 1.4.9ï¼2023-02-02ï¼ |
| | | - ä¿®å¤ æäºæ
åµåæ¢æä»½é误çBug |
| | | ## 1.4.8ï¼2023-01-30ï¼ |
| | | - ä¿®å¤ æäºæ
åµåæ¢æä»½é误çBug [详æ
](https://ask.dcloud.net.cn/question/161964) |
| | | ## 1.4.7ï¼2022-09-16ï¼ |
| | | - ä¼å æ¯æä½¿ç¨ uni-scss æ§å¶ä¸»é¢è² |
| | | ## 1.4.6ï¼2022-09-08ï¼ |
| | | - ä¿®å¤ è¡¨å¤´å¹´æåæ¢ï¼å¯¼è´æ¹åå½åæ¥æä¸ºéæ©æ1å·ï¼ä¸æªè§¦åchangeäºä»¶çBug |
| | | ## 1.4.5ï¼2022-02-25ï¼ |
| | | - ä¿®å¤ æ¡ä»¶ç¼è¯ nvue 䏿¯æç css æ ·å¼çBug |
| | | ## 1.4.4ï¼2022-02-25ï¼ |
| | | - ä¿®å¤ æ¡ä»¶ç¼è¯ nvue 䏿¯æç css æ ·å¼çBug |
| | | ## 1.4.3ï¼2021-09-22ï¼ |
| | | - ä¿®å¤ startDateã endDate 屿§å¤±æçBug |
| | | ## 1.4.2ï¼2021-08-24ï¼ |
| | | - æ°å¢ æ¯æå½é
å |
| | | ## 1.4.1ï¼2021-08-05ï¼ |
| | | - ä¿®å¤ å¼¹åºå±è¢« tabbar é®ççBug |
| | | ## 1.4.0ï¼2021-07-30ï¼ |
| | | - ç»ä»¶å
¼å®¹ vue3ï¼å¦ä½å建vue3项ç®ï¼è¯¦è§ [uni-app é¡¹ç®æ¯æ vue3 ä»ç»](https://ask.dcloud.net.cn/article/37834) |
| | | ## 1.3.16ï¼2021-05-12ï¼ |
| | | - æ°å¢ ç»ä»¶ç¤ºä¾å°å |
| | | ## 1.3.15ï¼2021-02-04ï¼ |
| | | - è°æ´ä¸ºuni_modulesç®å½è§è |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * @1900-2100åºé´å
çå
¬åãååäºè½¬ |
| | | * @charset UTF-8 |
| | | * @github https://github.com/jjonline/calendar.js |
| | | * @Author Jeaæ¨(JJonline@JJonline.Cn) |
| | | * @Time 2014-7-21 |
| | | * @Time 2016-8-13 Fixed 2033hexãAttribution Annals |
| | | * @Time 2016-9-25 Fixed lunar LeapMonth Param Bug |
| | | * @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year |
| | | * @Version 1.0.3 |
| | | * @å
¬å转ååï¼calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] |
| | | * @åå转å
¬åï¼calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] |
| | | */ |
| | | /* eslint-disable */ |
| | | var calendar = { |
| | | |
| | | /** |
| | | * åå1900-2100çæ¶¦å¤§å°ä¿¡æ¯è¡¨ |
| | | * @Array Of Property |
| | | * @return Hex |
| | | */ |
| | | lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 |
| | | 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 |
| | | 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 |
| | | 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 |
| | | 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 |
| | | 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 |
| | | 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 |
| | | 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 |
| | | 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 |
| | | 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 |
| | | 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 |
| | | 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 |
| | | 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 |
| | | 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 |
| | | 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 |
| | | /** Add By JJonline@JJonline.Cn**/ |
| | | 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 |
| | | 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 |
| | | 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 |
| | | 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 |
| | | 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 |
| | | 0x0d520], // 2100 |
| | | |
| | | /** |
| | | * å
¬åæ¯ä¸ªæä»½çå¤©æ°æ®é表 |
| | | * @Array Of Property |
| | | * @return Number |
| | | */ |
| | | solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], |
| | | |
| | | /** |
| | | * 天干尿¯ä¹å¤©å¹²éæ¥è¡¨ |
| | | * @Array Of Property trans["ç²","ä¹","ä¸","ä¸","æ","å·±","åº","è¾","壬","ç¸"] |
| | | * @return Cn string |
| | | */ |
| | | Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], |
| | | |
| | | /** |
| | | * 天干尿¯ä¹å°æ¯éæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @trans["å","ä¸","å¯
","å¯","è¾°","å·³","å","æª","ç³","é
","æ","亥"] |
| | | * @return Cn string |
| | | */ |
| | | Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], |
| | | |
| | | /** |
| | | * 天干尿¯ä¹å°æ¯éæ¥è¡¨<=>çè |
| | | * @Array Of Property |
| | | * @trans["é¼ ","ç","è","å
","é¾","è","马","ç¾","ç´","鸡","ç","çª"] |
| | | * @return Cn string |
| | | */ |
| | | Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], |
| | | |
| | | /** |
| | | * 24èæ°éæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @trans["å°å¯","大å¯","ç«æ¥","鍿°´","æè°","æ¥å","æ¸
æ","è°·é¨","ç«å¤","å°æ»¡","èç§","å¤è³","å°æ","大æ","ç«ç§","夿","ç½é²","ç§å","å¯é²","éé","ç«å¬","å°éª","大éª","å¬è³"] |
| | | * @return Cn string |
| | | */ |
| | | solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], |
| | | |
| | | /** |
| | | * 1900-2100åå¹´ç24èæ°æ¥æéæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @return 0x string For splice |
| | | */ |
| | | sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', |
| | | '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
| | | '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', |
| | | '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', |
| | | 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', |
| | | '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', |
| | | '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', |
| | | '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', |
| | | '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
| | | '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', |
| | | '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', |
| | | '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
| | | '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', |
| | | '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', |
| | | '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', |
| | | '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', |
| | | '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', |
| | | '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
| | | '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
| | | '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', |
| | | '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
| | | '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
| | | '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', |
| | | '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', |
| | | '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', |
| | | '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', |
| | | '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', |
| | | '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
| | | '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
| | | '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', |
| | | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
| | | '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
| | | '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
| | | '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', |
| | | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', |
| | | '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', |
| | | '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
| | | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', |
| | | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
| | | '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
| | | '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
| | | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', |
| | | '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
| | | '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
| | | '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', |
| | | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', |
| | | '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', |
| | | '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
| | | '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', |
| | | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', |
| | | '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
| | | '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', |
| | | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', |
| | | '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', |
| | | '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
| | | '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', |
| | | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', |
| | | '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', |
| | | '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
| | | '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', |
| | | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', |
| | | '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], |
| | | |
| | | /** |
| | | * æ°åè½¬ä¸æéæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @trans ['æ¥','ä¸','äº','ä¸','å','äº','å
','ä¸','å
«','ä¹','å'] |
| | | * @return Cn string |
| | | */ |
| | | nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], |
| | | |
| | | /** |
| | | * æ¥æè½¬ååç§°å¼éæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @trans ['å','å','廿','å
'] |
| | | * @return Cn string |
| | | */ |
| | | nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], |
| | | |
| | | /** |
| | | * æä»½è½¬ååç§°å¼éæ¥è¡¨ |
| | | * @Array Of Property |
| | | * @trans ['æ£','ä¸','äº','ä¸','å','äº','å
','ä¸','å
«','ä¹','å','å¬','è
'] |
| | | * @return Cn string |
| | | */ |
| | | nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], |
| | | |
| | | /** |
| | | * è¿åååy年䏿´å¹´çæ»å¤©æ° |
| | | * @param lunar Year |
| | | * @return Number |
| | | * @eg:var count = calendar.lYearDays(1987) ;//count=387 |
| | | */ |
| | | lYearDays: function (y) { |
| | | var i; var sum = 348 |
| | | for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } |
| | | return (sum + this.leapDays(y)) |
| | | }, |
| | | |
| | | /** |
| | | * è¿åååyå¹´é°ææ¯åªä¸ªæï¼è¥y年没æé°æ åè¿å0 |
| | | * @param lunar Year |
| | | * @return Number (0-12) |
| | | * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 |
| | | */ |
| | | leapMonth: function (y) { // é°åç¼ç \u95f0 |
| | | return (this.lunarInfo[y - 1900] & 0xf) |
| | | }, |
| | | |
| | | /** |
| | | * è¿åååyå¹´é°æçå¤©æ° è¥è¯¥å¹´æ²¡æé°æåè¿å0 |
| | | * @param lunar Year |
| | | * @return Number (0ã29ã30) |
| | | * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 |
| | | */ |
| | | leapDays: function (y) { |
| | | if (this.leapMonth(y)) { |
| | | return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) |
| | | } |
| | | return (0) |
| | | }, |
| | | |
| | | /** |
| | | * è¿åååyå¹´mæï¼éé°æï¼çæ»å¤©æ°ï¼è®¡ç®mä¸ºé°ææ¶ç天æ°è¯·ä½¿ç¨leapDaysæ¹æ³ |
| | | * @param lunar Year |
| | | * @return Number (-1ã29ã30) |
| | | * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 |
| | | */ |
| | | monthDays: function (y, m) { |
| | | if (m > 12 || m < 1) { return -1 }// æä»½åæ°ä»1è³12ï¼åæ°é误è¿å-1 |
| | | return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) |
| | | }, |
| | | |
| | | /** |
| | | * è¿åå
¬å(!)yå¹´mæçå¤©æ° |
| | | * @param solar Year |
| | | * @return Number (-1ã28ã29ã30ã31) |
| | | * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 |
| | | */ |
| | | solarDays: function (y, m) { |
| | | if (m > 12 || m < 1) { return -1 } // è¥åæ°é误 è¿å-1 |
| | | var ms = m - 1 |
| | | if (ms == 1) { // 2æä»½çé°å¹³è§å¾æµç®å确认è¿å28æ29 |
| | | return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) |
| | | } else { |
| | | return (this.solarMonth[ms]) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * åå年份转æ¢ä¸ºå¹²æ¯çºªå¹´ |
| | | * @param lYear ååå¹´çå¹´ä»½æ° |
| | | * @return Cn string |
| | | */ |
| | | toGanZhiYear: function (lYear) { |
| | | var ganKey = (lYear - 3) % 10 |
| | | var zhiKey = (lYear - 3) % 12 |
| | | if (ganKey == 0) ganKey = 10// 妿使°ä¸º0å为æåä¸ä¸ªå¤©å¹² |
| | | if (zhiKey == 0) zhiKey = 12// 妿使°ä¸º0å为æåä¸ä¸ªå°æ¯ |
| | | return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] |
| | | }, |
| | | |
| | | /** |
| | | * å
¬åæãæ¥å¤ææå±æåº§ |
| | | * @param cMonth [description] |
| | | * @param cDay [description] |
| | | * @return Cn string |
| | | */ |
| | | toAstro: function (cMonth, cDay) { |
| | | var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' |
| | | var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] |
| | | return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥offsetåç§»éè¿åå¹²æ¯ |
| | | * @param offset ç¸å¯¹ç²åçåç§»é |
| | | * @return Cn string |
| | | */ |
| | | toGanZhi: function (offset) { |
| | | return this.Gan[offset % 10] + this.Zhi[offset % 12] |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥å
¬å(!)yå¹´è·å¾è¯¥å¹´ç¬¬nä¸ªèæ°çå
¬åæ¥æ |
| | | * @param yå
¬åå¹´(1900-2100)ï¼näºååèæ°ä¸ç第å ä¸ªèæ°(1~24)ï¼ä»n=1(å°å¯)ç®èµ· |
| | | * @return day Number |
| | | * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;æå³1987å¹´2æ4æ¥ç«æ¥ |
| | | */ |
| | | getTerm: function (y, n) { |
| | | if (y < 1900 || y > 2100) { return -1 } |
| | | if (n < 1 || n > 24) { return -1 } |
| | | var _table = this.sTermInfo[y - 1900] |
| | | var _info = [ |
| | | parseInt('0x' + _table.substr(0, 5)).toString(), |
| | | parseInt('0x' + _table.substr(5, 5)).toString(), |
| | | parseInt('0x' + _table.substr(10, 5)).toString(), |
| | | parseInt('0x' + _table.substr(15, 5)).toString(), |
| | | parseInt('0x' + _table.substr(20, 5)).toString(), |
| | | parseInt('0x' + _table.substr(25, 5)).toString() |
| | | ] |
| | | var _calday = [ |
| | | _info[0].substr(0, 1), |
| | | _info[0].substr(1, 2), |
| | | _info[0].substr(3, 1), |
| | | _info[0].substr(4, 2), |
| | | |
| | | _info[1].substr(0, 1), |
| | | _info[1].substr(1, 2), |
| | | _info[1].substr(3, 1), |
| | | _info[1].substr(4, 2), |
| | | |
| | | _info[2].substr(0, 1), |
| | | _info[2].substr(1, 2), |
| | | _info[2].substr(3, 1), |
| | | _info[2].substr(4, 2), |
| | | |
| | | _info[3].substr(0, 1), |
| | | _info[3].substr(1, 2), |
| | | _info[3].substr(3, 1), |
| | | _info[3].substr(4, 2), |
| | | |
| | | _info[4].substr(0, 1), |
| | | _info[4].substr(1, 2), |
| | | _info[4].substr(3, 1), |
| | | _info[4].substr(4, 2), |
| | | |
| | | _info[5].substr(0, 1), |
| | | _info[5].substr(1, 2), |
| | | _info[5].substr(3, 1), |
| | | _info[5].substr(4, 2) |
| | | ] |
| | | return parseInt(_calday[n - 1]) |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥ååæ°åæä»½è¿åæ±è¯éä¿è¡¨ç¤ºæ³ |
| | | * @param lunar month |
| | | * @return Cn string |
| | | * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='è
æ' |
| | | */ |
| | | toChinaMonth: function (m) { // æ => \u6708 |
| | | if (m > 12 || m < 1) { return -1 } // è¥åæ°é误 è¿å-1 |
| | | var s = this.nStr3[m - 1] |
| | | s += '\u6708'// å 䏿å |
| | | return s |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥ååæ¥ææ°åè¿åæ±åè¡¨ç¤ºæ³ |
| | | * @param lunar day |
| | | * @return Cn string |
| | | * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿ä¸' |
| | | */ |
| | | toChinaDay: function (d) { // æ¥ => \u65e5 |
| | | var s |
| | | switch (d) { |
| | | case 10: |
| | | s = '\u521d\u5341'; break |
| | | case 20: |
| | | s = '\u4e8c\u5341'; break |
| | | break |
| | | case 30: |
| | | s = '\u4e09\u5341'; break |
| | | break |
| | | default : |
| | | s = this.nStr2[Math.floor(d / 10)] |
| | | s += this.nStr1[d % 10] |
| | | } |
| | | return (s) |
| | | }, |
| | | |
| | | /** |
| | | * 年份转çè[!ä»
è½å¤§è´è½¬æ¢] => 精确ååçèåç线æ¯âç«æ¥â |
| | | * @param y year |
| | | * @return Cn string |
| | | * @eg:var animal = calendar.getAnimal(1987) ;//animal='å
' |
| | | */ |
| | | getAnimal: function (y) { |
| | | return this.Animals[(y - 4) % 12] |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥é³åå¹´ææ¥è·å¾è¯¦ç»çå
¬åãååobjectä¿¡æ¯ <=>JSON |
| | | * @param y solar year |
| | | * @param m solar month |
| | | * @param d solar day |
| | | * @return JSON object |
| | | * @eg:console.log(calendar.solar2lunar(1987,11,01)); |
| | | */ |
| | | solar2lunar: function (y, m, d) { // åæ°åºé´1900.1.31~2100.12.31 |
| | | // 年份éå®ãä¸é |
| | | if (y < 1900 || y > 2100) { |
| | | return -1// undefined转æ¢ä¸ºæ°åå为NaN |
| | | } |
| | | // å
¬åä¼ åæä¸é |
| | | if (y == 1900 && m == 1 && d < 31) { |
| | | return -1 |
| | | } |
| | | // æªä¼ å è·å¾å½å¤© |
| | | if (!y) { |
| | | var objDate = new Date() |
| | | } else { |
| | | var objDate = new Date(y, parseInt(m) - 1, d) |
| | | } |
| | | var i; var leap = 0; var temp = 0 |
| | | // ä¿®æ£ymdåæ° |
| | | var y = objDate.getFullYear() |
| | | var m = objDate.getMonth() + 1 |
| | | var d = objDate.getDate() |
| | | var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 |
| | | for (i = 1900; i < 2101 && offset > 0; i++) { |
| | | temp = this.lYearDays(i) |
| | | offset -= temp |
| | | } |
| | | if (offset < 0) { |
| | | offset += temp; i-- |
| | | } |
| | | |
| | | // æ¯å¦ä»å¤© |
| | | var isTodayObj = new Date() |
| | | var isToday = false |
| | | if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { |
| | | isToday = true |
| | | } |
| | | // ææå |
| | | var nWeek = objDate.getDay() |
| | | var cWeek = this.nStr1[nWeek] |
| | | // æ°å表示å¨å 顺åºå¤©æå¨ä¸å¼å§çæ¯ä¾ |
| | | if (nWeek == 0) { |
| | | nWeek = 7 |
| | | } |
| | | // ååå¹´ |
| | | var year = i |
| | | var leap = this.leapMonth(i) // é°åªä¸ªæ |
| | | var isLeap = false |
| | | |
| | | // æéªé°æ |
| | | for (i = 1; i < 13 && offset > 0; i++) { |
| | | // é°æ |
| | | if (leap > 0 && i == (leap + 1) && isLeap == false) { |
| | | --i |
| | | isLeap = true; temp = this.leapDays(year) // 计ç®ååé°æå¤©æ° |
| | | } else { |
| | | temp = this.monthDays(year, i)// 计ç®ååæ®éæå¤©æ° |
| | | } |
| | | // è§£é¤é°æ |
| | | if (isLeap == true && i == (leap + 1)) { isLeap = false } |
| | | offset -= temp |
| | | } |
| | | // é°æå¯¼è´æ°ç»ä¸æ éå åå |
| | | if (offset == 0 && leap > 0 && i == leap + 1) { |
| | | if (isLeap) { |
| | | isLeap = false |
| | | } else { |
| | | isLeap = true; --i |
| | | } |
| | | } |
| | | if (offset < 0) { |
| | | offset += temp; --i |
| | | } |
| | | // ååæ |
| | | var month = i |
| | | // å忥 |
| | | var day = offset + 1 |
| | | // 天干尿¯å¤ç |
| | | var sm = m - 1 |
| | | var gzY = this.toGanZhiYear(year) |
| | | |
| | | // 彿çä¸¤ä¸ªèæ° |
| | | // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` |
| | | var firstNode = this.getTerm(y, (m * 2 - 1))// è¿å彿ãèãä¸ºå æ¥å¼å§ |
| | | var secondNode = this.getTerm(y, (m * 2))// è¿å彿ãèãä¸ºå æ¥å¼å§ |
| | | |
| | | // 便®12èæ°ä¿®æ£å¹²æ¯æ |
| | | var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) |
| | | if (d >= firstNode) { |
| | | gzM = this.toGanZhi((y - 1900) * 12 + m + 12) |
| | | } |
| | | |
| | | // ä¼ å
¥çæ¥æçèæ°ä¸å¦ |
| | | var isTerm = false |
| | | var Term = null |
| | | if (firstNode == d) { |
| | | isTerm = true |
| | | Term = this.solarTerm[m * 2 - 2] |
| | | } |
| | | if (secondNode == d) { |
| | | isTerm = true |
| | | Term = this.solarTerm[m * 2 - 1] |
| | | } |
| | | // æ¥æ± 彿䏿¥ä¸ 1900/1/1 ç¸å·®å¤©æ° |
| | | var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 |
| | | var gzD = this.toGanZhi(dayCyclical + d - 1) |
| | | // è¯¥æ¥ææå±çæåº§ |
| | | var astro = this.toAstro(m, d) |
| | | |
| | | return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } |
| | | }, |
| | | |
| | | /** |
| | | * ä¼ å
¥ååå¹´ææ¥ä»¥åä¼ å
¥çæä»½æ¯å¦é°æè·å¾è¯¦ç»çå
¬åãååobjectä¿¡æ¯ <=>JSON |
| | | * @param y lunar year |
| | | * @param m lunar month |
| | | * @param d lunar day |
| | | * @param isLeapMonth lunar month is leap or not.[妿æ¯ååé°æç¬¬åä¸ªåæ°èµå¼trueå³å¯] |
| | | * @return JSON object |
| | | * @eg:console.log(calendar.lunar2solar(1987,9,10)); |
| | | */ |
| | | lunar2solar: function (y, m, d, isLeapMonth) { // åæ°åºé´1900.1.31~2100.12.1 |
| | | var isLeapMonth = !!isLeapMonth |
| | | var leapOffset = 0 |
| | | var leapMonth = this.leapMonth(y) |
| | | var leapDay = this.leapDays(y) |
| | | if (isLeapMonth && (leapMonth != m)) { return -1 }// ä¼ åè¦æ±è®¡ç®è¯¥é°æå
¬å ä½è¯¥å¹´å¾åºçé°æä¸ä¼ åçæä»½å¹¶ä¸å |
| | | if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// è¶
åºäºæå¤§æéå¼ |
| | | var day = this.monthDays(y, m) |
| | | var _day = day |
| | | // bugFix 2016-9-25 |
| | | // if month is leap, _day use leapDays method |
| | | if (isLeapMonth) { |
| | | _day = this.leapDays(y, m) |
| | | } |
| | | if (y < 1900 || y > 2100 || d > _day) { return -1 }// åæ°åæ³æ§æéª |
| | | |
| | | // 计ç®ååçæ¶é´å·® |
| | | var offset = 0 |
| | | for (var i = 1900; i < y; i++) { |
| | | offset += this.lYearDays(i) |
| | | } |
| | | var leap = 0; var isAdd = false |
| | | for (var i = 1; i < m; i++) { |
| | | leap = this.leapMonth(y) |
| | | if (!isAdd) { // å¤çé°æ |
| | | if (leap <= i && leap > 0) { |
| | | offset += this.leapDays(y); isAdd = true |
| | | } |
| | | } |
| | | offset += this.monthDays(y, i) |
| | | } |
| | | // 转æ¢é°æåå éè¡¥å
è¯¥å¹´é°æçåä¸ä¸ªæçæ¶å·® |
| | | if (isLeapMonth) { offset += day } |
| | | // 1900å¹´å忣æä¸æ¥çå
¬åæ¶é´ä¸º1900å¹´1æ30æ¥0æ¶0å0ç§(该æ¶é´ä¹æ¯æ¬ååçæå¼å§èµ·å§ç¹) |
| | | var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) |
| | | var calObj = new Date((offset + d - 31) * 86400000 + stmap) |
| | | var cY = calObj.getUTCFullYear() |
| | | var cM = calObj.getUTCMonth() + 1 |
| | | var cD = calObj.getUTCDate() |
| | | |
| | | return this.solar2lunar(cY, cM, cD) |
| | | } |
| | | } |
| | | |
| | | export default calendar |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | {
|
| | | "uni-calender.ok": "ok",
|
| | | "uni-calender.cancel": "cancel",
|
| | | "uni-calender.today": "today",
|
| | | "uni-calender.MON": "MON",
|
| | | "uni-calender.TUE": "TUE",
|
| | | "uni-calender.WED": "WED",
|
| | | "uni-calender.THU": "THU",
|
| | | "uni-calender.FRI": "FRI",
|
| | | "uni-calender.SAT": "SAT",
|
| | | "uni-calender.SUN": "SUN"
|
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import en from './en.json'
|
| | | import zhHans from './zh-Hans.json'
|
| | | import zhHant from './zh-Hant.json'
|
| | | export default {
|
| | | en,
|
| | | 'zh-Hans': zhHans,
|
| | | 'zh-Hant': zhHant
|
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | {
|
| | | "uni-calender.ok": "ç¡®å®",
|
| | | "uni-calender.cancel": "åæ¶",
|
| | | "uni-calender.today": "仿¥",
|
| | | "uni-calender.SUN": "æ¥",
|
| | | "uni-calender.MON": "ä¸",
|
| | | "uni-calender.TUE": "äº",
|
| | | "uni-calender.WED": "ä¸",
|
| | | "uni-calender.THU": "å",
|
| | | "uni-calender.FRI": "äº",
|
| | | "uni-calender.SAT": "å
"
|
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | {
|
| | | "uni-calender.ok": "確å®",
|
| | | "uni-calender.cancel": "åæ¶",
|
| | | "uni-calender.today": "仿¥",
|
| | | "uni-calender.SUN": "æ¥", |
| | | "uni-calender.MON": "ä¸", |
| | | "uni-calender.TUE": "äº", |
| | | "uni-calender.WED": "ä¸", |
| | | "uni-calender.THU": "å", |
| | | "uni-calender.FRI": "äº", |
| | | "uni-calender.SAT": "å
"
|
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template>
|
| | | <view class="uni-calendar-item__weeks-box" :class="{
|
| | | 'uni-calendar-item--disable':weeks.disable,
|
| | | 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
|
| | | 'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) ,
|
| | | 'uni-calendar-item--before-checked':weeks.beforeMultiple,
|
| | | 'uni-calendar-item--multiple': weeks.multiple,
|
| | | 'uni-calendar-item--after-checked':weeks.afterMultiple,
|
| | | }"
|
| | | @click="choiceDate(weeks)">
|
| | | <view class="uni-calendar-item__weeks-box-item">
|
| | | <text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
|
| | | <text class="uni-calendar-item__weeks-box-text" :class="{
|
| | | 'uni-calendar-item--isDay-text': weeks.isDay,
|
| | | 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
|
| | | 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
|
| | | 'uni-calendar-item--before-checked':weeks.beforeMultiple,
|
| | | 'uni-calendar-item--multiple': weeks.multiple,
|
| | | 'uni-calendar-item--after-checked':weeks.afterMultiple,
|
| | | 'uni-calendar-item--disable':weeks.disable,
|
| | | }">{{weeks.date}}</text>
|
| | | <text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{
|
| | | 'uni-calendar-item--isDay-text':weeks.isDay,
|
| | | 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
|
| | | 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
|
| | | 'uni-calendar-item--before-checked':weeks.beforeMultiple,
|
| | | 'uni-calendar-item--multiple': weeks.multiple,
|
| | | 'uni-calendar-item--after-checked':weeks.afterMultiple,
|
| | | }">{{todayText}}</text>
|
| | | <text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{
|
| | | 'uni-calendar-item--isDay-text':weeks.isDay,
|
| | | 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
|
| | | 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
|
| | | 'uni-calendar-item--before-checked':weeks.beforeMultiple,
|
| | | 'uni-calendar-item--multiple': weeks.multiple,
|
| | | 'uni-calendar-item--after-checked':weeks.afterMultiple,
|
| | | 'uni-calendar-item--disable':weeks.disable,
|
| | | }">{{weeks.isDay ? todayText : (weeks.lunar.IDayCn === 'åä¸'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text>
|
| | | <text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{
|
| | | 'uni-calendar-item--extra':weeks.extraInfo.info,
|
| | | 'uni-calendar-item--isDay-text':weeks.isDay,
|
| | | 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
|
| | | 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
|
| | | 'uni-calendar-item--before-checked':weeks.beforeMultiple,
|
| | | 'uni-calendar-item--multiple': weeks.multiple,
|
| | | 'uni-calendar-item--after-checked':weeks.afterMultiple,
|
| | | 'uni-calendar-item--disable':weeks.disable,
|
| | | }">{{weeks.extraInfo.info}}</text>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import { initVueI18n } from '@dcloudio/uni-i18n'
|
| | | import i18nMessages from './i18n/index.js'
|
| | | const { t } = initVueI18n(i18nMessages)
|
| | |
|
| | | export default {
|
| | | emits:['change'],
|
| | | props: {
|
| | | weeks: {
|
| | | type: Object,
|
| | | default () {
|
| | | return {}
|
| | | }
|
| | | },
|
| | | calendar: {
|
| | | type: Object,
|
| | | default: () => {
|
| | | return {}
|
| | | }
|
| | | },
|
| | | selected: {
|
| | | type: Array,
|
| | | default: () => {
|
| | | return []
|
| | | }
|
| | | },
|
| | | lunar: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | todayText() {
|
| | | return t("uni-calender.today")
|
| | | },
|
| | | },
|
| | | methods: {
|
| | | choiceDate(weeks) {
|
| | | this.$emit('change', weeks)
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | $uni-font-size-base:14px;
|
| | | $uni-text-color:#333;
|
| | | $uni-font-size-sm:12px;
|
| | | $uni-color-error: #e43d33;
|
| | | $uni-opacity-disabled: 0.3;
|
| | | $uni-text-color-disable:#c0c0c0;
|
| | | $uni-primary: #2979ff !default;
|
| | | .uni-calendar-item__weeks-box {
|
| | | flex: 1;
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: column;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | }
|
| | |
|
| | | .uni-calendar-item__weeks-box-text {
|
| | | font-size: $uni-font-size-base;
|
| | | color: $uni-text-color;
|
| | | }
|
| | |
|
| | | .uni-calendar-item__weeks-lunar-text {
|
| | | font-size: $uni-font-size-sm;
|
| | | color: $uni-text-color;
|
| | | }
|
| | |
|
| | | .uni-calendar-item__weeks-box-item {
|
| | | position: relative;
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: column;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | width: 100rpx;
|
| | | height: 100rpx;
|
| | | }
|
| | |
|
| | | .uni-calendar-item__weeks-box-circle {
|
| | | position: absolute;
|
| | | top: 5px;
|
| | | right: 5px;
|
| | | width: 8px;
|
| | | height: 8px;
|
| | | border-radius: 8px;
|
| | | background-color: $uni-color-error;
|
| | |
|
| | | }
|
| | |
|
| | | .uni-calendar-item--disable {
|
| | | background-color: rgba(249, 249, 249, $uni-opacity-disabled);
|
| | | color: $uni-text-color-disable;
|
| | | }
|
| | |
|
| | | .uni-calendar-item--isDay-text {
|
| | | color: $uni-primary;
|
| | | }
|
| | |
|
| | | .uni-calendar-item--isDay {
|
| | | background-color: $uni-primary;
|
| | | opacity: 0.8;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .uni-calendar-item--extra {
|
| | | color: $uni-color-error;
|
| | | opacity: 0.8;
|
| | | }
|
| | |
|
| | | .uni-calendar-item--checked {
|
| | | background-color: $uni-primary;
|
| | | color: #fff;
|
| | | opacity: 0.8;
|
| | | }
|
| | |
|
| | | .uni-calendar-item--multiple {
|
| | | background-color: $uni-primary;
|
| | | color: #fff;
|
| | | opacity: 0.8;
|
| | | }
|
| | | .uni-calendar-item--before-checked {
|
| | | background-color: #ff5a5f;
|
| | | color: #fff;
|
| | | }
|
| | | .uni-calendar-item--after-checked {
|
| | | background-color: #ff5a5f;
|
| | | color: #fff;
|
| | | }
|
| | | </style>
|
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template>
|
| | | <view class="uni-calendar">
|
| | | <view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" @click="clean"></view>
|
| | | <view v-if="insert || show" class="uni-calendar__content" :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow}">
|
| | | <view v-if="!insert" class="uni-calendar__header uni-calendar--fixed-top">
|
| | | <view class="uni-calendar__header-btn-box" @click="close">
|
| | | <text class="uni-calendar__header-text uni-calendar--fixed-width">{{cancelText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__header-btn-box" @click="confirm">
|
| | | <text class="uni-calendar__header-text uni-calendar--fixed-width">{{okText}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="uni-calendar__header">
|
| | | <view class="uni-calendar__header-btn-box" @click.stop="pre">
|
| | | <view class="uni-calendar__header-btn uni-calendar--left"></view>
|
| | | </view>
|
| | | <picker mode="date" :value="date" fields="month" @change="bindDateChange">
|
| | | <text class="uni-calendar__header-text">{{ (nowDate.year||'') +' / '+( nowDate.month||'')}}</text>
|
| | | </picker>
|
| | | <view class="uni-calendar__header-btn-box" @click.stop="next">
|
| | | <view class="uni-calendar__header-btn uni-calendar--right"></view>
|
| | | </view>
|
| | | <text class="uni-calendar__backtoday" @click="backToday">{{todayText}}</text>
|
| | |
|
| | | </view>
|
| | | <view class="uni-calendar__box">
|
| | | <view v-if="showMonth" class="uni-calendar__box-bg">
|
| | | <text class="uni-calendar__box-bg-text">{{nowDate.month}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks">
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{SUNText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{monText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{TUEText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{WEDText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{THUText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{FRIText}}</text>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks-day">
|
| | | <text class="uni-calendar__weeks-day-text">{{SATText}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex">
|
| | | <view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex">
|
| | | <calendar-item class="uni-calendar-item--hook" :weeks="weeks" :calendar="calendar" :selected="selected" :lunar="lunar" @change="choiceDate"></calendar-item>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import Calendar from './util.js';
|
| | | import CalendarItem from './uni-calendar-item.vue'
|
| | |
|
| | | import { initVueI18n } from '@dcloudio/uni-i18n'
|
| | | import i18nMessages from './i18n/index.js'
|
| | | const { t } = initVueI18n(i18nMessages)
|
| | |
|
| | | /**
|
| | | * Calendar æ¥å
|
| | | * @description æ¥åç»ä»¶å¯ä»¥æ¥çæ¥æï¼éæ©ä»»æèå´å
çæ¥æï¼æç¹æä½ã常ç¨åºæ¯å¦ï¼é
åºæ¥æé¢è®¢ãç«è½¦æºç¥¨éæ©è´ä¹°æ¥æãä¸ä¸çæå¡ç
|
| | | * @tutorial https://ext.dcloud.net.cn/plugin?id=56
|
| | | * @property {String} date èªå®ä¹å½åæ¶é´ï¼é»è®¤ä¸ºä»å¤©
|
| | | * @property {Boolean} lunar æ¾ç¤ºåå
|
| | | * @property {String} startDate æ¥æéæ©èå´-å¼å§æ¥æ
|
| | | * @property {String} endDate æ¥æéæ©èå´-ç»ææ¥æ
|
| | | * @property {Boolean} range èå´éæ©
|
| | | * @property {Boolean} insert = [true|false] æå
¥æ¨¡å¼,é»è®¤ä¸ºfalse
|
| | | * @value true å¼¹çªæ¨¡å¼
|
| | | * @value false æå
¥æ¨¡å¼
|
| | | * @property {Boolean} clearDate = [true|false] å¼¹çªæ¨¡å¼æ¯å¦æ¸
ç©ºä¸æ¬¡éæ©å
容
|
| | | * @property {Array} selected æç¹ï¼æå¾
æ ¼å¼[{date: '2019-06-27', info: 'ç¾å°', data: { custom: 'èªå®ä¹ä¿¡æ¯', name: 'èªå®ä¹æ¶æ¯å¤´',xxx:xxx... }}]
|
| | | * @property {Boolean} showMonth æ¯å¦éæ©æä»½ä¸ºèæ¯
|
| | | * @event {Function} change æ¥ææ¹åï¼`insert :ture` æ¶çæ
|
| | | * @event {Function} confirm ç¡®è®¤éæ©`insert :false` æ¶çæ
|
| | | * @event {Function} monthSwitch 忢æä»½æ¶è§¦å
|
| | | * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" />
|
| | | */
|
| | | export default {
|
| | | components: {
|
| | | CalendarItem
|
| | | },
|
| | | emits:['close','confirm','change','monthSwitch'],
|
| | | props: {
|
| | | date: {
|
| | | type: String,
|
| | | default: ''
|
| | | },
|
| | | selected: {
|
| | | type: Array,
|
| | | default () {
|
| | | return []
|
| | | }
|
| | | },
|
| | | lunar: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | startDate: {
|
| | | type: String,
|
| | | default: ''
|
| | | },
|
| | | endDate: {
|
| | | type: String,
|
| | | default: ''
|
| | | },
|
| | | range: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | insert: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | showMonth: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | clearDate: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | }
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | show: false,
|
| | | weeks: [],
|
| | | calendar: {},
|
| | | nowDate: '',
|
| | | aniMaskShow: false
|
| | | }
|
| | | },
|
| | | computed:{
|
| | | /**
|
| | | * for i18n
|
| | | */
|
| | |
|
| | | okText() {
|
| | | return t("uni-calender.ok")
|
| | | },
|
| | | cancelText() {
|
| | | return t("uni-calender.cancel")
|
| | | },
|
| | | todayText() {
|
| | | return t("uni-calender.today")
|
| | | },
|
| | | monText() {
|
| | | return t("uni-calender.MON")
|
| | | },
|
| | | TUEText() {
|
| | | return t("uni-calender.TUE")
|
| | | },
|
| | | WEDText() {
|
| | | return t("uni-calender.WED")
|
| | | },
|
| | | THUText() {
|
| | | return t("uni-calender.THU")
|
| | | },
|
| | | FRIText() {
|
| | | return t("uni-calender.FRI")
|
| | | },
|
| | | SATText() {
|
| | | return t("uni-calender.SAT")
|
| | | },
|
| | | SUNText() {
|
| | | return t("uni-calender.SUN")
|
| | | },
|
| | | },
|
| | | watch: {
|
| | | date(newVal) {
|
| | | // this.cale.setDate(newVal)
|
| | | this.init(newVal)
|
| | | },
|
| | | startDate(val){
|
| | | this.cale.resetSatrtDate(val)
|
| | | this.cale.setDate(this.nowDate.fullDate)
|
| | | this.weeks = this.cale.weeks
|
| | | },
|
| | | endDate(val){
|
| | | this.cale.resetEndDate(val)
|
| | | this.cale.setDate(this.nowDate.fullDate)
|
| | | this.weeks = this.cale.weeks
|
| | | },
|
| | | selected(newVal) {
|
| | | this.cale.setSelectInfo(this.nowDate.fullDate, newVal)
|
| | | this.weeks = this.cale.weeks
|
| | | }
|
| | | },
|
| | | created() {
|
| | | this.cale = new Calendar({
|
| | | selected: this.selected,
|
| | | startDate: this.startDate,
|
| | | endDate: this.endDate,
|
| | | range: this.range,
|
| | | })
|
| | | this.init(this.date)
|
| | | },
|
| | | methods: {
|
| | | // åæ¶ç©¿é
|
| | | clean() {},
|
| | | bindDateChange(e) {
|
| | | const value = e.detail.value + '-1'
|
| | | this.setDate(value)
|
| | |
|
| | | const { year,month } = this.cale.getDate(value)
|
| | | this.$emit('monthSwitch', {
|
| | | year,
|
| | | month
|
| | | })
|
| | | },
|
| | | /**
|
| | | * åå§åæ¥ææ¾ç¤º
|
| | | * @param {Object} date
|
| | | */
|
| | | init(date) {
|
| | | this.cale.setDate(date)
|
| | | this.weeks = this.cale.weeks
|
| | | this.nowDate = this.calendar = this.cale.getInfo(date)
|
| | | },
|
| | | /**
|
| | | * æå¼æ¥åå¼¹çª
|
| | | */
|
| | | open() {
|
| | | // å¼¹çªæ¨¡å¼å¹¶ä¸æ¸
çæ°æ®
|
| | | if (this.clearDate && !this.insert) {
|
| | | this.cale.cleanMultipleStatus()
|
| | | // this.cale.setDate(this.date)
|
| | | this.init(this.date)
|
| | | }
|
| | | this.show = true
|
| | | this.$nextTick(() => {
|
| | | setTimeout(() => {
|
| | | this.aniMaskShow = true
|
| | | }, 50)
|
| | | })
|
| | | },
|
| | | /**
|
| | | * å
³éæ¥åå¼¹çª
|
| | | */
|
| | | close() {
|
| | | this.aniMaskShow = false
|
| | | this.$nextTick(() => {
|
| | | setTimeout(() => {
|
| | | this.show = false
|
| | | this.$emit('close')
|
| | | }, 300)
|
| | | })
|
| | | },
|
| | | /**
|
| | | * 确认æé®
|
| | | */
|
| | | confirm() {
|
| | | this.setEmit('confirm')
|
| | | this.close()
|
| | | },
|
| | | /**
|
| | | * åå触å
|
| | | */
|
| | | change() {
|
| | | if (!this.insert) return
|
| | | this.setEmit('change')
|
| | | },
|
| | | /**
|
| | | * éæ©æä»½è§¦å
|
| | | */
|
| | | monthSwitch() {
|
| | | let {
|
| | | year,
|
| | | month
|
| | | } = this.nowDate
|
| | | this.$emit('monthSwitch', {
|
| | | year,
|
| | | month: Number(month)
|
| | | })
|
| | | },
|
| | | /**
|
| | | * æ´¾åäºä»¶
|
| | | * @param {Object} name
|
| | | */
|
| | | setEmit(name) {
|
| | | let {
|
| | | year,
|
| | | month,
|
| | | date,
|
| | | fullDate,
|
| | | lunar,
|
| | | extraInfo
|
| | | } = this.calendar
|
| | | this.$emit(name, {
|
| | | range: this.cale.multipleStatus,
|
| | | year,
|
| | | month,
|
| | | date,
|
| | | fulldate: fullDate,
|
| | | lunar,
|
| | | extraInfo: extraInfo || {}
|
| | | })
|
| | | },
|
| | | /**
|
| | | * éæ©å¤©è§¦å
|
| | | * @param {Object} weeks
|
| | | */
|
| | | choiceDate(weeks) {
|
| | | if (weeks.disable) return
|
| | | this.calendar = weeks
|
| | | // 设置å¤é
|
| | | this.cale.setMultiple(this.calendar.fullDate)
|
| | | this.weeks = this.cale.weeks
|
| | | this.change()
|
| | | },
|
| | | /**
|
| | | * åå°ä»å¤©
|
| | | */
|
| | | backToday() {
|
| | | const nowYearMonth = `${this.nowDate.year}-${this.nowDate.month}`
|
| | | const date = this.cale.getDate(new Date())
|
| | | const todayYearMonth = `${date.year}-${date.month}`
|
| | |
|
| | | this.init(date.fullDate)
|
| | |
|
| | | if(nowYearMonth !== todayYearMonth) {
|
| | | this.monthSwitch()
|
| | | }
|
| | |
|
| | | this.change()
|
| | | },
|
| | | /**
|
| | | * ä¸ä¸ªæ
|
| | | */
|
| | | pre() {
|
| | | const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate
|
| | | this.setDate(preDate)
|
| | | this.monthSwitch()
|
| | |
|
| | | },
|
| | | /**
|
| | | * ä¸ä¸ªæ
|
| | | */
|
| | | next() {
|
| | | const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate
|
| | | this.setDate(nextDate)
|
| | | this.monthSwitch()
|
| | | },
|
| | | /**
|
| | | * è®¾ç½®æ¥æ
|
| | | * @param {Object} date
|
| | | */
|
| | | setDate(date) {
|
| | | this.cale.setDate(date)
|
| | | this.weeks = this.cale.weeks
|
| | | this.nowDate = this.cale.getInfo(date)
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | $uni-bg-color-mask: rgba($color: #000000, $alpha: 0.4);
|
| | | $uni-border-color: #EDEDED;
|
| | | $uni-text-color: #333;
|
| | | $uni-bg-color-hover:#f1f1f1;
|
| | | $uni-font-size-base:14px;
|
| | | $uni-text-color-placeholder: #808080;
|
| | | $uni-color-subtitle: #555555;
|
| | | $uni-text-color-grey:#999;
|
| | | .uni-calendar {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: column;
|
| | | }
|
| | |
|
| | | .uni-calendar__mask {
|
| | | position: fixed;
|
| | | bottom: 0;
|
| | | top: 0;
|
| | | left: 0;
|
| | | right: 0;
|
| | | background-color: $uni-bg-color-mask;
|
| | | transition-property: opacity;
|
| | | transition-duration: 0.3s;
|
| | | opacity: 0;
|
| | | /* #ifndef APP-NVUE */
|
| | | z-index: 99;
|
| | | /* #endif */
|
| | | }
|
| | |
|
| | | .uni-calendar--mask-show {
|
| | | opacity: 1
|
| | | }
|
| | |
|
| | | .uni-calendar--fixed {
|
| | | position: fixed;
|
| | | /* #ifdef APP-NVUE */
|
| | | bottom: 0;
|
| | | /* #endif */
|
| | | left: 0;
|
| | | right: 0;
|
| | | transition-property: transform;
|
| | | transition-duration: 0.3s;
|
| | | transform: translateY(460px);
|
| | | /* #ifndef APP-NVUE */
|
| | | bottom: calc(var(--window-bottom));
|
| | | z-index: 99;
|
| | | /* #endif */
|
| | | }
|
| | |
|
| | | .uni-calendar--ani-show {
|
| | | transform: translateY(0);
|
| | | }
|
| | |
|
| | | .uni-calendar__content {
|
| | | background-color: #fff;
|
| | | }
|
| | |
|
| | | .uni-calendar__header {
|
| | | position: relative;
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | height: 50px;
|
| | | border-bottom-color: $uni-border-color;
|
| | | border-bottom-style: solid;
|
| | | border-bottom-width: 1px;
|
| | | }
|
| | |
|
| | | .uni-calendar--fixed-top {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | justify-content: space-between;
|
| | | border-top-color: $uni-border-color;
|
| | | border-top-style: solid;
|
| | | border-top-width: 1px;
|
| | | }
|
| | |
|
| | | .uni-calendar--fixed-width {
|
| | | width: 50px;
|
| | | }
|
| | |
|
| | | .uni-calendar__backtoday {
|
| | | position: absolute;
|
| | | right: 0;
|
| | | top: 25rpx;
|
| | | padding: 0 5px;
|
| | | padding-left: 10px;
|
| | | height: 25px;
|
| | | line-height: 25px;
|
| | | font-size: 12px;
|
| | | border-top-left-radius: 25px;
|
| | | border-bottom-left-radius: 25px;
|
| | | color: $uni-text-color;
|
| | | background-color: $uni-bg-color-hover;
|
| | | }
|
| | |
|
| | | .uni-calendar__header-text {
|
| | | text-align: center;
|
| | | width: 100px;
|
| | | font-size: $uni-font-size-base;
|
| | | color: $uni-text-color;
|
| | | }
|
| | |
|
| | | .uni-calendar__header-btn-box {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | width: 50px;
|
| | | height: 50px;
|
| | | }
|
| | |
|
| | | .uni-calendar__header-btn {
|
| | | width: 10px;
|
| | | height: 10px;
|
| | | border-left-color: $uni-text-color-placeholder;
|
| | | border-left-style: solid;
|
| | | border-left-width: 2px;
|
| | | border-top-color: $uni-color-subtitle;
|
| | | border-top-style: solid;
|
| | | border-top-width: 2px;
|
| | | }
|
| | |
|
| | | .uni-calendar--left {
|
| | | transform: rotate(-45deg);
|
| | | }
|
| | |
|
| | | .uni-calendar--right {
|
| | | transform: rotate(135deg);
|
| | | }
|
| | |
|
| | |
|
| | | .uni-calendar__weeks {
|
| | | position: relative;
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | }
|
| | |
|
| | | .uni-calendar__weeks-item {
|
| | | flex: 1;
|
| | | }
|
| | |
|
| | | .uni-calendar__weeks-day {
|
| | | flex: 1;
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: column;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | height: 45px;
|
| | | border-bottom-color: #F5F5F5;
|
| | | border-bottom-style: solid;
|
| | | border-bottom-width: 1px;
|
| | | }
|
| | |
|
| | | .uni-calendar__weeks-day-text {
|
| | | font-size: 14px;
|
| | | }
|
| | |
|
| | | .uni-calendar__box {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .uni-calendar__box-bg {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | right: 0;
|
| | | bottom: 0;
|
| | | }
|
| | |
|
| | | .uni-calendar__box-bg-text {
|
| | | font-size: 200px;
|
| | | font-weight: bold;
|
| | | color: $uni-text-color-grey;
|
| | | opacity: 0.1;
|
| | | text-align: center;
|
| | | /* #ifndef APP-NVUE */
|
| | | line-height: 1;
|
| | | /* #endif */
|
| | | }
|
| | | </style>
|
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import CALENDAR from './calendar.js'
|
| | |
|
| | | class Calendar {
|
| | | constructor({
|
| | | date,
|
| | | selected,
|
| | | startDate,
|
| | | endDate,
|
| | | range
|
| | | } = {}) {
|
| | | // å½åæ¥æ
|
| | | this.date = this.getDate(new Date()) // å½ååå
¥æ¥æ
|
| | | // æç¹ä¿¡æ¯
|
| | | this.selected = selected || [];
|
| | | // èå´å¼å§
|
| | | this.startDate = startDate
|
| | | // èå´ç»æ
|
| | | this.endDate = endDate
|
| | | this.range = range
|
| | | // å¤éç¶æ
|
| | | this.cleanMultipleStatus()
|
| | | // æ¯å¨æ¥æ
|
| | | this.weeks = {}
|
| | | // this._getWeek(this.date.fullDate)
|
| | | }
|
| | | /**
|
| | | * è®¾ç½®æ¥æ
|
| | | * @param {Object} date
|
| | | */
|
| | | setDate(date) {
|
| | | this.selectDate = this.getDate(date)
|
| | | this._getWeek(this.selectDate.fullDate)
|
| | | }
|
| | |
|
| | | /**
|
| | | * æ¸
çå¤éç¶æ
|
| | | */
|
| | | cleanMultipleStatus() {
|
| | | this.multipleStatus = {
|
| | | before: '',
|
| | | after: '',
|
| | | data: []
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * éç½®å¼å§æ¥æ
|
| | | */
|
| | | resetSatrtDate(startDate) {
|
| | | // èå´å¼å§
|
| | | this.startDate = startDate
|
| | |
|
| | | }
|
| | |
|
| | | /**
|
| | | * éç½®ç»ææ¥æ
|
| | | */
|
| | | resetEndDate(endDate) {
|
| | | // èå´ç»æ
|
| | | this.endDate = endDate
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åä»»ææ¶é´
|
| | | */
|
| | | getDate(date, AddDayCount = 0, str = 'day') {
|
| | | if (!date) {
|
| | | date = new Date()
|
| | | }
|
| | | if (typeof date !== 'object') {
|
| | | date = date.replace(/-/g, '/')
|
| | | }
|
| | | const dd = new Date(date)
|
| | | switch (str) {
|
| | | case 'day':
|
| | | dd.setDate(dd.getDate() + AddDayCount) // è·åAddDayCount天åçæ¥æ
|
| | | break
|
| | | case 'month':
|
| | | if (dd.getDate() === 31 && AddDayCount>0) {
|
| | | dd.setDate(dd.getDate() + AddDayCount)
|
| | | } else {
|
| | | const preMonth = dd.getMonth()
|
| | | dd.setMonth(preMonth + AddDayCount) // è·åAddDayCount天åçæ¥æ
|
| | | const nextMonth = dd.getMonth()
|
| | | // å¤ç pre 忢æä»½ç®æ æä»½ä¸º2ææ²¡æå½åæ¥(30 31) 忢é误é®é¢
|
| | | if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){
|
| | | dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount))
|
| | | }
|
| | | // å¤ç next 忢æä»½ç®æ æä»½ä¸º2ææ²¡æå½åæ¥(30 31) 忢é误é®é¢
|
| | | if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){
|
| | | dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount))
|
| | | }
|
| | | }
|
| | | break
|
| | | case 'year':
|
| | | dd.setFullYear(dd.getFullYear() + AddDayCount) // è·åAddDayCount天åçæ¥æ
|
| | | break
|
| | | }
|
| | | 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()
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * è·å䏿å©ä½å¤©æ°
|
| | | */
|
| | | _getLastMonthDays(firstDay, full) {
|
| | | let dateArr = []
|
| | | for (let i = firstDay; i > 0; i--) {
|
| | | const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
|
| | | dateArr.push({
|
| | | date: beforeDate,
|
| | | month: full.month - 1,
|
| | | lunar: this.getlunar(full.year, full.month - 1, beforeDate),
|
| | | disable: true
|
| | | })
|
| | | }
|
| | | return dateArr
|
| | | }
|
| | | /**
|
| | | * è·åæ¬æå¤©æ°
|
| | | */
|
| | | _currentMonthDys(dateData, full) {
|
| | | let dateArr = []
|
| | | let fullDate = this.date.fullDate
|
| | | for (let i = 1; i <= dateData; i++) {
|
| | | let nowDate = full.year + '-' + (full.month < 10 ?
|
| | | full.month : full.month) + '-' + (i < 10 ?
|
| | | '0' + i : i)
|
| | | // æ¯å¦ä»å¤©
|
| | | let isDay = fullDate === nowDate
|
| | | // è·åæç¹ä¿¡æ¯
|
| | | let info = this.selected && this.selected.find((item) => {
|
| | | if (this.dateEqual(nowDate, item.date)) {
|
| | | return item
|
| | | }
|
| | | })
|
| | |
|
| | | // æ¥æç¦ç¨
|
| | | let disableBefore = true
|
| | | let disableAfter = true
|
| | | if (this.startDate) {
|
| | | // let dateCompBefore = this.dateCompare(this.startDate, fullDate)
|
| | | // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
|
| | | disableBefore = this.dateCompare(this.startDate, nowDate)
|
| | | }
|
| | |
|
| | | if (this.endDate) {
|
| | | // let dateCompAfter = this.dateCompare(fullDate, this.endDate)
|
| | | // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
|
| | | disableAfter = this.dateCompare(nowDate, this.endDate)
|
| | | }
|
| | | let multiples = this.multipleStatus.data
|
| | | let checked = false
|
| | | let multiplesStatus = -1
|
| | | if (this.range) {
|
| | | if (multiples) {
|
| | | multiplesStatus = multiples.findIndex((item) => {
|
| | | return this.dateEqual(item, nowDate)
|
| | | })
|
| | | }
|
| | | if (multiplesStatus !== -1) {
|
| | | checked = true
|
| | | }
|
| | | }
|
| | | let data = {
|
| | | fullDate: nowDate,
|
| | | year: full.year,
|
| | | date: i,
|
| | | multiple: this.range ? checked : false,
|
| | | beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate),
|
| | | afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate),
|
| | | month: full.month,
|
| | | lunar: this.getlunar(full.year, full.month, i),
|
| | | disable: !(disableBefore && disableAfter),
|
| | | isDay
|
| | | }
|
| | | if (info) {
|
| | | data.extraInfo = info
|
| | | }
|
| | |
|
| | | dateArr.push(data)
|
| | | }
|
| | | return dateArr
|
| | | }
|
| | | /**
|
| | | * è·å䏿天æ°
|
| | | */
|
| | | _getNextMonthDays(surplus, full) {
|
| | | let dateArr = []
|
| | | for (let i = 1; i < surplus + 1; i++) {
|
| | | dateArr.push({
|
| | | date: i,
|
| | | month: Number(full.month) + 1,
|
| | | lunar: this.getlunar(full.year, Number(full.month) + 1, i),
|
| | | disable: true
|
| | | })
|
| | | }
|
| | | return dateArr
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åå½åæ¥æè¯¦æ
|
| | | * @param {Object} date
|
| | | */
|
| | | getInfo(date) {
|
| | | if (!date) {
|
| | | date = new Date()
|
| | | }
|
| | | const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
|
| | | return dateInfo
|
| | | }
|
| | |
|
| | | /**
|
| | | * æ¯è¾æ¶é´å¤§å°
|
| | | */
|
| | | dateCompare(startDate, endDate) {
|
| | | // è®¡ç®æªæ¢æ¶é´
|
| | | startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
|
| | | // 计ç®è¯¦ç»é¡¹çæªæ¢æ¶é´
|
| | | endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
|
| | | if (startDate <= endDate) {
|
| | | return true
|
| | | } else {
|
| | | return false
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * æ¯è¾æ¶é´æ¯å¦ç¸ç
|
| | | */
|
| | | dateEqual(before, after) {
|
| | | // è®¡ç®æªæ¢æ¶é´
|
| | | before = new Date(before.replace('-', '/').replace('-', '/'))
|
| | | // 计ç®è¯¦ç»é¡¹çæªæ¢æ¶é´
|
| | | after = new Date(after.replace('-', '/').replace('-', '/'))
|
| | | if (before.getTime() - after.getTime() === 0) {
|
| | | return true
|
| | | } else {
|
| | | return false
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * è·åæ¥æèå´å
æææ¥æ
|
| | | * @param {Object} begin
|
| | | * @param {Object} end
|
| | | */
|
| | | geDateAll(begin, end) {
|
| | | var arr = []
|
| | | var ab = begin.split('-')
|
| | | var ae = end.split('-')
|
| | | var db = new Date()
|
| | | db.setFullYear(ab[0], ab[1] - 1, ab[2])
|
| | | var de = new Date()
|
| | | de.setFullYear(ae[0], ae[1] - 1, ae[2])
|
| | | var unixDb = db.getTime() - 24 * 60 * 60 * 1000
|
| | | var unixDe = de.getTime() - 24 * 60 * 60 * 1000
|
| | | for (var k = unixDb; k <= unixDe;) {
|
| | | k = k + 24 * 60 * 60 * 1000
|
| | | arr.push(this.getDate(new Date(parseInt(k))).fullDate)
|
| | | }
|
| | | return arr
|
| | | }
|
| | | /**
|
| | | * 计ç®é´åæ¥ææ¾ç¤º
|
| | | */
|
| | | getlunar(year, month, date) {
|
| | | return CALENDAR.solar2lunar(year, month, date)
|
| | | }
|
| | | /**
|
| | | * 设置æç¹
|
| | | */
|
| | | setSelectInfo(data, value) {
|
| | | this.selected = value
|
| | | this._getWeek(data)
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åå¤éç¶æ
|
| | | */
|
| | | setMultiple(fullDate) {
|
| | | let {
|
| | | before,
|
| | | after
|
| | | } = this.multipleStatus
|
| | |
|
| | | if (!this.range) return
|
| | | if (before && after) {
|
| | | this.multipleStatus.before = ''
|
| | | this.multipleStatus.after = ''
|
| | | this.multipleStatus.data = []
|
| | | } else {
|
| | | if (!before) {
|
| | | this.multipleStatus.before = fullDate
|
| | | } else {
|
| | | this.multipleStatus.after = fullDate
|
| | | if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
|
| | | this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
|
| | | } else {
|
| | | this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
|
| | | }
|
| | | }
|
| | | }
|
| | | this._getWeek(fullDate)
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åæ¯å¨æ°æ®
|
| | | * @param {Object} dateData
|
| | | */
|
| | | _getWeek(dateData) {
|
| | | const {
|
| | | year,
|
| | | month
|
| | | } = this.getDate(dateData)
|
| | | let firstDay = new Date(year, month - 1, 1).getDay()
|
| | | let currentDay = new Date(year, month, 0).getDate()
|
| | | let dates = {
|
| | | lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // ä¸ä¸ªææ«å°¾å 天
|
| | | currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // æ¬æå¤©æ°
|
| | | nextMonthDays: [], // ä¸ä¸ªæå¼å§å 天
|
| | | weeks: []
|
| | | }
|
| | | let canlender = []
|
| | | const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
|
| | | dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
|
| | | canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
|
| | | let weeks = {}
|
| | | // æ¼æ¥æ°ç» ä¸ä¸ªæå¼å§å 天 + æ¬æå¤©æ°+ ä¸ä¸ªæå¼å§å 天
|
| | | for (let i = 0; i < canlender.length; i++) {
|
| | | if (i % 7 === 0) {
|
| | | weeks[parseInt(i / 7)] = new Array(7)
|
| | | }
|
| | | weeks[parseInt(i / 7)][i % 7] = canlender[i]
|
| | | }
|
| | | this.canlender = canlender
|
| | | this.weeks = weeks
|
| | | }
|
| | |
|
| | | //éææ¹æ³
|
| | | // static init(date) {
|
| | | // if (!this.instance) {
|
| | | // this.instance = new Calendar(date);
|
| | | // }
|
| | | // return this.instance;
|
| | | // }
|
| | | }
|
| | |
|
| | |
|
| | | export default Calendar
|
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "id": "uni-calendar", |
| | | "displayName": "uni-calendar æ¥å", |
| | | "version": "1.4.11", |
| | | "description": "æ¥åç»ä»¶", |
| | | "keywords": [ |
| | | "uni-ui", |
| | | "uniui", |
| | | "æ¥å", |
| | | "", |
| | | "æå¡", |
| | | "æ¥åéæ©" |
| | | ], |
| | | "repository": "https://github.com/dcloudio/uni-ui", |
| | | "engines": { |
| | | "HBuilderX": "" |
| | | }, |
| | | "directories": { |
| | | "example": "../../temps/example_temps" |
| | | }, |
| | | "dcloudext": { |
| | | "sale": { |
| | | "regular": { |
| | | "price": "0.00" |
| | | }, |
| | | "sourcecode": { |
| | | "price": "0.00" |
| | | } |
| | | }, |
| | | "contact": { |
| | | "qq": "" |
| | | }, |
| | | "declaration": { |
| | | "ads": "æ ", |
| | | "data": "æ ", |
| | | "permissions": "æ " |
| | | }, |
| | | "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", |
| | | "type": "component-vue" |
| | | }, |
| | | "uni_modules": { |
| | | "dependencies": [], |
| | | "encrypt": [], |
| | | "platforms": { |
| | | "cloud": { |
| | | "tcb": "y", |
| | | "aliyun": "y" |
| | | }, |
| | | "client": { |
| | | "App": { |
| | | "app-vue": "y", |
| | | "app-nvue": "y" |
| | | }, |
| | | "H5-mobile": { |
| | | "Safari": "y", |
| | | "Android Browser": "y", |
| | | "微信æµè§å¨(Android)": "y", |
| | | "QQæµè§å¨(Android)": "y" |
| | | }, |
| | | "H5-pc": { |
| | | "Chrome": "y", |
| | | "IE": "y", |
| | | "Edge": "y", |
| | | "Firefox": "y", |
| | | "Safari": "y" |
| | | }, |
| | | "å°ç¨åº": { |
| | | "微信": "y", |
| | | "é¿é": "y", |
| | | "ç¾åº¦": "y", |
| | | "åèè·³å¨": "y", |
| | | "QQ": "y" |
| | | }, |
| | | "å¿«åºç¨": { |
| | | "å为": "u", |
| | | "èç": "u" |
| | | }, |
| | | "Vue": { |
| | | "vue2": "y", |
| | | "vue3": "y" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | |
| | | ## Calendar æ¥å |
| | | > **ç»ä»¶åï¼uni-calendar** |
| | | > 代ç åï¼ `uCalendar` |
| | | |
| | | |
| | | æ¥åç»ä»¶ |
| | | |
| | | > **注æäºé¡¹** |
| | | > 为äºé¿å
é误使ç¨ï¼ç»å¤§å®¶å¸¦æ¥ä¸å¥½çå¼åä½éªï¼è¯·å¨ä½¿ç¨ç»ä»¶åä»ç»é
读ä¸é¢ç注æäºé¡¹ï¼å¯ä»¥å¸®ä½ é¿å
ä¸äºé误ã |
| | | > - æ¬ç»ä»¶åå转æ¢ä½¿ç¨çjsæ¯ [@1900-2100åºé´å
çå
¬åãååäºè½¬](https://github.com/jjonline/calendar.js) |
| | | > - ä»
æ¯æèªå®ä¹ç»ä»¶æ¨¡å¼ |
| | | > - `date`屿§ä¼ å
¥çåºè¯¥æ¯ä¸ä¸ª String ï¼å¦ï¼ 2019-06-27 ï¼è䏿¯ new Date() |
| | | > - éè¿ `insert` 屿§æ¥ç¡®å®å½åçäºä»¶æ¯ @change è¿æ¯ @confirm ãçåºå并为ä¸ä¸ªäºä»¶ï¼ä½æ¯ä¸ºäºåºå模å¼ï¼ç°ä½¿ç¨ä¸¤ä¸ªäºä»¶ï¼è¿ééè¦æ³¨æ |
| | | > - å¼¹çªæ¨¡å¼ä¸æ æ³é»æ¢åé¢çå
ç´ æ»å¨ï¼å¦æéè¦é»æ¢ï¼è¯·å¨å¼¹çªå¼¹åºåï¼æå¨è®¾ç½®æ»å¨å
ç´ ä¸ºä¸å¯æ»å¨ |
| | | |
| | | |
| | | ### å®è£
æ¹å¼ |
| | | |
| | | æ¬ç»ä»¶ç¬¦å[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)è§èï¼`HBuilderX 2.5.5`èµ·ï¼åªéå°æ¬ç»ä»¶å¯¼å
¥é¡¹ç®ï¼å¨é¡µé¢`template`ä¸å³å¯ç´æ¥ä½¿ç¨ï¼æ éå¨é¡µé¢ä¸`import`åæ³¨å`components`ã |
| | | |
| | | å¦ééè¿`npm`æ¹å¼ä½¿ç¨`uni-ui`ç»ä»¶ï¼å¦è§ææ¡£ï¼[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) |
| | | |
| | | ### åºæ¬ç¨æ³ |
| | | |
| | | å¨ ``template`` ä¸ä½¿ç¨ç»ä»¶ |
| | | |
| | | ```html |
| | | <view> |
| | | <uni-calendar |
| | | :insert="true" |
| | | :lunar="true" |
| | | :start-date="'2019-3-2'" |
| | | :end-date="'2019-5-20'" |
| | | @change="change" |
| | | /> |
| | | </view> |
| | | ``` |
| | | |
| | | ### éè¿æ¹æ³æå¼æ¥å |
| | | |
| | | éè¦è®¾ç½® `insert` 为 `false` |
| | | |
| | | ```html |
| | | <view> |
| | | <uni-calendar |
| | | ref="calendar" |
| | | :insert="false" |
| | | @confirm="confirm" |
| | | /> |
| | | <button @click="open">æå¼æ¥å</button> |
| | | </view> |
| | | ``` |
| | | |
| | | ```javascript |
| | | |
| | | export default { |
| | | data() { |
| | | return {}; |
| | | }, |
| | | methods: { |
| | | open(){ |
| | | this.$refs.calendar.open(); |
| | | }, |
| | | confirm(e) { |
| | | console.log(e); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | ``` |
| | | |
| | | |
| | | ## API |
| | | |
| | | ### Calendar Props |
| | | |
| | | | 屿§å | ç±»å | é»è®¤å¼| 说æ | |
| | | | - | - | - | - | |
| | | | date | String |- | èªå®ä¹å½åæ¶é´ï¼é»è®¤ä¸ºä»å¤© | |
| | | | lunar | Boolean | false | æ¾ç¤ºåå | |
| | | | startDate | String |- | æ¥æéæ©èå´-å¼å§æ¥æ | |
| | | | endDate | String |- | æ¥æéæ©èå´-ç»ææ¥æ | |
| | | | range | Boolean | false | èå´éæ© | |
| | | | insert | Boolean | false | æå
¥æ¨¡å¼,å¯éå¼ï¼tureï¼æå
¥æ¨¡å¼ï¼falseï¼å¼¹çªæ¨¡å¼ï¼é»è®¤ä¸ºæå
¥æ¨¡å¼ | |
| | | |clearDate |Boolean |true |å¼¹çªæ¨¡å¼æ¯å¦æ¸
ç©ºä¸æ¬¡éæ©å
容 | |
| | | | selected | Array |- | æç¹ï¼æå¾
æ ¼å¼[{date: '2019-06-27', info: 'ç¾å°', data: { custom: 'èªå®ä¹ä¿¡æ¯', name: 'èªå®ä¹æ¶æ¯å¤´',xxx:xxx... }}] | |
| | | |showMonth | Boolean | true | æ¯å¦æ¾ç¤ºæä»½ä¸ºèæ¯ | |
| | | |
| | | ### Calendar Events |
| | | |
| | | | äºä»¶å | 说æ |è¿åå¼| |
| | | | - | - | - | |
| | | | open | å¼¹åºæ¥åç»ä»¶ï¼`insert :false` æ¶çæ|- | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | ## ç»ä»¶ç¤ºä¾ |
| | | |
| | | ç¹å»æ¥çï¼[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) |