# -*- coding: utf-8 -*- """生成《交通统计报表审核系统-用户使用说明书》Word 文档。""" import os from docx import Document from docx.shared import Pt, Inches, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT from docx.oxml.ns import qn BASE_DIR = os.path.dirname(os.path.abspath(__file__)) SHOT_DIR = os.path.join(BASE_DIR, "usage_screenshots") OUT_PATH = os.path.join(BASE_DIR, "交通统计报表审核系统-用户使用说明书.docx") SCREENSHOTS = [ ("01_工作台.jpg", "一、工作台", [ "工作台是登录系统后的首页,顶部为系统名称与当前页面名称,左侧为功能菜单(工作台、数据导入、数据查看、企业解释、审核结果、报表生成、规则管理、用户管理)。", "页面主体展示统计数据卡片,方便用户快速了解本报表期的数据概况(如企业数、车辆数、轨迹里程、审核结果等关键指标)。", "左侧菜单与顶部区域固定不动,页面内容较多时仅内容区域滚动,便于用户随时切换功能。", ]), ("02_数据导入.jpg", "二、数据导入", [ "数据导入用于把用户整理的 Excel 模板数据批量导入系统,支持的数据类型包括:交企统H203-2表(道路货物运输月度生产情况)、运政车辆、轨迹里程、规上规下拆分运输量、货运量周转量等。", "操作步骤:①选择数据类型;②选择报表期(以页面选择的月份为准,导入当月与1-当月累计数据);③点击“上传”选择 Excel 文件;④点击“导入”。", "导入时系统会逐行校验数据,导入失败的行会提示行号,方便用户在 Excel 中定位并修改错误数据后重新导入。", ]), ("03_数据查看.jpg", "三、数据查看", [ "数据查看用于查询已经导入系统的数据,便于核对与追溯。", "可按数据类型(分类)、报表期(选择具体月份)筛选,并支持输入关键字搜索企业等信息。", "查询结果以表格展示,表格数据较多时仅表格内部滚动,标题与筛选条件区保持固定,方便持续浏览。", ]), ("04_企业解释.jpg", "四、企业解释", [ "企业解释用于查看企业在审核中提交的解释说明,并可使用 AI 对每一条解释进行智能分析。", "点击某条解释的“AI分析”后弹出对话窗口:窗口上方展示 AI 的分析输出,下方为用户的输入框,可与 AI 进行多轮对话,进一步获得处置建议。", "对话过程中,AI 可自动查询数据库中的相关数据,给出有数据支撑的建议,而不是凭空推断。", ]), ("05_审核结果.jpg", "五、审核结果", [ "审核结果页用于执行审核并查看审核结论。", "操作步骤:①选择报表期;②点击“执行审核”重新计算,或点击“查询结果”查看历史审核结果。", "审核结果较多时,可按“企业名称”(关键字)和“审核规则”进行过滤,帮助用户快速定位重点企业。", "结果表格包含企业名称、审核规则、实际值、阈值/对比、偏差说明、等级、状态与操作列;对误报的记录可点击“确认忽略”。", ]), ("06_报表生成.jpg", "六、报表生成", [ "报表生成用于按选定的报表期自动计算并导出各类统计报表。", "选择报表期后点击相应按钮即可生成并下载报表,当前支持:货运量周转量、货运量分市州明细、货运量排名、周转量排名。", "报表数据由系统根据已导入的数据自动计算生成,无需人工整理。", ]), ("07_规则管理.jpg", "七、规则管理", [ "规则管理用于维护审核规则(如阈值、对比方式等)。", "当前演示版本中该页面为占位页,正式版本将支持规则的查看、新增、修改与启停管理。", ]), ("08_用户管理.jpg", "八、用户管理", [ "用户管理用于维护系统登录用户及其权限。", "当前演示版本中该页面为占位页,正式版本将支持用户的增删改查与角色权限分配。", ]), ] def set_font(run, size=12, bold=False, color=None, name="微软雅黑"): run.font.size = Pt(size) run.font.bold = bold run.font.name = name r = run._element.rPr.rFonts r.set(qn("w:eastAsia"), name) if color: run.font.color.rgb = RGBColor(*color) def add_heading(doc, text, size=16, color=(0x1F, 0x4E, 0x79), space_before=18, space_after=10): p = doc.add_paragraph() p.paragraph_format.space_before = Pt(space_before) p.paragraph_format.space_after = Pt(space_after) run = p.add_run(text) set_font(run, size=size, bold=True, color=color) return p def add_body(doc, text, size=11, indent=0.3, space_after=6): p = doc.add_paragraph() p.paragraph_format.space_after = Pt(space_after) p.paragraph_format.first_line_indent = Inches(indent) p.paragraph_format.line_spacing = 1.4 run = p.add_run(text) set_font(run, size=size) return p def main(): doc = Document() # 页面设置:A4 for section in doc.sections: section.page_width = Inches(8.27) section.page_height = Inches(11.69) section.left_margin = Inches(0.9) section.right_margin = Inches(0.9) section.top_margin = Inches(0.9) section.bottom_margin = Inches(0.9) # ===== 封面 ===== for _ in range(6): doc.add_paragraph() p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run("交通统计报表审核系统") set_font(run, size=30, bold=True, color=(0x1F, 0x4E, 0x79)) p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run("用户使用说明书") set_font(run, size=24, bold=True, color=(0x33, 0x33, 0x33)) for _ in range(4): doc.add_paragraph() p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run("(演示版 Demo)") set_font(run, size=14, color=(0x88, 0x88, 0x88)) p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run("2026 年 8 月") set_font(run, size=14, color=(0x88, 0x88, 0x88)) doc.add_page_break() # ===== 文档说明 ===== add_heading(doc, "文档说明", size=18, space_before=6) add_body(doc, "本说明书面向系统使用者,介绍“交通统计报表审核系统”各功能页面的用途与操作方法。系统围绕交通运输企业统计数据的上报、导入、查看、审核与报表生成等环节设计,帮助企业用户和审核人员高效完成数据填报质量核查工作。") add_body(doc, "系统主要功能包括:数据导入、数据查看、企业解释(含 AI 智能分析)、审核结果(含 AI 处置建议)、报表生成,以及规则管理、用户管理等管理功能。") add_body(doc, "本文档中的页面截图取自演示环境,页面布局与正式环境可能略有差异,功能与操作方式以实际系统为准。") doc.add_page_break() # ===== 各页面章节 ===== for fname, title, descs in SCREENSHOTS: add_heading(doc, title, size=18, space_before=6) for d in descs: add_body(doc, d) shot_path = os.path.join(SHOT_DIR, fname) if os.path.exists(shot_path): p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run() run.add_picture(shot_path, width=Inches(6.2)) cap = doc.add_paragraph() cap.alignment = WD_ALIGN_PARAGRAPH.CENTER r = cap.add_run(f"图:{title.replace('、', ' ')}页面") set_font(r, size=9, color=(0x88, 0x88, 0x88)) doc.add_page_break() doc.save(OUT_PATH) print("OK:", OUT_PATH) if __name__ == "__main__": main()