diff --git a/code/fms/.codebuddy/plans/file-api-implementation_11cb90d6.md b/code/fms/.codebuddy/plans/file-api-implementation_11cb90d6.md new file mode 100644 index 00000000..1955b9fa --- /dev/null +++ b/code/fms/.codebuddy/plans/file-api-implementation_11cb90d6.md @@ -0,0 +1,27 @@ +--- +name: file-api-implementation +overview: 实现文件组件的前后端接口层(不含页面组件)。后端新增 FileStorageProperties 配置类、FileService 业务逻辑、FileController 控制器(5 个端点)。前端新增 fileService.js 服务层。支持 local/aliyun-oss 双模式,通过 fms.file.storage-type 切换,使用 moduleId 作为模块标识。 +todos: + - id: modify-configs + content: 修改 application.yaml 新增 fms.file.* 配置段,修改 fms-api/.gitignore 追加 data/files/ + status: completed + - id: create-properties + content: 新建 FileStorageProperties.java 配置属性类(纯 getter/setter,无逻辑) + status: completed + dependencies: + - modify-configs + - id: create-file-service + content: 新建 FileService.java,实现 localUpload / ossCredential / delete 三个核心方法 + status: completed + dependencies: + - create-properties + - id: create-file-controller + content: 新建 FileController.java,5 个端点(config/upload/upload-credential/delete/static) + status: completed + dependencies: + - create-file-service + - id: create-frontend-service + content: 新建 fileService.js,封装上传/凭证/删除/预览逻辑,根据 storageType 自动切换链路 + status: completed +--- + diff --git a/code/fms/.workbuddy/memory/2026-08-02.md b/code/fms/.workbuddy/memory/2026-08-02.md new file mode 100644 index 00000000..1c72b59e --- /dev/null +++ b/code/fms/.workbuddy/memory/2026-08-02.md @@ -0,0 +1,166 @@ +# 2026-08-02 + +## 项目分析 + Skill 创建 +- 深入分析了 fms-api(Spring Boot + SQL Server 通用数据接口)和 fms-vue(Vue 3 + antdv-next)的完整架构 +- 创建了项目级 CodeBuddy Skill:`fms-dev`,位置 `.workbuddy/skills/fms-dev/` +- Skill 包含: + - `SKILL.md` — 开发模式速查(后端 3 种模式、前端 4 种页面模式、迁移脚本模板、踩坑清单、后端/前端代码约定、多语言规范)+ **ERP 前端样式规范**(三条禁令、间距/颜色/字体体系、弹窗规则、组件选型表,共 8 个子章节) + - `references/schema.md` — 模块管理六表 + 扩展配置表完整 schema + - `references/api-reference.md` — 所有通用端点详细参数文档 + +## fms-file 组件 UI 重构 +- 第一次误删了卡片网格和预览面板,用户指出只要改 UI 风格不要砍功能 → 回退后重新改造。 + +### 正确改造(保留全部功能,仅调 UI) +**FileCard.vue** — 缩略图 110→80px,背景 gradient→纯色,去掉 transition/box-shadow/backdrop-filter/hover 遮罩,按钮始终可见,选中态改用 1px 描边 +**FilePreviewPanel.vue** — 工具栏 44→36px,背景色调浅,图片去阴影、图标缩 96→72px +**FileListPanel.vue** — Header/Footer 44→36px,grid gap 12→8px,padding 收紧 +**FmsFile.vue** — 三面板 default-size 各缩 10%(240→220, 700→660),border-radius 6→4px +**FmsFileModal.vue** — 宽 1400→1200px,高 620→580px,标题改"附件管理" +**Dashboard** — 演示按钮文案更新 +- 编译验证通过(vite build: 833ms, 0 errors)。 + +### 追加:卡片/列表双模式 + 缩略图自适应 +**FileCard.vue** — `object-fit: cover` → `contain`,图片在固定卡片尺寸内完整展示不裁剪 +**FileListPanel.vue** — 新增 `viewMode`(grid/list)双模式切换: +- Header 右侧加 LayoutGrid/List 两个图标按钮,active 态高亮 +- 列表模式用 `a-table`(size=small),列:文件名(可点击预览)/大小/类型(tag)/操作(下载+删除) +- 列表与卡片共享同一 `selectedFileIds`,切换模式时选中状态保持 +- 列表模式待上传文件显示"待上传"tag,checkbox 禁用 +- `ResizeObserver` 自适应表格滚动高度 +- 编译验证通过(vite build: 822ms, 0 errors) + +### 追加:Modal 百分比布局 + 待上传文件 checkbox +**FmsFileModal.vue** — 宽度 `80%`,高度 `calc(70vh - 55px)`,自适应屏幕分辨率 +**FileCard.vue** — 去掉待上传文件 checkbox 的 `v-if="!isPending"` 限制,待上传文件也显示 checkbox +**FileListPanel.vue** — 修复 5 处阻止待上传文件选中的逻辑: +- `allChecked` 基于全部 `displayFiles` 而非仅 `uploadedFiles` +- `listRowSelection` 去掉 `disabled: !!record._pending` +- `toggleAll` 全选包含待上传 +- `onFileSelect` 去掉 `if (file._pending) return` 拦截 +- 模板 `:selected` 去掉 `!f._pending &&` 条件 +- `deleteSelected` 拆分为已上传(调接口)和待上传(从队列移除),降序删除防索引漂移 +- 编译验证通过(vite build: 792ms, 0 errors) + +### 追加:UI 优化(按钮默认大小、模式切换右移、空状态居中、拖拽/粘贴/点击上传) +- 所有按钮去掉 `size="small"`(FileListPanel header/footer/列表 + FileCard 删除/下载),header/footer 高度 36→40px +- 模式切换按钮移到 header 最右侧(位于删除按钮之后) +- 空状态仅显示"暂无相关文件"居中,去掉"选择文件"按钮和 `#description` 模板 +- 新增拖拽上传:`fl-main` 区域监听 dragenter/dragover/dragleave/drop,含蓝色虚线遮罩提示"释放文件到此处" +- 新增粘贴上传:`document.addEventListener("paste", handlePaste)` 检测剪贴板文件 +- 提取 `addFiles(fileList)` 统一处理点击/拖拽/粘贴文件的入队逻辑 +- 编译验证通过(vite build: 783ms, 0 errors) + +### fms-file 视觉优化(frontend-design skill 驱动,用户确认"全部落地") +- 新增 `fileVisual.js`:集中 EXT_COLOR 扩展名语义配色映射、extColor/extFromName/isImageType/formatSize,消除 FileCard/FileListPanel/FilePreviewPanel 三处重复 +- `main.scss` 补充令牌:`--fms-primary:#1677ff --fms-danger:#ff4d4f --fms-warning:#fa8c16` +- **令牌统一**:fms-file 全部组件硬编码灰/蓝(#e5e7eb/#fafafa/#8b8f96/#1677ff/#cf1322/#91caff)替换为 `--fms-*`,与全站设计语言对齐 +- **三栏顶部对齐**:FilePreviewPanel 工具栏 36→44px;FileCategoryPanel 新增 44px"分类"标题条;三栏顶部齐平 +- **FileCard 去噪音**:缩略图只留 checkbox;删除/下载改为 hover/选中才显现的底部操作条(不再四角浮动);"待上传"去掉 opacity 降透明度改左侧琥珀色边角标 + 文件名旁琥珀 tag;选中改 inset 2px 实色描边 +- **彩色类型方块(签名元素)**:按扩展名语义着色(PDF红/DOC蓝/XLS绿/IMG紫/ZIP橙…),卡片缩略图、列表 ext chip、预览通用图标三处一致复用 +- **间距/排版**:`.fl-main` 四边统一 12px;网格 gap 8→10px;消灭 10–11px 极小字,卡片名 13px/500、meta 12px/400;空态 height:100% 居中 +- 拖拽遮罩改 `--fms-primary` 虚线 + color-mix 底色 +- 编译验证通过(vite build: 769ms, 0 errors) + +### fms-file 允许重复上传同一文件 +- 问题:上传一次后无法再次上传相同文件。排查结论:后端 `FileService` 无任何同名去重(每次 INSERT 新 subid + UUID 磁盘名),唯一拦截点是前端 `addFiles()` 内的 `pendingFiles.some(name+size+lastModified)` 跨调用去重。 +- 改动:移除 `addFiles()` 中去重比较,允许同一文件在多次独立操作(重新选/再拖一次)里反复加入待上传队列并提交。拖拽重复入栈问题此前已由 dragenter/dragleave 的 `currentTarget` 判断修好,无需保留该去重。 +- 验证:vite build 756ms 0 errors。 + +### fms-file 修复 `--fms-border is not defined` + 删除分类标题节点 +- 根因:`a-modal` 默认把内容 teleport 到 `
`,脱离了 `.theme-root`;而 `--fms-*` 令牌原先只定义在 `.theme-root`,导致模态框内全部令牌未定义 → 报 "--fms-border is not defined",且卡片/面板边框、颜色全部失效(这也解释了上一轮用户问"卡片怎么没边框")。 +- 修复 `main.scss`:把 10 个 `--fms-*` 令牌从 `.theme-root` 提升到 `:root`,全局可用;`.theme-root` 仅保留 color/background/overflow。 +- 按要求删除 FileCategoryPanel.vue 的 `