ll
liukangdong
2024-10-09 2f66b264fed5d3b9d0132281b63c7037c886e040
h5_meeting/pages/index/index.vue
@@ -2,37 +2,53 @@
   <view class="main_app">
      <image src="@/static/bg@2x.png" class="main_bg" mode=""></image>
      <view class="header_wrap">
         <view class="title" @touchend="touchend">会议室</view>
         <view class="title" @touchend="touchend">{{info.roomName}}</view>
         <view class="time_wrap">
            <view class="time">{{time}}</view>
            <view class="date">{{date}}</view>
         </view>
      </view>
      <view class="home_status orange">会议中</view>
      <view class="meeting_name">会议名称</view>
      <view class="meeting_con">
      <view class="home_status">
         <text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">空闲中</text>
         <text
            v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">即将开始</text>
         <text class="orange"
            v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">会议中</text>
         <text
            v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">未开始</text>
         <text
            v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">已结束</text>
         <text
            v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">已撤销</text>
      </view>
      <view v-if="meetingInfo.meetingName" class="meeting_name">{{meetingInfo.meetingName}}</view>
      <view v-if="meetingInfo.meetingTime && meetingInfo.bookingUser" class="meeting_con">
         <view class="content">
            <view class="line">
               <image src="@/static/ic_time@2x.png"></image>
               <text>10~12</text>
               <text>{{meetingInfo.meetingTime }}</text>
            </view>
            <view class="line">
               <image src="@/static/ic_people@2x.png"></image>
               <text>10~12</text>
               <text>预约人:{{meetingInfo.bookingUser }}</text>
            </view>
         </view>
         <view class="qrcode"></view>
         <view v-if="showQrbg" class="qrcode_wrap">
            <canvas id="qrcode" canvas-id="qrcode" class="qrcode"></canvas>
         </view>
      </view>
      <view class="meeting_wrap">
         <view class="title">今日会议(6)</view>
         <view class="title">
            今日会议({{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }})
         </view>
         <view class="list">
            <view class="item">
               <view class="name">开发部会议</view>
               <view class="line">预约人:李怀英</view>
               <view class="line">13:30~15:00(即将开始)</view>
            <view class="item" v-for="item in info.meetingListResponseList">
               <view class="name">{{item.meetingName}}</view>
               <view class="line">预约人:{{item.bookingUser}}</view>
               <view class="line">{{item.meetingTime}}({{statusMap[item.meetingStatus]}})</view>
               <image src="@/static/ic_meeting@2x.png" class="item_bg"></image>
            </view>
            <view class="item empty">
            <view v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0" class="item empty">
               <view class="name">暂无会议</view>
               <view class="line">预约人:-</view>
               <view class="line">-</view>
@@ -40,38 +56,100 @@
            </view>
         </view>
      </view>
      <!--  -->
      <swiper
         v-if="info.fileType == 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)"
         class="swiper" circular autoplay indicator-dots>
         <swiper-item v-for="item in info.multifileList">
            <image class="swiper_item" :src="item.fileurlFull" mode="aspectFill"></image>
         </swiper-item>
      </swiper>
      <!--  -->
      <template
         v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)">
         <video :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
      </template>
   </view>
