llj
2026-04-07 8857caa578f58fae59f50ff8b46d920471125567
src/views/logistics/transportGPS/Add_Edit_WL_YayBill.vue
@@ -38,56 +38,19 @@
                                <el-col :span="6"></el-col>
                            </el-row>
                            <el-row>
                                <el-col :span="6">
                                <!-- <el-col :span="6">
                                    <el-form-item label="客户" prop="HCusName">
                                        <el-input v-model="form.HCusName" placeholder="请输入客户">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(7)"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="币别" prop="HCurName">
                                        <el-input v-model="form.HCurName" placeholder="请输入币别" />
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="汇率" prop="HExRate">
                                        <el-input v-model="form.HExRate" placeholder="请输入汇率" readonly />
                                    </el-form-item>
                                </el-col>
                                </el-col> -->
                            </el-row>
                        </div>
                        <!-- 第二块:承运合同、始发地、目的地、车型、车型最大容积、距离、运输时效、运输类型、结算方式、币别、汇率、运费、总体积、装载率、运输方式 -->
                        <div class="form-group">
                            <el-row>
                                <el-col :span="6">
                                    <el-form-item label="始发地" prop="HBeginAddrName">
                                        <el-input v-model="form.HBeginAddrName" placeholder="请输入始发地">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(3, areaType = 'b')"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="目的地" prop="HEndAddrName">
                                        <el-input v-model="form.HEndAddrName" placeholder="请输入目的地">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(3, areaType = 'e')"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="车型" prop="HCarTypeName">
                                        <el-input v-model="form.HCarTypeName" placeholder="请输入车型">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(13)"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                            </el-row>
                            <el-row>
                                <el-col :span="6">
                                    <el-form-item label="承运合同" prop="HContractTransportBillNo">
@@ -104,13 +67,55 @@
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="12">
                                    <el-form-item label="运输线路" prop="HTransportLineName">
                                        <el-select v-model="form.HTransportLineName" placeholder="请选择运输线路" filterable
                                            @change="transLineNameChange" @focus="checkTransportList">
                                            <el-option v-for="(item, index) in transportList" :key="index" :label="item"
                                                :value="item"></el-option>
                                        </el-select>
                                    </el-form-item>
                                </el-col>
                            </el-row>
                            <el-row>
                                <el-col :span="6">
                                    <el-form-item label="运输方式" prop="HTransType">
                                        <el-select v-model="form.HTransType" placeholder="请选择运输方式">
                                            <el-option label="零单" value="零单"></el-option>
                                            <el-option label="单程" value="单程"></el-option>
                                            <el-option label="往返" value="往返"></el-option>
                                        <el-select v-model="form.HTransType" placeholder="请选择运输方式"
                                            @change="transTypeChange" @focus="checkTransTypeList">
                                            <el-option v-for="(item, index) in transTypeList" :key="index" :label="item"
                                                :value="item"></el-option>
                                        </el-select>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="车型" prop="HCarTypeName">
                                        <el-select v-model="form.HCarTypeName" placeholder="请选择车型"
                                            @change="transHCarChange" @focus="checkHCarTypeNameList">
                                            <el-option v-for="(item, index) in HCarTypeNameList" :key="index"
                                                :label="item.value" :value="item.id"></el-option>
                                        </el-select>
                                        <!-- <el-input v-model="form.HCarTypeName" placeholder="请输入车型">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(13)"></el-button>
                                        </el-input> -->
                                    </el-form-item>
                                </el-col>
                            </el-row>
                            <el-row>
                                <el-col :span="6">
                                    <el-form-item label="始发地" prop="HBeginAddrName">
                                        <el-input v-model="form.HBeginAddrName" placeholder="请输入始发地">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(3, areaType = 'b')"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="目的地" prop="HEndAddrName">
                                        <el-input v-model="form.HEndAddrName" placeholder="请输入目的地">
                                            <el-button slot="append" icon="el-icon-search"
                                                @click="openDataDialog(3, areaType = 'e')"></el-button>
                                        </el-input>
                                    </el-form-item>
                                </el-col>
                            </el-row>
@@ -166,18 +171,18 @@
                        </div>
                        <!-- 第三块:提货地址、到货地址、组织、要求提货日期、承运商确认日期、物流状态 -->
                        <div class="form-group">
                            <el-row>
                                <el-col :span="6">
                            <!--  <el-row>
                               <el-col :span="6">
                                    <el-form-item label="提货地址" prop="HPickAddr">
                                        <el-input v-model="form.HPickAddr" placeholder="请输入提货地址" />
                                    </el-form-item>
                                </el-col>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="到货地址" prop="HArriverAddr">
                                        <el-input v-model="form.HArriverAddr" placeholder="请输入到货地址" />
                                    </el-form-item>
                                </el-col>
                            </el-row>
                            </el-row>-->
                            <el-row>
                                <el-col :span="6">
                                    <el-form-item label="要求到达日期" prop="HDataForRequestedArrived">
