188 lines
6.7 KiB
JavaScript
188 lines
6.7 KiB
JavaScript
/**
|
||||
|
|
* 审核未通过页 U17 / H11(Phase 05 P05-T17)
|
|||
|
|
*
|
|||
|
|
* 重构要点(遵循 AGENTS.md 不变量):
|
|||
|
|
* - 数据:userStore.fetchReviewStatus(取 items[] 逐项驳回原因)
|
|||
|
|
* - 展示:每项明确 itemType → 中文标签 + reasonText + "立即修改"跳转对应资料页
|
|||
|
|
* - 路由守卫:onShow 检查 userState,若状态变为 approved → reLaunch 首页;
|
|||
|
|
* 若变为 pending → redirectTo 审核中页
|
|||
|
|
* - AGENTS 第 9 条:DB 是 Source of Truth——审核结果以服务端 items 为准,
|
|||
|
|
* 本地不缓存驳回原因;每次进入页面重新拉取
|
|||
|
|
* - AGENTS 第 2 条:Required 不可自动放宽——本页仅引导修改,不修改任何择偶条件
|
|||
|
|
*/
|
|||
|
|
const { userStore, appStore, getReviewRedirectPath } = require('../../stores');
|
|||
|
|
const { ROUTE, PROFILE_REVIEW } = require('../../constants');
|
|||
|
|
|
|||
|
|
// itemType → 中文标签 + 对应资料编辑页路由
|
|||
|
|
// 路由跳转目标用 ONBOARDING.* 系列(与 profile-confirm 一致)
|
|||
|
|
const ITEM_TYPE_MAP = {
|
|||
|
|
avatar: { label: '头像', route: ROUTE.ONBOARDING.PROFILE_PHOTOS },
|
|||
|
|
photos: { label: '生活照', route: ROUTE.ONBOARDING.PROFILE_PHOTOS },
|
|||
|
|
self_intro: { label: '个人介绍', route: ROUTE.ONBOARDING.PROFILE_INTRO },
|
|||
|
|
basic: { label: '基础资料', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
region: { label: '居住区域', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
height: { label: '身高', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
marital: { label: '婚姻状况', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
children: { label: '子女情况', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
education: { label: '学历', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
occupation: { label: '职业', route: ROUTE.ONBOARDING.PROFILE_BASIC },
|
|||
|
|
lifestyle: { label: '生活方式', route: ROUTE.ONBOARDING.PROFILE_LIFESTYLE },
|
|||
|
|
smoking: { label: '吸烟情况', route: ROUTE.ONBOARDING.PROFILE_LIFESTYLE },
|
|||
|
|
drinking: { label: '饮酒情况', route: ROUTE.ONBOARDING.PROFILE_LIFESTYLE },
|
|||
|
|
settlement: { label: '定居意向', route: ROUTE.ONBOARDING.PROFILE_LIFESTYLE },
|
|||
|
|
intent: { label: '婚恋意愿', route: ROUTE.ONBOARDING.PROFILE_INTENT },
|
|||
|
|
relationship_goal: { label: '婚恋目标', route: ROUTE.ONBOARDING.PROFILE_INTENT },
|
|||
|
|
marriage_plan: { label: '结婚计划', route: ROUTE.ONBOARDING.PROFILE_INTENT },
|
|||
|
|
preference: { label: '择偶条件', route: ROUTE.ONBOARDING.PROFILE_PREFERENCE },
|
|||
|
|
interests: { label: '兴趣标签', route: ROUTE.ONBOARDING.PROFILE_INTERESTS },
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 项状态 → 中文标签 + StatusBadge kind
|
|||
|
|
const ITEM_STATUS_MAP = {
|
|||
|
|
pending: { label: '审核中', kind: 'warning' },
|
|||
|
|
approved: { label: '已通过', kind: 'success' },
|
|||
|
|
need_edit: { label: '需修改', kind: 'warning' },
|
|||
|
|
rejected: { label: '未通过', kind: 'danger' },
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
Page({
|
|||
|
|
data: {
|
|||
|
|
statusBarHeight: 20,
|
|||
|
|
navBarHeight: 44,
|
|||
|
|
loading: true,
|
|||
|
|
reviewStatus: PROFILE_REVIEW.NEED_EDIT,
|
|||
|
|
reviewStatusLabel: '需要修改',
|
|||
|
|
issueItems: [], // need_edit/rejected 项(待修改)
|
|||
|
|
otherItems: [], // approved/pending 项(其他审核结果)
|
|||
|
|
hasIssues: false,
|
|||
|
|
hasOtherItems: false,
|
|||
|
|
showAllItems: false,
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onLoad() {
|
|||
|
|
this._initSystemInfo();
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onShow() {
|
|||
|
|
// 路由守卫:状态变化时引导至合适页面
|
|||
|
|
const redirect = getReviewRedirectPath();
|
|||
|
|
if (redirect === ROUTE.REVIEW.PENDING) {
|
|||
|
|
// 状态变为 pending(用户重新提交了审核)
|
|||
|
|
wx.redirectTo({ url: redirect });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (!redirect) {
|
|||
|
|
// 状态变为 approved
|
|||
|
|
wx.reLaunch({ url: ROUTE.TAB.HOME });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
// 仍为 need_edit/rejected,正常加载
|
|||
|
|
this.loadReviewResult();
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
_initSystemInfo() {
|
|||
|
|
try {
|
|||
|
|
const sysInfo = wx.getSystemInfoSync();
|
|||
|
|
this.setData({
|
|||
|
|
statusBarHeight: sysInfo.statusBarHeight || 20,
|
|||
|
|
navBarHeight: 44,
|
|||
|
|
});
|
|||
|
|
} catch (e) { /* 使用默认值 */ }
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// ============ 数据加载 ============
|
|||
|
|
async loadReviewResult() {
|
|||
|
|
this.setData({ loading: true });
|
|||
|
|
try {
|
|||
|
|
const review = await userStore.fetchReviewStatus();
|
|||
|
|
const reviewStatus = (review && review.status) || PROFILE_REVIEW.NEED_EDIT;
|
|||
|
|
|
|||
|
|
// 取到最新状态后重新校验是否需要跳转
|
|||
|
|
if (reviewStatus === PROFILE_REVIEW.APPROVED) {
|
|||
|
|
wx.reLaunch({ url: ROUTE.TAB.HOME });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (reviewStatus === PROFILE_REVIEW.PENDING) {
|
|||
|
|
wx.redirectTo({ url: ROUTE.REVIEW.PENDING });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (reviewStatus === PROFILE_REVIEW.NOT_SUBMITTED) {
|
|||
|
|
wx.redirectTo({ url: ROUTE.ONBOARDING.PROFILE_CONFIRM });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const rawItems = (review && review.items) || [];
|
|||
|
|
|
|||
|
|
// 派生展示项,并按 isIssue 拆分为两组(避免 WXML wx:for+wx:if 同元素)
|
|||
|
|
const issueItems = [];
|
|||
|
|
const otherItems = [];
|
|||
|
|
rawItems.forEach((raw) => {
|
|||
|
|
const typeMeta = ITEM_TYPE_MAP[raw.itemType] || { label: raw.itemType, route: ROUTE.ONBOARDING.PROFILE_BASIC };
|
|||
|
|
const statusMeta = ITEM_STATUS_MAP[raw.status] || { label: raw.status, kind: 'disabled' };
|
|||
|
|
const item = {
|
|||
|
|
itemType: raw.itemType,
|
|||
|
|
label: typeMeta.label,
|
|||
|
|
statusLabel: statusMeta.label,
|
|||
|
|
kind: statusMeta.kind,
|
|||
|
|
reasonText: raw.reasonText || '',
|
|||
|
|
reasonCode: raw.reasonCode || '',
|
|||
|
|
route: typeMeta.route,
|
|||
|
|
};
|
|||
|
|
if (raw.status === 'need_edit' || raw.status === 'rejected') {
|
|||
|
|
issueItems.push(item);
|
|||
|
|
} else {
|
|||
|
|
otherItems.push(item);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const hasIssues = issueItems.length > 0;
|
|||
|
|
const hasOtherItems = otherItems.length > 0;
|
|||
|
|
const reviewStatusLabelMap = {
|
|||
|
|
need_edit: '需要修改',
|
|||
|
|
rejected: '审核未通过',
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
this.setData({
|
|||
|
|
loading: false,
|
|||
|
|
reviewStatus,
|
|||
|
|
reviewStatusLabel: reviewStatusLabelMap[reviewStatus] || '需要修改',
|
|||
|
|
issueItems,
|
|||
|
|
otherItems,
|
|||
|
|
hasIssues,
|
|||
|
|
hasOtherItems,
|
|||
|
|
});
|
|||
|
|
} catch (err) {
|
|||
|
|
this.setData({ loading: false });
|
|||
|
|
appStore.toastError(err, '加载失败');
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// ============ 展开/收起其他审核结果 ============
|
|||
|
|
onToggleItems() {
|
|||
|
|
this.setData({ showAllItems: !this.data.showAllItems });
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// ============ 跳转修改 ============
|
|||
|
|
/**
|
|||
|
|
* 跳转对应资料页修改
|
|||
|
|
* AGENTS 第 2 条:仅引导跳转,不放宽任何 Required 约束
|
|||
|
|
*/
|
|||
|
|
onEditItem(e) {
|
|||
|
|
const route = e.currentTarget.dataset.route;
|
|||
|
|
if (route) {
|
|||
|
|
wx.navigateTo({ url: route });
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 全部修改完后重新提交审核
|
|||
|
|
*/
|
|||
|
|
onResubmit() {
|
|||
|
|
wx.redirectTo({ url: ROUTE.ONBOARDING.PROFILE_CONFIRM });
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onBack() {
|
|||
|
|
wx.navigateBack();
|
|||
|
|
},
|
|||
|
|
});
|