# -*- coding: utf-8 -*- """从前端 FUNC 编号登记表提取已建成功能清单,生成技术方案用的数据模块。 数据源为 Web/src/constants/aidopFuncCodes.ts,即系统实际路由与菜单的唯一映射表, 保证投标文件中列出的功能与已交付系统一一对应。 """ import io import os import re HERE = os.path.dirname(os.path.abspath(__file__)) SRC = os.path.join(HERE, "..", "Web", "src", "constants", "aidopFuncCodes.ts") OUT = os.path.join(HERE, "_bid_func_list.py") MODULE_NAME = { "S0": "运营建模", "S1": "产销协同", "S2": "制造协同", "S3": "供应协同", "S4": "采购执行", "S5": "物料仓储", "S6": "生产执行", "S7": "成品仓储", "S8": "异常监控", "S9": "运营指标与智慧运营", } PAT = re.compile(r"code:\s*'(FUNC-S(\d)-(\d{3}))'\s*,\s*name:\s*'([^']+)'") def main(): text = io.open(SRC, encoding="utf-8").read() items = [] seen = set() for code, mod, seq, name in PAT.findall(text): if code in seen: continue seen.add(code) items.append((f"S{mod}", code, name)) items.sort(key=lambda x: (x[0], x[1])) out = io.open(OUT, "w", encoding="utf-8") out.write("# -*- coding: utf-8 -*-\n") out.write('"""已建成功能清单,由 _bid_gen_funclist.py 从前端 FUNC 登记表生成。\n\n' '请勿手工编辑;功能有增减时重新运行生成脚本。\n"""\n\n') out.write("MODULE_NAME = %r\n\n" % (MODULE_NAME,)) out.write("FUNC_LIST = [\n") for mod, code, name in items: out.write(f" ({mod!r}, {code!r}, {name!r}),\n") out.write("]\n") out.close() print(f"共 {len(items)} 项功能 -> {OUT}") for mod in sorted(MODULE_NAME): n = sum(1 for m, _, _ in items if m == mod) if n: print(f" {mod} {MODULE_NAME[mod]:<12} {n:>3} 项") if __name__ == "__main__": main()