el-table 假数据合并

javascript 复制代码
<template>
    <div class="bg" v-loading="loading">
        <div class="box-container">
            <!-- 订单信息 -->
            <div>
                <div class="orderStepTit">{{ t('order_list.订单信息') + "-" +
                    showCustomValueByCode(selectRequestType, currentRequestType) }}</div>
                <div class="order_table">
                    <table class="order_write">
                        <tr>
                            <th>
                                <div style=" width: 200px;">{{ t('order_list.订单号') }}</div>
                            </th>
                            <td>{{ currentStockId }}</td>
                            <th>
                                <div style=" width: 200px;">{{ t('mem_label.会员名称') }}</div>
                            </th>
                            <td>{{ orderInfoData.mem_nm }}</td>
                            <th>
                                <div style=" width: 200px;">{{ t('field.POST_NO') }}</div>
                            </th>
                            <td>{{ orderInfoData.post_no }}</td>
                        </tr>
                    </table>
                </div>
            </div>

            <!-- 检查信息 -->
            <div class="mb-15px">
                <div class="orderStepTit">{{ t('stockWareHouse.检查信息') }}</div>

                <el-table :data="flattenAndMergeData" border :span-method="arraySpanMethod" style="width: 100%"
                    :cell-style="{ textAlign: 'center' }" :header-cell-style="{
                        background: '#5f697d',
                        color: '#fff',
                        height: '10px',
                        textAlign: 'center'
                    }" @selection-change="handleSkuSelection">
                    <el-table-column type="selection" width="40px" />
                    <!--  SKU ID(按 SKU 合并) -->
                    <el-table-column label="SKU ID" width="120">
                        <template #default="{ row }">
                            <div v-if="row.type === 'product'" class="flex-column-center">
                                <div>{{ row.skuId }}</div>
                                <el-button type="primary" plain @click="getSkuLabel(row.sku_id)"
                                    style="width: 55px; margin-top: 4px;">
                                    {{ t('order_list.SKU标签') }}
                                </el-button>
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 商品编号 -->
                    <el-table-column :label="t('goodsType.商品编号')" width="120">
                        <template #default="{ row }">
                            <!-- 正常行 -->
                            <div v-if="row.type === 'product'" style="height:140px;">
                                <el-checkbox v-model="row.checked" v-if="row.type === 'product'">
                                    {{ row.stock_sku_product_id }}
                                </el-checkbox>
                            </div>
                            <!-- 渲染行 -->
                            <div v-else-if="row.type === 'skuFooter'" class="flex ml-30px">
                                <div class="footer-item mr-300px">
                                    <span>{{ t('order_list.能否原包装出库') }}:</span>
                                    <el-radio-group v-model="row.original_packaging">
                                        <el-radio :label="1">{{ t('common.是') }}</el-radio>
                                        <el-radio :label="0">{{ t('common.否') }}</el-radio>
                                    </el-radio-group>
                                </div>

                                <div class="footer-item">
                                    <span>{{ t('order_list.商品备注') }}:</span>
                                    <el-input v-model="row.memo" style="width:240px" />
                                </div>
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 商品图片 + 构成 -->
                    <el-table-column width="100">
                        <template #header>
                            <div class="label-flex">
                                <span>{{ t('product.商品图片') }}</span>
                                <span>{{ t('product.构成') }}</span>
                            </div>
                        </template>
                        <template #default="{ row }">
                            <div v-if="row.type === 'product'" class="flex-column-center">
                                <el-image :src="row.imageUrl" style="width:40px; height: 50px" fit="cover" />
                                <div class="text-center">
                                    {{ t('product.构成') }}:{{ row.product_number }}
                                </div>
                            </div>
                        </template>
                    </el-table-column>

                    <!--  COUPANG -->
                    <el-table-column width="230">
                        <template #header>
                            <div class="label-flex">
                                <span>{{ t('stockWareHouse.COUPANG信息') }}</span>
                                <span>{{ t('stockWareHouse.条形码') }}</span>
                            </div>
                        </template>

                        <template #default="{ row }">
                            <div v-if="row.type === 'product'">
                                <div>{{ row.market_barcode }}</div>
                                <div>{{ row.market_pro_nm }}</div>
                                <div>{{ row.market_option_nm }}</div>
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 数量 -->
                    <el-table-column label="申请数量" prop="pro_qty" width="100" />

                    <!--  颜色/尺码 -->
                    <el-table-column>
                        <template #header>
                            <div class="label-flex">
                                <span>{{ t('order_list.颜色') }}</span>
                                <span>{{ t('order_list.尺码') }}</span>
                            </div>
                        </template>
                        <template #default="{ row }">
                            <div v-if="row.type === 'product'">
                                <div>{{ row.color }}</div>
                                <div>{{ row.size }}</div>
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 商品状态 -->
                    <el-table-column label="商品状态" width="100">
                        <template #default="{ row }">
                            <span v-if="row.type === 'product'" class="status-link">
                                {{ row.pro_state_name }}
                            </span>
                        </template>
                    </el-table-column>

                    <!-- 商品处理-->
                    <el-table-column :label="t('stockWareHouse.商品处理')" width="350">
                        <template #default="{ row }">
                            <div style="height:30vh;min-height: 250px;">
                                <el-radio-group v-model="row.inspection.isNormal">
                                    <el-radio :label="true">{{ t('stockWareHouse.商品正常') }}</el-radio>
                                    <el-radio :label="false" class="fc_red">
                                        {{ t('stockWareHouse.商品有误') }}
                                    </el-radio>
                                </el-radio-group>
                                <el-divider class="m-0 mb-8px" />
                                <div v-if="!row.inspection.isNormal" class="issue-block">
                                    <div class="issue-row">
                                        <el-checkbox v-model="row.inspection.issues.actualArrived.hasIssue">
                                            {{ t('stockWareHouse.实际到货数量') }}
                                        </el-checkbox>
                                        <el-input-number v-model="row.inspection.issues.actualArrived.qty"
                                            :max="row.pro_qty" size="small" />
                                    </div>

                                    <div class="issue-row">
                                        <el-checkbox v-model="row.inspection.issues.damaged.hasIssue">
                                            {{ t('stockWareHouse.商品破损') }}
                                        </el-checkbox>
                                        <el-input-number v-model="row.inspection.issues.damaged.qty" :max="row.pro_qty"
                                            size="small" />
                                    </div>

                                    <div class="issue-row">
                                        <el-checkbox v-model="row.inspection.issues.wrongItem.hasIssue">
                                            {{ t('stockWareHouse.商品有误') }}
                                        </el-checkbox>
                                        <el-input-number v-model="row.inspection.issues.wrongItem.qty"
                                            :max="row.pro_qty" size="small" />
                                    </div>
                                </div>
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 预计入库库存数量 -->
                    <el-table-column width="100">
                        <template #header>
                            <div class="label-flex">
                                <span>{{ t('stockWareHouse.预计入库') }}</span>
                                <span>{{ t('stockWareHouse.库存数量') }}</span>
                            </div>
                        </template>

                        <template #default="{ row }">
                            <div v-if="row.type === 'product' && row.isFirstRow" class="cell-center">
                                {{ row.sku_number_available }}
                            </div>
                        </template>
                    </el-table-column>

                    <!-- 尺寸(宽/长/高)列 -->
                    <el-table-column :label="t('stockWareHouse.体积') + '(cm)'" width="200">
                        <template #default="{ row }">
                            <div v-if="row.isFirstRow" class="flex-center">
                                <!-- 查看模式 -->
                                <template v-if="row.isEditing">
                                    <div>
                                        <div class="flex mb-5px">
                                            <div class="flex-column mr-2">
                                                <div>{{ t('stockWareHouse.宽度') }}</div>
                                                <div>{{ row.width }}</div>
                                            </div>
                                            <div class="flex-column  mr-2">
                                                <div>{{ t('stockWareHouse.长度') }}</div>
                                                <div>{{ row.length }}</div>
                                            </div>
                                            <div class="flex-column  mr-2">
                                                <div>{{ t('stockWareHouse.高度') }}</div>
                                                <div>{{ row.height }}</div>
                                            </div>
                                        </div>
                                        <el-button size="small" @click="row.isEditing = false">{{ t('btn.upt')
                                            }}</el-button>
                                    </div>
                                </template>

                                <!-- 编辑 -->
                                <template v-else>
                                    <div class="volume-box">
                                        <div class="flex mb-5px">
                                            <div class="flex-column">
                                                <div>{{ t('stockWareHouse.宽度') }}</div>
                                                <el-input v-model="row.width" :min="0" class="w-50px"
                                                    @input="(val) => row.width = validateInteger(val)" />
                                            </div>
                                            <div class="flex-column">
                                                <div>{{ t('stockWareHouse.长度') }}</div>
                                                <el-input v-model="row.length" :min="0" class="w-50px"
                                                    @input="(val) => row.length = validateInteger(val)" />
                                            </div>
                                            <div class="flex-column">
                                                <div>{{ t('stockWareHouse.高度') }}</div>
                                                <el-input v-model="row.height" :min="0" class="w-50px"
                                                    @input="(val) => row.height = validateInteger(val)" />
                                            </div>
                                        </div>
                                        <el-button class="w-50px" @click="updateCBM(row)" :loading="row?.saveloading">{{
                                            t('btn.save') }}</el-button>
                                    </div>
                                </template>

                            </div>

                        </template>
                    </el-table-column>

                    <!-- 11 CBM -->
                    <el-table-column label="cbm" width="120">
                        <template #default="{ row }">
                            <div v-if="row.type === 'product' && row.isFirstRow" class="cell-center">
                                {{ formatAmount(row.cbm, 6) }} cbm
                            </div>
                        </template>
                    </el-table-column>

                </el-table>

            </div>


            <!-- 附加服务 -->
            <div>
                <div class="orderStepTit">{{ t('addition_money.附加服务') }}</div>
                <div v-for="(item, index) in orderSvcData" :key="index">
                    <div class="orderStepTit Red">{{ item.SVC_GROUP_NM }}</div>
                    <div class="order_table" style="margin-bottom: 0;">
                        <table class="order_write">
                            <colgroup>
                                <col width="15%" />
                                <col width="30%" />
                                <col width="15%" />
                                <col width="30%" />
                            </colgroup>
                            <template v-for="(subItem, subIndex) in item.items" :key="subIndex">
                                <tr v-if="subIndex % 2 === 0">
                                    <th>
                                        <div class="row-flex-between">
                                            <el-checkbox :checked="isEditable(subItem)"
                                                @change="(value) => handleChecked(subItem, value)">
                                                <div class="ml-10px">{{ subItem.CD_NM }}</div>
                                            </el-checkbox>
                                        </div>
                                    </th>
                                    <td>
                                        <div class="row-flex-left">
                                            <div>₩</div>
                                            <input v-model="subItem.MNY_NEW" :class="{
                                                'input-money-nomal': true,
                                                'input-money-red': isEditable(subItem)
                                            }" :disabled="!isEditable(subItem)"
                                                @input="(e) => handleInputChange(subItem, e.target.value)" />
                                            <div>({{ t('order_list.基本费用') }}:₩{{ subItem.CHARGE_DET_MNY }})</div>
                                        </div>
                                    </td>

                                    <template v-if="subIndex + 1 < item.items.length">
                                        <th>
                                            <div class="row-flex-between">
                                                <el-checkbox :checked="isEditable(item.items[subIndex + 1])"
                                                    @change="(value) => handleChecked(item.items[subIndex + 1], value)">
                                                    <div class="ml-10px">{{ item.items[subIndex + 1].CD_NM }}</div>
                                                </el-checkbox>
                                            </div>
                                        </th>
                                        <td>
                                            <div class="row-flex-left">
                                                <div>₩</div>
                                                <input v-model="item.items[subIndex + 1].MNY_NEW" :class="{
                                                    'input-money-nomal': true,
                                                    'input-money-red': isEditable(item.items[subIndex + 1])
                                                }" :disabled="!isEditable(item.items[subIndex + 1])"
                                                    @input="(e) => handleInputChange(item.items[subIndex + 1], e.target.value)" />
                                                <div>({{ t('order_list.基本费用') }}:₩{{ item.items[subIndex +
                                                    1].CHARGE_DET_MNY }})</div>
                                            </div>
                                        </td>
                                    </template>
                                    <template v-else>
                                        <th></th>
                                        <td></td>
                                    </template>
                                </tr>
                            </template>
                        </table>
                    </div>
                </div>
            </div>

            <!-- 检查费用 -->
            <div>
                <div class="orderStepTit" style="margin-top: 10px; border-top: none;">{{ t('stockWareHouse.检查费用') }}
                </div>
                <div class="order_table">
                    <table class="order_write">
                        <colgroup>
                            <col width="20%" />
                            <col width="30%" />
                            <col width="20%" />
                            <col width="30%" />
                        </colgroup>
                        <tr>
                            <th>{{ t('stockWareHouse.增值税') }}</th>
                            <td>
                                <!-- todo review 固定10%? -->
                                <div>10%</div>
                            </td>
                            <th>{{ t('order_list.汇率') }}</th>
                            <td>
                                <div class="row-flex-left">
                                    <div class="mr-1">¥1.00 &nbsp;= &nbsp;₩ </div>
                                    <input v-model="exchangeRate" class="input-money-red" style="width:40%"
                                        @input="e => exchangeRate = validateNoZeroButFloat(e.target.value)" />
                                </div>
                            </td>
                        </tr>
                        <tr>
                            <th>{{ t('order_list.总费用') }}</th>
                            <td>
                                <div class="row-flex-left">
                                    <div class="mr-1">₩</div><input :value="totalFee" class="input-money-nomal"
                                        style="width:40%" disabled />
                                </div>
                            </td>
                            <td colspan="2"></td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>

        <div class="btn-box">
            <el-select style="width: 13vw;margin-right: 1vw;" v-model="SMSValue">
                <el-option :label="t('field.sms_no')" value="N"></el-option>
                <el-option :label="t('field.sms_yes')" value="Y"></el-option>
            </el-select>
            <el-button type="primary" @click="handleSave" :disabled="saveLoading" size="small">
                {{ t('btn.save') }}
            </el-button>
            <el-button type="primary" plain @click="handleClose">
                {{ t('btn.close') }}
            </el-button>
        </div>
    </div>
