add: 新增消费返现

This commit is contained in:
gyq 2025-10-14 11:40:36 +08:00
parent b65955f2cc
commit 31f89109e6
3 changed files with 192 additions and 1 deletions

View File

@ -0,0 +1,157 @@
<!-- 消费返现 -->
<template>
<div class="gyq_container">
<div class="gyq_content">
<HeaderCard name="消费返现" intro="允许客户充值并使用余额支付" icon="xffx" showSwitch v-model:isOpen="form.isEnable"></HeaderCard>
<div style="padding-top: 14px;">
<el-tabs v-model="tabsValue">
<el-tab-pane label="基础明细" :name="1">
<el-form :model="form" :rules="rules" label-position="left" label-width="100px">
<el-form-item label="可用门店">
<el-radio-group v-model="form.useType">
<el-radio label="全部门店" value="all"></el-radio>
<el-radio label="指定门店可用" value="part"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选择门店" v-if="form.shopType == 'part'">
<selectBranchs ref="selectBranchsRef" @success="successShop" />
</el-form-item>
<el-form-item label="适用用户">
<el-radio-group v-model="form.applicableUser">
<el-radio label="全部用户" value="all"></el-radio>
<el-radio label="仅限新用户" value="new"></el-radio>
<el-radio label="仅会员(分店需开启超级会员可用)" value="vip"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="返现类型">
<el-radio-group v-model="form.cashbackType" @change="callbackList = []">
<el-radio label="按比例返现" value="percentage"></el-radio>
<el-radio label="固定金额" value="fix"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="阶梯设置" prop="">
<div class="row">
<div class="item border" v-for="(item, index) in callbackList" :key="index">
<div class="row_title">
<span>{{ `${index + 1}` }}</span>
<el-icon @click="callbackList.splice(index, 1)">
<Delete />
</el-icon>
</div>
<div class="ipt">
<div class="ipt_row">
<span>返现门槛</span>
<el-input placeholder="请输入返现门槛" v-model="item.amount">
<template #append></template>
</el-input>
</div>
<div class="ipt_row">
<span>{{ form.cashbackType == 'percentage' ? '返现比例' : '返现金额' }}</span>
<el-input :placeholder="form.cashbackType == 'percentage' ? '请输入返现比例' : '请输入返现金额'"
v-model="item.cashbackAmount">
<template #append>
{{ form.cashbackType == 'percentage' ? '%' : '元' }}
</template>
</el-input>
</div>
</div>
</div>
<div class="item">
<el-button type="primary" @click="addCashBackItem">添加阶梯</el-button>
</div>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary">保存</el-button>
<el-button>取消</el-button>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="返现明细" :name="2">
<div>312321</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
</template>
<script setup>
import HeaderCard from "../components/headerCard.vue";
import selectBranchs from "../components/selectBranchs.vue";
import { ref } from 'vue'
const selectBranchsRef = ref(null)
const tabsValue = ref(1)
const form = ref({
useType: 'all', // all part
shopIdList: [], //
applicableUser: 'all', // all new vip
cashbackType: 'percentage', // percentage fix
cashbackStepList: [], //
isEnable: false //
})
const rules = ref({
})
//
function successShop(e) {
console.log('successShop===', e);
form.value.shops = e
}
//
const callbackList = ref([])
function addCashBackItem() {
callbackList.value.push({
amount: '',
cashbackAmount: ''
})
}
</script>
<style scoped lang="scss">
.gyq_container {
padding: 14px;
.gyq_content {
padding: 14px;
background-color: #fff;
border-radius: 8px;
}
}
.row {
.item {
margin-bottom: 24px;
position: relative;
.row_title {
position: absolute;
top: 0;
left: 4px;
transform: translateY(-50%);
background-color: #fff;
padding: 0 10px;
display: flex;
align-items: center;
gap: 10px;
}
&.border {
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
.ipt_row {
span {
color: #555;
}
}
}
}
</style>

View File

@ -0,0 +1,34 @@
<!-- 选择门店组件 -->
<template>
<el-select v-model="shops" multiple clearable placeholder="请选择门店" @change="shopsChange" style="width: 300px">
<el-option :label="item.shopName" :value="item.id" v-for="item in branchList" :key="item.id"></el-option>
</el-select>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { getBranchPage } from "@/api/coupon/index.js";
const shops = ref([])
const emit = defineEmits(['success'])
//
function shopsChange(e) {
emit('success', e.join(","))
}
//
const branchList = ref([]);
async function getBranchPageAjax() {
try {
const res = await getBranchPage();
branchList.value = res.records;
} catch (err) {
console.log(err);
}
}
onMounted(() => {
getBranchPageAjax()
})
</script>

View File

@ -61,7 +61,7 @@ const menus = ref([
{
name: "消费返现",
icon: "xffx",
pathName: "",
pathName: "cashback",
intro: "用户下单后返现一定的金额到余额,可促进复购",
},
{