小小儁爺
2025-11-19 0552bde02a9f07f52bcff9a044b9de3e64f868be
pages/zlgl/wgjy.vue
@@ -2,227 +2,231 @@
   <view>
      <page-nav title="完工检验"></page-nav>
      <view v-if="processArr.length===0">
         <div class="sacnBody">
            <div class="scanImg" @click="topScanClick"></div>
            <div class="scanText">扫描工序任务码</div>
         </div>
      </view>
      <view class="flex_center" style="margin: 20rpx;">
      <view v-if="processArr.length!==0" class="mainContent" style="height: 1340rpx;overflow: auto">
         <view>
            <u-gap height="10" bgColor="#eff0f1"></u-gap>
            <view class="head" style="height: 386rpx;overflow: auto;">
               <view class="head_block">
                  <view class="head_left">
                     <view class="head_bar"></view>
                     <view class="head_title" style="font-weight: bolder;">
                        工单信息
                     </view>
                  </view>
               </view>
         <!-- #ifdef H5 -->
         <u--input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" :placeholder="placeholder"
            style="width:100%;background-color: #fff;border-radius: 40rpx;" border="surround" suffixIcon="scan"
            suffixIconStyle="color: #909399;font-size: 22px;" v-model="inputBoxValue"
            @change="confirmInputBoxValue">
            <template slot="suffix">
               <u-icon name="scan" color="#909399" size="24" @click="scanClick"></u-icon>
            </template>
         </u--input>
         <!-- #endif -->
               <view class="marginLeft20 marginRight20">
                  <view class="marginBottom20" style="display: flex;">
                     <view class="flex_column titleFont">
                        <view>单据编号:</view>
                        <view>物料编码:</view>
                        <view>物料名称:</view>
                        <view>物料规格:</view>
                        <view>工序编码:</view>
                        <view>工序名称:</view>
                     </view>
                     <view class="flex_column contentFont">
                        <view>{{processObj.wo_code}}</view>
                        <view>{{processObj.partcode}}</view>
                        <view>{{processObj.partname}}</view>
                        <view>{{processObj.partspec?processObj.partspec:'/'}}</view>
                        <view>{{processObj.stepcode}}</view>
                        <view>{{processObj.stepname}}</view>
                     </view>
                  </view>
               </view>
            </view>
         <!-- #ifdef APP-PLUS -->
         <u-input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" :placeholder="placeholder"
            style="width:100%;background-color: #fff;border-radius: 40rpx;" border="surround" suffixIcon="scan"
            suffixIconStyle="color: #909399;font-size: 22px;" v-model="inputBoxValue"
            @change="confirmInputBoxValue">
            <template slot="suffix">
               <u-icon name="scan" color="#909399" size="24" @click="scanClick"></u-icon>
            </template>
         </u-input>
         <!-- #endif -->
            <u-gap height="10" bgColor="#eff0f1"></u-gap>
            <view class="head" style="height: 290rpx;overflow: auto;">
               <view class="head_block">
                  <view class="head_left">
                     <view class="head_bar"></view>
                     <view class="head_title" style="font-weight: bolder;">
                        质检方案
                     </view>
                  </view>
               </view>
               <view class="marginLeft20 marginRight20">
                  <view class="marginBottom20" style="display: flex;">
                     <view class="flex_column titleFont">
                        <view>方案名称:</view>
                        <view>抽样方式:</view>
                        <view>报工数量:</view>
                        <view>样本数量:</view>
                     </view>
                     <view class="flex_column contentFont">
                        <view>{{processObj.checkstandname}}</view>
                        <view>{{processObj.sampmethod==='FIXED'?'固时抽检':'比例抽检'}}</view>
                        <view>{{processObj.good_qty}}</view>
                        <u-number-box inputWidth='50' v-model="processObj.sampscare" min='1'
                           :max='processObj.good_qty' class="contentFont"
                           @change="samplesChange"></u-number-box>
                     </view>
                  </view>
               </view>
            </view>
            <u-gap height="10" bgColor="#eff0f1"></u-gap>
            <view class="head" style="">
               <view class="head_block">
                  <view class="head_left">
                     <view class="head_bar"></view>
                     <view class="head_title" style="font-weight: bolder;">
                        检验项目
                     </view>
                  </view>
               </view>
               <view class="marginBottom20 marginTop10"
                  style="display: flex;justify-content: space-around;align-items: center;">
                  <u-button type="primary" :disabled="checkNumber===1" @click="preTo"
                     style="width: 160rpx;height: 60rpx;" plain text="上一件"></u-button>
                  <view style="">{{checkNumber}}/{{processObj.sampscare}}</view>
                  <u-button type="primary"
                     :disabled="checkNumber===processObj.sampscare||processArr%processArr.filter(i=>i.isPlain!=='').length===0"
                     @click="nextTo" style="width: 160rpx;height: 60rpx; " plain text="下一件"></u-button>
               </view>
               <u-gap height="6" style="width: 96%;margin-left: 2%;" bgColor="#eff0f1"></u-gap>
               <view class="marginLeft20 marginRight20 marginTop20" style="margin-bottom: 132rpx;">
                  <view class="marginBottom20 flex_column" v-for="(item,index) in processArr"
                     v-if="item.checkNumber===checkNumber" :key="item.name+index+checkNumber">
                     <view class="flex_between marginLeft20 ">
                        <view class="titleFont">{{item.name}}</view>
                        <view class="contentFont" v-if="item.numberjudge==='N'"
                           style="display: flex;width: 280rpx;">
                           <u-button type="success" style="width: 130rpx;margin-left: 10%;height: 56rpx;"
                              shape="circle" @click="item.isPlain=true;$forceUpdate()" :plain='!item.isPlain'
                              text="合格"></u-button>
                           <!-- :disabled="item.required==='Y'&&!item.real_value" -->
                           <u-button type="warning" style="width: 130rpx;margin-left: 4%;height: 56rpx;"
                              shape="circle" :plain='item.isPlain' @click="item.isPlain=false;$forceUpdate()"
                              text="不合格"></u-button>
                           <!-- :disabled="item.required==='Y'&&!item.real_value" -->
                        </view>
                     </view>
                     <view class="flex_between marginLeft20 ">
                        <view class="flex_column titleFont">
                           <view v-if="item.standvalue">标准值</view>
                           <view v-if="item.uppervalue">上限值</view>
                           <view v-if="item.lowervalue">下限值</view>
                        </view>
                        <view class="flex_column titleFont marginRight20">
                           <view v-if="item.standvalue">{{item.standvalue}}</view>
                           <view v-if="item.uppervalue">{{item.uppervalue}}</view>
                           <view v-if="item.lowervalue">{{item.lowervalue}}</view>
                        </view>
                     </view>
                     <view class="titleFont marginLeft20 marginRight20">
                        <view v-if="item.stepcheckitem_desc">描述 {{item.stepcheckitem_desc}}</view>
                     </view>
                     <view class="flex_between marginLeft20  marginTop10 marginBottom20">
                        <view class="titleFont  " style="display: flex;align-items: center;"
                           v-if="item.numberjudge==='Y'">
                           <view class="titleFont marginRight20">
                              实测值
                           </view>
                           <view class="inputClass " style="width:40%;">
                              <u--input style="" :adjustPosition='false' placeholder="请输入" border="surround"
                                 v-model="item.real_value" @change='val=>realValueBlur(val,item)'></u--input>
                           </view>
                           <view style="display: flex;width: 280rpx;margin-left: 12rpx;">
                              <u-button type="success" style="width: 130rpx;margin-left: 10%;height: 56rpx;"
                                 shape="circle" @click="item.isPlain=true;$forceUpdate()"
                                 :disabled="item.required==='Y'&&!item.real_value" :plain='!item.isPlain'
                                 text="合格"></u-button>
                              <u-button type="warning" style="width: 130rpx;margin-left: 4%;height: 56rpx;"
                                 shape="circle" :plain='item.isPlain'
                                 :disabled="item.required==='Y'&&!item.real_value"
                                 @click="item.isPlain=false;$forceUpdate()" text="不合格"></u-button>
                           </view>
                        </view>
                     </view>
                     <!-- <view class=" marginLeft20 marginRight20 marginTop10">
                        <view class="titleFont"> 描述:{{item.stepcheckitem_desc}}</view>
                     </view>
                     <view class=" marginLeft20 marginRight20 marginTop10 marginBottom20"
                        style="display: flex;align-items: center;">
                        <view class="contentFont"> 备注:</view>
                        <view class="inputClass " style="">
                           <u--input style="" placeholder="请输入" border="surround"
                              v-model="item.stepcheckitem_remark"></u--input>
                        </view>
                     </view> -->
                     <u-gap height="6"
                        v-if="(index+1)%processArr.map(i=>i.checkNumber===1).filter(i=>i).length!==0"
                        style="width: 96%;margin-left: 2%;" bgColor="#eff0f1"></u-gap>
                  </view>
               </view>
            </view>
         <view class="flex_center marginLeft20" @click="popupShow=true">
            <u--text size='16' color='#909399' text="筛选"></u--text>
            <u--image :showLoading="true" src="../../static/img/sift.png" width="20px" height="20px"></u--image>
         </view>
      </view>
      <view class="footer" v-if="processArr.length!==0">
         <u-button v-if="processArr.length!==0" type="primary" size='large'
            :disabled="!(processArr.filter(i=>i.isPlain==='').length===0)" :hairline="true" @click="navigateTo"
            text="下一步"></u-button>
      <u-alert :title="alertTitle" type="info"></u-alert>
      <!-- 折叠面板 -->
      <!-- <u-collapse @change="change" @close="close" @open="open"> -->
      <!-- @change="collapseChange" -->
      <u-collapse style="max-height: 590px;overflow: auto;">
         <!-- :value='parseFloat(item.ordergoodqty)+"/"+parseFloat(item.orderqty)' -->
         <scroll-view scroll-y :style="{height: 590 + 'px'}" @scrolltolower="loadMore">
            <u-collapse-item style="position: relative;" :title="item.ordercode" :name='item.ordercode'
               v-if='item.children.length!==0' :value='parseFloat(item.ordergoodqty)+"/"+parseFloat(item.orderqty)'
               :label="item.children.length===0?'未派发':''" :disabled='item.children.length===0'
               v-for="item in collapseArr" :key="item.ordercode">
               <view style="position: absolute;left: 30rpx;top:34px;font-size: 24rpx;color: #999;">
                  {{item.partname}} {{item.partspec}}
               </view>
               <!-- <view style="position: absolute;width: 26%;left: 44%;top:16px;"> -->
               <view style="position: absolute;width: 120px;left: 44%;top:16px;color:#0659ff"
                  @click="progressClick(item.ordercode)">
                  <!-- {{item.partname}}{{item.partspec}} -->
                  <u-line-progress :percentage="parseFloat((item.ordergoodqty*100/item.orderqty).toFixed(2))"
                     inactiveColor="#d1d6f5" height="10" activeColor="#0659ff"></u-line-progress>
               </view>
               <!--          <view style="position: absolute;width: 100px;right: 33px;  top:13px; ">
               <view class="" style="display: flex;justify-content: flex-end;">
                  <view style="color: #0659ff;">
                     {{parseFloat(item.ordergoodqty)}}
                  </view>
                  <view>
                     /{{ parseFloat(item.orderqty)}}
                  </view>
               </view>
            </view>
 -->
               <view v-if="radiovalue==='生产工单'" style="margin:0 0  5px">
                  <view class="flex_column">
                     <view style="display:flex">
                        <view class="titleFont" style="font-size: 14px;">产品编码:</view>
                        <view class="contentFont" style="font-size: 14px;">{{item.partcode}}</view>
                     </view>
                     <view style="display:flex">
                        <view class="titleFont" style="font-size: 14px;">产品名称:</view>
                        <view class="contentFont" style="font-size: 14px;">{{item.partname}}</view>
                     </view>
                     <view style="display:flex">
                        <view class="titleFont" style="font-size: 14px;">产品规格:</view>
                        <view class="contentFont" style="font-size: 14px;">{{item.partspec?item.partspec:'/'}}
                        </view>
                     </view>
                  </view>
               </view>
               <!-- {{item.children}} -->
               <!-- <u--text class="u-collapse-content"> -->
               <u-steps :current="-1" inactiveColor='#0659FF' direction="column">
                  <view v-for="(it,ind) in item.children" :key="item.ordercode+it.name+ind"
                     @click="gotoPage(item.ordercode,it.code)" style="display: flex;align-items: center;">
                     <!-- <u-steps-item :title="it.code+'/'+it.name+it.spec"></u-steps-item> -->
                     <u-steps-item :title="it.code+'/'+it.name"></u-steps-item>
                     <view class="" style="width: 100px;">
                        <u-line-progress :percentage="parseFloat((it.goodqty*100/it.planqty).toFixed(2))"
                           inactiveColor="#d1d6f5" height="10" activeColor="#0659ff"></u-line-progress>
                     </view>
                     <view style="width: 30%;text-align: right;">
                        <view class="" style="display: flex;justify-content: flex-end;">
                           <view style="color: #0659ff;">
                              {{parseFloat(it.goodqty)}}
                           </view>
                           <view>
                              /{{ parseFloat(it.planqty)}}
                           </view>
                        </view>
                     </view>
                  </view>
               </u-steps>
               <!-- </u--text> -->
            </u-collapse-item>
         </scroll-view>
      </u-collapse>
      <!-- 弹出层 -->
      <!-- closeIconPos='top-left' closeOnClickOverlay  closeable='true' -->
      <u-popup :show="popupShow" mode="right" @close="popupClose" @open="popupOpen">
         <view style="margin: 120px 10px 20px;" class="flex_column">
            <view style="display: flex;">
               <view>
                  单据类型:
               </view>
               <u-radio-group v-model="radiovalue" placement="column" @change="groupChange"
                  style="margin-top: 4px;">
                  <u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in radiolist"
                     :key="index+item.name" :label="item.name" iconSize='16' labelSize='16' :name="item.name">
                  </u-radio>
               </u-radio-group>
            </view>
            <u--input :placeholder="'请输入'+placeholder2" style="border: 1rpx solid #eee;" :clearable='true'
               v-model="order"></u--input>
            <view style="margin-top: 20px;display: flex;align-items: center;">
               <view class="">
                  产品信息:
               </view>
               <view class="">
                  <u-button :hairline="true" shape="circle" icon="map" :plain="true"
                     style="width: 100px;height: 26px;" type="primary" text="选择产品" @click="chosePart"></u-button>
               </view>
            </view>
            <view style="display: flex;flex-wrap: wrap;">
               <u-tag style="width:220rpx;" :text="item.name" v-for="item in tagArr" :key="item.code"
                  :closable="true" :show="item.close" @close="tagClose(item)"></u-tag>
            </view>
            <!--       <view class="head" style="margin-top: 10px;">
               <view class="head_block" style="height: 80rpx; display: flex;justify-content: space-around;">
                  <u-button :plain='today' style="width: 70px;height: 25px;" @click="dateChange('today')"
                     type="primary" shape="circle" text="今日">
                  </u-button>
                  <u-button :plain='month' style="width: 70px;height: 25px;" @click="dateChange('month')"
                     type="primary" shape="circle" text="本月">
                  </u-button>
                  <u-button :plain='custom' style="width: 70px;height: 25px;" @click="dateChange('custom')"
                     type="primary" shape="circle" text="自定义"></u-button>
               </view>
            </view> -->
            <!--             <view v-if="!custom" class="flex_column"
               style="display: flex;justify-content: space-around;width: 100%;">
               <view class="" style="display: flex;justify-content: space-evenly;width: 100%;">
                  <view class="titleFont">开始日期</view>
                  <view class="titleFont">~</view>
                  <view class="titleFont">结束日期</view>
               </view>
               <u-button type="info" icon='calendar' iconColor="#0659FF" size="" @click="calendarClick"
                  :text="calendarRange">
               </u-button>
            </view>
            <uni-calendar ref="calendar" :range='true' :insert="false" @confirm="calendarConfirm" /> -->
         </view>
      </u-popup>
      <!-- <scan-code></scan-code> -->
      <!-- 悬浮球 -->
      <view @click="scan2">
         <drag-ball :x='300' :y="600"></drag-ball>
      </view>
   </view>
