iloom-flatten/.microcompact/mpmowvxw/functions.Edit:4.txt

134 lines
5.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

The file /home/project/AGENTS.md has been updated. Made 1 replacement.
Here's the result of running `cat -n` on a snippet of the edited file:
466→- **UI 优化**
467→ - 纺织厂工作台"原坯布仓库"更名为"已生产坯布"
468→ - 更新首页快捷操作按钮标签
469→
470→## Bug 修复记录
471→
472→### 2025-05-26 计划字段显示不一致问题
473→
474→#### 问题描述
475→采购商和纺织厂的计划总览页面显示字段不一致纺织厂缺少克重、纱线配比、生产采购价等关键字段。
476→
477→#### 根本原因
478→- `usePlanData.ts` Hook 未查询 `products` 表关联数据
479→- `PlanGroup.tsx` 组件未展示 weight、yarn_ratios、production_price 等字段
480→- 纺织厂 `PlanOverview.tsx` 缺少展开详情视图
481→
482→#### 修复方案
483→1. **数据层**:在 `usePlanData.ts` 中添加 products 表查询,获取 weight、image_url 等字段
484→2. **组件层**:在 `PlanGroup.tsx` 中添加完整字段展示,包括:
485→ - 克重信息(经线/纬线/总克重)
486→ - 纱线配比列表
487→ - 生产采购价
488→ - 产品图片
489→ - 创建时间、计划开始时间、备注
490→3. **页面层**:纺织厂 `PlanOverview.tsx` 添加展开详情功能,与采购商保持一致
491→
492→#### 代码变更
493→- `src/hooks/usePlanData.ts` - 添加 products 表关联查询
494→- `src/components/plans/PlanGroup.tsx` - 扩展字段展示
495→- `src/pages/textile/PlanOverview.tsx` - 添加展开详情视图
496→- `src/pages/purchaser/PlanOverview.tsx` - 同步优化字段展示
497→
498→#### 经验教训
499→- **数据一致性**:同一业务对象在不同页面的展示应保持一致,仅根据角色权限控制敏感字段
500→- **Hook 复用**:通过统一的数据获取 Hook 确保各页面数据一致性
501→- **类型安全**:扩展类型定义时注意与数据库生成的类型保持兼容
502→
503→---
504→
505→### 2025-05-26 移动端退出按钮适配问题
506→
507→#### 问题描述
508→工作台右上角退出按钮在移动端显示为"退出登录"文字,占用过多空间,与整体移动端设计不协调。
509→
510→#### 根本原因
511→- 退出按钮未做响应式适配
512→- 移动端空间宝贵,文字按钮过于拥挤
513→
514→#### 修复方案
515→使用响应式设计桌面端显示"退出登录"文字,移动端仅显示 LogOut 图标:
516→```tsx
517→<button className="flex items-center gap-2 ...">
518→ <span className="hidden sm:inline">退出登录</span>
519→ <LogOut className="w-5 h-5" />
520→</button>
521→```
522→
523→#### 代码变更
524→- `src/pages/purchaser/Dashboard.tsx` - 退出按钮响应式优化
525→- `src/pages/textile/Dashboard.tsx` - 退出按钮响应式优化
526→- `src/pages/washing/Dashboard.tsx` - 退出按钮响应式优化
527→
528→---
529→
530→### 2025-05-26 拒绝计划状态同步问题
531→
532→#### 问题描述
533→纺织厂拒绝计划后计划卡片未立即更新视觉状态且仍显示在 Dashboard "最近计划"中。
534→
535→#### 根本原因
536→- 拒绝操作仅更新数据库,未更新本地状态
537→- Dashboard 和 PlanOverview 之间没有共享拒绝状态
538→- 页面刷新后拒绝状态丢失
539→
540→#### 修复方案
541→1. **本地状态管理**:在 `PlanOverview.tsx` 中使用 `Set<string>` 跟踪被拒绝的计划ID
542→2. **持久化存储**:使用 localStorage 存储拒绝状态,键名为 `textile_rejected_plans`
543→3. **跨页面同步**Dashboard 从 localStorage 读取拒绝状态并过滤最近计划
544→4. **视觉反馈**:被拒绝的计划显示灰色背景、"已拒绝"标签,并自动折叠
545→
546→#### 代码变更
547→- `src/pages/textile/PlanOverview.tsx` - 添加 rejectedPlans 状态和 localStorage 持久化
548→- `src/pages/textile/Dashboard.tsx` - 添加 rejectedPlanIds 状态,过滤最近计划
549→
550→#### 关键代码
551→```typescript
552→// PlanOverview.tsx - 拒绝时持久化
553→const handleRejectStep = async (step: PlanProcessStep) => {
554→ // ... 提交拒绝原因到数据库 ...
555→
556→ // 更新本地状态
557→ setRejectedPlans(prev => new Set([...prev, step.plan_id]));
558→
559→ // 持久化到 localStorage
560→ const stored = localStorage.getItem('textile_rejected_plans');
561→ const rejectedArray = stored ? JSON.parse(stored) : [];
562→ if (!rejectedArray.includes(step.plan_id)) {
563→ rejectedArray.push(step.plan_id);
564→ localStorage.setItem('textile_rejected_plans', JSON.stringify(rejectedArray));
565→ }
566→};
567→
568→// Dashboard.tsx - 读取并过滤
569→useEffect(() => {
570→ // ... 获取计划列表 ...
571→
572→ // 从 localStorage 读取拒绝状态
573→ const stored = localStorage.getItem('textile_rejected_plans');
574→ if (stored) {
575→ setRejectedPlanIds(new Set(JSON.parse(stored)));
576→ }
577→}, []);
578→
579→// 过滤最近计划
580→const filteredPlans = plans.filter(p => !rejectedPlanIds.has(p.id));
581→const recentPlans = filteredPlans.slice(0, 5);
582→```
583→
584→#### 经验教训
585→- **状态共享**:跨页面状态可考虑使用 localStorage、URL 参数或全局状态管理
586→- **乐观更新**:用户操作后应立即更新 UI再同步后端状态
587→- **数据过滤**Dashboard 展示的数据应根据业务规则进行过滤,而非直接展示原始数据
588→
589→---
590→
591→### 2025-05-25 TypeScript 类型兼容性问题
592→
593→#### 问题描述
594→添加图片功能后出现类型错误
595→```
596→Types of property 'image_url' are incompatible.