@@ -195,6 +200,18 @@
                                </el-col>
                            </el-row>
                        </div>
                        <!-- <div class="form-group">
                            <el-form-item label="附件" prop="fujian">
                                <el-upload class="upload-demo" ref="upload" action="" :on-preview="handleFilePreview"
                                    :on-remove="handleFileRemove" :on-change="handleFileChange" :file-list="fileList"
                                    :auto-upload="false" :limit="10" :on-exceed="handleExceed"
                                    accept=".jpg,.png,.jpeg,.pdf,.doc,.docx,.xls,.xlsx,.zip,.rar">
                                    <el-button size="small" type="primary">点击上传</el-button>
                                    <div slot="tip" class="el-upload__tip">
                                        支持上传jpg/png/jpeg/pdf/doc/docx/xls/xlsx/zip/rar格式文件,最多10个</div>
                                </el-upload>
                            </el-form-item>
                        </div> -->
                    </el-tab-pane>
                    <el-tab-pane label="承运商信息" name="second">
                        <div class="form-group">
@@ -231,7 +248,17 @@
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="运费" prop="HMoney">
                                        <el-input v-model="form.HMoney" placeholder="请输入运费" />
                                        <el-input v-model="form.HMoney" placeholder="请输入运费" disabled />
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="币别" prop="HCurName">
                                        <el-input v-model="form.HCurName" placeholder="请输入币别" />
                                    </el-form-item>
                                </el-col>
                                <el-col :span="6">
                                    <el-form-item label="汇率" prop="HExRate">
                                        <el-input v-model="form.HExRate" placeholder="请输入汇率" readonly />
                                    </el-form-item>
                                </el-col>
                            </el-row>
@@ -257,15 +284,15 @@
                                <el-col :span="6">
                                    <el-form-item label="物流状态" prop="HCarryStatus">
                                        <el-select v-model="form.HCarryStatus" placeholder="请选择物流状态" disabled>
                                            <el-option label="申请中" value="1"></el-option>
                                            <el-option label="已审核" value="2"></el-option>
                                            <el-option label="承运商确认" value="3"></el-option>
                                            <el-option label="待提货" value="4"></el-option>
                                            <el-option label="已到厂" value="5"></el-option>
                                            <el-option label="已提货" value="6"></el-option>
                                            <el-option label="运输中" value="7"></el-option>
                                            <el-option label="已签收" value="8"></el-option>
                                            <el-option label="已核算" value="9"></el-option>
                                            <el-option label="申请中" value="申请中"></el-option>
                                            <el-option label="待供应商确认" value="待供应商确认"></el-option>
                                            <el-option label="指定驾驶员、车辆中" value="指定驾驶员、车辆中"></el-option>
                                            <el-option label="正在前往始发地" value="正在前往始发地"></el-option>
                                            <el-option label="提货中" value="提货中"></el-option>
                                            <el-option label="准备离厂" value="准备离厂"></el-option>
                                            <el-option label="送货中" value="送货中"></el-option>
                                            <el-option label="已签收" value="已签收"></el-option>
                                            <el-option label="已核算" value="已核算"></el-option>
                                        </el-select>
                                    </el-form-item>
                                </el-col>
@@ -423,9 +450,20 @@
                            @selection-change="handleTableZbEdit" :row-class-name="rowSysZbIndex" show-summary border>
                            <el-table-column type="selection" width="55" align="center" />
                            <el-table-column align="center" label="序号" type="index" width="80" />
                            <el-table-column align="center" label="源单单据号" width="120">
                            <el-table-column align="center" label="发货通知单" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HSourceBillNo }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="客户" prop="HCusName" width="120" />
                            <el-table-column align="center" label="提货地址" width="120">
                                <template slot-scope="scope">
                                    <el-input v-model="scope.row.HPickAddr" placeholder="请输入提货地址" />
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="到货地址" width="120">
                                <template slot-scope="scope">
                                    <el-input v-model="scope.row.HArriverAddr" placeholder="请输入到货地址" />
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="物料代码" width="120">
@@ -434,21 +472,19 @@
                            <el-table-column align="center" label="物料名称" width="120">
                                <template slot-scope="scope">{{ scope.row.HMaterName }} </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器代码" width="120">
                            <el-table-column align="center" label="物料规格" width="120">
                                <template slot-scope="scope">{{ scope.row.HModel }} </template>
                            </el-table-column>
                            <el-table-column v-if="false" align="center" label="容器代码" width="120">
                                <template slot-scope="scope">
                                    <el-input v-model="scope.row.HMouldNumber" placeholder="请输入器具代码"
                                        @keyup.native.f7="openDataDialog(17, scope.row)"
                                        @dblclick.native="openDataDialog(17, scope.row)" />
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器名称" width="120">
                            <el-table-column v-if="false" align="center" label="容器名称" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HMouldName }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器数量/托" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HStandardQtyForMouldInPack }}</span>
                                </template>
                            </el-table-column>
@@ -459,25 +495,30 @@
                                        @change="checkTotalQtyExceed(scope.row)"></el-input-number>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="标准包装数量" width="120">
                            <el-table-column v-if="false" align="center" label="标准包装数量" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HSNP }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="包装容器数量" width="120">
                            <el-table-column v-if="false" align="center" label="包装容器数量" width="170">
                                <template slot-scope="scope">
                                    <el-input-number v-model="scope.row.HMouldQty" :min="0" style="width: 90px;"
                                    <el-input-number v-model="scope.row.HMouldQty" :min="0" style="width: 150px;"
                                        controls-position="right"
                                        @change="changeHMouldQty(scope.row)"></el-input-number>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="托数" width="120">
                            <el-table-column v-if="false" align="center" label="容器数量/托" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HStandardQtyForMouldInPack }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column v-if="false" align="center" label="托数" width="120">
                                <template slot-scope="scope"> <!--HPackQTY=HMouldQty/HStandardQtyForMouldInPack -->
                                    <el-input-number v-model="scope.row.HPackQTY" :min="0" style="width: 90px;"
                                        controls-position="right" @change="changeHPackQty(scope.row)"></el-input-number>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="托单位体积" width="120">
                            <el-table-column v-if="false" align="center" label="托单位体积" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HPackV }}</span>
                                </template>