</template>
<script>
   import {
      MesOrderStepCheckSearch,
      MesOrderStepCheckItemList
      ProductOrderSearch
   } from '../../config/api.js';
   export default {
      onLoad(option) {
         const _this = this
         uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器
         uni.$on('scancodedate', function(content) {
            console.log("扫描到的内容为:", content)
            _this.getCheckScanDeviceQrCodeData(content)
         })
         console.log(option, 8)
      },
      onPullDownRefresh() {
@@ -235,30 +239,81 @@
      data() {
         return {
            topRightMessageCount: '',
            inputBoxValue: '',
            alertTitle: '',
            popupShow: false, //弹出层是否显示
            collapseArr: [ //折叠面板数据
            ],
            collapseArrAll: [], //所有
            placeholder: '请输入工单信息',
            radiovalue: '生产工单', //单据类型
            // SO:销售订单  MO:生产订单  PO:生产工单
            radiolist: [{
                  name: '销售订单'
               },
               {
                  name: '生产订单'
               },
               {
                  name: '生产工单'
               },
            ],
            processObj: {
               // wocode: '',
               // partcode: '',
               // partname: '',
               // partspec: '',
               // stepcode: '',
               // stepname: '',
               // checkstandcode: '',
               // checkstandname: '',
               // check_type: '',
               // sampmethod: '', // FIXED(固时抽检)  SCARE(比例抽检)
               // sampscare: '',
               // qualitystatus: '',
               // good_qty: '', // 指的报工数量
               // sampleqty: '',
               // goodqty: '', // 合格数量
               // ngqty: '', // 不良数量
            }, //工序检验对象
            processArr: [], //工序检验数组
            today: true,
            month: false,
            custom: true,
            // calendarRange: new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
            // 10), //系统当前日期
            calendarRange: new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
               2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10), //当月日期
            checkNumber: 1, //检验项目中的检验数量  现在处于第几个
            tagArr: [
               // {
               //    close: true,
               //    name: '电池包',
               //    code: '1002'
               // }, {
               //    close: true,
               //    name: '电脑',
               //    code: '1003'
               // }, {
               //    close: true,
               //    name: '8054光机',
               //    code: '1004'
               // }, {
               //    close: true,
               //    name: 'G71674冲锋枪',
               //    code: '1005'
               // }, {
               //    close: true,
               //    name: '8051光机',
               //    code: '1006'
               // },
            ], //已选中的产品标签
            order: '', //单号
            placeholder2: '生产订单'
         }
      },
      // 监听下拉刷新动作(UniApp 原生生命周期)
      onPullDownRefresh() {
         let that = this
         uni.startPullDownRefresh({
            success() {
               that.getProductOrderSearch()
               uni.showToast({
                  title: "下拉刷新",
                  icon: 'none'
               })
            },
            complete() {
               uni.stopPullDownRefresh()
            }
         })
      },
      created() {
@@ -266,228 +321,115 @@
      mounted() {
         this.init()
         // this.getStepCheckSearch('MO-2024-01-0004_2;101')
         this.getProductOrderSearch()
      },
      methods: {
         init() {
            uni.stopPullDownRefresh();
         },
         gotoPage(p1, p2) {
            let orderstep = null
         async getStepCheckSearch(orderstepqrcode) {
            console.log('执行了')
            // 检验方式FirstCheck(首检) PatroCheck(巡检) EndCheck(完工检)
            const data = {
               // 'MO-2023-05-0003_1;Step06'
               orderstepqrcode,
               checktype: 'EndCheck',
               // stu_torgcode: uni.getStorageSync('stu_torgcode')
            }
            // const res = await MesOrderStepCheckSearch(this.global.formatData(data))
            const res = await MesOrderStepCheckSearch(data)
            if (res.code === '200') {
               this.processObj = {
                  wo_code: res.data.labcont[0].wo_code,
                  partcode: res.data.labcont[0].partcode,
                  partname: res.data.labcont[0].partname,
                  partspec: res.data.labcont[0].partspec,
                  stepcode: res.data.labcont[0].stepcode,
                  stepname: res.data.labcont[0].stepname,
                  good_qty: res.data.labcont[0].good_qty,
                  checkstandcode: res.data.chekstand[0].checkstandcode,
                  checkstandname: res.data.chekstand[0].checkstandname,
                  sampmethod: res.data.chekstand[0].sampmethod,
                  sampscare: res.data.chekstand[0].sampmethod === 'FIXED' ? res.data.chekstand[0].sampscare :
                     Math.ceil(res.data.labcont[0].good_qty * res.data.chekstand[0].sampscare / 100)
               }
               this.processObj.sampscare = this.processObj.sampscare <= this.processObj.good_qty ? this.processObj
                  .sampscare : this.processObj.good_qty
               await this.getStepCheckItemList(this.processObj.checkstandcode)
            }
         },
         async getStepCheckItemList(checkstandcode) {
            const data = {
               checkstandcode
            }
            const res = await MesOrderStepCheckItemList(data)
            this.processArr = []
            for (var i = 0; i < this.processObj.sampscare; i++) {
               res.data.forEach(j => {
                  this.processArr.push({
                     checkNumber: i + 1,
                     stepcheckitem_seq: j.stepcheckitem_seq,
                     name: j.name,
                     code: j.code,
                     standvalue: j.standvalue,
                     lowervalue: j.lowervalue,
                     uppervalue: j.uppervalue,
                     real_value: j.real_value,
                     unit: j.unit,
                     stepcheckitem_desc: j.stepcheckitem_desc,
                     stepcheckitem_remark: '',
                     isPlain: '',
                     required: j.required, //是否必填
                     numberjudge: j.numberjudge, //数值判断
                  })
               })
            }
         },
         // 样本数量值改变时
         samplesChange(val) {
            console.log(val.value)
            const t = this.processArr.filter(i => i.checkNumber === 1)
            let len = this.processArr.length / t.length
            // 件数减少时
            if (val.value < this.processArr.length / t.length) {
               this.processArr.reverse()
               const a = this.processArr.splice(0, t.length * (len - val.value))
               this.processArr.reverse()
               if (this.checkNumber > val.value) {
                  this.checkNumber = val.value
               }
            }
            // 件数变多时
            if (val.value > this.processArr.length / t.length) {
               for (var i = val.value; i > len; i--) {
                  t.forEach(j => {
                     this.processArr.push({
                        checkNumber: i,
                        stepcheckitem_seq: j.stepcheckitem_seq,
                        name: j.name,
                        code: j.code,
                        standvalue: j.standvalue,
                        lowervalue: j.lowervalue,
                        uppervalue: j.uppervalue,
                        real_value: '',
                        unit: j.unit,
                        stepcheckitem_desc: j.stepcheckitem_desc,
                        stepcheckitem_remark: '',
                        isPlain: '',
                        required: j.required, //是否必填
                        numberjudge: j.numberjudge, //数值判断
                     })
                  })
               }
               this.processArr.sort((a, b) => a.checkNumber - b.checkNumber)
            }
            // console.log(this.processArr, 1)
            // console.log(this.processArr.length, 1)
            this.$forceUpdate()
         },
         // 上一件
         preTo() {
            if (this.checkNumber > 1) {
               this.checkNumber--
            }
         },
         //下一件
         nextTo() {
            if (this.checkNumber < this.processObj.sampscare) {
               this.checkNumber++
            }
            this.$forceUpdate()
         },
         // 实测值输入时失焦状态
         realValueBlur(val, item) {
            console.log(val === '', item)
            if (val.value !== '') {
               if (item.numberjudge === 'Y') { //如果需要进行数值判断
                  if (item.uppervalue === '' && item.lowervalue === '') { //上限值为空,下限值为空
                     if (parseFloat(val) === parseFloat(item.standvalue)) {
                        item.isPlain = true
                     } else {
                        item.isPlain = false
                     }
                  }
                  if (item.uppervalue !== '' && item.lowervalue !== '') { //上限值不为空,下限值不为空
                     if (parseFloat(val) >= parseFloat(item.lowervalue) && parseFloat(val) <=
                        parseFloat(item.uppervalue)) {
                        item.isPlain = true
                     } else {
                        item.isPlain = false
                     }
                  }
                  if (item.uppervalue !== '' && item.lowervalue === '') { //上限值不为空,下限值为空
                     if (parseFloat(val) <= parseFloat(item.uppervalue)) {
                        item.isPlain = true
                     } else {
                        item.isPlain = false
                     }
                  }
                  if (item.uppervalue === '' && item.lowervalue !== '') { //上限值为空,下限值不为空
                     if (parseFloat(val) >= parseFloat(item.lowervalue)) {
                        item.isPlain = true
                     } else {
                        item.isPlain = false
                     }
                  }
               }
            }
            if (val === '') {
               item.isPlain = ''
            }
            // this.$forceUpdate()
         },
         // 下一步
         navigateTo() {
            // 计算OK值
            let goodqty = 0;
            for (var i = 0; i < this.processObj.sampscare; i++) {
               let flag = this.processArr.filter(j => j.checkNumber === i + 1).every(j => j.isPlain)
               if (flag) {
                  goodqty++
               }
            if (p1) {
               orderstep = p1 + ';' + p2
            } else {
               orderstep = ''
            }
            uni.navigateTo({
               url: './wgjy2?processObj=' + JSON.stringify(this.processObj) +
                  '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
            });
               url: './wgjy1?orderstep=' + orderstep
            })
         },
         getCheckboxValue(val) {
            this.tagArr = []
            val.forEach(i => {
               this.tagArr.push({
                  close: true,
                  name: i.split('/')[1].trim(),
                  code: i.split('/')[0].trim()
               })
            })
         },
         // 接口获取
         async getProductOrderSearch() {
            let ordertype = '' // SO:销售订单  MO:生产订单  PO:生产工单
            switch (this.radiovalue) {
               case '生产工单':
                  this.alertTitle = '工单数量(共/个)'
                  this.placeholder = '请输入工单信息'
                  ordertype = 'PO'
                  break
               case '生产订单':
                  // this.alertTitle = '生产订单数量(共/个)'
                  this.alertTitle = '工单数量(共/个)'
                  this.placeholder = '请输入生产订单信息'
                  ordertype = 'MO'
                  break
               case '销售订单':
                  // this.alertTitle = '销售订单数量(共/个)'
                  this.alertTitle = '工单数量(共/个)'
                  this.placeholder = '请输入销售订单信息'
                  ordertype = 'SO'
                  break
            }
            const data = {
               ordertype,
               partcode: this.tagArr.map(i => i.code).join(','),
               ordercode: this.order,
               Ratetime: '',
               // Ratetime: this.calendarRange,
            }
            const {
               data: res
            } = await ProductOrderSearch(data)
            this.collapseArr = res
            this.collapseArrAll = res
            this.alertTitle = this.alertTitle.split('/')[0] + this.collapseArr.length + this.alertTitle.split('/')[
               1]
         },
         loadMore() {
         },
         // 扫码
         //输入框回车确认事件
         confirmInputBoxValue(val) {
            this.collapseArr = this.collapseArrAll.filter((p) => {
               return p.ordercode.indexOf(val) !== -1
            })
            switch (this.radiovalue) {
               case '生产工单':
                  this.alertTitle = '工单数量(共/个)'
                  break
               case '生产订单':
                  this.alertTitle = '工单数量(共/个)'
                  // this.alertTitle = '生产订单数量(共/个)'
                  break
               case '销售订单':
                  this.alertTitle = '工单数量(共/个)'
                  // this.alertTitle = '销售订单数量(共/个)'
                  break
            }
            this.alertTitle = this.alertTitle.split('/')[0] + this.collapseArr.length + this.alertTitle.split('/')[
               1]
         },
         // 点击扫码
         scanClick() {
            this.topScanClick()
         },
         // 扫码框点击
         topScanClick() {
            let that = this;
@@ -498,20 +440,9 @@
               success: function(res) {
                  console.log('条码类型:' + res.scanType);
                  console.log('条码内容:' + res.result);
                  that.getStepCheckSearch(res.result)
                  // that.scanContent = res.result;
                  // let flag = false
                  // that.processArr.forEach(item => {
                  //    if (item.hbarcode === res.result) {
                  //       flag = true
                  //    }
                  // })
                  // if (flag) {
                  //    that.$u.toast('此条码已扫描,已在列表中!')
                  // } else {
                  //    //处理扫码事件
                  //    // that.getStepCheckSearch(that.scanContent);
                  // }
                  that.scanContent = res.result;
                  that.getCheckScanDeviceQrCodeData(that.scanContent);
               },
               complete: function(res) {
@@ -524,11 +455,139 @@
            });
         },
         fromSubmitData() {
            this.processObj = {}
            this.processArr = []
            this.checkNumber = 1
         }
         scan2() {
            let that = this;
            uni.scanCode({
               onlyFromCamera: true,
               // scanType: ['barCode', 'qrCode'],
               scanType: ['qrCode'],
               success: function(res) {
                  console.log('条码类型:' + res.scanType);
                  console.log('条码内容:' + res.result);
                  // that.scanContent = res.result;
                  uni.navigateTo({
                     url: './scbg2?orderstep=' + res.result
                  })
               },
               complete: function(res) {
               },
               fail: function(res) {
                  console.log('条码类型:' + res.scanType);
                  console.log('条码内容:' + res.result);
               }
            });
         },
         getCheckScanDeviceQrCodeData(code) {
            this.inputBoxValue = code
            this.confirmInputBoxValue(this.inputBoxValue)
         },
         // 弹出层收起
         popupClose() {
            this.getProductOrderSearch()
            this.popupShow = false
         },
         // 弹出层弹出
         popupOpen() {
         },
         // 选择产品
         chosePart() {
            let arr = []
            this.tagArr.forEach(i => {
               arr.push(i.code + '/' + i.name)
            })
            uni.navigateTo({
               url: '../znfx/chda?param=' + JSON.stringify(arr)
            });
         },
         // tag标签关闭
         tagClose(val) {
            this.tagArr.forEach((i, j) => {
               if (i.code === val.code) {
                  i.close = false
                  this.tagArr.splice(j, 1)
               }
            })
         },
         // 时间范围切换
         dateChange(val) {
            if (val === 'today') {
               this.today = false
               this.month = true
               this.custom = true
               this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
                  10)
            } else if (val === 'month') {
               this.today = true
               this.month = false
               this.custom = true
               this.calendarRange = new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
                  2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10)
            } else if (val === 'custom') {
               this.today = true
               this.month = true
               this.custom = false
               this.calendarRange = new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
                  2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10)
            }
         },
         // 日历时间点击
         calendarClick() {
            this.$refs.calendar.open();
         },
         // 日历确定事件点击
         calendarConfirm(val) {
            if (val.range.before < val.range.after) {
               this.calendarRange = val.range.before + '~' + val.range.after
            } else {
               this.calendarRange = val.range.after + '~' + val.range.before
            }
            if (val.range.before === '') {
               this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + val.range.after
            }
            if (val.range.after === '') {
               this.calendarRange = val.range.before + '~' + new Date().toISOString().slice(0, 10)
            }
            if (val.range.before === '' && val.range.after === '') {
               this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
                  10)
            }
            // this.getData()
         },
         // 单选按钮切换
         groupChange(val) {
            console.log(val)
            this.placeholder2 = val
         },
      }
   }
