renkang
2025-01-24 d492850f1cc64ddcfaf43798af9c76c2505414fd
h5/pages/workOrder/wait.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,431 @@
<template>
   <view class="main_app">
      <view class="tabs">
         <view class="tab" :class="{active: queryStatus == 0}" @click="tabsClick(0)">
            <text>待办</text>
            <text class="border"></text>
         </view>
         <view class="tab" :class="{active: queryStatus == 1}" @click="tabsClick(1)">
            <text>已办</text>
            <text class="border"></text>
         </view>
      </view>
      <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
         <view class="list">
            <view class="item" @click="itemClick(item)" v-for="item in list">
               <view class="img">
                  <image v-if="item.type == 0 && item.status == 0" src="@/static/side/ic_pandian@2x.png"></image>
                  <image v-if="item.type == 1 && item.status == 0" src="@/static/side/xunjianed.png"></image>
                  <image v-if="item.type == 2 && item.status == 0" src="@/static/side/workordered.png"></image>
                  <image v-if="item.type == 0 && item.status == 1" src="@/static/side/ic_pandian_grey@2x.png"></image>
                  <image v-if="item.type == 1 && item.status == 1" src="@/static/side/xunjian.png"></image>
                  <image v-if="item.type == 2 && item.status == 1" src="@/static/side/workorder.png"></image>
               </view>
               <view class="content">
                  <view class="title" v-if="item.obj">
                     <view>{{item.obj.key1}}</view>
                     <view v-if="item.status == 0 && item.type == 2" class="status">待处理</view>
                     <view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">未开始
                     </view>
                     <view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)"
                        class="status green">进行中</view>
                     <view v-if="item.status == 1 && item.type == 2" class="status gray">已处理</view>
                     <view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">已完成</view>
                  </view>
                  <template v-if="item.obj && item.type == 1">
                     <view class="text">任务日期:{{item.obj.key2}}</view>
                     <view class="text">执行时间:{{item.obj.key3}}</view>
                     <view class="text">
                        <view class="">巡检负责人:{{item.obj.key4}}</view>
                        <view class="btn" @click.stop="openSc(item)">
                           <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
                           <view v-if="item.status == 0" class="">扫码巡检</view>
                        </view>
                     </view>
                  </template>
                  <template v-if="item.obj && item.type == 0">
                     <view class="content">
                        <view class="text">盘点日期:{{item.obj.key2}}</view>
                        <view class="text">盘点仓库:{{item.obj.key3}}</view>
                        <view class="text">
                           <view class="">盘点员:{{item.obj.key4}}</view>
                           <view v-if="item.status == 0 && item.param3 == 0" class="btn" @click.stop="startHandle(item)">开始盘点
                           </view>
                           <view v-if="item.status == 0 && item.param3 == 1" class="btn" @click.stop="startHandle(item)">继续盘点
                           </view>
                        </view>
                     </view>
                  </template>
                  <template v-if="item.obj && item.type == 2">
                     <view class="content">
                        <view class="text">上报时间:{{item.obj.key2}}</view>
                        <view class="text">位置类型:{{item.obj.key3}}</view>
                        <view class="text">工单分类:{{item.obj.key4}}</view>
                     </view>
                  </template>
               </view>
            </view>
         </view>
         <view class="empty" v-if="list.length == 0">
            <image src="@/static/empty.png" mode=""></image>
            <view class="">暂无数据</view>
         </view>
      </scroll-view>
      <!--  -->
      <view class="reader-box" @click="stopScan" v-if="isScaning">
         <view class="reader" id="reader"></view>
      </view>
   </view>
