// 当前两个产品选项同时决定 OpenAPI GenealogyCreate/UpdateBody 的 // visibility 与 joinMode,因此它们是“访问预设”,不是单一可见范围。 export const GENEALOGY_ACCESS_PRESET = Object.freeze({ MEMBER_ONLY: "MEMBER_ONLY", PUBLIC_APPLY: "PUBLIC_APPLY", }); export const GENEALOGY_VISIBILITY = Object.freeze({ PRIVATE: "0", PUBLIC: "1", MEMBER_ONLY: "2", }); export const GENEALOGY_JOIN_MODE = Object.freeze({ CLOSED: "0", REVIEW: "1", INVITATION: "2", }); export const GENEALOGY_ACCESS_PRESET_OPTIONS = Object.freeze([ Object.freeze({ value: GENEALOGY_ACCESS_PRESET.MEMBER_ONLY, label: "仅成员可见", }), Object.freeze({ value: GENEALOGY_ACCESS_PRESET.PUBLIC_APPLY, label: "公开可申请", }), ]); export const isGenealogyAccessPreset = (preset) => Object.values(GENEALOGY_ACCESS_PRESET).includes(preset); export const isGenealogyVisibility = (value) => Object.values(GENEALOGY_VISIBILITY).includes(value); export const isGenealogyJoinMode = (value) => Object.values(GENEALOGY_JOIN_MODE).includes(value); // OpenAPI 为两个字段分别声明了 0/1/2,但当前产品只提供以下两个完整预设。 // 其他合法组合不能被悄悄改写成相近选项,页面应明确显示“访问规则待确认”。 const apiAccessByPreset = Object.freeze({ [GENEALOGY_ACCESS_PRESET.MEMBER_ONLY]: Object.freeze({ visibility: GENEALOGY_VISIBILITY.MEMBER_ONLY, joinMode: GENEALOGY_JOIN_MODE.CLOSED, }), [GENEALOGY_ACCESS_PRESET.PUBLIC_APPLY]: Object.freeze({ visibility: GENEALOGY_VISIBILITY.PUBLIC, joinMode: GENEALOGY_JOIN_MODE.REVIEW, }), }); export const getGenealogyAccessPresetLabel = (preset) => GENEALOGY_ACCESS_PRESET_OPTIONS.find((item) => item.value === preset) ?.label || "访问规则待确认"; export const toApiGenealogyAccess = (preset) => { const access = apiAccessByPreset[preset]; return access ? { ...access } : null; }; export const fromApiGenealogyAccess = ({ visibility, joinMode } = {}) => { const match = Object.entries(apiAccessByPreset).find( ([, access]) => access.visibility === visibility && access.joinMode === joinMode, ); return match?.[0] || null; };