From 5147a559154a34e6f1b39d48f3a6873b7ee93305 Mon Sep 17 00:00:00 2001 From: liulong <18539103286> Date: Mon, 25 May 2026 21:23:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:1.=E6=A0=87=E7=AD=BE=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E5=8F=8A=E7=9C=81=E7=95=A5=202.=E8=B0=83=E6=95=B4=E6=94=BF?= =?UTF-8?q?=E7=AD=96=E9=A1=B5=E9=9D=A2=203.=E5=B8=83=E5=B1=80=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- txw-mhzc-web/package.json | 2 +- .../pages/index/utils/gxnlpt-tag-overflow.js | 48 +++ .../src/pages/index/views/fwsc/fwsc.vue | 5 +- .../src/pages/index/views/fwsc/index.vue | 2 +- .../gxnlpt/components/GxnlptCardTags.vue | 243 +++++++++++++ .../src/pages/index/views/gxnlpt/index.vue | 328 ++++++++---------- .../src/pages/index/views/qych/index.vue | 153 ++++++-- .../tests/unit/gxnlpt-tag-overflow.test.js | 38 ++ 8 files changed, 587 insertions(+), 232 deletions(-) create mode 100644 txw-mhzc-web/src/pages/index/utils/gxnlpt-tag-overflow.js create mode 100644 txw-mhzc-web/src/pages/index/views/gxnlpt/components/GxnlptCardTags.vue create mode 100644 txw-mhzc-web/tests/unit/gxnlpt-tag-overflow.test.js diff --git a/txw-mhzc-web/package.json b/txw-mhzc-web/package.json index 3c57abd..72639cb 100644 --- a/txw-mhzc-web/package.json +++ b/txw-mhzc-web/package.json @@ -11,7 +11,7 @@ "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build", "build:site:dev": "vue-cli-service build --mode development", "build:site:test": "vue-cli-service build --mode test", - "test:unit": "node --test tests/unit/gxnlpt-scroll-helpers.test.js", + "test:unit": "node --test tests/unit/gxnlpt-scroll-helpers.test.js tests/unit/gxnlpt-tag-overflow.test.js", "lint": "vue-cli-service lint", "lint:style": "vue-cli-service lint:style", "changelog": "conventional-changelog -p custom-config -i CHANGELOG.md -s -r 0", diff --git a/txw-mhzc-web/src/pages/index/utils/gxnlpt-tag-overflow.js b/txw-mhzc-web/src/pages/index/utils/gxnlpt-tag-overflow.js new file mode 100644 index 0000000..8032008 --- /dev/null +++ b/txw-mhzc-web/src/pages/index/utils/gxnlpt-tag-overflow.js @@ -0,0 +1,48 @@ +/** + * 根据标签宽度与容器宽度计算可见标签数量(纯函数,便于单测) + * @param {number[]} tagWidths 各标签测量宽度(px) + * @param {number} maxWidth 容器可用宽度(px) + * @param {{ gap?: number, ellipsisWidth?: number }} [opts] + * @returns {{ visible: number, overflow: boolean }} + */ +export function calcTagOverflowLayout(tagWidths, maxWidth, opts = {}) { + const gap = opts.gap ?? 4; + const ellipsisWidth = opts.ellipsisWidth ?? 14; + const n = tagWidths.length; + + if (!n || maxWidth <= 0) { + return { visible: 0, overflow: false }; + } + + const rowWidth = (count, withEllipsis) => { + if (count <= 0) return 0; + let total = 0; + for (let i = 0; i < count; i += 1) { + total += tagWidths[i]; + if (i > 0) total += gap; + } + if (withEllipsis) total += gap + ellipsisWidth; + return total; + }; + + if (rowWidth(n, false) <= maxWidth) { + return { visible: n, overflow: false }; + } + + for (let v = n - 1; v >= 1; v -= 1) { + if (rowWidth(v, true) <= maxWidth) { + return { visible: v, overflow: true }; + } + } + + return { visible: 1, overflow: n > 1 }; +} + +/** + * @param {string[]} hiddenTags + * @returns {string} + */ +export function formatHiddenTagsTooltip(hiddenTags) { + if (!hiddenTags || !hiddenTags.length) return ''; + return hiddenTags.join('、'); +} diff --git a/txw-mhzc-web/src/pages/index/views/fwsc/fwsc.vue b/txw-mhzc-web/src/pages/index/views/fwsc/fwsc.vue index df908c5..58124e5 100644 --- a/txw-mhzc-web/src/pages/index/views/fwsc/fwsc.vue +++ b/txw-mhzc-web/src/pages/index/views/fwsc/fwsc.vue @@ -64,9 +64,8 @@
{{ card.qymc }}
- +