同城生活小程序首期只开外卖时若首页仍展示跑腿、团购等未开通入口用户点进去空白或报错转化与信任双损。宜在配置层做业务开关端上按开关渲染菜单而不是改代码发版才能藏入口。本文用代码深讲说明配置模型、端侧过滤与发布验收。不涉及具体域名。一、配置模型biz_switch 与入口元数据分离{biz_switches:{waimai:true,paotui:false,tuangou:false,shangmen:false},home_entries:[{code:waimai,title:外卖,icon:waimai.png,route:/pages/waimai/index},{code:paotui,title:跑腿,icon:paotui.png,route:/pages/paotui/index},{code:tuangou,title:团购,icon:tuangou.png,route:/pages/tuangou/index}]}原则home_entries定义「有哪些潜在入口」biz_switches定义「当前对用户可见且可下单的业务」未开通的业务switchfalse端上不渲染或显示「暂未开放」占位产品策略二选一宜默认不渲染二、端侧过滤启动时拉配置再渲染typeHomeEntry{code:string;title:string;icon:string;route:string};interfaceAppConfig{biz_switches:Recordstring,boolean;home_entries:HomeEntry[];}exportfunctionvisibleEntries(cfg:AppConfig):HomeEntry[]{returncfg.home_entries.filter((e)cfg.biz_switches[e.code]true);}// 小程序 onLaunchasyncfunctionbootstrap(){constcfgawaitfetchAppConfig();// 带版本号constentriesvisibleEntries(cfg);setHomeMenu(entries);}// 兜底路由守卫防止深链打开未开通业务functiononRoute(path){constcoderouteToBizCode(path);if(!getBizSwitch(code)){wx.redirectTo({url:/pages/closed/index?bizcode});returnfalse;}returntrue;}禁止只隐藏图标却保留可 deep link 的路由未开通业务路由层也要拦截。三、后台改开关不必发版# 教学示意后台更新开关并 bump 配置版本defset_biz_switch(biz_code:str,enabled:bool,operator:str):cfgload_config()cfg[biz_switches][biz_code]enabled cfg[config_version]bump_version(cfg.get(config_version))save_config(cfg)audit_log(operator,biz_code,enabled,cfg[config_version])端上请求带If-None-Match或config_version变更后下次启动或定时拉取生效。宜有「强制刷新配置」入口供运营验收。四、与商家端、后台菜单一致用户端隐藏入口商家端若仍展示未开通业务 Tab商家会困惑。宜同一biz_switches源驱动config_service ├── miniapp_home_filter ├── merchant_tab_filter └── admin_menu_filter # 可选后台仅显示已购模块functionmerchantTabs(cfg:AppConfig){constall[orders,goods,paotui_orders,tuangou_orders];returnall.filter((tab){constbiztabToBiz(tab);returnbiznull||cfg.biz_switches[biz];});}五、验收清单# 1. 仅 waimaitruecurl-s/api/app/config|jq.biz_switches# 2. 首页入口数量# 3. 深链 paotui 路由应被拦截# 4. 开通 paotui 后 bump version端刷新后出现入口且能下单deftest_hidden_biz_no_route():cfgload_fixture(only_waimai.json)assertvisible_entries(cfg)[{code:waimai,...}]asserton_route(/pages/paotui/index)isFalse人工未开通业务在真机首页不可见开通后无需发版即可出现或重启小程序后可见行为须文档化。六、首期只开外卖时的报价与范围配置能力解决「菜单满却不能点」的体验问题不替代合同范围。交付清单仍应写清首期biz_switches默认值与后续开通报价避免销售演示与交付不一致。七、光合同城边界光合同城同城生活小程序为成品系统业务入口可按配置隐藏与开启多业务扩展可在同一运营后台进行资料可复用。支持私有化源码交付业务规则由客户确定系统侧不抽成客户平台订单。八、常见踩坑坑 1写死在代码里的菜单每藏一个入口都要发版运营等不起。坑 2只藏首页搜索仍可达搜索、Banner、活动页链接也要读开关。坑 3商家端与用户端不同步同一配置源避免两套布尔值漂移。坑 4开关默认值全 true新环境部署即菜单铺满忘记改配置。坑 5无 config_version后台改了用户端缓存旧菜单几天。九、搜索、Banner 与活动页也要读开关首页过滤不够常见漏点functionsearchBizIndex(cfg:AppConfig){returncfg.home_entries.filter((e)cfg.biz_switches[e.code]).map((e)({code:e.code,title:e.title}));}functionbannerLinkAllowed(cfg:AppConfig,link:string):boolean{constcodeparseBizFromLink(link);returncodenull||cfg.biz_switches[code]true;}运营配置 Banner 链到/pages/paotui/index时若paotuifalse后台应拒绝保存或自动降级到首页。搜索建议索引也应随开关重建避免搜「跑腿」出现不可下单结果。十、灰度按城市或白名单先导入口{biz_switches:{paotui:false},biz_rollout:{paotui:{mode:whitelist,city_ids:[440100],enabled:true}}}端上逻辑effectiveSwitch(code) biz_switches[code] || inRollout(code, userCity)。首期只开外卖时 rollout 为空开第二城跑腿时先 whitelist再全量 true。验收非白名单城市仍不可见跑腿入口。十一、与订单服务的关系开关关闭只禁止新建单不应删除历史订单查询入口。GET /orders?bizpaotui在paotuifalse时仍可读历史但POST /orders/create?bizpaotui应返回明确错误码便于端上提示「业务暂未开放」而不是 generic 500。小结同城生活小程序未开通业务入口宜由biz_switches 入口元数据驱动端侧过滤 路由守卫双保险并与商家端共用配置源。首页菜单很多、真正能下单的只有一项——多数是演示开关全开、生产未关。首期只开外卖先把开关验收写进上线清单。