04e9e6fabb880d892b34cddc4dad7e033e8e7d6e..0552bde02a9f07f52bcff9a044b9de3e64f868be
2025-11-19 小小儁爺
1.生产报工、质量管理页面优化
0552bd 对比 | 目录
2025-11-19 小小儁爺
1.生产报工 查询条件 变更
89513a 对比 | 目录
2025-11-19 小小儁爺
1.下拉刷新列表功能实现
489864 对比 | 目录
已添加3个文件
已修改11个文件
5031 ■■■■ 文件已修改
config/api.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/scgl/scbg.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/sjjy.vue 1029 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/sjjy1.vue 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/sjjy2.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/wgjy.vue 1029 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/wgjy1.vue 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/wgjy2.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/xjjy.vue 1029 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/xjjy1.vue 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zlgl/xjjy2.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/znfx/chda.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/api.js
@@ -430,4 +430,18 @@
export const AppDailyWageReportSearch = (data, config = {}) => http.get(
    '/AppPersonal/DailyWageReportSearch', {
        params: data
    })
//App已派发工单的物料
export const DistrInventory = (data, config = {}) => http.get(
    '/AppProduct/DistrInventory', {
        params: data
    })
//App查看单据及工艺信息
export const ProductOrderSearch = (data, config = {}) => http.get(
    '/AppProduct/ProductOrderSearch', {
        params: data
    })
