日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uni-app 自定义选择日期2(2021-09-16)

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uni-app 自定义选择日期2(2021-09-16) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

效果圖:

1.組件目錄:

(1).en.json

{
?? ?"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"
}
(2).index.js

?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
}

(3).zh-Hans.json

{
?? ?"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": "六"
}

(4).zh-Hant.json

{
?? ?"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": "六"
}

(5).calendar.js

/**
* @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
?

(6).uni-calendar.vue

<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="preYear">
?? ??? ??? ??? ??? ?<view class="uni-calendar__header-btn uni-calendar--left"></view>
?? ??? ??? ??? ??? ?<view class="uni-calendar__header-btn uni-calendar--left"></view>
?? ??? ??? ??? ?</view>
?? ??? ??? ??? ?<!-- 月 減少 -->
?? ??? ??? ??? ?<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>
?? ??? ??? ??? ?<!-- 年 增加 -->
?? ??? ??? ??? ?<view class="uni-calendar__header-btn-box" @click.stop="nextYear">
?? ??? ??? ??? ??? ?<view class="uni-calendar__header-btn uni-calendar--right"></view>
?? ??? ??? ??? ??? ?<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 messages from './i18n/index.js'
?? ?const {
?? ??? ?t
?? ?} = initVueI18n(messages)
?? ?/**
?? ? * 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)
?? ??? ??? ?},
?? ??? ??? ?endDate(val) {
?? ??? ??? ??? ?this.cale.resetEndDate(val)
?? ??? ??? ?},
?? ??? ??? ?selected(newVal) {
?? ??? ??? ??? ?this.cale.setSelectInfo(this.nowDate.fullDate, newVal)
?? ??? ??? ??? ?this.weeks = this.cale.weeks
?? ??? ??? ?}
?? ??? ?},
?? ??? ?created() {
?? ??? ??? ?// 獲取日歷方法實例
?? ??? ??? ?this.cale = new Calendar({
?? ??? ??? ??? ?// date: new Date(),
?? ??? ??? ??? ?selected: this.selected,
?? ??? ??? ??? ?startDate: this.startDate,
?? ??? ??? ??? ?endDate: this.endDate,
?? ??? ??? ??? ?range: this.range,
?? ??? ??? ?})
?? ??? ??? ?// 選中某一天
?? ??? ??? ?// this.cale.setDate(this.date)
?? ??? ??? ?this.init(this.date)
?? ??? ??? ?// this.setDay
?? ??? ?},
?? ??? ?methods: {
?? ??? ??? ?// 取消穿透
?? ??? ??? ?clean() {},
?? ??? ??? ?bindDateChange(e) {
?? ??? ??? ??? ?const value = e.detail.value + '-1'
?? ??? ??? ??? ?console.log("bindDateChange = " + this.cale.getDate(value));
?? ??? ??? ??? ?this.init(value)
?? ??? ??? ?},
?? ??? ??? ?/**
?? ??? ??? ? * 初始化日期顯示
?? ??? ??? ? * @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) {
?? ??? ??? ??? ?console.log("+++Pagrent+++ weeks = " + JSON.stringify(weeks))
?? ??? ??? ??? ?let date = weeks.lunar.cYear + "-" + weeks.lunar.cMonth + "-" + weeks.lunar.cDay
?? ??? ??? ??? ?console.log("+++Pagrent+++ date = " + JSON.stringify(date))
?? ??? ??? ??? ?if (weeks.disable) { //放開這個注釋,只能選擇當月可選的日期
?? ??? ??? ??? ??? ?this.init(date)
?? ??? ??? ??? ??? ?this.change()
?? ??? ??? ??? ??? ?return
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?this.calendar = weeks
?? ??? ??? ??? ??? ?// 設置多選
?? ??? ??? ??? ??? ?this.cale.setMultiple(this.calendar.fullDate)
?? ??? ??? ??? ??? ?this.weeks = this.cale.weeks
?? ??? ??? ??? ??? ?this.change()
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?/**
?? ??? ??? ? * 回到今天
?? ??? ??? ? */
?? ??? ??? ?backtoday() {
?? ??? ??? ??? ?console.log(this.cale.getDate(new Date()).fullDate);
?? ??? ??? ??? ?let date = this.cale.getDate(new Date()).fullDate
?? ??? ??? ??? ?// this.cale.setDate(date)
?? ??? ??? ??? ?this.init(date)
?? ??? ??? ??? ?this.change()
?? ??? ??? ?},
?? ??? ??? ?/**
?? ??? ??? ? * 上年
?? ??? ??? ? */
?? ??? ??? ?preYear() {
?? ??? ??? ??? ?const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'year').fullDate
?? ??? ??? ??? ?this.setDate(preDate)
?? ??? ??? ??? ?this.monthSwitch()
?? ??? ??? ?},
?? ??? ??? ?/**
?? ??? ??? ? * 上個月
?? ??? ??? ? */
?? ??? ??? ?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()
?? ??? ??? ?},
?? ??? ??? ?/**
?? ??? ??? ? * 下年
?? ??? ??? ? */
?? ??? ??? ?nextYear() {
?? ??? ??? ??? ?const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'year').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-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;
?? ??? ?bottom: calc(var(--window-bottom));
?? ??? ?left: 0;
?? ??? ?right: 0;
?? ??? ?transition-property: transform;
?? ??? ?transition-duration: 0.3s;
?? ??? ?transform: translateY(460px);
?? ??? ?/* #ifndef APP-NVUE */
?? ??? ?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;
?? ??? ?// padding: 0 15px;
?? ?}

