From 880f986b8a9f373b5a7a3849012ca4d46a7b4d00 Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Tue, 28 Jul 2026 14:20:04 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20=E9=A1=B5=E9=9D=A2=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E7=BB=84=E4=BB=B6=E6=A0=B7=E5=BC=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 26 +++++++++++++++++--- src/components/pageTabs/PageTabs.module.less | 16 ++++++++---- src/components/pageTabs/PageTabs.tsx | 10 +++----- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d937aa4..7d9c0fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,12 +20,12 @@ importers: china-area-data: specifier: ^5.0.1 version: 5.0.1 - cropperjs: - specifier: ^1.6.2 - version: 1.6.2 dayjs: specifier: ^1.11.21 version: 1.11.21 + echarts: + specifier: ^5.6.0 + version: 5.6.0 express: specifier: ^5.2.1 version: 5.2.1 @@ -1150,6 +1150,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -2096,6 +2099,9 @@ packages: peerDependencies: typescript: '>=4.2.0' + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2258,6 +2264,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + snapshots: '@ant-design/colors@6.0.0': @@ -3330,6 +3339,11 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + echarts@5.6.0: + dependencies: + tslib: 2.3.0 + zrender: 5.6.1 + ee-first@1.1.1: {} electron-to-chromium@1.5.395: {} @@ -4325,6 +4339,8 @@ snapshots: dependencies: typescript: 5.9.3 + tslib@2.3.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -4459,3 +4475,7 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} + + zrender@5.6.1: + dependencies: + tslib: 2.3.0 diff --git a/src/components/pageTabs/PageTabs.module.less b/src/components/pageTabs/PageTabs.module.less index fe8a93d..f2b13b3 100644 --- a/src/components/pageTabs/PageTabs.module.less +++ b/src/components/pageTabs/PageTabs.module.less @@ -19,7 +19,11 @@ height: 100%; user-select: none; transition: all 0.15s ease; - padding: 0 8px 0 14px; + border-radius: 5px; + + &:not(:first-child) { + margin-left: -9px; + } &:global(:not(.dragging)) { cursor: pointer; @@ -123,16 +127,19 @@ } .tabClose { - flex-shrink: 0; + position: absolute; + right: 12px; + top: 50%; + z-index: 2; width: 16px; height: 16px; line-height: 16px; font-size: 10px; text-align: center; - margin-right: 12px; color: rgba(0, 0, 0, 0.45); border-radius: 50%; cursor: pointer; + transform: translateY(-50%); transition: all 0.15s; &:hover { @@ -152,9 +159,8 @@ .tabTitle { position: relative; z-index: 2; - flex: 1; min-width: 0; - padding: 2px 8px; + padding: 2px 32px 2px 18px; font-size: 13px; color: rgba(0, 0, 0, 0.65); white-space: nowrap; diff --git a/src/components/pageTabs/PageTabs.tsx b/src/components/pageTabs/PageTabs.tsx index fa0d8df..2bffea0 100644 --- a/src/components/pageTabs/PageTabs.tsx +++ b/src/components/pageTabs/PageTabs.tsx @@ -71,15 +71,13 @@ const PageTabs = defineComponent({ -
- {/* 标签文字(flex 子元素,与关闭按钮同行) */} - {tab.title} -
+ {/* 标签文字(flex 子元素,与关闭按钮同行) */} +
{tab.title}
{/* 关闭按钮(flex 子元素,不参与 shrink) */} - handleClose(tab.path, e)}> +
handleClose(tab.path, e)}> ✕ - +
); })} -- 2.52.0 From aaa3710314cf562e82c808d91a8f77154158b2e1 Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Tue, 28 Jul 2026 14:44:11 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20=E9=A1=B5=E9=9D=A2=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E7=BB=84=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/pageTabs/PageTabs.module.less | 71 ++++++++++---------- src/components/pageTabs/PageTabs.tsx | 12 ++-- 2 files changed, 40 insertions(+), 43 deletions(-) diff --git a/src/components/pageTabs/PageTabs.module.less b/src/components/pageTabs/PageTabs.module.less index f2b13b3..99311f7 100644 --- a/src/components/pageTabs/PageTabs.module.less +++ b/src/components/pageTabs/PageTabs.module.less @@ -19,7 +19,6 @@ height: 100%; user-select: none; transition: all 0.15s ease; - border-radius: 5px; &:not(:first-child) { margin-left: -9px; @@ -40,6 +39,14 @@ opacity: 0; } } + + .tabContent { + background-color: rgba(0, 0, 0, 0.06); + } + } + + .tabClose:hover { + color: rgba(0, 0, 0, 0.85); } } @@ -70,12 +77,6 @@ } } } - - &:not(.tabItemActive) { - .tabTitleCon:hover { - background-color: rgba(0, 0, 0, 0.06); - } - } } .divider { @@ -126,11 +127,33 @@ transition: fill 0.15s; } - .tabClose { - position: absolute; - right: 12px; - top: 50%; + // 仅包裹文字 + 关闭按钮,通过 margin 收在 tab 内部 + .tabContent { + position: relative; + height: 28px; z-index: 2; + display: inline-flex; + align-items: center; + gap: 4px; + width: fit-content; + max-width: 100%; + margin: 0 10px 0 10px; + padding: 2px 2px 2px 8px; + border-radius: 8px; + transition: background-color 0.35s; + } + + .tabTitle { + min-width: 0; + font-size: 13px; + color: rgba(0, 0, 0, 0.65); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .tabClose { + flex-shrink: 0; width: 16px; height: 16px; line-height: 16px; @@ -139,32 +162,6 @@ color: rgba(0, 0, 0, 0.45); border-radius: 50%; cursor: pointer; - transform: translateY(-50%); transition: all 0.15s; - - &:hover { - color: rgba(0, 0, 0, 0.85); - background-color: rgba(0, 0, 0, 0.06); - } - } - - .tabTitleCon { - height: 28px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 4px; - } - - .tabTitle { - position: relative; - z-index: 2; - min-width: 0; - padding: 2px 32px 2px 18px; - font-size: 13px; - color: rgba(0, 0, 0, 0.65); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } } diff --git a/src/components/pageTabs/PageTabs.tsx b/src/components/pageTabs/PageTabs.tsx index 2bffea0..380c9d0 100644 --- a/src/components/pageTabs/PageTabs.tsx +++ b/src/components/pageTabs/PageTabs.tsx @@ -71,12 +71,12 @@ const PageTabs = defineComponent({ - {/* 标签文字(flex 子元素,与关闭按钮同行) */} -
{tab.title}
- - {/* 关闭按钮(flex 子元素,不参与 shrink) */} -
handleClose(tab.path, e)}> - ✕ + {/* 标签内容:hover 背景包裹文字 + 关闭按钮 */} +
+
{tab.title}
+
handleClose(tab.path, e)}> + ✕ +
); -- 2.52.0 From 49dbde11e0bd34d939e572251b914126c87c5289 Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Tue, 28 Jul 2026 15:24:42 +0800 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=E9=A1=B5=E9=9D=A2=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/styles/index.less | 29 +++++++++++++++++++++++++++++ src/layouts/BasicLayout.module.less | 9 +++++++++ src/layouts/BasicLayout.tsx | 25 ++++++++++++++----------- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/assets/styles/index.less b/src/assets/styles/index.less index 2f0d68e..2bf63a1 100644 --- a/src/assets/styles/index.less +++ b/src/assets/styles/index.less @@ -114,3 +114,32 @@ a { .ant-tag { margin-right: 0; } + +// ===== 页面切换动画(KeepAlive + RouterView) ===== + +.page-fade-slide-enter-active, +.page-fade-slide-leave-active { + width: 100%; + height: 100%; + min-height: 0; + transition: + opacity 0.22s cubic-bezier(0.4, 0, 0.2, 1), + transform 0.22s cubic-bezier(0.4, 0, 0.2, 1); +} + +.page-fade-slide-enter-from { + opacity: 0; + transform: translateX(12px); +} + +.page-fade-slide-leave-to { + opacity: 0; + transform: translateX(-12px); +} + +.page-fade-slide-leave-active { + position: absolute; + inset: 0; + width: 100%; + overflow: hidden; +} diff --git a/src/layouts/BasicLayout.module.less b/src/layouts/BasicLayout.module.less index 910da44..eb2d5f5 100644 --- a/src/layouts/BasicLayout.module.less +++ b/src/layouts/BasicLayout.module.less @@ -103,6 +103,15 @@ overflow: hidden; } + .pageView { + position: relative; + flex: 1; + min-height: 0; + overflow: hidden; + display: flex; + flex-direction: column; + } + .main { flex: 1; min-height: 0; diff --git a/src/layouts/BasicLayout.tsx b/src/layouts/BasicLayout.tsx index d9d59cf..dc95caf 100644 --- a/src/layouts/BasicLayout.tsx +++ b/src/layouts/BasicLayout.tsx @@ -1,6 +1,5 @@ -import { computed, defineComponent, h, ref } from 'vue'; +import { computed, defineComponent, h, ref, Transition, KeepAlive } from 'vue'; import type { CSSProperties } from 'vue'; -import { KeepAlive } from 'vue'; import { useRouter, useRoute, RouterView } from 'vue-router'; import { Layout, Menu, Modal, Breadcrumb, Dropdown, message } from 'ant-design-vue'; import type { MenuProps } from 'ant-design-vue'; @@ -263,15 +262,19 @@ export default defineComponent({ include 是组件 name 列表,所以页面组件需要在 defineComponent 中显式给出 name */} - ( - - - - ), - }} - /> +
+ ( + + + {Component ? h(Component, { key: route.path }) : null} + + + ), + }} + /> +
六个羽友赛事运营平台 ©{new Date().getFullYear()}
-- 2.52.0 From 28e339a04814a90dc32cb9ac8309318bd37f2673 Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Tue, 28 Jul 2026 16:14:20 +0800 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E5=86=97=E4=BD=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/styles/pageLayout.module.less | 37 ++++++++ .../components/BannerFormModal.module.less | 2 +- .../banner/components/BannerFormModal.tsx | 5 +- src/pages/events/banner/index.module.less | 21 ----- src/pages/events/banner/index.tsx | 67 +++++++------- src/pages/events/list/index.module.less | 21 ----- src/pages/events/list/index.tsx | 65 +++++++------- src/pages/events/orders/index.module.less | 40 --------- src/pages/events/orders/index.tsx | 89 ++++++++++--------- src/pages/events/users/index.module.less | 21 ----- src/pages/events/users/index.tsx | 59 ++++++------ src/pages/system/roles/index.module.less | 49 ---------- src/pages/system/roles/index.tsx | 83 ++++++++--------- src/pages/system/users/index.module.less | 41 --------- src/pages/system/users/index.tsx | 77 ++++++++-------- 15 files changed, 254 insertions(+), 423 deletions(-) delete mode 100644 src/pages/events/banner/index.module.less delete mode 100644 src/pages/events/list/index.module.less delete mode 100644 src/pages/events/orders/index.module.less delete mode 100644 src/pages/events/users/index.module.less delete mode 100644 src/pages/system/roles/index.module.less delete mode 100644 src/pages/system/users/index.module.less diff --git a/src/assets/styles/pageLayout.module.less b/src/assets/styles/pageLayout.module.less index 503aba0..43e2146 100644 --- a/src/assets/styles/pageLayout.module.less +++ b/src/assets/styles/pageLayout.module.less @@ -88,3 +88,40 @@ } } } + +// ===== 二次确认弹窗 ===== + +.confirmContent { + padding: 4px 0; + font-size: 14px; + color: rgba(0, 0, 0, 0.85); + + strong { + margin: 0 4px; + font-weight: 600; + } +} + +.confirmTip { + margin-top: 8px; + font-size: 12px; + color: rgba(0, 0, 0, 0.45); + line-height: 1.5; +} + +.tabularLink { + font-variant-numeric: tabular-nums; + cursor: pointer; +} + +:global(.toggleConfirmModal) { + .ant-modal-confirm-body { + padding: 24px !important; + } +} + +:global(.deleteConfirmModal) { + .ant-modal-confirm-body { + padding: 24px !important; + } +} diff --git a/src/pages/events/banner/components/BannerFormModal.module.less b/src/pages/events/banner/components/BannerFormModal.module.less index 5259e15..1306990 100644 --- a/src/pages/events/banner/components/BannerFormModal.module.less +++ b/src/pages/events/banner/components/BannerFormModal.module.less @@ -38,7 +38,7 @@ } .uploadIcon { - font-size: 32px; + font-size: 24px; color: #999; font-weight: 300; line-height: 1; diff --git a/src/pages/events/banner/components/BannerFormModal.tsx b/src/pages/events/banner/components/BannerFormModal.tsx index 7630878..fda3805 100644 --- a/src/pages/events/banner/components/BannerFormModal.tsx +++ b/src/pages/events/banner/components/BannerFormModal.tsx @@ -13,6 +13,7 @@ import { } from 'ant-design-vue'; import { JUMP_TYPE_OPTIONS, EVENT_OPTIONS, REGION_OPTIONS } from '../model/useBannerModel'; import { ImageCropper } from '@yp-component/root'; +import { FileImageOutlined } from '@ant-design/icons-vue'; import { uploadFile, OssUploadType } from '@/utils/oss'; import dayjs from 'dayjs'; import styles from './BannerFormModal.module.less'; @@ -317,7 +318,9 @@ export default defineComponent({ }`} onClick={triggerFilePicker} > - + + + + 点击上传 建议尺寸 1053*351 像素 diff --git a/src/pages/events/banner/index.module.less b/src/pages/events/banner/index.module.less deleted file mode 100644 index d7c3c7d..0000000 --- a/src/pages/events/banner/index.module.less +++ /dev/null @@ -1,21 +0,0 @@ -.eventBannerMain { - flex: 1; - min-height: 0; - display: flex; - flex-direction: column; - - .tableBody { - flex: 1; - min-height: 0; - overflow: hidden; - - :global { - .ant-spin-nested-loading, - .ant-spin-container, - .ant-table, - .ant-table-container { - height: 100%; - } - } - } -} diff --git a/src/pages/events/banner/index.tsx b/src/pages/events/banner/index.tsx index e54c205..39fbbec 100644 --- a/src/pages/events/banner/index.tsx +++ b/src/pages/events/banner/index.tsx @@ -14,7 +14,6 @@ import { import { useBannerModel, BANNER_STATUS_OPTIONS } from './model/useBannerModel'; import { useContainerSize } from '@/hooks'; import BannerFormModal from './components/BannerFormModal'; -import styles from './index.module.less'; import pageStyles from '@/assets/styles/pageLayout.module.less'; /** @@ -231,41 +230,39 @@ export default defineComponent({ {/* ===== 表格区 ===== */}
-
-
- - {{ - bodyCell: (args: any) => - renderBodyCell({ - ...args, - renderJumpType, - renderStatus, - onEdit: handleEdit, - onToggleStatus: confirmToggleStatus, - onDelete: confirmDelete, - }), - }} -
-
+
+ + {{ + bodyCell: (args: any) => + renderBodyCell({ + ...args, + renderJumpType, + renderStatus, + onEdit: handleEdit, + onToggleStatus: confirmToggleStatus, + onDelete: confirmDelete, + }), + }} +
+
- {/* 独立分页,右下方 */} -
- `共 ${total} 条`} - onChange={handlePageChange} - onShowSizeChange={handlePageChange} - /> -
+ {/* 独立分页,右下方 */} +
+ `共 ${total} 条`} + onChange={handlePageChange} + onShowSizeChange={handlePageChange} + />
diff --git a/src/pages/events/list/index.module.less b/src/pages/events/list/index.module.less deleted file mode 100644 index a5eb239..0000000 --- a/src/pages/events/list/index.module.less +++ /dev/null @@ -1,21 +0,0 @@ -.eventListMain { - flex: 1; - min-height: 0; - display: flex; - flex-direction: column; - - .tableBody { - flex: 1; - min-height: 0; - overflow: hidden; - - :global { - .ant-spin-nested-loading, - .ant-spin-container, - .ant-table, - .ant-table-container { - height: 100%; - } - } - } -} diff --git a/src/pages/events/list/index.tsx b/src/pages/events/list/index.tsx index 85a5335..682785f 100644 --- a/src/pages/events/list/index.tsx +++ b/src/pages/events/list/index.tsx @@ -25,7 +25,6 @@ import { useContainerSize, useState } from '@/hooks'; import EventRegulationModal from './components/EventRegulationModal'; import EventDetailModal from './components/EventDetailModal'; import EventAuditModal from './components/EventAuditModal'; -import styles from './index.module.less'; import pageStyles from '@/assets/styles/pageLayout.module.less'; const { RangePicker } = DatePicker; @@ -245,7 +244,7 @@ export default defineComponent({ (filterForm.orderStatus = val || '')} /> @@ -185,7 +184,7 @@ export default defineComponent({ (filterForm.role = val || '')} /> @@ -145,7 +142,7 @@ export default defineComponent({