</script>
@@ -540,20 +599,74 @@
      display: block;
   }
   ::v-deep .u-input {
      padding: 6rpx 18rpx !important;
   ::v-deep .u-alert__text--info--light {
      margin-bottom: 0;
      font-size: 32rpx !important;
      padding-left: 10rpx;
      color: #212121 !important;
      font-weight: lighter;
   }
   ::v-deep .u-number-box__minus {
      height: 50rpx !important;
   ::v-deep .u-alert--info--light {
      background-color: rgba(255, 255, 255, 0.7);
   }
   ::v-deep .u-number-box__input {
      height: 50rpx !important;
   ::v-deep .u-steps-item__wrapper {
      background-color: #eee;
   }
   ::v-deep .u-steps-item__line--column {
      display: none;
   }
   ::v-deep .u-slide-right-enter-active {
      width: 70%;
   }
   ::v-deep .uicon-calendar {
      font-size: 36rpx !important;
   }
   ::v-deep .u-cell__title-text {
      font-size: 28rpx;
      color: #212121;
   }
   ::v-deep .u-cell__value {
      font-size: 28rpx;
      // color: transparent;
      color: #212121;
   }
   ::v-deep .u-number-box__plus {
      height: 50rpx !important;
   ::v-deep .u-cell__label {
      margin-top: 0;
      line-height: 12px;
   }
   ::v-deep .uicon-arrow-right {
      font-size: 14px !important;
      color: #212121 !important;
   }
   ::v-deep .u-line-progress__text {
      // margin-right: -20px;
      // color: #212121;
      // width: 100px;
      // margin-top: 10px;
      display: none;
   }
   ::v-deep .u-text__value--content {
      font-size: 12px !important;
   }
   ::v-deep .u-tag__close {
      background: #436df5 !important;
   }
   ::v-deep .u-cell__body {
      padding-bottom: 40rpx;
   }
</style>