<template>
|
<el-dialog title="商品规格" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
|
:close-on-press-escape="false">
|
<el-form size="small" ref="form" :model="form1" label-width="250px" :loading="loading">
|
<el-form-item label="" label-width="20px">
|
<el-table :data="productDetail.specData.spec_list" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
|
<el-table-column width="180" :label="item.group_name" :key="item.group_name" v-for="(item, index) in productDetail.specData.spec_attr">
|
<template slot-scope="scope">
|
{{scope.row.rows[index].spec_value}}
|
</template>
|
</el-table-column>
|
<el-table-column label="兑换积分">
|
<template slot-scope="scope">
|
<el-form-item label="" style="margin-bottom: 0;">
|
<el-input size="small" type="number" v-model="scope.row.spec_form.point_num" :disabled="true"></el-input>
|
</el-form-item>
|
</template>
|
</el-table-column>
|
<el-table-column label="兑换金额">
|
<template slot-scope="scope">
|
<el-form-item label="" style="margin-bottom: 0;">
|
<el-input size="small" type="number" v-model="scope.row.spec_form.point_money" :disabled="true"></el-input>
|
</el-form-item>
|
</template>
|
</el-table-column>
|
<el-table-column label="活动库存">
|
<template slot-scope="scope">
|
<el-form-item label="" style="margin-bottom: 0;">
|
<el-input size="small" type="number" v-model="scope.row.spec_form.stock" :disabled="true"></el-input>
|
</el-form-item>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-form-item>
|
|
|
</el-form>
|
|
|
|
</el-dialog>
|
</template>
|
|
<script>
|
import PointProductApi from '@/api/pointproduct.js';
|
export default {
|
data() {
|
return {
|
form1: {
|
deduct_stock_type: 10,
|
status: 0,
|
product_id: 0,
|
sort: 1,
|
},
|
/*左边长度*/
|
formLabelWidth: '120px',
|
/*是否显示*/
|
loading: false,
|
dialogVisible: false,
|
point_product_id: 0,
|
/*商品详情*/
|
productDetail: {
|
spec_type: 10,
|
sku: {},
|
specData: {}
|
},
|
};
|
},
|
props: ['open_edit', 'userModel'],
|
created() {
|
|
this.dialogVisible = this.open_edit;
|
this.point_product_id = this.userModel.point_product_id;
|
|
|
/*获取列表*/
|
this.getData();
|
},
|
methods: {
|
|
getData() {
|
let self = this;
|
let point_product_id = self.point_product_id;
|
PointProductApi.getProductData({
|
point_product_id: point_product_id
|
}, true)
|
.then(data => {
|
self.form1 = data.data.data;
|
self.form1.product_id = data.data.data.product_id;
|
self.productDetail.spec_type = self.form1.product.spec_type;
|
self.productDetail.specData = data.data.specData;
|
|
// self.form1 = data.data.data;
|
// self.productDetail.spec_type = self.form1.product.spec_type;
|
// self.productDetail.specData = data.data.specData;
|
|
self.buildSkulist();
|
|
})
|
.catch(error => {
|
self.loading = false;
|
});
|
},
|
|
|
/**
|
* 构建规格组合列表
|
*/
|
buildSkulist: function() {
|
var self = this;
|
var spec_attr = self.productDetail.specData.spec_attr;
|
var specArr = [];
|
for (var i = 0; i < spec_attr.length; i++) {
|
specArr.push(spec_attr[i].spec_items);
|
}
|
var specListTemp = self.calcDescartes(specArr);
|
|
var specList = [];
|
for (var i = 0; i < specListTemp.length; i++) {
|
var rows = [];
|
var specSkuIdAttr = [];
|
if (!Array.isArray(specListTemp[i])) {
|
rows.push(specListTemp[i]);
|
} else {
|
rows = specListTemp[i];
|
}
|
for (var j = 0; j < rows.length; j++) {
|
specSkuIdAttr.push(rows[j].item_id);
|
}
|
specList.push({
|
spec_sku_id: specSkuIdAttr.join('_'),
|
rows: rows,
|
spec_form: {}
|
});
|
}
|
|
// 合并旧sku数据
|
if (self.productDetail.specData.spec_list.length > 0 && specList.length > 0) {
|
for (i = 0; i < specList.length; i++) {
|
var overlap = self.productDetail.specData.spec_list.filter(function(val) {
|
return val.spec_sku_id === specList[i].spec_sku_id;
|
});
|
if (overlap.length > 0) {
|
specList[i].spec_form = overlap[0].spec_form;
|
specList[i].spec_form.product_sku_id = overlap[0].product_sku_id;
|
}
|
overlap = self.form1.sku.filter(function(val) {
|
return val.product_sku_id === specList[i].spec_form.product_sku_id;
|
});
|
if (overlap.length > 0) {
|
specList[i].spec_form.point_money = overlap[0].point_money;
|
specList[i].spec_form.point_num = overlap[0].point_num;
|
specList[i].spec_form.stock = overlap[0].stock;
|
specList[i].spec_form.point_product_sku_id = overlap[0].point_product_sku_id;
|
}
|
}
|
}
|
self.productDetail.specData.spec_list = specList;
|
|
},
|
calcDescartes: function(array) {
|
if (array.length < 2) return array[0] || [];
|
return [].reduce.call(array, function(col, set) {
|
var res = [];
|
col.forEach(function(c) {
|
set.forEach(function(s) {
|
var t = [].concat(Array.isArray(c) ? c : [c]);
|
t.push(s);
|
res.push(t);
|
});
|
});
|
return res;
|
});
|
},
|
|
objectSpanMethod({
|
row,
|
column,
|
rowIndex,
|
columnIndex
|
}) {
|
var spec_attr = this.productDetail.specData.spec_attr;
|
// 规格组合总数 (table行数)
|
var totalRow = 1;
|
//比如2个规格,只有第一列有多行
|
if (columnIndex < spec_attr.length - 1) {
|
let startRowIndex = columnIndex + 1;
|
let endRowIndex = spec_attr.length - 1;
|
for (var i = startRowIndex; i <= endRowIndex; i++) {
|
totalRow *= spec_attr[i].spec_items.length;
|
}
|
if (rowIndex % totalRow === 0) {
|
return {
|
rowspan: totalRow,
|
colspan: 1
|
};
|
} else {
|
return {
|
rowspan: 0,
|
colspan: 0
|
};
|
}
|
}
|
},
|
|
/*关闭弹窗*/
|
dialogFormVisible(e) {
|
if (e) {
|
this.$emit('closeDialog', {
|
type: 'success',
|
openDialog: false
|
})
|
} else {
|
this.$emit('closeDialog', {
|
type: 'error',
|
openDialog: false
|
})
|
}
|
}
|
|
}
|
};
|
</script>
|
|
<style></style>
|