</template>

<script setup>
import { ref, onMounted, watch, computed } from 'vue'
import { openPopup, closePopup } from "~/composables/popupManager";
import { toast, showCustomValueByCode } from '~/composables/util'
import { useMessage } from "~/composables/useMessage"
const { delConfirm, confirm } = useMessage()
import { formatAmount, validateNoZeroButFloat, smartFormat, toNumber } from "~/composables/validate"
import { useRoute } from 'vue-router';
const router = useRoute()
import { useSelectOptions } from '~/composables/options';
const { selectRequestType } = useSelectOptions();
import { stockBtnService } from "~/api/upgrade/stockOrder";
import { validateInteger } from "~/composables/validate"
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
import { useStore } from 'vuex'
const store = useStore();
const showDictName = (field, value) => {
    return computed(() => store.getters.getDictName(field, value)).value;
};

const orderInfoData = ref({
    orderId: "",
    mem_nm: "",
    mem_code: null,
    post_no: "",
    items: [
        {
            skuId: "",
            original_packaging: 1,
            memo: "",
            sku_number_available: 0,
            width: 0,
            length: 0,
            height: 0,
            cbm: "",
            products: []
        }]
});


// 扁平化数据(按 skuId 展开 products)
const flattenAndMergeData = computed(() => {
    return orderInfoData.value.items.flatMap(item => {

        const productRows = item.products.map((prod, index) => ({
            ...prod,
            skuId: item.skuId,

            width: item.width,
            length: item.length,
            height: item.height,
            cbm: item.cbm,

            proRowSpan: item.products.length,
            isFirstRow: index === 0,
            isLastRow: index === item.products.length - 1,
            type: "product",

            original_packaging: item.original_packaging,
            memo: item.memo,
        }));

        // 每个SKU下追加原包装+备注
        const footerRow = {
            skuId: item.skuId,
            type: "skuFooter",
            original_packaging: item.original_packaging || 1,
            memo: item.memo,
        };


        return [...productRows, footerRow];
    });
});


