| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # -*- 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()
|