?? ?.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>
?

(7).uni-calendar-item.vue

<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" 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 messages from './i18n/index.js'
?? ?const {
?? ??? ?t
?? ?} = initVueI18n(messages)
?? ?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) {
?? ??? ??? ??? ?console.log("+++item+++ weeks = "+JSON.stringify(weeks))
?? ??? ??? ??? ?this.$emit('change', weeks)
?? ??? ??? ?}
?? ??? ?}
?? ?}
</script>

<style lang="scss" scoped>
?? ?.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-color-primary;
?? ?}

?? ?.uni-calendar-item--isDay {
?? ??? ?background-color: $uni-color-primary;
?? ??? ?opacity: 0.8;
?? ??? ?color: #fff;
?? ?}

?? ?.uni-calendar-item--extra {
?? ??? ?color: $uni-color-error;
?? ??? ?opacity: 0.8;
?? ?}

?? ?.uni-calendar-item--checked {
?? ??? ?background-color: $uni-color-primary;
?? ??? ?color: #fff;
?? ??? ?opacity: 0.8;
?? ?}

?? ?.uni-calendar-item--multiple {
?? ??? ?background-color: $uni-color-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>
?

(8).util.js

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) {
?? ??? ??? ??? ??? ?dd.setDate(dd.getDate() + AddDayCount)
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?dd.setMonth(dd.getMonth() + AddDayCount) // 獲取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 isinfo = false
?? ??? ??? ?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)
?? ??? ??? ?}

?? ??? ??? ?if (this.endDate) {
?? ??? ??? ??? ?let dateCompAfter = this.dateCompare(fullDate, this.endDate)
?? ??? ??? ??? ?disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
?? ??? ??? ?}
?? ??? ??? ?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 {
?? ??? ??? ?fullDate,
?? ??? ??? ?year,
?? ??? ??? ?month,
?? ??? ??? ?date,
?? ??? ??? ?day
?? ??? ?} = 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
?

2.組件uni-calendar的引用

在script標簽中添加

import calendar from "../../comment/uni-calendar/uni-calendar.vue"

components: {
?? ??? ??? ?calendar
?? ??? ?},

?3.在template中使用組件

<calendar :date="date" :selected="selected" :start-date="'2019-3-2'" :end-date="'2019-5-20'"
?? ??? ??? ?class="calendar_box" @change="change" :lunar="true"></calendar>

參數說明
date初始當前日期
selected數組,打開簽到日期,用于做標記的[{date:"2021-09-17"}]
start-date可選日期的開始時間
end-date可選日期的結束時間,默認是到今天
@change監聽日歷點擊事件
lunar是否展示陰歷日期

總體代碼:

<template>
?? ?<view class="content">
?? ??? ?<calendar :date="date" :selected="selected" :start-date="'2019-3-2'" :end-date="'2020-5-20'"
?? ??? ??? ?class="calendar_box" @change="change" :lunar="true"></calendar>

?? ?</view>
</template>

