├── .gitignore
├── static
├── preview.png
└── date-picker
│ └── gif.gif
├── main.js
├── App.vue
├── pages.json
├── ReleaseNote.md
├── manifest.json
├── README.md
├── pages
└── index
│ └── index.vue
└── components
└── date-picker
└── date-picker.vue
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | unpackage/*
3 | *.zip
4 | *.rar
--------------------------------------------------------------------------------
/static/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangdaren/uni-app-date-picker/HEAD/static/preview.png
--------------------------------------------------------------------------------
/static/date-picker/gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangdaren/uni-app-date-picker/HEAD/static/date-picker/gif.gif
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 |
4 | Vue.config.productionTip = false
5 |
6 | App.mpType = 'app'
7 |
8 | const app = new Vue({
9 | ...App
10 | })
11 | app.$mount()
12 |
--------------------------------------------------------------------------------
/App.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/pages.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
3 | {
4 | "path": "pages/index/index",
5 | "style": {
6 | "navigationBarTitleText": "uni-app datePicker"
7 | }
8 | }
9 | ],
10 | "globalStyle": {
11 | "navigationBarTextStyle": "black",
12 | "navigationBarTitleText": "uni-app",
13 | "navigationBarBackgroundColor": "#F8F8F8",
14 | "backgroundColor": "#F8F8F8"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ReleaseNote.md:
--------------------------------------------------------------------------------
1 | # 历史更新记录
2 | ======================================
3 |
4 | ## v1.0.17(20191020)
5 | * 新增动态调整初始日期,调整startDate和endDate绑定的值即可,示例有做描述
6 |
7 | ## v1.0.16(20190928)
8 | * 修复H5确认按钮被覆盖的bug
9 |
10 | ## v1.0.15(20190824)
11 | * 新增singleDate模式,可以选择单个日期,赋值使用startDate,后面会支持选择今天之前的日期(架构需要做大的调整才行)
12 | * 修复非今年的星期有误的bug
13 |
14 | ## v1.0.14(20190613)
15 | * 修复星期不对的问题(┑( ̄Д  ̄)┍,几个版本终于修复好)
16 | * 小修小补,支持显示今天、明天、后天。
17 |
18 | ## v1.0.13(20190604)
19 | * [新增] 主题颜色支持修改:修改date-picker.vue里$themeColor的值即可,暂未想到更好的方法,欢迎给意见~
20 | * [新增] 支持回填数据,参数为startDate和endDate,仅支持字符串,如"2019-06-05",已做好防错处理(如小于今天的情况,开始时间在结束时间之后的情况等)
21 | * [新增] 支持修改总共显示多少天,参数daysCount,范围为60 < x < 360,考虑到性能,将最大天数限制在360天内
22 | * 修复首月星期显示不对的问题
23 |
24 | ## v1.0.12(20190523)
25 | * 修改完成按钮显示逻辑,根据是否选择日期来决定完成按钮显示状态,避免选择单个日期产生的bug(之前参考某网友建议,设置按钮为常开,现修改按钮为按需显示,与美图保持一致,特此说明。)
26 | * 修改显示逻辑,支持onBackPress()事件
27 |
28 | ## v1.0.11(20190523)
29 | * 修复星期显示问题
30 |
31 | ## v1.0.10(20190523)
32 | * 隐藏日期上面的星期显示(忙乱中忘记改回去了)
33 |
34 | ## v1.0.9(20190522)
35 | * 回调里,新增日期的星期参数
36 |
37 | ## v1.0.8(20190522)
38 | * 新增支持无界面、纯弹窗模式,代码如``` html```,modal设为true,通过属性show来控制显示/隐藏
39 | * 修复最新小程序报错的问题(Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors)
40 | * 修复多次弹出弹窗后,重置天数为1的问题
41 | * 修复样式问题
42 |
43 | ## v1.0.7(20190521)
44 | * 解决月星期显示不对的问题,感谢网友指正
45 | * 适配最新自定义组件编译模式,如遇小程序/app不能正常使用时,请下载最新版
46 |
47 | ## v1.0.6(20190403)
48 | * 解决日期显示禁用的重大bug(感谢976996406@qq.com反馈)
49 | * 解决时间显示错误的问题。
50 | * 近段时间有点忙,时间回显的功能看了看还需要点时间。
51 |
52 | ## v1.0.5(20190322)
53 | * 小众问题修改
54 |
55 | ## v1.0.4
56 | * 组件内view设置为flex布局,防止样式污染
57 |
58 | ## v1.0.3
59 | * 回调参数修改
60 |
61 | ## v1.0.2
62 | * 支持H5平台
63 |
64 | ## v1.0.1
65 | * 增加change事件,回调函数里返回所选区间和入住的时间(即几晚)
66 | * 限制只能点击确认按钮选择日期,点击遮罩或点击x都会重置时间到选择之前的数据
67 |
68 | ## v1.0.0
69 | * 初次提交
70 |
71 |
72 | ## Future
73 | * 无标签式启动
74 | * 配置参数:颜色
75 | * ps:因近段时间较忙,节后将尽快更新。
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "datePicker",
3 | "appid": "",
4 | "description": "",
5 | "versionName": "1.0.0",
6 | "versionCode": "100",
7 | "transformPx": false,
8 | "app-plus": {
9 | "usingComponents": true,
10 | "nvueCompiler": "uni-app", //是否启用 uni-app 模式
11 | /* 5+App特有相关 */
12 | "modules": {},
13 | /* 模块配置 */
14 | "distribute": {
15 | /* 应用发布信息 */
16 | "android": {
17 | /* android打包配置 */
18 | "permissions": [
19 | "",
20 | "",
21 | "",
22 | "",
23 | "",
24 | "",
25 | "",
26 | "",
27 | "",
28 | "",
29 | "",
30 | "",
31 | "",
32 | "",
33 | "",
34 | "",
35 | "",
36 | "",
37 | "",
38 | "",
39 | "",
40 | ""
41 | ]
42 | },
43 | "ios": {},
44 | /* ios打包配置 */
45 | "sdkConfigs": {}
46 | }
47 | },
48 | /* SDK配置 */
49 | "quickapp": {},
50 | /* 快应用特有相关 */
51 | "mp-weixin": {
52 | /* 小程序特有相关 */
53 | "appid": "",
54 | "setting": {
55 | "urlCheck": true
56 | },
57 | "usingComponents": true
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # uni-app-date-picker
2 | uni-app 酒店日期选择插件
3 |
4 | 功能基本参照美团APP来实现的,期间因uniapp框架限制,判断代码只能长串写在标签上,导致元素也增了许多,性能和操控受影响,因而将滑动固定月份标题功能砍掉了,后续再考虑加入。
5 |
6 | 说明:目前支持APP、微信小程序和H5平台。其他平台未测试,理论支持
7 |
8 |
9 | ##### 大更新:新增支持无界面、纯弹窗模式。
10 | ##### 代码如:
11 | ``` html```
12 | ##### 使用方式:modal设为true,通过属性show来控制显示/隐藏
13 |
14 |
15 | 部分代码来源于:[https://github.com/zrxisme/date-for-wx](https://github.com/zrxisme/date-for-wx)。
16 |
17 | 反馈问题请描述所使用的平台和重现步骤,谢谢~~
18 |
19 |
20 | ---
21 | ## 回调函数示例:
22 |
23 | ``` html
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {{ dateStr }}
32 |
33 | ```
34 |
35 |
36 |
37 | ``` javascript
38 | export default {
39 | data() {
40 | return {
41 | showCaledar: false,
42 | dateStr: ''
43 | };
44 | },
45 | components: {
46 | calendar
47 | },
48 | methods: {
49 | change({ choiceDate, dayCount }) {
50 | //参数解释
51 | //1.choiceDate 时间区间(开始时间和结束时间)
52 | //2.dayCount 共多少晚
53 |
54 | console.log(choiceDate, dayCount);
55 | console.log('入住从 ' + choiceDate[0].re + ' 到 ' + choiceDate[1].re + ' 共 ' + dayCount + ' 晚');
56 | },
57 | change2({ choiceDate, dayCount }) {
58 | this.dateStr = '入住从 ' + choiceDate[0].re + ' (星期' + choiceDate[0].week + ') 到 ' + choiceDate[1].re + '(星期' + choiceDate[1].week + ')' + ' 共 ' + dayCount + ' 晚 ';
59 | }
60 | }
61 | }
62 | ```
63 |
64 |
65 | ---
66 | ## 参数示例:
67 | | 属性名 | 类型 | 默认值 | 说明 |
68 | |---|---|---|---|
69 | | modal | Boolean | false | 是否为弹窗模式,默认为false|
70 | | show | Boolean | false | 是否显示弹窗(与modal一起使用),默认为false|
71 | | singleDate | Boolean | false | 表示是否只选择一个日期,默认为false |
72 | | startDate | String | 今天 | 开始时间,默认为今天|
73 | | endDate |String |明天 | 开始时间,默认为明天 |
74 | | daysCount | String | 150天 | 显示的天数范围: 60 < x < 360(从今天算起) |
75 | | change | EventHandle | | 选择日期后的回调事件,event.detail = {choiceDate: value1,dayCount:value2} |
76 |
77 | ---
78 | ## 效果图:
79 | 
80 |
81 |
82 | ## TODO
83 | * 选中的日期可能会被挡掉
84 | * 语种
85 | * nvue版本
86 | * 历史时间选择(优先级低)
87 | -------------------------
88 | 弹窗模式上,不能根据show变量来显示/隐藏
89 | ------------------------
90 |
91 | ---
92 | ## 更新历史说明:
93 | ## v1.0.20(20201029)
94 | * 修复2021没有假日数据出错的问题
95 |
96 | ## v1.0.19(20200110)
97 | * 增加法定节假日和补班的显示,替换之前的假日显示,更符合国情
98 | * 优化dayCount为从今天开始算起
99 |
100 | ## v1.0.18(20191107)
101 | * 修复单个日期显示错误
102 | * 修复app平台上弹窗模式,没有完成按钮
103 |
--------------------------------------------------------------------------------
/pages/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 酒店日期选择插件
4 |
5 |
6 | 1.组件模式(有界面)
7 |
8 |
9 |
10 |
11 | 2.组件模式(有界面)-->单个日期选择
12 |
13 |
14 |
15 |
16 | 3.弹窗模式(无界面)
17 | 需要设置modal为true(默认为false), 通过show来控制隐藏还是显示
18 |
19 | {{ dateStr }}
20 |
21 |
22 |
23 |
24 |
25 |
84 |
85 |
149 |
--------------------------------------------------------------------------------
/components/date-picker/date-picker.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ choiceDate[0].year }}年{{ choiceDate[0].month }}月{{ choiceDate[0].day }}日
5 |
6 | 入住
7 | {{ choiceDate[0].month }}月{{ choiceDate[0].day }}日
8 | 今天
9 | 离店
10 | {{ choiceDate[1].month }}月{{ choiceDate[1].day }}日
11 |
15 | 明天
16 |
17 | {{ dayCount2 }}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
30 |
31 |
32 |
33 | {{ item }}
34 |
35 |
36 |
37 |
38 |
39 | {{ monthData[0].year + '年' + monthData[0].month + '月' }}
40 |
41 |
42 |
58 |
59 |
60 |
61 | {{ getDayType(data) }}
62 | {{ getDayType(data) }}
63 | {{ getDayType(data) }}
64 |
65 | {{ getDayName(monthData[0].year, data) }}
66 |
67 | {{ data.act.tip }}
68 |
69 | 请选择离店日期
70 | {{ dayCount2 }}
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
860 |
861 |
1290 |
--------------------------------------------------------------------------------