<template>  
 | 
  <view class="main_app">  
 | 
    <template>  
 | 
      <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->  
 | 
      <!-- 日历 -->  
 | 
      <view class="container_b">  
 | 
        <Calendar  
 | 
          ref="Calendar"  
 | 
          :currentTime="currentDate"  
 | 
          :mark="monthMark"  
 | 
          :showLunar="false"  
 | 
          @dayChange="dayChange"  
 | 
          @monthChange="monthChange"  
 | 
          :rangeMode="false"  
 | 
          :maskColor="'#ffffff'"  
 | 
          :dateStart="dateStart"  
 | 
          :dateEnd="dateEnd"  
 | 
          :canDrag="false"  
 | 
        ></Calendar>  
 | 
      </view>  
 | 
      <!--  -->  
 | 
      <view class="card_list">  
 | 
        <view class="card_title">  
 | 
          <view class="name">  
 | 
            <view class="icon"></view>  
 | 
            <view class="text">今日会议</view>  
 | 
          </view>  
 | 
          <view class="meeting">  
 | 
            <view class="text mr24" @click="isShowStatus = true">{{  
 | 
              activeRoom.name  
 | 
            }}</view>  
 | 
            <u-icon name="arrow-down" size="12" color="#999999" />  
 | 
          </view>  
 | 
        </view>  
 | 
        <view class="list">  
 | 
          <view  
 | 
            @click="handleDetail(item.id)"  
 | 
            class="item"  
 | 
            v-for="item in myMeetingList"  
 | 
            :key="item.id"  
 | 
          >  
 | 
            <view class="head">  
 | 
              <view class="name">{{ item.meetingName }}</view>  
 | 
              <view class="status" v-if="item.meetingStatus == '1'"  
 | 
                >未开始</view  
 | 
              >  
 | 
              <view class="status red" v-if="item.meetingStatus == '2'"  
 | 
                >进行中</view  
 | 
              >  
 | 
              <view class="status" v-if="item.meetingStatus == '3'"  
 | 
                >已结束</view  
 | 
              >  
 | 
              <view class="status padding" v-if="item.meetingStatus == '4'"  
 | 
                >即将开始</view  
 | 
              >  
 | 
              <view class="status" v-if="item.meetingStatus == '5'"  
 | 
                >已撤销</view  
 | 
              >  
 | 
            </view>  
 | 
            <view class="line">  
 | 
              <view class="label">会议时间:</view>  
 | 
              <view class="value">{{ item.meetingTime }}</view>  
 | 
            </view>  
 | 
            <view class="line">  
 | 
              <view class="label">会议室:</view>  
 | 
              <view class="value">{{ item.roomName }}</view>  
 | 
            </view>  
 | 
            <view class="line">  
 | 
              <view class="label">预约人:</view>  
 | 
              <view class="value">{{ item.bookingUser }}</view>  
 | 
            </view>  
 | 
            <view class="line">  
 | 
              <view class="label">备注:</view>  
 | 
              <view class="value">{{ item.remark || item.meetingRemark }}</view>  
 | 
            </view>  
 | 
          </view>  
 | 
          <view v-if="myMeetingList.length === 0" style="text-align: center">  
 | 
            <image  
 | 
              src="@/static/empty.png"  
 | 
              style="width: 320rpx; margin: 120rpx auto 0"  
 | 
              mode="widthFix"  
 | 
            />  
 | 
            <view class="placeholder9 fs24">暂无数据</view>  
 | 
          </view>  
 | 
        </view>  
 | 
      </view>  
 | 
    </template>  
 | 
    <!--  -->  
 | 
    <u-picker  
 | 
      keyName="name"  
 | 
      :show="isShowStatus"  
 | 
      :columns="meetingList"  
 | 
      @confirm="seletedStatus"  
 | 
      @cancel="isShowStatus = false"  
 | 
    ></u-picker>  
 | 
  </view>  
 | 
</template>  
 | 
  
 | 
<script>  
 | 
import Calendar from '@/components/Li-Calendar/Li-Calendar.vue'  
 | 
import dayja from 'dayjs'  
 | 
import { myMeetingPage, monthMeetingPage, roomsListPost } from '@/api'  
 | 
function getDate(date, AddDayCount = 0) {  
 | 
  if (!date) {  
 | 
    date = new Date()  
 | 
  }  
 | 
  if (typeof date !== 'object') {  
 | 
    date = date.replace(/-/g, '/')  
 | 
  }  
 | 
  const dd = new Date(date)  
 | 
  
 | 
  dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期  
 | 
  
 | 
  const y = dd.getFullYear()  
 | 
  const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0  
 | 
  const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0  
 | 
  return {  
 | 
    fullDate: y + '-' + m + '-' + d,  
 | 
    year: y,  
 | 
    month: m,  
 | 
    date: d,  
 | 
    day: dd.getDay()  
 | 
  }  
 | 
}  
 | 