const arraySpanMethod = ({ row, columnIndex }) => {
    // 能否原包装出库 / 商品备注
    if (row.type === "skuFooter") {
        // 列合并
        if (columnIndex === 2) {
            return [1, 13];
        }
        if (columnIndex >= 3 && columnIndex <= 11) {
            return [0, 0];
        }
    }
    const mergeCols = [0, 1];
    if (mergeCols.includes(columnIndex)) {
        return row.isFirstRow ? [row.proRowSpan + 1, 1] : [0, 0];
    }
    const mergeCols1 = [8, 9, 10, 11];
    if (mergeCols1.includes(columnIndex)) {
        return row.isFirstRow ? [row.proRowSpan, 1] : [0, 0];
    }
    // 其它列正常显示
    return [1, 1];
};

const exchangeRate = ref({});
const currenttotalMny = ref(0);
const dlvrWayFeeData = ref([]);
const orderSvcData = ref([]);
const SMSValue = ref('N');
const currentStockId = ref();
const currentRequestType = ref(null);
const loading = ref(false);
const saveLoading = ref(false);
const updateCBM = async (row) => {
    try {
        row.saveloading = true
        let data = {
            length: row.length,
            width: row.width,
            height: row.height,
            cbm: row.cbm
        }
        await stockBtnService.saveVolInfo(currentStockId.value, row.skuId, data).then(res => {
            if (res.code === 200) {
                toast(t('common.updateSuccess'))
            } else {
                toast(res.msg, 'error');
            }
        });
    } catch (error) {
        // toast(error.msg, 'error');
    } finally {
        row.saveloading = false
        row.isEditing = true
        getList(currentStockId.value);
    }
}

