diff --git a/miniprogram/pages/avatar-nickname/avatar-nickname.js b/miniprogram/pages/avatar-nickname/avatar-nickname.js index 7390cc52..5293a5b5 100644 --- a/miniprogram/pages/avatar-nickname/avatar-nickname.js +++ b/miniprogram/pages/avatar-nickname/avatar-nickname.js @@ -12,11 +12,29 @@ Page({ saving: false, showPrivacyModal: false, nicknameInputFocus: false, + /** 规则引擎传入:avatar | nickname,用于高亮对应区块 */ + uiFocus: '', }, - onLoad() { + onLoad(options) { this.setData({ statusBarHeight: app.globalData.statusBarHeight || 44 }) + const focus = String(options.focus || '').toLowerCase() + if (focus === 'avatar' || focus === 'nickname') { + this.setData({ uiFocus: focus }) + } this.loadFromUser() + if (focus === 'nickname') { + setTimeout(() => { + if (typeof wx.requirePrivacyAuthorize === 'function') { + wx.requirePrivacyAuthorize({ + success: () => this.setData({ nicknameInputFocus: true }), + fail: () => {}, + }) + } else { + this.setData({ nicknameInputFocus: true }) + } + }, 400) + } }, loadFromUser() { diff --git a/miniprogram/pages/avatar-nickname/avatar-nickname.wxml b/miniprogram/pages/avatar-nickname/avatar-nickname.wxml index c3bbdf27..6a920990 100644 --- a/miniprogram/pages/avatar-nickname/avatar-nickname.wxml +++ b/miniprogram/pages/avatar-nickname/avatar-nickname.wxml @@ -11,11 +11,13 @@ 设置对外展示信息 - 头像与昵称会出现在名片与匹配卡片上,方便伙伴认出你。 + 请先换一张清晰头像,伙伴更容易认出你。 + 请改一个真实好记的昵称,方便伙伴称呼你。 + 头像与昵称会出现在名片与匹配卡片上,方便伙伴认出你。 - + + @@ -1549,7 +1577,8 @@ export function UsersPage() { )} - ))} + ) + })} )} @@ -1899,7 +1928,7 @@ export function UsersPage() {
- setRuleForm({ ...ruleForm, trigger: e.target.value })} /> + setRuleForm({ ...ruleForm, trigger: e.target.value })} />
diff --git a/soul-api/internal/handler/user.go b/soul-api/internal/handler/user.go index f0e890c9..1e178b96 100644 --- a/soul-api/internal/handler/user.go +++ b/soul-api/internal/handler/user.go @@ -687,6 +687,10 @@ func userTrackActionLabelCN(action string) string { return "完善资料" case "fill_avatar": return "设置头像" + case "update_avatar": + return "完善头像" + case "update_nickname": + return "修改昵称" case "visit_page": return "访问页面" case "first_pay": diff --git a/soul-api/internal/model/user_rule.go b/soul-api/internal/model/user_rule.go index 6546d135..b8e5a89c 100644 --- a/soul-api/internal/model/user_rule.go +++ b/soul-api/internal/model/user_rule.go @@ -8,6 +8,29 @@ import ( // RuleJSON 存储 JSON 数组/对象的列(user_rules 的 trigger_conditions 等) type RuleJSON []byte +// MarshalJSON 原样输出 JSON,避免 encoding/json 将 []byte 编成 base64 导致前端把 triggerConditions 当字符串而 .map 崩溃 +func (r RuleJSON) MarshalJSON() ([]byte, error) { + if len(r) == 0 { + return []byte("null"), nil + } + out := make([]byte, len(r)) + copy(out, r) + return out, nil +} + +// UnmarshalJSON 接收请求体中的原始 JSON(对象/数组) +func (r *RuleJSON) UnmarshalJSON(data []byte) error { + if r == nil { + return nil + } + if len(data) == 0 || string(data) == "null" { + *r = nil + return nil + } + *r = append((*r)[0:0], data...) + return nil +} + func (r RuleJSON) Value() (driver.Value, error) { return []byte(r), nil } func (r *RuleJSON) Scan(value interface{}) error { if value == nil {