• uView Calendar 日历


    此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。

    注意: 此组件与Picker 选择器的日期选择模式有一定的重合之处,区别在于本组件为更专业的日期选择场景,能选择日期范围等。 另外Picker组件的日期模式可以配置更多的参数,如时、分、秒等,可以根据不同的使用场景进行选择。

    #平台差异说明

    App(vue)App(nvue)H5小程序

    #基本使用

    • 通过show绑定一个布尔变量用于打开或收起日历弹窗。
    • 通过mode参数指定选择日期模式,包含单选/多选/范围选择。
    1. <template>
    2. <view>
    3. <u-calendar :show="show"></u-calendar>
    4. <u-button @click="show = true">打开</u-button>
    5. </view>
    6. </template>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. show: false,
    12. }
    13. }
    14. }
    15. </script>

    copy

    #日历模式

    • modesingle只能选择单个日期
    • modemultiple可以选择多个日期
    • moderange可以选择日期范围

    #单个日期模式

    选择日期后,需要点击底部的确定按钮才能触发回调事件,回调参数为一个数组,有如下属性:

    ["2021-07-01"]
    

    copy

    示例代码:

    1. <template>
    2. <u-calendar :show="show" :mode="mode" @confirm="confirm"></u-calendar>
    3. </template>
    4. <script>
    5. export default {
    6. data() {
    7. return {
    8. show: true,
    9. mode: 'single'
    10. }
    11. },
    12. methods: {
    13. confirm(e) {
    14. console.log(e);
    15. }
    16. }
    17. }
    18. </script>

    copy

    #多个日期模式

    选择日期后,需要点击底部的确定按钮才能触发回调事件,回调参数为一个数组,有如下属性:

     ["2021-07-27", "2021-07-29", "2021-07-30"]
    

    copy

    示例代码:

    1. <template>
    2. <u-calendar :show="show" :mode="mode" @confirm="confirm"></u-calendar>
    3. </template>
    4. <script>
    5. export default {
    6. data() {
    7. return {
    8. show: true,
    9. mode: 'multiple'
    10. }
    11. },
    12. methods: {
    13. confirm(e) {
    14. console.log(e);
    15. }
    16. }
    17. }
    18. </script>

    copy

    #日期范围模式

    此模式用于选择一个日期范围,比如住酒店的入住到离店的日期范围,

    此模式的返回参数如下:

    ["2021-07-27", "2021-07-28", "2021-07-29", "2021-07-30", "2021-07-31"]
    

    copy

    示例代码:

    1. <template>
    2. <u-calendar :show="show" :mode="mode" @confirm="confirm"></u-calendar>
    3. </template>
    4. <script>
    5. export default {
    6. data() {
    7. return {
    8. show: true,
    9. mode: 'range'
    10. }
    11. },
    12. methods: {
    13. confirm(e) {
    14. console.log(e);
    15. }
    16. }
    17. }
    18. </script>

    copy

    #自定义主题颜色

    组件可传入color参数,更改组件主题色

    示例代码:

    1. <template>
    2. <u-calendar :show="show"
    3. color="#f56c6c" :mode="mode" @confirm="confirm"></u-calendar>
    4. </template>
    5. <script>
    6. export default {
    7. data() {
    8. return {
    9. show: true,
    10. mode: 'range'
    11. }
    12. },
    13. methods: {
    14. confirm(e) {
    15. console.log(e);
    16. }
    17. }
    18. }
    19. </script>

    copy

    #自定义文案

    组件可以通过formatter以函数的方式定义日期文案

    注意:

    微信小程序不支持通过props传递函数参数,所以组件内部暴露了一个setFormatter方法用于设置格式化方法,注意在页面的onReady生命周期获取ref再操作。

    1. <template>
    2. <u-calendar
    3. startText="住店"
    4. endText="离店"
    5. confirmDisabledText="请选择离店日期"
    6. :formatter="formatter"
    7. :show="show"
    8. :mode="mode"
    9. @confirm="confirm"
    10. ref="calendar"
    11. >
    12. </u-calendar>
    13. </template>
    14. <script>
    15. export default {
    16. data() {
    17. return {
    18. show: true,
    19. mode: 'range'
    20. }
    21. },
    22. onReady() {
    23. // 如果需要兼容微信小程序的话,需要用此写法
    24. this.$refs.calendar.setFormatter(this.formatter)
    25. },
    26. methods: {
    27. confirm(e) {
    28. console.log(e);
    29. },
    30. formatter(day) {
    31. const d = new Date()
    32. let month = d.getMonth() + 1
    33. const date = d.getDate()
    34. if(day.month == month && day.day == date + 3)
    35. {
    36. day.bottomInfo = '有优惠'
    37. day.dot = true
    38. }
    39. return day
    40. }
    41. }
    42. }
    43. </script>
    44. <style lang="scss" scoped>
    45. .title{
    46. color: $u-primary;
    47. text-align: center;
    48. padding: 20rpx 0 0 0;
    49. }
    50. </style>

    copy

    #日期最大范围

    组件可以通过maxDate定义日期文案

    1. <template>
    2. <u-calendar
    3. :maxDate="maxDate"
    4. :show="show"
    5. @confirm="confirm">
    6. </u-calendar>
    7. </template>
    8. <script>
    9. const d = new Date()
    10. const year = d.getFullYear()
    11. let month = d.getMonth() + 1
    12. month = month < 10 ? `0${month}` : month
    13. const date = d.getDate()
    14. export default {
    15. data() {
    16. return {
    17. show: true,
    18. maxDate: `${year}-${month}-${date + 10}`,
    19. }
    20. },
    21. methods: {
    22. confirm(e) {
    23. console.log(e);
    24. },
    25. }
    26. }
    27. </script>
    28. <style lang="scss" scoped>
    29. .title{
    30. color: $u-primary;
    31. text-align: center;
    32. padding: 20rpx 0 0 0;
    33. }
    34. </style>

    copy

    #是否显示农历

    组件可以通过showLunar定义是否显示农历

    1. <template>
    2. <u-calendar
    3. showLunar
    4. :show="show"
    5. @confirm="confirm">
    6. </u-calendar>
    7. </template>
    8. <script>
    9. export default {
    10. data() {
    11. return {
    12. show: true,
    13. }
    14. },
    15. methods: {
    16. confirm(e) {
    17. console.log(e);
    18. },
    19. }
    20. }
    21. </script>
    22. <style lang="scss" scoped>
    23. .title{
    24. color: $u-primary;
    25. text-align: center;
    26. padding: 20rpx 0 0 0;
    27. }
    28. </style>

    copy

    #默认日期

    组件可以通过defaultDate定义默认日期

    1. <template>
    2. <u-calendar
    3. :defaultDate="defaultDateMultiple"
    4. :show="show"
    5. mode="multiple"
    6. @confirm="confirm">
    7. </u-calendar>
    8. </template>
    9. <script>
    10. const d = new Date()
    11. const year = d.getFullYear()
    12. let month = d.getMonth() + 1
    13. month = month < 10 ? `0${month}` : month
    14. const date = d.getDate()
    15. export default {
    16. data() {
    17. return {
    18. show: true,
    19. defaultDateMultiple: [`${year}-${month}-${date}`, `${year}-${month}-${date + 1}`, `${year}-${month}-${date + 2}`],
    20. }
    21. },
    22. methods: {
    23. confirm(e) {
    24. console.log(e);
    25. },
    26. }
    27. }
    28. </script>
    29. <style lang="scss" scoped>
    30. .title{
    31. color: $u-primary;
    32. text-align: center;
    33. padding: 20rpx 0 0 0;
    34. }
    35. </style>
  • 相关阅读:
    ElasticSearch面试
    测试一波回归模型的误差
    随机颜色生成器
    传统遗产与技术相遇,古彝文的数字化与保护
    centos7.x本地挂载阿里云oss
    人体微生物是如何进行分布的
    Aria2 for Mac (免HomeBrew)
    [GXYCTF2019]禁止套娃
    不用rustup,Windows下gnu版Rust安装与开发环境配置
    智慧楼宇物联网建设实施方案(1)
  • 原文地址:https://blog.csdn.net/m0_72196169/article/details/135373702