pages.json
@@ -196,7 +196,7 @@
            "style": {
                "navigationBarTitleText": "生产报工",
                "navigationStyle": "custom",
                "enablePullDownRefresh": false
                "enablePullDownRefresh": true
            }
        },
        {
@@ -205,6 +205,7 @@
                "navigationBarTitleText": "生产报工",
                "navigationStyle": "custom",
                "enablePullDownRefresh": false
            }
        },
        {
@@ -290,6 +291,14 @@
            }
        },
        {
            "path": "pages/zlgl/sjjy1",
            "style": {
                "navigationBarTitleText": "首检检验",
                "navigationStyle": "custom",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/zlgl/sjjy2",
            "style": {
                "navigationBarTitleText": "首检检验",
@@ -306,6 +315,14 @@
            }
        },
        {
            "path": "pages/zlgl/xjjy1",
            "style": {
                "navigationBarTitleText": "巡检检验",
                "navigationStyle": "custom",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/zlgl/xjjy2",
            "style": {
                "navigationBarTitleText": "巡检检验",
@@ -322,6 +339,14 @@
            }
        },
        {
            "path": "pages/zlgl/wgjy1",
            "style": {
                "navigationBarTitleText": "完工检验",
                "navigationStyle": "custom",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/zlgl/wgjy2",
            "style": {
                "navigationBarTitleText": "完工检验",
pages/login/index.vue
@@ -110,7 +110,7 @@
                AppUpgrade().then(res => {
                    this.isShow = res.data[0].version !== this.$appVersion
                    if (res.data[0].version !== this.$appVersion) { // è¯´æ˜Žä¸Žæœ€æ–°ç‰ˆæœ¬ä¸åŒ¹é…
                        this.downloadUrl = this.$baseUrl.substring(0, 25) + '/APK/JLAPP.apk'
                        this.downloadUrl = this.$baseUrl.substring(0, 25) + '/APK/YBAPP.apk'
                    }
                })
pages/scgl/scbg.vue
@@ -42,25 +42,26 @@
        <!-- @change="collapseChange" -->
        <u-collapse style="max-height: 590px;overflow: auto;">
            <!-- :value='parseFloat(item.ordergoodqty)+"/"+parseFloat(item.orderqty)' -->
            <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">
            <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;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: 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 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)}}
@@ -73,55 +74,55 @@
 -->
                <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 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>
                    </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 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>
                </u-steps>
                <!-- </u--text> -->
                    <!-- {{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>
                </u-collapse-item>
            </scroll-view>
        </u-collapse>
@@ -129,7 +130,7 @@
        <!-- 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>
                        å•据类型:
@@ -142,7 +143,11 @@
                        </u-radio>
                    </u-radio-group>
                </view> -->
                </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;">
@@ -156,6 +161,7 @@
                </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>
@@ -163,7 +169,7 @@
                <view class="head" style="margin-top: 10px;">
                <!--         <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="今日">
@@ -174,9 +180,9 @@
                        <u-button :plain='custom' style="width: 70px;height: 25px;" @click="dateChange('custom')"
                            type="primary" shape="circle" text="自定义"></u-button>
                    </view>
                </view>
                </view> -->
                <view v-if="!custom" class="flex_column"
                <!--                 <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>
@@ -189,7 +195,7 @@
                    </u-button>
                </view>
                <uni-calendar ref="calendar" :range='true' :insert="false" @confirm="calendarConfirm" />
                <uni-calendar ref="calendar" :range='true' :insert="false" @confirm="calendarConfirm" /> -->
            </view>
        </u-popup>
@@ -208,7 +214,7 @@
<script>
    import {
        ProductionScheduleKanban
        ProductOrderSearch
    } from '../../config/api.js';
    export default {
        onLoad(option) {
@@ -288,9 +294,26 @@
                    //     code: '1006'
                    // },
                ], //已选中的产品标签
                order: '', //单号
                placeholder2: '生产订单'
            }
        },
        // ç›‘听下拉刷新动作(UniApp åŽŸç”Ÿç”Ÿå‘½å‘¨æœŸï¼‰
        onPullDownRefresh() {
            let that = this
            uni.startPullDownRefresh({
                success() {
                    that.getProductOrderSearch()
                    uni.showToast({
                        title: "下拉刷新",
                        icon: 'none'
                    })
                },
                complete() {
                    uni.stopPullDownRefresh()
                }
            })
        },
        created() {
@@ -298,7 +321,7 @@
        mounted() {
            this.init()
            this.getProductionScheduleKanban()
            this.getProductOrderSearch()
        },
        methods: {
            init() {
@@ -331,7 +354,7 @@
            },
            // æŽ¥å£èŽ·å–
            async getProductionScheduleKanban() {
            async getProductOrderSearch() {
                let ordertype = '' // SO:销售订单  MO:生产订单  PO:生产工单
                switch (this.radiovalue) {
                    case '生产工单':
@@ -340,12 +363,14 @@
                        ordertype = 'PO'
                        break
                    case '生产订单':
                        this.alertTitle = '生产订单数量(共/个)'
                        // this.alertTitle = '生产订单数量(共/个)'
                        this.alertTitle = '工单数量(共/个)'
                        this.placeholder = '请输入生产订单信息'
                        ordertype = 'MO'
                        break
                    case '销售订单':
                        this.alertTitle = '销售订单数量(共/个)'
                        // this.alertTitle = '销售订单数量(共/个)'
                        this.alertTitle = '工单数量(共/个)'
                        this.placeholder = '请输入销售订单信息'
                        ordertype = 'SO'
                        break
@@ -355,12 +380,14 @@
                const data = {
                    ordertype,
                    partcode: this.tagArr.map(i => i.code).join(','),
                    Ratetime: this.calendarRange,
                    ordercode: this.order,
                    Ratetime: '',
                    // Ratetime: this.calendarRange,
                }
                const {
                    data: res
                } = await ProductionScheduleKanban(data)
                } = await ProductOrderSearch(data)
                this.collapseArr = res
                this.collapseArrAll = res
@@ -368,7 +395,9 @@
                    1]
            },
            loadMore() {
            },
            //输入框回车确认事件
            confirmInputBoxValue(val) {
@@ -460,7 +489,7 @@
            // å¼¹å‡ºå±‚æ”¶èµ·
            popupClose() {
                this.getProductionScheduleKanban()
                this.getProductOrderSearch()
                this.popupShow = false
            },
@@ -545,6 +574,7 @@
            // å•选按钮切换
            groupChange(val) {
                console.log(val)
                this.placeholder2 = val
            },
pages/zlgl/sjjy.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: 'FirstCheck',
                    // 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: './sjjy2?processObj=' + JSON.stringify(this.processObj) +
                        '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
                });
                    url: './sjjy1?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>
pages/zlgl/sjjy1.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,565 @@
<template>
    <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 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>
                    <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>
                <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>
        </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>
        </view>
    </view>
</template>
<script>
    import {
        MesOrderStepCheckSearch,
        MesOrderStepCheckItemList
    } from '../../config/api.js';
    export default {
        onLoad(option) {
            this.getStepCheckSearch(option.orderstep)
        },
        onPullDownRefresh() {
            setTimeout(() => {
                this.init(() => {
                    uni.stopPullDownRefresh();
                })
            }, 1000);
        },
        data() {
            return {
                processObj: {
                    // wocode: '',
                    // partcode: '',
                    // partname: '',
                    // partspec: '',
                    // stepcode: '',
                    // stepname: '',
                    // checkstandcode: '',
                    // checkstandname: '',
                    // check_type: '',
                    // sampmethod: '', // FIXED(固时抽检)  SCARE(比例抽检)
                    // sampscare: '',
                    // qualitystatus: '',
                    // good_qty: '', // æŒ‡çš„æŠ¥å·¥æ•°é‡
                    // sampleqty: '',
                    // goodqty: '', // åˆæ ¼æ•°é‡
                    // ngqty: '', // ä¸è‰¯æ•°é‡
                }, //工序检验对象
                processArr: [], //工序检验数组
                checkNumber: 1, //检验项目中的检验数量  çŽ°åœ¨å¤„äºŽç¬¬å‡ ä¸ª
            }
        },
        created() {
        },
        mounted() {
            this.init()
            // this.getStepCheckSearch('MO-2025-10-0008_1;001')
        },
        methods: {
            init() {
                uni.stopPullDownRefresh();
            },
            async getStepCheckSearch(orderstepqrcode) {
                console.log('执行了')
                // æ£€éªŒæ–¹å¼FirstCheck(首检) PatroCheck(巡检) EndCheck(完工检)
                const data = {
                    // 'MO-2023-05-0003_1;Step06'
                    orderstepqrcode,
                    checktype: 'FirstCheck',
                    // 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)
                } else {
                    setTimeout(() => {
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                        })
                    }, 1000)
                }
            },
            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++
                    }
                }
                uni.navigateTo({
                    url: './sjjy2?processObj=' + JSON.stringify(this.processObj) +
                        '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
                });
            },
            // æ‰«ç 
            topScanClick() {
                let that = this;
                uni.scanCode({
                    onlyFromCamera: true,
                    // scanType: ['barCode', 'qrCode'],
                    scanType: ['qrCode'],
                    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);
                        // }
                    },
                    complete: function(res) {
                    },
                    fail: function(res) {
                        console.log('条码类型:' + res.scanType);
                        console.log('条码内容:' + res.result);
                    }
                });
            },
            fromSubmitData() {
                this.processObj = {}
                this.processArr = []
                this.checkNumber = 1
            }
        }
    }
