jiangping
2025-06-06 a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea
h5/pages/inventory/detail.vue
@@ -2,42 +2,42 @@
   <view class="main_app">
      <view class="main_head">
         <view class="tabs">
            <view class="tab" :class="{active: activeTab == 0}" @click="tabsClick(0)">
               <text>未盘({{info.unFinishAmount || 0}})</text>
            <view class="tab" :class="{ active: activeTab == 0 }" @click="tabsClick(0)">
               <text>未盘({{ info.unFinishAmount || 0 }})</text>
               <text class="border"></text>
            </view>
            <view class="tab" :class="{active: activeTab == 1}" @click="tabsClick(1)">
               <text>已盘({{info.finishAmount || 0}})</text>
            <view class="tab" :class="{ active: activeTab == 1 }" @click="tabsClick(1)">
               <text>已盘({{ info.finishAmount || 0 }})</text>
               <text class="border"></text>
            </view>
         </view>
         <view class="head_wrap">
            <view class="search_wrap">
               <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
               <input v-model="param.materialCode" @confirm="handleQuery" type="text" placeholder="搜索资产编码/资产名称"
               <input v-model="param.materialCode" @confirm="handleQuery()" type="text" placeholder="搜索物料编码/物料名称"
                  placeholder-class="placeholder9" />
            </view>
         </view>
         <!--  -->
         <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
            <view class="list">
               <view class="item" v-for="item in list">
                  <view class="line">
                     <view class="title">{{item.materialName}}</view>
               <view class="item" v-for="item in list" @click="itemClick(item)">
                  <view class="head">
                     <view class="title">{{ item.materialName }}</view>
                     <view class="status red" v-if="item.type == 1">盘亏</view>
                     <view class="status primaryColor" v-if="item.type == 2">盘盈</view>
                  </view>
                  <view class="line">资产编码:{{item.materialCode}}</view>
                  <view class="line">条码:{{item.materialQrcode}}</view>
                  <view class="line">规格型号:{{item.materialAttr}}</view>
                  <view class="line">
                     <view class="">账面数量:{{item.stock}}{{item.materialUnitName}}</view>
                     <view v-if="item.status == 0" @click="openEheck(item)" class="btn">执行盘点</view>
                  <view class="line">物料编码:{{ item.materialCode }}</view>
                  <view class="line">条码:{{ item.materialQrcode }}</view>
                  <view class="line">规格型号:{{ item.materialAttr }}</view>
                  <view class="line" v-if="item.status == 0">
                     <view class="">账面数量:{{ item.stock }}{{ item.materialUnitName }}</view>
                     <view v-if="info.status == 1" @click.stop="openEheck(item)" class="btn">执行盘点</view>
                  </view>
                  <view class="static" v-if="item.status == 1">
                     <view class="ite">
                        <view class="la">账面数量:</view>
                        <view class="val">{{item.stock}}</view>
                        <view class="val">{{ item.stock }}</view>
                     </view>
                     <view class="spi"></view>
                     <view class="ite">
@@ -45,18 +45,18 @@
                        <view class="val" :class="{
                           primaryColor: item.type == 2,
                           red: item.type == 1,
                        }">{{item.actStock}}</view>
                        }">{{ item.actStock }}</view>
                     </view>
                  </view>
               </view>
            </view>
         </scroll-view>
         <view class="footer_btn">
            <view @click="openQrcode" v-if="activeTab== 0" class="sweep">
            <view @click="openQrcode" v-if="activeTab == 0 && info.status == 1" class="sweep">
               <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
               <view class="">扫码盘点</view>
            </view>
            <view @click="showTip = true" v-if="activeTab== 1" class="sweep sub_result">
            <view @click="showTip = true" v-if="activeTab == 1 && info.status == 1" class="sweep sub_result">
               <view class="">提交盘点结果</view>
            </view>
         </view>
@@ -64,39 +64,44 @@
         <u-popup :show="showModal" :round="10" @close="showModal = false" closeOnClickOverlay>
            <view class="modal_wrap">
               <view class="modal_title">执行盘点</view>
               <view class="title">{{modalForm.materialName}}</view>
               <view class="item">资产编码:{{modalForm.materialCode}}</view>
               <view class="item">条码:{{modalForm.materialQrcode}}</view>
               <view class="item">品牌:{{modalForm.materialBrand}}</view>
               <view class="item">规格型号:{{modalForm.materialAttr}}</view>
               <view class="item">所在仓库:{{modalForm.warehouseName}}</view>
               <view class="title">{{ modalForm.materialName }}</view>
               <view class="item">物料编码:{{ modalForm.materialCode }}</view>
               <view class="item">条码:{{ modalForm.materialQrcode }}</view>
               <view class="item">品牌:{{ modalForm.materialBrand }}</view>
               <view class="item">规格型号:{{ modalForm.materialAttr }}</view>
               <view class="item">所在仓库:{{ modalForm.warehouseName }}</view>
               <view class="content">
                  <view class="line">
                     <view class="la">账面数量:</view>
                     <view class="val">
                        <view class="wrap">{{modalForm.stock}}</view>
                        <view class="unit">{{modalForm.materialUnitName}}</view>
                        <view class="wrap">{{ modalForm.stock }}</view>
                        <view class="unit">{{ modalForm.materialUnitName }}</view>
                     </view>
                  </view>
                  <view class="line">
                     <view class="la">盘点数量:</view>
                     <view class="val">
                        <view class="wrap">
                           <image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
                           <image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
                           <input type="number" v-model="modalForm.actStock"></input>
                           <image @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
                           <template v-if="!modalForm.handleType">
                              <image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
                              <image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
                           </template>
                           <input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit"
                              v-model="modalForm.actStock"></input>
                           <image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode="">
                           </image>
                        </view>
                        <view class="unit">{{modalForm.materialUnitName}}</view>
                        <view class="unit">{{ modalForm.materialUnitName }}</view>
                     </view>
                  </view>
               </view>
               <view class="remark">
                  <view class="la">备注:</view>
                  <textarea v-model="modalForm.remark" placeholder="请填写备注" :maxlength="-1" placeholder-class="placeholder9"
                     cols="30" rows="10"></textarea>
                  <textarea v-model="modalForm.remark"
                     :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="请填写备注"
                     :maxlength="-1" placeholder-class="placeholder9" cols="30" rows="10"></textarea>
               </view>
               <view class="btns">
               <view v-if="!modalForm.handleType" class="btns">
                  <view class="btn" @click="showModal = false">取消</view>
                  <view class="btn sub" @click="onSubmit">提交</view>
               </view>
