Files
shopxo-diy/src/components/common/product-show-config/index.vue
2024-08-12 10:18:11 +08:00

129 lines
4.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<card-container class="card-container-br">
<div class="mb-12">显示内容</div>
<el-form-item label="是否显示">
<el-checkbox-group v-model="form.is_show">
<el-checkbox v-for="item in base_list.list_show_list" :key="item.value" :value="item.value">{{ item.name }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</card-container>
<card-container>
<div class="mb-12">购物车设置</div>
<el-form-item label="是否显示">
<el-switch v-model="form.is_shop_show"></el-switch>
</el-form-item>
<el-form-item label="按钮样式" class="align-c">
<div class="flex-row align-c jc-s gap-20 shopping_button_all">
<div v-for="item in base_list.shopping_button_list" :key="item.value" :class="['pa-10 re', { 'br-c br-primary radius-sm': shop_type(item) }]" @click="shopping_button_click(item)">
<template v-if="item.value == '0'">
<div class="pl-13 pr-13 round size-12 bg-primary cr-f shopping_button">{{ item.name }}</div>
</template>
<template v-else-if="item.value == '1'">
<div class="pl-11 pr-11 round size-12 bg-primary cr-f shopping_button">{{ item.name }}</div>
</template>
<template v-else-if="item.value == '2'">
<icon class="shopping_button round pl-6 pr-6 bg-primary " name="add" color="f" size="16"></icon>
</template>
<template v-else>
<icon class="shopping_button round pl-6 pr-6 bg-primary" name="cart" color="f" size="16"></icon>
</template>
<div v-if="shop_type(item)" class="button-checked">
<icon name="true" color="f" size="8"></icon>
</div>
</div>
</div>
</el-form-item>
<el-form-item label="是否显示" label-width="140">
<el-radio-group v-model="form.shop_button_size">
<el-radio v-for="item in base_list.shopping_button_size" :key="item.value" :value="item.value">{{ item.name }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否显示">
<el-radio-group v-model="form.shop_button_effect">
<el-radio v-for="item in base_list.shopping_cart_list" :key="item.value" :value="item.value">{{ item.name }}</el-radio>
</el-radio-group>
</el-form-item>
</card-container>
</template>
<script setup lang="ts">
const props = defineProps({
value: {
type: Object,
default: () => ({}),
},
});
const state = reactive({
form: props.value,
});
// 如果需要解构确保使用toRefs
const { form } = toRefs(state);
const base_list = {
list_show_list: [
{ name: '商品名称', value: '0' },
{ name: '商品标签', value: '1' },
{ name: '商品售价', value: '2' },
{ name: '商品销量', value: '3' },
{ name: '商品评分', value: '4' },
{ name: '商品原价', value: '5' },
],
shopping_button_list: [
{ name: '购买', value: '0' },
{ name: '立即购买', value: '1' },
{ name: '添加', value: '2' },
{ name: '购物车', value: '3' },
],
shopping_cart_list: [
{ name: '进入商品详情页', value: '0' },
{ name: '商品加购', value: '1' }
],
shopping_button_size: [
{ name: '大', value: '0' },
{ name: '中', value: '1' },
{ name: '小', value: '2' },
]
};
const shop_type = computed(() => {
return (item: { value: string; }) => {
return item.value == form.value.shop_type;
};
});
const shopping_button_click = (item: { value: string; }) => {
form.value.shop_type = item.value;
};
</script>
<style lang="scss">
.card-container-br {
border-bottom: 0.8rem solid #f0f2f5;
}
.shopping_button {
height: 2.7rem;
line-height: 2.7rem;
}
.shopping_button_all {
height: 4.7rem;
box-sizing: border-box;
}
.button-checked {
width: 0;
height: 0;
position: absolute;
right: 0;
bottom: 0;
border: 1.1rem solid #000;
border-color: transparent $cr-primary $cr-primary transparent;
.iconfont {
width: 1rem;
height: 2.1rem;
display: flex;
align-items: flex-end;
justify-content: center;
font-weight: 700;
}
}
</style>