1
zrg
2025-12-10 e8c269640263d78f885a32422b5b09d4e4980ff8
pages/fenbushidiaorudan/form_test.vue
@@ -1,1502 +1,1511 @@
<template>
    <view>
        <view class="form">
            <view class="form-item">
                <view class="title">条码:</view>
                <view class="right" style="width: 380rpx;">
                    <input :focus="barCodeFocus" v-model="hform.HBarCode" placeholder="请扫描(或输入)条码"
                        @confirm="getCode(hform.HBarCode)" />
                </view>
                <view class="icon-wrapper">
                    <uni-icons type="scan" size="20" @click="toScanCode"></uni-icons>
                </view>
            </view>
            <view class="form-item">
                <view class="title">数量:</view>
                <view class="right">
                    <input type="number" v-model="hform.HQty" placeholder="请输入数量" />
                </view>
            </view>
            <view class="form-item">
                <view class="title">调出仓库:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHWHName" placeholder="请输入(或扫描)仓库" v-model="hform.HSCWHName"
                        @input="HSCWHNameChange" @confirm="HWHNameOutScan"></uni-combox>
                </view>
                <view class="icon-wrapper">
                    <uni-icons type="more" size="20" @click="showWarehouseList('HSCWHID')"></uni-icons>
                </view>
            </view>
            <view class="form-item">
                <view class="title">调出仓位:</view>
                <view class="right" v-show="HSCIsStockMgr">
                    <uni-combox :candidates="arrayHStockPlaceNameComputed" placeholder="请输入(或扫描)仓位"
                        v-model="hform.HOutStockPlaceName" @input="HOutStockPlaceNameChange"
                        @confirm="HStockPlaceOutNameScan"></uni-combox>
                </view>
                <view class="righton" v-show="!HSCIsStockMgr">
                    <input v-model="hform.HOutStockPlaceName" :disabled="!HSCIsStockMgr" placeholder="不可操作" />
                </view>
                <view class="icon-wrapper" v-show="HSCIsStockMgr">
                    <uni-icons type="more" size="20" @click="showStockPlaceList('HOSpID')"></uni-icons>
                </view>
            </view>
            <view class="tabs">
                <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">选择源单</view>
                <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view>
                <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view>
                <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view>
                <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">分步式调出条码</view>
            </view>
            <view v-if="tabs == 0">
                <view class="form-item">
                    <view class="title">源单类型:</view>
                    <view class="right" v-show="showHMainSourceBillType">
                        <picker :range="arrayHMainSourceBillType" v-model="HMainSourceBillTypeIndex"
                            @change="HMainSourceBillTypeChange">
                            <input name="HMainSourceBillType" disabled :value="HMainSourceBillType" placeholder="请选择源单类型" />
                            <view class="picker-overlay"></view>
                        </picker>
                    </view>
                    <view class="righton" v-show="!showHMainSourceBillType">
                        <input name="HMainSourceBillType" disabled :value="HMainSourceBillType" placeholder="请选择源单类型" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">源单单号:</view>
                    <view class="right" v-show="showHSourceBillNo">
                        <input :focus="HSourcebillNoFocus" type="text" @confirm="onHSourceBillNoConfirmHandler"
                            name="HSourceBillNo" v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    </view>
                    <view class="icon-wrapper" v-show="showHSourceBillNo" :disabled="hform.HMainSourceBillType === -1">
                        <uni-icons type="search" size="20" @click="showBillList"></uni-icons>
                    </view>
                    <view class="icon-wrapper" v-show="showHSourceBillNo">
                        <uni-icons type="right" size="20" @click="onHSourceBillNoConfirmHandler"></uni-icons>
                    </view>
                    <view class="righton" v-show="!showHSourceBillNo">
                        <input name="HSourceBillNo" disabled v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调拨类型:</view>
                    <view class="righton">
                        <input name="HStockStyle" disabled v-model="hform.HStockStyle" placeholder="请选择调拨类型" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">日期:</view>
                    <view class="right">
                        <picker mode="date" v-model="hform.HDate" @change="HDateChange">
                            <input disabled :value="hform.HDate" placeholder="请选择日期" />
                            <view class="picker-overlay"></view>
                        </picker>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">制单人:</view>
                    <view class="righton">
                        <input name="HMaker" disabled v-model="hform.HMaker" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="righton">
                        <input name="HBillNo" disabled v-model="hform.HBillNo" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据ID:</view>
                    <view class="righton">
                        <input name="HInterID" disabled v-model="hform.HInterID" />
                    </view>
                </view>
            </view>
            <view v-if="tabs == 1">
                <view class="form-item">
                    <view class="title">调入仓库:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHWHInName" placeholder="请输入(或扫描)仓库" v-model="hform.HWHName"
                            @input="HWHInNameChange" @confirm="HWHNameInScan"></uni-combox>
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="more" size="20" @click="showWarehouseList('HWHID')"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓位:</view>
                    <view class="right" v-show="HIsStockMgr">
                        <uni-combox :candidates="arrayHStockPlaceInNameComputed" placeholder="请输入(或扫描)仓位"
                            v-model="hform.HStockPlaceName" @input="HStockPlaceInNameChange"
                            @confirm="HStockPlaceNameInScan"></uni-combox>
                    </view>
                    <view class="righton" v-show="!HIsStockMgr">
                        <input v-model="hform.HStockPlaceName" :disabled="!HIsStockMgr" placeholder="不可操作" />
                    </view>
                    <view class="icon-wrapper" v-show="HIsStockMgr">
                        <uni-icons type="more" size="20" @click="showStockPlaceList('HSpID')"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">部门:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHDeptName" placeholder="请选择部门" v-model="hform.HDeptName"
                            @input="HDeptNameChange"></uni-combox>
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="more" size="20" @click="showDepartmentList"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出组织:</view>
                    <view class="righton">
                        <input name="HStockOutOrgName" disabled v-model="hform.HStockOutOrgName" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入组织:</view>
                    <view class="righton">
                        <input name="HStockInOrgName" disabled v-model="hform.HStockInOrgName" />
                    </view>
                </view>
            </view>
            <view v-if="tabs == 2">
                <view class="list" v-for="(item,index) in Materlist" :key="index">
                    <uni-card :title="item.物料名称" :extra="item.物料代码" style="margin: 10px;" @tap="showMaterialDetail(item)">
                        <view class="card-detail">
                            <view class="detail">
                                <text>源单单号:</text>{{item.源单单号}}
                            </view>
                            <view class="detail">
                                <text>源单数量:</text>{{item.源单数量}}
                            </view>
                            <view class="detail">
                                <text>数量:</text>{{item.数量}}
                            </view>
                            <view class="detail">
                                <text>条码个数:</text>{{item.条码个数}}
                            </view>
                            <view class="detail" v-if="item.规格型号">
                                <text>规格型号:</text>{{item.规格型号}}
                            </view>
                            <view class="detail" v-if="item.辅助属性">
                                <text>辅助属性:</text>{{item.辅助属性}}
                            </view>
                        </view>
                    </uni-card>
                </view>
                <view class="over" v-if="Materlist.length == 0">暂无数据</view>
            </view>
            <view v-if="tabs == 4">
                <view class="list" v-for="(item,index) in FIFOlist" :key="index">
                    <uni-card :title="item.HMaterName" :extra="item.HMaterNumber" style="margin: 10px;"
                        @tap="showSourceBarCodeDetail(item)">
                        <view class="card-detail">
                            <view class="detail">
                                <text>数量:</text>{{item.HQty}}
                            </view>
                            <view class="detail">
                                <text>源单数量:</text>{{item.HQtyMust}}
                            </view>
                            <view class="detail">
                                <text>条码编号:</text>{{item.HBarCode}}
                            </view>
                            <view class="detail">
                                <text>物料代码:</text>{{item.HMaterNumber}}
                            </view>
                     <view class="detail">
                         <text>物料名称:</text>{{item.HMaterName}}
                     </view>
                            <view class="detail">
                                <text>规格型号:</text>{{item.HMaterModel}}
                            </view>
                     <view class="detail">
                         <text>HMaterID:</text>{{item.HMaterID}}
                     </view>
                            <view class="detail" v-if="item.HBatchNo">
                                <text>批号:</text>{{item.HBatchNo}}
                            </view>
                            <view class="detail" v-if="item.HAuxPropName">
                                <text>辅助属性:</text>{{item.HAuxPropName}}
                            </view>
                     <view class="detail" v-if="item.HSourceBillNo">
                         <text>源单单号:</text>{{item.HSourceBillNo}}
                     </view>
                        </view>
                    </uni-card>
                </view>
                <view class="over" v-if="FIFOlist.length == 0">暂无数据</view>
            </view>
            <view v-if="tabs == 3">
                <view class="form-item">
                    <view class="title">条码:</view>
                    <view class="righton">
                        <input name="HBarCode_B" disabled v-model="hform.HBarCode_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">物料:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HMaterName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">规格:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HMaterModel_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">批次:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HBatchNo_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HUnitName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">数量:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HQty_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">容量:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HTMQty_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓库:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HWHName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSPName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出仓库:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSCWHName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出仓位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSCSPName_B" />
                    </view>
                </view>
            </view>
            <view class="bottom-btn">
                <button class="btn-a" size="mini" @tap="submit">提交</button>
                <view style="flex: 1;"></view>
                <button class="btn-a" size="mini" @tap="addNew">新增</button>
                <button class="btn-c" size="mini" @tap="goBack">退出</button>
            </view>
        </view>
        <!-- 弹窗组件 -->
        <BillListPopupVue ref="billList" :HBillType="hform.HBillType" :HSourceBillType="hform.HMainSourceBillType || 1250"
            :HStockOrgID="hform.HStockOrgID"></BillListPopupVue>
<!--        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue> -->
        <!-- <MaterialEditPopup ref="materialEdit" :materialData="selectedMaterial" @on-save="onMaterialSave"></MaterialEditPopup> -->
    </view>
