Lufaneng 11 months ago
parent 158713e3b8
commit 1f735c5c53

@ -49,7 +49,7 @@
negative: item.amount < 0,
}"
>
{{ item.amount > 0 ? "+" : "" }}¥{{
{{ item.amount > 0 ? "+" : "-" }}¥{{
Math.abs(item.amount).toFixed(2)
}}
</view>

@ -1,457 +1,431 @@
<template>
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header-title">管理您的账户信息和服务</view>
</view>
<!-- 用户信息卡片 -->
<view class="user-card">
<view class="user-info">
<image
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header-title">管理您的账户信息和服务</view>
</view>
<!-- 用户信息卡片 -->
<view class="user-card">
<view class="user-info">
<div class="avatar"></div>
<!-- <image
class="avatar"
src="/static/imgs/avatar.png"
mode="aspectFill"
></image>
<view class="user-details">
<view class="username">
张三
<u-icon
name="checkmark-circle-fill"
color="#ffa500"
size="16"
></u-icon>
</view>
<view class="user-id">用户ID: U12345678</view>
<view class="membership">
会员等级: 年会员 (有效期至: 2026-05-15)
</view>
</view>
</view>
<view class="edit-btn" @click="editProfile">
<text>点击编辑资料</text>
</view>
</view>
<!-- 账户余额 -->
<view class="balance-card">
<view class="balance-header">
<view class="balance-label">账户余额</view>
<u-button type="default" size="small" shape="round" @click="recharge">
充值
</u-button>
</view>
<view class="balance-amount">¥50.00</view>
</view>
<!-- 会员套餐 -->
<view class="membership-section">
<view class="membership-grid">
<view
class="membership-item"
:class="{ active: selectedPlan === 'monthly' }"
@click="selectPlan('monthly')"
>
<view class="tag new">新人特惠</view>
<view class="plan-name">包月会员</view>
<view class="plan-price">¥120</view>
</view>
<view
class="membership-item"
:class="{ active: selectedPlan === 'season' }"
@click="selectPlan('season')"
>
<view class="tag popular">最受欢迎</view>
<view class="plan-name">包季会员</view>
<view class="plan-price">¥300</view>
<view class="plan-discount">立减¥60</view>
</view>
<view
class="membership-item"
:class="{ active: selectedPlan === 'yearly' }"
@click="selectPlan('yearly')"
>
<view class="tag yearly">年度首享</view>
<view class="plan-name">包年会员</view>
<view class="plan-price">¥1000</view>
<view class="plan-discount">立减¥440</view>
</view>
</view>
</view>
<!-- 支付方式 -->
<view class="payment-section">
<view
class="payment-item"
:class="{ active: selectedPayment === 'alipay' }"
@click="selectPayment('alipay')"
>
<view class="payment-info">
<u-icon name="alipay-circle-fill" color="#1677ff" size="24"></u-icon>
<text class="payment-name">支付宝</text>
</view>
<u-icon
:name="
selectedPayment === 'alipay'
? 'checkmark-circle-fill'
: 'radio-button-off'
"
:color="selectedPayment === 'alipay' ? '#ff3333' : '#ccc'"
size="20"
></u-icon>
</view>
<view
class="payment-item"
:class="{ active: selectedPayment === 'wechat' }"
@click="selectPayment('wechat')"
>
<view class="payment-info">
<u-icon name="weixin-fill" color="#07c160" size="24"></u-icon>
<text class="payment-name">支付宝</text>
</view>
<u-icon
:name="
selectedPayment === 'wechat'
? 'checkmark-circle-fill'
: 'radio-button-off'
"
:color="selectedPayment === 'wechat' ? '#ff3333' : '#ccc'"
size="20"
></u-icon>
</view>
</view>
<!-- 底部按钮 -->
<view class="bottom-section">
<u-button
type="primary"
size="large"
@click="confirmPayment"
:loading="paying"
>
确认支付
</u-button>
<view class="agreement">
购买前请仔细阅读
<text class="link" @click="showAgreement"></text>
</view>
</view>
</view>
></image> -->
<view class="user-details">
<view class="username">
张三
<u-icon name="checkmark-circle-fill" color="#ffa500" size="16"></u-icon>
</view>
<view class="user-id">用户ID: U12345678</view>
<view class="membership">
会员等级: 年会员 (有效期至: 2026-05-15)
</view>
</view>
</view>
<view class="edit-btn" @click="editProfile">
<text>点击编辑资料</text>
</view>
</view>
<!-- 账户余额 -->
<view class="balance-card">
<div>
<view class="balance-header">
<view class="balance-label">账户余额</view>
</view>
<view class="balance-amount">¥50.00</view>
</div>
<uv-button type="primary" color="#fff" customStyle="color:#000;width:90px" shape="circle" @click="recharge">
充值
</uv-button>
</view>
<!-- 会员套餐 -->
<view class="membership-section">
<view class="membership-grid">
<view class="membership-item" :class="{ active: selectedPlan === 'monthly' }"
@click="selectPlan('monthly')">
<view class="tag">新人特惠</view>
<view class="plan-name">包月会员</view>
<view class="plan-price">¥120</view>
</view>
<view class="membership-item" :class="{ active: selectedPlan === 'season' }"
@click="selectPlan('season')">
<view class="tag">最受欢迎</view>
<view class="plan-name">包季会员</view>
<view class="plan-price">¥300</view>
<view class="plan-discount">立减¥60</view>
</view>
<view class="membership-item" :class="{ active: selectedPlan === 'yearly' }"
@click="selectPlan('yearly')">
<view class="tag">年度首享</view>
<view class="plan-name">包年会员</view>
<view class="plan-price">¥1000</view>
<view class="plan-discount">立减¥440</view>
</view>
</view>
</view>
<!-- 支付方式 -->
<view class="payment-section">
<view class="payment-item" :class="{ active: selectedPayment === 'alipay' }"
@click="selectPayment('alipay')">
<view class="payment-info">
<uv-icon name="shopping-cart-fill" color="#1677ff" size="24"></uv-icon>
<text class="payment-name">支付宝</text>
</view>
<uv-icon name="checkmark-circle-fill" :color="selectedPayment === 'alipay' ? '#ff3333' : '#ccc'"
size="20"></uv-icon>
</view>
<view class="payment-item" :class="{ active: selectedPayment === 'wechat' }"
@click="selectPayment('wechat')">
<view class="payment-info">
<uv-icon name="weixin-fill" color="#07c160" size="24"></uv-icon>
<text class="payment-name">微信</text>
</view>
<uv-icon name="checkmark-circle-fill" :color="selectedPayment === 'wechat' ? '#ff3333' : '#ccc'"
size="20"></uv-icon>
</view>
</view>
<!-- 底部按钮 -->
<view class="bottom-section">
<uv-button type="primary" size="large" @click="confirmPayment" :loading="paying">
确认支付
</uv-button>
<view class="agreement">
购买前请仔细阅读
<text class="link" @click="showAgreement"></text>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from "vue";
import HeaderCustom from "/components/HeaderCustom/HeaderCustom.vue";
import { useAuthStore, useUserStore } from "@/store";
import RPC from "@/utils/request";
const modal = ref(null);
const authStore = useAuthStore();
const userStore = useUserStore();
//
const selectedPlan = ref("season"); //
const selectedPayment = ref("alipay"); //
const paying = ref(false);
//
const selectPlan = (plan) => {
selectedPlan.value = plan;
};
//
const selectPayment = (payment) => {
selectedPayment.value = payment;
};
//
const editProfile = () => {
uni.navigateTo({
url: "/pagesA/edit-profile/edit-profile",
});
};
//
const recharge = () => {
uni.navigateTo({
url: "/pages/recharge/recharge",
});
};
//
const confirmPayment = async () => {
if (!selectedPlan.value) {
uni.showToast({
title: "请选择会员套餐",
icon: "none",
});
return;
}
if (!selectedPayment.value) {
uni.showToast({
title: "请选择支付方式",
icon: "none",
});
return;
}
paying.value = true;
try {
const params = {
plan: selectedPlan.value,
paymentMethod: selectedPayment.value,
};
// API
// const result = await RPC.post('/api/payment', params)
uni.showToast({
title: "正在跳转支付...",
icon: "loading",
duration: 2000,
});
//
setTimeout(() => {
uni.showToast({
title: "支付成功",
icon: "success",
});
paying.value = false;
}, 2000);
} catch (error) {
console.error("支付失败:", error);
uni.showToast({
title: "支付失败,请重试",
icon: "none",
});
paying.value = false;
}
};
//
const showAgreement = () => {
uni.navigateTo({
url: "/pages/agreement/agreement",
});
};
import {
ref
} from "vue";
import HeaderCustom from "/components/HeaderCustom/HeaderCustom.vue";
import {
useAuthStore,
useUserStore
} from "@/store";
import RPC from "@/utils/request";
const modal = ref(null);
const authStore = useAuthStore();
const userStore = useUserStore();
//
const selectedPlan = ref("season"); //
const selectedPayment = ref("alipay"); //
const paying = ref(false);
//
const selectPlan = (plan) => {
selectedPlan.value = plan;
};
//
const selectPayment = (payment) => {
selectedPayment.value = payment;
};
//
const editProfile = () => {
uni.navigateTo({
url: "/pagesA/edit-profile/edit-profile",
});
};
//
const recharge = () => {
uni.navigateTo({
url: "/pages/recharge/recharge",
});
};
//
const confirmPayment = async () => {
if (!selectedPlan.value) {
uni.showToast({
title: "请选择会员套餐",
icon: "none",
});
return;
}
if (!selectedPayment.value) {
uni.showToast({
title: "请选择支付方式",
icon: "none",
});
return;
}
paying.value = true;
try {
const params = {
plan: selectedPlan.value,
paymentMethod: selectedPayment.value,
};
// API
// const result = await RPC.post('/api/payment', params)
uni.showToast({
title: "正在跳转支付...",
icon: "loading",
duration: 2000,
});
//
setTimeout(() => {
uni.showToast({
title: "支付成功",
icon: "success",
});
paying.value = false;
}, 2000);
} catch (error) {
console.error("支付失败:", error);
uni.showToast({
title: "支付失败,请重试",
icon: "none",
});
paying.value = false;
}
};
//
const showAgreement = () => {
uni.navigateTo({
url: "/pages/agreement/agreement",
});
};
</script>
<style lang="scss" scoped>
.container {
font-size: 14px;
min-height: 100vh;
background: linear-gradient(180deg, #7b9cdb 0%, #f8f8f8 40%);
padding-bottom: 120px;
}
.header {
padding: 20px 16px 16px;
.header-title {
color: white;
font-size: 18px;
font-weight: 500;
}
}
.user-card {
margin: 0 16px 16px;
background: white;
border-radius: 12px;
padding: 16px;
.user-info {
display: flex;
align-items: center;
margin-bottom: 12px;
.avatar {
width: 60px;
height: 60px;
border-radius: 50%;
margin-right: 12px;
}
.user-details {
flex: 1;
.username {
display: flex;
align-items: center;
gap: 4px;
font-size: 18px;
font-weight: bold;
color: #333;
margin-bottom: 4px;
}
.user-id {
font-size: 12px;
color: #999;
margin-bottom: 2px;
}
.membership {
font-size: 12px;
color: #999;
}
}
}
.edit-btn {
text-align: right;
color: #4285f4;
font-size: 14px;
}
}
.balance-card {
margin: 0 16px 16px;
background: linear-gradient(135deg, #4285f4 0%, #6fa8f5 100%);
border-radius: 12px;
padding: 20px;
color: white;
.balance-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
.balance-label {
font-size: 14px;
opacity: 0.9;
}
}
.balance-amount {
font-size: 32px;
font-weight: bold;
}
}
.membership-section {
margin: 0 16px 24px;
.membership-grid {
display: flex;
gap: 8px;
.membership-item {
flex: 1;
background: white;
border-radius: 12px;
padding: 16px 12px;
text-align: center;
position: relative;
border: 2px solid transparent;
transition: all 0.3s;
&.active {
border-color: #4285f4;
background-color: #f0f7ff;
}
.tag {
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%);
padding: 2px 8px;
border-radius: 8px;
font-size: 10px;
color: white;
&.new {
background: #ff6b6b;
}
&.popular {
background: #ff3333;
}
&.yearly {
background: #ff3333;
}
}
.plan-name {
font-size: 14px;
color: #333;
margin: 12px 0 8px;
}
.plan-price {
font-size: 20px;
font-weight: bold;
color: #ff3333;
margin-bottom: 4px;
}
.plan-discount {
font-size: 12px;
color: #999;
}
}
}
}
.payment-section {
margin: 0 16px 24px;
.payment-item {
display: flex;
align-items: center;
justify-content: space-between;
background: white;
border-radius: 12px;
padding: 16px;
margin-bottom: 8px;
border: 1px solid #e5e5e5;
transition: all 0.3s;
&.active {
border-color: #4285f4;
background-color: #f0f7ff;
}
&:last-child {
margin-bottom: 0;
}
.payment-info {
display: flex;
align-items: center;
gap: 12px;
.payment-name {
font-size: 14px;
color: #333;
}
}
}
}
.bottom-section {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: white;
padding: 16px;
border-top: 1px solid #e5e5e5;
.agreement {
text-align: center;
font-size: 12px;
color: #999;
margin-top: 12px;
.link {
color: #4285f4;
}
}
}
.container {
font-size: 14px;
background: linear-gradient(180deg, #7b9cdb 0%, #f8f8f8 40%);
padding-bottom: 120px;
}
.header {
padding: 20px 16px 16px;
.header-title {
color: white;
font-size: 18px;
font-weight: 500;
}
}
.user-card {
margin: 0 16px 16px;
background: white;
border-radius: 12px;
padding: 16px;
position: relative;
.user-info {
display: flex;
align-items: center;
// margin-bottom: 12px;
.avatar {
width: 60px;
height: 60px;
border-radius: 50%;
margin-right: 12px;
background-color: skyblue;
overflow: hidden;
.img {
width: 100%;
height: 100%;
}
}
.user-details {
flex: 1;
.username {
display: flex;
align-items: center;
gap: 4px;
font-size: 18px;
font-weight: bold;
color: #333;
margin-bottom: 4px;
}
.user-id {
font-size: 12px;
color: #999;
margin-bottom: 2px;
}
.membership {
font-size: 12px;
color: #999;
}
}
}
.edit-btn {
text-align: right;
color: #4285f4;
font-size: 14px;
position: absolute;
top: 10px;
right: 20px;
}
}
.balance-card {
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 16px 16px;
background: linear-gradient(135deg, #4285f4 0%, #6fa8f5 100%);
border-radius: 12px;
padding: 16px;
color: white;
.balance-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
.balance-label {
font-size: 14px;
opacity: 0.9;
}
}
.balance-amount {
font-size: 28px;
font-weight: bold;
}
}
.membership-section {
margin: 0 16px 16px;
.membership-grid {
display: flex;
gap: 8px;
.membership-item {
flex: 1;
background: white;
border-radius: 12px;
padding: 16px 12px;
text-align: center;
position: relative;
border: 2px solid transparent;
transition: all 0.3s;
overflow: hidden;
&.active {
border-color: #4285f4;
background-color: #f0f7ff;
}
.tag {
position: absolute;
top: 0px;
left: 0;
padding: 2px 8px;
border-radius: 0 0 10px 0;
font-size: 10px;
color: white;
background: #ff3333;
}
.plan-name {
font-size: 14px;
color: #333;
margin: 12px 0 8px;
}
.plan-price {
font-size: 20px;
font-weight: bold;
color: #ff3333;
margin-bottom: 4px;
}
.plan-discount {
font-size: 12px;
color: #999;
}
}
}
}
.payment-section {
margin: 0 16px 24px;
.payment-item {
display: flex;
align-items: center;
justify-content: space-between;
background: white;
border-radius: 12px;
padding: 16px;
margin-bottom: 8px;
border: 1px solid #e5e5e5;
transition: all 0.3s;
&.active {
border-color: #4285f4;
background-color: #f0f7ff;
}
&:last-child {
margin-bottom: 0;
}
.payment-info {
display: flex;
align-items: center;
gap: 12px;
.payment-name {
font-size: 14px;
color: #333;
}
}
}
}
.bottom-section {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: white;
padding: 16px;
border-top: 1px solid #e5e5e5;
.agreement {
text-align: center;
font-size: 12px;
color: #999;
margin-top: 12px;
.link {
color: #4285f4;
}
}
}
</style>
Loading…
Cancel
Save