const chunkedCharges = computed(() => {
    const list = additionalFeeData.value
    const result = []
    for (let i = 0; i < list.length; i += 2) {
        const group = [list[i]]
        if (list[i + 1]) group.push(list[i + 1])
        result.push(group)
    }
    return result
})

// 计算总费用
const additionMoney = computed(() => {
    if (!orderSvcData.value || !Array.isArray(orderSvcData.value)) {
        return 0;
    }

    return orderSvcData.value
        .flatMap(g => Array.isArray(g.items) ? g.items : [])
        .filter(i => Number(i.selected) == 1)
        .reduce((sum, i) => {
            const amount = parseFloat(i.MNY_NEW);
            return sum + (isNaN(amount) ? 0 : amount);
        }, 0);
});


const getIntervalWt = () => {
    if (dlvrWayFeeData.value.length < 2) return dlvrWayFeeData.value.INTERVAL_WT; // 默认0.5
    const diff = dlvrWayFeeData.value[1].weight - dlvrWayFeeData.value[0].weight;
    return diff > 0 ? diff : dlvrWayFeeData.value.INTERVAL_WT;
};



const feeValue = ref(null);
const totalFee = computed(() => {
    return (additionMoney.value || 0) + (feeValue.value || 0);
});



const isEditable = (subItem) => subItem.selected == 1;

