功能迭代:用户管理与存客宝同步、管理后台与小程序优化、开发文档更新

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
卡若
2026-01-29 17:15:00 +08:00
parent 8f01de4f9a
commit d87fa5c175
18 changed files with 2693 additions and 149 deletions

View File

@@ -7,9 +7,13 @@
const app = getApp()
// 默认匹配类型配置
// 找伙伴:真正的匹配功能,匹配数据库中的真实用户
// 资源对接:需要登录+购买章节才能使用填写2项信息我能帮到你什么、我需要什么帮助
// 导师顾问:跳转到存客宝添加微信
// 团队招募:跳转到存客宝添加微信
let MATCH_TYPES = [
{ id: 'partner', label: '找伙伴', matchLabel: '找伙伴', icon: '⭐', matchFromDB: true, showJoinAfterMatch: false },
{ id: 'investor', label: '资源对接', matchLabel: '资源对接', icon: '👥', matchFromDB: true, showJoinAfterMatch: true },
{ id: 'investor', label: '资源对接', matchLabel: '资源对接', icon: '👥', matchFromDB: true, showJoinAfterMatch: true, requirePurchase: true },
{ id: 'mentor', label: '导师顾问', matchLabel: '立即咨询', icon: '❤️', matchFromDB: true, showJoinAfterMatch: true },
{ id: 'team', label: '团队招募', matchLabel: '团队招募', icon: '🎮', matchFromDB: true, showJoinAfterMatch: true }
]
@@ -478,11 +482,11 @@ Page({
// 提交加入
async handleJoinSubmit() {
const { contactType, phoneNumber, wechatId, joinType, isJoining } = this.data
const { contactType, phoneNumber, wechatId, joinType, isJoining, canHelp, needHelp } = this.data
if (isJoining) return
// 验证
// 验证联系方式
if (contactType === 'phone') {
if (!phoneNumber || phoneNumber.length !== 11) {
this.setData({ joinError: '请输入正确的11位手机号' })
@@ -495,6 +499,18 @@ Page({
}
}
// 资源对接需要填写两项信息
if (joinType === 'investor') {
if (!canHelp || canHelp.trim().length < 2) {
this.setData({ joinError: '请填写"我能帮到你什么"' })
return
}
if (!needHelp || needHelp.trim().length < 2) {
this.setData({ joinError: '请填写"我需要什么帮助"' })
return
}
}
this.setData({ isJoining: true, joinError: '' })
try {
@@ -504,7 +520,10 @@ Page({
type: joinType,
phone: contactType === 'phone' ? phoneNumber : '',
wechat: contactType === 'wechat' ? wechatId : '',
userId: app.globalData.userInfo?.id || ''
userId: app.globalData.userInfo?.id || '',
// 资源对接专属字段
canHelp: joinType === 'investor' ? canHelp : '',
needHelp: joinType === 'investor' ? needHelp : ''
}
})

View File

@@ -207,16 +207,16 @@
</view>
</view>
<!-- 资源对接专用输入(只有两项) -->
<!-- 资源对接专用输入(只有两项:我能帮到你什么、我需要什么帮助 -->
<block wx:if="{{joinType === 'investor'}}">
<view class="resource-form">
<view class="form-item">
<text class="form-label">我能帮到你什么</text>
<input class="form-input-new" placeholder="例如:私域运营、品牌策划、流量资源..." value="{{canHelp}}" bindinput="onCanHelpInput"/>
<text class="form-label">我能帮到你什么 <text class="required">*</text></text>
<input class="form-input-new" placeholder="例如:私域运营、品牌策划、流量资源..." value="{{canHelp}}" bindinput="onCanHelpInput" maxlength="100"/>
</view>
<view class="form-item">
<text class="form-label">我需要什么帮助</text>
<input class="form-input-new" placeholder="例如:技术支持、资金、人脉..." value="{{needHelp}}" bindinput="onNeedHelpInput"/>
<text class="form-label">我需要什么帮助 <text class="required">*</text></text>
<input class="form-input-new" placeholder="例如:技术支持、资金、人脉..." value="{{needHelp}}" bindinput="onNeedHelpInput" maxlength="100"/>
</view>
</view>
</block>

View File

@@ -67,6 +67,7 @@
align-items: center;
gap: 24rpx;
margin-bottom: 32rpx;
width: 100%;
}
/* 头像容器 */
@@ -82,13 +83,18 @@
flex-shrink: 0;
width: 120rpx;
height: 120rpx;
min-width: 120rpx;
min-height: 120rpx;
padding: 0;
margin: 0;
background: transparent;
background: transparent !important;
border: none;
line-height: normal;
border-radius: 50%;
overflow: visible;
display: flex;
align-items: center;
justify-content: center;
}
.avatar-btn-simple::after { border: none; }
@@ -167,14 +173,16 @@
display: flex;
flex-direction: column;
justify-content: center;
gap: 8rpx;
gap: 10rpx;
min-width: 0;
padding-top: 4rpx;
}
.user-name-row {
display: flex;
align-items: center;
gap: 8rpx;
gap: 10rpx;
line-height: 1.2;
}
.user-name {
@@ -184,7 +192,8 @@
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 280rpx;
max-width: 320rpx;
line-height: 1.3;
}
.edit-name-icon {

View File

@@ -28,6 +28,9 @@
.bind-info { display: flex; flex-direction: column; gap: 4rpx; flex: 1; }
.bind-label { font-size: 28rpx; color: #fff; font-weight: 500; }
.bind-value { font-size: 24rpx; color: rgba(255,255,255,0.5); }
.address-text { max-width: 360rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bind-icon.address-icon { background: rgba(255,165,0,0.2); }
.required { color: #FF6B6B; font-size: 24rpx; }
.bind-input { font-size: 24rpx; color: #00CED1; background: transparent; padding: 8rpx 0; }
.bind-right { display: flex; align-items: center; }
.bind-check { color: #00CED1; font-size: 32rpx; }