</template>
<script>
   import {
      myNoticesH5,
      ywStocktakingBegin,
      getPointRecordByCode
   } from '@/api'
   import {
      Html5Qrcode
   } from 'html5-qrcode';
   export default {
      data() {
         return {
            list: [],
            total: 0,
            page: 1,
            queryStatus: 0,
            html5Qrcode: null,
            isScaning: false,
         };
      },
      onShow() {
         this.page = 1
         this.list = []
         this.getList()
      },
      methods: {
         tabsClick(val) {
            this.list = []
            this.page = 1
            this.queryStatus = val
            this.getList()
         },
         itemClick(item) {
            if (item.objType == 0 && item.status == 1) {
               uni.navigateTo({
                  url: `/pages/inventory/detail?id=${item.objId}`
               })
            } else if (item.objType == 1) {
               // return
               uni.navigateTo({
                  url: `/pages/polling/detail?id=${item.objId}`
               })
            } else if(item.objType == 2) {
               uni.navigateTo({
                  url: `/pages/workOrder/detail?id=${item.objId}`
               })
            }
         },
         startHandle(item) {
            if (item.param3 == 0) {
               uni.showModal({
                  content: '盘点期间不可进行出入库操作',
                  success: (res) => {
                     if (res.confirm) {
                        ywStocktakingBegin(item.objId).then(() => {
                           uni.navigateTo({
                              url: '/pages/inventory/detail?id=' + item.objId
                           })
                        })
                     }
                  }
               })
            }else{
               uni.navigateTo({
                  url: '/pages/inventory/detail?id=' + item.objId
               })
            }
         },
         getList() {
            const {
               page,
               total,
               list,
               queryStatus
            } = this
            myNoticesH5({
               page,
               capacity: 20,
               model: {
                  status: queryStatus
               }
            }).then(res => {
               this.list = [...this.list, ...res.data.records]
               this.list.forEach(item => {
                  item.obj = JSON.parse(item.param2)
               })
               console.log(this.list);
               this.total = res.data.total
            })
         },
         scrolltolower() {
            const {
               total,
               list
            } = this
            if (list.length < total) {
               this.page = this.page + 1
               this.getList()
            } else {
               this.showToast('暂无更多数据')
            }
         },
         openSc(item) {
            this.isScaning = true;
            Html5Qrcode.getCameras().then((devices) => {
               if (devices && devices.length) {
                  this.html5Qrcode = new Html5Qrcode('reader');
                  this.html5Qrcode.start({
                        facingMode: 'environment'
                     }, {
                        focusMode: 'continuous', //设置连续聚焦模式
                        fps: 5, //设置扫码识别速度
                        qrbox: 280 //设置二维码扫描框大小
                     },
                     (decodeText, decodeResult) => {
                        if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                           this.stopScan(); //关闭扫码功能
                           const index = decodeText.indexOf('ywid')
                           let pointCode = decodeText.slice(index + 5)
                           getPointRecordByCode({
                              taskId: item.objId,
                              pointCode
                           }).then(ress => {
                              if (ress.data) {
                                 uni.navigateTo({
                                    url: '/pages/polling/point?id=' + ress.data.id
                                 })
                              } else {
                                 this.showToast('未匹配到巡检点,请重新扫描')
                              }
                           })
                        }
                     },
                     (err) => {
                        // console.log(err);  //错误信息
                     }
                  );
               }
            });
         },
         stopScan() {
            console.log('停止扫码')
            this.isScaning = false;
            if (this.html5Qrcode) {
               this.html5Qrcode.stop();
            }
         },
      }
   }
</script>
<style lang="scss">
   page {
      background-color: #f7f7f7;
      .main_app {
         padding: 0;
         height: 100vh;
         overflow: hidden;
         background-color: #fff;
      }
      .tabs {
         display: flex;
         width: 750rpx;
         margin: 12rpx 0rpx 0;
         border-bottom: 1rpx solid #E5E5E5;
         background-color: #fff;
         .tab {
            font-size: 30rpx;
            color: #666666;
            flex: 1;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: flex-end;
            height: 88rpx;
            .name {
               display: flex;
               align-items: center;
            }
            .icon {
               width: 28rpx;
               height: 28rpx;
               margin-right: 10rpx;
            }
            .border {
               width: 54rpx;
               height: 6rpx;
               background-color: #fff;
               border-radius: 3rpx;
               margin-top: 16rpx;
            }
         }
         .active {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            .border {
               background-color: $primaryColor;
            }
         }
      }
      .scroll_Y {
         height: calc(100vh - 120rpx);
         .empty {
            padding-top: 260rpx;
            image {
               width: 360rpx;
               height: 360rpx;
               margin-bottom: 10rpx;
            }
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            color: #999999;
         }
      }
      .list {
         // padding-top: 20rpx;
         .item {
            width: 100%;
            background: #FFFFFF;
            border-radius: 8rpx;
            display: flex;
            padding: 30rpx 24rpx;
            border-bottom: 1rpx solid #e5e5e5;
            .img {
               position: relative;
               margin-right: 20rpx;
               flex-shrink: 0;
               position: relative;
               image {
                  width: 72rpx;
                  height: 72rpx;
               }
               .dian {
                  position: absolute;
                  background-color: red;
                  width: 18rpx;
                  height: 18rpx;
                  border-radius: 50%;
                  top: -8rpx;
                  right: -8rpx;
               }
            }
            .content {
               flex: 1;
               .title {
                  font-weight: 500;
                  font-size: 32rpx;
                  color: #222222;
                  margin-bottom: 6rpx;
                  display: flex;
                  align-items: center;
                  justify-content: space-between;
                  .status {
                     color: $primaryColor;
                     font-weight: 400;
                     font-size: 28rpx;
                  }
                  .green {
                     color: #0ADE79;
                  }
                  .gray {
                     color: #999999;
                  }
               }
               .text {
                  font-size: 26rpx;
                  color: #666666;
                  height: 60rpx;
                  display: flex;
                  align-items: center;
                  justify-content: space-between;
                  .btn {
                     background-color: $primaryColor;
                     padding: 0 24rpx;
                     height: 60rpx;
                     border-radius: 30rpx;
                     display: flex;
                     align-items: center;
                     color: #fff;
                     image {
                        width: 28rpx;
                        height: 28rpx;
                        margin-right: 6rpx;
                     }
                  }
               }
               .time {
                  font-size: 26rpx;
                  color: #999999;
               }
            }
         }
      }
   }
   .reader-box {
      position: fixed;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      background-color: rgba(0, 0, 0, 0.5);
   }
   .reader {
      width: 100%;
      // width: 540rpx;
      // height: 540rpx;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
   }
</style>