const handleInputChange = (subItem, value) => {
    subItem.MNY_NEW = validateNoZeroButFloat(value, 2);
};


const handleSkuSelection = (selectedRows) => {
    const selectedSkuIds = new Set(selectedRows.map(r => r.skuId));
    // 遍历所有行,如果这个 SKU 被选中→该SKU所有商品全选
    // todo  review 勾选
    flattenAndMergeData.value.forEach(row => {
        if (selectedSkuIds.has(row.skuId)) {
            row.checked = true;
        }
    });
};


// 打印商品SKU标签
const getSkuLabel = (skuId) => {
    openPopup(`/stockSkuLabel?skuId=${skuId}`, 'goodsLog', 400, 600);
};


const handleSave = async () => {
    saveLoading.value = true;

    try {
        const skusMap = {};

        flattenAndMergeData.value.forEach(row => {
            if (row.checked !== true) return;

            if (!skusMap[row.skuId]) {
                skusMap[row.skuId] = {
                    sku_id: row.skuId,
                    original_packaging: row.original_packaging ? 1 : 0,
                    //comment: row.comment || "",
                    comment: row.memo || "",
                    products: []
                };
            }

            // 如果商品正常则不传 issues
            let issues = undefined;
            if (!row.inspection.isNormal) {
                issues = {
                    qty_mismatch: row.inspection.issues.actualArrived.hasIssue
                        ? row.inspection.issues.actualArrived.qty
                        : 0,
                    damaged: row.inspection.issues.damaged.hasIssue
                        ? row.inspection.issues.damaged.qty
                        : 0,
                    description_error: row.inspection.issues.wrongItem.hasIssue
                        ? row.inspection.issues.wrongItem.qty
                        : 0
                };
            }

            skusMap[row.skuId].products.push({
                sku_product_id: row.stock_sku_product_id,
                issues
            });
        });

        // 转换成数组结构
        const skuList = flattenAndMergeData.value
            .filter(row => row.checked === true) // 只取勾选的商品
            .map(row => {

                let issues;
                if (!row.inspection.isNormal) {
                    issues = {
                        qty_mismatch: row.inspection.issues.actualArrived.hasIssue
                            ? row.inspection.issues.actualArrived.qty
                            : 0,
                        damaged: row.inspection.issues.damaged.hasIssue
                            ? row.inspection.issues.damaged.qty
                            : 0,
                        description_error: row.inspection.issues.wrongItem.hasIssue
                            ? row.inspection.issues.wrongItem.qty
                            : 0
                    };
                }

                return {
                    sku_id: row.skuId,
                    sku_product_id: row.stock_sku_product_id,
                    issues, // 正常情况下不传
                    original_packaging: row.original_packaging,
                    comment: row.comment || ""
                };
            });


        if (skuList.length === 0) {
            toast(t('stockWareHouse.请选择商品后再保存'), 'warning');
            return;
        }

        // 组装附加服务费用
        const CHARGE_DETS = orderSvcData.value.flatMap(group =>
            group.items
                .filter(i => Number(i.selected) == 1)
                .map(i => ({
                    CHARGE_DET_CD: i.CHARGE_DET_CD,
                    FRG_MNY: Number(i.MNY_NEW) || 0
                }))
        );
        if (CHARGE_DETS.length === 0) {
            toast(t('stockWareHouse.请选择附加服务后再保存'), 'warning');
            return;
        }


        const uptData = {
            charge_cd: "9",
            exg_rt: exchangeRate.value,
            tax: 10,
            skus: skuList,
            CHARGE_DETS,
            total_mny: Math.round((feeValue.value + additionMoney.value) / 100),
            send_sms: SMSValue.value
        };

        const res = await stockBtnService.saveInboundCheck(currentStockId.value, uptData);

        if (res.code === 200) {
            toast(t('common.updateSuccess'));
            setTimeout(() => {
                handleClose();
            }, 5000);
        } else {
            toast(res.msg, 'error');
        }

    } finally {
        saveLoading.value = false;
    }
};



