黄石人流数据大屏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
5.3 KiB

2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
  1. # 图书馆数据大屏
  2. 图书馆客流量数据可视化大屏,展示当日/当月/当年进馆人次及累计客流量。支持多网点切换,标题与数据随 URL 参数动态变化。
  3. ## 技术栈
  4. - Vue 2.6 + Vue Router (hash 模式)
  5. - ECharts 4.6(折线图)
  6. - Axios(接口请求)
  7. - SCSS(样式)
  8. - vue-count-to(数字翻牌)
  9. - Vue CLI 4(构建)
  10. ## 快速开始
  11. ```bash
  12. # 安装依赖
  13. npm install
  14. # 开发模式(默认端口 8080)
  15. npm run serve
  16. # 构建生产环境
  17. npm run build
  18. ```
  19. ## 使用说明
  20. ### 网点切换
  21. 通过 URL query 参数 `doorCodes` 指定网点编号,大屏标题与数据会自动匹配:
  22. ```
  23. http://localhost:8080/#/?doorCodes=HWXD
  24. http://localhost:8080/#/?doorCodes=D3、D4
  25. ```
  26. - 标题:根据 `doorCodes``public/static/branches.json` 查找对应网点名称展示,同时更新浏览器标签页标题
  27. - 数据:`doorCodes` 作为参数传入接口 `FetchInitIntoNumHS`,获取对应网点的客流数据
  28. ### 网点配置
  29. 网点编号与名称映射在 [public/static/branches.json](public/static/branches.json) 维护:
  30. ```json
  31. {
  32. "branches": [
  33. { "code": "HWXD", "name": "宏伟星都城市书房" },
  34. { "code": "QSH", "name": "青山湖城市书房" }
  35. ]
  36. }
  37. ```
  38. 新增/修改网点只需编辑此文件,部署后刷新即可生效,无需重新打包。
  39. ### 后端地址配置
  40. 后端接口地址在 [public/static/config.js](public/static/config.js) 配置:
  41. ```js
  42. window.g = {
  43. AXIOS_TIMEOUT: 10000,
  44. ApiUrl: 'http://192.168.99.63:8080', // 后端服务地址
  45. headerCode: 'HWXD' // 默认网点编号(已改为 URL 参数驱动,此字段保留)
  46. }
  47. ```
  48. - 开发环境:走 `vue.config.js` 的 devServer 代理(避免跨域)
  49. - 生产环境:axios baseURL 读取 `window.g.ApiUrl`,改 config.js 即可切换后端,无需重新打包
  50. ## 接口
  51. | 接口 | 方法 | 说明 |
  52. | --- | --- | --- |
  53. | `/dxhtsg/initIntoNumHS` | GET | 客流量数据(参数 `doorCodes`) |
  54. 返回字段:
  55. | 字段 | 说明 |
  56. | --- | --- |
  57. | `todayTotal` | 当日进馆人次 |
  58. | `monthData` | 当月每日数据(`day` + `count`) |
  59. | `yearData` | 当年每月数据(`month` + `count`) |
  60. | `historyTotal` | 累计客流量 |
  61. ## 项目结构
  62. ```
  63. ├── public
  64. │ └── static
  65. │ ├── config.js # 后端地址、超时等运行时配置
  66. │ └── branches.json # 网点编号与名称映射
  67. ├── src
  68. │ ├── api
  69. │ │ └── library.js # 客流量接口
  70. │ ├── assets
  71. │ │ ├── images # 图片资源
  72. │ │ └── styles
  73. │ │ └── index.scss # 全局样式 + 大屏布局
  74. │ ├── router
  75. │ │ └── index.js # 路由(hash 模式)
  76. │ ├── utils
  77. │ │ ├── index.js # 工具函数(时间格式化、防抖)
  78. │ │ └── request.js # axios 封装(baseURL 走 window.g.ApiUrl)
  79. │ ├── views
  80. │ │ ├── header # 头部(标题随 doorCodes 动态变化)
  81. │ │ ├── trafficFlow # 客流量大屏
  82. │ │ │ ├── index.vue # 主页面(统一请求接口,props 下发子组件)
  83. │ │ │ └── components
  84. │ │ │ ├── DayInFlowCard.vue # 当日进馆(数字卡片)
  85. │ │ │ ├── MonthInFlowChart.vue # 当月进馆(折线图 + tooltip 轮播)
  86. │ │ │ ├── YearInFlowChart.vue # 当年进馆(折线图 + tooltip 轮播)
  87. │ │ │ └── TotalFlowSummary.vue # 累计客流量汇总(翻牌 + 柱状示意 + 书本插画)
  88. │ │ └── index.vue # 入口页面(Header + TrafficFlow)
  89. │ ├── App.vue
  90. │ └── main.js
  91. ├── vue.config.js # Vue CLI 配置(devServer 代理、标题等)
  92. └── package.json
  93. ```
  94. ## 大屏布局
  95. ```
  96. ┌──────────────────────────────────────────────────┐
  97. │ Header(网点名) │
  98. ├──────────────┬──────────────┬───────────────────┤
  99. │ 当日进馆 │ 当月进馆 │ 本年进馆 │
  100. │ (hero 卡片 │ (黄色折线图 │ (绿色折线图 │
  101. │ + 数字脉冲)│ + tooltip) │ + tooltip) │
  102. ├──────────────┴──────────────┴───────────────────┤
  103. │ 累计客流量汇总(8 位翻牌 + 柱状示意 + 插画) │
  104. └──────────────────────────────────────────────────┘
  105. ```
  106. - 三个卡片顶部一行,汇总底部全宽
  107. - 数据每 15 �自动刷新
  108. - 折线图 markPoint 常显最新点数值,tooltip 每 2.5 秒轮播
  109. - echarts 用 ResizeObserver 自适应容器尺寸