<script>
?? ?import calendar from "../../comment/uni-calendar/uni-calendar.vue"
?? ?export default {
?? ??? ?components: {
?? ??? ??? ?calendar
?? ??? ?},
?? ??? ?data() {
?? ??? ??? ?return {
?? ??? ??? ??? ?date: "", //初始日期
?? ??? ??? ??? ?selected: [], //打點日期,實際開發中,這里需要請求后端接口,拿取數據后在進行渲染
?? ??? ??? ?}
?? ??? ?},
?? ??? ?onReady() {
?? ??? ??? ?var _this = this
?? ??? ??? ?// console.log("getTime = " + _this.getTime())
?? ??? ??? ?_this.date = _this.getTime()
?? ??? ?},
?? ??? ?methods: {
?? ??? ??? ?// 日期改變
?? ??? ??? ?change(e) {
?? ??? ??? ??? ?var _this = this
?? ??? ??? ??? ?var fulldate = e.fulldate
?? ??? ??? ??? ?console.log("change e = " + JSON.stringify(e));
?? ??? ??? ??? ?if (e.extraInfo.date) {
?? ??? ??? ??? ??? ?var checkDate = e.extraInfo.date
?? ??? ??? ??? ??? ?console.log("e.extraInfo.date ++++++ " + JSON.stringify(checkDate));
?? ??? ??? ??? ??? ?for (var i = 0; i < _this.selected.length; i++) {
?? ??? ??? ??? ??? ??? ?if (checkDate == _this.selected[i].date) {
?? ??? ??? ??? ??? ??? ??? ?_this.selected.splice(i, 1)
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?console.log("e.extraInfo.date 111111 " + JSON.stringify(e.extraInfo.date));
?? ??? ??? ??? ??? ?_this.selected.push({
?? ??? ??? ??? ??? ??? ?date: fulldate
?? ??? ??? ??? ??? ?})
?? ??? ??? ??? ?}
?? ??? ??? ??? ?console.log("_this.selected = " + JSON.stringify(_this.selected));

?? ??? ??? ?},
?? ??? ??? ?// 獲取當前日期并格式化
?? ??? ??? ?getTime: function() {
?? ??? ??? ??? ?var date = new Date(),
?? ??? ??? ??? ??? ?year = date.getFullYear(),
?? ??? ??? ??? ??? ?month = date.getMonth() + 1,
?? ??? ??? ??? ??? ?day = date.getDate(),
?? ??? ??? ??? ??? ?hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
?? ??? ??? ??? ??? ?minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
?? ??? ??? ??? ??? ?second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
?? ??? ??? ??? ?month >= 1 && month <= 9 ? (month = "0" + month) : "";
?? ??? ??? ??? ?day >= 0 && day <= 9 ? (day = "0" + day) : "";
?? ??? ??? ??? ?// var timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
?? ??? ??? ??? ?var timer = year + '-' + month + '-' + day;
?? ??? ??? ??? ?return timer;
?? ??? ??? ?}
?? ??? ?}
?? ?}
</script>

<style>
?? ?.content {
?? ??? ?display: flex;
?? ??? ?flex-direction: column;
?? ??? ?justify-content: center;
?? ??? ?width: 100%;
?? ??? ?height: 100%;
?? ?}
</style>
?

demo下載

總結

以上是生活随笔為你收集整理的uni-app 自定义选择日期2(2021-09-16)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美一级激情 | 久久中文字幕视频 | 中文字幕在线视频精品 | 日韩av电影中文字幕 | 亚洲精品国产自产拍在线观看 | 成 人 a v天堂 | 波多野结衣在线视频一区 | 成人免费在线播放 | 午夜久久福利影院 | 97综合视频| 黄色网在线免费观看 | 欧美 激情在线 | 欧美亚洲一区二区在线 | 美女免费网视频 | 日韩精品在线观看视频 | 久久一区国产 | 天天se天天cao天天干 | 这里只有精品视频在线观看 | 国产精品久久久久国产精品日日 | 国产伦理一区二区 | 91毛片在线 | 天堂av最新网址 | 免费黄色网址大全 | 人人爱人人做人人爽 | 天天综合网在线 | 久久伊99综合婷婷久久伊 | 国产成人亚洲在线观看 | 高清不卡一区二区在线 | 久久久国产电影 | 狠狠色丁香九九婷婷综合五月 | 天天综合成人网 | 亚洲天天在线 | 在线国产精品一区 | 国产精品久久久久久久久久久免费 | 又黄又爽又湿又无遮挡的在线视频 | 日韩精品久久一区二区三区 | 亚洲最新视频在线播放 | 久久精品国产亚洲精品2020 | 国产99区 | 69成人在线 | 2023年中文无字幕文字 | 亚洲欧美国内爽妇网 | 欧美人人 | 久久手机免费视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 伊人久久影视 | 久久久久久久国产精品 | 亚洲人在线视频 | 免费h精品视频在线播放 | 91精品视频在线看 | 成年人毛片在线观看 | 91精品国产91 | 国产青春久久久国产毛片 | 美国三级黄色大片 | 69国产精品视频 | 午夜影院在线观看18 | 欧美日韩久久不卡 | 亚洲精品激情 | 久久久久久99精品 | 欧美日韩亚洲精品在线 | 91精品影视 | www成人精品 | 超碰官网 | 欧美日韩69 | 国产三级国产精品国产专区50 | 亚洲乱亚洲乱妇 | 成人av高清 | 欧美日韩视频网站 | 九九爱免费视频在线观看 | 欧美成人精品三级在线观看播放 | 国产99免费 | 开心丁香婷婷深爱五月 | 日本久久不卡视频 | 人人爽人人爽人人爽 | 国产精品99久久久久久大便 | 国产精品系列在线观看 | 国产精品美女网站 | 国产一区二区在线观看免费 | av高清免费在线 | 国产剧在线观看片 | 中文字幕在线看视频国产中文版 | 国产精品久久久久久久久岛 | 国产精品大尺度 | 99免费精品视频 | 午夜色场 | 免费久久99精品国产 | 91黄色影视 | 国产成人av一区二区三区在线观看 | 天堂av网址 | 色亚洲激情 | 日韩精品网址 | 国产视频资源在线观看 | 在线观看国产日韩欧美 | 91麻豆精品国产91久久久久久 | 国语麻豆 | 婷婷六月天天 | 免费色网站| 在线电影 你懂得 | 久草在线视频在线 | 久久伦理网 | 一级片色播影院 | 亚洲精品视频久久 | 国产激情久久久 | 国产亚洲综合在线 | www.91国产 | av在线播放观看 | 美国av片在线观看 | 国产精品美女久久久久久网站 | 久久观看最新视频 | 国产成人久久精品77777 | 在线91播放| 国产手机在线观看 | 黄色av大片| 天天操夜夜干 | 色网站免费在线看 | 在线观看免费av片 | 在线影视 一区 二区 三区 | 欧美日韩亚洲国产一区 | 日韩欧美电影在线 | 国产精品乱码一区二区视频 | 最近中文字幕完整视频高清1 | 久久综合电影 | 国产精品成人自产拍在线观看 | 狠狠做深爱婷婷综合一区 | 国产成人三级在线观看 | 欧美日韩99| 在线欧美日韩 | 人人干人人模 | av黄在线播放 | 91视频国产免费 | 一本到视频在线观看 | av7777777| 在线观看爱爱视频 | 日本特黄一级片 | 日日夜色| 中文字幕一区二区在线观看 | 欧美日韩精品在线播放 | 久久久久久久久久久久av | 在线a人片免费观看视频 | 久久高清 | 91av在线国产 | 成年人免费在线播放 | 成年一级片 | 中文国产成人精品久久一 | 激情综合色综合久久综合 | 在线播放国产精品 | 中文字幕人成乱码在线观看 | 国产精品一区二区三区久久 | 天天弄天天干 | 在线观看国产永久免费视频 | av综合网址 | 亚洲国产午夜 | 成片免费观看视频999 | 成人黄色在线视频 | 日韩高清一二三区 | 日韩xxxbbb | 亚洲精品资源 | 91色一区二区三区 | 五月天综合色激情 | 免费黄色av电影 | 天天综合网~永久入口 | 国产高清视频免费观看 | 成人亚洲免费 | 国产精品久久综合 | 99视频国产精品免费观看 | 色久天 | 欧美一区,二区 | 亚洲码国产日韩欧美高潮在线播放 | 麻豆国产在线播放 | 国产成人一区在线 | 精品国产免费看 | 免费av在线播放 | 免费观看成年人视频 | 三级黄色免费片 | 亚洲精品视频免费看 | 狠狠狠狠狠干 | 免费看片网址 | 国产专区精品视频 | 成人xxxx| 国产一区二区在线免费 | 国产精品 日本 | 国产精品视频地址 | 日本三级全黄少妇三2023 | 一区二区三区免费在线观看 | 国产高清不卡在线 | 久久久www成人免费精品 | 五月激情综合婷婷 | 在线免费观看视频 | 久久av中文字幕片 | 亚州av免费 | av黄色国产 | 色99视频 | 国产最新在线视频 | 亚洲国产精品电影 | 99视频在线观看一区三区 | 亚洲精品永久免费视频 | 国产精品 中文字幕 亚洲 欧美 | 色婷婷综合五月 | 黄视频网站大全 | 99热国产在线 | 久久久免费视频播放 | 美女av免费看 | 777视频在线观看 | 99热最新 | 国产黑丝一区二区 | 久久久久久国产精品美女 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久精品99国产国产 | 91传媒激情理伦片 | 天天射射天天 | 高清色免费 | 成年人免费看的视频 | 日韩精品免费一线在线观看 | 在线看国产精品 | 国产精品乱码久久 | 日本黄色大片儿 | 欧美视频日韩 | 五月综合激情网 | 久久精品黄 | 久久久黄色av | 国产精品专区在线 | 在线观看亚洲国产 | 综合网伊人| 91视频久久久久 | 欧美日韩久久久 | 午夜性盈盈 | 91视频在线国产 | 99国产免费网址 | 夜夜狠狠| 国产精久久久 | 日韩高清免费无专码区 | 日韩免费在线播放 | 在线精品观看国产 | www.超碰| 81精品国产乱码久久久久久 | 午夜美女福利直播 | 狠狠色狠狠色综合日日小说 | 久久精品视频在线看 | 婷婷丁香七月 | 69av在线视频| 亚洲精品观看 | 99草视频| 成人一级免费电影 | wwwav视频| 狠狠干天天射 | 麻豆视频免费在线观看 | 91麻豆精品国产午夜天堂 | 国产精品美女999 | 久久精品香蕉视频 | 激情婷婷丁香 | 天天干亚洲 | 天天摸天天操天天舔 | 在线黄av | 精品国产乱码久久久久久久 | 就要干b| 91av视频观看| 欧美一区二区在线免费看 | 日狠狠 | 丝袜制服综合网 | 国产在线观看免费 | 亚洲精品在线视频 | 92国产精品久久久久首页 | 国产成人在线精品 | 亚洲精品在线观看网站 | 五月婷婷欧美视频 | 在线观看日韩 | 亚洲精品国产精品国 | 中文字幕在线视频一区二区 | 黄色亚洲大片免费在线观看 | 98久9在线 | 免费 | 久草9视频 | 久久久久久久久久久精 | 成人黄色电影在线播放 | 在线观看亚洲国产 | 国产成人综 | 亚洲一区视频在线播放 | 不卡精品视频 | 亚洲自拍偷拍色图 | 深爱激情五月网 | 日韩欧美在线视频一区二区三区 | 久久精品综合视频 | 天天操天天操天天操天天操天天操 | 国产精品综合在线 | 中文字幕av网站 | 久久精品国产亚洲精品2020 | 伊人宗合| 欧美日韩aaaa| 欧美一区二区在线看 | 国产精品美女久久久久久久网站 | 亚洲一区二区精品3399 | 成人在线观看免费 | 一级片视频在线 | 国产日韩中文在线 | 麻豆精品传媒视频 | 国产理伦在线 | 久久免费播放视频 | 91看成人 | 色婷婷中文 | 久久激情精品 | 一区二区精品在线视频 | 久久久久区 | 国产精品一区二区麻豆 | 香蕉97视频观看在线观看 | 精品久久久久久久久亚洲 | 欧美男同网站 | 国产精品毛片一区二区在线 | 色综合久久88色综合天天6 | 久久理论片 | 日本久久成人中文字幕电影 | 国产福利一区二区三区视频 | 色人久久| 婷婷福利影院 | 中文字幕日本在线 | 亚洲砖区区免费 | 91福利专区| 久久久亚洲麻豆日韩精品一区三区 | 午夜久久福利视频 | 一二三区在线 | 成人黄色片在线播放 | 欧美国产精品久久久久久免费 | 日本公妇在线观看高清 | 国产精品毛片一区二区 | 国产精品手机在线 | 免费日韩 精品中文字幕视频在线 | 91在线视频观看免费 | 午夜婷婷综合 | 亚洲视频 在线观看 | 国产美女视频免费 | 在线观看视频97 | 国产日产精品一区二区三区四区 | 日韩在线视频看看 | 激情综合亚洲精品 | 欧美精选一区二区三区 | 欧美在线久久 | 亚洲精品系列 | 日韩免费在线视频观看 | 91久久国产自产拍夜夜嗨 | 欧美午夜性 | 波多野结衣视频一区 | 免费污片 | 国产黄色资源 | 国产一区二区三区在线免费观看 | 国产一级免费在线观看 | 亚洲最快最全在线视频 | 亚洲黄色片在线 | 六月丁香激情网 | 97成人在线免费视频 | 国产在线一卡 | 国产成人精品亚洲精品 | 开心激情综合网 | 国产黄a三级三级 | 天堂在线v | 91精品国产一区二区在线观看 | 99麻豆久久久国产精品免费 | 国产精品av免费观看 | 成人一级电影在线观看 | 日韩精品在线免费观看 | 毛片播放网站 | 日韩在线在线 | 久久国产精品99久久久久久进口 | 国产精品6| 日韩欧美国产激情在线播放 | 亚洲人成网站精品片在线观看 | 久久久国产精品久久久 | 日日日日日 | 91精品久久久久久 | 久久久久国产a免费观看rela | 丁香九月激情综合 | 国产精品网红直播 | 在线看国产 | 天堂网中文在线 | 久久伊人精品一区二区三区 | 日韩午夜大片 | 香蕉97视频观看在线观看 | 午夜久久久久久久 | 亚洲黄色小说网 | 色婷av | 国产精品九九久久久久久久 | 国产精品18久久久久久久 | 国产不卡在线播放 | 国产精品久久久久久久久毛片 | 综合婷婷久久 | 久久精品99视频 | 69精品在线 | 超碰在线97免费 | 美女网站色免费 | 午夜在线免费观看 | 97免费在线观看视频 | 精品你懂的 | 精品久久久精品 | 久久激情视频免费观看 | 日韩视频在线观看视频 | 亚洲伊人成综合网 | 欧美色图亚洲图片 | 美女一二三区 | 少妇bbw搡bbbb搡bbb | av手机版 | a电影免费看 | 久久99精品国产99久久6尤 | 中文字幕免费看 | 黄色精品久久久 | 看毛片的网址 | 亚洲va欧美va国产va黑人 | 一区二区三区免费在线播放 | 精品产品国产在线不卡 | 天天射综合网站 | 色婷婷精品大在线视频 | 国产xxxx性hd极品 | 69av在线播放 | 韩国一区二区三区在线观看 | 999免费视频 | 日韩欧美国产免费播放 | 91精品视频在线 | 天天操天天艹 | 手机看片1042 | 在线免费高清一区二区三区 | 中文字幕国产精品一区二区 | 国内精品久久久精品电影院 | 一区二精品 | 在线免费高清一区二区三区 | 91九色在线视频 | 综合成人在线 | 天天射射天天 | 久久免费视频4 | 中文超碰字幕 | 亚洲成人黄色网址 | 成人黄色在线 | 91在线看网站 | 808电影免费观看三年 | 亚洲成人在线免费 | 午夜精品久久久久久久99 | 国产精品成人自产拍在线观看 | 亚洲视频在线免费观看 | 久久婷婷一区二区三区 | 午夜视频在线瓜伦 | 国产在线视频导航 | 一区二区三区日韩视频在线观看 | 精品在线99 | 狠狠狠色狠狠色综合 | 免费看国产精品 | 国产高清一区二区 | 久久99这里只有精品 | 欧美男女爱爱视频 | 亚洲精品免费在线观看视频 | 欧美一级片免费 | 一区二区欧美在线观看 | 国产剧情一区二区 | 美女网站视频免费黄 | 亚洲日日日| 91精品视频免费在线观看 | 狠狠干夜夜操天天爽 | 麻豆视频免费看 | 久久国产精品免费一区二区三区 | 狠狠躁夜夜躁人人爽超碰91 | 久久精品视频国产 | 日韩三级成人 | 成人性生交大片免费观看网站 | 精品欧美一区二区精品久久 | 四虎成人精品永久免费av | 成人久久国产 | 欧美精品小视频 | 日韩免| 国产成人一区二区三区免费看 | 午夜色大片在线观看 | 成人在线黄色 | 中文字幕av免费观看 | 又黄又爽又色无遮挡免费 | 四川bbb搡bbb爽爽视频 | 日本久久精品视频 | 久久免费看av | 人人搞人人爽 | 丁香婷婷激情啪啪 | 久久99精品久久久久久 | 久草视频免费 | 久久精品观看 | 亚洲精品视频久久 | 亚洲网站在线 | 日本久热 | 中文字幕在线观看资源 | 狠狠操操操 | 精品国产亚洲在线 | 午夜av免费在线观看 | 日日干夜夜草 | 国产精品久久久久久一区二区三区 | 中文字幕av在线电影 | 91在线麻豆 | 超碰97人人爱 | 在线中文字幕一区二区 | 国产精品九色 | 在线欧美a | 亚州性色 | 色 中文字幕 | 免费在线观看av片 | 国产黄色大全 | 国产麻豆剧果冻传媒视频播放量 | 久久免费视频8 | 久久久久综合网 | 人人模人人爽 | 欧美性生活免费看 | 精品久久1 | 日韩中文久久 | 久久国产香蕉视频 | 国产精品网红福利 | 久草在线视频免赞 | 中文字幕电影高清在线观看 | www.com久久久 | 国产免费中文字幕 | 久久精品精品电影网 | 国产精品午夜久久 | 国产精品免费在线播放 | 亚州精品在线视频 | 国产精品久久久久久久久久了 | 视频 国产区 | 婷婷在线免费观看 | www.黄色网.com| 激情综合网五月婷婷 | 精品免费久久久久久 | 久久久久久久久国产 | 91精品办公室少妇高潮对白 | 丝袜少妇在线 | 日韩一区正在播放 | 精品国产乱码久久久久久1区2匹 | 日韩在线观看小视频 | 国产精品美女久久久久久久 | 国产色啪| 人人爽人人插 | 欧美精品久久久久久久免费 | www免费视频com | 丁香六月婷婷开心 | 亚洲va欧美va人人爽春色影视 | 黄色软件在线观看免费 | 97在线视 | 国产福利一区在线观看 | 日韩在线 一区二区 | av网站在线观看免费 | 日本爱爱免费 | 性色va | 国产真实精品久久二三区 | 精品在线视频一区 | 亚洲成人av免费 | a电影在线观看 | 国产夫妻性生活自拍 | 日韩一二三在线 | 国产一级二级视频 | 日韩精品免费 | 亚洲综合激情 | 免费99视频 | 欧美亚洲专区 | 欧美日韩高清一区二区三区 | 久久神马影院 | 中文字幕在线视频免费播放 | 激情五月婷婷综合网 | av网站在线观看免费 | 久久久久久久久影视 | 91成人在线免费观看 | 国产成人av在线 | 国产人成在线视频 | 久久这里只有精品23 | 日韩v欧美v日本v亚洲v国产v | 日韩最新中文字幕 | 国产区精品在线观看 | 日本精品免费看 | 69久久99精品久久久久婷婷 | 91高清完整版在线观看 | 久久a国产 | 麻花传媒mv免费观看 | 日韩欧美视频一区二区 | 999电影免费在线观看 | 久久尤物电影视频在线观看 | 亚洲国产福利视频 | 国产人成精品一区二区三 | 国产亚洲在线 | 久久日本视频 | 高清日韩一区二区 | 99精品电影 | 在线91视频 | 三级a视频 | 又黄又爽免费视频 | 国产精品18videosex性欧美 | 亚洲精品综合久久 | 国产精品高潮呻吟久久久久 | 91麻豆国产 | 久久9视频| av大全在线看| 亚洲区色 | 久久久久成人精品 | 黄色片视频在线观看 | 久久蜜臀一区二区三区av | 免费影视大全推荐 | www操操| 国产中年夫妇高潮精品视频 | 久艹视频免费观看 | 国产午夜视频在线观看 | 午夜免费福利片 | 国产97在线播放 | 亚洲人人精品 | 久艹视频在线免费观看 | 日韩一区二区三区观看 | 久久99久久99精品免视看婷婷 | 91久久精品一区二区三区 | 色妞色视频一区二区三区四区 | 久久99中文字幕 | 久久婷婷激情 | 五月av在线 | 国产xvideos免费视频播放 | 五月天视频网站 | 亚洲国内精品在线 | 婷婷丁香久久五月婷婷 | 美女久久 | 最新真实国产在线视频 | 少妇性aaaaaaaaa视频 | 国产精品久久久久久久久久久不卡 | 中文国产成人精品久久一 | 国内精品久久久久久中文字幕 | 天无日天天操天天干 | 国产在线观看a | 久久经典国产 | 国产精品美女久久久网av | 91大神视频网站 | 高清美女视频 | 免费在线一区二区三区 | 色开心| 欧美少妇xx| 日日操操操 | 99 色| 精品福利在线视频 | 久久成人国产精品 | 久草精品视频在线观看 | 成人xxxx | 夜夜操天天干, | 亚洲国产欧美在线人成大黄瓜 | 欧美福利视频一区 | 91正在播放| av天天色| ww视频在线观看 | 日韩免费电影一区二区 | 国产九九热视频 | 国产在线观看免费观看 | 久久久久久久久黄色 | 国产亚洲精品美女久久 | 国产精品欧美一区二区三区不卡 | 天天av资源 | 婷婷av电影 | av不卡免费在线观看 | 999久久国产 | 精品一区二区免费 | 精品99免费视频 | 精品国产一区二区三区av性色 | 99热这里只有精品1 av中文字幕日韩 | 丁香五月网久久综合 | 国产亚洲在线观看 | 日日弄天天弄美女bbbb | 91日韩在线播放 | 久久成人高清视频 | 婷婷五月情| 日韩欧美高清在线观看 | 成人免费视频播放 | 免费在线看v | 国产污视频在线观看 | 成人黄色电影在线 | 国产免费视频一区二区裸体 | 99热精品国产一区二区在线观看 | 免费在线黄网 | 在线看片中文字幕 | 色欧美88888久久久久久影院 | 欧美va天堂va视频va在线 | 91视频麻豆| 天天色成人 | 久久精品99视频 | 成人av一区二区兰花在线播放 | 日韩69av| 黄色av一区二区 | 成人小视频在线观看免费 | 国产免费xvideos视频入口 | 日韩高清一区 | 国产精品成人久久 | 欧美在线观看视频一区二区三区 | 夜色资源网 | 久草在线手机观看 | 最近日本韩国中文字幕 | 最近中文字幕免费视频 | 精品视频免费在线 | 天天曰夜夜爽 | 国产r级在线观看 | 亚洲精品美女久久 | 色91av | 狠狠久久婷婷 | 丁香视频免费观看 | 热99在线视频 | 在线免费精品视频 | 国产剧情一区二区在线观看 | 在线观看国产www | 婷婷免费在线视频 | 久久经典国产视频 | 6080yy精品一区二区三区 | 国产精品欧美日韩在线观看 | 国产亚洲片 | 在线亚洲天堂网 | 国产精品久久久久影院 | 欧美va在线观看 | 三级毛片视频 | 日韩精品一区二区在线 | 精品人人爽 | 亚洲第一中文字幕 | 日韩系列在线 | 欧美一级视频在线观看 | 日日操天天爽 | 成人一区二区三区在线观看 | 日韩av伦理片 | 国产一区在线视频观看 | 麻豆视频在线免费看 | 国产99久久久久久免费看 | 亚洲高清视频在线观看免费 | av解说在线 | 国产探花视频在线播放 | 久久都是精品 | 韩国av在线| www.com黄色| 黄色精品久久久 | 伊人五月在线 | 99久热在线精品视频 | 成人免费看片网址 | 日韩剧情 | 久久久综合香蕉尹人综合网 | 免费看片成人 | 国产精品av免费在线观看 | 久久久精品午夜 | 中文字幕精品一区二区精品 | 亚洲欧美激情精品一区二区 | 久久婷婷精品 | 在线看v片 | 91亚洲永久精品 | 久久天天综合网 | 免费特级黄色片 | 午夜精品久久久久久久久久久 | 国产一区二区在线免费播放 | av无限看 | 国产香蕉视频在线播放 | 99热播精品 | 丁香亚洲| 精品国产一区二区三区蜜臀 | 国产亚洲精品久久 | 国产成人亚洲在线电影 | 成人三级黄色 | 欧美日韩在线精品一区二区 | 久久久精品小视频 | 欧洲色综合 | 人人网av| 日三级在线| 成人黄色电影在线播放 | 99精品欧美一区二区三区黑人哦 | 国产免费视频在线 | 四虎在线视频免费观看 | 免费成人在线电影 | 蜜臀一区二区三区精品免费视频 | 婷婷久久一区二区三区 | 成人午夜电影在线播放 | 在线你懂 | 亚洲综合激情 | 精品国产免费一区二区三区五区 | 四虎国产精品成人免费影视 | 国产精品永久久久久久久www | 九九热只有精品 | 久久综合久久综合这里只有精品 | 在线观看日韩专区 | 91网页版免费观看 | 在线超碰av | 麻豆传媒视频在线播放 | 亚洲三级精品 | 日本黄区免费视频观看 | 国产自制av| 天天操天天爽天天干 | 亚洲六月丁香色婷婷综合久久 | 人人玩人人添人人澡超碰 | 亚洲精品欧洲精品 | 美女网站视频久久 | 国产精久久 | 免费在线观看成人小视频 | 国产精品久久久久久久久久直播 | 欧美一区二区免费在线观看 | 在线观看视频免费大全 | 99久久久免费视频 | 九九免费在线观看 | 国产高清在线免费视频 | 免费色视频网站 | 亚洲精品国产品国语在线 | 91在线国内视频 | 精品色综合 | 91污污视频在线观看 | 日韩精品一区二区三区高清免费 | 99色视频 | 欧美一级高清片 | 狠狠色狠狠色合久久伊人 | 国产美女精品人人做人人爽 | 国产精品久久久久久久久久久久久久 | 啪啪激情网| 久久精品视频播放 | 成年人免费在线观看网站 | av短片在线| 国产精品欧美久久久久三级 | 国产日产在线观看 | 日韩久久视频 | 成人一级黄色片 | 亚洲日本韩国一区二区 | 午夜精品av | 日韩欧美极品 | 精品在线播放视频 | 亚洲丝袜中文 | 国产精品18久久久久白浆 | 狠狠色丁香婷婷综合久小说久 | 超碰人人在线观看 | 日韩欧美99 | 九月婷婷色| 国产一区在线免费观看视频 | 激情狠狠干 | 亚洲精品乱码久久久久 | 天天射天天做 | 中文字幕在线观看一区二区 | 欧美性护士 | 中午字幕在线 | 日韩中文在线电影 | 日韩色区| 日韩大片在线免费观看 | 麻豆视频在线免费看 | 久久精品综合网 | 中日韩在线 | 欧美热久久 | 在线观看你懂的网站 | 2019中文字幕网站 | 国产精品不卡一区 | 一本一道久久a久久精品蜜桃 | 亚洲国产成人av网 | 国产黄色大片免费看 | 日韩一二区在线 | 日韩免费区 | 久久99精品久久久久婷婷 | 国产在线最新 | 99视频这里只有 | 国产精品久久久久久久久久了 | 日本在线观看中文字幕无线观看 | 丁香婷婷激情 | 97成人免费视频 | 精品高清美女精品国产区 | 一色屋精品视频在线观看 | 国产偷在线| 国产精品18久久久久vr手机版特色 | 91入口在线观看 | av一区在线| 午夜精品久久久久久久久久久 | 久操操| 欧美日韩视频免费 | 中文字幕视频免费观看 | 日日爱网站 | 在线观看日韩免费视频 | 国产这里只有精品 | 99精品视频免费看 | 久久久精品午夜 | 日韩欧美在线观看 | 涩五月婷婷 | 国产成人免费av电影 | 日韩高清网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 精品亚洲二区 | 国产淫片 | 免费黄色在线网址 | 久青草视频在线观看 | 国产亚洲精品电影 | 国产精品va| 亚洲三级黄色 | 欧美黑人性爽 | 最新真实国产在线视频 | 99色视频在线 | 一区中文字幕在线观看 | www色网站 | 九九av | 婷婷激情站 | 国产99久久久精品视频 | 亚洲精品久| 成在人线av| 五月婷婷中文网 | 国产一区二区三区午夜 | 国产黄色精品 | 国产网站av | 91视频三区| 日韩一区二区在线免费观看 | 免费日韩视频 | 国产麻豆成人传媒免费观看 | 在线播放国产精品 | 久久久久国产a免费观看rela | 久久精品这里精品 | 黄色在线观看污 | 免费看久久 | 久久不卡国产精品一区二区 | 麻豆视频入口 | 不卡日韩av| 五月综合 | 免费看国产一级片 | 超碰在线人人97 | 999超碰 | 国产精品一区二区三区观看 | 久久精品99国产国产 | 国内精品视频免费 | 日韩videos| 国产精品激情 | 韩日视频在线 | 免费观看xxxx9999片 | 国产成人黄色 | 青草视频在线 | av午夜电影 | 国产999精品久久久久久绿帽 | 国产打女人屁股调教97 | 国产手机在线观看视频 | 97干com| 日韩在线观看你懂的 | 日韩一级电影网站 | 午夜久久影院 | 日韩免费观看高清 | 日韩网站在线 | 欧美精品久久久久久久 | 97精品国产91久久久久久久 | 成片免费观看视频999 | 欧美精品在线观看 | 欧美精品一区二区在线播放 | 国产精品一区二区三区电影 | 亚洲精品乱码久久久久久按摩 | 国产精品99久久久 | 中文十次啦 | 波多野结衣日韩 | 天天操天天色天天 | 国产成人av| 97视频中文字幕 | 久热免费在线 | 可以免费观看的av片 | 欧美孕交vivoestv另类 | 综合激情av | 国产黄色看片 | 黄污网站在线 | 久草视频在线播放 | 人人草人人草 | 欧美精品中文字幕亚洲专区 | 808电影 | 一区二区精品在线 | 国产亚洲精品美女 | 激情欧美日韩一区二区 | 国产老妇av | 四虎成人精品永久免费av九九 | 韩国精品福利一区二区三区 | 久久精品艹 | 久久国产品 | 亚洲三级毛片 | 精品999在线观看 | 亚洲视频免费视频 | 亚洲情感电影大片 | 色综合久久久久综合99 | 国产青草视频在线观看 | 国产伦理一区 | 一级片观看 | 99免费精品 | 亚洲在线网址 | 97视频总站 | 在线网站黄 | 最新亚洲视频 | 精品国产成人在线影院 | 国产中文在线视频 | 91av官网 | 三级av小说| 国产精品久久久久久久久久久久午夜 | 国产乱码精品一区二区三区介绍 | 久久天天躁 | 欧美日韩精品在线视频 | 国产一级h | 狠狠黄| 欧美久久久久久久久久 | 免费看黄色91 | a资源在线| 国产精品成人久久 | 久久久久久久久久久黄色 | av免费在线网站 | 天天操天天干天天操天天干 | 久久久黄色| 天天摸天天干天天操天天射 | 日日干美女| 国产在线观看h | 日韩精品资源 | 亚洲一区二区三区毛片 | 五月激情丁香图片 | 日韩网站在线播放 | 日本精品视频在线观看 | 日韩中文字幕a | 在线看片日韩 | 国产高清视频在线免费观看 | 五月天九九 | 国产精品久久99精品毛片三a | 91九色精品女同系列 | 精品一区二区久久久久久久网站 | 美女福利视频一区二区 | 久草在线一免费新视频 | 婷婷在线看 |