</script>
<style lang="scss" scoped>
    @import url('@/style/global.css');
    ::v-deep .uicon-arrow-left>span {
        display: block;
    }
    ::v-deep .u-input {
        padding: 6rpx 18rpx !important;
    }
    ::v-deep .u-number-box__minus {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__input {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__plus {
        height: 50rpx !important;
    }
</style>
pages/zlgl/sjjy2.vue
@@ -249,10 +249,10 @@
                    setTimeout(() => {
                        let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        // let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        // prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                            delta: 2, //返回层数,1则上页
                        })
                    }, 1000)
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>
pages/zlgl/wgjy1.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,565 @@
<template>
    <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 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>
                    <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>
                <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>
        </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>
        </view>
    </view>
</template>
<script>
    import {
        MesOrderStepCheckSearch,
        MesOrderStepCheckItemList
    } from '../../config/api.js';
    export default {
        onLoad(option) {
            this.getStepCheckSearch(option.orderstep)
        },
        onPullDownRefresh() {
            setTimeout(() => {
                this.init(() => {
                    uni.stopPullDownRefresh();
                })
            }, 1000);
        },
        data() {
            return {
                processObj: {
                    // wocode: '',
                    // partcode: '',
                    // partname: '',
                    // partspec: '',
                    // stepcode: '',
                    // stepname: '',
                    // checkstandcode: '',
                    // checkstandname: '',
                    // check_type: '',
                    // sampmethod: '', // FIXED(固时抽检)  SCARE(比例抽检)
                    // sampscare: '',
                    // qualitystatus: '',
                    // good_qty: '', // æŒ‡çš„æŠ¥å·¥æ•°é‡
                    // sampleqty: '',
                    // goodqty: '', // åˆæ ¼æ•°é‡
                    // ngqty: '', // ä¸è‰¯æ•°é‡
                }, //工序检验对象
                processArr: [], //工序检验数组
                checkNumber: 1, //检验项目中的检验数量  çŽ°åœ¨å¤„äºŽç¬¬å‡ ä¸ª
            }
        },
        created() {
        },
        mounted() {
            this.init()
            // this.getStepCheckSearch('MO-2024-01-0004_2;101')
        },
        methods: {
            init() {
                uni.stopPullDownRefresh();
            },
            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)
                } else {
                    setTimeout(() => {
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                        })
                    }, 1000)
                }
            },
            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++
                    }
                }
                uni.navigateTo({
                    url: './wgjy2?processObj=' + JSON.stringify(this.processObj) +
                        '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
                });
            },
            // æ‰«ç 
            topScanClick() {
                let that = this;
                uni.scanCode({
                    onlyFromCamera: true,
                    // scanType: ['barCode', 'qrCode'],
                    scanType: ['qrCode'],
                    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);
                        // }
                    },
                    complete: function(res) {
                    },
                    fail: function(res) {
                        console.log('条码类型:' + res.scanType);
                        console.log('条码内容:' + res.result);
                    }
                });
            },
            fromSubmitData() {
                this.processObj = {}
                this.processArr = []
                this.checkNumber = 1
            }
        }
    }
