|
@@ -40,6 +40,15 @@ In Progress
|
|
|
- [x] 根据点击的定位点ID显示对应的弹出框内容
|
|
- [x] 根据点击的定位点ID显示对应的弹出框内容
|
|
|
- [x] 验证种业弹出框数据正确显示(8个定位点对应8个弹出框)
|
|
- [x] 验证种业弹出框数据正确显示(8个定位点对应8个弹出框)
|
|
|
- [x] 验证果蔬弹出框数据正确显示(5个定位点对应5个弹出框)
|
|
- [x] 验证果蔬弹出框数据正确显示(5个定位点对应5个弹出框)
|
|
|
|
|
+- [x] 实现PopupInfoBox组件双款式支持
|
|
|
|
|
+ - [x] 创建新的PopupInfoBoxIcon款式
|
|
|
|
|
+ - [x] 修改PopupInfoBox组件支持两种款式
|
|
|
|
|
+ - [x] 每组大屏中的第一个定位点使用当前款式
|
|
|
|
|
+ - [x] 每组大屏中的第二个定位点使用新款式
|
|
|
|
|
+ - [x] 实现弹出框定位逻辑
|
|
|
|
|
+ - [x] 第一个款式以右下角为定位基准
|
|
|
|
|
+ - [x] 第二个款式以右上角为定位基准
|
|
|
|
|
+ - [x] 验证所有组合的款式切换正确性
|
|
|
- [ ] 验证种业-果蔬组合路由功能 (AC: #3, #4)
|
|
- [ ] 验证种业-果蔬组合路由功能 (AC: #3, #4)
|
|
|
- [ ] 测试路由`/supply-chain/seed-fruit`正确加载种业-果蔬数据
|
|
- [ ] 测试路由`/supply-chain/seed-fruit`正确加载种业-果蔬数据
|
|
|
- [ ] 验证组合内产业切换功能(种业↔果蔬)
|
|
- [ ] 验证组合内产业切换功能(种业↔果蔬)
|
|
@@ -177,6 +186,32 @@ const mapPoints = currentData?.mapPoints[currentIndustry] || [];
|
|
|
const keyMetrics = currentData?.keyMetrics[currentIndustry] || [];
|
|
const keyMetrics = currentData?.keyMetrics[currentIndustry] || [];
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
|
+#### 双款式PopupInfoBox设计
|
|
|
|
|
+
|
|
|
|
|
+**款式分配规则:**
|
|
|
|
|
+- **第一个定位点**:使用当前款式(右下角定位)
|
|
|
|
|
+- **第二个定位点**:使用新款式(右上角定位)
|
|
|
|
|
+- **后续定位点**:交替使用两种款式
|
|
|
|
|
+
|
|
|
|
|
+**定位逻辑:**
|
|
|
|
|
+```typescript
|
|
|
|
|
+// 根据定位点索引确定款式和定位方式
|
|
|
|
|
+const getPopupStyle = (pointIndex: number) => {
|
|
|
|
|
+ const isFirstStyle = pointIndex % 2 === 0; // 偶数索引使用第一款,奇数索引使用第二款
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ variant: isFirstStyle ? 'first' : 'second',
|
|
|
|
|
+ anchor: isFirstStyle ? 'bottom-right' : 'top-right'
|
|
|
|
|
+ };
|
|
|
|
|
+};
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**实现策略:**
|
|
|
|
|
+1. 创建新的PopupInfoBoxIcon组件(第二款式)
|
|
|
|
|
+2. 修改PopupInfoBox组件支持variant属性
|
|
|
|
|
+3. 根据定位点索引动态选择款式
|
|
|
|
|
+4. 实现不同的定位计算逻辑
|
|
|
|
|
+
|
|
|
#### 颜色系统规范 [Source: docs/prd/epic-005-supply-chain-visualization.md#样式系统]
|
|
#### 颜色系统规范 [Source: docs/prd/epic-005-supply-chain-visualization.md#样式系统]
|
|
|
- **种业产业**: 主色 #5DEF8B
|
|
- **种业产业**: 主色 #5DEF8B
|
|
|
- **果蔬产业**: 主色 #FFF586
|
|
- **果蔬产业**: 主色 #FFF586
|
|
@@ -334,14 +369,22 @@ const KeyMetrics: React.FC<KeyMetricsProps> = ({ title, subtitle }) => {
|
|
|
12. **定位点ID与弹出框数据映射关系已验证** - 种业8个定位点和果蔬5个定位点的映射关系100%正确
|
|
12. **定位点ID与弹出框数据映射关系已验证** - 种业8个定位点和果蔬5个定位点的映射关系100%正确
|
|
|
13. **所有组合弹出框数据已完整实现** - 为所有4个组合的49个定位点添加了对应的弹出框数据
|
|
13. **所有组合弹出框数据已完整实现** - 为所有4个组合的49个定位点添加了对应的弹出框数据
|
|
|
14. **映射规则一致性已验证** - 所有组合的定位点ID与弹出框ID映射关系100%正确
|
|
14. **映射规则一致性已验证** - 所有组合的定位点ID与弹出框ID映射关系100%正确
|
|
|
|
|
+15. **双款式PopupInfoBox需求已识别** - 需要为PopupInfoBox组件添加两种款式支持,并实现不同的定位逻辑
|
|
|
|
|
+16. **双款式PopupInfoBox功能已实现** - 已成功实现两种款式支持和不同的定位逻辑
|
|
|
|
|
+17. **款式分配规则已实现** - 偶数索引使用第一款(右下角定位),奇数索引使用第二款(右上角定位)
|
|
|
|
|
+18. **PopupInfoBox2图标已修复** - 已修复SVG属性语法问题
|
|
|
|
|
|
|
|
### File List
|
|
### File List
|
|
|
#### 需要修改的文件
|
|
#### 需要修改的文件
|
|
|
- `src/client/home/pages/SupplyChainDashboards/components/SupplyChainMap.tsx` - 需要修改为使用动态定位点数据
|
|
- `src/client/home/pages/SupplyChainDashboards/components/SupplyChainMap.tsx` - 需要修改为使用动态定位点数据
|
|
|
- `src/client/home/pages/SupplyChainDashboards/components/KeyMetrics.tsx` - 需要修改为使用动态关键指标数据
|
|
- `src/client/home/pages/SupplyChainDashboards/components/KeyMetrics.tsx` - 需要修改为使用动态关键指标数据
|
|
|
|
|
|
|
|
|
|
+#### 需要创建的文件
|
|
|
|
|
+- 无
|
|
|
|
|
+
|
|
|
#### 已完成修改的文件
|
|
#### 已完成修改的文件
|
|
|
-- `src/client/home/pages/SupplyChainDashboards/components/PopupInfoBox.tsx` - ✅ 已修改为使用动态弹出框数据,并建立定位点ID与弹出框数据的映射关系
|
|
|
|
|
|
|
+- `src/client/home/pages/SupplyChainDashboards/components/PopupInfoBox.tsx` - ✅ 已修改为使用动态弹出框数据,并建立定位点ID与弹出框数据的映射关系,添加双款式支持和定位逻辑
|
|
|
|
|
+- `src/client/home/pages/SupplyChainDashboards/components/icons/PopupInfoBox2.tsx` - ✅ 已修复SVG属性语法
|
|
|
- `src/client/home/pages/SupplyChainDashboards/context/SupplyChainContext.tsx` - ✅ 已为所有4个组合的49个定位点添加对应的弹出框数据,并移除重复的坐标定义
|
|
- `src/client/home/pages/SupplyChainDashboards/context/SupplyChainContext.tsx` - ✅ 已为所有4个组合的49个定位点添加对应的弹出框数据,并移除重复的坐标定义
|
|
|
|
|
|
|
|
#### 已完成的文件
|
|
#### 已完成的文件
|
|
@@ -352,10 +395,11 @@ const KeyMetrics: React.FC<KeyMetricsProps> = ({ title, subtitle }) => {
|
|
|
- `src/client/home/pages/SupplyChainDashboards/SupplyChainDashboard.tsx` - 统一组件已支持所有组合
|
|
- `src/client/home/pages/SupplyChainDashboards/SupplyChainDashboard.tsx` - 统一组件已支持所有组合
|
|
|
|
|
|
|
|
## QA Results
|
|
## QA Results
|
|
|
-- **功能完整性**: ⚠️ 数据已实现但组件未使用动态数据
|
|
|
|
|
|
|
+- **功能完整性**: ⚠️ 数据已实现但组件未使用动态数据,双款式功能已实现
|
|
|
- **代码质量**: ✅ TypeScript类型安全,数据结构完整
|
|
- **代码质量**: ✅ TypeScript类型安全,数据结构完整
|
|
|
- **性能**: ✅ React Query缓存机制已实现
|
|
- **性能**: ✅ React Query缓存机制已实现
|
|
|
- **兼容性**: ✅ 与现有架构完全兼容
|
|
- **兼容性**: ✅ 与现有架构完全兼容
|
|
|
-- **测试覆盖**: ⚠️ 需要添加单元测试验证数据正确性
|
|
|
|
|
|
|
+- **测试覆盖**: ⚠️ 需要添加单元测试验证数据正确性和款式切换
|
|
|
- **文档**: ✅ 代码注释完整,接口定义清晰
|
|
- **文档**: ✅ 代码注释完整,接口定义清晰
|
|
|
-- **组件数据流**: ❌ SupplyChainMap和KeyMetrics组件使用硬编码数据,需要修改
|
|
|
|
|
|
|
+- **组件数据流**: ❌ SupplyChainMap和KeyMetrics组件使用硬编码数据,需要修改
|
|
|
|
|
+- **UI/UX**: ✅ 双款式弹出框设计已实现,定位逻辑正确
|