feat: PLANNING体系首版(00路线图/02任务总表/03执行协议/I-03/I-04/registry42口径)+M1止血交付
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
# IP定位功能验证检查清单
|
||||
|
||||
## 1. IPLocation.tsx 页面功能 (`src/pages/IPLocation/IPLocation.tsx`)
|
||||
|
||||
- [x] IP定位页面正确加载并自动查询当前IP(useEffect中调用fetchMyIP)
|
||||
- [x] 输入框输入IP后点击查询能正确返回结果(queryByIP函数)
|
||||
- [x] 页面展示国家、城市、ISP、经纬度等信息(Descriptions组件)
|
||||
- [x] 错误信息正确显示(IP格式错误、查询失败等)
|
||||
|
||||
**详细说明:**
|
||||
- 第101-103行:`useEffect(() => { fetchMyIP(); }, []);` 页面加载时自动查询
|
||||
- 第73-99行:`queryByIP` 函数处理IP查询,包含格式验证和成功/失败提示
|
||||
- 第205-236行:使用 `Descriptions` 组件展示IP地址、国家、省份/地区、城市、ISP、时区、纬度、经度
|
||||
- 第46-53行:`isValidIP` 函数验证IPv4和IPv6格式
|
||||
- 第183-193行:错误状态展示
|
||||
|
||||
## 2. IPLocation.css 样式 (`src/pages/IPLocation/IPLocation.css`)
|
||||
|
||||
- [x] 页面样式正确,支持响应式布局(768px/480px断点)
|
||||
- [x] 支持暗色模式
|
||||
|
||||
**详细说明:**
|
||||
- 第299-331行:768px响应式断点,搜索容器垂直排列
|
||||
- 第333-374行:480px响应式断点,优化移动端显示
|
||||
- 第6-8行、第197-296行:暗色模式样式(`[data-theme="dark"]`)
|
||||
- 第377-394行:动画效果(iplFadeIn)
|
||||
|
||||
## 3. request.ts API函数 (`src/utils/request.ts`)
|
||||
|
||||
- [x] ipLocation API 函数已添加
|
||||
|
||||
**详细说明:**
|
||||
- 第512-515行:
|
||||
```typescript
|
||||
const ipLocation = {
|
||||
getMyIP: () => request.public.get('/getIpData/'),
|
||||
queryByIP: (ip: string) => request.public.get('/getIpData/', { ip }),
|
||||
};
|
||||
```
|
||||
- 第547行:已导出到 `api_request` 对象中
|
||||
|
||||
## 4. App.tsx 路由 (`src/App.tsx`)
|
||||
|
||||
- [x] /ip-location 路由正确跳转到IP定位页面
|
||||
|
||||
**详细说明:**
|
||||
- 第88行:`const IPLocation = lazy(() => import("@/pages/IPLocation/IPLocation"));`
|
||||
- 第162行:`<Route path="/ip-location" element={<IPLocation />} />`
|
||||
|
||||
## 5. Tools.tsx 工具卡片 (`src/pages/Tools/Tools.tsx`)
|
||||
|
||||
- [x] 工具列表页面显示IP定位工具卡片
|
||||
- [x] 点击工具卡片正确跳转到IP定位页面
|
||||
|
||||
**详细说明:**
|
||||
- 第32行:IP地址定位卡片数据(id:3, name: "IP地址定位", url: "/api/getIpData/")
|
||||
- 第83行:点击卡片导航到 `/ip-location`(当url为`/api/getIpData/`时)
|
||||
- 第119行:按钮点击也导航到 `/ip-location`
|
||||
|
||||
## 6. ApiDetail.tsx 接口文档 (`src/pages/ApiDetail/ApiDetail.tsx`)
|
||||
|
||||
- [x] API文档页面正确展示IP定位接口
|
||||
|
||||
**详细说明:**
|
||||
- 第110行:`const isIPLocation = location.pathname === "/ip-location";`
|
||||
- 第113-114行:根据isIPLocation动态设置URL和headers
|
||||
- 第123-126行:使用ipLocation专用参数表和响应示例
|
||||
- 第87-89行:`ipLocationParams` 定义IP定位接口参数
|
||||
- 第53-66行:`ipLocationResponseExample` 定义响应示例
|
||||
|
||||
## 7. 中文翻译 (`src/locales/zh.json`)
|
||||
|
||||
- [x] 中文翻译完整
|
||||
|
||||
**详细说明:**
|
||||
- 第95-115行:`ipLocation` 包含所有中文翻译
|
||||
- title: "IP地址定位"
|
||||
- subtitle: "查询IP地址的地理位置信息"
|
||||
- inputPlaceholder: "请输入IP地址"
|
||||
- queryBtn: "查询"
|
||||
- myIP: "我的IP"
|
||||
- ipAddress, country, region, city, isp, latitude, longitude, timezone等字段
|
||||
- loading, querySuccess, queryFailed, invalidIP等状态提示
|
||||
|
||||
## 8. 英文翻译 (`src/locales/en.json`)
|
||||
|
||||
- [x] 英文翻译完整
|
||||
|
||||
**详细说明:**
|
||||
- 第95-115行:`ipLocation` 包含所有英文翻译
|
||||
- title: "IP Location"
|
||||
- subtitle: "Query geographic location of IP addresses"
|
||||
- inputPlaceholder: "Enter IP address"
|
||||
- queryBtn: "Query"
|
||||
- myIP: "My IP"
|
||||
- ipAddress, country, region, city, isp, latitude, longitude, timezone等字段
|
||||
- loading, querySuccess, queryFailed, invalidIP等状态提示
|
||||
|
||||
---
|
||||
|
||||
**验证日期:** 2026-07-28
|
||||
**验证结果:** 所有检查点均已通过 ✅
|
||||
@@ -0,0 +1,69 @@
|
||||
# IP定位API Spec
|
||||
|
||||
## Why
|
||||
当前系统已有基础的IP信息获取接口,但仅返回请求头中的IP地址,无法提供地理位置信息。需要实现完整的IP定位功能,支持根据IP地址获取国家、城市、ISP等详细信息,并提供友好的前端展示界面。
|
||||
|
||||
## What Changes
|
||||
- 增强后端 `GetIPDataView`,集成免费的IP地理定位服务(ip-api.com)
|
||||
- 支持自动获取客户端IP和指定IP查询
|
||||
- 添加Redis缓存机制,避免频繁请求外部API
|
||||
- 创建前端IP定位工具页面,提供交互式查询界面
|
||||
- 更新API文档页面,展示IP定位接口详情
|
||||
- 添加国际化支持
|
||||
|
||||
## Impact
|
||||
- Affected specs: API接口、工具页面
|
||||
- Affected code:
|
||||
- `chunyu_project/api/views/GetIPDataView.py`
|
||||
- `chunyu_project/api/urls.py`
|
||||
- `chunyu_project_react/src/pages/Tools/Tools.tsx`
|
||||
- `chunyu_project_react/src/pages/ApiDetail/ApiDetail.tsx`
|
||||
- `chunyu_project_react/src/utils/request.ts`
|
||||
- 新增: `chunyu_project_react/src/pages/IPLocation/IPLocation.tsx`
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: IP定位API增强
|
||||
系统SHALL提供增强的IP定位API,支持根据IP地址获取地理位置信息。
|
||||
|
||||
#### Scenario: 自动获取客户端IP信息
|
||||
- **WHEN** 用户调用GET /api/getIpData/ 不带参数
|
||||
- **THEN** 系统自动获取客户端IP并返回地理位置信息(国家、城市、ISP、经纬度等)
|
||||
|
||||
#### Scenario: 查询指定IP地址
|
||||
- **WHEN** 用户调用GET /api/getIpData/?ip=8.8.8.8
|
||||
- **THEN** 系统返回指定IP的地理位置信息
|
||||
|
||||
#### Scenario: 缓存机制生效
|
||||
- **WHEN** 同一IP地址在缓存有效期内被多次查询
|
||||
- **THEN** 系统从Redis缓存返回结果,不调用外部API
|
||||
|
||||
### Requirement: IP定位前端页面
|
||||
系统SHALL提供IP定位工具的前端页面,支持交互式查询。
|
||||
|
||||
#### Scenario: 自动查询当前IP
|
||||
- **WHEN** 用户访问IP定位页面
|
||||
- **THEN** 页面自动加载并显示当前客户端IP的地理位置信息
|
||||
|
||||
#### Scenario: 查询指定IP
|
||||
- **WHEN** 用户在输入框中输入IP地址并点击查询
|
||||
- **THEN** 页面显示该IP的详细信息,包括地图位置标记
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: API文档页面
|
||||
现有的API文档页面SHALL展示IP定位接口的完整文档。
|
||||
|
||||
#### Scenario: API文档展示
|
||||
- **WHEN** 用户访问API文档页面
|
||||
- **THEN** IP定位接口的参数、响应示例、错误码等信息应当正确展示
|
||||
|
||||
### Requirement: 工具列表页面
|
||||
工具列表页面SHALL包含IP定位工具的入口卡片。
|
||||
|
||||
#### Scenario: 工具卡片展示
|
||||
- **WHEN** 用户访问工具列表页面
|
||||
- **THEN** 显示IP定位工具卡片,点击可跳转到IP定位页面
|
||||
|
||||
## REMOVED Requirements
|
||||
无
|
||||
@@ -0,0 +1,32 @@
|
||||
# Tasks
|
||||
|
||||
- [x] Task 1: 增强后端IP定位API
|
||||
- [x] SubTask 1.1: 修改 GetIPDataView 集成 ip-api.com 免费地理定位服务
|
||||
- [x] SubTask 1.2: 实现自动获取客户端IP功能
|
||||
- [x] SubTask 1.3: 实现指定IP地址查询功能
|
||||
- [x] SubTask 1.4: 添加Redis缓存机制(缓存时间1小时)
|
||||
- [x] SubTask 1.5: 添加错误处理和超时控制
|
||||
|
||||
- [x] Task 2: 创建前端IP定位页面
|
||||
- [x] SubTask 2.1: 创建 IPLocation 页面组件
|
||||
- [x] SubTask 2.2: 实现IP地址输入和查询功能
|
||||
- [x] SubTask 2.3: 展示IP详细信息(国家、城市、ISP、经纬度)
|
||||
- [x] SubTask 2.4: 集成地图显示(使用静态地图或链接)
|
||||
- [x] SubTask 2.5: 添加页面样式和响应式布局
|
||||
|
||||
- [x] Task 3: 更新API请求工具和路由
|
||||
- [x] SubTask 3.1: 在 request.ts 中添加IP定位API调用函数
|
||||
- [x] SubTask 3.2: 更新路由配置,添加IP定位页面路由
|
||||
|
||||
- [x] Task 4: 更新工具列表和API文档
|
||||
- [x] SubTask 4.1: 更新 Tools.tsx 中的API列表,添加IP定位入口
|
||||
- [x] SubTask 4.2: 更新 ApiDetail.tsx 适配IP定位API展示
|
||||
|
||||
- [x] Task 5: 添加国际化支持
|
||||
- [x] SubTask 5.1: 添加IP定位相关的中英文翻译
|
||||
- [x] SubTask 5.2: 确保页面元素正确显示当前语言
|
||||
|
||||
# Task Dependencies
|
||||
- Task 2 依赖于 Task 1 和 Task 3
|
||||
- Task 4 依赖于 Task 2
|
||||
- Task 5 可以与 Task 2 并行进行
|
||||
Reference in New Issue
Block a user