web/src/components/member/memberProfile/Exchange.vue

170 lines
4.2 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>
<Mask :width="540" :height="363" :is-show="isExchange" @close="close" :title="'兑换积分'"
:show-footer="true">
<div class="content_grant">
<div class="head">
<img style="width: 60px;height: 60px"
:src="'/static/images/member/' + (props.info.sex === 1 ? 'man' : 'women') + '.png'"
alt="">
<div class="right">
<div class="name">
{{ props.info.name }}
</div>
<div class="text">
<div class="phone">
{{ props.info.phone }}
</div>
<div class="grant-name">
积分
<img style="width: 16px;height: 16px" src="/static/images/member/1.png" alt="">
<span class="num">{{ props.info.integralBalance }}</span>
</div>
</div>
</div>
</div>
<div style="width: 100%">
<el-form
label-position="top" :rules="rules" ref="formDataRef" :model="data"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="兑换积分" prop="integral">
<el-input placeholder="请输入兑换积分" v-model="data.integral"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="兑换备注" prop="remark">
<el-input placeholder="请输入兑换备注" v-model="data.remark"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<template #footer>
<div class="footer">
<div>
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
</div>
<div style="display:flex;">
<div class="default-btn" @click="reduceIntegral">兑换</div>
<div class="default-btn" style="margin-left: 24px" @click="close">取消</div>
</div>
</div>
</template>
</Mask>
</template>
<script setup lang="ts">
import {ref, defineEmits, defineProps} from 'vue'
import {ElFormItem} from "element-plus";
import {post} from "@/utils/request.ts";
import Mask from "@/components/common/Mask.vue";
const isExchange = defineModel()
const emit = defineEmits(['close'])
const props = defineProps({
info: {
type: Object,
default: () => ({})
}
})
const printReceipt = ref(false)
const close = () => {
data.value = {}
emit('close')
}
const rules = {
integral: [
{required: true, message: '请输入兑换积分', trigger: 'blur'},
{min: 1, message: '积分不能小于1', trigger: 'blur'}
],
remark: [
{required: true, message: '请输入兑换备注', trigger: 'blur'},
]
}
const data = ref<any>({
integral: 0,
});
const formDataRef = ref();
const reduceIntegral = () => {
formDataRef.value?.validate((valid: boolean) => {
if (!valid) {
return;
}
// 如果验证通过,发送请求
data.value.integral = data.value.integral * -1
data.value.vipId = props.info.id
post("vip/integral/add", data.value).then((res: any) => {
formDataRef.value?.resetFields();
close()
})
});
}
</script>
<style scoped lang="scss">
.content_grant {
height: 100%;
padding: 24px;
.head {
height: 60px;
display: flex;
align-items: center;
margin-bottom: 16px;
.right {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.name {
font-weight: bold;
font-size: 24px;
color: #333333;
line-height: 33px;
text-align: left;
font-style: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.text {
margin-top: 4px;
display: flex;
.phone {
margin-right: 20px;
}
.grant-name {
display: flex;
.num {
font-weight: bold;
font-size: 24px;
color: #4D6DE4;
font-style: normal;
line-height: 16px;
margin-left: 6px;
}
}
}
}
}
}
.footer {
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 24px;
}
</style>