renkang
2025-01-03 ccf28d1fed1aa2e5437dbe64b5133ba1cbde6ec7
h5/pages/workOrder/detail.vue
@@ -11,7 +11,12 @@
         <view class="file_list">
            <view class="file" v-for="(item,index) in info.fileList">
               <image v-if="item.type == 0" :src="item.fileurlFull" mode="aspectFill"></image>
               <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
               <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
               <view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
                  <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
                     class="video" :enable-progress-gesture="false" autoplay muted />
                  <image src="@/static/play.png" class="play" mode=""></image>
               </view>
            </view>
         </view>
         <view class="content">
@@ -23,7 +28,7 @@
               <view class="la">上报人:</view>
               <view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view>
            </view>
            <view class="line"  v-if="info.creatorPhone || info.creatorMobile">
            <view class="line" v-if="info.creatorPhone || info.creatorMobile">
               <view class="la">联系电话:</view>
               <view class="val">{{ info.creatorMobile || info.creatorPhone }}</view>
            </view>
@@ -63,7 +68,7 @@
            <image src="@/static/side/phoneed.png" class="icon"></image>
            <text>上报人</text>
         </view>
         <view class="btn active" @click="isShowHandle = true">去处理</view>
         <view class="btn active" @click="handleOpen">去处理</view>
      </view>
      <!--  -->
      <u-popup :show="showUpload" @close="showUpload = false" zIndex="10076" closeOnClickOverlay>
@@ -74,8 +79,8 @@
      </u-popup>
      <!--  -->
      <!-- 工单处理 -->
      <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable
         @close="isShowHandle = false">
      <u-popup :show="isShowHandle" :round="10" :safeAreaInsetTop="true" :safeAreaInsetBottom="true" mode="bottom"
         closeable @close="isShowHandle = false">
         <view class="appr_modal">
            <view class="title">工单处理</view>
            <view class="df_sb">
@@ -118,13 +123,18 @@
      <u-datetime-picker :minDate="new Date().getTime()" :show="isShowHandleDate" @confirm="confirmHandleDate"
         @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
      <!--  -->
      <view v-if="videoPlay" class="video_app">
         <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
            :src="videoUrl" @fullscreenchange="screenChange"></video>
         <view class="bg" @click="closeVideo"></view>
      </view>
   </view>
</template>
<script>
   import {
      uploadUrl,
      ywWorkorderD,
      ywWorkorderD,
      ywWorkorderDeal
   } from '@/api'
   import dayjs from 'dayjs';
@@ -135,10 +145,14 @@
            info: {},
            showUpload: false,
            isShowHandle: false,
            isShowHandleDate: false,
            isShowHandleDate: false,
            userInfo: uni.getStorageSync('userInfo') || {},
            handleParam: {},
            dealFileList: []
            dealFileList: [],
            videoPlay: false,
            videoContext: null,
            videoUrl: ''
         };
      },
      onLoad(option) {
@@ -147,25 +161,55 @@
         this.getDetail()
      },
      methods: {
         onSubmit() {
            const { handleParam, dealFileList, id } = this
            if (!handleParam.dealTime) return this.showToast('处理时间不能为空')
            ywWorkorderDeal({
               ...handleParam,
               id,
               dealFileList
            }).then(res => {
               if(res.code == 200){
                  this.showToast('操作成功')
                  uni.navigateBack()
               }
         handleOpen() {
            this.isShowHandle = true
            this.$set(this.handleParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss'));
         },
         videoClick(item) {
            this.videoPlay = true;
            this.videoContext = uni.createVideoContext("myvideo", this); // this这个是实例对象 必传
            this.videoUrl = item.fileurlFull;
            this.videoContext.requestFullScreen();
            this.$nextTick(() => {
               this.videoContext.play();
            })
         },
         handleCall() {
            const { info } = this
            uni.makePhoneCall({
               phoneNumber: info.creatorMobile
            });
         },
         screenChange(e) {
            let fullScreen = e.detail.fullScreen // 值true为进入全屏,false为退出全屏
            if (!fullScreen) {
               //退出全屏
               this.videoPlay = false // 隐藏播放盒子
            }
         },
         closeVideo() {
            this.videoPlay = false
            this.videoContext = null
         },
         onSubmit() {
            const {
               handleParam,
               dealFileList,
               id
            } = this
            if (!handleParam.dealTime) return this.showToast('处理时间不能为空')
            ywWorkorderDeal({
               ...handleParam,
               id,
               dealFileList
            }).then(res => {
               if (res.code == 200) {
                  this.showToast('操作成功')
                  uni.navigateBack()
               }
            })
         },
         handleCall() {
            const {
               info
            } = this
            uni.makePhoneCall({
               phoneNumber: info.creatorMobile
            });
         },
         getDetail() {
            ywWorkorderD(this.id).then(res => {
@@ -323,7 +367,7 @@
            image,
            video {
               width: 156rpx;
               width: 156rpx;
               height: 156rpx;
            }
         }
@@ -488,28 +532,37 @@
         display: flex;
         flex-wrap: wrap;
         margin-bottom: 30rpx;
         max-height: 362rpx;
         overflow-y: auto;
         margin-right: -30rpx;
      }
      .adduser_list_item_ipt1_upload {
         margin-top: 24rpx;
         width: 156rpx;
         height: 156rpx;
         margin-right: 24rpx;
         border: 2rpx solid #e5e5e5;
         margin-right: 22rpx;
         border: 1rpx solid #e5e5e5;
         background: #f7f7f7;
         color: #666666;
         font-size: 22rpx;
         box-sizing: border-box;
         display: flex;
         flex-direction: column;
         align-items: center;
         justify-content: center;
         position: relative;
         &:nth-of-type(4n) {
            margin-right: 0;
         }
         .close {
            position: absolute;
            right: -20rpx;
            top: -20rpx;
            z-index: 9999;
            background-color: #fff;
         }
         image {
@@ -523,4 +576,46 @@
         }
      }
   }
   .video_wrap {
      position: relative;
      border: 1px solid;
      width: 156rpx;
      height: 156rpx;
      border-radius: 4rpx;
      .play {
         width: 60rpx !important;
         height: 60rpx !important;
         position: absolute;
         top: 50%;
         left: 50%;
         transform: translate(-50%, -50%);
      }
   }
   .video_app {
      overflow: hidden;
      position: fixed;
      left: 0;
      top: 0;
      width: 100vw;
      height: 100vh;
      display: flex;
      align-items: center;
      z-index: 9990;
      .bg {
         background-color: rgba(0, 0, 0, .6);
         position: absolute;
         width: 100%;
         height: 100%;
         z-index: -1;
      }
      video {
         width: 100%;
         height: 42vh;
      }
   }
</style>