美文网首页
2021-04-20

2021-04-20

作者: 过年好_ | 来源:发表于2021-04-20 13:18 被阅读0次

    作者:zlf_j
    链接:https://www.jianshu.com/p/3e652dc44633
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    引用怕自己找不到

    一、下载

    npm install vue-fullcalendar
    
    

    https://www.jianshu.com/p/1b4858e06662

    二、显示在页面上

    1、main.js

    import FullCalendar from 'vue-fullcalendar'
    Vue.use(FullCalendar)
    
    

    2、用到日历的组件

    <template>
    <div>
       <full-calendar :events="monthData" class="test-fc"
                         first-day='1' locale="fr"
                         @changeMonth="changeMonth"    // 切换月时的事件,可自己定义事件
                         @eventClick="eventClick"      // 点击当天的事件,可自己定义事件
                         @dayClick="dayClick"          // 点击当月的事件,可自己定义事件
                         @moreClick="moreClick"></full-calendar>    // 点击 more, 展示当天所有事件,可自己定义事件
    </div>
    </template>
    <script>
    import { FullCalendar } from 'vue-fullcalendar'
    export default {
      data() {
          return {
            monthData: []
          }
      },
      methods: {
         // 选择月份
          changeMonth (start, end, current) {
           console.log('changeMonth', start.format(), end.format(), current.format())
          },
          // 点击事件
          eventClick (event, jsEvent, pos) {
            console.log('eventClick', event, jsEvent, pos)
          },
          // 点击当天
          dayClick (day, jsEvent) {
             console.log('dayClick', day, jsEvent)
          },
          // 查看更多
          moreClick (day, events, jsEvent) {
            console.log('moreCLick', day, events, jsEvent)
          },
      },
      components: {
          'full-calendar': require('vue-fullcalendar')
      },
    </script>
    
    

    参考:https://github.com/Wanderxx/vue-fullcalendar

    3、事件返回的值,可依照以下格式(可以添加值,显示出来的值,可从插件中自行修改)

    monthData: [
        {
          title : 'eeeeeeeee',  // 事件内容
          start : '2018-12-11', // 事件开始时间
          end : '2018-12-30',   // 事件结束时间
          cssClass: 'red'       // 事件的样式   class名(由后台返回数据)  red为自己定义的class名
        },
        {
          title : 'sssss',
          start : '2018-12-25',
          end : '2018-12-30',
          cssClass: 'blue'  
        },
        {
          title : 'dddddddd',
          start : '2018-12-09',
          end : '2018-12-30',
          cssClass: 'blue'  
        },
        {
          title : 'cccccc',
          start : '2018-12-20',
          end : '2018-12-30'
          cssClass: 'red'  
        },
        {
          title : 'aaaaaa',
          start : '2018-12-01',
          end : '2018-12-30',
          cssClass: 'red'  
        },
        {
          title : 'bbbbbb',
          start : '2018-12-05',
          end : '2019-1-10',
          cssClass: 'blue'
        }
      ]
    
    <style>
    .red {
      background: red;
    }
    .blue {
      background: blue;
    }
    </style>
    
    

    4、修改点击事件(添加删除等功能,可以通过插件所给事件自行修改)

    5、插件显示效果

    image

    6、注意:

    如果要修改插件内容的话,尽量不要通过下载引入,可在改完后,将插件引入assets中(即在本地引入),以防代码更新覆盖掉已修改的内容。

    个人用法

    • npm install vue-fullcalendar 下载插件,只引用node_modules/vue-fullcalendar/src文件夹,改名为vue-fullcalendar

    • 修改下载的插件,并在本地引入(不是全局引入),是为了防止 npm install 覆盖掉修改
      的内容。

    • 按以下结构引入了src/assets中

      image
    • 可以执行 npm uninstall vue-fullcalendar 将下载的日历插件删掉(不需要全局调用)

    • 引用日历的组件

    import FullCalendar from '../../../../assets/vue-fullcalendar/fullCalendar.vue'
    export default {
        ......
        components: {
            'full-calendar': FullCalendar
        },
    }
    
    
    • 修改案例:(改本地引入的vue-fullcalendar)

    1、修改 点击更多时,显示的内容及样式 (body.vue)
    判断显示title还是content值,cssClass为后台返回,用于自定义样式

    image
    // 当前日历的数据(后台返回)
    [{
      content: "BBB [ 研发3 ] 002003 / 难度:D / 结束时间:2019-05-23"
      cssClass: "B"
      end: "2019-05-23"
      field_shot_number: "002003"
      id: 1154
      project_id: 4
      start: "2019-03-26"
      status: 1
      title: "BBB [ 研发3 ] 002003"
      type: 0
    }]
    // 代码
            <div class="more-body">
              <ul class="body-list">
                <li v-for="event in selectDay.events"
                  v-show="event.isShow" :class="event.cssClass"
                  @click="dayClick(event,$event)">
                  {{event.content ? event.content: event.title}}
                </li>
              </ul>
            </div>
    
    
    image

    2、修改 日历中的 more,改为当天事件个数(body.vue)

    image
    // 代码
    <!--显示条数-->
                  <p v-if="day.events.length > eventLimit"
                     class="more-link" @click.stop="selectThisDay(day, $event)">
                    {{day.events.length - getEventsLength(day.events)}} 条
                  </p>
    <!--获取事件个数-->
    methods : {
          getEventsLength (events) {
            let arr = []
            events.forEach((item, index) => {
              if (item.isShow == false) {
                arr.push(item)
              }
            }, this)
            return arr.length
          }
    }
    
    
    image

    3、修改日历中的中文英文

    image

    4、修改日历上的内容(body.vue)
    文章用以下方法定义内容
    {{isBegin(event, day.date, day.weekDay)}}

    image image

    event.title即为日历上展示的文字,后台返回数据时,可以用title直接返回,也可以自己定义参数名。可以参考上面的数据结构

    5、修改点击日历事件,弹框展示的数据(直接修改插件body.vue中的如图部分)

    image
    • 报错:

    failed to mount component :template or render function

    • 解决办法:
      修改 fc-body和fc-header的引入方法:
      fullCalendar.vue
    import header from './components/header.vue'
    import body from './components/body.vue'
    
     export default {
       components : {
          'fc-body'   : body,
          'fc-header' : header
        }
    }
    

    相关文章

      网友评论

          本文标题:2021-04-20

          本文链接:https://www.haomeiwen.com/subject/wfcnlltx.html