You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
579 lines
15 KiB
579 lines
15 KiB
<template>
|
|
<div class="integral_goods_detail wrapper_1200">
|
|
<div class="crumbs">
|
|
<el-breadcrumb separator="/">
|
|
<el-breadcrumb-item :to="{ path: '/integral' }">全部商品</el-breadcrumb-item>
|
|
<el-breadcrumb-item>其他</el-breadcrumb-item>
|
|
</el-breadcrumb>
|
|
</div>
|
|
<div class="top">
|
|
<div class="top_left_img">
|
|
<img :src="imgUrl + goodsList.image" alt />
|
|
</div>
|
|
<div class="top_right">
|
|
<div class="top_right_title">{{ goodsList.name }}</div>
|
|
<p class="top_right_txt">
|
|
{{ goodsList.content }}
|
|
</p>
|
|
<div class="l">
|
|
<img src="../../assets/images/integral_exchange.png" alt />
|
|
<p v-if="goodsList.type == 1">
|
|
{{ goodsList.point }}积分+{{ goodsList.price }}元
|
|
</p>
|
|
<p v-if="goodsList.type == 2">{{ goodsList.point }}积分</p>
|
|
</div>
|
|
|
|
<div class="r">库存:{{ goodsList.stock }}</div>
|
|
<div class="r">限定兑换:{{ goodsList.limit_num }}件</div>
|
|
<div class="r">已兑换:{{ goodsList.ready_num }}件</div>
|
|
<p class="r">兑换规则:{{ goodsList.rule }}</p>
|
|
<div class="top_right_btn">
|
|
<el-button
|
|
v-if="goodsList.ready_num < goodsList.limit_num"
|
|
size="small"
|
|
type="primary"
|
|
icon="el-icon-goods"
|
|
@click="exchange"
|
|
>立即兑换</el-button
|
|
>
|
|
<el-button v-else size="small" type="info" icon="el-icon-goods" disabled
|
|
>已兑换</el-button
|
|
>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- <div class="bottom">
|
|
<div class="bottom_title">商品详情</div>
|
|
|
|
<p class="goods_detail_option_text">
|
|
<span>商品型号:28g/袋</span>
|
|
<span>产地:山东</span>
|
|
<span>规格:28g/袋</span>
|
|
<span>执行标准:《中国药典》2022年版一部</span>
|
|
<span>生产企业:安国市远光药业有限公司</span>
|
|
</p>
|
|
|
|
<div class="goods_detail_option_banner">
|
|
<img :src="imgUrl+goodsList.image" alt />
|
|
</div>
|
|
</div> -->
|
|
|
|
<!-- 立即兑换 -->
|
|
<DialogSlot
|
|
:dialogSlotShow.sync="exchangeDialog"
|
|
@done="reload"
|
|
:titleShow="false"
|
|
:cancelText="'返回'"
|
|
:confirmText="'确认兑换'"
|
|
@clickConfirm="exchangeSubmit"
|
|
>
|
|
<template v-slot:contentSlot>
|
|
<div class="integraldialog">
|
|
<div class="nav">
|
|
<div class="nav_img">
|
|
<img :src="imgUrl + goodsList.image" alt />
|
|
</div>
|
|
<div class="nav_txt">
|
|
<div class="nav_title">{{ goodsList.name }}</div>
|
|
<div class="nav_num">
|
|
<img src="../../assets/images/integral_exchange.png" alt />
|
|
<p v-if="goodsList.type == 1">
|
|
{{ goodsList.point }}积分
|
|
<span v-if="Number(goodsList.price)">+{{ goodsList.price }}元</span>
|
|
</p>
|
|
<p v-if="goodsList.type == 2">{{ goodsList.point }}积分</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="content">
|
|
<!-- <div class="content_Service">
|
|
<div class="content_title">服务</div>
|
|
<div style="color: #999999">不支持退换</div>
|
|
</div> -->
|
|
<div class="content_num">
|
|
<div class="content_title">购买数量</div>
|
|
<div style="color: #999999">商品限购{{ goodsList.limit_num }}件</div>
|
|
<div>
|
|
<el-input-number
|
|
size="mini"
|
|
:max="goodsList.limit_num"
|
|
:min="0"
|
|
v-model="integralNum"
|
|
></el-input-number>
|
|
</div>
|
|
</div>
|
|
<div class="content_address" v-if="goodsList.type == 1">
|
|
<div class="content_title">收货地址</div>
|
|
<div class="content_address_user">
|
|
<div>{{ addressList.name }} {{ addressList.mobile }}</div>
|
|
<div>
|
|
<span style="color: #999999"
|
|
>{{ addressList.full_address }}{{ addressList.address }}</span
|
|
>
|
|
<span style="color: var(--themeColor)">
|
|
<i class="el-icon-edit" @click="changeAddress"></i>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="content_num" v-if="Number(goodsList.price)">
|
|
账户余额:{{ balance }}元
|
|
</div>
|
|
<div style="color: #ff7d02">
|
|
<p>
|
|
<span>需支付:{{ integralNum * Number(goodsList.point) }}积分 </span>
|
|
<span v-if="Number(goodsList.price)">
|
|
+{{ integralNum * Number(goodsList.price) }}元</span
|
|
>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</DialogSlot>
|
|
|
|
<!-- 更换地址 -->
|
|
<DialogSlot
|
|
:dialogSlotShow.sync="exchangeAddress"
|
|
@done="reload"
|
|
:tipsText="'选择地址'"
|
|
:cancelText="'返回'"
|
|
@clickConfirm="changeAddressBtn"
|
|
>
|
|
<template v-slot:contentSlot>
|
|
<div class="select_address">
|
|
<el-radio-group v-model="defaultAddress">
|
|
<el-radio
|
|
class="select_address_list"
|
|
:label="item.id"
|
|
v-for="(item, index) in allAddressList"
|
|
:key="index"
|
|
@change="changeAddressRadio(item)"
|
|
>
|
|
<div class="select_address_txt">
|
|
<div style="color: #222">
|
|
<span>{{ item.name }}</span>
|
|
<span>{{ item.mobile }}</span>
|
|
</div>
|
|
<div style="color: #999">{{ item.full_address }}{{ item.address }}</div>
|
|
</div>
|
|
</el-radio>
|
|
</el-radio-group>
|
|
</div>
|
|
</template>
|
|
</DialogSlot>
|
|
|
|
<!-- 兑换成功 -->
|
|
<DialogSlot
|
|
:dialogSlotShow.sync="exchangeSuccess"
|
|
@done="reload"
|
|
:titleShow="false"
|
|
:cancelText="'返回首页'"
|
|
:confirmText="'查看订单'"
|
|
@clickCancel="successCancel"
|
|
>
|
|
<template v-slot:contentSlot>
|
|
<div class="changeSuccess">
|
|
<img src="../../assets/images/paySuccess.png" alt />
|
|
<p>兑换成功</p>
|
|
</div>
|
|
</template>
|
|
</DialogSlot>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Setting from "~/setting";
|
|
export default {
|
|
auth: false,
|
|
data() {
|
|
return {
|
|
imgUrl: Setting.uplodBaseURL,
|
|
userInfo: JSON.parse(localStorage.getItem("userInfo")),
|
|
// 是否为虚拟商品
|
|
isFictitious: false,
|
|
|
|
phoneNumber: "",
|
|
goodsList: {},
|
|
// 立即兑换弹框
|
|
exchangeDialog: false,
|
|
integralNum: 0,
|
|
// 更改地址弹框
|
|
exchangeAddress: false,
|
|
defaultAddress: 0,
|
|
allAddressList: [],
|
|
addressList: {},
|
|
// 兑换成功
|
|
exchangeSuccess: false,
|
|
balance: 0,
|
|
};
|
|
},
|
|
created() {
|
|
// this.goodsList = this.$route.query;
|
|
this.init();
|
|
},
|
|
methods: {
|
|
init() {
|
|
this.getData();
|
|
this.getAddressList({ isALL: false });
|
|
this.getBalance();
|
|
},
|
|
getData() {
|
|
let obj = {
|
|
id: this.$route.query.id,
|
|
};
|
|
this.$axios
|
|
.post(`/goodsexchange/detail`, obj)
|
|
.then((res) => {
|
|
console.log(res.data, `goodsList`);
|
|
this.goodsList = res.data;
|
|
})
|
|
.catch((err) => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
// api/memberaccount/info
|
|
getBalance() {
|
|
let obj = {
|
|
account_type: "balance",
|
|
};
|
|
this.$axios
|
|
.post(`/memberaccount/info`, obj)
|
|
.then((res) => {
|
|
console.log(res.data, `getBalance`);
|
|
this.balance = res.data.balance;
|
|
})
|
|
.catch((err) => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
// 获取默认地址
|
|
getAddressList(OBJ) {
|
|
let obj = {
|
|
member_id: this.userInfo.member_id,
|
|
};
|
|
this.$axios
|
|
.post(`/memberaddress/page`, obj)
|
|
.then((res) => {
|
|
if (!OBJ.isALL) {
|
|
this.addressList = [];
|
|
res.data.list.forEach((item) => {
|
|
if (item.is_default) {
|
|
this.addressList = item;
|
|
}
|
|
});
|
|
} else {
|
|
res.data.list.forEach((item) => {
|
|
if (item.is_default) {
|
|
this.defaultAddress = item.id;
|
|
}
|
|
});
|
|
this.allAddressList = [];
|
|
this.allAddressList = res.data.list;
|
|
}
|
|
console.log(this.addressList);
|
|
console.log(this.allAddressList);
|
|
})
|
|
.catch((err) => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
// 修改默认地址
|
|
changeAddressRadio(val) {
|
|
this.addressList = val;
|
|
},
|
|
// 修改默认地址确认按钮
|
|
changeAddressBtn() {
|
|
this.exchangeAddress = false;
|
|
this.$axios
|
|
.post("/memberaddress/setdefault", {
|
|
id: this.addressList.id,
|
|
})
|
|
.then((res) => {
|
|
this.init();
|
|
})
|
|
.catch((err) => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
reload(e) {
|
|
console.log(e, "0000");
|
|
},
|
|
// 立即兑换弹框
|
|
exchange() {
|
|
this.exchangeDialog = true;
|
|
},
|
|
// 更改地址弹框
|
|
changeAddress() {
|
|
this.exchangeAddress = true;
|
|
this.getAddressList({ isALL: true });
|
|
},
|
|
// 兑换成功
|
|
exchangeSubmit() {
|
|
let obj = {
|
|
goods_id: this.goodsList.id,
|
|
num: this.integralNum,
|
|
store_id: JSON.parse(localStorage.getItem("drugstoreObj")).id,
|
|
member_address: JSON.stringify(this.addressList),
|
|
};
|
|
if (this.goodsList.type == 2) {
|
|
obj.member_address = null;
|
|
}
|
|
console.log(obj);
|
|
this.$axios
|
|
.post("/goodsexchange/doExchange", obj)
|
|
.then((res) => {
|
|
this.exchangeDialog = false;
|
|
// this.exchangeSuccess = true;
|
|
this.$message({
|
|
message: "兑换成功",
|
|
type: "success",
|
|
});
|
|
this.init();
|
|
console.log(res, `兑换成功`);
|
|
})
|
|
.catch((err) => {
|
|
this.$message({
|
|
message: err,
|
|
type: "error",
|
|
});
|
|
});
|
|
},
|
|
successCancel() {
|
|
this.$router.push({ path: "/" });
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.integral_goods_detail {
|
|
.crumbs {
|
|
margin: 20px 0;
|
|
}
|
|
.top {
|
|
width: 1200px;
|
|
height: 380px;
|
|
background: #ffffff;
|
|
border-radius: 4px;
|
|
margin-bottom: 20px;
|
|
padding: 30px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
.top_left_img {
|
|
width: 510px;
|
|
height: 320px;
|
|
background: #ffffff;
|
|
border-radius: 1px;
|
|
}
|
|
.top_right {
|
|
width: 670px;
|
|
height: 320px;
|
|
margin-left: 20px;
|
|
|
|
.top_right_title {
|
|
height: 28px;
|
|
font-size: 20px;
|
|
font-family: PingFangSC-Medium, PingFang SC;
|
|
font-weight: 500;
|
|
color: #222222;
|
|
line-height: 28px;
|
|
}
|
|
.top_right_txt {
|
|
height: 50px;
|
|
font-size: 16px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #585858;
|
|
line-height: 22px;
|
|
margin: 20px 0;
|
|
}
|
|
.l {
|
|
height: 40px;
|
|
font-size: 18px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
line-height: 40px;
|
|
display: flex;
|
|
color: #ff7d02;
|
|
margin-top: 20px;
|
|
img {
|
|
width: 16px;
|
|
height: 16px;
|
|
margin-top: 12px;
|
|
}
|
|
}
|
|
.r {
|
|
height: 20px;
|
|
font-size: 14px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #999999;
|
|
line-height: 20px;
|
|
}
|
|
.top_right_btn {
|
|
margin-top: 30px;
|
|
/deep/ .el-button {
|
|
width: 142px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.bottom {
|
|
width: 1200px;
|
|
height: 655px;
|
|
background: #ffffff;
|
|
border-radius: 4px;
|
|
margin-bottom: 20px;
|
|
padding: 30px;
|
|
.bottom_title {
|
|
height: 22px;
|
|
font-size: 16px;
|
|
font-family: PingFangSC-Medium, PingFang SC;
|
|
font-weight: 500;
|
|
color: #222222;
|
|
line-height: 22px;
|
|
padding-bottom: 40px;
|
|
margin-bottom: 20px;
|
|
border-bottom: #eaeaea solid 1px;
|
|
}
|
|
.goods_detail_option_text {
|
|
margin-bottom: 15px;
|
|
span {
|
|
margin-right: 20px;
|
|
height: 22px;
|
|
font-size: 14px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #666666;
|
|
line-height: 22px;
|
|
}
|
|
}
|
|
.goods_detail_option_banner {
|
|
width: 1140px;
|
|
height: 488px;
|
|
img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
}
|
|
/deep/ .el-dialog__wrapper {
|
|
.integraldialog {
|
|
.nav {
|
|
display: flex;
|
|
.nav_img {
|
|
img {
|
|
width: 140px;
|
|
height: 100px;
|
|
}
|
|
}
|
|
.nav_txt {
|
|
width: 300px;
|
|
|
|
.nav_title {
|
|
height: 25px;
|
|
font-size: 18px;
|
|
font-family: PingFangSC-Medium, PingFang SC;
|
|
font-weight: 500;
|
|
color: #222222;
|
|
line-height: 25px;
|
|
}
|
|
.nav_num {
|
|
height: 20px;
|
|
font-size: 14px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #ff7d02;
|
|
line-height: 20px;
|
|
display: flex;
|
|
margin: 20px 0;
|
|
img {
|
|
width: 18px;
|
|
height: 18px;
|
|
}
|
|
}
|
|
.nav_remarks {
|
|
height: 20px;
|
|
font-size: 14px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #666666;
|
|
line-height: 20px;
|
|
}
|
|
}
|
|
}
|
|
.content {
|
|
width: 100%;
|
|
height: 150px;
|
|
.content_Service,
|
|
.content_num,
|
|
.content_address {
|
|
display: flex;
|
|
margin: 15px 0;
|
|
div {
|
|
margin-right: 40px;
|
|
}
|
|
.content_title {
|
|
width: 56px;
|
|
height: 20px;
|
|
font-size: 14px;
|
|
font-family: PingFangSC-Medium, PingFang SC;
|
|
font-weight: 500;
|
|
color: #222222;
|
|
line-height: 20px;
|
|
}
|
|
.content_address_user {
|
|
div {
|
|
margin-bottom: 15px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.select_address {
|
|
display: flex;
|
|
|
|
padding: 30px;
|
|
/deep/.el-radio-group {
|
|
.select_address_list {
|
|
width: 280px;
|
|
height: 60px;
|
|
line-height: 60px;
|
|
margin-bottom: 20px;
|
|
display: flex;
|
|
.el-radio__input {
|
|
.el-radio__inner {
|
|
margin-top: 23px;
|
|
}
|
|
}
|
|
.select_address_txt {
|
|
width: 320px;
|
|
div {
|
|
line-height: 30px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.changeSuccess {
|
|
img {
|
|
width: 127px;
|
|
height: 127px;
|
|
margin: 10px auto;
|
|
}
|
|
p {
|
|
text-align: center;
|
|
font-size: 16px;
|
|
font-family: PingFangSC-Medium, PingFang SC;
|
|
font-weight: 600;
|
|
color: #222222;
|
|
line-height: 50px;
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|