zrg
2025-09-05 46cc7a29dc1f9b3dffee5cdcb9b7f9dfdac3b16d
pages/tiaomaguanli/table.vue
@@ -1,266 +1,297 @@
<template>
   <view class="content">
      <view class="form">
         <view class="form-item">
            <view class="title"><text>*</text>条码:</view>
            <view class="right" style="width: 380rpx;">
               <input :focus="HBarCodeFocus" v-model="HBarCode" placeholder="请扫描(或输入)条码" @confirm="getCode(HBarCode)"/>
            </view>
            <uni-icons type="scan" style="margin-left: 10rpx;background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20" @click="toScanCode"></uni-icons>
         </view>
         <view class="form-item">
            <view class="title">单据号:</view>
            <view class="righton">
               <input v-model="baseInfo.HBillNo" disabled/>
            </view>
         </view>
         <view class="form-item">
            <view class="title">供应商:</view>
            <view class="righton">
               <input v-model="baseInfo.HSupName" disabled/>
            </view>
         </view>
         <view class="form-item">
            <view class="title">部门:</view>
            <view class="righton">
               <input v-model="baseInfo.HDeptName" disabled/>
            </view>
         </view>
      </view>
      <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
      <view class="list" v-for="(item,index) in listData" :key="index" @tap="toSon(item)">
         <uni-card :title="item.物料代码" :extra="'No. ' + Number(index+1)" style="margin: 10px;">
            <view class="card-detail">
               <view class="detail">
                  <text>物料名称:</text>{{item.物料名称}}
               </view>
               <view class="detail">
                  <text>规格型号:</text>{{item.规格型号}}
               </view>
               <view class="detail">
                  <text>订单数量:</text>{{item.数量}}
               </view>
            </view>
    <view class="content">
        <view class="form">
            <view class="form-item">
                <view class="title"><text>*</text>条码:</view>
                <view class="right" style="width: 380rpx;">
                    <input :focus="HBarCodeFocus" v-model="HBarCode" placeholder="请扫描(或输入)条码"
                        @confirm="getCode(HBarCode)" />
                </view>
                <uni-icons type="scan"
                    style="margin-left: 10rpx;background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;"
                    size="20" @click="toScanCode"></uni-icons>
            </view>
            <view class="form-item">
                <view class="title">单据号:</view>
                <view class="righton">
                    <input v-model="baseInfo.HBillNo" disabled />
                </view>
            </view>
            <view class="form-item">
                <view class="title">供应商:</view>
                <view class="righton">
                    <input v-model="baseInfo.HSupName" disabled />
                </view>
            </view>
            <view class="form-item">
                <view class="title">部门:</view>
                <view class="righton">
                    <input v-model="baseInfo.HDeptName" disabled />
                </view>
            </view>
        </view>
         </uni-card>
      </view>
      <view class="over" v-if="listData.length == 0">暂无数据</view>
      <view class="over" v-if="listData.length != 0">已到底</view>
   </view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view class="list" v-for="(item,index) in listData" :key="index" @tap="toSon(item)">
            <uni-card :title="item.物料代码" :extra="'No. ' + Number(index+1)" style="margin: 10px;">
                <view class="card-detail">
                    <view class="detail">
                        <text>物料名称:</text>{{item.物料名称}}
                    </view>
                    <view class="detail">
                        <text>规格型号:</text>{{item.规格型号}}
                    </view>
                    <view class="detail">
                        <text>订单数量:</text>{{item.数量}}
                    </view>
                </view>
            </uni-card>
        </view>
        <view class="over" v-if="listData.length == 0">暂无数据</view>
        <view class="over" v-if="listData.length != 0">已到底</view>
    </view>
</template>
<script>
   import { CommonUtils } from "../../utils/common";
