|
|
@ -1,70 +1,72 @@
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<div v-loading="loading" class="step-container">
|
|
|
|
<div v-loading="loading" class="step-container">
|
|
|
|
<el-scrollbar class="step-content">
|
|
|
|
<el-scrollbar class="step-content">
|
|
|
|
<ul class="flex">
|
|
|
|
<el-form>
|
|
|
|
<li class="flex">
|
|
|
|
<el-form-item label="属性规格">
|
|
|
|
<span class="label">属性规格:</span>
|
|
|
|
|
|
|
|
<el-input v-model="skuName">
|
|
|
|
<el-input v-model="skuName">
|
|
|
|
<template #append>
|
|
|
|
<template #append>
|
|
|
|
<el-button @click="handleAddSku"><el-icon name="Check" /></el-button>
|
|
|
|
<el-button @click="handleAddSku"><el-icon name="Check" /></el-button>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-input>
|
|
|
|
</el-input>
|
|
|
|
</li>
|
|
|
|
</el-form-item>
|
|
|
|
<li v-for="(sku, i) in form.skus" :key="i" class="flex">
|
|
|
|
<el-form-item v-for="(sku, i) in form.skus" :key="i" :label="sku.name">
|
|
|
|
<div class="left">
|
|
|
|
<div class="flex">
|
|
|
|
<span class="label">{{ sku.name }}:</span>
|
|
|
|
<div class="left">
|
|
|
|
<el-tag
|
|
|
|
<el-tag
|
|
|
|
v-for="(item, j) in sku.values"
|
|
|
|
v-for="(item, j) in sku.values"
|
|
|
|
:key="i + '' + j"
|
|
|
|
:key="i + '' + j"
|
|
|
|
closable
|
|
|
|
closable
|
|
|
|
@close="handleDelValue(sku, j)"
|
|
|
|
@close="handleDelValue(sku, j)"
|
|
|
|
>
|
|
|
|
>
|
|
|
|
{{ item }}
|
|
|
|
{{ item.name }}
|
|
|
|
</el-tag>
|
|
|
|
</el-tag>
|
|
|
|
<el-input v-model="skuValue[i]">
|
|
|
|
<el-input v-model="skuValue[i]">
|
|
|
|
<template #append>
|
|
|
|
<template #append>
|
|
|
|
<el-button @click="handleAddValue(sku, i)"><el-icon name="Check" /></el-button>
|
|
|
|
<el-button @click="handleAddValue(sku, i)"><el-icon name="Check" /></el-button>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-input>
|
|
|
|
</el-input>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="right">
|
|
|
|
|
|
|
|
<el-button :disabled="i === 0" type="text" @click="handleMove(i, i - 1)">上移</el-button>
|
|
|
|
|
|
|
|
<el-button :disabled="i === form.skus.length - 1" type="text" @click="handleMove(i, i + 1)">
|
|
|
|
|
|
|
|
下移
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
<el-button type="text" @click="handleDelSku(i)">删除</el-button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="right">
|
|
|
|
</el-form-item>
|
|
|
|
<el-button :disabled="i === 0" type="text" @click="handleMove(i, i - 1)">上移</el-button>
|
|
|
|
</el-form>
|
|
|
|
<el-button :disabled="i === form.skus.length - 1" type="text" @click="handleMove(i, i + 1)">
|
|
|
|
|
|
|
|
下移
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
<el-button type="text" @click="handleDelSku(i)">删除</el-button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<el-table border :data="form.skuInfos" style="width: 100%">
|
|
|
|
<el-table border :data="form.skuInfos" style="width: 100%">
|
|
|
|
<el-table-column
|
|
|
|
<el-table-column
|
|
|
|
v-for="(sku, index) in form.skus"
|
|
|
|
v-for="(sku, index) in form.skus"
|
|
|
|
:key="index"
|
|
|
|
:key="index"
|
|
|
|
|
|
|
|
align="center"
|
|
|
|
|
|
|
|
header-align="center"
|
|
|
|
:label="sku.name"
|
|
|
|
:label="sku.name"
|
|
|
|
:prop="'attr' + index"
|
|
|
|
:prop="sku.id + ''"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
<el-table-column label="售价(元)" prop="sales">
|
|
|
|
<el-table-column align="center" header-align="center" label="售价(元)" prop="sales" width="160px">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<el-input-number v-model="row.sales" />
|
|
|
|
<el-input-number v-model="row.sales" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="商品库存" prop="inventory">
|
|
|
|
<el-table-column align="center" header-align="center" label="商品库存" prop="inventory" width="160px">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<el-input-number v-model="row.inventory" />
|
|
|
|
<el-input-number v-model="row.inventory" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="成本价(元)" prop="price">
|
|
|
|
<el-table-column align="center" header-align="center" label="成本价(元)" prop="price" width="160px">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<el-input-number v-model="row.price" />
|
|
|
|
<el-input-number v-model="row.price" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="库存预警值" prop="warn">
|
|
|
|
<el-table-column align="center" header-align="center" label="库存预警值" prop="warn" width="160px">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<el-input-number v-model="row.warn" />
|
|
|
|
<el-input-number v-model="row.warn" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="SKU编号" prop="no" />
|
|
|
|
<el-table-column align="center" header-align="center" label="SKU编号" min-width="100px" prop="no" />
|
|
|
|
<el-table-column label="启用" prop="enabled">
|
|
|
|
<el-table-column align="center" header-align="center" label="启用" prop="enabled" width="80px">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<template #default="{ row }">
|
|
|
|
<el-switch v-model="row.enabled" />
|
|
|
|
<el-switch v-model="row.enabled" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
@ -103,7 +105,15 @@
|
|
|
|
const id = route.params.id;
|
|
|
|
const id = route.params.id;
|
|
|
|
if (id && id !== state.form.id) {
|
|
|
|
if (id && id !== state.form.id) {
|
|
|
|
state.form.id = id;
|
|
|
|
state.form.id = id;
|
|
|
|
state.form.skus = await store.dispatch('productAttrsGroup/search', id);
|
|
|
|
let res = await store.dispatch('productAttrsGroup/search', id);
|
|
|
|
|
|
|
|
let arr = [];
|
|
|
|
|
|
|
|
res.forEach((item) => {
|
|
|
|
|
|
|
|
arr.push(
|
|
|
|
|
|
|
|
store.dispatch('productAttrsValue/search', item.id).then((res) => (item.values = res))
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
await Promise.all(arr);
|
|
|
|
|
|
|
|
state.form.skus = res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
onActivated(handleLoad);
|
|
|
|
onActivated(handleLoad);
|
|
|
@ -114,8 +124,8 @@
|
|
|
|
(info, sku) => {
|
|
|
|
(info, sku) => {
|
|
|
|
let res = [];
|
|
|
|
let res = [];
|
|
|
|
info.forEach((row) => {
|
|
|
|
info.forEach((row) => {
|
|
|
|
sku.values.forEach((value) => {
|
|
|
|
(sku.values || []).forEach((value) => {
|
|
|
|
res.push({ ...row, ['attr' + state.form.skus.indexOf(sku)]: value });
|
|
|
|
res.push({ ...row, [sku.id + '']: value.name });
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return res;
|
|
|
|
return res;
|
|
|
@ -194,31 +204,21 @@
|
|
|
|
.flex {
|
|
|
|
.flex {
|
|
|
|
width: 100%;
|
|
|
|
width: 100%;
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: space-between;
|
|
|
|
.el-input {
|
|
|
|
.el-input {
|
|
|
|
width: 160px;
|
|
|
|
width: 160px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
li {
|
|
|
|
.el-tag {
|
|
|
|
align-items: center;
|
|
|
|
+ .el-tag {
|
|
|
|
&:not(:first-child) {
|
|
|
|
margin-left: @layout-space;
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.el-tag {
|
|
|
|
+ .el-input {
|
|
|
|
+ .el-tag {
|
|
|
|
margin-left: @layout-space;
|
|
|
|
margin-left: @layout-space;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
+ .el-input {
|
|
|
|
|
|
|
|
margin-left: @layout-space;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
+ li {
|
|
|
|
|
|
|
|
margin-top: @layout-space;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.label {
|
|
|
|
.el-input-number {
|
|
|
|
word-break: keep-all;
|
|
|
|
width: 100%;
|
|
|
|
margin-right: @layout-space;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.step-footer {
|
|
|
|
.step-footer {
|
|
|
|