fix: react hook
This commit is contained in:
parent
2bca550848
commit
93dd60c082
|
|
@ -495,18 +495,30 @@ def update_segment_name(
|
|||
updated = False
|
||||
tracks_data = draft_content.get('tracks', [])
|
||||
|
||||
for track in tracks_data:
|
||||
logger.info(f"Searching for segment {segment_id} in {len(tracks_data)} tracks")
|
||||
|
||||
for track_idx, track in enumerate(tracks_data):
|
||||
if isinstance(track, dict):
|
||||
segments = track.get('segments', [])
|
||||
for segment in segments:
|
||||
if isinstance(segment, dict) and segment.get('id') == segment_id:
|
||||
segment['name'] = new_name
|
||||
updated = True
|
||||
break
|
||||
logger.info(f"Track {track_idx} has {len(segments)} segments")
|
||||
|
||||
for seg_idx, segment in enumerate(segments):
|
||||
if isinstance(segment, dict):
|
||||
seg_id = segment.get('id')
|
||||
seg_name = segment.get('name', 'Unknown')
|
||||
logger.info(f" Segment {seg_idx}: id={seg_id}, name={seg_name}")
|
||||
|
||||
if seg_id == segment_id:
|
||||
old_name = segment.get('name', 'Unknown')
|
||||
segment['name'] = new_name
|
||||
updated = True
|
||||
logger.info(f"Updated segment {segment_id}: '{old_name}' -> '{new_name}'")
|
||||
break
|
||||
if updated:
|
||||
break
|
||||
|
||||
if not updated:
|
||||
logger.warning(f"Segment not found: {segment_id}")
|
||||
response.error(-32607, f"片段不存在: {segment_id}")
|
||||
return
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,15 @@ const TemplateDetailPageV2: React.FC = () => {
|
|||
|
||||
setTemplate(templateInfo)
|
||||
setTemplateDetail(detail)
|
||||
|
||||
// 调试信息:显示加载的模板详情
|
||||
console.log('Template detail loaded:', {
|
||||
templateId: templateInfo.id,
|
||||
tracksCount: detail?.tracks?.length || 0,
|
||||
segments: detail?.tracks?.flatMap(track =>
|
||||
track.segments?.map(seg => ({ id: seg.id, name: seg.name })) || []
|
||||
) || []
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Failed to load template detail:', error)
|
||||
} finally {
|
||||
|
|
@ -94,7 +103,7 @@ const TemplateDetailPageV2: React.FC = () => {
|
|||
if (!templateDetail || !template) return
|
||||
|
||||
try {
|
||||
// 先更新本地状态中的片段名称
|
||||
// 先更新本地状态中的片段名称(立即响应用户操作)
|
||||
const updatedDetail = {
|
||||
...templateDetail,
|
||||
tracks: templateDetail.tracks.map(track => ({
|
||||
|
|
@ -116,13 +125,23 @@ const TemplateDetailPageV2: React.FC = () => {
|
|||
|
||||
if (success) {
|
||||
console.log(`Segment ${segmentId} renamed to: ${newName} - saved to database`)
|
||||
|
||||
// 重新加载模板详情以确保数据一致性
|
||||
const freshDetail = await TemplateServiceV2.getTemplateDetail(template.id)
|
||||
if (freshDetail) {
|
||||
setTemplateDetail(freshDetail)
|
||||
console.log('Template detail reloaded from database')
|
||||
}
|
||||
} else {
|
||||
console.error('Failed to save segment name change to database')
|
||||
// 可以选择回滚本地状态或显示错误提示
|
||||
// 回滚本地状态
|
||||
await loadTemplateDetail()
|
||||
alert('保存片段名称失败,已恢复原始状态')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error updating segment name:', error)
|
||||
// 可以选择回滚本地状态或显示错误提示
|
||||
// 回滚本地状态
|
||||
await loadTemplateDetail()
|
||||
alert('保存片段名称失败: ' + (error instanceof Error ? error.message : '未知错误'))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,140 @@
|
|||
# 片段重命名调试指南
|
||||
|
||||
## 问题诊断步骤
|
||||
|
||||
### 1. 检查前端调用
|
||||
|
||||
在浏览器开发者工具的控制台中查看以下日志:
|
||||
|
||||
```javascript
|
||||
// 当用户重命名片段时,应该看到:
|
||||
"Segment {segmentId} renamed to: {newName} - saved to database"
|
||||
"Template detail reloaded from database"
|
||||
|
||||
// 以及模板详情加载日志:
|
||||
"Template detail loaded: {templateId: ..., tracksCount: ..., segments: [...]}"
|
||||
```
|
||||
|
||||
### 2. 检查后端日志
|
||||
|
||||
在后端日志中查看以下信息:
|
||||
|
||||
```
|
||||
INFO - Searching for segment {segment_id} in {track_count} tracks
|
||||
INFO - Track {track_idx} has {segment_count} segments
|
||||
INFO - Segment {seg_idx}: id={seg_id}, name={seg_name}
|
||||
INFO - Updated segment {segment_id}: '{old_name}' -> '{new_name}'
|
||||
```
|
||||
|
||||
### 3. 验证数据库更新
|
||||
|
||||
可以通过以下方式验证:
|
||||
|
||||
1. **前端验证**:
|
||||
- 重命名片段后,刷新页面
|
||||
- 检查片段名称是否保持新名称
|
||||
|
||||
2. **后端验证**:
|
||||
- 查看数据库中的 `draft_content` 字段
|
||||
- 确认片段名称已更新
|
||||
|
||||
### 4. 常见问题排查
|
||||
|
||||
#### 问题1:片段ID不匹配
|
||||
- **症状**:后端日志显示"片段不存在"
|
||||
- **原因**:前端传递的 segmentId 与数据库中的不匹配
|
||||
- **解决**:检查片段ID的生成和传递逻辑
|
||||
|
||||
#### 问题2:权限问题
|
||||
- **症状**:后端返回"无权限修改模板"
|
||||
- **原因**:用户ID不匹配或权限验证失败
|
||||
- **解决**:检查用户认证状态
|
||||
|
||||
#### 问题3:数据库连接问题
|
||||
- **症状**:更新操作失败
|
||||
- **原因**:数据库连接或事务问题
|
||||
- **解决**:检查数据库连接和事务处理
|
||||
|
||||
#### 问题4:前端状态不同步
|
||||
- **症状**:本地显示更新但刷新后恢复
|
||||
- **原因**:后端更新失败但前端没有回滚
|
||||
- **解决**:检查错误处理和状态回滚逻辑
|
||||
|
||||
## 调试命令
|
||||
|
||||
### 手动测试后端API
|
||||
|
||||
```bash
|
||||
# 测试更新片段名称
|
||||
python -m python_core.cli template update-segment <template_id> <segment_id> "新名称" --user-id <user_id> --verbose
|
||||
|
||||
# 测试获取模板详情
|
||||
python -m python_core.cli template detail <template_id> --user-id <user_id> --verbose
|
||||
```
|
||||
|
||||
### 检查数据库状态
|
||||
|
||||
```sql
|
||||
-- 查看模板的 draft_content
|
||||
SELECT id, name, draft_content FROM templates WHERE id = '<template_id>';
|
||||
|
||||
-- 检查片段名称
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
JSON_EXTRACT(draft_content, '$.tracks[*].segments[*].name') as segment_names
|
||||
FROM templates
|
||||
WHERE id = '<template_id>';
|
||||
```
|
||||
|
||||
## 预期行为
|
||||
|
||||
### 正常流程
|
||||
|
||||
1. **用户操作**:双击片段 → 选择分类 → 确认
|
||||
2. **前端处理**:
|
||||
- 立即更新本地状态(UI响应)
|
||||
- 调用后端API保存
|
||||
- 重新加载模板详情
|
||||
3. **后端处理**:
|
||||
- 验证权限和数据
|
||||
- 更新数据库中的 draft_content
|
||||
- 返回成功状态
|
||||
4. **结果验证**:
|
||||
- 页面刷新后名称保持
|
||||
- 控制台显示成功日志
|
||||
|
||||
### 错误处理
|
||||
|
||||
1. **网络错误**:显示错误提示,回滚本地状态
|
||||
2. **权限错误**:显示权限提示
|
||||
3. **数据错误**:显示数据错误提示,回滚状态
|
||||
|
||||
## 修复历史
|
||||
|
||||
### 已修复的问题
|
||||
|
||||
1. ✅ **后端API缺失**:添加了 `update-segment` CLI命令
|
||||
2. ✅ **前端调用缺失**:添加了 `updateSegmentName` 方法
|
||||
3. ✅ **状态同步问题**:添加了重新加载逻辑
|
||||
4. ✅ **错误处理**:添加了完善的错误处理和回滚
|
||||
|
||||
### 当前状态
|
||||
|
||||
- ✅ Python CLI命令:`template update-segment`
|
||||
- ✅ Rust Tauri命令:`update_template_segment_cli`
|
||||
- ✅ TypeScript服务方法:`updateSegmentName`
|
||||
- ✅ 前端处理逻辑:`handleSegmentNameChange`
|
||||
- ✅ 错误处理和状态回滚
|
||||
- ✅ 调试日志和验证
|
||||
|
||||
## 下一步
|
||||
|
||||
如果问题仍然存在,请:
|
||||
|
||||
1. 检查浏览器控制台的日志输出
|
||||
2. 检查后端服务的日志
|
||||
3. 手动测试后端CLI命令
|
||||
4. 验证数据库中的数据是否正确更新
|
||||
|
||||
通过这些步骤可以准确定位问题所在。
|
||||
Loading…
Reference in New Issue