From 55d147b44f3ae9f40d44a69f8ca7539d05d42104 Mon Sep 17 00:00:00 2001 From: moyayu <1623253835@qq.com> Date: Sat, 9 May 2026 15:36:32 +0800 Subject: [PATCH] merge(scope): consolidate picker, goods, i18n, and layout updates --- .cursor/commit-summary/last-summary.md | 16 ++- .cursor/skills/commit-summary/SKILL.md | 38 ++--- .../sp-picker/pickers/picker-article.vue | 63 +++------ .../sp-picker/pickers/picker-coupon.vue | 17 ++- .../sp-picker/pickers/picker-goods.vue | 3 +- .../sp-picker/pickers/picker-link.vue | 21 +-- .../sp-picker/pickers/picker-live.vue | 22 +-- .../sp-picker/pickers/picker-lottery.vue | 18 +-- .../sp-picker/pickers/picker-marketing.vue | 3 +- .../sp-picker/pickers/picker-pages.vue | 17 ++- .../sp-picker/pickers/picker-planting.vue | 17 ++- .../pickers/picker-purchaseActivity.vue | 20 +-- .../sp-picker/pickers/picker-regactivity.vue | 19 +-- .../sp-picker/pickers/picker-share-page.vue | 17 ++- .../sp-picker/pickers/picker-shop.vue | 17 ++- .../sp-picker/pickers/picker-tag.vue | 17 ++- .../sp-picker/pickers/picker-template.vue | 13 +- .../sp-picker/pickers/picker-wxapp.vue | 20 +-- src/components/template_links/comps/list.vue | 12 +- src/i18n/locales/ar.json | 5 +- src/i18n/locales/en.json | 5 +- src/i18n/locales/zh-CN.json | 9 +- src/layout/basic/layout-sidebar.vue | 132 +++++++++++------- src/view/decorate/wgts/wgt_hotzone/config.js | 2 +- src/view/decorate/wgts/wgt_hotzone/index.vue | 18 +-- src/view/goods/components/SkuParams.vue | 52 +++---- src/view/goods/index.vue | 9 +- src/view/mall/goods/attributes/params.vue | 8 +- src/view/mall/goods/physical/list.vue | 8 +- .../goods/physical/supplier_goods_check.vue | 28 +++- 30 files changed, 356 insertions(+), 290 deletions(-) diff --git a/.cursor/commit-summary/last-summary.md b/.cursor/commit-summary/last-summary.md index 1bf2058..54d4b65 100644 --- a/.cursor/commit-summary/last-summary.md +++ b/.cursor/commit-summary/last-summary.md @@ -1,15 +1,23 @@ ## 本次变更总结 -**时间**: 2026-04-14 +**时间**: 2026-05-06 **涉及文件**: +- `src/view/decorate/wgts/wgt_hotzone/config.js` (修改) +- `src/view/decorate/wgts/wgt_hotzone/index.vue` (修改) - `src/view/mall/goods/physical/list.vue` (修改) +- `src/view/mall/goods/physical/supplier_goods_check.vue` (修改) +- `src/components/sp-picker/pickers/picker-marketing.vue` (修改) +- `src/components/template_links/comps/list.vue` (修改) - `src/i18n/locales/zh-CN.json` (修改) - `src/i18n/locales/en.json` (修改) - `src/i18n/locales/ar.json` (修改) **主要改动**: -- **审核状态列**:驳回原因展示条件由未定义的 `loginType == 'supplier'` 改为 **`IS_SUPPLIER()`**,消除 `ReferenceError: loginType is not defined`,避免表格渲染失败。 -- **批量提交审核**:`$confirm` 正文不再使用与「自定义运费」冲突的 **`d41d8cd9.b2c3d4`**;新增专用键 **`d41d8cd9.b1a2c3`**(中/英/阿),并删除 zh-CN 中重复的 `b2c3d4` 条目,保留「自定义运费」定义。 +- **热区挂件**:修正后台「横向/纵向」选项与 `animation` 取值、图片占位高度计算及预览样式类的对应关系,使「横向滚动」场景下高度与样式一致。 +- **实物商品列表**:批量停售/开售二次确认改用独立文案键(`g8h9i0j1` / `k2l3m4n5`),弹窗标题使用 `d41d8cd9.02d981`,避免与其它功能共用键导致文案错乱。 +- **zh-CN 国际化**:删除重复的 `d41d8cd9.p0q1r2` 等四条易冲突键;`en`/`ar` 补充上述停售确认相关翻译。 +- **供应商商品审核**:审核弹窗关闭时重置表单;切换为「通过」时清空驳回原因;提交批量审核时使用临时 `payload`,避免把 `item_ids` 写回持久表单状态。 +- **装修/链接**:页面路径中 `coupon_list` 的展示名由「优惠券」统一为「领券中心」(`223cc8af.2f3635` 三语言);营销页选择器与模板链接列表与该键对齐。 -**一句话概括**: fix: 自营商品列表审核列 loginType 与批量审核确认文案 +**一句话概括**: fix: 热区横纵向与供应商审核、领券中心路径文案 diff --git a/.cursor/skills/commit-summary/SKILL.md b/.cursor/skills/commit-summary/SKILL.md index 898795d..56c6461 100644 --- a/.cursor/skills/commit-summary/SKILL.md +++ b/.cursor/skills/commit-summary/SKILL.md @@ -28,40 +28,20 @@ git diff ### 2) 写出总结(中文) -按下面结构写一段**本次变更总结**,并**生成新的总结文档**(不覆盖旧文档): +在**当前对话回复**中按下面结构输出本次变更总结即可(**不要**在仓库内新建或修改 `.cursor/commit-summary/` 下的任何总结文档,包括 `YYYY-MM-DD-*.md`、`last-summary.md` 等)。 -**文档命名**:`YYYY-MM-DD-{tb号}.md`,保存到 `.cursor/commit-summary/` 目录。 -- 示例:`2026-03-06-ECX-8058.md` -- 若用户当次对话中提供了 Teambition/需求单号(如 ECX-xxxx),则用该 tb 号作为文件名后半部分。 -- 若未提供 tb 号,则使用 `YYYY-MM-DD-summary.md`,或根据「一句话概括」生成简短英文标识(如 `coupon-list-i18n`)。 +**回复中建议包含**: -**总结文档结构**: - -```markdown -## 本次变更总结 - -**时间**: YYYY-MM-DD - -**涉及文件**: -- 路径1 (新增/修改/删除) -- 路径2 (修改) -- ... - -**主要改动**: -- 模块/功能1:简要说明 -- 模块/功能2:简要说明 -- ... - -**一句话概括**: (用作 commit message 的简短描述) -``` +- **涉及文件**:列出主要路径(新增/修改/删除) +- **主要改动**:按模块或功能分点说明 +- **一句话概括**:用作 commit message 标题(首行 ≤50 字) - 总结要基于实际 diff,不要编造。 - 若用户有特殊要求(如按「功能/修复/文档」分类),按用户要求组织。 -- 每次总结都写入**新文件**,便于按日期和 tb 号追溯;可同时更新 `last-summary.md` 为本次内容(便于「最近一次」查看)。 ### 3) 是否执行提交 -- **仅总结、不提交**:用户只说「总结」「记录」时,只输出总结并(可选)写入 `last-summary.md`,不执行 `git add` / `git commit`。可追问:「需要我帮你直接提交吗?」 +- **仅总结、不提交**:用户只说「总结」「记录」时,只输出上述总结,不执行 `git add` / `git commit`。可追问:「需要我帮你直接提交吗?」 - **总结并提交**:用户明确说「并提交」「直接 commit」「帮我 commit」时,继续执行步骤 4。 ### 4) 执行提交(仅在用户要求提交时) @@ -90,6 +70,6 @@ git diff ## 示例对话 -- 用户:「帮我总结这次改了什么并提交」→ 获取 diff → 写总结 → **新建** `.cursor/commit-summary/YYYY-MM-DD-{tb号}.md`(无 tb 号则用 `YYYY-MM-DD-summary.md`)→ 可选更新 last-summary.md → git add → git commit。 -- 用户:「先总结一下我改了啥」→ 只执行获取 diff 与写总结,并生成新的日期+tb号总结文档,不 commit,可问「需要我帮你直接提交吗?」。 -- 用户:「记录一下然后 commit」→ 写总结、生成新总结文档并执行 commit。 +- 用户:「帮我总结这次改了什么并提交」→ 获取 diff → 在对话中写总结 → git add → git commit。 +- 用户:「先总结一下我改了啥」→ 获取 diff → 在对话中写总结,不 commit,可问「需要我帮你直接提交吗?」。 +- 用户:「记录一下然后 commit」→ 在对话中写总结并执行 commit。 diff --git a/src/components/sp-picker/pickers/picker-article.vue b/src/components/sp-picker/pickers/picker-article.vue index f73a5a2..e060b43 100755 --- a/src/components/sp-picker/pickers/picker-article.vue +++ b/src/components/sp-picker/pickers/picker-article.vue @@ -11,26 +11,9 @@ .sp-finder-hd { display: none; } - .sp-finder { - &.no-multiple { - .sp-finder-bd { - .el-table__fixed-header-wrapper { - table thead { - tr { - th { - &:nth-child(1) { - .el-checkbox { - display: none; - } - } - } - } - } - } - } - .el-table__fixed-body-wrapper { - top: 38px !important; - } + .disableheadselection { + > .cell .el-checkbox__inner { + display: none; } } .el-pagination { @@ -48,13 +31,18 @@ --> - - - {{ menuDisplayName(item) }} + + + {{ menuDisplayName(item) }} + + @@ -76,9 +86,10 @@ v-if="child.is_menu" :key="child.alias_name" :index="child.alias_name" - @click="handleSubMenuClick(child)" > - {{ menuDisplayName(child) }} + + {{ menuDisplayName(child) }} + @@ -89,9 +100,10 @@ v-if="item.is_menu" :key="item.alias_name" :index="item.alias_name" - @click="handleSubMenuClick(item)" > - {{ menuDisplayName(item) }} + + {{ menuDisplayName(item) }} + @@ -220,49 +232,60 @@ export default { resolveChildren(children) { return children && children.length > 0 && children.some((child) => child.is_menu) }, + /** 一级菜单下第一个可展示子菜单的 permission(与跳转逻辑一致,供 href 使用) */ + resolveMainMenuFirstPermission(item) { + const subMenus = item?.children || [] + const firstChild = (_submenu) => { + for (const it of _submenu) { + if (it.children) { + const result = firstChild(it.children) + if (result) return result + } else if (it.is_menu) { + return it?.permission + } + } + return null + } + if (subMenus.length === 0) { + return item.permission + } + return firstChild(subMenus) + }, + getNotFoundPath() { + const basePath = getBasePath() + return basePath ? `/${basePath}/not-found` : '/not-found' + }, + /** 主导航在新标签页打开时的目标路径 */ + getMainMenuPath(item) { + const permission = this.resolveMainMenuFirstPermission(item) + const route = permission ? this.findRouteByPermission(permission) : null + return route?.path || this.getNotFoundPath() + }, + /** 侧栏子菜单在新标签页打开时的目标路径(与旧 layout.vue 中 router-link 行为一致) */ + getSubMenuPath(menuItem) { + const route = this.findRouteByPermission(menuItem.permission) + return route?.path || this.getNotFoundPath() + }, + onMainMenuLinkClick(e, item) { + if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) { + return + } + e.preventDefault() + this.handleMainMenuClick(item) + }, handleMainMenuClick(item) { if (item.alias_name == this.$route.matched?.[0]?.meta?.aliasName) { return } this.subMenus = item?.children || [] - // 获取第一个子路由 - const firstChild = (_submenu) => { - for (const item of _submenu) { - if (item.children) { - const result = firstChild(item.children) - if (result) return result - } else if (item.is_menu) { - return item?.permission - } - } - return null - } - // 如果只有一级菜单,就直接那当前一级菜单的权限 - let permission = '' - if (this.subMenus.length === 0) { - permission = item.permission - } else { - permission = firstChild(this.subMenus) - } - - const route = this.findRouteByPermission(permission) + const permission = this.resolveMainMenuFirstPermission(item) + const route = permission ? this.findRouteByPermission(permission) : null if (route) { this.$router.push({ path: route.path }) } else { this.toNotFound() } }, - handleSubMenuClick(item) { - const route = this.findRouteByPermission(item.permission) - if (route) { - if (this.$route.path === route.path) { - return - } - this.$router.push({ path: route.path }) - } else { - this.toNotFound() - } - }, findRouteByPermission(permission) { return this.$router.getRoutes().find((route) => route.meta?.permissions?.includes(permission)) }, @@ -518,6 +541,19 @@ export default {