refactor: 重构后端目录结构和命名规范
- 将后端目录名从大写改为小写 (Controller->controller 等) - 将命名空间从 App\ 改为 app\ (符合 webman 官方规范) - 移除不必要的 bootstrap 目录 - 完善出差审批业务功能: - 添加删除草稿功能 - 添加审批操作功能(同意/拒绝) - 完善审批详情页,显示审批人和审批记录 - 前端优化: - 调整列表页行高 - 隐藏底部导航栏 - 仪表盘只显示3个快捷入口 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -251,6 +251,33 @@ const handleSubmit = async () => {
|
||||
- `frontend/src/pages/business-trip/select-cc.tsx`
|
||||
- `frontend/src/pages/business-trip/apply.tsx`
|
||||
|
||||
#### 问题3:导航时草稿保存不及时
|
||||
**现象:** 用户输入内容后快速点击选择人员,返回时输入的内容丢失
|
||||
|
||||
**原因:** React 的 useEffect 是异步执行的,用户快速导航时,useEffect 可能还没来得及保存到 sessionStorage
|
||||
|
||||
**解决方案:** 在导航处理函数中立即保存草稿
|
||||
|
||||
```tsx
|
||||
const handleSelectApprovers = () => {
|
||||
// 导航前立即保存草稿
|
||||
const draftData = { reason, itineraries }
|
||||
sessionStorage.setItem('businessTripDraft', JSON.stringify(draftData))
|
||||
navigate('/business-trip/apply/select-approver', { state: { selected: approvers, type: 'approver' } })
|
||||
}
|
||||
|
||||
const handleSelectCc = () => {
|
||||
// 导航前立即保存草稿
|
||||
const draftData = { reason, itineraries }
|
||||
sessionStorage.setItem('businessTripDraft', JSON.stringify(draftData))
|
||||
navigate('/business-trip/apply/select-cc', { state: { selected: ccUsers, type: 'cc' } })
|
||||
}
|
||||
```
|
||||
|
||||
**关键点:**
|
||||
- ✅ 导航前同步保存草稿数据,不依赖 useEffect
|
||||
- ✅ 保留 useEffect 自动保存作为备份机制(防止用户不导航就离开页面)
|
||||
|
||||
### Ant Design Mobile DatePicker 点击无反应
|
||||
**问题:** DatePicker 组件使用 children render prop 方式时,点击无法弹出选择框
|
||||
|
||||
|
||||
Reference in New Issue
Block a user