Files
danyang-match/miniapp/constants/routeNames.js
T

132 lines
5.2 KiB
JavaScript
Raw Normal View History

2026-09-09 22:05:00 +08:00
/**
* 路由名称常量(规范 §5 用户端路由命名 + §18 Tab 路由)
*
* 所有页面跳转必须使用本常量,禁止散落字符串。
* 带参数的页面只传 id(userId/activityId/serviceId/conversationId),
* 不在 URL 携带姓名、身份证、完整资料 JSON、敏感业务状态。
*/
// ============ Tab 路由(只能 switchTab) ============
exports.TAB = {
HOME: '/pages/index/index',
DISCOVER: '/pages/discover/discover',
MESSAGES: '/pages/messages/messages',
ACTIVITIES: '/pages/activity/activity',
MINE: '/pages/mine/mine',
};
// ============ 启动与身份类(规范 §4.1) ============
exports.AUTH = {
LOGIN: '/pages/login/login',
BIND_PHONE: '/pages/bind-phone/bind-phone',
VERIFICATION: '/pages/verification/verification',
};
// ============ 新手资料类(规范 §4.2,5 步固定顺序) ============
exports.ONBOARDING = {
PROFILE_BASIC: '/pages/profile-basic/profile-basic',
PROFILE_LIFESTYLE: '/pages/profile-lifestyle/profile-lifestyle',
PROFILE_PHOTOS: '/pages/profile-photos/profile-photos',
PROFILE_INTENT: '/pages/profile-intent/profile-intent',
PROFILE_PREFERENCE: '/pages/profile-preference/profile-preference',
PROFILE_CONFIRM: '/pages/profile-confirm/profile-confirm',
// 资料编辑入口(非首次填写)
PROFILE_INTRO: '/pages/profile-intro/profile-intro',
PROFILE_INTERESTS: '/pages/profile-interests/profile-interests',
};
// 首次资料填写步骤顺序(规范 §14)
exports.ONBOARDING_STEPS = [
exports.ONBOARDING.PROFILE_BASIC,
exports.ONBOARDING.PROFILE_LIFESTYLE,
exports.ONBOARDING.PROFILE_PHOTOS,
exports.ONBOARDING.PROFILE_INTENT,
exports.ONBOARDING.PROFILE_PREFERENCE,
];
// ============ 审核状态类(规范 §4.3) ============
exports.REVIEW = {
PENDING: '/pages/review-pending/review-pending',
REJECTED: '/pages/review-rejected/review-rejected',
ACCOUNT_STATUS: '/pages/account-status/account-status',
ACCOUNT_STATUS_PAGE: '/pages/account-status-page/account-status-page',
APPEAL: '/pages/appeal/appeal',
};
// ============ 主业务类(规范 §4.4) ============
exports.MAIN = {
HOME: '/pages/index/index',
DISCOVER: '/pages/discover/discover',
PROFILE_DETAIL: '/pages/profile-detail/profile-detail',
FATE_CENTER: '/pages/fate-center/fate-center',
MESSAGES: '/pages/messages/messages',
CHAT: '/pages/chat/chat',
ACTIVITIES: '/pages/activity/activity',
MATCHMAKER: '/pages/matchmaker/matchmaker',
MINE: '/pages/mine/mine',
};
// ============ 设置与辅助类(规范 §4.5) ============
exports.SETTINGS = {
SETTINGS: '/pages/settings/settings',
PRIVACY: '/pages/privacy-settings/privacy-settings',
BLACKLIST: '/pages/blacklist/blacklist',
NOTIFICATIONS: '/pages/notifications/notifications',
HELP_CENTER: '/pages/help-center/help-center',
ABOUT: '/pages/about/about',
RELATIONSHIP_STATUS: '/pages/relationship-status/relationship-status',
ACCOUNT_LOGOUT: '/pages/account-logout/account-logout',
MY_REPORTS: '/pages/my-reports/my-reports',
};
// ============ 业务详情类(规范 §4.6) ============
exports.DETAIL = {
PROFILE_DETAIL: '/pages/profile-detail/profile-detail',
ACTIVITY_DETAIL: '/pages/activity-detail/activity-detail',
ACTIVITY_REGISTER: '/pages/activity-register/activity-register',
CHECKIN: '/pages/checkin/checkin',
ACTIVITY_FEEDBACK: '/pages/activity-feedback/activity-feedback',
ACTIVITY_MATCHES: '/pages/activity-matches/activity-matches',
MY_ACTIVITIES: '/pages/my-activities/my-activities',
MATCHMAKER_APPLY: '/pages/matchmaker-apply/matchmaker-apply',
MATCHMAKER_PROGRESS: '/pages/matchmaker-progress/matchmaker-progress',
REPORT: '/pages/report/report',
LIKERS: '/pages/likers/likers',
};
// ============ 工作人员/红娘端(规范 §4.7) ============
exports.OPERATOR = {
LOGIN: '/pages/matchmaker-login/matchmaker-login',
WORKBENCH: '/pages/matchmaker-workbench/matchmaker-workbench',
};
// ============ 带参路由快捷构造(仅 id 类参数,规范 §6) ============
// 用法:ROUTE.to.detail(userId) → /pages/profile-detail/profile-detail?id=xxx
exports.to = {
detail: (userId) => exports.buildPath(exports.DETAIL.PROFILE_DETAIL, { id: userId }),
activityDetail: (activityId) => exports.buildPath(exports.DETAIL.ACTIVITY_DETAIL, { id: activityId }),
chat: (conversationId) => exports.buildPath(exports.MAIN.CHAT, { id: conversationId }),
report: (userId) => exports.buildPath(exports.DETAIL.REPORT, { id: userId }),
matchmakerProgress: (serviceId) => exports.buildPath(exports.DETAIL.MATCHMAKER_PROGRESS, { id: serviceId }),
appeal: (type, actionId) => {
const params = { type };
if (actionId) params.actionId = actionId;
return exports.buildPath(exports.REVIEW.APPEAL, params);
},
};
/**
* 构造带参路由(只允许传 id 类参数)
* @param {string} path 路由常量
* @param {Record<string, string|number>} params 参数对象(仅 id 类)
* @returns {string} 完整路径
*/
exports.buildPath = (path, params = {}) => {
const entries = Object.entries(params);
if (entries.length === 0) return path;
const query = entries
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
.join('&');
return `${path}?${query}`;
};