generate_doc.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. # -*- coding: utf-8 -*-
  2. from docx import Document
  3. from docx.shared import Pt, RGBColor, Cm, Inches
  4. from docx.enum.text import WD_ALIGN_PARAGRAPH
  5. from docx.oxml.ns import qn
  6. from docx.oxml import OxmlElement
  7. def set_heading_style(paragraph, level=1):
  8. run = paragraph.runs[0] if paragraph.runs else paragraph.add_run()
  9. if level == 1:
  10. run.font.size = Pt(18)
  11. run.font.bold = True
  12. run.font.color.rgb = RGBColor(0x1e, 0x40, 0x7e)
  13. elif level == 2:
  14. run.font.size = Pt(14)
  15. run.font.bold = True
  16. run.font.color.rgb = RGBColor(0x1a, 0x5a, 0xa0)
  17. paragraph.paragraph_format.space_before = Pt(12)
  18. paragraph.paragraph_format.space_after = Pt(4)
  19. def add_divider(doc):
  20. p = doc.add_paragraph()
  21. pPr = p._p.get_or_add_pPr()
  22. pBdr = OxmlElement('w:pBdr')
  23. bottom = OxmlElement('w:bottom')
  24. bottom.set(qn('w:val'), 'single')
  25. bottom.set(qn('w:sz'), '4')
  26. bottom.set(qn('w:space'), '1')
  27. bottom.set(qn('w:color'), 'B0C4DE')
  28. pBdr.append(bottom)
  29. pPr.append(pBdr)
  30. p.paragraph_format.space_after = Pt(6)
  31. doc = Document()
  32. # 页面边距
  33. sections = doc.sections
  34. for section in sections:
  35. section.top_margin = Cm(2.5)
  36. section.bottom_margin = Cm(2.5)
  37. section.left_margin = Cm(3)
  38. section.right_margin = Cm(3)
  39. # 标题
  40. title = doc.add_heading('实验室安全智能监测与管控中心', 0)
  41. title.alignment = WD_ALIGN_PARAGRAPH.CENTER
  42. title_run = title.runs[0]
  43. title_run.font.size = Pt(22)
  44. title_run.font.color.rgb = RGBColor(0x0d, 0x2a, 0x6e)
  45. subtitle = doc.add_paragraph('可视化大屏模块说明文档')
  46. subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
  47. subtitle_run = subtitle.runs[0]
  48. subtitle_run.font.size = Pt(13)
  49. subtitle_run.font.color.rgb = RGBColor(0x55, 0x77, 0x99)
  50. doc.add_paragraph()
  51. add_divider(doc)
  52. # ====== 模块列表 ======
  53. modules = [
  54. {
  55. "title": "一、顶部导航栏",
  56. "content": (
  57. "导航栏位于大屏顶部,横贯全屏,分为左、中、右三个区域。"
  58. "左侧实时显示当前时间(时:分:秒)及日期、星期;"
  59. "中间居中展示机构LOGO、单位名称(中国安全生产科学研究院)及系统大标题"实验室安全智能监测与管控中心";"
  60. "右侧显示所在城市的天气状况、实时温度及空气质量指数(AQI),为用户提供环境背景信息参考。"
  61. )
  62. },
  63. {
  64. "title": "二、实验室基本情况统计",
  65. "content": (
  66. "本模块综合呈现全院实验室的整体规模与运行状态。"
  67. "上部左侧以SVG圆弧仪表图直观显示实验室总数(128间),并在图形下方配以I~IV级对应红橙黄蓝的分级比例色条;"
  68. "上部右侧采用环形图(donut chart)展示各安全等级实验室的占比与数量,圆心标注总数,外侧标注各级名称、数量及百分比,并附彩色明细行辅助阅读。"
  69. "下部通过三栏状态徽章实时显示"使用中""异常""空闲"三种状态下的实验室数量,便于管理人员快速掌握当前资源利用情况。"
  70. )
  71. },
  72. {
  73. "title": "三、实验室安全分级统计",
  74. "content": (
  75. "本模块以堆叠柱状图的形式,统计并展示院内各二级单位的实验室总数及各安全等级(I~IV级)分布情况。"
  76. "X轴为各二级单位名称,轴标签下方附注该单位实验室总数;Y轴为实验室数量;图例采用红、橙、黄、蓝四色区分等级。"
  77. "当二级单位数量超出可视范围时,图表将自动从右向左循环滚动,每隔5秒滚动一列,确保所有数据均可完整呈现。"
  78. )
  79. },
  80. {
  81. "title": "四、实验室进入人数统计及走势",
  82. "content": (
  83. "本模块以数字翻牌器的形式,醒目展示今日累计进入实验室总人数及当前仍在实验室内的实验人数,两组数据并排一行,动态翻转效果直观呈现数据变化。"
  84. "下方折线图按0时至24时划分为9个时间分段,分别绘制当天实验室进入人数及当前实验人数的动态走势曲线,帮助管理员掌握人员流动规律与高峰时段分布。"
  85. )
  86. },
  87. {
  88. "title": "五、智能环境感知应用设备统计",
  89. "content": (
  90. "本模块集中展示院内各类智能物联感知设备的部署与在线状况。"
  91. "顶部以图标+数字的形式,分类显示各类设备的在线数量与离线数量;"
  92. "左侧以速度仪表盘样式的图表直观呈现设备整体在线率百分比;"
  93. "右侧以2×2网格布局分别显示电子信息铭牌、化学品智能终端、传感器套件、智能摄像设备的设备总数,为运维管理提供快速数据参考。"
  94. )
  95. },
  96. {
  97. "title": "六、实验室设备分类及使用统计",
  98. "content": (
  99. "本模块按上中下三段式布局,对实验室设备进行多维度统计分析。"
  100. "上部使用环形图展示全院实验室设备的分类构成,图右侧配有各分类的色块标识、名称与数量(台);"
  101. "中部汇总显示设备总数、设备累计使用总时长及设备使用率三项核心指标,便于评估设备利用效率;"
  102. "下部使用饼图展示设备按使用状态(使用中、空闲、正常、维修)的分布数量及占比,右侧同步附注各状态的色块与数量说明,辅助设备管理决策。"
  103. )
  104. },
  105. {
  106. "title": "七、实时监控",
  107. "content": (
  108. "本模块为用户提供实验室实时视频监控查看功能,区域分为左右两个内容区。"
  109. "左侧提供搜索框(可按楼栋、楼层检索)、二级单位下拉筛选,以及可展开折叠的建筑结构树状图(层级为院区→楼栋→楼层→房间),便于快速定位目标实验室。"
  110. "右侧以9宫格(16:9比例)方式同屏显示9路实验室实时监控画面,其中首路画面来自智能摄像头,支持危险行为AI检测框标注;顶部显示当前院区/楼栋/楼层层级路径,并提供翻页按钮以切换查看更多房间画面。"
  111. )
  112. },
  113. {
  114. "title": "八、实验环境安全智能感知",
  115. "content": (
  116. "本模块实时展示全院各实验室的环境安全监测数据,由下而上滚动播放所有实验室条目。"
  117. "每条实验室信息包括实验室名称(含房号)及所属二级单位,并以图标形式列出各传感器(温度、湿度、TVOC、CO₂、O₂等)的实时状态数值。"
  118. "当某项监测值超出安全阈值时,对应条目以红色渐变高亮效果突出显示,并触发预警图标,使管理人员能第一时间识别异常实验室及异常指标,及时响应处置。"
  119. )
  120. },
  121. {
  122. "title": "九、实验室实时风险预警",
  123. "content": (
  124. "本模块集中呈现实验室环境异常预警信息,顶部以琥珀色高亮数字统计展示本月预警响应总数。"
  125. "预警列表区域按时间倒序实时滚动轮播最新异常通知,最新一条置顶显示。"
  126. "每条预警记录包括:实验室名称(含房号)及所属二级单位、触发预警的传感器类型及对应异常数值、精确到秒的预警时间(日期-时-分-秒)。"
  127. "整体配色以琥珀/橙色调为主,视觉上区别于紧急红色,使管理人员在持续关注时不产生视觉疲劳,同时保持较强的信息提示性。"
  128. )
  129. },
  130. ]
  131. for module in modules:
  132. h = doc.add_heading(module["title"], level=1)
  133. h.alignment = WD_ALIGN_PARAGRAPH.LEFT
  134. set_heading_style(h, level=1)
  135. p = doc.add_paragraph(module["content"])
  136. p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
  137. run = p.runs[0]
  138. run.font.size = Pt(11)
  139. run.font.color.rgb = RGBColor(0x22, 0x22, 0x22)
  140. p.paragraph_format.first_line_indent = Pt(22)
  141. p.paragraph_format.line_spacing = Pt(22)
  142. p.paragraph_format.space_after = Pt(6)
  143. add_divider(doc)
  144. # 页脚备注
  145. doc.add_paragraph()
  146. note = doc.add_paragraph('注:本文档为实验室安全智能监测与管控中心可视化大屏各数据统计模块的功能说明,仅作文字描述参考,不含设计原型图。')
  147. note.alignment = WD_ALIGN_PARAGRAPH.LEFT
  148. note_run = note.runs[0]
  149. note_run.font.size = Pt(9)
  150. note_run.font.color.rgb = RGBColor(0x99, 0x99, 0x99)
  151. note_run.font.italic = True
  152. doc.save('实验室安全智能监测与管控中心-可视化大屏模块说明.docx')
  153. print("文档已生成:实验室安全智能监测与管控中心-可视化大屏模块说明.docx")