</script>
<style lang="scss" scoped>
    @import url('@/style/global.css');
    ::v-deep .uicon-arrow-left>span {
        display: block;
    }
    ::v-deep .u-input {
        padding: 6rpx 18rpx !important;
    }
    ::v-deep .u-number-box__minus {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__input {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__plus {
        height: 50rpx !important;
    }
</style>
pages/zlgl/wgjy2.vue
@@ -248,10 +248,10 @@
                    setTimeout(() => {
                        let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        // let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        // prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                            delta: 2, //返回层数,1则上页
                        })
                    }, 1000)
pages/zlgl/xjjy.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: 'PatroCheck',
                    // 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: './xjjy2?processObj=' + JSON.stringify(this.processObj) +
                        '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
                });
                    url: './xjjy1?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>
pages/zlgl/xjjy1.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,565 @@
<template>
    <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 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>
                    <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>
                <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>
        </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>
        </view>
    </view>
</template>
<script>
    import {
        MesOrderStepCheckSearch,
        MesOrderStepCheckItemList
    } from '../../config/api.js';
    export default {
        onLoad(option) {
            this.getStepCheckSearch(option.orderstep)
        },
        onPullDownRefresh() {
            setTimeout(() => {
                this.init(() => {
                    uni.stopPullDownRefresh();
                })
            }, 1000);
        },
        data() {
            return {
                processObj: {
                    // wocode: '',
                    // partcode: '',
                    // partname: '',
                    // partspec: '',
                    // stepcode: '',
                    // stepname: '',
                    // checkstandcode: '',
                    // checkstandname: '',
                    // check_type: '',
                    // sampmethod: '', // FIXED(固时抽检)  SCARE(比例抽检)
                    // sampscare: '',
                    // qualitystatus: '',
                    // good_qty: '', // æŒ‡çš„æŠ¥å·¥æ•°é‡
                    // sampleqty: '',
                    // goodqty: '', // åˆæ ¼æ•°é‡
                    // ngqty: '', // ä¸è‰¯æ•°é‡
                }, //工序检验对象
                processArr: [], //工序检验数组
                checkNumber: 1, //检验项目中的检验数量  çŽ°åœ¨å¤„äºŽç¬¬å‡ ä¸ª
            }
        },
        created() {
        },
        mounted() {
            this.init()
            // this.getStepCheckSearch('MO-2024-01-0004_2;101')
        },
        methods: {
            init() {
                uni.stopPullDownRefresh();
            },
            async getStepCheckSearch(orderstepqrcode) {
                console.log('执行了')
                // æ£€éªŒæ–¹å¼FirstCheck(首检) PatroCheck(巡检) EndCheck(完工检)
                const data = {
                    // 'MO-2023-05-0003_1;Step06'
                    orderstepqrcode,
                    checktype: 'PatroCheck',
                    // 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)
                } else {
                    setTimeout(() => {
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                        })
                    }, 1000)
                }
            },
            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++
                    }
                }
                uni.navigateTo({
                    url: './xjjy2?processObj=' + JSON.stringify(this.processObj) +
                        '&processArr=' + JSON.stringify(this.processArr) + '&goodqty=' + goodqty
                });
            },
            // æ‰«ç 
            topScanClick() {
                let that = this;
                uni.scanCode({
                    onlyFromCamera: true,
                    // scanType: ['barCode', 'qrCode'],
                    scanType: ['qrCode'],
                    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);
                        // }
                    },
                    complete: function(res) {
                    },
                    fail: function(res) {
                        console.log('条码类型:' + res.scanType);
                        console.log('条码内容:' + res.result);
                    }
                });
            },
            fromSubmitData() {
                this.processObj = {}
                this.processArr = []
                this.checkNumber = 1
            }
        }
    }