</template>
<script>
    import {
        CommonUtils
    } from '../../utils/common';
    import getDateTime from '@/utils/getdateTime.js';
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import BillListPopupVue from '../../components/BillListPopup/BillListPopup.vue';
    export default {
        data() {
            return {
                pageTitleName: '分步式调入单',
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                HModName: 'Kf_MoveStockStepInBill_PDA',
                ModRightName: 'CE_MoveStockStepIn',
                OperationType: 1,
                HInterID_Temp: '',
                HSCIsStockMgr: false,
                HIsStockMgr: false,
                showHMainSourceBillType: true,
                showHSourceBillNo: true,
                barCodeFocus: false,
                HSourcebillNoFocus: false,
                tabs: 0,
                HMainSourceBillTypeIndex: 0,
                HMainSourceBillType: '分步式调出单',
                arrayHMainSourceBillType: ['分步式调出单', '手工录入'],
                arrayHMainSourceBillValue: [1250, -1],
                btnType: 0, //0新增,1修改,2审核,3反审核
                arrayHWHName: [], //调出仓库
                HWHNameList: [],
                arrayHStockPlaceName: [], //调出仓位
                HStockPlaceNameList: [],
                arrayHWHInName: [], // 调入仓库
                HWHInNameList: [],
                arrayHStockPlaceInName: [], //调入仓位
                HStockPlaceInNameList: [],
                arrayHDeptName: [], //部门
                HDeptNameList: [],
                arrayHOrgName: [], // 组织
                arrayHOrgValue: [], // 组织对应ID
                Materlist: [],
                FIFOlist: [],
                selectedMaterial: {},
                hform: {
                    HBillType: 1251,
                    HBillerID: uni.getStorageSync('HBillerID'),
                    HRedBlueFlag: false,
                    HStockOutOrgName: uni.getStorageSync('Organization'),
                    HStockInOrgName: uni.getStorageSync('Organization'),
                    HStockInOrgID: uni.getStorageSync('OrganizationID'),
                    HStockOutOrgID: uni.getStorageSync('OrganizationID'),
                    HBarCode: '',
                    HQty: '',
                    HSCWHName: getUserInfo().HWHName,
                    HSCWHID: getUserInfo().HWhID,
                    HWHName: getUserInfo().HWHName,
                    HWHID: getUserInfo().HWhID,
                    HStockStyle: '组织内调拨',
                    HOutStockPlaceName: getUserInfo().HSPName,
                    HOutStockPlaceID: getUserInfo().HSPID,
                    HStockPlaceName: getUserInfo().HSPName,
                    HStockPlaceID: getUserInfo().HSPID,
               HStockOrgID: uni.getStorageSync('OrganizationID'),
                    HMainSourceBillType: 1250,
                    HSourceBillNo: '',
                    HDate: getDateTime.dateTimeStr('y-m-d'),
                    HMaker: uni.getStorageSync('HUserName'),
                    HBillNo: '',
                    HInterID: '',
                    HDeptName: getUserInfo().HDept,
                    HDeptID: getUserInfo().HDeptID,
                    // 条码信息
                    HBarCode_B: '',
                    HMaterName_B: '',
                    HMaterModel_B: '',
                    HBatchNo_B: '',
                    HUnitName_B: '',
                    HQty_B: '',
                    HTMQty_B: '',
                    HWHName_B: '',
                    HSPName_B: '',
                    HSCWHName_B: '',
                    HSCSPName_B: '',
                }
            }
        },
        components: {
            BillListPopupVue,
        },
        async onLoad(e) {
            console.log('页面参数:', e);
            await this.getOrganization()
            this.OperationType = e.OperationType || 1;
            if (e.HInterID) {
                this.HInterID_Temp = e.HInterID
                this.RoadBillMain(e.HInterID)
                this.barCodeFocus = true
            } else {
                this.HSourcebillNoFocus = true
                this.getNewData()
            }
            this.getHBaseList()
            this.getHDeptList()
            this.checkModRight()
            uni.$on('BillSelectComplete', (e) => {
                console.log("接收到的源单: ", e.HBillNo)
                this.getSourceBarCodeData(e.HBillNo)
                this.$refs.billList.exit()
            })
            uni.$on('WarehouseSelectComplete', (data) => {
                this.handleWarehouseSelect(data)
            })
            uni.$on('StockPlaceSelectComplete', (data) => {
                this.handleStockPlaceSelect(data)
            })
            uni.$on('DepartmentSelectComplete', (data) => {
                this.handleDepartmentSelect(data)
            })
        },
        onUnload() {
            uni.$off('BillSelectComplete')
            uni.$off('WarehouseSelectComplete')
            uni.$off('StockPlaceSelectComplete')
            uni.$off('DepartmentSelectComplete')
        },
        computed: {
            arrayHStockPlaceNameComputed: {
                get() {
                    // 动态计算对应调出仓库的仓位
                    return this.HStockPlaceNameList
                        .filter(e => e['所属仓库'] == this.hform.HSCWHName)
                        .map(e => e['仓位名称'])
                }
            },
            arrayHStockPlaceInNameComputed: {
                get() {
                    // 动态计算对应调入仓库的仓位
                    return this.HStockPlaceInNameList
                        .filter(e => e['所属仓库'] == this.hform.HWHName)
                        .map(e => e['仓位名称'])
                }
            }
        },
        methods: {
            // 用户模块权限判断
            async checkModRight() {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/CheckModRight_Json',
                        data: {
                            "ModRightName": this.ModRightName,
                            "HUserName": this.hform.HMaker
                        }
                    })
                    if (res.data.count != 1) {
                        uni.showModal({
                            title: '温馨提示',
                            content: res.data.Message,
                            showCancel: false,
                            success: () => {
                                uni.navigateBack()
                            }
                        })
                    }
                } catch (error) {
                    console.error('权限检查失败:', error)
                }
            },
            // 获取组织数据
            async getOrganization() {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/Web/GetOrganizations'
                    })
                    if (res.data.count == 1) {
                        this.arrayHOrgName = []
                        this.arrayHOrgValue = []
                        Array.from(res.data.data).forEach(e => {
                            this.arrayHOrgName.push(e.Name)
                            this.arrayHOrgValue.push(e.ID)
                        })
                    }
                } catch (error) {
                    console.error('获取组织数据失败:', error)
                }
            },
            // 扫描条码
            toScanCode() {
                uni.scanCode({
                    onlyFromCamera: true,
                    success: (res) => {
                        console.log('条码内容:' + res.result);
                        this.hform.HBarCode = res.result
                        this.getCode(this.hform.HBarCode)
                    }
                });
            },
            // 处理条码
            async getCode(HBarCode) {
                if (!HBarCode) {
                    this.playSound(0)
                    uni.showToast({
                        title: '条码为空,请扫描条码!',
                        icon: 'none'
                    })
                    return
                }
                const HDeleteFlag = HBarCode.substring(0, 1);
                const sBarCode = HBarCode.slice(1);
                if (HDeleteFlag == "*") {
                    // 删除条码
                    await this.deleteBarCode(sBarCode)
                } else {
                    // 处理条码
                    await this.processBarCode(HBarCode)
                }
            },
            // 删除条码
            async deleteBarCode(sBarCode) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/set_DelPonderationBillMain_Temp_BarCode_Json',
                        data: {
                            HInterID: this.hform.HInterID,
                            HBillType: this.hform.HBillType,
                            HBarCode: sBarCode
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        this.hform.HQty = ''
                        this.DisBillEntryList()
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '删除条码失败',
                        icon: 'none'
                    })
                }
                this.refreshBarCodeState()
            },
            // 处理条码
            async processBarCode(sBarCode) {
                // 仓库、仓位文本框为空时,清空对应ID
                if (!this.hform.HWHName) this.hform.HWHID = 0
                if (!this.hform.HStockPlaceName) this.hform.HStockPlaceID = 0
                if (!this.hform.HSCWHName) this.hform.HSCWHID = 0
                if (!this.hform.HOutStockPlaceName) this.hform.HOutStockPlaceID = 0
                const sHQty = this.hform.HQty || 0
                const HSourceFlag = !!this.hform.HSourceBillNo
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/get_BarCode_MoveStock_New_Json',
                        data: {
                            sBarCode: sBarCode,
                            HInterID: this.hform.HInterID,
                            HBillType: this.hform.HBillType,
                            HBillNo: this.hform.HBillNo,
                            HMaker: this.hform.HMaker,
                            HWhID: this.hform.HWHID,
                            HSPID: this.hform.HStockPlaceID,
                            HSCWHID: this.hform.HSCWHID,
                            HSCSPID: this.hform.HOutStockPlaceID,
                            HQty: sHQty,
                            SourceFlag: HSourceFlag,
                            HSourceBillNo: this.hform.HSourceBillNo,
                            HSourceBillType: this.hform.HMainSourceBillType,
                            HStockInOrgID: this.hform.HStockInOrgID,
                            HStockOutOrgID: this.hform.HStockOutOrgID,
                            HScanStyle: "",
                            HCustom1: "",
                            HCustom2: ""
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        await this.handleBarCodeResult(res.data.data)
                        this.DisBillEntryList()
                        this.hform.HQty = ''
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '处理条码失败',
                        icon: 'none'
                    })
                }
                this.refreshBarCodeState()
            },
            // 处理条码扫描结果
            async handleBarCodeResult(data) {
                switch (data.hBarTypeField) {
                    case '仓库条码':
                        this.handleWarehouseBarCode(data)
                        break
                    case '仓位条码':
                        this.handleStockPlaceBarCode(data)
                        break
                    case '部门条码':
                        this.handleDepartmentBarCode(data)
                        break
                    case '源单条码':
                        await this.handleSourceBillBarCode(data)
                        break
                    default:
                        await this.handleMaterialBarCode(data)
                }
            },
            // 处理仓库条码
            handleWarehouseBarCode(data) {
                this.hform.HSCWHName = data.hWhNameField
                this.hform.HSCWHID = data.hWhIDField
                this.hform.HOutStockPlaceName = data.hSPNameField
                this.hform.HOutStockPlaceID = data.hSPIDField
                this.HSCIsStockMgr = data.hSPFlagField != 0
            },
            // 处理仓位条码
            handleStockPlaceBarCode(data) {
                this.hform.HOutStockPlaceName = data.hSPNameField
                this.hform.HOutStockPlaceID = data.hSPIDField
                this.hform.HSCWHName = data.hWhNameField
                this.hform.HSCWHID = data.hWhIDField
            },
            // 处理部门条码
            handleDepartmentBarCode(data) {
                this.hform.HDeptName = data.hDeptNameField
                this.hform.HDeptID = data.hDeptIDField
                this.tabs = 1
            },
            // 处理源单条码
            async handleSourceBillBarCode(data) {
                await this.setSourceBillInfo(data)
                this.tabs = 3
            },
            // 处理物料条码
            async handleMaterialBarCode(data) {
                if (!this.hform.HSourceBillNo) {
                    await this.setSourceBillInfo(data)
                }
                this.tabs = 2
            },
            // 设置源单信息
            async setSourceBillInfo(data) {
                if (data.hDeptIDField != 0) {
                    this.hform.HDeptID = data.hDeptIDField
                    this.hform.HDeptName = data.hDeptNameField
                }
                this.hform.HSourceBillNo = data.hSourceBillNoField
                this.hform.HMainSourceBillType = data.hSourceBillTypeField
                // 更新源单类型显示
                const index = this.arrayHMainSourceBillValue.findIndex(e => e == data.hSourceBillTypeField)
                if (index !== -1) {
                    this.HMainSourceBillType = this.arrayHMainSourceBillType[index]
                    this.HMainSourceBillTypeIndex = index
                    this.showHMainSourceBillType = false
                }
                if (data.hMulSourceFlagField == 0) {
                    this.showHSourceBillNo = false
                }
                this.hform.HStockStyle = data.hStockStyleField
                this.hform.HStockInOrgID = data.hStockInOrgIDField
                this.hform.HStockOutOrgID = data.hStockOutOrgIDField
                // 更新组织显示
                const inOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.hStockInOrgIDField)
                const outOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.hStockOutOrgIDField)
                if (inOrgIndex !== -1) {
                    this.hform.HStockInOrgName = this.arrayHOrgName[inOrgIndex]
                }
                if (outOrgIndex !== -1) {
                    this.hform.HStockOutOrgName = this.arrayHOrgName[outOrgIndex]
                }
                // 如果组织发生变化,清空仓库仓位
                if (this.hform.HStockInOrgID != uni.getStorageSync('OrganizationID')) {
                    this.clearInWarehouseData()
                }
                if (this.hform.HStockOutOrgID != uni.getStorageSync('OrganizationID')) {
                    this.clearOutWarehouseData()
                }
            },
            // 清空调入仓库数据
            clearInWarehouseData() {
                this.hform.HWHID = 0
                this.hform.HWHName = ''
                this.hform.HStockPlaceID = 0
                this.hform.HStockPlaceName = ''
                this.HIsStockMgr = true
            },
            // 清空调出仓库数据
            clearOutWarehouseData() {
                this.hform.HSCWHID = 0
                this.hform.HSCWHName = ''
                this.hform.HOutStockPlaceID = 0
                this.hform.HOutStockPlaceName = ''
                this.HSCIsStockMgr = true
            },
            // 刷新条码输入状态
            async refreshBarCodeState() {
                this.barCodeFocus = false
                await this.$nextTick(() => {
                    this.hform.HBarCode = ""
                    this.barCodeFocus = true
                })
            },
            // 播放提示音
            playSound(type) {
                const innerAudioContext = uni.createInnerAudioContext();
                innerAudioContext.src = type == 1 ? '/static/success.wav' : '/static/jingbao.wav';
                innerAudioContext.play();
            },
            // 扫描仓库码
            async HWHNameOutScan(e) {
                let index = this.HWHNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓库条码对应的仓库不存在...'
                    })
                } else {
                    this.HSCWHNameChange(this.HWHNameList[index]['仓库名称'])
                }
            },
            // 扫描仓位码
            async HStockPlaceOutNameScan(e) {
                let index = this.HStockPlaceNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓位条码对应的仓位不存在...'
                    })
                } else {
                    this.HOutStockPlaceNameChange(this.HStockPlaceNameList[index]['仓位名称'])
                }
            },
            // 扫描调入仓库码
            async HWHNameInScan(e) {
                let index = this.HWHInNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓库条码对应的仓库不存在...'
                    })
                } else {
                    this.HWHInNameChange(this.HWHInNameList[index]['仓库名称'])
                }
            },
            // 扫描调入仓位码
            async HStockPlaceNameInScan(e) {
                let index = this.HStockPlaceInNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓位条码对应的仓位不存在...'
                    })
                } else {
                    this.HStockPlaceInNameChange(this.HStockPlaceInNameList[index]['仓位名称'])
                }
            },
            // 源单类型变更
            HMainSourceBillTypeChange(e) {
                this.HMainSourceBillTypeIndex = e.detail.value
                this.HMainSourceBillType = this.arrayHMainSourceBillType[this.HMainSourceBillTypeIndex]
                this.hform.HMainSourceBillType = this.arrayHMainSourceBillValue[this.HMainSourceBillTypeIndex]
            },
            // 源单单号确认
            onHSourceBillNoConfirmHandler() {
                if (this.hform.HMainSourceBillType == -1) {
                    this.playSound(1)
                    return
                }
                this.getSourceBarCodeData(this.hform.HSourceBillNo)
            },
            // 获取源单数据
            async getSourceBarCodeData(HSourceBillNo) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/get_SourceBarCode_MoveStockStepIn_Json',
                        data: {
                            HInterID: this.hform.HInterID,
                            HBillNo: this.hform.HBillNo,
                            HBillType: this.hform.HBillType,
                            HSourceBillNo: HSourceBillNo,
                            HSourceBillType: this.hform.HMainSourceBillType,
                            HMaker: this.hform.HMaker,
                            HStockInOrgID: this.hform.HStockInOrgID,
                            HStockOutOrgID: this.hform.HStockOutOrgID
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        await this.setSourceBillInfo(res.data.data)
                        this.tabs = 2
                        this.barCodeFocus = true
                        this.DisBillEntryList()
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                        this.refreshHSourceBillState()
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '获取源单数据失败',
                        icon: 'none'
                    })
                    this.refreshHSourceBillState()
                }
            },
            // 刷新源单输入状态
            async refreshHSourceBillState() {
                this.HSourcebillNoFocus = false
                await this.$nextTick(() => {
                    this.hform.HSourceBillNo = ""
                    this.HSourcebillNoFocus = true
                })
            },
            // 显示源单列表
            showBillList() {
                this.$refs.billList.showPopup()
            },
            // 日期变更
            HDateChange(e) {
                this.hform.HDate = e.detail.value
            },
            // 调出仓库变更
            HSCWHNameChange(e) {
                const warehouse = this.HWHNameList.find(item => item.仓库名称 == e)
                if (warehouse) {
                    this.hform.HSCWHName = warehouse.仓库名称
                    this.hform.HSCWHID = warehouse.HItemID
                    this.HSCIsStockMgr = warehouse['启用仓位'] == 'Y'
                    if (!this.HSCIsStockMgr) {
                        this.hform.HOutStockPlaceName = ''
                        this.hform.HOutStockPlaceID = ''
                    }
                }
            },
            // 调出仓位变更
            HOutStockPlaceNameChange(e) {
                const stockPlace = this.HStockPlaceNameList.find(item => item.仓位名称 == e)
                if (stockPlace) {
                    this.hform.HOutStockPlaceName = stockPlace.仓位名称
                    this.hform.HOutStockPlaceID = stockPlace.HMainID
                }
            },
            // 调入仓库变更
            HWHInNameChange(e) {
                const warehouse = this.HWHInNameList.find(item => item.仓库名称 == e)
                if (warehouse) {
                    this.hform.HWHName = warehouse.仓库名称
                    this.hform.HWHID = warehouse.HItemID
                    this.HIsStockMgr = warehouse['启用仓位'] == 'Y'
                    if (!this.HIsStockMgr) {
                        this.hform.HStockPlaceName = ''
                        this.hform.HStockPlaceID = ''
                    }
                }
            },
            // 调入仓位变更
            HStockPlaceInNameChange(e) {
                const stockPlace = this.HStockPlaceInNameList.find(item => item.仓位名称 == e)
                if (stockPlace) {
                    this.hform.HStockPlaceName = stockPlace.仓位名称
                    this.hform.HStockPlaceID = stockPlace.HMainID
                }
            },
            // 部门变更
            HDeptNameChange(e) {
                const dept = this.HDeptNameList.find(item => item.部门名称 == e)
                if (dept) {
                    this.hform.HDeptName = dept.部门名称
                    this.hform.HDeptID = dept.HItemID
                }
            },
            // 获取基础数据
            getHBaseList() {
                // 获取仓库列表
                CommonUtils.doRequest2({
                    url: '/Gy_Warehouse/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HWHNameList = res.data.data
                            this.HWHInNameList = res.data.data
                            this.arrayHWHName = res.data.data.map(item => item.仓库名称)
                            this.arrayHWHInName = res.data.data.map(item => item.仓库名称)
                        }
                    }
                })
                // 获取仓位列表
                CommonUtils.doRequest2({
                    url: '/Gy_StockPlace/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HStockPlaceNameList = res.data.data
                            this.HStockPlaceInNameList = res.data.data
                            this.arrayHStockPlaceName = res.data.data.map(item => item.仓位名称)
                            this.arrayHStockPlaceInName = res.data.data.map(item => item.仓位名称)
                        }
                    }
                })
            },
            // 获取部门列表
            getHDeptList() {
                CommonUtils.doRequest2({
                    url: '/Gy_Department/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HDeptNameList = res.data.data
                            this.arrayHDeptName = res.data.data.map(item => item.部门名称)
                        }
                    }
                })
            },
            // 显示仓库列表
            showWarehouseList(type) {
                const HOrgID = type === 'HSCWHID' ? this.hform.HStockOutOrgID : this.hform.HStockInOrgID
                uni.navigateTo({
                    url: `/pages/Baseset/WarehouseList?Type=${type}&HOrgID=${HOrgID}`
                })
            },
            // 显示仓位列表
            showStockPlaceList(type) {
                const HWhID = type === 'HOSpID' ? this.hform.HSCWHID : this.hform.HWHID
                const HOrgID = type === 'HOSpID' ? this.hform.HStockOutOrgID : this.hform.HStockInOrgID
                uni.navigateTo({
                    url: `/pages/Baseset/StockPlaceList?HWhID=${HWhID}&Type=${type}&HOrgID=${HOrgID}`
                })
            },
            // 显示部门列表
            showDepartmentList() {
                uni.navigateTo({
                    url: `/pages/Baseset/DepartmentList?HStockOrgID=${this.hform.HStockOrgID}&Type=HDept1`
                })
            },
            // 处理仓库选择结果
            handleWarehouseSelect(data) {
                if (data.type === 'HSCWHID') {
                    this.hform.HSCWHName = data.data[0].HName
                    this.hform.HSCWHID = data.data[0].HItemID
                    this.hform.HOutStockPlaceName = data.data[0].HSPName
                    this.hform.HOutStockPlaceID = data.data[0].HSPID
                    this.HSCIsStockMgr = data.data[0].HSPFlag != 0
                } else if (data.type === 'HWHID') {
                    this.hform.HWHName = data.data[0].HName
                    this.hform.HWHID = data.data[0].HItemID
                    this.hform.HStockPlaceName = data.data[0].HSPName
                    this.hform.HStockPlaceID = data.data[0].HSPID
                    this.HIsStockMgr = data.data[0].HSPFlag != 0
                }
            },
            // 处理仓位选择结果
            handleStockPlaceSelect(data) {
                if (data.type === 'HOSpID') {
                    this.hform.HOutStockPlaceName = data.data[0].HName
                    this.hform.HOutStockPlaceID = data.data[0].HItemID
                    this.hform.HSCWHName = data.data[0].HWhName
                    this.hform.HSCWHID = data.data[0].HWHID
                } else if (data.type === 'HSpID') {
                    this.hform.HStockPlaceName = data.data[0].HName
                    this.hform.HStockPlaceID = data.data[0].HItemID
                    this.hform.HWHName = data.data[0].HWhName
                    this.hform.HWHID = data.data[0].HWHID
                }
            },
            // 处理部门选择结果
            handleDepartmentSelect(data) {
                this.hform.HDeptName = data.data[0].HName
                this.hform.HDeptID = data.data[0].HItemID
            },
            // 显示物料明细
            showMaterialDetail(item) {
                this.selectedMaterial = item
                // this.$refs.materialEdit.show()
            },
            // 显示源单条码明细
            showSourceBarCodeDetail(item) {
                // 可以在这里实现源单条码明细的显示逻辑
                console.log('源单条码明细:', item)
            },
            // 物料保存回调
            onMaterialSave() {
                this.DisBillEntryList()
            },
            // 显示物料清单
            DisBillEntryList() {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetBillEntryTmpList_Json',
                    data: {
                        HInterID: this.hform.HInterID,
                        HBillNo: this.hform.HBillNo,
                        HBillType: this.hform.HBillType,
                        HStockOrgID: this.hform.HStockOutOrgID
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            const data = res.data.data
                            this.Materlist = data.Materlist
                            if (data.ICMOReportlist[0].HSourceInterID !=0 ) {
                                this.FIFOlist = data.ICMOReportlist
                            }
                            // 更新条码信息
                            if (data.BarCodeDetailslist && data.BarCodeDetailslist[0].HBarCode) {
                                const barcode = data.BarCodeDetailslist[0]
                                this.hform.HBarCode_B = barcode.HBarCode
                                this.hform.HMaterName_B = barcode.HMaterName
                                this.hform.HMaterModel_B = barcode.HMaterModel
                                this.hform.HBatchNo_B = barcode.HBatchNo
                                this.hform.HUnitName_B = barcode.HUnitName
                                this.hform.HQty_B = barcode.HQty
                                this.hform.HTMQty_B = barcode.HTMQty
                                this.hform.HWHName_B = barcode.HWHName
                                this.hform.HSPName_B = barcode.HSPName
                                this.hform.HSCWHName_B = barcode.HSCWHName
                                this.hform.HSCSPName_B = barcode.HSCSPName
                            } else {
                                this.clearBarcodeInfo()
                            }
                        } else {
                            this.Materlist = []
                            this.FIFOlist = []
                            this.clearBarcodeInfo()
                        }
                    }
                })
            },
            // 清空条码信息
            clearBarcodeInfo() {
                this.hform.HBarCode_B = ''
                this.hform.HMaterName_B = ''
                this.hform.HMaterModel_B = ''
                this.hform.HBatchNo_B = ''
                this.hform.HUnitName_B = ''
                this.hform.HQty_B = ''
                this.hform.HTMQty_B = ''
                this.hform.HWHName_B = ''
                this.hform.HSPName_B = ''
                this.hform.HSCWHName_B = ''
                this.hform.HSCSPName_B = ''
            },
            // 获取新单据数据
            getNewData() {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetMaxBillNoAndID_Json',
                    data: {
                        HBillType: this.hform.HBillType
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.hform.HInterID = res.data.data[0].HInterID
                            this.hform.HBillNo = res.data.data[0].HBillNo
                        }
                    }
                })
            },
            // 加载已有单据
            RoadBillMain(HInterID) {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetSourceBill_Temp_Json',
                    data: {
                        HInterID: HInterID,
                        HBillType: this.hform.HBillType
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            const data = res.data.data[0]
                            this.hform.HInterID = data.HInterID
                            this.hform.HBillNo = data.HBillNo
                            this.hform.HMainSourceBillType = data.HSourceBillType
                            this.hform.HSourceBillNo = data.HSourceBillNo
                            // 设置源单类型
                            const index = this.arrayHMainSourceBillValue.findIndex(e => e == data.HSourceBillType)
                            if (index !== -1) {
                                this.HMainSourceBillType = this.arrayHMainSourceBillType[index]
                                this.HMainSourceBillTypeIndex = index
                                this.showHMainSourceBillType = false
                            }
                            if (data.HMulSourceBill == 0) {
                                this.showHSourceBillNo = false
                            }
                            if (data.HDeptID != 0) {
                                this.hform.HDeptID = data.HDeptID
                                this.hform.HDeptName = data.HDeptName
                            }
                            this.hform.HStockStyle = data.HStockStyle
                            this.hform.HStockInOrgID = data.HStockInOrgID
                            this.hform.HStockOutOrgID = data.HStockOutOrgID
                            // 设置组织显示
                            const inOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.HStockInOrgID)
                            const outOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.HStockOutOrgID)
                            if (inOrgIndex !== -1) {
                                this.hform.HStockInOrgName = this.arrayHOrgName[inOrgIndex]
                            }
                            if (outOrgIndex !== -1) {
                                this.hform.HStockOutOrgName = this.arrayHOrgName[outOrgIndex]
                            }
                            this.tabs = 2
                            this.DisBillEntryList()
                        }
                    }
                })
            },
            // 新增单据
            addNew() {
                uni.redirectTo({
                    url: '/pages/fenbushidiaoru/form?OperationType=1'
                })
            },
            // 提交单据
            async submit() {
                // 表单验证
                if (!this.hform.HInterID) {
                    uni.showToast({
                        title: '单据内码获取失败,错误的单据内码!',
                        icon: 'none'
                    })
                    return
                }
                if (!this.hform.HBillNo) {
                    uni.showToast({
                        title: '单据号获取失败,错误的单据号!',
                        icon: 'none'
                    })
                    return
                }
                if (!this.Materlist || this.Materlist.length == 0) {
                    uni.showToast({
                        title: '没有扫码信息,请先扫描条码,确认无误后再提交!',
                        icon: 'none'
                    })
                    return
                }
                const hasMaterial = this.Materlist.some(item => item.数量 > 0)
                if (!hasMaterial) {
                    uni.showToast({
                        title: '没有扫描物料条码,请先扫描物料条码,确认无误后再提交!',
                        icon: 'none'
                    })
                    return
                }
                // 清空空值的ID
                if (!this.hform.HWHName) this.hform.HWHID = 0
                if (!this.hform.HStockPlaceName) this.hform.HStockPlaceID = 0
                if (!this.hform.HSCWHName) this.hform.HSCWHID = 0
                if (!this.hform.HOutStockPlaceName) this.hform.HOutStockPlaceID = 0
                if (!this.hform.HDeptName) this.hform.HDeptID = 0
                try {
                    const sMainStr = JSON.stringify(this.hform)
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/set_SaveMoveStockStepInBill_Json',
                        method: 'POST',
                        data: {
                            oMain: sMainStr
                        }
                    })
                    if (res.data.count == 1) {
                        uni.showModal({
                            title: '提示',
                            content: res.data.Message + '。是否继续新增?',
                            success: (res) => {
                                if (res.confirm) {
                                    this.addNew()
                                } else {
                                    if (this.OperationType == 2) {
                                        uni.navigateBack()
                                    } else {
                                        uni.switchTab({
                                            url: '/pages/index/index'
                                        })
                                    }
                                }
                            }
                        })
                    } else {
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    uni.showToast({
                        title: '提交失败:' + error,
                        icon: 'none'
                    })
                }
            },
            // 返回
            goBack() {
                uni.showModal({
                    title: '提示',
                    content: '确认要退出当前页面吗?',
                    success: (res) => {
                        if (res.confirm) {
                            if (this.OperationType == 2) {
                                uni.navigateBack()
                            } else {
                                uni.switchTab({
                                    url: '/pages/index/index'
                                })
                            }
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
    .form {
        width: 668rpx;
        margin: 20rpx auto;
        padding-bottom: 240rpx;
    }
    .tabs {
        width: 100%;
        display: flex;
        border-bottom: 1px solid #ddd;
        margin: 20rpx 0;
        view {
            width: 20%;
            font-size: 26rpx;
            color: #555;
            text-align: center;
            padding: 16rpx 0;
        }
        .on {
            color: #3a78ff;
            font-weight: bold;
            border-bottom: 3px solid #3a78ff;
        }
    }
    .form-item {
        display: flex;
        align-items: center;
        font-size: 30rpx;
        padding: 6rpx 0;
        gap: 12rpx;
        .title {
            width: 208rpx;
            flex-shrink: 0;
        }
        .right {
            flex: 1;
            border-radius: 22rpx;
            border: 1px solid #acacac;
            position: relative;
            display: flex;
        }
        .righton {
            flex: 1;
            border-radius: 22rpx;
            border: 1px solid #e4e4e4;
            background-color: #e4e4e4;
        }
        input {
            width: 100%;
            padding: 8rpx 20rpx;
            font-size: 30rpx;
        }
        .icon-wrapper {
            background-color: #3A78FF;
            border-radius: 100%;
            width: 52rpx;
            height: 52rpx;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-shrink: 0;
            .uni-icons {
                color: #fff !important;
            }
        }
        .icon-wrapper[disabled] {
            background-color: rgba(228, 228, 228, 1);
            pointer-events: none;
            touch-action: none;
        }
    }
    .bottom-btn {
        box-sizing: border-box;
        width: 100%;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        display: flex;
        flex-direction: row;
        gap: 10rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-c {
            background-color: #acacac;
            color: #fff;
        }
    }
    .list {
        width: 100%;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            line-height: 120%;
            .detail {
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
        }
    }
    .over {
        text-align: center;
        color: #999;
        padding: 40rpx;
    }
<template>
    <view>
        <view class="form">
            <view class="form-item">
                <view class="title">条码:</view>
                <view class="right" style="width: 380rpx;">
                    <input :focus="barCodeFocus" v-model="hform.HBarCode" placeholder="请扫描(或输入)条码"
                        @confirm="getCode(hform.HBarCode)" />
                </view>
                <view class="icon-wrapper">
                    <uni-icons type="scan" size="20" @click="toScanCode"></uni-icons>
                </view>
            </view>
            <view class="form-item">
                <view class="title">数量:</view>
                <view class="right">
                    <input type="number" v-model="hform.HQty" placeholder="请输入数量" />
                </view>
            </view>
            <view class="form-item">
                <view class="title">调出仓库:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHWHName" placeholder="请输入(或扫描)仓库" v-model="hform.HSCWHName"
                        @input="HSCWHNameChange" @confirm="HWHNameOutScan"></uni-combox>
                </view>
                <view class="icon-wrapper">
                    <uni-icons type="more" size="20" @click="showWarehouseList('HSCWHID')"></uni-icons>
                </view>
            </view>
            <view class="form-item">
                <view class="title">调出仓位:</view>
                <view class="right" v-show="HSCIsStockMgr">
                    <uni-combox :candidates="arrayHStockPlaceNameComputed" placeholder="请输入(或扫描)仓位"
                        v-model="hform.HOutStockPlaceName" @input="HOutStockPlaceNameChange"
                        @confirm="HStockPlaceOutNameScan"></uni-combox>
                </view>
                <view class="righton" v-show="!HSCIsStockMgr">
                    <input v-model="hform.HOutStockPlaceName" :disabled="!HSCIsStockMgr" placeholder="不可操作" />
                </view>
                <view class="icon-wrapper" v-show="HSCIsStockMgr">
                    <uni-icons type="more" size="20" @click="showStockPlaceList('HOSpID')"></uni-icons>
                </view>
            </view>
            <view class="tabs">
                <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">选择源单</view>
                <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view>
                <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view>
                <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view>
                <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">分步式调出条码</view>
            </view>
            <view v-if="tabs == 0">
                <view class="form-item">
                    <view class="title">源单类型:</view>
                    <view class="right" v-show="showHMainSourceBillType">
                        <picker :range="arrayHMainSourceBillType" v-model="HMainSourceBillTypeIndex"
                            @change="HMainSourceBillTypeChange">
                            <input name="HMainSourceBillType" disabled :value="HMainSourceBillType" placeholder="请选择源单类型" />
                            <view class="picker-overlay"></view>
                        </picker>
                    </view>
                    <view class="righton" v-show="!showHMainSourceBillType">
                        <input name="HMainSourceBillType" disabled :value="HMainSourceBillType" placeholder="请选择源单类型" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">源单单号:</view>
                    <view class="right" v-show="showHSourceBillNo">
                        <input :focus="HSourcebillNoFocus" type="text" @confirm="onHSourceBillNoConfirmHandler"
                            name="HSourceBillNo" v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    </view>
                    <view class="icon-wrapper" v-show="showHSourceBillNo" :disabled="hform.HMainSourceBillType === -1">
                        <uni-icons type="search" size="20" @click="showBillList"></uni-icons>
                    </view>
                    <view class="icon-wrapper" v-show="showHSourceBillNo">
                        <uni-icons type="right" size="20" @click="onHSourceBillNoConfirmHandler"></uni-icons>
                    </view>
                    <view class="righton" v-show="!showHSourceBillNo">
                        <input name="HSourceBillNo" disabled v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调拨类型:</view>
                    <view class="righton">
                        <input name="HStockStyle" disabled v-model="hform.HStockStyle" placeholder="请选择调拨类型" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">日期:</view>
                    <view class="right">
                        <picker mode="date" v-model="hform.HDate" @change="HDateChange">
                            <input disabled :value="hform.HDate" placeholder="请选择日期" />
                            <view class="picker-overlay"></view>
                        </picker>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">制单人:</view>
                    <view class="righton">
                        <input name="HMaker" disabled v-model="hform.HMaker" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="righton">
                        <input name="HBillNo" disabled v-model="hform.HBillNo" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据ID:</view>
                    <view class="righton">
                        <input name="HInterID" disabled v-model="hform.HInterID" />
                    </view>
                </view>
            </view>
            <view v-if="tabs == 1">
                <view class="form-item">
                    <view class="title">调入仓库:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHWHInName" placeholder="请输入(或扫描)仓库" v-model="hform.HWHName"
                            @input="HWHInNameChange" @confirm="HWHNameInScan"></uni-combox>
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="more" size="20" @click="showWarehouseList('HWHID')"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓位:</view>
                    <view class="right" v-show="HIsStockMgr">
                        <uni-combox :candidates="arrayHStockPlaceInNameComputed" placeholder="请输入(或扫描)仓位"
                            v-model="hform.HStockPlaceName" @input="HStockPlaceInNameChange"
                            @confirm="HStockPlaceNameInScan"></uni-combox>
                    </view>
                    <view class="righton" v-show="!HIsStockMgr">
                        <input v-model="hform.HStockPlaceName" :disabled="!HIsStockMgr" placeholder="不可操作" />
                    </view>
                    <view class="icon-wrapper" v-show="HIsStockMgr">
                        <uni-icons type="more" size="20" @click="showStockPlaceList('HSpID')"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">部门:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHDeptName" placeholder="请选择部门" v-model="hform.HDeptName"
                            @input="HDeptNameChange"></uni-combox>
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="more" size="20" @click="showDepartmentList"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出组织:</view>
                    <view class="righton">
                        <input name="HStockOutOrgName" disabled v-model="hform.HStockOutOrgName" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入组织:</view>
                    <view class="righton">
                        <input name="HStockInOrgName" disabled v-model="hform.HStockInOrgName" />
                    </view>
                </view>
            </view>
            <view v-if="tabs == 2">
                <view class="list" v-for="(item,index) in Materlist" :key="index">
                    <uni-card :title="item.物料名称" :extra="item.物料代码" style="margin: 10px;" @tap="showMaterialDetail(item)">
                        <view class="card-detail">
                            <view class="detail">
                                <text>源单单号:</text>{{item.源单单号}}
                            </view>
                            <view class="detail">
                                <text>源单数量:</text>{{item.源单数量}}
                            </view>
                            <view class="detail">
                                <text>数量:</text>{{item.数量}}
                            </view>
                            <view class="detail">
                                <text>条码个数:</text>{{item.条码个数}}
                            </view>
                            <view class="detail" v-if="item.规格型号">
                                <text>规格型号:</text>{{item.规格型号}}
                            </view>
                            <view class="detail" v-if="item.辅助属性">
                                <text>辅助属性:</text>{{item.辅助属性}}
                            </view>
                        </view>
                    </uni-card>
                </view>
                <view class="over" v-if="Materlist.length == 0">暂无数据</view>
            </view>
            <view v-if="tabs == 4">
                <view class="list" v-for="(item,index) in FIFOlist" :key="index">
                    <uni-card :title="item.HMaterName" :extra="item.HMaterNumber" style="margin: 10px;"
                        @tap="showSourceBarCodeDetail(item)">
                        <view class="card-detail">
                            <view class="detail">
                                <text>数量:</text>{{item.HQty}}
                            </view>
                            <view class="detail">
                                <text>源单数量:</text>{{item.HQtyMust}}
                            </view>
                            <view class="detail">
                                <text>条码编号:</text>{{item.HBarCode}}
                            </view>
                            <view class="detail">
                                <text>物料代码:</text>{{item.HMaterNumber}}
                            </view>
                     <view class="detail">
                         <text>物料名称:</text>{{item.HMaterName}}
                     </view>
                            <view class="detail">
                                <text>规格型号:</text>{{item.HMaterModel}}
                            </view>
                     <view class="detail">
                         <text>HMaterID:</text>{{item.HMaterID}}
                     </view>
                            <view class="detail" v-if="item.HBatchNo">
                                <text>批号:</text>{{item.HBatchNo}}
                            </view>
                            <view class="detail" v-if="item.HAuxPropName">
                                <text>辅助属性:</text>{{item.HAuxPropName}}
                            </view>
                     <view class="detail" v-if="item.HSourceBillNo">
                         <text>源单单号:</text>{{item.HSourceBillNo}}
                     </view>
                        </view>
                    </uni-card>
                </view>
                <view class="over" v-if="FIFOlist.length == 0">暂无数据</view>
            </view>
            <view v-if="tabs == 3">
                <view class="form-item">
                    <view class="title">条码:</view>
                    <view class="righton">
                        <input name="HBarCode_B" disabled v-model="hform.HBarCode_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">物料:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HMaterName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">规格:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HMaterModel_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">批次:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HBatchNo_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HUnitName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">数量:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HQty_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">容量:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HTMQty_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓库:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HWHName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调入仓位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSPName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出仓库:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSCWHName_B" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">调出仓位:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HSCSPName_B" />
                    </view>
                </view>
            </view>
            <view class="bottom-btn">
                <button class="btn-a" size="mini" @tap="submit">提交</button>
                <view style="flex: 1;"></view>
                <button class="btn-a" size="mini" @tap="addNew">新增</button>
                <button class="btn-c" size="mini" @tap="goBack">退出</button>
            </view>
        </view>
        <!-- 弹窗组件 -->
        <BillListPopupVue ref="billList" :HBillType="hform.HBillType" :HSourceBillType="hform.HMainSourceBillType || 1250"
            :HStockOrgID="hform.HStockOrgID"></BillListPopupVue>
<!--        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue> -->
        <!-- <MaterialEditPopup ref="materialEdit" :materialData="selectedMaterial" @on-save="onMaterialSave"></MaterialEditPopup> -->
    </view>
</template>
<script>
    import {
        CommonUtils
    } from '../../utils/common';
    import getDateTime from '@/utils/getdateTime.js';
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import BillListPopupVue from '../../components/BillListPopup/BillListPopup.vue';
    export default {
        data() {
            return {
                pageTitleName: '分步式调入单',
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                HModName: 'Kf_MoveStockStepInBill_PDA',
                ModRightName: 'CE_MoveStockStepIn',
                OperationType: 1,
                HInterID_Temp: '',
                HSCIsStockMgr: false,
                HIsStockMgr: false,
                showHMainSourceBillType: true,
                showHSourceBillNo: true,
                barCodeFocus: false,
                HSourcebillNoFocus: false,
                tabs: 0,
                HMainSourceBillTypeIndex: 0,
                HMainSourceBillType: '分步式调出单',
                arrayHMainSourceBillType: ['分步式调出单', '手工录入'],
                arrayHMainSourceBillValue: [1250, -1],
                btnType: 0, //0新增,1修改,2审核,3反审核
                arrayHWHName: [], //调出仓库
                HWHNameList: [],
                arrayHStockPlaceName: [], //调出仓位
                HStockPlaceNameList: [],
                arrayHWHInName: [], // 调入仓库
                HWHInNameList: [],
                arrayHStockPlaceInName: [], //调入仓位
                HStockPlaceInNameList: [],
                arrayHDeptName: [], //部门
                HDeptNameList: [],
                arrayHOrgName: [], // 组织
                arrayHOrgValue: [], // 组织对应ID
                Materlist: [],
                FIFOlist: [],
                selectedMaterial: {},
                hform: {
                    HBillType: 1251,
                    HBillerID: uni.getStorageSync('HBillerID'),
                    HRedBlueFlag: false,
                    HStockOutOrgName: uni.getStorageSync('Organization'),
                    HStockInOrgName: uni.getStorageSync('Organization'),
                    HStockInOrgID: uni.getStorageSync('OrganizationID'),
                    HStockOutOrgID: uni.getStorageSync('OrganizationID'),
                    HBarCode: '',
                    HQty: '',
                    HSCWHName: getUserInfo().HWHName,
                    HSCWHID: getUserInfo().HWhID,
                    HWHName: getUserInfo().HWHName,
                    HWHID: getUserInfo().HWhID,
                    HStockStyle: '组织内调拨',
                    HOutStockPlaceName: getUserInfo().HSPName,
                    HOutStockPlaceID: getUserInfo().HSPID,
                    HStockPlaceName: getUserInfo().HSPName,
                    HStockPlaceID: getUserInfo().HSPID,
               HStockOrgID: uni.getStorageSync('OrganizationID'),
                    HMainSourceBillType: 1250,
                    HSourceBillNo: '',
                    HDate: getDateTime.dateTimeStr('y-m-d'),
                    HMaker: uni.getStorageSync('HUserName'),
                    HBillNo: '',
                    HInterID: '',
                    HDeptName: getUserInfo().HDept,
                    HDeptID: getUserInfo().HDeptID,
                    // 条码信息
                    HBarCode_B: '',
                    HMaterName_B: '',
                    HMaterModel_B: '',
                    HBatchNo_B: '',
                    HUnitName_B: '',
                    HQty_B: '',
                    HTMQty_B: '',
                    HWHName_B: '',
                    HSPName_B: '',
                    HSCWHName_B: '',
                    HSCSPName_B: '',
                }
            }
        },
        components: {
            BillListPopupVue,
        },
        async onLoad(e) {
            console.log('页面参数:', e);
            await this.getOrganization()
            this.OperationType = e.OperationType || 1;
            if (e.HInterID) {
                this.HInterID_Temp = e.HInterID
                this.RoadBillMain(e.HInterID)
                this.barCodeFocus = true
            } else {
                this.HSourcebillNoFocus = true
                this.getNewData()
            }
            this.getHBaseList()
            this.getHDeptList()
            this.checkModRight()
            uni.$on('BillSelectComplete', (e) => {
                console.log("接收到的源单: ", e.HBillNo)
                this.getSourceBarCodeData(e.HBillNo)
                this.$refs.billList.exit()
            })
            uni.$on('WarehouseSelectComplete', (data) => {
                this.handleWarehouseSelect(data)
            })
            uni.$on('StockPlaceSelectComplete', (data) => {
                this.handleStockPlaceSelect(data)
            })
            uni.$on('DepartmentSelectComplete', (data) => {
                this.handleDepartmentSelect(data)
            })
        },
        onUnload() {
            uni.$off('BillSelectComplete')
            uni.$off('WarehouseSelectComplete')
            uni.$off('StockPlaceSelectComplete')
            uni.$off('DepartmentSelectComplete')
        },
        computed: {
            arrayHStockPlaceNameComputed: {
                get() {
                    // 动态计算对应调出仓库的仓位
                    return this.HStockPlaceNameList
                        .filter(e => e['所属仓库'] == this.hform.HSCWHName)
                        .map(e => e['仓位名称'])
                }
            },
            arrayHStockPlaceInNameComputed: {
                get() {
                    // 动态计算对应调入仓库的仓位
                    return this.HStockPlaceInNameList
                        .filter(e => e['所属仓库'] == this.hform.HWHName)
                        .map(e => e['仓位名称'])
                }
            }
        },
        methods: {
            // 用户模块权限判断
            async checkModRight() {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/CheckModRight_Json',
                        data: {
                            "ModRightName": this.ModRightName,
                            "HUserName": this.hform.HMaker
                        }
                    })
                    if (res.data.count != 1) {
                        uni.showModal({
                            title: '温馨提示',
                            content: res.data.Message,
                            showCancel: false,
                            success: () => {
                                uni.navigateBack()
                            }
                        })
                    }
                } catch (error) {
                    console.error('权限检查失败:', error)
                }
            },
            // 获取组织数据
            async getOrganization() {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/Web/GetOrganizations'
                    })
                    if (res.data.count == 1) {
                        this.arrayHOrgName = []
                        this.arrayHOrgValue = []
                        Array.from(res.data.data).forEach(e => {
                            this.arrayHOrgName.push(e.Name)
                            this.arrayHOrgValue.push(e.ID)
                        })
                    }
                } catch (error) {
                    console.error('获取组织数据失败:', error)
                }
            },
            // 扫描条码
            toScanCode() {
                uni.scanCode({
                    onlyFromCamera: true,
                    success: (res) => {
                        console.log('条码内容:' + res.result);
                        this.hform.HBarCode = res.result
                        this.getCode(this.hform.HBarCode)
                    }
                });
            },
            // 处理条码
            async getCode(HBarCode) {
                if (!HBarCode) {
                    this.playSound(0)
                    uni.showToast({
                        title: '条码为空,请扫描条码!',
                        icon: 'none'
                    })
                    return
                }
                const HDeleteFlag = HBarCode.substring(0, 1);
                const sBarCode = HBarCode.slice(1);
                if (HDeleteFlag == "*") {
                    // 删除条码
                    await this.deleteBarCode(sBarCode)
                } else {
                    // 处理条码
                    await this.processBarCode(HBarCode)
                }
            },
            // 删除条码
            async deleteBarCode(sBarCode) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/set_DelPonderationBillMain_Temp_BarCode_Json',
                        data: {
                            HInterID: this.hform.HInterID,
                            HBillType: this.hform.HBillType,
                            HBarCode: sBarCode
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        this.hform.HQty = ''
                        this.DisBillEntryList()
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '删除条码失败',
                        icon: 'none'
                    })
                }
                this.refreshBarCodeState()
            },
            // 处理条码
            async processBarCode(sBarCode) {
                // 仓库、仓位文本框为空时,清空对应ID
                if (!this.hform.HWHName) this.hform.HWHID = 0
                if (!this.hform.HStockPlaceName) this.hform.HStockPlaceID = 0
                if (!this.hform.HSCWHName) this.hform.HSCWHID = 0
                if (!this.hform.HOutStockPlaceName) this.hform.HOutStockPlaceID = 0
                const sHQty = this.hform.HQty || 0
                const HSourceFlag = !!this.hform.HSourceBillNo
                try {
                    console.log('开始处理条码:', sBarCode, sHQty, HSourceFlag, this.hform);
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/get_BarCode_MoveStock_New_Json',
                        data: {
                            sBarCode: sBarCode,
                            HInterID: this.hform.HInterID,
                            HBillType: this.hform.HBillType,
                            HBillNo: this.hform.HBillNo,
                            HMaker: this.hform.HMaker,
                            HWhID: this.hform.HWHID,
                            HSPID: this.hform.HStockPlaceID,
                            HSCWHID: this.hform.HSCWHID,
                            HSCSPID: this.hform.HOutStockPlaceID,
                            HQty: sHQty,
                            SourceFlag: HSourceFlag,
                            HSourceBillNo: this.hform.HSourceBillNo,
                            HSourceBillType: this.hform.HMainSourceBillType,
                            HStockInOrgID: this.hform.HStockInOrgID,
                            HStockOutOrgID: this.hform.HStockOutOrgID,
                            HScanStyle: "",
                            HCustom1: "",
                            HCustom2: ""
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        await this.handleBarCodeResult(res.data.data)
                        this.DisBillEntryList()
                        this.hform.HQty = ''
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '处理条码失败',
                        icon: 'none'
                    })
                }
                this.refreshBarCodeState()
            },
            // 处理条码扫描结果
            async handleBarCodeResult(data) {
                switch (data.hBarTypeField) {
                    case '仓库条码':
                        this.handleWarehouseBarCode(data)
                        break
                    case '仓位条码':
                        this.handleStockPlaceBarCode(data)
                        break
                    case '部门条码':
                        this.handleDepartmentBarCode(data)
                        break
                    case '源单条码':
                        await this.handleSourceBillBarCode(data)
                        break
                    default:
                        await this.handleMaterialBarCode(data)
                }
            },
            // 处理仓库条码
            handleWarehouseBarCode(data) {
                this.hform.HSCWHName = data.hWhNameField
                this.hform.HSCWHID = data.hWhIDField
                this.hform.HOutStockPlaceName = data.hSPNameField
                this.hform.HOutStockPlaceID = data.hSPIDField
                this.HSCIsStockMgr = data.hSPFlagField != 0
            },
            // 处理仓位条码
            handleStockPlaceBarCode(data) {
                this.hform.HOutStockPlaceName = data.hSPNameField
                this.hform.HOutStockPlaceID = data.hSPIDField
                this.hform.HSCWHName = data.hWhNameField
                this.hform.HSCWHID = data.hWhIDField
            },
            // 处理部门条码
            handleDepartmentBarCode(data) {
                this.hform.HDeptName = data.hDeptNameField
                this.hform.HDeptID = data.hDeptIDField
                this.tabs = 1
            },
            // 处理源单条码
            async handleSourceBillBarCode(data) {
                await this.setSourceBillInfo(data)
                this.tabs = 3
            },
            // 处理物料条码
            async handleMaterialBarCode(data) {
                if (!this.hform.HSourceBillNo) {
                    await this.setSourceBillInfo(data)
                }
                this.tabs = 2
            },
            // 设置源单信息
            async setSourceBillInfo(data) {
                if (data.hDeptIDField != 0) {
                    this.hform.HDeptID = data.hDeptIDField
                    this.hform.HDeptName = data.hDeptNameField
                }
                this.hform.HSourceBillNo = data.hSourceBillNoField
                this.hform.HMainSourceBillType = data.hSourceBillTypeField
                // 更新源单类型显示
                const index = this.arrayHMainSourceBillValue.findIndex(e => e == data.hSourceBillTypeField)
                if (index !== -1) {
                    this.HMainSourceBillType = this.arrayHMainSourceBillType[index]
                    this.HMainSourceBillTypeIndex = index
                    this.showHMainSourceBillType = false
                }
                if (data.hMulSourceFlagField == 0) {
                    this.showHSourceBillNo = false
                }
                this.hform.HStockStyle = data.hStockStyleField
                this.hform.HStockInOrgID = data.hStockInOrgIDField
                this.hform.HStockOutOrgID = data.hStockOutOrgIDField
                // 更新组织显示
                const inOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.hStockInOrgIDField)
                const outOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.hStockOutOrgIDField)
                if (inOrgIndex !== -1) {
                    this.hform.HStockInOrgName = this.arrayHOrgName[inOrgIndex]
                }
                if (outOrgIndex !== -1) {
                    this.hform.HStockOutOrgName = this.arrayHOrgName[outOrgIndex]
                }
                // 如果组织发生变化,清空仓库仓位
                if (this.hform.HStockInOrgID != uni.getStorageSync('OrganizationID')) {
                    this.clearInWarehouseData()
                }
                if (this.hform.HStockOutOrgID != uni.getStorageSync('OrganizationID')) {
                    this.clearOutWarehouseData()
                }
            },
            // 清空调入仓库数据
            clearInWarehouseData() {
                this.hform.HWHID = 0
                this.hform.HWHName = ''
                this.hform.HStockPlaceID = 0
                this.hform.HStockPlaceName = ''
                this.HIsStockMgr = true
            },
            // 清空调出仓库数据
            clearOutWarehouseData() {
                this.hform.HSCWHID = 0
                this.hform.HSCWHName = ''
                this.hform.HOutStockPlaceID = 0
                this.hform.HOutStockPlaceName = ''
                this.HSCIsStockMgr = true
            },
            // 刷新条码输入状态
            async refreshBarCodeState() {
                this.barCodeFocus = false
                await this.$nextTick(() => {
                    this.hform.HBarCode = ""
                    this.barCodeFocus = true
                })
            },
            // 播放提示音
            playSound(type) {
                const innerAudioContext = uni.createInnerAudioContext();
                innerAudioContext.src = type == 1 ? '/static/success.wav' : '/static/jingbao.wav';
                innerAudioContext.play();
            },
            // 扫描仓库码
            async HWHNameOutScan(e) {
                let index = this.HWHNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓库条码对应的仓库不存在...'
                    })
                } else {
                    this.HSCWHNameChange(this.HWHNameList[index]['仓库名称'])
                }
            },
            // 扫描仓位码
            async HStockPlaceOutNameScan(e) {
                let index = this.HStockPlaceNameList.findIndex(elem => elem['条码编号'] == e)
               // 不先置空的话,数据再次扫描相同的仓位码 不会触发组件内的刷新
                this.hform.HStockPlaceID = 0
                this.hform.HStockPlaceName = ''
                await this.$nextTick()
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓位条码对应的仓位不存在...'
                    })
                } else {
                    this.HOutStockPlaceNameChange(this.HStockPlaceNameList[index]['仓位名称'])
                }
            },
            // 扫描调入仓库码
            async HWHNameInScan(e) {
                let index = this.HWHInNameList.findIndex(elem => elem['条码编号'] == e)
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓库条码对应的仓库不存在...'
                    })
                } else {
                    this.HWHInNameChange(this.HWHInNameList[index]['仓库名称'])
                }
            },
            // 扫描调入仓位码
            async HStockPlaceNameInScan(e) {
                let index = this.HStockPlaceInNameList.findIndex(elem => elem['条码编号'] == e)
               // 不先置空的话,数据再次扫描相同的仓位码 不会触发组件内的刷新
                this.hform.HStockPlaceID = 0
                this.hform.HStockPlaceName = ''
                await this.$nextTick()
                if (index == -1) {
                    uni.showToast({
                        icon: 'none',
                        title: '扫描仓位条码对应的仓位不存在...'
                    })
                } else {
                    this.HStockPlaceInNameChange(this.HStockPlaceInNameList[index]['仓位名称'])
                }
            },
            // 源单类型变更
            HMainSourceBillTypeChange(e) {
                this.HMainSourceBillTypeIndex = e.detail.value
                this.HMainSourceBillType = this.arrayHMainSourceBillType[this.HMainSourceBillTypeIndex]
                this.hform.HMainSourceBillType = this.arrayHMainSourceBillValue[this.HMainSourceBillTypeIndex]
            },
            // 源单单号确认
            onHSourceBillNoConfirmHandler() {
                if (this.hform.HMainSourceBillType == -1) {
                    this.playSound(1)
                    return
                }
                this.getSourceBarCodeData(this.hform.HSourceBillNo)
            },
            // 获取源单数据
            async getSourceBarCodeData(HSourceBillNo) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/get_SourceBarCode_MoveStockStepIn_Json',
                        data: {
                            HInterID: this.hform.HInterID,
                            HBillNo: this.hform.HBillNo,
                            HBillType: this.hform.HBillType,
                            HSourceBillNo: HSourceBillNo,
                            HSourceBillType: this.hform.HMainSourceBillType,
                            HMaker: this.hform.HMaker,
                            HStockInOrgID: this.hform.HStockInOrgID,
                            HStockOutOrgID: this.hform.HStockOutOrgID
                        }
                    })
                    if (res.data.count == 1) {
                        this.playSound(1)
                        await this.setSourceBillInfo(res.data.data)
                        this.tabs = 2
                        this.barCodeFocus = true
                        this.DisBillEntryList()
                    } else {
                        this.playSound(0)
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                        this.refreshHSourceBillState()
                    }
                } catch (error) {
                    this.playSound(0)
                    uni.showToast({
                        title: '获取源单数据失败',
                        icon: 'none'
                    })
                    this.refreshHSourceBillState()
                }
            },
            // 刷新源单输入状态
            async refreshHSourceBillState() {
                this.HSourcebillNoFocus = false
                await this.$nextTick(() => {
                    this.hform.HSourceBillNo = ""
                    this.HSourcebillNoFocus = true
                })
            },
            // 显示源单列表
            showBillList() {
                this.$refs.billList.showPopup()
            },
            // 日期变更
            HDateChange(e) {
                this.hform.HDate = e.detail.value
            },
            // 调出仓库变更
            HSCWHNameChange(e) {
                const warehouse = this.HWHNameList.find(item => item.仓库名称 == e)
                if (warehouse) {
                    this.hform.HSCWHName = warehouse.仓库名称
                    this.hform.HSCWHID = warehouse.HItemID
                    this.HSCIsStockMgr = warehouse['启用仓位'] == 'Y'
                    if (!this.HSCIsStockMgr) {
                        this.hform.HOutStockPlaceName = ''
                        this.hform.HOutStockPlaceID = ''
                    }
                }
            },
            // 调出仓位变更
            HOutStockPlaceNameChange(e) {
                const stockPlace = this.HStockPlaceNameList.find(item => item.仓位名称 == e)
                if (stockPlace) {
                    this.hform.HOutStockPlaceName = stockPlace.仓位名称
                    this.hform.HOutStockPlaceID = stockPlace.HMainID
                }
            },
            // 调入仓库变更
            HWHInNameChange(e) {
                const warehouse = this.HWHInNameList.find(item => item.仓库名称 == e)
                if (warehouse) {
                    this.hform.HWHName = warehouse.仓库名称
                    this.hform.HWHID = warehouse.HItemID
                    this.HIsStockMgr = warehouse['启用仓位'] == 'Y'
                    if (!this.HIsStockMgr) {
                        this.hform.HStockPlaceName = ''
                        this.hform.HStockPlaceID = ''
                    }
                }
            },
            // 调入仓位变更
            HStockPlaceInNameChange(e) {
                const stockPlace = this.HStockPlaceInNameList.find(item => item.仓位名称 == e)
                if (stockPlace) {
                    this.hform.HStockPlaceName = stockPlace.仓位名称
                    this.hform.HStockPlaceID = stockPlace.HMainID
                }
            },
            // 部门变更
            HDeptNameChange(e) {
                const dept = this.HDeptNameList.find(item => item.部门名称 == e)
                if (dept) {
                    this.hform.HDeptName = dept.部门名称
                    this.hform.HDeptID = dept.HItemID
                }
            },
            // 获取基础数据
            getHBaseList() {
                // 获取仓库列表
                CommonUtils.doRequest2({
                    url: '/Gy_Warehouse/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HWHNameList = res.data.data
                            this.HWHInNameList = res.data.data
                            this.arrayHWHName = res.data.data.map(item => item.仓库名称)
                            this.arrayHWHInName = res.data.data.map(item => item.仓库名称)
                        }
                    }
                })
                // 获取仓位列表
                CommonUtils.doRequest2({
                    url: '/Gy_StockPlace/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HStockPlaceNameList = res.data.data
                            this.HStockPlaceInNameList = res.data.data
                            this.arrayHStockPlaceName = res.data.data.map(item => item.仓位名称)
                            this.arrayHStockPlaceInName = res.data.data.map(item => item.仓位名称)
                        }
                    }
                })
            },
            // 获取部门列表
            getHDeptList() {
                CommonUtils.doRequest2({
                    url: '/Gy_Department/list',
                    data: {
                        sWhere: "",
                        user: uni.getStorageSync('HUserName'),
                        Organization: uni.getStorageSync('Organization')
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.HDeptNameList = res.data.data
                            this.arrayHDeptName = res.data.data.map(item => item.部门名称)
                        }
                    }
                })
            },
            // 显示仓库列表
            showWarehouseList(type) {
                const HOrgID = type === 'HSCWHID' ? this.hform.HStockOutOrgID : this.hform.HStockInOrgID
                uni.navigateTo({
                    url: `/pages/Baseset/WarehouseList?Type=${type}&HOrgID=${HOrgID}`
                })
            },
            // 显示仓位列表
            showStockPlaceList(type) {
                const HWhID = type === 'HOSpID' ? this.hform.HSCWHID : this.hform.HWHID
                const HOrgID = type === 'HOSpID' ? this.hform.HStockOutOrgID : this.hform.HStockInOrgID
                uni.navigateTo({
                    url: `/pages/Baseset/StockPlaceList?HWhID=${HWhID}&Type=${type}&HOrgID=${HOrgID}`
                })
            },
            // 显示部门列表
            showDepartmentList() {
                uni.navigateTo({
                    url: `/pages/Baseset/DepartmentList?HStockOrgID=${this.hform.HStockOrgID}&Type=HDept1`
                })
            },
            // 处理仓库选择结果
            handleWarehouseSelect(data) {
                if (data.type === 'HSCWHID') {
                    this.hform.HSCWHName = data.data[0].HName
                    this.hform.HSCWHID = data.data[0].HItemID
                    this.hform.HOutStockPlaceName = data.data[0].HSPName
                    this.hform.HOutStockPlaceID = data.data[0].HSPID
                    this.HSCIsStockMgr = data.data[0].HSPFlag != 0
                } else if (data.type === 'HWHID') {
                    this.hform.HWHName = data.data[0].HName
                    this.hform.HWHID = data.data[0].HItemID
                    this.hform.HStockPlaceName = data.data[0].HSPName
                    this.hform.HStockPlaceID = data.data[0].HSPID
                    this.HIsStockMgr = data.data[0].HSPFlag != 0
                }
            },
            // 处理仓位选择结果
            handleStockPlaceSelect(data) {
                if (data.type === 'HOSpID') {
                    this.hform.HOutStockPlaceName = data.data[0].HName
                    this.hform.HOutStockPlaceID = data.data[0].HItemID
                    this.hform.HSCWHName = data.data[0].HWhName
                    this.hform.HSCWHID = data.data[0].HWHID
                } else if (data.type === 'HSpID') {
                    this.hform.HStockPlaceName = data.data[0].HName
                    this.hform.HStockPlaceID = data.data[0].HItemID
                    this.hform.HWHName = data.data[0].HWhName
                    this.hform.HWHID = data.data[0].HWHID
                }
            },
            // 处理部门选择结果
            handleDepartmentSelect(data) {
                this.hform.HDeptName = data.data[0].HName
                this.hform.HDeptID = data.data[0].HItemID
            },
            // 显示物料明细
            showMaterialDetail(item) {
                this.selectedMaterial = item
                // this.$refs.materialEdit.show()
            },
            // 显示源单条码明细
            showSourceBarCodeDetail(item) {
                // 可以在这里实现源单条码明细的显示逻辑
                console.log('源单条码明细:', item)
            },
            // 物料保存回调
            onMaterialSave() {
                this.DisBillEntryList()
            },
            // 显示物料清单
            DisBillEntryList() {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetBillEntryTmpList_Json',
                    data: {
                        HInterID: this.hform.HInterID,
                        HBillNo: this.hform.HBillNo,
                        HBillType: this.hform.HBillType,
                        HStockOrgID: this.hform.HStockOutOrgID
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            const data = res.data.data
                            this.Materlist = data.Materlist
                            if (data.ICMOReportlist[0].HSourceInterID !=0 ) {
                                this.FIFOlist = data.ICMOReportlist
                            }
                            // 更新条码信息
                            if (data.BarCodeDetailslist && data.BarCodeDetailslist[0].HBarCode) {
                                const barcode = data.BarCodeDetailslist[0]
                                this.hform.HBarCode_B = barcode.HBarCode
                                this.hform.HMaterName_B = barcode.HMaterName
                                this.hform.HMaterModel_B = barcode.HMaterModel
                                this.hform.HBatchNo_B = barcode.HBatchNo
                                this.hform.HUnitName_B = barcode.HUnitName
                                this.hform.HQty_B = barcode.HQty
                                this.hform.HTMQty_B = barcode.HTMQty
                                this.hform.HWHName_B = barcode.HWHName
                                this.hform.HSPName_B = barcode.HSPName
                                this.hform.HSCWHName_B = barcode.HSCWHName
                                this.hform.HSCSPName_B = barcode.HSCSPName
                            } else {
                                this.clearBarcodeInfo()
                            }
                        } else {
                            this.Materlist = []
                            this.FIFOlist = []
                            this.clearBarcodeInfo()
                        }
                    }
                })
            },
            // 清空条码信息
            clearBarcodeInfo() {
                this.hform.HBarCode_B = ''
                this.hform.HMaterName_B = ''
                this.hform.HMaterModel_B = ''
                this.hform.HBatchNo_B = ''
                this.hform.HUnitName_B = ''
                this.hform.HQty_B = ''
                this.hform.HTMQty_B = ''
                this.hform.HWHName_B = ''
                this.hform.HSPName_B = ''
                this.hform.HSCWHName_B = ''
                this.hform.HSCSPName_B = ''
            },
            // 获取新单据数据
            getNewData() {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetMaxBillNoAndID_Json',
                    data: {
                        HBillType: this.hform.HBillType
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            this.hform.HInterID = res.data.data[0].HInterID
                            this.hform.HBillNo = res.data.data[0].HBillNo
                        }
                    }
                })
            },
            // 加载已有单据
            RoadBillMain(HInterID) {
                CommonUtils.doRequest2({
                    url: '/WEBSController/GetSourceBill_Temp_Json',
                    data: {
                        HInterID: HInterID,
                        HBillType: this.hform.HBillType
                    },
                    resFunction: (res) => {
                        if (res.data.count == 1) {
                            const data = res.data.data[0]
                            this.hform.HInterID = data.HInterID
                            this.hform.HBillNo = data.HBillNo
                            this.hform.HMainSourceBillType = data.HSourceBillType
                            this.hform.HSourceBillNo = data.HSourceBillNo
                            // 设置源单类型
                            const index = this.arrayHMainSourceBillValue.findIndex(e => e == data.HSourceBillType)
                            if (index !== -1) {
                                this.HMainSourceBillType = this.arrayHMainSourceBillType[index]
                                this.HMainSourceBillTypeIndex = index
                                this.showHMainSourceBillType = false
                            }
                            if (data.HMulSourceBill == 0) {
                                this.showHSourceBillNo = false
                            }
                            if (data.HDeptID != 0) {
                                this.hform.HDeptID = data.HDeptID
                                this.hform.HDeptName = data.HDeptName
                            }
                            this.hform.HStockStyle = data.HStockStyle
                            this.hform.HStockInOrgID = data.HStockInOrgID
                            this.hform.HStockOutOrgID = data.HStockOutOrgID
                            // 设置组织显示
                            const inOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.HStockInOrgID)
                            const outOrgIndex = this.arrayHOrgValue.findIndex(e => e == data.HStockOutOrgID)
                            if (inOrgIndex !== -1) {
                                this.hform.HStockInOrgName = this.arrayHOrgName[inOrgIndex]
                            }
                            if (outOrgIndex !== -1) {
                                this.hform.HStockOutOrgName = this.arrayHOrgName[outOrgIndex]
                            }
                            this.tabs = 2
                            this.DisBillEntryList()
                        }
                    }
                })
            },
            // 新增单据
            addNew() {
                uni.redirectTo({
                    url: '/pages/fenbushidiaoru/form?OperationType=1'
                })
            },
            // 提交单据
            async submit() {
                // 表单验证
                if (!this.hform.HInterID) {
                    uni.showToast({
                        title: '单据内码获取失败,错误的单据内码!',
                        icon: 'none'
                    })
                    return
                }
                if (!this.hform.HBillNo) {
                    uni.showToast({
                        title: '单据号获取失败,错误的单据号!',
                        icon: 'none'
                    })
                    return
                }
                if (!this.Materlist || this.Materlist.length == 0) {
                    uni.showToast({
                        title: '没有扫码信息,请先扫描条码,确认无误后再提交!',
                        icon: 'none'
                    })
                    return
                }
                const hasMaterial = this.Materlist.some(item => item.数量 > 0)
                if (!hasMaterial) {
                    uni.showToast({
                        title: '没有扫描物料条码,请先扫描物料条码,确认无误后再提交!',
                        icon: 'none'
                    })
                    return
                }
                // 清空空值的ID
                if (!this.hform.HWHName) this.hform.HWHID = 0
                if (!this.hform.HStockPlaceName) this.hform.HStockPlaceID = 0
                if (!this.hform.HSCWHName) this.hform.HSCWHID = 0
                if (!this.hform.HOutStockPlaceName) this.hform.HOutStockPlaceID = 0
                if (!this.hform.HDeptName) this.hform.HDeptID = 0
                try {
                    const sMainStr = JSON.stringify(this.hform)
                    let res = await CommonUtils.doRequest2Sync({
                        url: '/WEBSController/set_SaveMoveStockStepInBill_Json',
                        method: 'POST',
                        data: {
                            oMain: sMainStr
                        }
                    })
                    if (res.data.count == 1) {
                        uni.showModal({
                            title: '提示',
                            content: res.data.Message + '。是否继续新增?',
                            success: (res) => {
                                if (res.confirm) {
                                    this.addNew()
                                } else {
                                    if (this.OperationType == 2) {
                                        uni.navigateBack()
                                    } else {
                                        uni.switchTab({
                                            url: '/pages/index/index'
                                        })
                                    }
                                }
                            }
                        })
                    } else {
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                } catch (error) {
                    uni.showToast({
                        title: '提交失败:' + error,
                        icon: 'none'
                    })
                }
            },
            // 返回
            goBack() {
                uni.showModal({
                    title: '提示',
                    content: '确认要退出当前页面吗?',
                    success: (res) => {
                        if (res.confirm) {
                            if (this.OperationType == 2) {
                                uni.navigateBack()
                            } else {
                                uni.switchTab({
                                    url: '/pages/index/index'
                                })
                            }
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
    .form {
        width: 668rpx;
        margin: 20rpx auto;
        padding-bottom: 240rpx;
    }
    .tabs {
        width: 100%;
        display: flex;
        border-bottom: 1px solid #ddd;
        margin: 20rpx 0;
        view {
            width: 20%;
            font-size: 26rpx;
            color: #555;
            text-align: center;
            padding: 16rpx 0;
        }
        .on {
            color: #3a78ff;
            font-weight: bold;
            border-bottom: 3px solid #3a78ff;
        }
    }
    .form-item {
        display: flex;
        align-items: center;
        font-size: 30rpx;
        padding: 6rpx 0;
        gap: 12rpx;
        .title {
            width: 208rpx;
            flex-shrink: 0;
        }
        .right {
            flex: 1;
            border-radius: 22rpx;
            border: 1px solid #acacac;
            position: relative;
            display: flex;
        }
        .righton {
            flex: 1;
            border-radius: 22rpx;
            border: 1px solid #e4e4e4;
            background-color: #e4e4e4;
        }
        input {
            width: 100%;
            padding: 8rpx 20rpx;
            font-size: 30rpx;
        }
        .icon-wrapper {
            background-color: #3A78FF;
            border-radius: 100%;
            width: 52rpx;
            height: 52rpx;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-shrink: 0;
            .uni-icons {
                color: #fff !important;
            }
        }
        .icon-wrapper[disabled] {
            background-color: rgba(228, 228, 228, 1);
            pointer-events: none;
            touch-action: none;
        }
    }
    .bottom-btn {
        box-sizing: border-box;
        width: 100%;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        display: flex;
        flex-direction: row;
        gap: 10rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-c {
            background-color: #acacac;
            color: #fff;
        }
    }
    .list {
        width: 100%;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            line-height: 120%;
            .detail {
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
        }
    }
    .over {
        text-align: center;
        color: #999;
        padding: 40rpx;
    }
</style>