const handleClose = () => closePopup("WarehouseInspection");

const handleChecked = (subItem, checked) => {
    subItem.selected = checked ? 1 : 0;
};

onMounted(() => {
    if (router.query.orderNo && router.query.requestType) {
        currentStockId.value = router.query.orderNo;
        currentRequestType.value = router.query.requestType;
        getList(currentStockId.value);
    }
});



const getList = async (val) => {
    loading.value = true;
    try {
        const res = await stockBtnService.getInboundCheckList(val);
        if (res.code === 200) {
            const resData = res.data;
            orderInfoData.value = resData.stock_info;
            exchangeRate.value = resData.exg_rt;
            currenttotalMny.value = resData.total_mny;

            // 附加服务
            orderSvcData.value = resData.svc_info.map(group => ({
                ...group,
                items: (group.items || []).map(item => ({
                    ...item,
                    MNY_NEW: item.CHARGE_DET_MNY
                }))
            }));
        } else {
            toast(t('common.error'), 'error');
        }
    } finally {
        loading.value = false;
    }
};

</script>

<style scoped>
.bg {
    width: 100%
}

.topTitle {
    display: flex;
    justify-content: space-between;
    height: 40px;
    width: 100%;
    padding: 10px;

    .title {
        font-size: 20px;
    }

    .right-title {
        font-size: 14px;
        color: #8e8e8e;
    }
}



.row-flex {
    display: flex;
    /* width: 100%; */
}

.bold {
    font-weight: bold;
}


.ProBox {
    border-top: 1px solid #dde;
    /* margin: 10px 0; */
}


.box-container {
    background: #fff;
    box-shadow: 0 3px 15px #00000014;
    padding: 20px;
    border-radius: 5px;
}

.orderStepTit {
    position: relative;
    padding-left: 7px;
    padding-top: 4px;
    height: 30px;
    font-size: 15px;
    background: #ecfaf6;
    border: 1px solid #30be92;
    overflow: hidden;
}

.Red {
    height: 40px;
    font-size: 13px;
    padding-left: 50%;
    padding-top: 10px;
    color: #ff0000;
    background: #fffaf1;
    border: 1px solid #e5e5e5;
    border-top: none;
}


.btn-box {
    display: flex;
    justify-content: center;
    margin: 15px auto;
}

.flex-center {
    display: flex;
    justify-content: center;
    text-align: center;
}

.flex-column {
    display: flex;
    flex-direction: column;
    justify-content: center;
    text-align: center;
}

