From 8fd353a766c4048429240ddda650a32cea75c871 Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Tue, 20 Oct 2026 13:51:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor(manager):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E7=A9=BA=E7=8A=B6=E6=80=81=E3=80=81=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=9B=BE=E7=89=87=E5=8D=A0=E4=BD=8D=E5=B9=B6=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E9=81=97=E7=95=99=E6=B6=88=E6=81=AF=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加表格与树组件全局空状态 (el-empty) 样式规范 - 补齐视图图片语义化 alt,并添加全局图片加载异常 SVG 占位兜底 - 将砍价/秒杀/自定义面板中的 $Message 兼容语法替换为 ElMessage - 清理冗余依赖 vuex,将 sass-loader 调整至 devDependencies --- manager/package.json | 3 +- manager/src/main.js | 2 ++ manager/src/styles/element.scss | 27 ++++++++++++++++ manager/src/utils/imgFallback.js | 31 +++++++++++++++++++ manager/src/views/Main.vue | 2 +- manager/src/views/goods/goods-info/goods.vue | 2 +- .../src/views/goods/goods-review/index.vue | 2 +- manager/src/views/main-parts/header.vue | 2 +- manager/src/views/member/list/index.vue | 2 +- .../src/views/member/list/memberRecycle.vue | 2 +- .../after-order/afterSaleOrderDetail.vue | 4 +-- manager/src/views/order/order/orderDetail.vue | 2 +- .../wap/config-panel/PanelFlexOne.vue | 27 ++++++++-------- .../kanjia/kanjia-activity-add-goods.vue | 22 ++++++------- .../kanjia/kanjia-activity-edit-goods.vue | 22 ++++++------- .../kanjia/kanjia-activity-goods.vue | 2 +- .../src/views/promotions/live/live-detail.vue | 10 +++--- .../promotions/points-goods/points-goods.vue | 2 +- .../promotions/seckill/seckill-setup.vue | 4 +-- manager/src/views/seller/shop/shopDetail.vue | 2 +- .../setting-manage/setting/BASE_SETTING.vue | 12 +++---- .../sys/setting-manage/smsSettingManage.vue | 2 +- 22 files changed, 123 insertions(+), 63 deletions(-) create mode 100644 manager/src/utils/imgFallback.js diff --git a/manager/package.json b/manager/package.json index 3687b5d8f..b4fcff22d 100644 --- a/manager/package.json +++ b/manager/package.json @@ -26,7 +26,6 @@ "nprogress": "^0.2.0", "pinia": "^4.0.3", "sass": "^1.63.6", - "sass-loader": "^10.4.1", "sockjs-client": "^1.4.0", "swiper": "^6.3.5", "uuid": "^8.3.2", @@ -40,13 +39,13 @@ "devDependencies": { "@vue/cli-plugin-babel": "^5.0.9", "@vue/cli-plugin-router": "^5.0.9", - "@vue/cli-plugin-vuex": "^5.0.9", "@vue/cli-service": "^5.0.9", "@vue/compiler-sfc": "^3.5.35", "compression-webpack-plugin": "^10.0.0", "css-loader": "^6.10.0", "less": "^4.2.0", "less-loader": "^11.1.4", + "sass-loader": "^10.4.1", "style-loader": "^3.3.4", "style-resources-loader": "^1.5.0", "vue-cli-plugin-style-resources-loader": "^0.1.5", diff --git a/manager/src/main.js b/manager/src/main.js index f90eed1ff..f79e8d5bd 100644 --- a/manager/src/main.js +++ b/manager/src/main.js @@ -8,6 +8,7 @@ import { router } from "./router/index"; import i18n from "@/locale"; import { setupElementPlus } from "@/plugins/element"; import { setupLegacyMessage } from "@/utils/message"; +import { setupImgFallback } from "@/utils/imgFallback"; import liliDialog from "@/components/lili-dialog"; import PriceColorScheme from "@/components/price-color-scheme.vue"; import { install as installVueQr } from "vue-qr"; @@ -43,6 +44,7 @@ const app = createApp(App); setupElementPlus(app); setupLegacyMessage(app); +setupImgFallback(); installVueQr(app); app.use(router); diff --git a/manager/src/styles/element.scss b/manager/src/styles/element.scss index 6448267f8..ef9625311 100644 --- a/manager/src/styles/element.scss +++ b/manager/src/styles/element.scss @@ -119,3 +119,30 @@ #nprogress .peg { box-shadow: 0 0 4px var(--el-color-primary, #409eff), 0 0 2px var(--el-color-primary, #409eff); } + +/* 统一空状态:表格 / 树 / 列表无数据时的展示(未自定义 #empty 插槽的页面均生效) */ +.el-table__empty-block { + min-height: 160px; +} + +.el-table__empty-text, +.el-tree__empty-text { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + line-height: 1.5; + color: #909399; + font-size: 14px; + + &::before { + content: ""; + display: block; + width: 64px; + height: 64px; + margin-bottom: 8px; + opacity: 0.7; + background: no-repeat center / contain + url("data:image/svg+xml;utf8,"); + } +} diff --git a/manager/src/utils/imgFallback.js b/manager/src/utils/imgFallback.js new file mode 100644 index 000000000..496e759b5 --- /dev/null +++ b/manager/src/utils/imgFallback.js @@ -0,0 +1,31 @@ +/** + * 全局图片加载失败占位: + * 在捕获阶段监听 的 error 事件(error 不冒泡),失败时替换为内联 SVG 占位图。 + * - 每张图片只替换一次,占位图自身加载失败不会再次触发,避免死循环 + * - 空 src 不处理 + * - 需要自行处理 error 的图片可添加 data-no-fallback 属性跳过 + */ +const PLACEHOLDER = + "data:image/svg+xml;utf8," + + encodeURIComponent( + "" + + "" + + "" + + "" + + "" + ); + +export function setupImgFallback() { + document.addEventListener( + "error", + (event) => { + const el = event.target; + if (!el || el.tagName !== "IMG") return; + if (el.dataset.noFallback !== undefined || el.dataset.fallbackApplied) return; + if (!el.getAttribute("src")) return; + el.dataset.fallbackApplied = "1"; + el.src = PLACEHOLDER; + }, + true + ); +} diff --git a/manager/src/views/Main.vue b/manager/src/views/Main.vue index 358f4948b..b25a329c0 100644 --- a/manager/src/views/Main.vue +++ b/manager/src/views/Main.vue @@ -13,7 +13,7 @@ >
- + 平台 Logo
diff --git a/manager/src/views/goods/goods-info/goods.vue b/manager/src/views/goods/goods-info/goods.vue index ca92a3716..17b927bab 100644 --- a/manager/src/views/goods/goods-info/goods.vue +++ b/manager/src/views/goods/goods-info/goods.vue @@ -140,7 +140,7 @@