</script>
<style lang="scss" scoped>
    @import url('@/style/global.css');
    ::v-deep .uicon-arrow-left>span {
        display: block;
    }
    ::v-deep .u-input {
        padding: 6rpx 18rpx !important;
    }
    ::v-deep .u-number-box__minus {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__input {
        height: 50rpx !important;
    }
    ::v-deep .u-number-box__plus {
        height: 50rpx !important;
    }
</style>
pages/zlgl/xjjy2.vue
@@ -248,10 +248,10 @@
                    setTimeout(() => {
                        let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        // let prevPage = getCurrentPages()[getCurrentPages().length - 2]; // ä¸Šä¸€é¡µé¢å®žä¾‹
                        // prevPage.$vm.fromSubmitData() // è°ƒç”¨ä¸Šä¸€é¡µ å®šä¹‰çš„æ–¹æ³•
                        uni.navigateBack({
                            delta: 1, //返回层数,1则上页
                            delta: 2, //返回层数,1则上页
                        })
                    }, 1000)
pages/znfx/chda.vue
@@ -45,17 +45,11 @@
<script>
    import {
        InventoryTreePermissions
        DistrInventory
    } from '../../config/api.js';
    export default {
        onLoad(option) {
            App.watch(this.getTopRightMessageCountIsChange, 'topRightMessageCountIsChange')
            console.log(option, 66)
            this.checkboxValue = JSON.parse(option.param)
            console.log(this.checkboxValue)
        },
        onPullDownRefresh() {
@@ -84,7 +78,7 @@
        mounted() {
            this.init()
            this.getInventoryTreePermissions()
            this.getDistrInventory()
        },
        methods: {
            init() {
@@ -94,18 +88,18 @@
            //输入框回车确认事件
            confirmInputBoxValue(val) {
                console.log('确认', val)
                // this.getInventoryTreePermissions(val)
                // this.getDistrInventory(val)
                this.collapseArr = this.collapseArrAll.filter((p) => {
                    return p.code.indexOf(val) !== -1
                })
            },
            async getInventoryTreePermissions(param) {
            async getDistrInventory(param) {
                const {
                    data: res
                } = await InventoryTreePermissions()
                } = await DistrInventory()
                this.collapseArrAll = res
                this.collapseArr = res