PSDP Screen Repository
预算看板 — 分公司大屏
业务流程全解析
技术架构与业务逻辑说明,涵盖旧屏(screen-new)与新屏(manageScreen)分公司页面的完整对比
01 / Overview
项目技术全景
该项目是一个 预算看板系统,根据用户的组织层级(分公司/营服/网格), 自动路由到对应的大屏页面,展示财务指标、KPI 完成情况和组织排名。
构建: Vite 5
UI: Element Plus 2.5 + ECharts 5.5
部署路径: /wghtml/asiahtml/budgetv/
新屏 /manageScreen → views/manageScreen/
两套屏共享同一套后端 API,入口逻辑完全一致
├── main.js
├── permission.js
├── router/index.js
├── store/modules/user.js
├── plugins/spost.js
├── components/Screen/
├── views/
│ ├── screen-new/ ← 旧屏
│ │ ├── layout.vue
│ │ ├── header.vue
│ │ ├── branchCompany/
│ │ ├── grid/
│ │ └── campService/
│ ├── manageScreen/ ← 新屏
│ │ ├── layout.vue
│ │ ├── header.vue
│ │ ├── component/ ← 共享组件
│ │ ├── branchCompany/
│ │ ├── grid/
│ │ └── campService/
02 / Entry Flow
页面入口与路由决策
用户访问系统后,layout.vue 调用 getBaseInfo 接口获取用户信息, 根据 ruleType 自动决定跳转到哪个子页面。
路由:
/*/branchCompany
路由:
/*/campService
路由:
/*/grid
if (['13', '135', '136'].includes(ruleType)) router.push('/*/campService')
else if (['01', '02'].includes(ruleType)) router.push('/*/branchCompany') // ← 分公司
else router.push('/*/grid')
03 / State Management
Header 控件与全局状态
Header 提供 4 个核心筛选控件,所有操作通过 Pinia Store 同步到子组件。旧屏和新屏的 Header + Store 逻辑完全一致。
userInfo: {
ruleType: '01', // 组织类型
sellArea: 'TJ_CITY',// 组织ID
sellAreaDesc: '天津',// 组织名
monthId: '202603',// 月份
dimension: 'LJ', // LJ累计 | DY当月
tabType: 'INDEX_VALUE_JYZRZT_SJKJHJ',
dayId: ...,
zqgzType: ...
}
04 / Old Screen Layout
旧屏分公司 — 整体布局 screen-new
三列等宽布局,上下两个区域。上方展示核心财务指标,下方展示组织完成排名。
├── incomeCard.vue
├── businessCard.vue
├── yourselfDialog.vue
└── branchPluschartDialog.vue
组件内置在 topContent 子目录下
05 / Old Income Module
旧屏 — 收入及业务模块
收入模块是最复杂的模块,包含主营业务收入概览、固定卡片、自选卡片、渠道筛选和趋势图。
使用 el-radio-group 切换,当 tabType 为客户口径时隐藏
• 收入类: 联网收入(固定) / 算网收入(固定) / 子项目可选
• 业务类: 全视界(固定) / 融合主宽(固定) / 其他可选
展开/收起: 选中后在虚线下方展示自选卡片
API: getUserZbInfoData / updateUserZbInfo
需先选中某个卡片,点击"查看趋势图"按钮打开
支持收入指标和业务指标两种模式
06 / Old GrossProfit & Profit
旧屏 — 毛利与经营利润
• 支持 同级组织 / 次级组织 切换
• 进度条配色: 红色(收入) | 橙色(毛利) | 蓝色(利润)
• 展示: 排名序号 + 组织名 + 进度条 + 完成值 + 完成率
• API: getFgsSrCardTjData / getFgsMlCardTjData / getFgsLrCardTjData
07 / New Screen Layout
新屏分公司 — 整体布局 manageScreen
新屏将中间列从 毛利 改为 成本, 并统一使用 IndicatorCard 表格式组件替代旧的独立卡片。
├── IndicatorCard.vue
├── CompareValue.vue
├── yourSelfDialog.vue
├── costDialog.vue NEW
├── branchPluschartDialog.vue
└── drawerDialog.vue NEW
08 / New Income Module
新屏收入模块 — 变化详解
columns 和 data 数组,以表格形式渲染多行数据。
分为三个分类: 基准(蓝色)、弹性(橙色)、业务(绿色),
支持行选中、点击穿透到 DrawerDialog 查看详情。
09 / New Cost Module
新屏独有 — 成本模块 NEW
新屏将旧屏的"毛利"列替换为"成本"列,独立展示成本相关指标。这是新旧屏最大的业务逻辑差异。
与收入的 yourSelfDialog 结构类似,但筛选项针对成本指标。
支持展开/收起自选成本卡片。
| 维度 | 旧屏 (毛利) | 新屏 (成本) |
|---|---|---|
| 指标方向 | 计算结果 (收入 - 成本) | 直接展示成本项 |
| 坏账切换 | 含坏账 / 不含坏账 toggle | 无 (成本直接展示) |
| 展示形式 | 独立卡片 | IndicatorCard 表格 |
| 自选弹框 | yourselfDialog | costDialog (新) |
字段映射与列配置已完成,对接时只需替换 data 数组。
10 / Full Comparison
新旧屏分公司完整对比
| 对比维度 | 旧屏 (screen-new) | 新屏 (manageScreen) |
|---|---|---|
| 路由 | /screen/branchCompany | /manageScreen/branchCompany |
| 三列布局 | 收入 | 毛利 | 利润 | 收入 | 成本 | 利润 |
| 卡片组件 | incomeCard / businessCard (独立卡片) | IndicatorCard (表格式, 基准/弹性/业务分类) |
| 进度环 | ringCirle (渐变切片环) | ProgressRing (简约环) |
| 渠道筛选 | el-radio-button 组 | 纯 div 文字切换 |
| 自选弹框 | yourselfDialog (含收入 + 业务) | yourSelfDialog + costDialog (分开) |
| 组件位置 | topContent/component/ 内 | manageScreen/component/ 集中管理 |
| 详情查看 | 跳转外部页面 (Portal.firePortalEvent) | DrawerDialog 抽屉式 + 外部跳转 |
| 背景色 | #eef5fd (浅蓝) | #f9fcfe (更浅) |
| 数据状态 | 接口已对接,线上运行 | 布局完成,Mock 数据,待联调 |
11 / API Endpoints
核心 API 接口速查
所有接口前缀为 /ManagementChart/,通过 spost 工具函数调用,参数以 FormData 格式发送。
{
monthId: '202603', // 月份
sellArea: 'TJ_CITY', // 组织ID
srType: 'LJ', // LJ累计 | DY当月
kjType: 'INDEX_VALUE_...', // 核算方式
qdType?: '公众' | '政企', // 渠道 (可选)
ymType: 'FGS', // 页面类型=分公司
zbType: 'SR' | 'ML' | 'LR' // 收入|毛利|利润
}
12 / Field Reference
核心数据字段速查表
13 / Developer Tips
联调建议与开发提示
incomeData / bussinessData 数组,
替换为接口返回数据即可。列配置 (columns) 和标题列 (titleColumns) 通常不需修改。
screen-new/branchCompany/topContent/income/index.vue 中的
getIncomeInfo() 和 getCardData() 方法可以直接复用。
• 请求参数需要
JSON.stringify 后放入 JsonParam• 同比值判断: 如果
QNTQ_LJ === 0 则显示"去年无发生"• 目标为 0 时显示"无目标"而不是 0
PSDP Screen Repository
业务流程解析完毕
如有疑问,请参阅源码中对应的 Vue 文件
旧屏路径: views/screen-new/branchCompany/
新屏路径: views/manageScreen/branchCompany/