@@ -494,22 +535,22 @@
                                        controls-position="right"></el-input-number> -->
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器长度" width="120">
                            <el-table-column v-if="false" align="center" label="容器长度" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HMouldLength }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器宽度" width="120">
                            <el-table-column v-if="false" align="center" label="容器宽度" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HMouldWidth }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="容器高度" width="120">
                            <el-table-column v-if="false" align="center" label="容器高度" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HMouldHeight }}</span>
                                </template>
                            </el-table-column>
                            <el-table-column align="center" label="折叠高度" width="120">
                            <el-table-column v-if="false" align="center" label="折叠高度" width="120">
                                <template slot-scope="scope">
                                    <span>{{ scope.row.HMouldFoldHeight }}</span>
                                </template>
@@ -577,7 +618,7 @@
import ContractTransport from "@/views/basic/gytransport/cgContractTransportBillList/Cg_ContractTransportBillList.vue"
import GyMaterialPackingRelation from '@/views/scMould/basicModeling/Gy_MaterialPackingRelationList.vue'
import AreaDialog from "@/views/component/AreaDialog"
import { watch } from 'vue';
export default {
    name: 'Add_Edit_WL_YayBill.vue',
    components: { Dept, Warehouse, Material, RowSettings, XsSeOutStockBill, GyCustomer, GySupplier, GyCartype, GyCar, GyDriver, ContractTransport, GyMaterialPackingRelation, AreaDialog },
@@ -628,6 +669,9 @@
            temp: undefined,                                                           //临时变量
            btResList: [],                                                             // 列设置
            transportList: [],                                                     //运输线路选择列表
            transTypeList: [],
            HCarTypeNameList: [],
            form: {},                                                                  // 表单参数
            rules: {                                                                   // 表单校验
                HCarrierName: [
@@ -636,17 +680,26 @@
                HCusName: [
                    { required: true, message: "客户不能为空", trigger: "blur" }
                ],
                HBeginAddrName: [
                    { required: true, message: "始发地不能为空", trigger: "blur" }
                ],
                HEndAddrName: [
                    { required: true, message: "目的地不能为空", trigger: "blur" }
                HCarTypeName: [
                    { required: true, message: "车型不能为空", trigger: "blur" }
                ],
                HDate: [
                    { required: true, message: "日期不能为空", trigger: "blur" }
                ],
                HExRate: [
                    { required: true, message: "汇率不能为空", trigger: "blur" }
                ],
                HCarrierName: [
                    { required: true, message: "承运合同不能为空", trigger: "blur" }
                ],
                HContractTransportBillNo: [
                    { required: true, message: "承运合同不能为空", trigger: "blur" }
                ],
                HTransType: [
                    { required: true, message: "运输方式不能为空", trigger: "blur" }
                ],
                HTransportLineName: [
                    { required: true, message: "运输线路不能为空", trigger: "blur" }
                ]
            },
@@ -750,6 +803,7 @@
                HPickAddr: "",
                HArriverAddr: "",
                HTransType: "",
                HTransportLineName: "",
                HCarTypeID: 0,
                HCarTypeName: "",
                HCarTypeMaxVolume: 0,
@@ -853,14 +907,14 @@
                    this.form.HInnerBillNo = data.内部单据号
                    this.form.HCarrierID = data.承运商ID
                    this.form.HCarrierName = data.承运商名称
                    this.form.HCusID = data.HCusID
                    this.form.HCusName = data.客户名称
                    // this.form.HCusID = data.HCusID
                    // this.form.HCusName = data.客户名称
                    this.form.HBeginAddr = data.始发地
                    this.form.HBeginAddrName = data.始发地名称
                    this.form.HEndAddr = data.目的地
                    this.form.HEndAddrName = data.目的地名称
                    this.form.HPickAddr = data.提货地址
                    this.form.HArriverAddr = data.到货方式
                    // this.form.HPickAddr = data.提货地址
                    // this.form.HArriverAddr = data.到货地址
                    this.form.HTransType = data.运输方式
                    this.form.HCarTypeID = data.车型ID
                    this.form.HCarTypeName = data.车型名称
@@ -887,7 +941,7 @@
                    this.form.HCarName = data.车辆名称
                    this.form.HDriverID = data.司机ID
                    this.form.HDriverName = data.司机名称
                    this.form.HTransportLineName = data.运输路线名称
                    //子表  赋值
                    for (var i = 0; i < result.data.length; i++) {
                        var qty = parseFloat(result.data[i].HQty) || 0;
@@ -898,12 +952,16 @@
                        var width = parseFloat(result.data[i].容器宽度) || 0;
                        var height = parseFloat(result.data[i].容器高度) || 0;
                        var rowVolume = (length * width * height).toFixed(2);
                        console.log(result.data)
                        this.editData.push(
                            {
                                "HSourceInterID": result.data[i].源单主内码,
                                "HSourceEntryID": result.data[i].源单子内码,
                                "HSourceBillNo": result.data[i].源单单据,
                                "HCusID": result.data[i].HCusID,
                                "HCusName": result.data[i].客户名称,
                                "HPickAddr": result.data[i].提货地址,
                                "HArriverAddr": result.data[i].到货地址,
                                "HMaterID": result.data[i].HMaterID,
                                "HMaterNumber": result.data[i].物料代码,
                                "HMaterName": result.data[i].物料名称,
@@ -920,12 +978,20 @@
                                "HQty": result.data[i].物料数量,
                                "HQty_origin": result.data[i].HQty,
                                "HVolume": rowVolume,
                                "HScatteredVolume": result.data[i].零单占用体积
                                "HScatteredVolume": result.data[i].零单占用体积,
                                "HStandardQtyForMouldInPack": result.data[i].HStandardQtyForMouldInPack,
                                "HPackV": result.data[i].HPackV,
                                "HPackQTY": result.data[i].HPackQTY,
                            }
                        )
                    }
                    this.formShow = true
                    this.formLoading = false
                    // 加载运输线路、运输类型、车型列表
                    if (this.form.HContractTransportInterID) {
                        this.loadTransportData()
                    }
                    // 加载已上传的文件列表
                    this.getFileList();
@@ -1080,6 +1146,7 @@
                this.calculateLoadingRate(parseFloat(this.form.HTotalVolume || 0));
                this.gyCartypeShow = false
                this.openData = false
                this.checkAndCallGetTransCost()
            } else if (num == 14) {
                this.form.HCarName = deptRow.车辆名称
                this.form.HCarID = deptRow.HItemID
@@ -1094,19 +1161,36 @@
                console.log(deptRow)
                this.form.HContractTransportBillNo = deptRow.单据号
                this.form.HContractTransportInterID = deptRow.HInterID
                this.form.HContractTransportEntryID = deptRow.HInterID
                this.form.HDistance = deptRow.距离
                this.form.HTransportTimes = deptRow.运输时效
                this.form.HTransportTyep = deptRow.运输类型
                this.form.HTransType = deptRow.运输类型
                this.form.HSSID = deptRow.结算方式
                this.form.HSSName = deptRow.结算方式名称
                this.form.HCurID = deptRow.币别
                this.form.HCurName = deptRow.货币名称
                this.form.HMoney = deptRow.运输费用
                this.form.HExRate = deptRow.汇率 == null ? 0 : deptRow.汇率
                this.form.HCarrierID = deptRow.HSupID
                this.form.HCarrierName = deptRow.供应商名称
                this.transportList = []
                this.transTypeList = []
                this.HCarTypeNameList = []
                axios.get(this.$baseUrl + '/WLYayBillController/initDataForSelectContractTransportBill', {
                    params: {
                        "hmainid": deptRow.HInterID,
                    },
                }).then(res => {
                    let response = res.data
                    if (response.code == 1) {
                        if (response.data.length == 0) {
                            this.$modal.msgError("请检查【" + this.form.HContractTransportBillNo + "】对应的承运合同是否维护!!!");
                            this.form.HMoney = 0
                            return
                        }
                        this.form.HCarrierID = response.data[0].HSupID
                        this.form.HCarrierName = response.data[0].供应商名称
                        this.form.HCurID = response.data[0].币别
                        this.form.HCurName = response.data[0].货币名称
                        this.form.HExRate = response.data[0].汇率 == null ? 0 : response.data[0].汇率 - 0
                        this.form.HSSID = response.data[0].结算方式
                        this.form.HSSName = response.data[0].结算方式名称
                        this.transportList = [...new Set(response.data.map(item => item.运输路线名称))]
                        // this.checkAndCallGetTransCost()
                    } else {
                        this.$modal.msgError("错误:" + response.data.code + response.data.Message);
                    }
                }).catch(error => {
                    this.$modal.msgError("接口请求失败!");
                });
                this.ContractTransportShow = false
                this.openData = false
            } else if (num == 17) {
@@ -1182,27 +1266,27 @@
        async processSourceDataAsync(deptRow) {
            try {
                // 设置客户信息
                if (!this.form.HCusID && deptRow.length > 0) {
                    this.form.HCusID = deptRow[0]["HCusID"];
                    this.form.HCusName = deptRow[0]["客户"];
                }
                // if (!this.form.HCusID && deptRow.length > 0) {
                //     this.form.HCusID = deptRow[0]["HCusID"];
                //     this.form.HCusName = deptRow[0]["客户"];
                // }
                console.log(deptRow)
                this.form.HMainSourceInterID = deptRow[0]["hmainid"]
                this.form.HMainSourceEntryID = deptRow[0]["hsubid"]
                this.form.HMainSourceBillType = deptRow[0]["HBillType"]
                this.form.HMainSourceBillNo = deptRow[0]["单据号"]
                this.form.HCurName = deptRow[0]["币别"]
                this.form.HCurID = deptRow[0]["HCurID"]
                this.form.HExRate = deptRow[0]["汇率"]
                // this.form.HCurName = deptRow[0]["币别"]
                // this.form.HCurID = deptRow[0]["HCurID"]
                // this.form.HExRate = deptRow[0]["汇率"]
                // 检查是否所有记录属于同一客户
                //for (var i = 0; i < deptRow.length; i++) {
                // for (var i = 0; i < deptRow.length; i++) {
                //    if (deptRow[i]["HCusID"] != this.form.HCusID) {
                //        this.$modal.msgError("下推失败!已经选中的记录中存在不同客户,请确保选择的源单属于同一客户!");
                //        this.xsSeOutStockBillShow = false;
                //        this.openData = false;
                //        return;
                //    }
                //}
                // }
                // 检查新选择的源单是否已经在子表中存在
                var isDuplicate = this.checkDuplicateSource(deptRow);
@@ -1234,17 +1318,17 @@
            try {
                // 显示源单数据加载状态
                this.sourceDataLoading = true;
                var dataArray = [];
                let hmainidVal = []
                for (var i = 0; i < checkStatus.length; i++) {
                    hmainidVal[i] = "'" + checkStatus[i].hmainid + '-' + checkStatus[i].hsubid + "'"
                }
                // 使用Promise.all等待所有异步请求完成
                const promises = checkStatus.map(async (item) => {
                    const temp = await this.getPushSeOutStockBillInit(item.hmainid, item.hsubid);
                    return temp;
                });
                const results = await Promise.all(promises);
                // 过滤掉null值
                for (const result of results) {
                    if (result) {
@@ -1255,201 +1339,116 @@
                        return;
                    }
                }
                // 获取现有子表数据
                var existingData = this.editData || [];
                var orginHQTY = 0;
                // 创建物料ID映射
                var materialMap = {};
                for (var i = 0; i < dataArray.length; i++) {
                    console.log(dataArray)
                    orginHQTY = dataArray[i].数量;
                    var materialId = dataArray[i].HMaterID;
                    if (!materialMap[materialId]) {
                        materialMap[materialId] = [];
                    }
                    materialMap[materialId].push({
                        HMaterID: dataArray[i].HMaterID,
                        hmainid: dataArray[i].hmainid,
                        hsubid: dataArray[i].hsubid,
                        单据号: dataArray[i].单据号
                    });
                }
                // var materialMap = {};
                // for (var i = 0; i < dataArray.length; i++) {
                //     orginHQTY = dataArray[i].数量;
                //     var materialId = dataArray[i].HMaterID;
                //     console.log(materialId)
                //     if (!materialMap[materialId]) {
                //         materialMap[materialId] = [];
                //     }
                //     materialMap[materialId].push({
                //         HMaterID: dataArray[i].HMaterID,
                //         hmainid: dataArray[i].hmainid,
                //         hsubid: dataArray[i].hsubid,
                //         单据号: dataArray[i].单据号
                //     });
                // }
                // // 获取所有物料ID
                // var ListMaterial = "";
                // for (var materialId in materialMap) {
                //     if (ListMaterial) ListMaterial += ";";
                //     ListMaterial += materialId;
                // }
                // if (!ListMaterial) {
                //     this.$modal.msgError("没有找到物料信息,请检查选择的源单是否包含有效的物料数据!");
                //     this.sourceDataLoading = false;
                //     return;
                // }
                // 获取所有物料ID
                var ListMaterial = "";
                for (var materialId in materialMap) {
                    if (ListMaterial) ListMaterial += ";";
                    ListMaterial += materialId;
                }
                if (!ListMaterial) {
                    this.$modal.msgError("没有找到物料信息,请检查选择的源单是否包含有效的物料数据!");
                    this.sourceDataLoading = false;
                    return;
                }
                const response = await axios.get(this.baseURL + '/WLYayBillController/GetMesByOrginBill_1', {
                const response = await axios.get(this.baseURL + '/WLYayBillController/GetList', {
                    params: {
                        "ListMaterial": ListMaterial
                        "user": sessionStorage["HUserName"],
                        "hmainid_hsubid": hmainidVal.join(',')
                    },
                });
                console.log(response)
                console.log('源单详情', response.data.data)
                let result = response.data;
                if (result.count == 1) {
                    let res = result.data;
                    var newRows = [];
                    // 为每个源单行创建对应的子表行
                    for (var materialId in materialMap) {
                        var sourceInfos = materialMap[materialId];
                        console.log("发货通知单数据", dataArray)
                        console.log("1发货通知单数据", dataArray[0])
                        if (res.length === 0) {
                            // 为每个源单行创建一条记录
                            for (var j = 0; j < sourceInfos.length; j++) {
                                var sourceInfo = sourceInfos[j];
                                // 再次检查是否已存在(双重保险)
                                var isExist = false;
                                for (var k = 0; k < existingData.length; k++) {
                                    if (existingData[k].HSourceInterID == sourceInfo.hmainid &&
                                        existingData[k].HSourceEntryID == sourceInfo.hsubid) {
                                        isExist = true;
                                        break;
                                    }
                                }
                                if (isExist) {
                                    this.$modal.msgError(`源单${sourceInfo.单据号}已存在,跳过`);
                                    continue;
                                }
                                // 计算相关数量
                                var qty = orginHQTY || 0;
                                var snp = 0;
                                var mouldQty = 0;
                                var HPackQTY = 0;
                                var rowVolume = 0;
                                // if
                                // console.log(dataArray[j].容器数量 / 托)
                                newRows.push({
                                    "HSourceInterID": sourceInfo.hmainid,
                                    "HSourceEntryID": sourceInfo.hsubid,
                                    "HSourceBillNo": sourceInfo.单据号,
                                    "HMaterID": dataArray[j].HMaterID,
                                    "HMaterNumber": dataArray[j].物料代码,
                                    "HMaterName": dataArray[j].物料名称,
                                    "HUnitID": dataArray[j].HUnitID,
                                    "HMouldID": 0,
                                    "HMouldNumber": '',
                                    "HMouldName": '',
                                    "HMouldLength": 0,
                                    "HMouldWidth": 0,
                                    "HMouldHeight": 0,
                                    "HMouldFoldHeight": 0,
                                    "HQty": orginHQTY,
                                    "HQty_origin": orginHQTY,
                                    "HMouldQty": mouldQty,
                                    "HVolume": rowVolume,
                                    "HSNP": 0,
                                    HScatteredVolume: 0,
                                });
                            }
                        } else {
                            // 查找该物料ID对应的包装容器信息
                            var materialInfo = null;
                            for (var i = 0; i < res.length; i++) {
                                if (res[i].HMaterID == materialId) {
                                    materialInfo = res[i];
                                    break;
                                }
                            }
                            if (materialInfo) {
                                // 为每个源单行创建一条记录
                                for (var j = 0; j < sourceInfos.length; j++) {
                                    var sourceInfo = sourceInfos[j];
                                    // 再次检查是否已存在(双重保险)
                                    var isExist = false;
                                    for (var k = 0; k < existingData.length; k++) {
                                        if (existingData[k].HSourceInterID == sourceInfo.hmainid &&
                                            existingData[k].HSourceEntryID == sourceInfo.hsubid) {
                                            isExist = true;
                                            break;
                                        }
                                    }
                                    if (isExist) {
                                        this.$modal.msgError(`源单${sourceInfo.单据号}已存在,跳过`);
                                        continue;
                                    }
                                    // 计算相关数量
                                    var qty = orginHQTY || 0;
                                    var snp = materialInfo.HSNP || 0;
                                    var mouldQty = 0;
                                    if (snp > 0) {
                                        mouldQty = Math.ceil(qty / snp);
                                    }
                                    var HPackQTY = 0;
                                    if (materialInfo.HStandardQtyForMouldInPack > 0 && mouldQty > 0) {
                                        HPackQTY = Math.ceil(mouldQty / materialInfo.HStandardQtyForMouldInPack);
                                    }
                                    var rowVolume = (HPackQTY * materialInfo.HPackV).toFixed(2);
                                    newRows.push({
                                        "HSourceInterID": sourceInfo.hmainid,
                                        "HSourceEntryID": sourceInfo.hsubid,
                                        "HSourceBillNo": sourceInfo.单据号,
                                        "HMaterID": materialInfo.HMaterID,
                                        "HMaterNumber": materialInfo.物料代码,
                                        "HMaterName": materialInfo.物料名称,
                                        "HUnitID": materialInfo.HUnitID,
                                        "HMouldID": materialInfo.HMouldID,
                                        "HPackV": dataArray[j].托单位体积,
                                        "HStandardQtyForMouldInPack": dataArray[j].容器数量 / 托,
                                        "HMouldNumber": materialInfo.HMouldNumber,
                                        "HMouldName": materialInfo.HMouldName,
                                        "HMouldLength": materialInfo.长度,
                                        "HMouldWidth": materialInfo.宽度,
                                        "HMouldHeight": materialInfo.高度,
                                        "HMouldFoldHeight": materialInfo.折叠高度,
                                        "HQty": orginHQTY,
                                        "HQty_origin": orginHQTY,
                                        "HMouldQty": mouldQty,
                                        "HVolume": rowVolume,
                                        "HSNP": materialInfo.HSNP,
                                        HScatteredVolume: 0,
                                        "HPackV": materialInfo.HPackV,
                                        "HStandardQtyForMouldInPack": materialInfo.HStandardQtyForMouldInPack,
                                        "HPackQTY": HPackQTY,
                                    });
                                    this.form.HTotalVolume = this.form.HTotalVolume * 1 + rowVolume * 1
                                }
                    // 为每个源单行创建一条记录
                    for (var j = 0; j < res.length; j++) {
                        var sourceInfo = res[j];
                        // 再次检查是否已存在(双重保险)
                        var isExist = false;
                        for (var k = 0; k < existingData.length; k++) {
                            if (existingData[k].HSourceInterID == sourceInfo.hmainid &&
                                existingData[k].HSourceEntryID == sourceInfo.hsubid) {
                                isExist = true;
                                break;
                            }
                        }
                        if (isExist) {
                            this.$modal.msgError(`源单${sourceInfo.单据号}已存在,跳过`);
                            continue;
                        }
                        // 计算相关数量
                        var qty = res[j].物料数量 || 0;
                        var snp = res[j].托标准容器数量 || 0;
                        var mouldQty = 0;
                        if (snp > 0) {
                            mouldQty = Math.ceil(qty / snp);
                        }
                        var HPackQTY = 0;
                        if (res[j].托数量 > 0 && mouldQty > 0) {
                            HPackQTY = Math.ceil(mouldQty / res[j].托数量);
                        }
                        var rowVolume = (HPackQTY * res[j].托体积).toFixed(2);
                        newRows.push({
                            "HSourceInterID": res[j].hmainid,
                            "HSourceEntryID": res[j].hsubid,
                            "HSourceBillNo": res[j].单据号,
                            "HCusID": res[j].HCusID,
                            "HCusName": res[j].客户,
                            "HMaterID": res[j].HMaterID,
                            "HMaterNumber": res[j].物料代码,
                            "HMaterName": res[j].物料名称,
                            "HMouldNumber": res[j].容器代码,
                            "HMouldName": res[j].容器名称,
                            "HUnitID": res[j].HUnitID,
                            "HMouldID": res[j].HMouldID,
                            "HPackV": res[j].托体积,
                            "HStandardQtyForMouldInPack": res[j].容器数量,
                            "HMouldLength": res[j].长度,
                            "HMouldWidth": res[j].宽度,
                            "HMouldHeight": res[j].高度,
                            "HMouldFoldHeight": res[j].折叠高度,
                            "HModel": res[j].物料规格,
                            "HQty": res[j].物料数量,
                            "HQty_origin": orginHQTY,
                            "HMouldQty": mouldQty,
                            "HVolume": rowVolume,
                            "HSNP": res[j].托标准容器数量,
                            "HScatteredVolume": 0,
                            "HPackQTY": HPackQTY,
                        });
                        this.form.HTotalVolume = this.form.HTotalVolume * 1 + rowVolume * 1
                    }
                    if (newRows.length === 0) {
                        this.$modal.msgError("没有可添加的新记录,可能是源单数据已存在或物料信息不完整!");
                        this.sourceDataLoading = false;
                        return;
                    }
                    // 合并现有数据和新数据
                    var allData = existingData.concat(newRows);
                    // 渲染表格
                    this.editData = allData;
                    this.$modal.msgSuccess(`成功添加${newRows.length}条记录`);
                } else {
@@ -1487,11 +1486,13 @@
                return null;
            }
        },
        //#endregion
        //#region 工具栏按钮操作
        //#region 编辑提交保存
        submitForm() {
            this.$refs["form"].validate(valid => {
                if (valid) {
                    this.form.HCarryStatus = 0;
                    var loadingRate = this.form.HLoadingRate;
                    if (loadingRate && typeof loadingRate === 'string') {
                        this.form.HLoadingRate = parseFloat(loadingRate.replace('%', '')) / 100;
@@ -1500,6 +1501,7 @@
                    var sSubStr = JSON.stringify(this.editData);
                    // var sMainSub = sMainStr + ';' + sSubStr + ';' + sessionStorage["HUserName"] + ';' + this.OperationType;
                    var sMainSub = sMainStr + ';' + sSubStr + ';' + sessionStorage["HUserName"]
                    console.log(sMainSub)
                    axios({
                        method: 'post',
                        url: this.baseURL + "/WLYayBillController/SaveBill",
@@ -1994,6 +1996,21 @@
        handleFileRemove(file, fileList) {
            this.uploadFiles = fileList;
        },
        // 文件预览
        handleFilePreview(file) {
            if (file.url) {
                window.open(file.url, '_blank');
            } else if (file.raw) {
                const url = URL.createObjectURL(file.raw);
                window.open(url, '_blank');
            } else {
                this.$message.warning('无法预览该文件');
            }
        },
        // 文件超出限制时的处理
        handleExceed(files, fileList) {
            this.$message.warning(`当前限制选择 10 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
        },
        flieUpload(row) {
            // 创建FormData对象
            const formData = new FormData();
@@ -2079,6 +2096,44 @@
            });
        },
        // 加载运输相关数据
        loadTransportData() {
            axios.get(this.$baseUrl + '/WLYayBillController/initDataForSelectContractTransportBill', {
                params: {
                    "hmainid": this.form.HContractTransportInterID,
                },
            }).then(res => {
                let response = res.data
                if (response.code == 1) {
                    // 运输线路去重
                    this.transportList = [...new Set(response.data.map(item => item.运输路线名称))]
                    // this.$nextTick(()=>{
                    // })
                    this.getTransCost('line')
                    this.getTransCost('type')
                    this.getTransCost('car')
                    // // 运输类型去重
                    // this.transTypeList = [...new Set(response.data.map(item => item.运输类型))]
                    // // 车型去重
                    // const carTypeMap = new Map()
                    // response.data.forEach(item => {
                    //     const key = item.运输方式名称
                    //     if (!carTypeMap.has(key)) {
                    //         carTypeMap.set(key, { value: item.运输方式名称, id: item.运输方式 })
                    //     }
                    // })
                    // this.HCarTypeNameList = Array.from(carTypeMap.values())
                } else {
                    this.$modal.msgError("错误:" + response.data.code + response.data.Message);
                }
            }).catch(error => {
                this.$modal.msgError("接口请求失败!");
            });
        },
        // 获取已上传文件列表
        getFileList() {
        },
@@ -2088,7 +2143,148 @@
            this.uploadFiles.splice(index, 1)
        },
        //#endregion
        //#endregion
        //#endregion
        checkTransportList() {
            if (this.transportList.length === 0) {
                this.$message.warning('请先选择承运合同')
            }
        },
        checkTransTypeList() {
            if (this.transTypeList.length === 0) {
                this.$message.warning('请先选择运输线路')
            }
        },
        checkHCarTypeNameList() {
            if (this.HCarTypeNameList.length === 0) {
                this.$message.warning('请先选择运输方式')
            }
        },
        transLineNameChange() {
            this.form.HTransType = ''
            this.form.HCarTypeName = ''
            this.form.HCarTypeID = 0
            this.form.HContractTransportEntryID = 0
            this.form.HBeginAddrName = ''
            this.form.HBeginAddr = 0
            this.form.HEndAddrName = ''
            this.form.HEndAddr = 0
            this.form.HCarTypeMaxVolume = 0
            this.form.HDistance = 0
            this.form.HTransportTimes = ''
            this.form.HTransportTyep = ''
            this.form.HMoney = 0
            this.transTypeList = []
            this.HCarTypeNameList = []
            this.getTransCost('line')
        },
        transTypeChange() {
            this.form.HCarTypeName = ''
            this.form.HCarTypeID = 0
            this.form.HContractTransportEntryID = 0
            this.form.HBeginAddrName = ''
            this.form.HBeginAddr = 0
            this.form.HEndAddrName = ''
            this.form.HEndAddr = 0
            this.form.HCarTypeMaxVolume = 0
            this.form.HDistance = 0
            this.form.HTransportTimes = ''
            this.form.HTransportTyep = ''
            this.form.HMoney = 0
            this.HCarTypeNameList = []
            this.getTransCost('type')
        },
        transHCarChange(val) {
            this.form.HContractTransportEntryID = 0
            this.form.HBeginAddrName = ''
            this.form.HBeginAddr = 0
            this.form.HEndAddrName = ''
            this.form.HEndAddr = 0
            this.form.HCarTypeMaxVolume = 0
            this.form.HDistance = 0
            this.form.HTransportTimes = ''
            this.form.HTransportTyep = ''
            this.form.HMoney = 0
            let item = this.HCarTypeNameList.find(item => item.id === val);
            this.form.HCarTypeName = item.value
            this.form.HCarTypeID = val
            this.getTransCost('car')
        },
        checkAndCallGetTransCost() {
            const { HContractTransportBillNo, HCarTypeName, HTransType, HTransportLineName, HCarrierID } = this.form
            if (!HContractTransportBillNo) {
                this.$message.warning('请先选择承运合同')
                return
            }
            if (!HTransportLineName) {
                this.$message.warning('请先选择运输线路')
                return
            }
            if (!HTransType) {
                this.$message.warning('请先选择运输方式')
                return
            }
            if (!HCarTypeName) {
                this.$message.warning('请先选择车型')
                return
            }
            if (!HCarrierID) {
                this.$message.warning('供应商不能为空')
                return
            }
            this.getTransCost()
        },
        getTransCost(val) {
            axios.get(this.$baseUrl + '/WLYayBillController/getSelectContractTransportBillEntryData', {
                params: {
                    Cg_ContractTransportBillInterID: this.form.HContractTransportInterID,
                    HSupID: this.form.HCarrierID,
                    HTransportLineName: this.form.HTransportLineName,
                    HCarTypeID: this.form.HCarTypeID,
                    HTransportTyep: this.form.HTransType,
                },
            }).then(res => {
                let response = res.data
                if (response.code == 1) {
                    if (response.data.length == 0) {
                        this.$modal.msgError("未获取到指定承运合同数据,请检查【" + this.form.HCarrierName + '-' + this.form.HTransportLineName + '-' + this.form.HCarTypeName + '-' + this.form.HTransType + "】对应的承运合同是否维护!!!");
                        this.form.HMoney = 0
                        return
                    }
                    if (val == 'line') {
                        this.transTypeList = [...new Set(response.data.map(item => item.运输类型))]
                    } else if (val == 'type') {
                        const carTypeMap = new Map()
                        response.data.forEach(item => {
                            const key = item.运输方式名称
                            if (!carTypeMap.has(key)) {
                                carTypeMap.set(key, { value: item.运输方式名称, id: item.运输方式 })
                            }
                        })
                        this.HCarTypeNameList = Array.from(carTypeMap.values())
                    } else if (val == 'car') {
                        this.form.HContractTransportEntryID = response.data[0].HEntryID
                        this.form.HBeginAddrName = response.data[0].始发地名称
                        this.form.HBeginAddr = response.data[0].始发地
                        this.form.HEndAddrName = response.data[0].目的地名称
                        this.form.HEndAddr = response.data[0].目的地
                        this.form.HCarTypeMaxVolume = response.data[0].车型最大容积
                        this.form.HDistance = response.data[0].距离
                        this.form.HTransportTimes = response.data[0].运输时效
                        this.form.HTransportTyep = response.data[0].运输类型
                        this.form.HMoney = response.data[0].运输费用
                        if (this.form.HMoney == 0) {
                            this.$modal.msgError("当前运费为0");
                        }
                    }
                } else {
                    this.$modal.msgError("错误:" + response.code + response.Message);
                }
            }).catch(error => {
                this.$modal.msgError("接口请求失败!");
            });
        },
    }
};
</script>