Ai_GirlFriend/xuniYou/pages/index/gift.vue
2026-01-31 19:15:41 +08:00

612 lines
12 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>
<view>
<view class="body">
<uni-nav-bar fixed statusBar left-icon="left" background-color="transparent" :border="false"
@clickLeft="back" title="礼物匣"></uni-nav-bar>
<image class="back"
src="https://nvlovers.oss-cn-qingdao.aliyuncs.com/uploads/20251226/5199a68fb335c7d892665b66637f60c4.png"
mode="widthFix"></image>
<view class="list">
<image class="list_logo"
src="https://nvlovers.oss-cn-qingdao.aliyuncs.com/uploads/20251226/46d5916a03a8238f490572968c6c0745.png"
mode="widthFix"></image>
<view class="list_content">
<image class="list_backA"
src="https://nvlovers.oss-cn-qingdao.aliyuncs.com/uploads/20251226/0194a1e146a0c97a2aef81e7cc503b9a.png"
mode="widthFix"></image>
<view class="list_module">
<view class="list_detail fa sb">
<view class="list_title">您的礼物都在这哦</view>
<!-- <view class="list_all fa">全部<image src="/static/images/gift_down.png"></image>
</view> -->
</view>
<view class="list_body">
<scroll-view class="list_scrollDetail" :scroll-y="true" :style="{ height: 'calc(32vh)' }"
show-scrollbar>
<view class="gift-container">
<view class="list_item faj fc" v-for="(item, index) in giftOptions" :key="index"
@click="giftClick(index)">
<view class="list_image faj">
<image class="list_border"
src="https://nvlovers.oss-cn-qingdao.aliyuncs.com/uploads/20251226/5b531717d4ecd0fd23b49d1541135f5a.png">
</image>
<image class="list_picture" :src="global + item.image"></image>
<!-- <image class="list_tag" v-if="index === 0"
src="/static/images/gift_tag.png">
</image> -->
</view>
<view class="list_name">{{ item.name }}</view>
</view>
</view>
</scroll-view>
</view>
<view class="list_btn faj" @click="detailClick()">送Ta礼物</view>
</view>
</view>
</view>
</view>
<view class="alert" v-if="giftStats">
<view class="alert_content">
<view class="alert_title">礼物详情
<image src="/static/images/close.png" @click="closeClick()"></image>
</view>
<view class="alert_module fa">
<image class="alert_image" :src="global + giftInfoOptions.image" mode="aspectFill"></image>
<view class="alert_alert f1">
<view class="alert_item fa">
<image src="/static/images/star.png"></image>
<view class="alert_name">{{ giftInfoOptions.name ? giftInfoOptions.name : '' }}</view>
<image src="/static/images/star.png"></image>
</view>
<view class="alert_explain">送心愿瓶帮ta实现心愿 </view>
<view class="alert_add">+{{ giftInfoOptions.intimacy_value ? giftInfoOptions.intimacy_value :
'0' }}亲密度</view>
<view class="alert_money fx">{{ giftInfoOptions.price ? giftInfoOptions.price :
'0' }}<text>金币</text></view>
</view>
</view>
<view class="alert_number fa">
<view class="alert_number_title">数量</view>
<view class="alert_number_content fa">
<image src="/static/images/minus.png" @click="decreaseNumber"></image>
<input v-model="form.nums" type="number" min="1" placeholder-class="alert_number_value" />
<image src="/static/images/add.png" @click="increaseNumber"></image>
</view>
</view>
<view class="alert_balance">余额:{{ userInfo.money }}金币</view>
<view class="alert_btn faj" @click="giveClick()">
<!-- <text>购买</text> -->
<text v-if="(giftInfoOptions.price*form.nums) > userInfo.money">充值并赠送</text>
<text v-else>赠送Ta</text>
</view>
</view>
</view>
<view class="success faj" v-if="successStats">
<view class="success_content faj">
<image src="/static/images/success.png" mode="widthFix"></image>
<view class="success_title">购买成功亲密度+10</view>
</view>
</view>
</view>
</template>
<script>
import {
GiftsLists,
GiftsGive,
GetUserBasic,
GiftsGiveApi,
CreateGiftsOrderApi,
JinbiPayApi,
} from '@/utils/api.js'
import notHave from '@/components/not-have.vue';
import topSafety from '@/components/top-safety.vue';
export default {
components: {
notHave,
topSafety,
},
data() {
return {
global: this.baseURL,
giftStats: false,
successStats: false,
selectedAvatarIndex: 0, // 默认选中第一项
form: {
gifts_id: '',
nums: 1,
to_user_id: '',
},
giftOptions: [],
giftInfoOptions: '',
userInfo: {},
}
},
onLoad(options) {
this.form.to_user_id = options.userId
this.giftsLists()
this.getUserBasic()
console.log(this.global)
},
methods: {
getUserBasic() {
GetUserBasic({}).then(res => {
if (res.code == 1) {
this.userInfo = res.data
}
})
},
giftsLists() {
GiftsLists({}).then(res => {
if (res.code == 1) {
this.giftOptions = res.data.data
console.log(this.giftOptions)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
position: 'top'
})
}
})
},
// 赠送礼物
giftsGive() {
let url = ''
// form.to_user_id 为空时,为赠送礼物给女友 有值是赠送给好友
if (this.form.to_user_id == '' || this.form.to_user_id == undefined) {
url = GiftsGiveApi
} else {
url = GiftsGive
}
url(this.form).then(res => {
if (res.code == 1) {
uni.showToast({
title: '赠送成功',
icon: 'none',
position: 'top'
})
setTimeout(() => {
this.getUserBasic()
this.giftStats = false
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
position: 'top'
})
}
})
},
back() {
uni.navigateBack({
delta: 1,
});
},
selectAvatar(index) {
this.selectedAvatarIndex = index;
},
detailClick() {
// this.giftStats = true
uni.showToast({
title: '请选择要赠送的礼物',
icon: 'none',
position: 'top'
})
},
giftClick(index) {
this.giftInfoOptions = this.giftOptions[index]
console.log(this.giftInfoOptions)
if (this.giftStats) {
this.giftStats = false
} else {
this.giftStats = true
}
},
giveClick() {
this.form.gifts_id = this.giftInfoOptions.id
console.log(this.giftInfoOptions.price * this.form.nums)
if ((this.giftInfoOptions.price * this.form.nums) > this.userInfo.money) {
this.giftsTopUp()
} else {
this.giftsGive()
}
},
// 礼物充值
giftsTopUp() {
CreateGiftsOrderApi({
gifts_id: this.giftInfoOptions.id,
nums: this.form.nums,
pay_type: 'miniWechat'
}).then(res => {
if (res.code == 1) {
this.goPay(res.data.out_trade_no)
}
})
},
// 模拟支付
goPay(orderId) {
JinbiPayApi({
out_trade_no: orderId
}).then(res => {
if (res.code == 1) {
setTimeout(() => {
this.giftsGive()
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
position: 'top'
})
}
})
},
closeClick() {
this.giftStats = false
this.form.nums = 1
this.giftInfoOptions = ''
},
increaseNumber() {
this.form.nums = parseInt(this.form.nums) || 0;
this.form.nums++;
},
decreaseNumber() {
this.form.nums = parseInt(this.form.nums) || 0;
if (this.form.nums > 0) {
this.form.nums--;
}
},
showsChat() {
uni.showModal({
// title: '提示',
content: '栏位已满,请删除后再使用?',
success: (res) => {
if (res.confirm) {
this.form.orderDetailList.splice(e, 1)
}
},
fail: (res) => {
console.log(res)
}
})
}
}
}
</script>
<style>
.body {
position: relative;
}
.back {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 1624rpx;
display: block;
}
.body {
position: relative;
}
.list {
position: relative;
}
.list_logo {
margin: -140rpx 0 0 0;
width: 100%;
height: 556rpx;
display: block;
}
.list_content {
position: relative;
}
.list_backA {
position: absolute;
left: 0;
right: 0;
top: 0;
width: 100%;
display: block;
}
.list_module {
position: relative;
padding: 46rpx 34rpx;
}
.list_detail {
position: relative;
}
.list_title {
font-weight: 400;
font-size: 32rpx;
color: #CC9DFF;
line-height: 50rpx;
}
.list_all {
padding: 5rpx 16rpx 5rpx 28rpx;
font-weight: 400;
font-size: 28rpx;
color: #F661B5;
line-height: 50rpx;
background: rgba(255, 255, 255, 0.3);
border-radius: 78rpx;
}
.list_all image {
width: 36rpx;
height: 36rpx;
}
.list_body {
position: relative;
margin: 54rpx 0 0 0;
}
.gift-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.list_item {
position: relative;
width: 30%;
margin-bottom: 40rpx;
}
.list_scrollDetail {
position: relative;
}
.list_image {
position: relative;
width: 176rpx;
height: 176rpx;
}
.list_border {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: block;
}
.list_picture {
position: relative;
width: 120rpx;
height: 120rpx;
display: block;
}
.list_tag {
position: absolute;
right: -40rpx;
top: -10rpx;
width: 68rpx;
height: 66rpx;
}
.list_name {
margin: 8rpx 0 0 0;
font-weight: 500;
font-size: 30rpx;
color: #F661B5;
line-height: 50rpx;
text-align: center;
}
.list_btn {
margin: 150rpx 0 0 0;
padding: 24rpx 0;
font-weight: 400;
font-size: 32rpx;
color: #FFFFFF;
line-height: 50rpx;
background: linear-gradient(135deg, #F0BDDD 0%, #A89CF7 100%);
border-radius: 12rpx;
}
.alert {
position: fixed;
width: 100%;
height: 100%;
left: 0;
bottom: 0;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.2);
z-index: 2;
}
.alert_content {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(180deg, #EDD6F5 0%, #FFFFFF 100%);
border-radius: 40rpx 40rpx 0rpx 0rpx;
padding: 46rpx 40rpx 68rpx 40rpx;
}
.alert_title {
position: relative;
font-weight: 500;
font-size: 36rpx;
color: #333333;
line-height: 50rpx;
text-align: center;
}
.alert_title image {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 30rpx;
height: 30rpx;
margin: auto 0;
}
.alert_module {
position: relative;
margin: 68rpx 0 58rpx 0;
}
.alert_image {
width: 256rpx;
height: 256rpx;
display: block;
}
.alert_alert {
position: relative;
margin: 0 0 0 62rpx;
}
.alert_item {
position: relative;
margin: 0 0 0 44rpx;
}
.alert_item image {
width: 36rpx;
height: 48rpx;
}
.alert_name {
margin: 0 14rpx;
font-weight: 500;
font-size: 32rpx;
color: #9779FA;
line-height: 50rpx;
}
.alert_explain {
margin: 18rpx 0 0 0;
font-weight: 400;
font-size: 26rpx;
color: #9779FA;
line-height: 50rpx;
}
.alert_add {
margin: 0 0 0 80rpx;
font-weight: 400;
font-size: 26rpx;
color: #9779FA;
line-height: 50rpx;
}
.alert_money {
margin: 28rpx 0 0 0;
font-weight: 700;
font-size: 44rpx;
color: #FF0000;
line-height: 50rpx;
}
.alert_money text {
font-size: 28rpx;
line-height: 65rpx;
}
.alert_number {
position: relative;
}
.alert_number_title {
font-weight: 400;
font-size: 32rpx;
color: #222222;
line-height: 50rpx;
}
.alert_number_content {
margin: 0 0 0 100rpx;
position: relative;
}
.alert_number_content image {
width: 64rpx;
height: 64rpx;
}
.alert_number_content input {
padding: 0 8rpx;
width: 78rpx;
font-weight: 500;
font-size: 28rpx;
color: #000000;
line-height: 40rpx;
text-align: center;
}
.alert_number_value {
color: #333333;
}
.alert_balance {
margin: 78rpx 0 26rpx 0;
font-weight: 500;
font-size: 30rpx;
color: #909090;
line-height: 50rpx;
text-align: center;
}
.alert_btn {
position: relative;
padding: 26rpx 112rpx;
font-weight: 500;
font-size: 30rpx;
line-height: 50rpx;
border-radius: 12rpx;
color: #FFFFFF;
background: linear-gradient(135deg, #9F47FF 0%, #0053FA 100%), #D8D8D8;
}
.success {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
z-index: 2;
}
.success_content {
position: relative;
padding: 22rpx 38rpx;
background: #9779FA;
border-radius: 20rpx;
}
.success image {
margin: 0 20rpx 0 0;
width: 32rpx;
height: 32rpx;
}
.success_title {
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
line-height: 50rpx;
}
</style>