<template>
|
<!--
|
作者:luoyiming
|
时间:2020-06-20
|
描述:diy组件-参数设置-商品栏
|
-->
|
<div>
|
<div class="common-form">
|
<span>{{ curItem.name }}</span>
|
</div>
|
<el-form size="small" :model="curItem" label-width="100px">
|
<el-form-item label="商品来源:">
|
<el-radio-group v-model="curItem.params.source">
|
<el-radio :label="'auto'">自动获取</el-radio>
|
<el-radio :label="'choice'">手动选择</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<!-- 自动获取 -->
|
<template v-if="curItem.params.source == 'auto'">
|
<!-- 商品分类 -->
|
<el-form-item label="商品分类:">
|
<el-cascader
|
class="ww100"
|
v-model="currCategory"
|
v-if="CategoryList.length > 0"
|
ref="cascader"
|
:options="CategoryList"
|
:props="{ checkStrictly: true, children: 'child', value: 'category_id', label: 'name' }"
|
@change="changeCategory"
|
clearable
|
></el-cascader>
|
</el-form-item>
|
<!-- 商品排序 -->
|
<el-form-item label="商品排序:">
|
<el-radio-group v-model="curItem.params.auto.productSort">
|
<el-radio :label="'all'">综合</el-radio>
|
<el-radio :label="'sales'">销量</el-radio>
|
<el-radio :label="'price'">价格</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<!-- 显示数量 -->
|
<el-form-item label="显示数量:"><el-input v-model="curItem.params.auto.showNum" class="w-auto"></el-input></el-form-item>
|
</template>
|
<!-- 手动选择 -->
|
<template v-if="curItem.params.source == 'choice'">
|
<el-form-item label="商品列表:">
|
<div class="choice-product-list">
|
<draggable v-model="curItem.data" :options = "{draggable:'.item',animation:500}">
|
<transition-group class="d-s-c f-w">
|
<div v-for="(product, index) in curItem.data" class="item" :key="product.product_id">
|
<div class="delete-box"><i class="el-icon-error" @click="$parent.onEditorDeleleData(index, selectedIndex)"></i></div>
|
<img v-img-url="product.image" alt="" />
|
</div>
|
</transition-group>
|
</draggable>
|
</div>
|
<div>
|
<el-button icon="el-icon-plus" @click.stop="$parent.openProduct(curItem.data,true)">选择产品</el-button>
|
</div>
|
</el-form-item>
|
</template>
|
<!--组件样式-->
|
<div class="p-10-0 mb16 f14 border-b"><span class="gray6">组件样式</span></div>
|
|
<!-- 背景颜色 -->
|
<el-form-item label="背景颜色:">
|
<div class="d-s-c">
|
<el-color-picker v-model="curItem.style.background"></el-color-picker>
|
<el-button type="button" style="margin-left: 10px;" @click.stop="$parent.onEditorResetColor(curItem.style, 'background', '#F6F6F6')">重置</el-button>
|
</div>
|
</el-form-item>
|
|
<!-- 商品排序 -->
|
<el-form-item label="商品排序:">
|
<el-radio-group v-model="curItem.style.display">
|
<el-radio :label="'list'">列表平铺</el-radio>
|
<el-radio :label="'slide'" :disabled="curItem.style.column == 1">横向滑动</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<!-- 商品排序 -->
|
<el-form-item label="分列数量:">
|
<el-radio-group v-model="curItem.style.column">
|
<el-radio label="1" :disabled="curItem.style.display == 'slide'">单列</el-radio>
|
<el-radio label="2">两列</el-radio>
|
<el-radio label="3">三列</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<!-- 商品排序 -->
|
<el-form-item label="显示内容:">
|
<el-checkbox v-model="productNameShow" @change="checked => check(checked, 'productName')">商品名称</el-checkbox>
|
<el-checkbox v-model="productPriceShow" @change="checked => check(checked, 'productPrice')">商品价格</el-checkbox>
|
<el-checkbox v-model="linePriceShow" @change="checked => check(checked, 'linePrice')">划线价格</el-checkbox>
|
<el-checkbox v-model="sellingPointShow" @change="checked => check(checked, 'sellingPoint')" v-show="curItem.style.column == 1">商品卖点</el-checkbox>
|
<el-checkbox v-model="productSalesShow" @change="checked => check(checked, 'productSales')" v-show="curItem.style.column == 1">商品销量</el-checkbox>
|
</el-form-item>
|
</el-form>
|
</div>
|
</template>
|
|
<script>
|
import ProductApi from '@/api/product.js';
|
import draggable from 'vuedraggable';
|
export default {
|
components: {
|
draggable
|
},
|
data() {
|
return {
|
/*是否正在加载*/
|
loading: true,
|
/*商品类别*/
|
CategoryList: [],
|
/*当前选中的*/
|
currCategory:[],
|
productNameShow: false,
|
productPriceShow: false,
|
linePriceShow: false,
|
sellingPointShow: false,
|
productSalesShow: false
|
};
|
},
|
props: ['curItem', 'selectedIndex', 'opts'],
|
created() {
|
/*获取列表*/
|
this.getData();
|
this.productNameShow = this.curItem.style.show.productName == 1 ? true : false;
|
this.productPriceShow = this.curItem.style.show.productPrice == 1 ? true : false;
|
this.linePriceShow = this.curItem.style.show.linePrice == 1 ? true : false;
|
this.sellingPointShow = this.curItem.style.show.sellingPoint == 1 ? true : false;
|
this.productSalesShow = this.curItem.style.show.productSales == 1 ? true : false;
|
},
|
watch: {
|
selectedIndex: function(n, o) {
|
this.currCategory=this.currCategoryAuto(this.CategoryList);
|
}
|
},
|
methods: {
|
/*获取商品*/
|
getData() {
|
let self = this;
|
ProductApi.catList(
|
{
|
page_id: self.page_id
|
},
|
true
|
)
|
.then(res => {
|
self.CategoryList = res.data.list;
|
self.currCategory=self.currCategoryAuto(res.data.list);
|
self.loading = false;
|
})
|
.catch(error => {
|
self.loading = false;
|
});
|
},
|
|
/*选择默认*/
|
currCategoryAuto(list){
|
let arr=[];
|
for(let i=0;i<list.length;i++){
|
let item=list[i];
|
if(item.category_id==this.curItem.params.auto.category){
|
arr.push(item.category_id);
|
break;
|
}else{
|
if(Object.prototype.toString.call(item.child)== '[object Array]'&&item.child.length>0){
|
for(let j=0;j<item.child.length;j++){
|
if(item.child[j].category_id==this.curItem.params.auto.category){
|
arr.push(item.category_id);
|
arr.push(item.child[j].category_id);
|
break;
|
}
|
}
|
}
|
}
|
}
|
return arr;
|
},
|
|
/*检查*/
|
check(checked, name) {
|
let value = checked ? 1 : 0;
|
this.curItem.style.show[name] = value;
|
},
|
|
/*选择类别*/
|
changeCategory(e) {
|
if(e.length > 0){
|
let item = this.$refs['cascader'].getCheckedNodes();
|
this.curItem.params.auto.category = item[0].data.category_id;
|
}else{
|
this.curItem.params.auto.category = 0;
|
}
|
}
|
}
|
};
|
</script>
|
|
<style>
|
.choice-product-list {
|
display: flex;
|
justify-content: flex-start;
|
flex-wrap: wrap;
|
}
|
|
.choice-product-list .item {
|
position: relative;
|
width: 80px;
|
height: 80px;
|
margin-right: 10px;
|
margin-bottom: 10px;
|
border: 1px solid #dddddd;
|
}
|
|
.choice-product-list .item .delete-box {
|
position: absolute;
|
width: 20px;
|
height: 20px;
|
top: -10px;
|
right: -10px;
|
font-size: 20px;
|
cursor: pointer;
|
color: #999999;
|
}
|
|
.choice-product-list .item .delete-box:hover {
|
color: rgb(255, 51, 0);
|
}
|
|
.choice-product-list .item.plus-btn {
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
align-items: center;
|
}
|
|
.choice-product-list .item.plus-btn > i {
|
font-size: 30px;
|
color: #cccccc;
|
}
|
|
.choice-product-list img {
|
width: 100%;
|
height: 100%;
|
}
|
</style>
|