cashier_desktop/src/components/skuModal.vue

103 lines
2.4 KiB
Vue

<template>
<el-dialog :title="goods.name" width="800" v-model="dialogVisible">
<div class="header">选择规格</div>
<div class="row" v-for="(item, index) in goods.tbProductSpec.specList" :key="index">
<div class="title">{{ item.name }}</div>
<div class="sku_wrap">
<div class="item" :class="{ active: val.selected }" v-for="(val, i) in item.value" :key="i"
@click="selectedSku(index, i)">{{ val }}</div>
</div>
</div>
<div class="footer">
<div class="btn">
<el-button plain style="width: 100%;" @click="show = false">取消</el-button>
</div>
<div class="btn">
<el-button type="primary" style="width: 100%;">确认</el-button>
</div>
</div>
</el-dialog>
</template>
<script setup>
import { ref, defineExpose } from 'vue'
const dialogVisible = ref(false)
const goods = ref({})
// 选择规格
function selectedSku(index, i) {
goods.value.tbProductSpec.specList[index].value[i].selected = true
console.log(goods.value.tbProductSpec.specList[index].val[i])
}
// 显示规格
function show(item) {
dialogVisible.value = true
goods.value = item
goods.value.tbProductSpec.specList = JSON.parse(goods.value.tbProductSpec.specList)
goods.value.tbProductSpec.specList.map(item => {
item.selected = false
})
console.log(goods.value)
}
defineExpose({
show
})
</script>
<style scoped lang="scss">
.header {
color: #999;
font-size: 20px;
}
.row {
border-bottom: 1px solid #ececec;
margin-top: 20px;
.title {
font-size: 20px;
}
.sku_wrap {
display: flex;
padding: 14px 0;
.item {
color: var(--primary-color);
padding: 8px 16px;
font-size: 18px;
border: 1px solid var(--primary-color);
margin-right: 14px;
border-radius: 2px;
&.active {
background-color: var(--primary-color);
color: #fff;
}
&:hover {
cursor: pointer;
background-color: var(--primary-color);
color: #fff;
}
}
}
}
.footer {
display: flex;
padding-top: 100px;
.btn {
flex: 1;
&:last-child {
margin-left: 14px;
}
}
}
</style>