@@ -128,12 +133,12 @@
   import {
      ywStocktakingDetail,
      getYwStocktakingRecord,
      takingDataOpen,
      takingDataOpen,
      ywStocktaFinishById
   } from '@/api'
   import {
      Html5Qrcode
   } from 'html5-qrcode';
   } from 'html5-qrcode'
   export default {
      data() {
         return {
@@ -153,7 +158,7 @@
            html5Qrcode: null,
            isScaning: false,
         };
         }
      },
      onLoad(op) {
         this.id = op.id
@@ -161,11 +166,18 @@
         this.getList()
      },
      methods: {
         checkSub() {
            const {
               modalForm
            } = this
            // let str = modalForm.unFinishAmount > 0 ? '还有三项物料'
         itemClick(item) {
            if (item.status == 1) {
               this.showItem(item)
            }
         },
         showItem(item) {
            this.showModal = true
            this.modalForm = {
               ...item,
               handleType: this.info.status != 1 ? 'detail' : ''
            }
            console.log('modalForm', this.modalForm);
         },
         getDetail() {
            const {
@@ -196,28 +208,38 @@
                  stocktakingId: id,
                  ...param
               }
            }).then(res => {
               this.list = [...this.list, ...res.data.records]
               this.total = res.data.total
               if(this.param.materialQrcode && this.list.length == 1){
                  this.openEheck(this.list[0])
                  this.$set(this.param, 'materialQrcode', null)
               }
            }).then(res => {
               this.list = [...this.list, ...res.data.records || []]
               this.total = res.data.total
               if (this.param.materialQrcode && this.total == 1) {
                  this.openEheck(this.list[0])
                  this.param = {}
               } else if (this.param.materialQrcode && this.total == 0) {
                  this.param = {}
                  uni.showModal({
                     content: '未匹配到物料,请重新扫码',
                     showCancel: false,
                     success: (res) => {
                        if (res.confirm) {
                           this.getList()
                        }
                     }
                  });
               }
            })
         },
         scrolltolower() {
            const {
               total,
               list
            } = this
            if (list.length < total) {
               this.page = this.page + 1
               this.getList()
            } else {
               this.showToast('暂无更多数据')
            }
         },
         scrolltolower() {
            const {
               total,
               list
            } = this
            if (list.length < total) {
               this.page = this.page + 1
               this.getList()
            } else {
               this.showToast('暂无更多数据')
            }
         },
         openEheck(item) {
            this.modalForm = {
@@ -251,19 +273,21 @@
            this.list = []
            this.getList()
         },
         tipSub() {
            const { info } = this
            ywStocktaFinishById(info.id).then(res => {
               this.showTip = false
               uni.navigateBack()
         tipSub() {
            const {
               info
            } = this
            ywStocktaFinishById(info.id).then(res => {
               this.showTip = false
               uni.navigateBack()
            })
         },
         openQrcode() {
            this.isScaning = true;
            this.isScaning = true
            Html5Qrcode.getCameras().then((devices) => {
               if (devices && devices.length) {
                  this.html5Qrcode = new Html5Qrcode('reader');
                  this.html5Qrcode = new Html5Qrcode('reader')
                  this.html5Qrcode.start({
                        facingMode: 'environment'
                     }, {
@@ -272,8 +296,8 @@
                        qrbox: 280 //设置二维码扫描框大小
                     },
                     (decodeText, decodeResult) => {
                        if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                           this.stopScan()
                        if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                           this.stopScan()
                           this.$set(this.param, 'materialQrcode', decodeText)
                           this.handleQuery()
                        }
@@ -281,16 +305,16 @@
                     (err) => {
                        // console.log(err);  //错误信息
                     }
                  );
                  )
               }
            });
            })
         },
         stopScan() {
            console.log('停止扫码')
            this.isScaning = false;
            this.isScaning = false
            if (this.html5Qrcode) {
               this.html5Qrcode.stop();
               this.html5Qrcode.stop()
            }
         }
      }
@@ -388,6 +412,20 @@
            font-size: 34rpx;
            color: #222222;
            margin-bottom: 10rpx;
            flex: 1;
         }
         .head {
            display: flex;
            // align-items: center;
            justify-content: space-between;
            color: #666666;
            .status {
               width: 76rpx;
               text-align: right;
               padding-top: 3rpx;
            }
         }
         .line {