.row-flex-left {
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.input-money-nomal {
    height: 30px;
    width: 50%;
    margin: 0 2px;
    color: #535353;
    border: 1px solid rgb(196, 195, 195);
    margin-right: 3px;
}

.input-money-red {
    height: 30px;
    color: #535353;
    background-color: #fff2f2;
    border: 1px solid red;
    margin-right: 3px;
}

:deep(.input-money-red:focus) {
    /* 未生效 */
    color: #535353;
    background-color: #fff2f2;
    border: none;
}

.row-flex-between {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-left: -50px;
    /* margin: 0 10%; */
}

.box-style {
    width: 8%;
    padding-top: 2px;
    height: 40px;
    font-size: 12px;
    font-weight: 200;
}

.img-box {
    width: 80px !important;
    display: flex;
    justify-content: center;
}


.issue-row {
    width: 80%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 4px;
}

.issue-block {
    margin-top: 4px;
    display: flex;
    flex-direction: column;
    align-items: center;
}


.sku-extra-row {
    padding: 10px;
    border-top: 1px solid #ddd;
}

.extra-container {
    display: flex;
    justify-content: center;
    flex-direction: column;
    gap: 10px;
}

.extra-row {
    display: flex;
    align-items: center;
    gap: 10px;
}


.sku-footer-row {
    padding: 10px 20px;
    background: #fff;
    border-top: 1px solid #ddd;
    display: flex;
    flex-direction: column;
    gap: 10px;
    text-align: left;
}

.footer-item {
    display: flex;
    align-items: center;
    gap: 10px;
}


.sku-footer-tr>td {
    background: #fffaf1;
    border-top: 1px solid #ddd;
    padding: 10px 20px;
}

.footer-item {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 6px;
}
</style>

效果:

假数据:

javascript 复制代码
{
    "code": 200,
    "message_key": "response.query_success",
    "msg": "조회 성공",
    "data": {
        "stock_info": {
            "orderId": "25C00101Q",
            "mem_nm": "test_Name_ko",
            "mem_code": 2527,
            "post_no": "CN2527",
            "items": [
                {
                    "skuId": "25C00001k",
                    "original_packaging": false,
                    "memo": "",
                    "sku_number_available": 1,
                    "width": 0,
                    "length": 0,
                    "height": 0,
                    "cbm": "0.00000000",
                    "products": [
                        {
                            "stock_sku_product_id": 203,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764556896_7442.jpg",
                            "product_number": "2",
                            "market_barcode": "2324343ff",
                            "market_pro_nm": "商品名",
                            "market_option_nm": "选项名",
                            "market_option_id": "222",
                            "pro_qty": 2,
                            "pro_cost": 50,
                            "color": "0:颜色:绿色",
                            "size": "0:尺码:S",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": false,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        },
                        {
                            "stock_sku_product_id": 204,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764556887_3399.jpg",
                            "product_number": "1",
                            "market_barcode": "2324343ff",
                            "market_pro_nm": "商品名",
                            "market_option_nm": "选项名",
                            "market_option_id": "222",
                            "pro_qty": 1,
                            "pro_cost": 100,
                            "color": "0:颜色:【泰迪毛南瓜】布套+换洗袋",
                            "size": "One Size",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": true,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        }
                    ]
                },
                {
                    "skuId": "25C00002k",
                    "original_packaging": false,
                    "memo": "",
                    "sku_number_available": 1,
                    "width": 0,
                    "length": 0,
                    "height": 0,
                    "cbm": "0.00000000",
                    "products": [
                        {
                            "stock_sku_product_id": 201,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764578132_9961.jpg",
                            "product_number": "2",
                            "market_barcode": "33",
                            "market_pro_nm": "112",
                            "market_option_nm": "22",
                            "market_option_id": "44",
                            "pro_qty": 2,
                            "pro_cost": 50,
                            "color": "0:颜色:香槟蕾丝",
                            "size": "7:尺码:41",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": true,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        },
                        {
                            "stock_sku_product_id": 202,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764578123_7469.jpg",
                            "product_number": "1",
                            "market_barcode": "33",
                            "market_pro_nm": "112",
                            "market_option_nm": "22",
                            "market_option_id": "44",
                            "pro_qty": 1,
                            "pro_cost": 100,
                            "color": "0:颜色:香槟蕾丝",
                            "size": "6:尺码:40",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": true,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        }
                    ]
                },
                {
                    "skuId": "25C00003k",
                    "original_packaging": false,
                    "memo": "",
                    "sku_number_available": 3,
                    "width": 0,
                    "length": 0,
                    "height": 0,
                    "cbm": "0.00000000",
                    "products": [
                        {
                            "stock_sku_product_id": 199,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764578115_4406.jpg",
                            "product_number": "2",
                            "market_barcode": "33",
                            "market_pro_nm": "112",
                            "market_option_nm": "22",
                            "market_option_id": "44",
                            "pro_qty": 2,
                            "pro_cost": 50,
                            "color": "0:颜色:香槟蕾丝",
                            "size": "4:尺码:38",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": true,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        },
                        {
                            "stock_sku_product_id": 200,
                            "imageUrl": "http://img.mabangtong.vip/chinaone/product/2025/12/01/1764578109_6690.jpg",
                            "product_number": "5",
                            "market_barcode": "33",
                            "market_pro_nm": "112",
                            "market_option_nm": "22",
                            "market_option_id": "44",
                            "pro_qty": 5,
                            "pro_cost": 20,
                            "color": "0:颜色:香槟蕾丝",
                            "size": "0:尺码:34",
                            "pro_state_cd": "1",
                            "pro_state_name": "입고예정",
                            "inspection": {
                                "isNormal": true,
                                "issues": {
                                    "actualArrived": {
                                        "hasIssue": true,
                                        "qty": 0
                                    },
                                    "damaged": {
                                        "hasIssue": false,
                                        "qty": 0
                                    },
                                    "wrongItem": {
                                        "hasIssue": false,
                                        "qty": 0
                                    }
                                }
                            },
                            "comment": ""
                        }
                    ]
                }
            ]
        },
        "svc_info": [
            {
                "SVC_GROUP_CD": 2,
                "SVC_GROUP_NM": "포장옵션",
                "selected": 0,
                "items": [
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "90",
                        "CD_NM": "바코드작업",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "97",
                        "CD_NM": "플라스틱파렛트",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "104",
                        "CD_NM": "개별상품 박스갈이",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "105",
                        "CD_NM": "HDPE택배봉투",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "106",
                        "CD_NM": "포장명세서작업비",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "107",
                        "CD_NM": "마대제거비용",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "6",
                        "CD_NM": "에어팩 포장보완",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "13",
                        "CD_NM": "멀티박스",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "37",
                        "CD_NM": "박스포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "38",
                        "CD_NM": "뽁뽁이 포장보완",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "39",
                        "CD_NM": "특수포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "40",
                        "CD_NM": "우드포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "41",
                        "CD_NM": "우드파렛트",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "42",
                        "CD_NM": "모서리보호대",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "43",
                        "CD_NM": "종이코너보호대",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "44",
                        "CD_NM": "PP밴드",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "45",
                        "CD_NM": "외부랩핑",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "46",
                        "CD_NM": "마대포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "47",
                        "CD_NM": "나눔포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "48",
                        "CD_NM": "낱개/묶음포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "54",
                        "CD_NM": "원산지 작업",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "56",
                        "CD_NM": "깨짐주의 스티커",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "57",
                        "CD_NM": "어댑터(일반형)",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "66",
                        "CD_NM": "어댑터(고급형)",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "68",
                        "CD_NM": "내부 뽁뽁이 포장",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "70",
                        "CD_NM": "재포장수수료",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "75",
                        "CD_NM": "OPP봉투",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "74",
                        "CD_NM": "품질표시스티커",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "포장옵션",
                        "GROUP_CD": "2",
                        "selected": 0
                    }
                ]
            },
            {
                "SVC_GROUP_CD": 1,
                "SVC_GROUP_NM": "검수옵션",
                "selected": 0,
                "items": [
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "108",
                        "CD_NM": "파손검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "109",
                        "CD_NM": "바코드라벨검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "2",
                        "CD_NM": "기본검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "4",
                        "CD_NM": "신발박스 제거",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "15",
                        "CD_NM": "의류박스 제거",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "16",
                        "CD_NM": "영수증 제거",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "30",
                        "CD_NM": "정밀검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "33",
                        "CD_NM": "택배개봉금지",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "TEST",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "34",
                        "CD_NM": "수량검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "35",
                        "CD_NM": "본상품개봉금지",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "36",
                        "CD_NM": "작동검수",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "55",
                        "CD_NM": "사진재촬영",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "69",
                        "CD_NM": "품목검수비용",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "49",
                        "CD_NM": "기타 구성품 제거",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "50",
                        "CD_NM": "외부나무 제거",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "검수옵션",
                        "GROUP_CD": "1",
                        "selected": 0
                    }
                ]
            },
            {
                "SVC_GROUP_CD": 7,
                "SVC_GROUP_NM": "입고옵션",
                "selected": 0,
                "items": [
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "77",
                        "CD_NM": "상하차비용",
                        "CHARGE_DET_MNY": "1000",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "입고옵션",
                        "GROUP_CD": "7",
                        "selected": 0
                    },
                    {
                        "MAIN_CD": "9",
                        "SUB_CD": "134",
                        "CD_NM": "착불비",
                        "CHARGE_DET_MNY": "0",
                        "CONT": "1",
                        "CRR_CD": "1",
                        "CHARGE_CD": "9",
                        "GROUP_NM": "입고옵션",
                        "GROUP_CD": "7",
                        "selected": 0
                    }
                ]
            }
        ],
        "exg_rt": "197.50",
        "total_mny": 0
    }
}
相关推荐
W***D4551 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue毕业设计选题管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
VX:Fegn08951 小时前
计算机毕设|基springboot+Vue的校园打印系统设计与实现
java·前端·javascript·vue.js·spring boot·后端·课程设计
阿道夫小狮子1 小时前
Android 反射
android·前端·javascript
Dwzun1 小时前
基于SpringBoot的共享单车调度系统【附源码+文档+部署视频+讲解)
java·数据库·vue.js·spring boot·后端·毕业设计·maven
Coder-coco1 小时前
选题管理|基于springboot + vue毕业设计选题管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
૮・ﻌ・1 小时前
Vue2(三):自定义指令、插槽、路由
前端·javascript·vue.js
遇到困难睡大觉哈哈2 小时前
Harmony os 卡片传递消息给应用(message 事件)详细介绍
java·服务器·javascript·harmonyos·鸿蒙
快落的小海疼2 小时前
全局重复接口取消&重复提示
前端·vue.js