diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
index 1069655b..35373f8d 100644
--- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue
+++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
@@ -183,7 +183,7 @@
@@ -196,7 +196,7 @@
style="width: 150px"
v-model="item.name"
:maxlength="30"
- placeholder="请输入规格项名称"
+ placeholder="请输入规格名称"
:filter-method="filterMethod"
:data="skuData"
@on-change="editSkuItem"
@@ -224,7 +224,7 @@
:data="skuVal"
@on-focus="changeSkuVals(item.name)"
@on-change="
- skuValueChange(val.value, $index, item)
+ skuValueChange(val.value, index, item)
"
>
@@ -232,7 +232,7 @@
type="primary"
size="small"
style="margin-left: 10px"
- @click="handleCloseSkuValue(item, index)"
+ @click="handleCloseSkuValue(val, index)"
>
删除
@@ -254,6 +254,14 @@
@click="addSkuItem"
>添加规格项
+
+
@@ -605,6 +613,7 @@ export default {
return {
regular,
total: 0,
+ global: 0,
accessToken: "", //令牌token
goodsParams: "",
categoryId: "", // 商品分类第三级id
@@ -700,7 +709,6 @@ export default {
shopCategory: [],
/** 商品单位列表 */
goodsUnitList: [],
- initSkuTableData: [],
ignoreColumn: [
// 添加规格时需要忽略的参数
"_index",
@@ -823,7 +831,6 @@ export default {
},
// 商品图片上传成功
handleSuccessGoodsPicture(res, file) {
- console.log(res);
if (file.response) {
file.url = file.response.result;
this.baseInfoForm.goodsGalleryFiles.push(file);
@@ -885,7 +892,6 @@ export default {
GET_GoodsUnit() {
API_GOODS.getGoodsUnitList(this.params).then((res) => {
if (res.success) {
- console.log(res);
this.goodsUnitList.push(...res.result.records.map((i) => i.name));
this.total = res.result.total;
}
@@ -958,7 +964,7 @@ export default {
renderGoodsDetailSku(skuList) {
let skus = [];
let skusInfo = [];
- skuList.map((e, skuListIndex) => {
+ skuList.map((e) => {
let sku = {
id: e.id,
sn: e.sn,
@@ -966,7 +972,6 @@ export default {
cost: e.cost,
quantity: e.quantity,
weight: e.weight,
- _id: new Date().getTime() + skuListIndex, // 标识
};
e.specList.forEach((u) => {
if (u.specName === "images") {
@@ -980,10 +985,8 @@ export default {
skusInfo.push({
name: u.specName,
spec_id: u.specNameId,
- _id: new Date().getTime(),
spec_values: [
{
- _id: new Date().getTime(),
id: u.specValueId,
name: u.specName,
value: u.specValue || "",
@@ -998,7 +1001,6 @@ export default {
) {
sk.spec_values.push({
id: u.specValueId,
- _id: new Date().getTime(),
name: u.specName,
value: u.specValue || "",
});
@@ -1014,7 +1016,7 @@ export default {
skus.push(sku);
});
this.skuInfo = skusInfo;
- this.renderTableData();
+ this.renderTableData(skus);
this.skuTableData = skus;
},
@@ -1063,26 +1065,20 @@ export default {
return;
}
// 写入对象,下标,具体对象
+ let num = this.global++;
this.$set(this.skuInfo, this.skuInfo.length, {
- spec_values: [
- {
- name: '规格名'+this.skuInfo.length,
- value: '',
- ['_id'+this.skuInfo.length]: new Date().getTime() + Math.random(0.1),
- },
- ],
- name: '规格名'+this.skuInfo.length,
- ['_id'+this.skuInfo.length]: new Date().getTime(),
+ spec_values: [{ name: "规格名" + num, value: "" }],
+ name: "规格名" + num,
});
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
},
// 编辑规格名
editSkuItem() {
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
},
// 编辑规格值
async skuValueChange(val, index, item) {
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
},
// 获取焦点时,取得规格名对应的规格值
changeSkuVals(name) {
@@ -1097,12 +1093,15 @@ export default {
}
},
/** 移除当前规格项 进行数据变化*/
- handleCloseSkuItem($index) {
+ handleCloseSkuItem($index, item) {
this.skuInfo.splice($index, 1);
+ this.skuTableData.forEach((e, index) => {
+ delete e[item.name];
+ });
/**
* 渲染规格详细表格
*/
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
},
// 添加规格值的验证
validateEmpty(params) {
@@ -1130,35 +1129,44 @@ export default {
this.$set(item.spec_values, item.spec_values.length, {
name: item.name,
value: "",
- _id: new Date().getTime(),
});
this.baseInfoForm.regeneratorSkuFlag = true;
/**
* 渲染规格详细表格
*/
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
}
},
-
+ handleClearSku() {
+ this.skuInfo = [];
+ this.skuTableData = [];
+ this.renderTableData(this.skuTableData);
+ },
/** 移除当前规格值 */
handleCloseSkuValue(item, index) {
- item.spec_values.splice(index, 1);
-
+ // this.skuInfo[item.name].spec_values.splice(index, 1);
+ this.skuInfo.forEach((i) => {
+ if (i.name === item.name) {
+ i.spec_values.splice(index, 1);
+ }
+ });
+ this.skuTableData = this.skuTableData.filter(
+ (e, index) => e[item.name] !== item.value
+ );
this.baseInfoForm.regeneratorSkuFlag = true;
/**
* 渲染规格详细表格
*/
- this.renderTableData();
+ this.renderTableData(this.skuTableData);
},
/**
* 渲染table所需要的column 和 data
*/
- renderTableData() {
+ renderTableData(skus) {
this.skuTableColumn = [];
+ // this.skuTableData = [];
let pushData = [];
- this.initSkuTableData = this.skuTableData;
- this.skuTableData = [];
//渲染头部
this.skuInfo.forEach((sku) => {
// !sku.name ? (sku.name = "规格名") : "";
@@ -1202,45 +1210,39 @@ export default {
this.skuTableColumn = pushData;
//克隆所有渲染的数据
let cloneTemp = cloneObj(this.skuInfo);
- //判定 是否存在规格分组
if (cloneTemp[0]) {
//存放最终结果
let result = [];
//循环选中的 sku 数据
- cloneTemp[0].spec_values.forEach((specItem) => {
- result.push({
- [cloneTemp[0].name]: specItem.value,
- images: this.baseInfoForm.goodsGalleryFiles || [],
- _name: cloneTemp[0].name,
-
- ...specItem,
- });
+ cloneTemp[0].spec_values.forEach((specItem, index) => {
+ // 如存在数据,则将数据赋值
+ if (skus && skus[index] && specItem.value !== "") {
+ let obj = {
+ id: skus[index].id,
+ sn: skus[index].sn,
+ quantity: skus[index].quantity,
+ cost: skus[index].cost,
+ price: skus[index].price,
+ [cloneTemp[0].name]: specItem.value,
+ images: this.baseInfoForm.goodsGalleryFiles || [],
+ };
+ if (specItem.value !== "") {
+ obj.id = skus[index].id;
+ }
+ if (skus[index].weight !== "") {
+ obj.weight = skus[index].weight;
+ }
+ result.push(obj);
+ } else {
+ result.push({
+ [cloneTemp[0].name]: specItem.value,
+ images: this.baseInfoForm.goodsGalleryFiles || [],
+ });
+ }
});
cloneTemp.splice(0, 1);
-
- result = this.specIterator(result, cloneTemp);
+ result = this.specIterator(result, cloneTemp, skus);
this.skuTableData = result;
- console.log(result)
- this.skuTableData.forEach((item, index) => {
- this.initSkuTableData.forEach((sku) => {
- // 多个规格项 判断每个id数组通过赋值
-
- // if (sku._id.length && this.scalarArrayEquals(item._id, sku._id)) {
- // this.skuTableData[index] = {
- // ...item,
- // ...sku,
- // };
- // } else
- if (item.value == sku[item._name] || item._id == sku._id) {
- // // 单个规格项如果id重复 赋值
- this.skuTableData[index] = {
- ...sku,
- ...item,
- };
- // }
- }
- });
- });
}
},
/**
@@ -1248,20 +1250,81 @@ export default {
* result 渲染的数据
* array spec数据
*/
- specIterator(result, cloneTemp) {
+ specIterator(result, cloneTemp, skus) {
+ // console.log("-----skus-----");
+ // console.log(JSON.parse(JSON.stringify(skus)));
+ // console.log("-----result-----");
+ // console.log(JSON.parse(JSON.stringify(result)));
+ // console.log("-----cloneTemp-----");
+ // console.log(JSON.parse(JSON.stringify(cloneTemp)));
//是否还可以循环
if (cloneTemp.length > 0) {
let table = [];
- result.forEach((resItem) => {
- cloneTemp[0].spec_values.forEach((valItem, i) => {
+ // 已有数据索引
+ let findIndex = 0;
+ result.forEach((resItem, index) => {
+ cloneTemp[0].spec_values.forEach((valItem, _index) => {
let obj = cloneObj(resItem);
- obj[cloneTemp[0].name] = valItem.value;
- obj._name = obj[cloneTemp[0].name];
-
- if (obj._id) {
- // obj._id = `${obj._id},${cloneTemp[0].spec_values[i+1]?._id }`.split(",");
-
+ // 判断已存在数据数量是否大于渲染数据数量(认为是在编辑原存在数据的规格值)且规格值不为空且存在已存在数据,如符合条件,则认为为修改已存在数据
+ if (skus.length > result.length && valItem.value !== "" && skus[findIndex]) {
+ obj = cloneObj(skus[findIndex]);
}
+ let emptyFlag = false;
+ // 判断是否为规格项的第一个值,如果不为第一个值则判断为新加数据
+ if (cloneTemp[0].spec_values.length > 1 && valItem.value === "") {
+ delete obj.id;
+ delete obj.sn;
+ delete obj.quantity;
+ delete obj.cost;
+ delete obj.price;
+ delete obj.weight;
+ }
+
+ // 判断渲染数据中是否存在空值,存在空值则判断新加数据
+ for (let key in obj) {
+ if (!obj[key]) {
+ emptyFlag = true;
+ break;
+ }
+ }
+
+ // 判断当前渲染数据是否已有数据
+ if (
+ skus &&
+ skus[findIndex] &&
+ (!skus[findIndex].id || obj.id === skus[findIndex].id) &&
+ valItem.value !== "" &&
+ !emptyFlag
+ ) {
+ // 将原存在的数据放入结果中
+ let originSku = skus[findIndex];
+ obj = {
+ sn: obj.sn || originSku.sn,
+ quantity: obj.quantity || originSku.quantity,
+ cost: obj.cost || originSku.cost,
+ price: obj.price || originSku.price,
+ weight: obj.weight || originSku.weight,
+ ...obj,
+ };
+ if (
+ originSku[valItem.name] === valItem.value ||
+ (obj.id && originSku.id === obj.id)
+ ) {
+ obj.id = originSku.id;
+ }
+
+ // 视为处理完成已存在数据,将原数据索引后移1位
+ if (skus.length == result.length) {
+ findIndex++;
+ }
+ }
+
+ // 如原存在数据大于渲染数据(认为是在编辑原存在数据的规格值),且存在已存在数据,且规格值不为空。则将原数据索引后移1位
+ if (skus.length > result.length && (skus[findIndex] && valItem.value !== "")) {
+ findIndex++;
+ }
+
+ obj[cloneTemp[0].name] = valItem.value;
table.push(obj);
});
});
@@ -1274,7 +1337,7 @@ export default {
} else {
return result;
}
- return this.specIterator(result, cloneTemp);
+ return this.specIterator(result, cloneTemp, skus);
},
/** 根据分类id获取系统设置规格信息*/
Get_SkuInfoByCategory(categoryId) {
@@ -1378,7 +1441,7 @@ export default {
},
/** 添加商品 **/
save() {
- this.submitLoading = true;
+ // this.submitLoading = true;
this.$refs["baseInfoForm"].validate((valid) => {
if (valid) {
let submit = JSON.parse(JSON.stringify(this.baseInfoForm));
@@ -1399,19 +1462,27 @@ export default {
this.submitLoading = false;
return;
}
- submit.skuList = this.skuTableData.map((sku) => {
- // 非空判断
- delete sku._index;
- delete sku._rowKey;
- delete sku.specNameId;
- delete sku.specValueId;
- delete sku._id;
- delete sku.name;
- delete sku.value;
- delete sku._name;
- return sku;
+ let skuInfoNames = this.skuInfo.map((n) => n.name);
+ submit.skuList = [];
+ this.skuTableData.map((sku) => {
+ let skuCopy = {
+ cost: sku.cost,
+ price: sku.price,
+ quantity: sku.quantity,
+ sn: sku.sn,
+ images: sku.images,
+ };
+ if (sku.weight) {
+ skuCopy.weight = sku.weight;
+ }
+ if (sku.id) {
+ skuCopy.id = sku.id;
+ }
+ for (let skuInfoName of skuInfoNames) {
+ skuCopy[skuInfoName] = sku[skuInfoName];
+ }
+ submit.skuList.push(skuCopy);
});
-
if (submit.goodsGalleryFiles.length > 0) {
submit.goodsGalleryList = submit.goodsGalleryFiles.map(
(i) => i.url
@@ -1424,7 +1495,6 @@ export default {
submit.recommend
? (submit.recommend = true)
: (submit.recommend = false);
-
if (this.goodsId) {
API_GOODS.editGoods(this.goodsId, submit).then((res) => {
if (res.success) {
@@ -1553,4 +1623,4 @@ export default {
.ivu-select .ivu-select-dropdown {
overflow: hidden !important;
}
-
+
\ No newline at end of file