</template>
<script>
   import dayjs from 'dayjs'
   // import vueQr from 'vue-qr/src/packages/vue-qr.vue'
   import UQRCode from 'uqrcodejs'
   import {
      meetScreenData
   } from '@/api/index.js'
   export default {
      // components: {vueQr},
      data() {
         return {
            time: '',
            date: '',
            showQrbg: false,
            timer: null,
            touchNum: 0,
            param: {}
            touchNum: 0,
            param: {},
            info: {},
            statusMap: {
               1: '未开始',
               2: '进行中',
               3: '已结束',
               4: '即将开始',
               5: '已撤销',
            },
            meetingInfo: {}
         }
      },
      onLoad() {
         this.initDatetime()
         this.param = uni.getStorageSync('param') || {}
         if(!this.param.code){
            return uni.navigateTo({
               url: '/pages/index/config'
            })
         }
      onShow() {
         this.initDatetime()
         this.param = uni.getStorageSync('param') || {}
         if (!this.param.code) {
            return uni.navigateTo({
               url: '/pages/index/config'
            })
         }
         this.getData()
      },
      onReady() {},
      methods: {
         getData() {
            meetScreenData({
               roomId: this.param.code
            this.showQrbg = false
            meetScreenData({
               roomId: this.param.code
            }).then(res => {
               this.info = res.data
               if (this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0) {
                  this.meetingInfo = this.info.meetingListResponseList[0]
                  this.$nextTick(() => {
                     this.qrcodeCreate()
                     this.$forceUpdate()
                  })
               } else {
                  this.showQrbg = false
                  this.meetingInfo = {}
               }
            })
         },
         qrcodeCreate() {
            this.showQrbg = true
            this.$nextTick(() => {
               // 获取uQRCode实例
               var qr = new UQRCode();
               // 设置二维码内容
               // qr.data = "https://uqrcode.cn/doc";
               qr.data =
                  "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxac2a80c2144c4ee0&redirect_uri=http://192.168.0.109:8080/redirect.html&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
               // 设置二维码大小,必须与canvas设置的宽高一致
               qr.size = 83;
               // 调用制作二维码方法
               qr.make();
               // 获取canvas上下文
               var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件,this必须传入
               // 设置uQRCode实例的canvas上下文
               qr.canvasContext = canvasContext;
               // 调用绘制方法将二维码图案绘制到canvas上
               qr.drawCanvas();
            })
         },
         touchend() {
@@ -81,8 +159,8 @@
                  console.log('单击')
               }
               if (this.touchNum >= 2) {
                  uni.navigateTo({
                     url: '/pages/index/config'
                  uni.navigateTo({
                     url: '/pages/index/config'
                  })
               }
               this.touchNum = 0
@@ -96,23 +174,59 @@
               this.time = dayjs().format('HH:mm')
               this.date = dayjs().format('YYYY-MM-DD') + ' ' + weeks[new Date().getDay()]
            }, 1000)
            setInterval(() => {
               this.getData()
            }, this.param.time ? this.param.time * 1000 : 60 * 1000)
         }
      }
   }
</script>
<style lang="scss" scoped>
   page,
   body {
      overflow: hidden;
   }
   .swiper {
      position: fixed;
      top: 0;
      left: 0;
      z-index: 999;
      width: 100%;
      height: 100vh;
      .swiper_item {
         background-color: #0095AC;
         width: 100%;
         height: 100vh;
      }
   }
   .app_video {
      width: 100%;
      height: 100vh;
      position: fixed;
      top: 0;
      left: 0;
      z-index: 999;
   }
   .main_app {
      width: 100%;
      min-height: 100vh;
      position: relative;
      height: 100vh;
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      font-size: 28rpx;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      padding-bottom: 35rpx;
      padding-bottom: 42rpx;
      color: #fff;
      overflow: hidden;
      .meeting_wrap {
         margin-left: 42rpx;
         margin-top: 85rpx;
@@ -144,10 +258,14 @@
               flex-direction: column;
               width: 403rpx;
               height: 315rpx;
               background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
               background: linear-gradient(90deg, #0080FF 0%, #00B0FF 100%);
               border-radius: 7rpx;
               margin-right: 28rpx;
               position: relative;
               &:nth-of-type(1) {
                  background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
               }
               .item_bg {
                  position: absolute;
@@ -162,6 +280,13 @@
                  flex: 1;
                  font-weight: bold;
                  font-size: 39rpx;
                  width: 100%;
                  word-break: break-all;
                  text-overflow: ellipsis;
                  display: -webkit-box;
                  -webkit-box-orient: vertical;
                  -webkit-line-clamp: 3;
                  /* 超出几行省略 */
               }
               .line {
@@ -171,7 +296,7 @@
            }
            .empty {
               background: rgba(255, 255, 255, 0.11);
               background: rgba(255, 255, 255, 0.11) !important;
            }
         }
      }
@@ -198,11 +323,20 @@
            }
         }
         .qrcode {
            width: 166rpx;
            height: 166rpx;
            border: 1px solid red;
         .qrcode_wrap {
            width: 92px;
            height: 92px;
            display: flex;
            align-items: center;
            justify-content: center;
            background-color: #fff;
            .qrcode {
               width: 84px;
               height: 84px;
            }
         }
      }
      .meeting_name {
@@ -225,7 +359,7 @@
      }
      .header_wrap {
         padding: 34rpx 34rpx 0 0;
         padding: 42rpx 34rpx 0 0;
         display: flex;
         justify-content: space-between;
         align-items: center;