1. 组件概述
**组件名称**: PiProjectSelect
**组件路径**: framework/src/components/pi-project-select/pi-project-select.component.ts
**功能**: 提供项目树选择功能,支持系统头部和其他场景使用
3. 组件结构
**依赖组件**:
PiBaseCrumbsNav: 面包屑导航
Input: 输入框
PiCommonProjectTree: 通用项目树组件
4. 主要业务流程
4.1 项目树显示流程
用户点击项目选择按钮
调用onShowTree()方法
检查是否禁用(disabled)
切换isShow状态
如果显示(isShow=true),显示加载动画($Spin.show)
如果隐藏(isShow=false),隐藏加载动画($Spin.hide)
4.2 项目选择流程
用户在项目树中选择节点
调用onChangeTree()方法
接收nodeData和openTreeNodeIds参数
调用onClickoutside()隐藏树组件
如果是头部模式(isHeader=true),调用onChangeProject()切换项目
如果是非头部模式,更新nodeData并触发on-change-project事件
4.3 项目切换流程
调用onChangeProject()方法
校验项目ID是否为空或为0
如果无效,重置nodeData并触发事件
如果有效,根据isBillSystem选择不同的API
调用apiPostV1SysPartnerChange或apiPostV1SysPartnerChangeBill
成功后更新nodeData
持久化到PiBaseProjectModule
派发通知EventManager.dispatch('on-change-project')
触发on-change-project事件
5. 在pi-layout-head中的使用
5.1 组件集成
导入: `import PiProjectSelect from '../pi-project-select/pi-project-select.component'`
注册到components中
在模板中使用: `<PiProjectSelect :clientID="clientID" :isBillSystem="isBillSystem" @on-change-project="onChangeProject" />`
5.2 相关业务逻辑
onChangeProject()方法处理项目切换
更新sysTitle(系统标题)
更新sysLogoImage(系统logo)
更新qrCodeUrl(二维码地址)
调用fetchAnnouncements()更新公告
5.3 状态管理
使用PiBaseProjectModule管理项目状态
SET_SELECTED_NODE: 保存选中的项目节点
EMPTY_STORE: 清空项目存储
treeNode: 获取当前选中的项目节点
6. 相关事件与通知
**组件内部事件**: on-change-project
**全局事件**: on-change-project(通过EventManager.dispatch)
7. 系统集成点
与子系统切换(onChangeSubSystem)协同工作
与公告系统(fetchAnnouncements)集成
与用户偏好设置集成
与系统配置模块集成
8. 权限控制
通过disabled属性控制是否可操作
系统配置控制是否显示项目树
不同系统(isBillSystem)调用不同API
9. 数据持久化
使用PiBaseProjectModule进行状态管理
项目信息存储在sessionStorage中