Compare commits

..

No commits in common. "822e31afbf5cab7d1b5fb8054435be62f9c07b07" and "54515c6e238b68280825457d802c851857c9fe44" have entirely different histories.

8 changed files with 89 additions and 202 deletions

View File

@ -1738,10 +1738,9 @@ Page({
onSendGift() { onSendGift() {
this.setData({ showMorePanel: false }) this.setData({ showMorePanel: false })
wx.showToast({ // 加载礼物列表
title: '暂无权限', this.loadGiftList()
icon: 'none' this.setData({ showGiftPopup: true })
})
}, },
/** /**

View File

@ -109,7 +109,7 @@
<view class="modal-title">{{selectedPartner.group_name || '加入兴趣群'}}</view> <view class="modal-title">{{selectedPartner.group_name || '加入兴趣群'}}</view>
<!-- 副标题 --> <!-- 副标题 -->
<view class="modal-subtitle">加入感兴趣的搭子,找到志同道合朋友</view> <view class="modal-subtitle">{{selectedPartner.group_description || '找到志同道合的伙伴'}}</view>
<!-- 二维码容器 --> <!-- 二维码容器 -->
<view class="qrcode-container"> <view class="qrcode-container">

View File

@ -61,7 +61,7 @@ Page({
return { return {
id: item.asset_key, id: item.asset_key,
url: url, url: url,
qrBottom: 13, // 对应 1920 高度下的位置,约 250px qrBottom: 4.5, // 对应 1920 高度下的位置
qrRight: 8 // 对应 1080 宽度下的位置 qrRight: 8 // 对应 1080 宽度下的位置
}; };
}); });
@ -70,7 +70,7 @@ Page({
// 兜底默认海报 // 兜底默认海报
this.setData({ this.setData({
posters: [ posters: [
{ id: 'default', url: 'https://ai-c.maimanji.com/uploads/assets/poster-1.png', qrBottom: 13, qrRight: 8 } { id: 'default', url: 'https://ai-c.maimanji.com/uploads/assets/poster-1.png', qrBottom: 4.5, qrRight: 8 }
], ],
isLoading: false isLoading: false
}); });
@ -167,34 +167,19 @@ Page({
qrImg.onerror = reject; qrImg.onerror = reject;
}); });
// 识别白框位置:居中显示,位于底部 // 识别白框位置:根据 1080x1920 设计稿,白框在右下角
// 二维码尺寸 260x260 // 二维码尺寸 260x260
const qrW = 260; const qrW = 260;
const qrX = (canvasW - qrW) / 2; // 水平居中 const qrX = 720; // 1080 - 100 - 260
const qrY = canvasH - qrW - 250; // 距离底部 250px避免挡住文字 const qrY = 1580; // 1920 - 80 - 260
// 绘制圆形白底 // 绘制二维码背景(白框内可能需要微调,这里先绘制一个纯白背景确保清晰)
const radius = (qrW + 20) / 2;
const centerX = qrX + qrW / 2;
const centerY = qrY + qrW / 2;
ctx.save();
ctx.beginPath();
ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
ctx.fillStyle = '#FFFFFF'; ctx.fillStyle = '#FFFFFF';
ctx.fill();
ctx.restore();
// 绘制圆形二维码
ctx.save();
ctx.beginPath(); ctx.beginPath();
// 计算二维码的圆形裁剪区域 this.roundRect(ctx, qrX - 5, qrY - 5, qrW + 10, qrW + 10, 10);
const qrRadius = qrW / 2; ctx.fill();
ctx.arc(centerX, centerY, qrRadius, 0, 2 * Math.PI);
ctx.clip(); // 裁剪为圆形
ctx.drawImage(qrImg, qrX, qrY, qrW, qrW); ctx.drawImage(qrImg, qrX, qrY, qrW, qrW);
ctx.restore();
// 6. 导出 // 6. 导出
setTimeout(() => { setTimeout(() => {

View File

@ -15,7 +15,7 @@
<swiper-item wx:for="{{posters}}" wx:key="id" class="poster-item"> <swiper-item wx:for="{{posters}}" wx:key="id" class="poster-item">
<view class="poster-card {{currentPosterIndex === index ? 'active' : ''}}"> <view class="poster-card {{currentPosterIndex === index ? 'active' : ''}}">
<image src="{{item.url}}" mode="aspectFill" class="poster-img" binderror="onImageError" data-index="{{index}}" /> <image src="{{item.url}}" mode="aspectFill" class="poster-img" binderror="onImageError" data-index="{{index}}" />
<view class="qr-overlay" style="bottom: {{item.qrBottom}}%;"> <view class="qr-overlay" style="bottom: {{item.qrBottom}}%; right: {{item.qrRight}}%;">
<image src="{{qrCodeUrl}}" class="qr-img" binderror="onQrError" /> <image src="{{qrCodeUrl}}" class="qr-img" binderror="onQrError" />
</view> </view>
</view> </view>

View File

@ -54,15 +54,12 @@
height: 130rpx; height: 130rpx;
background: #fff; background: #fff;
padding: 10rpx; padding: 10rpx;
border-radius: 50%; border-radius: 12rpx;
left: 50%;
transform: translateX(-50%);
} }
.qr-img { .qr-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%;
} }
.action-area { .action-area {

View File

@ -13,20 +13,7 @@ Page({
records: [], records: [],
withdrawConfig: { withdrawConfig: {
minWithdrawAmount: 1 minWithdrawAmount: 1
}, }
showRulesModal: false
},
onOpenRules() {
this.setData({ showRulesModal: true });
},
onCloseRules() {
this.setData({ showRulesModal: false });
},
onContactService() {
this.setData({ showRulesModal: false });
wx.navigateTo({
url: '/pages/support/support'
});
}, },
onLoad() { onLoad() {
const sys = wx.getSystemInfoSync(); const sys = wx.getSystemInfoSync();

View File

@ -54,47 +54,9 @@
{{submitting ? '处理中...' : '立即提现'}} {{submitting ? '处理中...' : '立即提现'}}
</button> </button>
<!-- 提现规则入口 --> <!-- 提现说明 -->
<view class="rules-entry" bindtap="onOpenRules"> <view class="instruction-section">
<text class="rules-entry-text">提现规则与常见问题</text> <scroll-view scroll-y class="instruction-scroll">
</view>
</view>
<!-- Records Section -->
<view class="records-section" wx:if="{{records.length > 0}}">
<view class="section-header">
<text class="section-title">提现记录</text>
</view>
<view class="record-list">
<view class="record-item" wx:for="{{records}}" wx:key="id">
<view class="record-info">
<view class="record-type">微信提现</view>
<view class="record-time">{{item.timeStr}}</view>
</view>
<view class="record-amount">
<view class="amount-value">-¥{{item.amount}}</view>
<view class="record-status status-{{item.status}}">{{item.statusText}}</view>
</view>
<!-- Rejection Reason -->
<view class="reject-reason" wx:if="{{item.status === 'rejected' && item.rejectReason}}">
<text class="reason-label">拒绝原因:</text>
<text class="reason-content">{{item.rejectReason}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 规则说明弹窗 -->
<view class="modal-mask" wx:if="{{showRulesModal}}" bindtap="onCloseRules"></view>
<view class="modal-container" wx:if="{{showRulesModal}}">
<view class="modal-header">
<text class="modal-title">提现规则与常见问题</text>
<view class="modal-close" bindtap="onCloseRules">
<app-icon name="close" size="40" color="#9CA3AF" />
</view>
</view>
<scroll-view scroll-y class="modal-scroll">
<!-- 规则说明 --> <!-- 规则说明 -->
<view class="rule-block"> <view class="rule-block">
<view class="rule-header"> <view class="rule-header">
@ -145,14 +107,37 @@
<text class="rule-title">需要帮助?</text> <text class="rule-title">需要帮助?</text>
</view> </view>
<view class="rule-content"> <view class="rule-content">
<view class="help-text">如有疑问,请前往 <text class="link-contact" bindtap="onContactService">在线客服</text> 咨询。</view> <view class="help-text">如有疑问,请前往 <text class="link">帮助中心</text> 或联系 <text class="link">在线客服</text>。</view>
<view class="help-text">服务时间:工作日 9:00-22:00</view> <view class="help-text">服务时间:工作日 9:00-22:00</view>
</view> </view>
</view> </view>
<!-- 底部留白 -->
<view style="height: 40rpx;"></view>
</scroll-view> </scroll-view>
</view> </view>
</view> </view>
<!-- Records Section -->
<view class="records-section" wx:if="{{records.length > 0}}">
<view class="section-header">
<text class="section-title">提现记录</text>
</view>
<view class="record-list">
<view class="record-item" wx:for="{{records}}" wx:key="id">
<view class="record-info">
<view class="record-type">微信提现</view>
<view class="record-time">{{item.timeStr}}</view>
</view>
<view class="record-amount">
<view class="amount-value">-¥{{item.amount}}</view>
<view class="record-status status-{{item.status}}">{{item.statusText}}</view>
</view>
<!-- Rejection Reason -->
<view class="reject-reason" wx:if="{{item.status === 'rejected' && item.rejectReason}}">
<text class="reason-label">拒绝原因:</text>
<text class="reason-content">{{item.rejectReason}}</text>
</view>
</view>
</view>
</view>
</view>
</view>

View File

@ -184,84 +184,20 @@
box-shadow: none; box-shadow: none;
} }
/* 提现规则入口 */ /* 提现说明 */
.rules-entry { .instruction-section {
display: flex; margin-top: 64rpx;
justify-content: center; padding: 32rpx;
align-items: center; background: #F9FAFB;
margin-top: 32rpx; border-radius: 32rpx;
padding: 16rpx 0; border: 2rpx dashed #E5E7EB;
margin-bottom: 40rpx;
} }
.rules-entry-text { .instruction-scroll {
font-size: 28rpx; max-height: 600rpx;
color: #B06AB3;
font-weight: 600;
border-bottom: 2rpx solid transparent;
} }
/* 规则弹窗 */
.modal-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
z-index: 1000;
backdrop-filter: blur(4px);
}
.modal-container {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #FFFFFF;
border-radius: 40rpx 40rpx 0 0;
z-index: 1001;
padding: 0 32rpx;
padding-bottom: env(safe-area-inset-bottom);
max-height: 80vh;
display: flex;
flex-direction: column;
animation: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes slideUp {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 32rpx 0;
border-bottom: 2rpx solid #F3F4F6;
}
.modal-title {
font-size: 34rpx;
font-weight: 800;
color: #111827;
}
.modal-close {
padding: 10rpx;
}
.modal-scroll {
flex: 1;
padding-top: 32rpx;
overflow-y: auto;
}
/* 复用规则样式 */
.rule-block { .rule-block {
margin-bottom: 40rpx; margin-bottom: 40rpx;
} }
@ -306,7 +242,7 @@
} }
.qa-item { .qa-item {
margin-bottom: 24rpx; margin-bottom: 20rpx;
} }
.qa-item:last-child { .qa-item:last-child {
@ -314,7 +250,7 @@
} }
.qa-q { .qa-q {
font-size: 28rpx; font-size: 26rpx;
font-weight: 700; font-weight: 700;
color: #374151; color: #374151;
margin-bottom: 8rpx; margin-bottom: 8rpx;
@ -333,12 +269,10 @@
line-height: 1.6; line-height: 1.6;
} }
.link-contact { .link {
color: #FF69B4; /* 粉色高亮 */ color: #B06AB3;
font-weight: 700; font-weight: 600;
display: inline; display: inline;
text-decoration: underline;
padding: 0 4rpx;
} }