# 摊位资质审核任务 **日期**:2026-10-09 **分支**:`test-202609v2`,不创建新分支。 **总进度**:已验证(后端定向测试与全量回归、两端 Node 测试及构建、静态审查)。初始功能与商品图片增量、通用组件替换及文件名规范、泰文语言包补齐均已提交/推送,SHA 以 Git 记录为准;未执行 SQL、部署联调,真实环境验收见 `quickstart.md`。 ## Specify - [x] T001 在 `spec.md` 记录用户确认的摊位级认证、两表存储和共同管理账号关系。 - [x] T002 在 `spec.md` 和 `data-model.md` 记录统一材料表单,不区分个人/公司、不按类型改变必填规则。 - [x] T003 表单已简化为四组统一资料;用户确认存量和新增一律补材料审核通过后营业。 ## Plan / Tasks - [x] T004 在 `plan.md` 记录模块分工、事务/并发保护、前后端范围与验证方式。 - [x] T005 已在 `contracts/api.md` 明确数值状态、接口入参/响应、权限和私有材料访问规则;`quickstart.md` 记录部署顺序和未验证项。 ## Implement - [x] T006 在 `updatesql/sql.md` 登记两表、索引、平台权限菜单及必要存量策略 SQL;只登记不执行。 - [x] T007 实现 `ruoyi-system` 摊位认证实体、Mapper/XML 以及 `ruoyi-admin` 业务服务/DTO。 - [x] T008 实现商家保存草稿/提交/查询,平台查询/通过/驳回;补权限、材料校验及并发条件更新。 - [x] T009 在 `foodie-store` 实现摊位认证提交及状态页面、夜市主进度入口,维护四语言。 - [x] T010 在 `foodie-admin-vue` 实现摊位审核列表与材料详情、审核和驳回入口,维护四语言。 - [x] T011 按确认策略接入营业、新订单及展示门禁;不阻断已存在订单履约,保留普通商家原审核。 - [x] T012 补充权限、状态、版本、重复审核/提交及门禁测试,运行 JDK 21 定向测试、模块打包和前端检查。 - [x] T013 检查变更范围、编码换行和文档一致性,记录实际未验证项目并更新任务进度。 ## 验证与审查记录 - 后端定向测试 53 个用例通过;后端 `mvn -pl ruoyi-admin -am package -DskipTests` 通过(打包阶段跳过测试,测试另行执行)。 - 商家 Node 用例 5/5、平台 Node 用例 16/16;两个 PC 构建通过,既有警告见 `quickstart.md`。 - 两端四语言每种各 50 个新 key 一致;平台新增源码 ESLint `--no-ignore` 检查通过。保持 CRLF,不改依赖清单/锁文件。 - 独立只读审查修正:真实 saveOrUpdate 门禁、state SQL 写入、闭店资料编辑、绑定异常隐私、Druid 参数日志与监控脱敏。收口检查另补上传引用必须返回 data 的回归。 - 2026-10-09 用户要求 commit push;交付分支为三个仓库的 `test-202609v2`,提交 SHA 与远端结果以 Git 记录和最终交付回复为准,不切换、不改写其他分支。 - 未验证:真实 MySQL 迁移/竞争/回滚、实际权限角色菜单、浏览器及私有文件部署联调、完整全量回归;清单详见 `quickstart.md`。 ## 图片组件增量(2026-10-09,用户确认) - [x] T014 用真实 Vue 组件补充失败回归:blob 地址不得拼接 API 前缀、参数化 JPEG 应展示、方框加号及每类数量限制。 - [x] T015 商家上传交互对齐门店管理,平台复用商品 `ImagePreview` 并保留同组预览;私有访问权限、审核状态及资料保存接口不变。 - [x] T016 两端图片加载支持 MIME 参数,仍拒绝 JSON/HTML;更新现有规格、计划及部署诊断说明。 - [x] T017 平台全部 Node 测试 20/20、商家 9/9 通过,两端构建成功(保留原有警告);审核图片组件 ESLint 通过,共享 ImagePreview 既有 30 项错误/1 项警告与 HEAD 基线一致,不扩展无关格式修改。核对本次改动与 CRLF,无后端代码/SQL 变更;实际浏览器、截图对应请求及服务器文件部署未联调,仍待验收。 ## 商品图片上传增量(2026-10-09,最新用户确认) **本增量进度:已验证(本地定向测试、构建;全量回归1项既有失败)**。未提交/推送。用户明确确认全部审核图片(含身份证)采用商品公共上传/访问,覆盖先前私有上传限制;申请详情、审核、营业门禁不变。 - [x] T018 先补失败回归:公共材料保存被旧校验拒绝、商家上传仍调用旧接口、两端公共图片仍请求旧私有接口;实际运行观察失败,再实现。 - [x] T019 商家复用 `/utils/Upload`,保存 `/profile/upload/...` 图片路径;后端验证实际图片文件,拒绝目录穿越、外部 URL、缺失/伪造/过大图片,保留旧引用归属检查。 - [x] T020 两端直接预览新公共图片,旧材料鉴权读取兼容;保留上传数量、忙锁、只读和同组预览。 - [x] T021 更新规格、计划、数据模型、接口及部署说明,补注释,明确公开链接风险、旧材料不迁移、无 SQL/新字段/App 改动。 - [x] T022 完成定向/全量测试、模块打包、两个 PC 构建及 CRLF/差异核对,记录未验证项。不自动提交/推送。 ### 本增量实际验证结果 - RED:后端公共路径保存回归1项失败;商家公共预览/商品上传接口回归2项失败;平台公共预览回归1项失败。GREEN:后端 `mvn -pl ruoyi-admin -am test -Dtest=StallQualification*Test -Dsurefire.failIfNoSpecifiedTests=false` 31/31 通过。 - 两个 PC `node --test tests/*.test.cjs`:商家11/11、平台21/21通过。覆盖公共路径直接预览、旧私有读取、商品 multipart 请求、只读/数量/忙锁、同组预览及 MIME 错误处理。 - JDK21 后端全模块 `mvn -pl ruoyi-admin -am test`:950项,949通过、1失败、0错误。唯一失败为已有 `BackendI18nBundleContractTest.everyLocalizedBundleHasTheSameNonBlankKeysAndPlaceholders`,`messages_th_TH.properties` 缺10个 `stall.qualification` key;本轮不改语言包或该测试,不把全量描述为通过。 - `mvn -pl ruoyi-admin -am package -DskipTests` 成功;商家 `vue-cli-service build --mode test` 和平台 `vue-cli-service build --mode staging`(命令内设置 OpenSSL兼容选项)成功。保留既有商家7项缺key提示、平台2个 `.vue~` 文件及包体积提示。 - 平台修改组件 ESLint `--no-ignore` 通过;三个仓库 `git diff --check` 通过,编辑文件保留 UTF-8/CRLF,没有改动通用上传实现、依赖/锁文件、i18n、SQL 或 App。 - 未验证:部署、真实登录浏览器上传与图片访问、旧文件服务器缺失/权限/代理故障、真实数据库与多实例目录共享;不上传凭证、不执行数据库或文件迁移。 ## 通用图片组件与文件名规范增量(2026-10-09,用户确认后收口) **本增量进度:已验证(后端定向 35/35、全量 952/952、商家 Node 11/11、平台 Node 20/20、商家 `build:test` 与平台 `build:stage` 构建成功)**。用户确认上传/展示图片组件换成其他功能通用的实现,后端公共上传统一规范化文件名。 - [x] T023 删除两端自建图片组件:商家 `StallQualification.vue` 直接用商品同款 `el-upload`(action 指向 `seruer + '/utils/Upload'`,`seruer = VUE_APP_BASE_URL`)与 `el-image` 展示;平台审核页直接用共享 `ImagePreview` 组件。旧私有引用仍在页面内小段 blob 兼容读取,接口不变;`StallQualificationImages.vue`、`PrivateImages.vue` 及商家自建 `uploadQualificationImage` 封装删除。 - [x] T024 `FileUploadUtils.extractFilename` 规范化 basename:`/ \ : * ? " < > | ; # % ,` 与控制字符替换为 `_`,保留 CJK 等合法字符,空名回退 `file`;新增 `FileUploadUtilsTest`,`身份证#正面.jpg`、`id,front_001.png` 等上传产物可全部通过材料公共路径校验,也消除逗号文件名对 `ImagePreview` 逗号分隔预览的截断。 - [x] T025 补齐 `messages_th_TH.properties` 的 10 个 `stall.qualification` key(泰文翻译),`BackendI18nBundleContractTest` 通过,后端全量回归不再有既有失败。 - 两端页面级 Node 测试改为针对页面行为:通用上传卡片 action/数量门禁/类型大小校验/成功追加公共路径、公共引用直显 `VUE_APP_BASE_URL`、历史私有引用 blob 读取与 JSON/HTML 拒绝、待审核只读。 ## 2026-10-16 审核资料扩展 - [x] T026 申请 DTO、快照实体、Mapper 和服务增加邮箱、介绍、银行资料及选填证明;食品登录资料改选填,银行四项提交必填,草稿与历史版本规则不变。新增服务/SQL 绑定测试,先确认缺少新字段导致 RED。 - [x] T027 商家 PC 新增字段及四组证明图片,银行名称复用现有台湾银行字典;平台 PC 详情展示新字段、移除草稿筛选。服务端列表/计数及平台详情排除草稿;两端四语言同步。 - [x] T028 034 规格、契约、部署说明及 `updatesql/sql.md` 追加 2026-10-16 增量,不执行数据库迁移。 - [x] T029 后端 JDK 21 全量测试和打包、商家 PC Node 测试及 `build:test`、平台 PC Node 测试及 `build:stage` 均通过;差异与 CRLF 已检查。SQL 未执行,真实环境联调未做;提交状态以 Git 记录为准。 - [x] T030 补充 `app-frontend-adjustment.md`,供 App 前端对接新资料字段、银行列表、图片上传、草稿及审核状态;App 页面代码未包含在本次三个仓库改动中。