From 57846534bcfe3cbb2ff09dae1e3cbe80f93d6638 Mon Sep 17 00:00:00 2001 From: huangzhenbao <17818024429@163.com> Date: Fri, 6 Feb 2026 16:18:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E7=BB=86=E8=8A=82=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check_tags.py | 25 ++ find_tags.py | 27 ++ layouts/admin/AdminLayout.uvue | 24 +- layouts/admin/components/AdminAside.uvue | 3 +- .../admin/components/AdminPageLoading.uvue | 53 +++ layouts/admin/pages/HomeIndex.uvue | 7 +- layouts/admin/router/adminComponentMap.uts | 3 +- layouts/admin/router/adminRoutes.uts | 42 ++- pages.json | 119 ++++--- pages/mall/admin/cms/article/list.uvue | 125 ++++--- pages/mall/admin/cms/category/list.uvue | 83 +++-- pages/mall/admin/decoration/category.uvue | 149 ++++---- pages/mall/admin/decoration/data-config.uvue | 77 +++-- pages/mall/admin/decoration/home.uvue | 161 +++++---- pages/mall/admin/design/templates.uvue | 31 +- pages/mall/admin/design/theme-style.uvue | 130 +++---- .../admin/distribution/division/agent.uvue | 70 ++-- .../admin/distribution/division/apply.uvue | 74 ++-- .../admin/distribution/division/list.uvue | 71 ++-- .../mall/admin/distribution/level/index.uvue | 251 +++----------- .../admin/distribution/promoter/index.uvue | 303 +++-------------- pages/mall/admin/finance/balance_stats.uvue | 115 ++++--- pages/mall/admin/finance/record.uvue | 18 +- pages/mall/admin/finance/withdrawal.uvue | 123 ++++--- pages/mall/admin/kefu/words.uvue | 101 +++--- pages/mall/admin/marketing/bargain/list.uvue | 18 +- .../admin/marketing/combination/create.uvue | 91 +++-- pages/mall/admin/marketing/lottery/list.uvue | 135 ++++---- .../mall/admin/marketing/newcomer/index.uvue | 69 ++-- .../admin/order/aftersales-order/index.uvue | 15 +- .../mall/admin/order/cashier-order/index.uvue | 89 +++-- pages/mall/admin/order/list.uvue | 156 ++++----- .../admin/order/order-statistics/index.uvue | 99 +++--- .../admin/order/write-off-records/index.uvue | 18 +- .../admin/product/classification/index.uvue | 3 +- pages/mall/admin/product/labels/index.uvue | 3 +- pages/mall/admin/product/list.uvue | 18 +- .../mall/admin/product/parameters/index.uvue | 3 +- .../product/product-management/edit.uvue | 69 ++-- .../product/product-management/index.uvue | 147 ++++---- .../product-management/member-price.uvue | 27 +- .../product/product-statistics/index.uvue | 109 +++--- pages/mall/admin/product/reviews/index.uvue | 101 +++--- .../admin/product/specifications/index.uvue | 79 +++-- pages/mall/admin/setting/agreement.uvue | 9 +- pages/mall/admin/setting/auth/admin.uvue | 9 +- pages/mall/admin/setting/auth/permission.uvue | 9 +- pages/mall/admin/setting/auth/role.uvue | 9 +- pages/mall/admin/setting/delivery/staff.uvue | 9 +- .../mall/admin/setting/delivery/station.uvue | 9 +- .../mall/admin/setting/delivery/template.uvue | 9 +- .../mall/admin/setting/interface/collect.uvue | 9 +- .../mall/admin/setting/interface/e-sheet.uvue | 9 +- .../admin/setting/interface/logistics.uvue | 9 +- .../setting/interface/onepass/config.uvue | 9 +- .../setting/interface/onepass/index.uvue | 9 +- .../mall/admin/setting/interface/payment.uvue | 9 +- pages/mall/admin/setting/interface/sms.uvue | 9 +- .../mall/admin/setting/interface/storage.uvue | 9 +- pages/mall/admin/setting/message.uvue | 9 +- pages/mall/admin/setting/system/admin.uvue | 18 +- .../mall/admin/setting/system/agreement.uvue | 9 +- pages/mall/admin/setting/system/message.uvue | 9 +- pages/mall/admin/setting/system/role.uvue | 18 +- pages/mall/admin/setting/system/ticket.uvue | 9 +- pages/mall/admin/setting/ticket.uvue | 9 +- pages/mall/admin/statistic/index.uvue | 18 +- .../mall/admin/user/configuration/index.uvue | 63 ++-- pages/mall/admin/user/grade/card.uvue | 18 +- pages/mall/admin/user/grade/record.uvue | 18 +- pages/mall/admin/user/grade/right.uvue | 18 +- pages/mall/admin/user/grade/type.uvue | 18 +- pages/mall/admin/user/grouping/index.uvue | 105 +++--- pages/mall/admin/user/label/index.uvue | 101 +++--- pages/mall/admin/user/level/index.uvue | 111 +++--- pages/mall/admin/user/management/index.uvue | 159 +++++---- pages/mall/admin/user/statistics/index.uvue | 69 ++-- pages/mall/analytics/coupon-analysis.uvue | 197 +++++------ pages/mall/analytics/custom-report.uvue | 173 +++++----- pages/mall/analytics/delivery-analysis.uvue | 126 +++---- pages/mall/analytics/index.uvue | 318 +++++++++--------- pages/mall/analytics/insight-detail.uvue | 59 ++-- pages/mall/analytics/market-trends.uvue | 122 +++---- pages/mall/analytics/product-insights.uvue | 152 ++++----- pages/mall/analytics/sales-report.uvue | 132 ++++---- pages/mall/analytics/user-analysis.uvue | 198 +++++------ 86 files changed, 2751 insertions(+), 3074 deletions(-) create mode 100644 check_tags.py create mode 100644 find_tags.py create mode 100644 layouts/admin/components/AdminPageLoading.uvue diff --git a/check_tags.py b/check_tags.py new file mode 100644 index 00000000..cc70e230 --- /dev/null +++ b/check_tags.py @@ -0,0 +1,25 @@ +import os + +def check_tags(file_path): + print(f"Checking {file_path}") + try: + content = open(file_path, 'r', encoding='utf-8').read() + tags = ['template', 'script', 'style', 'view', 'text', 'image', 'scroll-view'] + for tag in tags: + o = content.count(f'<{tag}') + c = content.count(f'') + if o != c: + print(f" [ERROR] {tag}: open={o}, close={c}") + else: + print(f" [OK] {tag}: {o}") + except Exception as e: + print(f" [ERROR] Failed to read: {e}") + +files = [ + r'd:\骅锋\mall\pages\mall\admin\order\order-statistics\index.uvue', + r'd:\骅锋\mall\pages\mall\admin\order\list.uvue', + r'd:\骅锋\mall\pages\mall\admin\order\order-configuration\index.uvue' +] + +for f in files: + check_tags(f) diff --git a/find_tags.py b/find_tags.py new file mode 100644 index 00000000..6d81937f --- /dev/null +++ b/find_tags.py @@ -0,0 +1,27 @@ +import re + +def find_mismatched_text_tags(file_path): + with open(file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + stack = [] + print(f"Scanning {file_path}...") + for i, line in enumerate(lines): + # Use a better regex to find opening and closing tags separately + open_tags = re.findall(r'', line) + + for _ in open_tags: + stack.append(i + 1) + for _ in close_tags: + if stack: + stack.pop() + else: + print(f" Extra closing tag at line {i+1}") + + for line_num in stack: + print(f" Unclosed tag at line {line_num}") + +find_mismatched_text_tags(r'd:\骅锋\mall\pages\mall\admin\order\order-configuration\index.uvue') +find_mismatched_text_tags(r'd:\骅锋\mall\pages\mall\admin\order\order-statistics\index.uvue') +find_mismatched_text_tags(r'd:\骅锋\mall\pages\mall\admin\order\list.uvue') diff --git a/layouts/admin/AdminLayout.uvue b/layouts/admin/AdminLayout.uvue index 8cd9562a..0f8ecc18 100644 --- a/layouts/admin/AdminLayout.uvue +++ b/layouts/admin/AdminLayout.uvue @@ -57,12 +57,14 @@ @tab-close="onTabClose" @close-other="onCloseOther" @close-all="onCloseAll" + @refresh="onRefresh" /> - + + @@ -77,6 +79,7 @@ import AdminSubSider from '@/layouts/admin/components/AdminSubSider.uvue' import AdminHeader from '@/layouts/admin/components/AdminHeader.uvue' import AdminTagsView from '@/layouts/admin/components/AdminTagsView.uvue' import AdminFooter from '@/layouts/admin/components/AdminFooter.uvue' +import AdminPageLoading from '@/layouts/admin/components/AdminPageLoading.uvue' import { getTopMenus, @@ -117,6 +120,9 @@ import { getComponent } from '@/layouts/admin/router/adminComponentMap.uts' const ASIDE_W = 70 const SUB_W = 200 +// 页面加载状态 +const isPageLoading = ref(false) + const hasNotification = ref(false) /** @@ -251,6 +257,12 @@ const currentComponent = computed(() => { // 监听路由变化,同步状态 (处理从 Tabs 或外部跳转的情况) watch(() => activeRouteId.value, (newId) => { + // 触发页面加载动画 + isPageLoading.value = true + setTimeout(() => { + isPageLoading.value = false + }, 400) // 给予足够的时间让异步组件加载 + const route = findRouteById(newId) if (route && route.parentId) { // 同步一级菜单 @@ -399,7 +411,7 @@ onMounted(() => { flex-direction: row; width: 100%; min-height: 100vh; - background: #f5f7f9; + background: #f0f2f5; position: relative; } @@ -443,7 +455,7 @@ onMounted(() => { flex-direction: column; min-height: 100vh; transition: margin-left 300ms ease; - background: #f5f7f9; + background: #f0f2f5; width: 100%; } @@ -473,13 +485,15 @@ onMounted(() => { flex: 1; overflow-y: scroll; overflow-x: auto; /* 允许横向滚动,兼容极端窄屏 */ - background: #f5f7f9; + background: #f0f2f5; + padding: 0; } .content-inner { min-height: calc(100vh - 120px); - padding: 12px 14px; + padding: 12px; } + .content-inner.is-mobile { padding: 8px; } diff --git a/layouts/admin/components/AdminAside.uvue b/layouts/admin/components/AdminAside.uvue index 9a2db126..b2870425 100644 --- a/layouts/admin/components/AdminAside.uvue +++ b/layouts/admin/components/AdminAside.uvue @@ -52,7 +52,8 @@ function getIconText(icon: string): string { 'user': '👥', 'product': '📦', 'order': '📜', - 'marketing': '📉', 'share': '📢', 'content': '📝', + 'marketing': '📉', + 'content': '📝', 'finance': '💰', 'statistic': '📊', 'setting': '⚙️', diff --git a/layouts/admin/components/AdminPageLoading.uvue b/layouts/admin/components/AdminPageLoading.uvue new file mode 100644 index 00000000..40f74422 --- /dev/null +++ b/layouts/admin/components/AdminPageLoading.uvue @@ -0,0 +1,53 @@ + + + + + diff --git a/layouts/admin/pages/HomeIndex.uvue b/layouts/admin/pages/HomeIndex.uvue index 8d06963c..0b16eabe 100644 --- a/layouts/admin/pages/HomeIndex.uvue +++ b/layouts/admin/pages/HomeIndex.uvue @@ -225,8 +225,9 @@ const statsData = ref({ - diff --git a/pages/mall/admin/cms/category/list.uvue b/pages/mall/admin/cms/category/list.uvue index 00ebd37c..86e75809 100644 --- a/pages/mall/admin/cms/category/list.uvue +++ b/pages/mall/admin/cms/category/list.uvue @@ -1,39 +1,39 @@ -