🔧 数据库配置: - 切换到腾讯云外网数据库 - 配置连接参数和连接池 🎨 界面优化: - 未登录时只显示登录按钮,隐藏其他功能 - 优化登录卡片样式 - 修复章节图标和标题对齐问题 💳 支付流程优化: - 增加重复购买检测,避免重复支付 - 优化openId获取逻辑,支持静默获取 - 已登录用户可直接支付,无需重复登录 📊 后台管理: - 创建章节管理API (/api/admin/chapters) - 创建章节管理页面 (/admin/chapters) - 支持查看所有章节、修改价格、设置免费状态
780 lines
12 KiB
Plaintext
780 lines
12 KiB
Plaintext
/**
|
|
* Soul创业实验 - 我的页面样式
|
|
* 1:1还原Web版本UI
|
|
*/
|
|
|
|
.page {
|
|
min-height: 100vh;
|
|
background: #000000;
|
|
padding-bottom: 200rpx;
|
|
}
|
|
|
|
/* ===== 导航栏 ===== */
|
|
.nav-bar {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 100;
|
|
background: rgba(0, 0, 0, 0.9);
|
|
backdrop-filter: blur(40rpx);
|
|
border-bottom: 1rpx solid rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
.nav-content {
|
|
height: 88rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.nav-title {
|
|
font-size: 36rpx;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.brand-color {
|
|
color: #00CED1;
|
|
}
|
|
|
|
.gold-color {
|
|
color: #FFD700;
|
|
}
|
|
|
|
.pink-color {
|
|
color: #E91E63;
|
|
}
|
|
|
|
.nav-placeholder {
|
|
width: 100%;
|
|
}
|
|
|
|
/* ===== 用户卡片 ===== */
|
|
.user-card {
|
|
margin: 32rpx;
|
|
padding: 32rpx;
|
|
}
|
|
|
|
.card-gradient {
|
|
background: linear-gradient(135deg, #1c1c1e 0%, #2c2c2e 100%);
|
|
border-radius: 32rpx;
|
|
border: 2rpx solid rgba(0, 206, 209, 0.2);
|
|
}
|
|
|
|
.user-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24rpx;
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.avatar {
|
|
width: 128rpx;
|
|
height: 128rpx;
|
|
border-radius: 50%;
|
|
border: 4rpx solid #00CED1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: linear-gradient(135deg, rgba(0, 206, 209, 0.2) 0%, transparent 100%);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.avatar-empty {
|
|
border-style: dashed;
|
|
border-color: rgba(0, 206, 209, 0.5);
|
|
}
|
|
|
|
.avatar-icon {
|
|
font-size: 64rpx;
|
|
opacity: 0.3;
|
|
}
|
|
|
|
.avatar-text {
|
|
font-size: 48rpx;
|
|
font-weight: 700;
|
|
color: #00CED1;
|
|
}
|
|
|
|
.user-info {
|
|
flex: 1;
|
|
}
|
|
|
|
.login-btn {
|
|
font-size: 36rpx;
|
|
font-weight: 600;
|
|
color: #00CED1;
|
|
}
|
|
|
|
.user-subtitle {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.3);
|
|
display: block;
|
|
margin-top: 4rpx;
|
|
}
|
|
|
|
/* ===== 登录卡片样式 ===== */
|
|
.login-card {
|
|
min-height: 400rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.login-prompt {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
text-align: center;
|
|
padding: 40rpx 0;
|
|
width: 100%;
|
|
}
|
|
|
|
.login-icon-large {
|
|
font-size: 80rpx;
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.login-title {
|
|
font-size: 36rpx;
|
|
font-weight: 600;
|
|
color: #ffffff;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.login-desc {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.5);
|
|
margin-bottom: 48rpx;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.btn-wechat-large {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 16rpx;
|
|
width: 80%;
|
|
padding: 28rpx 0;
|
|
background: linear-gradient(135deg, #07C160 0%, #06AD56 100%);
|
|
border-radius: 48rpx;
|
|
border: none;
|
|
color: #ffffff;
|
|
font-size: 32rpx;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.btn-wechat-large .btn-icon {
|
|
width: 48rpx;
|
|
height: 48rpx;
|
|
background: rgba(255, 255, 255, 0.2);
|
|
border-radius: 8rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 28rpx;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.user-name {
|
|
font-size: 36rpx;
|
|
font-weight: 600;
|
|
color: #ffffff;
|
|
display: block;
|
|
}
|
|
|
|
.user-id {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.3);
|
|
display: block;
|
|
margin-top: 4rpx;
|
|
}
|
|
|
|
.user-badge {
|
|
padding: 8rpx 20rpx;
|
|
background: rgba(0, 206, 209, 0.2);
|
|
border: 2rpx solid rgba(0, 206, 209, 0.3);
|
|
border-radius: 32rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8rpx;
|
|
}
|
|
|
|
.badge-icon {
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.badge-text {
|
|
font-size: 22rpx;
|
|
color: #00CED1;
|
|
}
|
|
|
|
.stats-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 16rpx;
|
|
padding-top: 32rpx;
|
|
border-top: 2rpx solid rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.stat-item {
|
|
text-align: center;
|
|
padding: 16rpx;
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-radius: 16rpx;
|
|
}
|
|
|
|
.stat-value {
|
|
font-size: 40rpx;
|
|
font-weight: 700;
|
|
display: block;
|
|
}
|
|
|
|
.stat-label {
|
|
font-size: 22rpx;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
}
|
|
|
|
/* ===== 收益卡片 ===== */
|
|
.earnings-card {
|
|
margin: 32rpx;
|
|
padding: 32rpx;
|
|
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
|
border-radius: 32rpx;
|
|
border: 2rpx solid rgba(0, 206, 209, 0.2);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.earnings-bg {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
width: 256rpx;
|
|
height: 256rpx;
|
|
background: linear-gradient(135deg, rgba(255, 215, 0, 0.1) 0%, transparent 100%);
|
|
border-radius: 50%;
|
|
transform: translate(50%, -50%);
|
|
}
|
|
|
|
.earnings-content {
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.earnings-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.earnings-title {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16rpx;
|
|
}
|
|
|
|
.title-icon {
|
|
font-size: 36rpx;
|
|
}
|
|
|
|
.title-text {
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.earnings-link {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8rpx;
|
|
}
|
|
|
|
.link-text {
|
|
font-size: 24rpx;
|
|
color: #00CED1;
|
|
}
|
|
|
|
.link-arrow {
|
|
font-size: 24rpx;
|
|
color: #00CED1;
|
|
}
|
|
|
|
.earnings-data {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 48rpx;
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.data-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.data-label {
|
|
font-size: 22rpx;
|
|
color: rgba(255, 255, 255, 0.5);
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.data-value {
|
|
font-size: 40rpx;
|
|
font-weight: 700;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.gold-gradient {
|
|
background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
font-size: 56rpx;
|
|
}
|
|
|
|
.earnings-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 16rpx;
|
|
padding: 24rpx;
|
|
background: linear-gradient(135deg, rgba(255, 215, 0, 0.8) 0%, rgba(255, 165, 0, 0.8) 100%);
|
|
border-radius: 24rpx;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.btn-icon {
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.btn-text {
|
|
font-size: 28rpx;
|
|
color: #000000;
|
|
}
|
|
|
|
/* ===== 推广入口 ===== */
|
|
.referral-card {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin: 32rpx;
|
|
padding: 32rpx;
|
|
background: linear-gradient(90deg, rgba(255, 215, 0, 0.1) 0%, #1c1c1e 100%);
|
|
border: 2rpx solid rgba(255, 215, 0, 0.2);
|
|
border-radius: 32rpx;
|
|
}
|
|
|
|
.referral-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24rpx;
|
|
}
|
|
|
|
.referral-icon {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 40rpx;
|
|
}
|
|
|
|
.gold-bg {
|
|
background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
|
|
}
|
|
|
|
.referral-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.referral-title {
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.referral-desc {
|
|
font-size: 24rpx;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
margin-top: 4rpx;
|
|
}
|
|
|
|
.referral-btn {
|
|
padding: 16rpx 32rpx;
|
|
background: rgba(255, 215, 0, 0.2);
|
|
color: #FFD700;
|
|
font-size: 26rpx;
|
|
font-weight: 500;
|
|
border-radius: 16rpx;
|
|
}
|
|
|
|
/* ===== Tab切换 ===== */
|
|
.tab-bar-custom {
|
|
display: flex;
|
|
gap: 16rpx;
|
|
margin: 32rpx;
|
|
}
|
|
|
|
.tab-item {
|
|
flex: 1;
|
|
padding: 20rpx;
|
|
text-align: center;
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
color: rgba(255, 255, 255, 0.6);
|
|
background: #1c1c1e;
|
|
border-radius: 24rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8rpx;
|
|
}
|
|
|
|
.tab-active {
|
|
background: rgba(0, 206, 209, 0.2);
|
|
color: #00CED1;
|
|
border: 2rpx solid rgba(0, 206, 209, 0.3);
|
|
}
|
|
|
|
.tab-icon {
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
/* ===== Tab内容 ===== */
|
|
.tab-content {
|
|
padding: 0 32rpx;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* ===== 菜单卡片 ===== */
|
|
.card {
|
|
background: #1c1c1e;
|
|
border-radius: 24rpx;
|
|
border: 2rpx solid rgba(255, 255, 255, 0.05);
|
|
overflow: hidden;
|
|
margin: 0 0 24rpx 0;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.menu-card {
|
|
padding: 0;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.menu-item {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 28rpx 32rpx;
|
|
border-bottom: 1rpx solid rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
.menu-item:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.menu-item:active {
|
|
background: rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
.menu-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24rpx;
|
|
}
|
|
|
|
.menu-icon {
|
|
width: 48rpx;
|
|
height: 48rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 24rpx;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.icon-brand {
|
|
background: linear-gradient(135deg, #00CED1 0%, #20B2AA 100%);
|
|
}
|
|
|
|
.icon-gray {
|
|
background: rgba(128, 128, 128, 0.2);
|
|
}
|
|
|
|
.menu-title {
|
|
font-size: 28rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.menu-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16rpx;
|
|
}
|
|
|
|
.menu-count {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
}
|
|
|
|
.menu-badge {
|
|
font-size: 26rpx;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.menu-arrow {
|
|
font-size: 28rpx;
|
|
color: rgba(255, 255, 255, 0.3);
|
|
}
|
|
|
|
/* ===== 统计卡片 ===== */
|
|
.stats-card {
|
|
padding: 32rpx;
|
|
}
|
|
|
|
.card-title {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16rpx;
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
color: #ffffff;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
|
|
.stats-row {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 24rpx;
|
|
}
|
|
|
|
.stat-box {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 24rpx;
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-radius: 24rpx;
|
|
}
|
|
|
|
.stat-icon {
|
|
font-size: 36rpx;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.stat-num {
|
|
font-size: 32rpx;
|
|
font-weight: 700;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.stat-text {
|
|
font-size: 22rpx;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
margin-top: 4rpx;
|
|
}
|
|
|
|
/* ===== 最近阅读 ===== */
|
|
.recent-card {
|
|
padding: 32rpx;
|
|
}
|
|
|
|
.recent-list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 16rpx;
|
|
}
|
|
|
|
.recent-item {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 24rpx;
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-radius: 24rpx;
|
|
}
|
|
|
|
.recent-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24rpx;
|
|
}
|
|
|
|
.recent-index {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.3);
|
|
}
|
|
|
|
.recent-title {
|
|
font-size: 26rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.recent-btn {
|
|
font-size: 24rpx;
|
|
color: #00CED1;
|
|
}
|
|
|
|
/* ===== 空状态 ===== */
|
|
.empty-state {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 48rpx;
|
|
}
|
|
|
|
.empty-icon {
|
|
font-size: 64rpx;
|
|
opacity: 0.5;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.empty-text {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
}
|
|
|
|
.empty-btn {
|
|
margin-top: 16rpx;
|
|
font-size: 26rpx;
|
|
color: #00CED1;
|
|
}
|
|
|
|
/* ===== 匹配记录 ===== */
|
|
.match-card {
|
|
padding: 32rpx;
|
|
}
|
|
|
|
/* ===== 登录弹窗 ===== */
|
|
.modal-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: rgba(0, 0, 0, 0.6);
|
|
backdrop-filter: blur(20rpx);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 1000;
|
|
padding: 48rpx;
|
|
}
|
|
|
|
.modal-content {
|
|
width: 100%;
|
|
max-width: 640rpx;
|
|
background: #1c1c1e;
|
|
border-radius: 32rpx;
|
|
padding: 48rpx;
|
|
position: relative;
|
|
}
|
|
|
|
.modal-close {
|
|
position: absolute;
|
|
top: 24rpx;
|
|
right: 24rpx;
|
|
width: 64rpx;
|
|
height: 64rpx;
|
|
border-radius: 50%;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 28rpx;
|
|
color: rgba(255, 255, 255, 0.6);
|
|
}
|
|
|
|
.login-icon {
|
|
font-size: 96rpx;
|
|
text-align: center;
|
|
display: block;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
|
|
.login-title {
|
|
font-size: 36rpx;
|
|
font-weight: 700;
|
|
color: #ffffff;
|
|
text-align: center;
|
|
display: block;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.login-desc {
|
|
font-size: 26rpx;
|
|
color: rgba(255, 255, 255, 0.6);
|
|
text-align: center;
|
|
display: block;
|
|
margin-bottom: 48rpx;
|
|
}
|
|
|
|
.btn-wechat {
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 16rpx;
|
|
padding: 28rpx;
|
|
background: #07C160;
|
|
color: #ffffff;
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
border-radius: 24rpx;
|
|
margin-bottom: 24rpx;
|
|
border: none;
|
|
}
|
|
|
|
.btn-wechat::after {
|
|
border: none;
|
|
}
|
|
|
|
.btn-wechat-icon {
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
background: rgba(255, 255, 255, 0.2);
|
|
border-radius: 8rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.btn-phone {
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 16rpx;
|
|
padding: 28rpx;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
color: #ffffff;
|
|
font-size: 28rpx;
|
|
border-radius: 24rpx;
|
|
border: 2rpx solid rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.btn-phone::after {
|
|
border: none;
|
|
}
|
|
|
|
.btn-phone-icon {
|
|
font-size: 32rpx;
|
|
}
|
|
|
|
.login-notice {
|
|
display: block;
|
|
margin-top: 32rpx;
|
|
font-size: 22rpx;
|
|
color: rgba(255, 255, 255, 0.3);
|
|
text-align: center;
|
|
}
|
|
|
|
/* ===== 底部留白 ===== */
|
|
.bottom-space {
|
|
height: 40rpx;
|
|
}
|