Files
Web_BLS_Vue_Prod/docs/project-overview.md
XuJiacheng 5239411ec7 feat: 完成老项目文档化工作
- 新增 openspec-propose 技能,支持快速提案生成变更及相关文档。
- 新增接口汇总文档,整理后端接口及其用途。
- 新增页面功能说明文档,描述各页面的功能及路由。
- 新增项目总览文档,概述项目结构、技术栈及运行方式。
- 新增工具与非标准实现说明文档,记录项目中的特殊实现及约定。
- 创建 legacy-project-documentation 变更,整合现有文档并迁移至正式 OpenSpec 目录。
- 记录项目中的高风险历史实现特征,明确页面启用状态及接口调用关系。
2026-03-06 09:32:21 +08:00

5.4 KiB
Raw Permalink Blame History

BLS Web Vue 项目总览

文档目标

本文档用于给后续维护人员快速建立认知,重点覆盖以下内容:

  • 项目入口与运行方式
  • 路由、菜单和页面结构
  • 后端接口域名与调用分层
  • 当前项目中值得注意的非标准实现
  • 关联文档索引

技术栈

  • 前端框架Vue 3 + Vite
  • UI 组件Element Plus
  • 路由Vue Router 4
  • 国际化vue-i18n
  • 数据请求axios、fetch、jQuery.ajax 混用
  • 数据处理dayjs、qs、xlsx

项目入口

  • 页面入口:src/main.js
  • 根组件:src/App.vue
  • 路由定义:src/router/index.js
  • 请求封装:src/axios.js
  • 运行配置:public/config.js

运行说明

package.json 中当前可见脚本:

  • npm run dev:启动本地开发环境
  • npm run build:构建生产包
  • npm run preview:本地预览构建结果
  • npm run lint:执行 eslint并带 --fix

当前仓库没有现成的测试脚本,属于典型的“已交付老项目,缺少自动化回归”的状态。

认证与访问控制

项目的访问控制依赖浏览器存储,不是标准的后端 token 鉴权流:

  • 路由守卫依据 localStorage.TokenT 判断是否已登录。
  • 登录页当前使用前端硬编码账号密码校验,而不是正式后端登录接口。
  • TokenT 实际保存的是一个时间字符串用于计算“3 天内免密登录”。
  • localStorage.login 被用来控制布局切换与页面状态。
  • 菜单权限目前被写死为 全选,没有接入真实权限接口。

这意味着:后续如果要补安全能力,登录、权限、会话续期都需要整体重构,不能把当前实现视为最终鉴权方案。

路由与菜单概览

路由层当前启用的页面:

路由 页面名称 状态
/login 登录 启用
/home 主页 启用,进入后立即跳转 /udplog
/udplog UDP 监控 启用
/tasktimelog 线程耗时记录 启用
/blacklist 黑名单管理 启用
/tftpwhitelist TFTP 管理 启用
/voicelog 语音助手日志 启用
/statuslog 房态日志 启用
/powerlog 功率记录 路由启用,但菜单默认隐藏
/:pathMatch(.*)* 404 启用

代码存在但默认未接入主流程的页面:

  • src/pages/dicmanage/index.vue:路由被注释,属于后台字典管理页。
  • src/pages/logsetup/index.vue:未在路由中注册,属于个人资料维护页。
  • src/pages/udpconn/index.vue:目录存在,但当前未接入路由或菜单。

后端域名与调用层次

public/config.js 中定义了三套主要地址:

  • ApiList[0]http://blv-rd.tech:19088/api/,主日志平台接口。
  • ApiList[1]http://blv-rd.tech:19055/api/,酒店/黑名单/主机相关接口。
  • ApiList[2]http://www.boonlive-rcu.com:7000/api/RCU/TFTP 相关接口。

请求层分为四种:

  • 默认 $http:来自 src/axios.js 默认实例。
  • createAxiosInstance(1):显式切到 ApiList[1]
  • createAxiosInstance(2):显式切到 ApiList[2]
  • fetch / $.ajax:在 App.vue 中作为补充能力直接注入。

请求封装摘要

src/axios.js 的行为需要重点注意:

  • createAxiosInstance 参数不是任意 baseURL,而是 ApiList 下标。
  • 请求拦截器会在 config.data 为对象时自动执行 JSON.stringify
  • 项目内部大量页面又手动对参数做了一次 JSON.stringify,形成“调用方自己转 JSON拦截器有时也会转”的混合风格。
  • 某些接口使用 qs.stringifyapplication/x-www-form-urlencoded,通过第三个参数传 headers。
  • 响应拦截器几乎不做统一错误处理,只是 console.log 后抛出异常。

App.vue 提供的全局能力

根组件除了渲染菜单和布局,还承担了一些基础设施职责:

  • 通过 provide 注入 $httpconfigcheckLoginStatusisMobilefullScreen
  • 提供 ajaxfile(form),以 fetch + FormData 上传文件到 FileUpload/UploadFile
  • 提供 ajax(api, form),使用 jQuery.ajax 发送 JSON POST 请求。
  • 管理深浅色主题、菜单切换、浏览器尺寸监听和基础登录状态刷新。

开发风险与维护建议

  • 登录逻辑是前端硬编码,不能作为正式生产安全实现继续扩展。
  • 路由、菜单和页面目录存在不一致,新增功能前要先确认是否接入菜单、路由、缓存和权限。
  • 页面对后端接口依赖很分散,且经常跨三个基础域名切换,排查接口问题时必须先确认 axios 实例来源。
  • 代码中存在多套请求方式并存的情况,后续统一封装前应先做接口盘点。
  • 项目当前没有系统化的 API 文档,维护时应优先参考本次新增的接口汇总文档。

文档索引

  • docs/project-overview.md:项目总览
  • docs/page-functions.md:页面功能说明
  • docs/api-summary.md:接口汇总
  • docs/tooling-notes.md:工具与非标准实现说明