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 = ₩ </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
}
}