import { getUserInfo } from "@/utils/auth.js";
   export default {
       data() {
           return {
            HBarCodeFocus: false,
            userInfo:getUserInfo(),
            serverUrl: uni.getStorageSync('serverUrl')||'http://47.96.97.237/API',
            HBarCode:'',
            baseInfo:{
               HBillNo:'',
               HSupName:'',
               HDeptName:'',
               HInterID:'',
    import {
        CommonUtils
    } from "../../utils/common";
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import BillTypeValueMap from "@/static/json/BillTypeValueMap"
    export default {
        data() {
            return {
                HBarCodeFocus: false,
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                HBarCode: '',
                baseInfo: {
                    HBillNo: '',
                    HSupName: '',
                    HDeptName: '',
                    HInterID: '',
                    HBillType: 0,
            },
            sWhere:'',
            listData:[],
           }
       },
      onLoad(params) {
         this.HBarCodeFocus = true
            if(!CommonUtils.isEmpty(params.HBillType)) {
                },
                sWhere: '',
                listData: [],
            }
        },
        onLoad(params) {
            this.HBarCodeFocus = true
            if (!CommonUtils.isEmpty(params.HBillType)) {
                this.baseInfo.HBillType = params.HBillType
            }
            console.log(this.baseInfo.HBillType)
      },
       methods: {
         async refreshBarCodeState() {
            this.HBarCodeFocus = false
            await this.$nextTick(() => {
               this.HBarCodeFocus = true
               this.HBarCode = ""
            })
         },
          playSound(e){
            const innerAudioContext = uni.createInnerAudioContext();
            if(e == 1){
               innerAudioContext.src = '/static/success.wav';
            }else{
               innerAudioContext.src = '/static/jingbao.wav';
            }
            innerAudioContext.play(); // 播放音频
         },
         //扫码
         toScanCode(){
            var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
            mpaasScanModule.mpaasScan({
               'hideAlbum': true,
               'timeoutInterval':'10', //超时时间
               'timeoutText':'未识别到二维码' //超时提醒
            },(ret) => {
               console.log(ret.resp_result)
               this.HBarCode = ret.resp_result
               this.getCode(this.HBarCode)
            })
         },
         //扫条码处理
         getCode(HBarCode){
            if(!HBarCode){
               this.playSound(0)
               this.refreshBarCodeState()
               uni.showToast({
                  title:'条码不能为空',
                  icon:'none'
               })
            }else{
            uni.setNavigationBarTitle({
                title: BillTypeValueMap[this.baseInfo.HBillType]
            })
        },
        methods: {
            async refreshBarCodeState() {
                this.HBarCodeFocus = false
                await this.$nextTick(() => {
                    this.HBarCodeFocus = true
                    this.HBarCode = ""
                })
            },
            playSound(e) {
                const innerAudioContext = uni.createInnerAudioContext();
                if (e == 1) {
                    innerAudioContext.src = '/static/success.wav';
                } else {
                    innerAudioContext.src = '/static/jingbao.wav';
                }
                innerAudioContext.play(); // 播放音频
            },
            //扫码
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval': '10', //超时时间
                    'timeoutText': '未识别到二维码' //超时提醒
                }, (ret) => {
                    console.log(ret.resp_result)
                    this.HBarCode = ret.resp_result
                    this.getCode(this.HBarCode)
                })
            },
            //扫条码处理
            getCode(HBarCode) {
                if (!HBarCode) {
                    this.playSound(0)
                    this.refreshBarCodeState()
                    uni.showToast({
                        title: '条码不能为空',
                        icon: 'none'
                    })
                } else {
                    let [HBarCodeBillNo] = HBarCode.split("@") //第一个参数表示单据号
                    let HBillType = this.baseInfo.HBillType
               uni.request({
                   url: this.serverUrl + '/Web/GetBillInfo',
                  data: { HBillno: HBarCodeBillNo, HBillType: HBillType , HStockOrgID: uni.getStorageSync("OrganizationID") },
                   success: (res) => {
                     console.log('扫码返回',res.data.data);
                     this.HBarCode = ''
                     if(res.data.count == 1){
                        this.playSound(1)
                        var data = res.data.data
                        this.baseInfo = {
                           HBillNo:data[0].单据号,
                           HSupName:data[0].供应商,
                           HDeptName:data[0].部门,
                           HInterID:data[0].hmainid,
                    uni.request({
                        url: this.serverUrl + '/Web/GetBillInfo',
                        data: {
                            HBillno: HBarCodeBillNo,
                            HBillType: HBillType,
                            HStockOrgID: uni.getStorageSync("OrganizationID")
                        },
                        success: (res) => {
                            console.log('扫码返回', res.data.data);
                            this.HBarCode = ''
                            if (res.data.count == 1) {
                                this.playSound(1)
                                var data = res.data.data
                                this.baseInfo = {
                                    HBillNo: data[0].单据号,
                                    HSupName: data[0].供应商,
                                    HDeptName: data[0].部门,
                                    HInterID: data[0].hmainid,
                                    HBillType: this.baseInfo.HBillType
                        }
                        this.listData = data
                     }else{
                        this.playSound(0)
                        this.refreshBarCodeState()
                        uni.showToast({
                           title:res.data.Message,
                           icon:'none'
                        })
                     }
                  },
                  fail: (res) => {
                     this.playSound(0)
                     this.refreshBarCodeState()
                     console.log(res);
                     uni.showToast({
                        title:'接口请求失败',
                        icon:'none'
                     })
                  },
               });
            }
         },
         toSon(item){
            uni.navigateTo({
               url:'./table_son?OperationType=1&closeType=1&linterid=' + item.hmainid + '&hsubid=' + item.hsubid
            })
         }
       }
   }
                                }
                                this.listData = data
                            } else {
                                this.playSound(0)
                                this.refreshBarCodeState()
                                uni.showToast({
                                    title: res.data.Message,
                                    icon: 'none'
                                })
                            }
                        },
                        fail: (res) => {
                            this.playSound(0)
                            this.refreshBarCodeState()
                            console.log(res);
                            uni.showToast({
                                title: '接口请求失败',
                                icon: 'none'
                            })
                        },
                    });
                }
            },
            toSon(item) {
                uni.navigateTo({
                    url: './table_son?OperationType=1&closeType=1&linterid=' + item.hmainid + '&hsubid=' + item
                        .hsubid
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
   .form{
      width: 640rpx;
      margin: 20rpx auto;
   }
    .form-item{
      display: flex;
      align-items: center;
      font-size: 28rpx;
      padding: 6rpx 0;
      .title{
         width: 180rpx;
         text{
            color: red;
            font-weight: bold;
         }
      }
      .right{
         width: 450rpx;
         border-radius: 22rpx;
         border: 1px solid #acacac;
      }
      .righton{
         width: 450rpx;
         border-radius: 22rpx;
         border: 1px solid #e4e4e4;
         background-color: #e4e4e4;
      }
      input{
         width: 100%;
         padding: 8rpx 20rpx;
         font-size: 30rpx;
      }
   }
   .buttons{
      width: 100%;
      display: flex;
      justify-content: center;
      margin-top: 20rpx;
      button{
         border-radius: 50rpx;
         width: 180rpx;
         height: 66rpx;
         line-height: 66rpx;
         font-size: 28rpx;
      }
      .btn-a{
         background-color: #acacac;
         color: #fff;
      }
      .btn-b{
         background-color: #41a863;
         color: #fff;
      }
      .btn-c{
         background-color: #3a78ff;
         color: #fff;
      }
   }
   .list{
      width: 100%;
      .card-detail{
         width: 100%;
         display: flex;
         flex-wrap: wrap;
         justify-content: space-between;
         line-height: 120%;
         .detail{
            // width: 50%;
            font-size: 26rpx;
            margin-bottom: 12rpx;
            color: #555;
            margin-right: 20rpx;
            text{
               color: #999;
               font-size: 26rpx;
            }
         }
      }
      .more{
         color: #888;
         font-size: 24rpx;
         display: flex;
         border-top: 1px solid #eee;
         padding-top: 20rpx;
         .part{
            width: 50%;
            text-align: center;
         }
      }
   }
    .form {
        width: 640rpx;
        margin: 20rpx auto;
    }
</style>
    .form-item {
        display: flex;
        align-items: center;
        font-size: 28rpx;
        padding: 6rpx 0;
        .title {
            width: 180rpx;
            text {
                color: red;
                font-weight: bold;
            }
        }
        .right {
            width: 450rpx;
            border-radius: 22rpx;
            border: 1px solid #acacac;
        }
        .righton {
            width: 450rpx;
            border-radius: 22rpx;
            border: 1px solid #e4e4e4;
            background-color: #e4e4e4;
        }
        input {
            width: 100%;
            padding: 8rpx 20rpx;
            font-size: 30rpx;
        }
    }
    .buttons {
        width: 100%;
        display: flex;
        justify-content: center;
        margin-top: 20rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #acacac;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #3a78ff;
            color: #fff;
        }
    }
    .list {
        width: 100%;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            line-height: 120%;
            .detail {
                // width: 50%;
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
        }
        .more {
            color: #888;
            font-size: 24rpx;
            display: flex;
            border-top: 1px solid #eee;
            padding-top: 20rpx;
            .part {
                width: 50%;
                text-align: center;
            }
        }
    }
</style>