export default {  
 | 
  components: {  
 | 
    Calendar  
 | 
  },  
 | 
  data() {  
 | 
    return {  
 | 
      activeTab: '0',  
 | 
      recordList: [],  
 | 
      recordPage: 1,  
 | 
      myPage: 1,  
 | 
      myMeetingList: [],  
 | 
      currentDate: '',  
 | 
      dateStart: '1999-05-01',  
 | 
      dateEnd: '2999-06-15',  
 | 
      monthMark: [],  
 | 
  
 | 
      isShowStatus: false,  
 | 
      activeRoom: {  
 | 
        name: '全部会议室',  
 | 
        id: ''  
 | 
      },  
 | 
      meetingList: [],  
 | 
  
 | 
    }  
 | 
  },  
 | 
  onLoad() {  
 | 
    this.currentDate = dayja().format('YYYY-MM-DD')  
 | 
    this.initData()  
 | 
    this.getRoomList()  
 | 
  },  
 | 
  onShow() {  
 | 
    this.myPage = 1  
 | 
    this.myMeetingList = []  
 | 
    this.getDayMeeting()  
 | 
  },  
 | 
  onReachBottom() {  
 | 
    this.myPage = this.myPage + 1  
 | 
    this.getDayMeeting()  
 | 
  },  
 | 
  methods: {  
 | 
    initData() {  
 | 
      // 当月数据  
 | 
      monthMeetingPage({  
 | 
        yearMonth: this.currentDate.slice(0, 7), 
 | 
                queryType: 3  
 | 
      }).then(res => {  
 | 
        this.monthMark = res.data.filter(i => i.meetingNum > 0).map(j => {  
 | 
          return {  
 | 
            time: j.monthDate,  
 | 
            pointText: j.meetingNum,  
 | 
            pointTextColor: '#fff'  
 | 
          }  
 | 
        })  
 | 
      })  
 | 
    },  
 | 
    getRoomList() {  
 | 
      roomsListPost({}).then(res => {  
 | 
        this.meetingList = [[{ id: '', name: '全部会议室' }, ...res.data]]  
 | 
      })  
 | 
    },  
 | 
    seletedStatus(e) {  
 | 
      this.myMeetingList = []  
 | 
      this.activeRoom = { ...e.value[0] }  
 | 
      this.recordPage = 1  
 | 
      this.isShowStatus = false  
 | 
      this.getDayMeeting()  
 | 
    },  
 | 
    handleDetail(id) {  
 | 
      uni.navigateTo({  
 | 
        url: `/pages/staff/meetingDetail?id=${id}`,  
 | 
        // url: `/pages/staff/meetingDetail`  
 | 
      })  
 | 
    },  
 | 
    changeCalendar(e) {  
 | 
      console.log(e)  
 | 
    },  
 | 
    // 点击某天  
 | 
    dayChange(data) {  
 | 
      let date = data.time  
 | 
      let yyyy = data.time.substring(0, 4)  
 | 
      let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')))  
 | 
      let dd = Number(data.time.substring(data.time.lastIndexOf('-') + 1, data.time.length))  
 | 
      mm = mm < 10 ? `0${mm}` : mm  
 | 
      dd = dd < 10 ? `0${dd}` : dd  
 | 
      let riqi = `${yyyy}-${mm}-${dd}`  
 | 
      this.currentDate = riqi  
 | 
      this.myMeetingList = []  
 | 
      this.activeStatus = {  
 | 
        name: '全部会议室',  
 | 
        key: ''  
 | 
      }  
 | 
      this.myPage = 1  
 | 
      this.getDayMeeting()  
 | 
    },  
 | 
    // 下一月  
 | 
    monthChange(data) {  
 | 
      let date = data.date.replace(/[/]/g, '-')  
 | 
      let yyyy = date.substring(0, 4)  
 | 
      let mm = Number(date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')))  
 | 
      let dd = Number(date.substring(date.lastIndexOf('-') + 1, date.length))  
 | 
      mm = mm < 10 ? `0${mm}` : mm  
 | 
      dd = dd < 10 ? `0${dd}` : dd  
 | 
      let riqi = `${yyyy}-${mm}-${dd}`  
 | 
      console.log('日期', riqi)  
 | 
      this.currentDate = riqi  
 | 
      this.initData()  
 | 
    },  
 | 
  
 | 
    getDayMeeting() {  
 | 
      const { myPage, activeRoom, currentDate } = this  
 | 
      // 当天我参与的会议  
 | 
      myMeetingPage({  
 | 
        model: {  
 | 
          queryType: '3',  
 | 
          roomsId: activeRoom.id,  
 | 
          queryDate: currentDate  
 | 
        },  
 | 
        page: myPage,  
 | 
        capacity: 10  
 | 
      }).then(res => {  
 | 
        this.myMeetingList = [...this.myMeetingList, ...res.data.records]  
 | 
      })  
 | 
    },  
 | 
  }  
 | 
};  
 | 
</script>  
 | 
  
 | 
<style lang="scss">  
 | 
page {  
 | 
  background-color: #f7f7f7;  
 | 
}  
 | 
.main_app {  
 | 
  padding: 0;  
 | 
  background-color: #f7f7f7;  
 | 
  ::v-deep .uni-calendar-item--checked {  
 | 
    background-color: $uni-color-primary;  
 | 
    border-radius: 8rpx;  
 | 
  }  
 | 
  ::v-deep .uni-calendar-item--isDay-text {  
 | 
    color: $uni-color-primary;  
 | 
  }  
 | 
  ::v-deep .uni-calendar-item--isDay {  
 | 
    background-color: $uni-color-primary;  
 | 
    color: #fff;  
 | 
    border-radius: 8rpx;  
 | 
  }  
 | 
  .tabs {  
 | 
    display: flex;  
 | 
    background-color: #fff;  
 | 
    .tab {  
 | 
      flex: 1;  
 | 
      height: 88rpx;  
 | 
      display: flex;  
 | 
      justify-content: center;  
 | 
      align-items: center;  
 | 
      font-size: 28rpx;  
 | 
      color: #666666;  
 | 
      position: relative;  
 | 
      .line {  
 | 
        width: 60rpx;  
 | 
        height: 4rpx;  
 | 
        background: #fff;  
 | 
        border-radius: 3rpx;  
 | 
        position: absolute;  
 | 
        bottom: 0;  
 | 
        left: 50%;  
 | 
        transform: translate(-50%, 0);  
 | 
      }  
 | 
    }  
 | 
    .active {  
 | 
      font-weight: 600;  
 | 
      font-size: 30rpx;  
 | 
      color: #222222;  
 | 
      .line {  
 | 
        background-color: $uni-color-primary;  
 | 
      }  
 | 
    }  
 | 
  }  
 | 
  //  
 | 
  .card_list {  
 | 
    padding: 30rpx;  
 | 
    .card_title {  
 | 
      display: flex;  
 | 
      justify-content: space-between;  
 | 
      align-items: center;  
 | 
      margin-bottom: 22rpx;  
 | 
      .name {  
 | 
        display: flex;  
 | 
        align-items: center;  
 | 
        .icon {  
 | 
          width: 6rpx;  
 | 
          height: 32rpx;  
 | 
          background: $uni-color-primary;  
 | 
          border-radius: 4rpx;  
 | 
          margin-right: 16rpx;  
 | 
        }  
 | 
        .text {  
 | 
          font-weight: 600;  
 | 
          font-size: 32rpx;  
 | 
          color: #222222;  
 | 
        }  
 | 
      }  
 | 
      .meeting {  
 | 
        display: flex;  
 | 
        height: 52rpx;  
 | 
        line-height: 52rpx;  
 | 
        background: #ffffff;  
 | 
        border-radius: 26rpx;  
 | 
        border: 2rpx solid #eeeeee;  
 | 
        padding: 0 24rpx;  
 | 
        .text {  
 | 
          font-size: 24rpx;  
 | 
          color: #333333;  
 | 
        }  
 | 
      }  
 | 
    }  
 | 
    .list {  
 | 
      .item {  
 | 
        padding: 0rpx 30rpx 30rpx;  
 | 
        background: #ffffff;  
 | 
        border-radius: 8rpx;  
 | 
        margin-bottom: 24rpx;  
 | 
        .head {  
 | 
          display: flex;  
 | 
          justify-content: space-between;  
 | 
          align-items: center;  
 | 
          border-bottom: 1rpx solid #e5e5e5;  
 | 
          padding: 22rpx 0;  
 | 
          margin-bottom: 22rpx;  
 | 
          .name {  
 | 
            font-weight: 600;  
 | 
            font-size: 32rpx;  
 | 
            color: #222222;  
 | 
            flex: 1;  
 | 
            overflow: hidden;  
 | 
            white-space: nowrap;  
 | 
            text-overflow: ellipsis;  
 | 
          }  
 | 
          .status {  
 | 
            height: 38rpx;  
 | 
            margin-left: 20rpx;  
 | 
            line-height: 38rpx;  
 | 
            padding: 0 16rpx;  
 | 
            border-radius: 4rpx;  
 | 
            border: 1rpx solid #999999;  
 | 
            font-size: 22rpx;  
 | 
            color: #999999;  
 | 
          }  
 | 
          .padding {  
 | 
            color: $uni-color-primary;  
 | 
            border: 1rpx solid $uni-color-primary;  
 | 
          }  
 | 
          .red {  
 | 
            color: #e23f29;  
 | 
            border: 1rpx solid #e23f29;  
 | 
          }  
 | 
        }  
 | 
        .line {  
 | 
          display: flex;  
 | 
          margin-bottom: 12rpx;  
 | 
          .label {  
 | 
            width: 140rpx;  
 | 
            color: #666666;  
 | 
          }  
 | 
          .value {  
 | 
            flex: 1;  
 | 
          }  
 | 
        }  
 | 
      }  
 | 
    }  
 | 
  }  
 | 
}  
 | 
.container_b {  
 | 
  width: 100%;  
 | 
  padding: 30rpx;  
 | 
  background: #ffffff;  
 | 
  padding-top: 20rpx;  
 | 
  box-sizing: border-box;  
 | 
}  
 | 
</style>  
 |