From 9453bef1fc4a3121b28ffa6617f0fbfc81d9f634 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 19 五月 2025 17:35:11 +0800
Subject: [PATCH] fix: 修改首页ui

---
 apps/taro/src/components/Layout/PageLayout.vue                                   |   10 
 packages/components/src/assets/dashboard/icon-dashboard2.png                     |    0 
 packages/components/src/assets/dashboard/icon-dashboard1.png                     |    0 
 apps/taro/src/pages/mine/index.scss                                              |    6 
 apps/taro/src/subpackages/order/order/order.vue                                  |    2 
 packages/components/src/assets/dashboard/icon-dashboard6.png                     |    0 
 apps/taro/src/subpackages/my/dashboard/InnerPage.vue                             |    2 
 apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue               |    2 
 apps/taro/src/components/Tabs/ProTabs.vue                                        |   14 
 packages/components/src/styles/mine.scss                                         |   68 +++++++
 packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue            |    9 +
 packages/components/src/assets/dashboard/icon-dashboard3.png                     |    0 
 apps/taro/src/components/List/List.vue                                           |    1 
 packages/components/src/assets/dashboard/icon-dashboard7.png                     |    0 
 apps/taro/src/constants/img.ts                                                   |    3 
 packages/components/src/styles/rechargeGrid.scss                                 |    7 
 packages/components/src/assets/dashboard/icon-dashboard4.png                     |    0 
 apps/taro/src/subpackages/recharge/phoneBillRecharge/phoneBillRecharge.vue       |   37 ++++
 apps/taro/src/components/Layout/ContentScrollView.vue                            |    2 
 packages/components/src/styles/layout.scss                                       |   34 +++
 apps/taro/src/components/Tabs/tabs.ts                                            |    4 
 apps/taro/src/pages/mine/index.vue                                               |   49 +----
 packages/components/src/views/Mine/Dashboard.vue                                 |   71 +++++++
 packages/components/src/assets/dashboard/icon-dashboard8.png                     |    0 
 apps/taro/src/assets/mine/icon-mine-exist.png                                    |    0 
 packages/components/src/components/Layout/Chunk.vue                              |   24 ++
 packages/components/src/views/Mine/components/DashboardLargeCell.vue             |   15 +
 packages/components/src/assets/dashboard/icon-dashboard5.png                     |    0 
 apps/taro/src/subpackages/my/dashboard/dashboard.vue                             |   26 ++
 packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue       |   57 +++---
 packages/components/src/views/Mine/components/DashboardItem.vue                  |   48 +++++
 packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep1.vue |    1 
 32 files changed, 397 insertions(+), 95 deletions(-)

diff --git a/apps/taro/src/assets/mine/icon-mine-exist.png b/apps/taro/src/assets/mine/icon-mine-exist.png
new file mode 100644
index 0000000..9d1b4c4
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-exist.png
Binary files differ
diff --git a/apps/taro/src/components/Layout/ContentScrollView.vue b/apps/taro/src/components/Layout/ContentScrollView.vue
index 170176a..775f10b 100644
--- a/apps/taro/src/components/Layout/ContentScrollView.vue
+++ b/apps/taro/src/components/Layout/ContentScrollView.vue
@@ -47,7 +47,7 @@
   }
 
   &.hasPaddingTop {
-    padding-top: 20px;
+    padding-top: 32px;
   }
 
   .content-scroll-view-wrapper-inner {
diff --git a/apps/taro/src/components/Layout/PageLayout.vue b/apps/taro/src/components/Layout/PageLayout.vue
index 4396c42..02fa48e 100644
--- a/apps/taro/src/components/Layout/PageLayout.vue
+++ b/apps/taro/src/components/Layout/PageLayout.vue
@@ -10,7 +10,7 @@
           v-if="hasLinearBg"
           class="page-layout-linear-bg"
           :style="{
-            height: Taro.pxTransform(props.linearBgHeight),
+            height: '100%',
           }"
         ></div>
       </slot>
@@ -136,13 +136,7 @@
     top: 0;
     left: 0;
     width: 100%;
-    background: linear-gradient(
-      180deg,
-      boleGetCssVar('color', 'primary') 0%,
-      #5a86f6 56%,
-      #f9f9fb 100%
-    );
-    filter: blur(0px);
+    background: linear-gradient(180deg, #7cd0ff 0%, rgba(255, 255, 255, 0) 43%, #ffffff 100%);
     border-radius: 0px 0px 20px 20px;
   }
 
diff --git a/apps/taro/src/components/List/List.vue b/apps/taro/src/components/List/List.vue
index bcedec1..d8fdac7 100644
--- a/apps/taro/src/components/List/List.vue
+++ b/apps/taro/src/components/List/List.vue
@@ -15,5 +15,6 @@
 
 .pro-list {
   background: #ffffff;
+  padding: 32px 0;
 }
 </style>
diff --git a/apps/taro/src/components/Tabs/ProTabs.vue b/apps/taro/src/components/Tabs/ProTabs.vue
index 6fe046e..8be9dc5 100644
--- a/apps/taro/src/components/Tabs/ProTabs.vue
+++ b/apps/taro/src/components/Tabs/ProTabs.vue
@@ -461,8 +461,8 @@
       width: auto;
       margin-right: 78rpx;
       flex-direction: column;
-      font-size: 26rpx;
-      color: boleGetCssVar('text-color', 'secondary');
+      font-size: 30rpx;
+      color: boleGetCssVar('text-color', 'regular');
       align-items: center;
       transition: all 0.3s ease;
       min-width: 0;
@@ -473,14 +473,14 @@
       }
 
       .nut-tabs__titles-item__text {
-        font-size: 28rpx;
+        font-size: 30rpx;
         color: boleGetCssVar('text-color', 'regular');
         line-height: 40rpx;
       }
 
       &.active {
-        color: #222;
-        font-weight: 700;
+        color: boleGetCssVar('color', 'primary');
+        font-weight: normal;
         font-size: 30rpx;
 
         .nut-tabs__sub-titles-item__text {
@@ -492,7 +492,7 @@
         }
 
         .nut-tabs__titles-item__text {
-          color: boleGetCssVar('text-color', 'primary');
+          color: boleGetCssVar('color', 'primary');
         }
       }
 
@@ -507,7 +507,7 @@
       .nut-tabs__titles-item__line {
         //   width: 100%;
         background: boleGetCssVar('color', 'primary');
-        bottom: 0;
+        bottom: 20rpx;
         height: 4rpx;
         max-width: 40rpx;
       }
diff --git a/apps/taro/src/components/Tabs/tabs.ts b/apps/taro/src/components/Tabs/tabs.ts
index 4647f84..e7fd3c0 100644
--- a/apps/taro/src/components/Tabs/tabs.ts
+++ b/apps/taro/src/components/Tabs/tabs.ts
@@ -1,4 +1,4 @@
-import { ref, PropType, onMounted, reactive } from 'vue';
+import { ref, PropType, onMounted, reactive, VNode } from 'vue';
 
 export type TabsSize = 'large' | 'normal' | 'small';
 
@@ -32,7 +32,7 @@
   },
   type: {
     type: String,
-    default: 'smile', //card銆乴ine銆乻mile
+    default: 'line', //card銆乴ine銆乻mile
   },
   titleScroll: {
     type: Boolean,
diff --git a/apps/taro/src/constants/img.ts b/apps/taro/src/constants/img.ts
index 1a2db99..c1a6036 100644
--- a/apps/taro/src/constants/img.ts
+++ b/apps/taro/src/constants/img.ts
@@ -4,6 +4,9 @@
   common: {
     CommonPageBg: `${OssBasePath}/matchMakingMini/assets/common/icon-common-page-bg.png`,
     HomePageBg: `${OssBasePath}/lifePayment/assets/common/icon-home-page-bg.png`,
+    DataPageBg: `${OssBasePath}/lifePayment/assets/common/icon-data-page-bg.png`,
+    MinePageBg: `${OssBasePath}/lifePayment/assets/common/icon-mine-page-bg.png`,
+    PhoneBillRechargePageBg: `${OssBasePath}/lifePayment/assets/common/icon-phoneBillRecharge-page-bg.png`,
   },
   mine: {
     // Bg: `${OssBasePath}/matchMakingMini/assets/mine/icon-bg.png`,
diff --git a/apps/taro/src/pages/mine/index.scss b/apps/taro/src/pages/mine/index.scss
index 63af7e4..4b99d62 100644
--- a/apps/taro/src/pages/mine/index.scss
+++ b/apps/taro/src/pages/mine/index.scss
@@ -4,8 +4,8 @@
 //   background-color: $body-background-color;
 // }
 
-.index-page-wrapper {
-  .home-page-bg {
+.mine-page-wrapper {
+  .mine-page-bg {
     position: fixed;
     z-index: -1;
     top: 0;
@@ -18,7 +18,7 @@
 
 .mine-page-top-view {
   display: flex;
-  padding: 36px 36px 64px;
+  padding: 36px boleGetCssVar('size', 'body-padding-h') 64px;
 
   .mine-avatar {
     width: 176px;
diff --git a/apps/taro/src/pages/mine/index.vue b/apps/taro/src/pages/mine/index.vue
index d6a3c92..ef455e0 100644
--- a/apps/taro/src/pages/mine/index.vue
+++ b/apps/taro/src/pages/mine/index.vue
@@ -1,44 +1,11 @@
 <template>
-  <!-- <PageLayoutWithBg class="mine-page-wrapper" title="鎴戠殑" :need-auth="false">
-    <template #navigationBar>
-      <TransparentNavigationBar
-        title="涓汉涓績"
-        :is-absolute="false"
-        mode="dark"
-      ></TransparentNavigationBar>
-    </template>
-    <template #bg>
-      <img :src="OssAssets.mine.Bg" class="mine-page-bg" :style="{ height: `${bgHeight}px` }" />
-    </template>
-    <div class="mine-page-top-view" @click="goLogin">
-      <img class="mine-avatar" :src="DefaultAvatar" alt="" />
-      <div class="user-info">
-        <div class="user-info-name" v-if="isLogin">
-          {{ hiddenPhoneNumber(virtualPhoneNumber) }}
-        </div>
-        <div class="mine-go-login" v-else>鐧诲綍</div>
-      </div>
-    </div>
-    <ContentScrollView>
-      <List class="mine-list-wrapper">
-        <ListItem title="璁㈠崟绠$悊" @click="goOrderManage"></ListItem>
-        <ListItem title="鎴峰彿绠$悊" @click="goUserAccountList"></ListItem>
-        <template v-if="isChannelAccount">
-          <ListItem title="鏁版嵁鐪嬫澘" @click="goDashboard"></ListItem>
-          <ListItem title="鎺ㄥ箍浜岀淮鐮�" @click="goShareQrcode"></ListItem>
-        </template>
-        <ListItem v-if="isWeb && !isInAlipay" title="鍦ㄧ嚎瀹㈡湇" @click="handleChat"></ListItem>
-        <ListItem v-if="isLogin" title="閫�鍑虹櫥褰�" @click="goLogout"></ListItem>
-      </List>
-    </ContentScrollView>
-  </PageLayoutWithBg> -->
-  <PageLayout class="index-page-wrapper" :need-auth="false">
+  <PageLayout class="mine-page-wrapper" :need-auth="false">
     <template #navigationBar>
       <TransparentNavigationBar :title="'涓汉涓績'" :is-absolute="false">
       </TransparentNavigationBar>
     </template>
     <template #bg>
-      <img :src="OssAssets.common.HomePageBg" class="home-page-bg" />
+      <img :src="OssAssets.common.MinePageBg" class="mine-page-bg" />
     </template>
     <div class="mine-page-top-view" @click="goLogin">
       <img class="mine-avatar" :src="DefaultAvatar" alt="" />
@@ -49,7 +16,7 @@
         <div class="mine-go-login" v-else>鐧诲綍</div>
       </div>
     </div>
-    <ContentView>
+    <ContentScrollView style="background-color: transparent">
       <List class="mine-list-wrapper">
         <ListItemV2 :icon="IconMineOrder" title="璁㈠崟绠$悊" @click="goOrderManage"></ListItemV2>
         <ListItemV2 :icon="IconMineUserId" title="鎴峰彿绠$悊" @click="goUserAccountList"></ListItemV2>
@@ -67,9 +34,14 @@
           title="鍦ㄧ嚎瀹㈡湇"
           @click="handleChat"
         ></ListItemV2>
-        <ListItemV2 v-if="isLogin" title="閫�鍑虹櫥褰�" @click="goLogout"></ListItemV2>
+        <ListItemV2
+          v-if="isLogin"
+          title="閫�鍑虹櫥褰�"
+          @click="goLogout"
+          :icon="IconMineExist"
+        ></ListItemV2>
       </List>
-    </ContentView>
+    </ContentScrollView>
   </PageLayout>
 </template>
 
@@ -84,6 +56,7 @@
 import IconMineDataBoard from '@/assets/mine/icon-mine-data-board.png';
 import IconMinePromotion from '@/assets/mine/icon-mine-promotion.png';
 import IconMineCustomerService from '@/assets/mine/icon-mine-customer-service.png';
+import IconMineExist from '@/assets/mine/icon-mine-exist.png';
 import { useSystemStore } from '@/stores/modules/system';
 import { useUserStore } from '@/stores/modules/user';
 import { Message } from '@/utils';
diff --git a/apps/taro/src/subpackages/my/dashboard/InnerPage.vue b/apps/taro/src/subpackages/my/dashboard/InnerPage.vue
index 6905b9a..6463612 100644
--- a/apps/taro/src/subpackages/my/dashboard/InnerPage.vue
+++ b/apps/taro/src/subpackages/my/dashboard/InnerPage.vue
@@ -1,5 +1,5 @@
 <template>
-  <ContentScrollView has-padding-top style="background-color: #fff">
+  <ContentScrollView has-padding-top style="background-color: transparent">
     <Dashboard />
   </ContentScrollView>
 </template>
diff --git a/apps/taro/src/subpackages/my/dashboard/dashboard.vue b/apps/taro/src/subpackages/my/dashboard/dashboard.vue
index e31c527..e413dd9 100644
--- a/apps/taro/src/subpackages/my/dashboard/dashboard.vue
+++ b/apps/taro/src/subpackages/my/dashboard/dashboard.vue
@@ -1,5 +1,12 @@
 <template>
-  <PageLayout title="鏁版嵁鐪嬫澘" class="dashboard-page-wrapper" hasBorder>
+  <PageLayout class="dashboard-page-wrapper">
+    <template #navigationBar>
+      <TransparentNavigationBar :title="'鏁版嵁鐪嬫澘'" :is-absolute="false">
+      </TransparentNavigationBar>
+    </template>
+    <template #bg>
+      <img :src="OssAssets.common.DataPageBg" class="dashboard-page-bg" />
+    </template>
     <InnerPage />
   </PageLayout>
 </template>
@@ -7,8 +14,25 @@
 <script setup lang="ts">
 import { PageLayout } from '@/components';
 import InnerPage from './InnerPage.vue';
+import { OssAssets } from '@/constants';
 
 defineOptions({
   name: 'dashboard',
 });
 </script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.dashboard-page-wrapper {
+  .dashboard-page-bg {
+    position: fixed;
+    z-index: -1;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
+}
+</style>
diff --git a/apps/taro/src/subpackages/order/order/order.vue b/apps/taro/src/subpackages/order/order/order.vue
index fe1cf70..0b71eef 100644
--- a/apps/taro/src/subpackages/order/order/order.vue
+++ b/apps/taro/src/subpackages/order/order/order.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout title="璁㈠崟绠$悊" class="order-page-wrapper" hasBorder>
+  <PageLayout title="璁㈠崟绠$悊" class="order-page-wrapper">
     <InnerPage />
   </PageLayout>
 </template>
diff --git a/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue b/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
index 4b3e585..2d7461d 100644
--- a/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
@@ -1,5 +1,5 @@
 <template>
-  <ContentScrollView :paddingH="false" style="background-color: #fff">
+  <ContentScrollView hasPaddingTop style="background-color: transparent">
     <PhoneBillRecharge
       @goPay="goPay"
       :isDev="isDev"
diff --git a/apps/taro/src/subpackages/recharge/phoneBillRecharge/phoneBillRecharge.vue b/apps/taro/src/subpackages/recharge/phoneBillRecharge/phoneBillRecharge.vue
index 1a6a678..f813b87 100644
--- a/apps/taro/src/subpackages/recharge/phoneBillRecharge/phoneBillRecharge.vue
+++ b/apps/taro/src/subpackages/recharge/phoneBillRecharge/phoneBillRecharge.vue
@@ -1,5 +1,19 @@
 <template>
-  <PageLayout title="璇濊垂鍏呭��" class="phoneBillRecharge-page-wrapper" hasBorder>
+  <PageLayout
+    class="phoneBillRecharge-page-wrapper"
+    :style="{
+      backgroundImage: `url(${OssAssets.common.PhoneBillRechargePageBg})`,
+    }"
+  >
+    <template #navigationBar>
+      <TransparentNavigationBar
+        :title="'璇濊垂鍏呭��'"
+        :is-absolute="false"
+        mode="dark"
+        navigationArrowWhite
+      >
+      </TransparentNavigationBar>
+    </template>
     <InnerPage />
   </PageLayout>
 </template>
@@ -7,8 +21,29 @@
 <script setup lang="ts">
 import { PageLayout } from '@/components';
 import InnerPage from './InnerPage.vue';
+import { OssAssets } from '@/constants';
 
 defineOptions({
   name: 'phoneBillRecharge',
 });
 </script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.phoneBillRecharge-page-wrapper {
+  background-size: 100% 452px;
+  background-color: $body-background-color;
+  background-repeat: no-repeat;
+
+  .phoneBillRecharge-page-bg {
+    position: fixed;
+    z-index: -1;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 452px;
+    object-fit: cover;
+  }
+}
+</style>
diff --git a/packages/components/src/assets/dashboard/icon-dashboard1.png b/packages/components/src/assets/dashboard/icon-dashboard1.png
new file mode 100644
index 0000000..6da19ca
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard1.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard2.png b/packages/components/src/assets/dashboard/icon-dashboard2.png
new file mode 100644
index 0000000..ad4bb30
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard2.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard3.png b/packages/components/src/assets/dashboard/icon-dashboard3.png
new file mode 100644
index 0000000..6f8ad32
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard3.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard4.png b/packages/components/src/assets/dashboard/icon-dashboard4.png
new file mode 100644
index 0000000..e5f190a
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard4.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard5.png b/packages/components/src/assets/dashboard/icon-dashboard5.png
new file mode 100644
index 0000000..f31d843
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard5.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard6.png b/packages/components/src/assets/dashboard/icon-dashboard6.png
new file mode 100644
index 0000000..3cad4a0
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard6.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard7.png b/packages/components/src/assets/dashboard/icon-dashboard7.png
new file mode 100644
index 0000000..a49a9b6
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard7.png
Binary files differ
diff --git a/packages/components/src/assets/dashboard/icon-dashboard8.png b/packages/components/src/assets/dashboard/icon-dashboard8.png
new file mode 100644
index 0000000..3cf8c3e
--- /dev/null
+++ b/packages/components/src/assets/dashboard/icon-dashboard8.png
Binary files differ
diff --git a/packages/components/src/components/Layout/Chunk.vue b/packages/components/src/components/Layout/Chunk.vue
new file mode 100644
index 0000000..7bdf437
--- /dev/null
+++ b/packages/components/src/components/Layout/Chunk.vue
@@ -0,0 +1,24 @@
+<template>
+  <div :class="['lp-chunk-wrapper', { hasPaddingBottom, borderRadiusSmall }]">
+    <div class="lp-chunk-title" v-if="title">{{ title }}</div>
+    <div class="lp-chunk-content">
+      <slot></slot>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineOptions({
+  name: 'Chunk',
+});
+
+type Props = {
+  title?: string;
+  hasPaddingBottom?: boolean;
+  borderRadiusSmall?: boolean;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  hasPaddingBottom: true,
+});
+</script>
diff --git a/packages/components/src/styles/layout.scss b/packages/components/src/styles/layout.scss
index 00c0689..d2723e5 100644
--- a/packages/components/src/styles/layout.scss
+++ b/packages/components/src/styles/layout.scss
@@ -35,3 +35,37 @@
     }
   }
 }
+
+.lp-chunk-wrapper {
+  padding: 0 26px;
+  border-radius: 32px;
+  background: #ffffff;
+  margin-bottom: 32px;
+
+  &:last-child {
+    margin-bottom: 0;
+  }
+
+  &.hasPaddingBottom {
+    padding-bottom: 48px;
+  }
+
+  &.borderRadiusSmall {
+    border-radius: 20px;
+  }
+
+  .lp-chunk-title {
+    height: 88px;
+    background: #ffffff;
+    font-weight: 500;
+    font-size: 34px;
+    color: boleGetCssVar('text-color', 'primary');
+    line-height: 88px;
+  }
+
+  .lp-chunk-content {
+    .nut-cell.bole-form-item {
+      padding: 0;
+    }
+  }
+}
diff --git a/packages/components/src/styles/mine.scss b/packages/components/src/styles/mine.scss
index ebf77eb..0ce2502 100644
--- a/packages/components/src/styles/mine.scss
+++ b/packages/components/src/styles/mine.scss
@@ -7,7 +7,6 @@
 }
 
 .dashboard-view {
-  padding-top: 40px;
   .pro-statistics-wrapper {
     text-align: center;
     // display: flex;
@@ -23,4 +22,71 @@
       font-size: 28px;
     }
   }
+
+  .dashboard-large-cell {
+    display: flex;
+    align-items: center;
+    padding: 16px 0;
+    background: linear-gradient(90deg, #fff0ea 0%, #faf9f4 52%, #f1fffd 100%);
+    border-radius: 12px;
+    justify-content: space-between;
+    gap: 34px;
+
+    .dashboard-item-wrapper {
+      background: transparent;
+      flex: 1;
+      min-width: 0;
+    }
+  }
+
+  .dashboard-large-cell1 {
+    margin-bottom: 32px;
+  }
+
+  .dashboard-item-grad {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 32px;
+  }
+}
+
+.dashboard-item-wrapper {
+  background: linear-gradient(90deg, #edf6ff 0%, #f6f6fe 55%, #f9fdfe 100%);
+  border-radius: 12px;
+  padding: 24px;
+
+  .dashboard-item-title-wrapper {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+
+    .dashboard-item-title-icon {
+      width: 48px;
+      height: 48px;
+      margin-right: 16px;
+    }
+
+    .dashboard-item-title {
+      font-size: 26px;
+      color: boleGetCssVar('text-color', 'regular');
+    }
+  }
+
+  .dashboard-item-value-wrapper {
+    display: flex;
+    align-items: flex-end;
+    font-weight: bold;
+    font-size: 34px;
+    color: #161b2e;
+
+    .dashboard-item-symbol {
+      font-size: 26px;
+    }
+
+    .dashboard-item-value {
+      flex: 1;
+      min-width: 0;
+      @include ellipsis;
+    }
+  }
 }
diff --git a/packages/components/src/styles/rechargeGrid.scss b/packages/components/src/styles/rechargeGrid.scss
index 62edae5..e06c9b3 100644
--- a/packages/components/src/styles/rechargeGrid.scss
+++ b/packages/components/src/styles/rechargeGrid.scss
@@ -153,6 +153,13 @@
 }
 
 .order-bill-recharge {
+  .nut-cell-group__wrap {
+    background-color: transparent;
+
+    .nut-cell {
+      background-color: transparent;
+    }
+  }
   .recharge-button {
     width: 100%;
     margin: 40px 0;
diff --git a/packages/components/src/views/Mine/Dashboard.vue b/packages/components/src/views/Mine/Dashboard.vue
index 06d6b0a..2dbf5c5 100644
--- a/packages/components/src/views/Mine/Dashboard.vue
+++ b/packages/components/src/views/Mine/Dashboard.vue
@@ -1,5 +1,5 @@
 <template>
-  <NutGrid :gutter="10" :column-num="3" square class="dashboard-view">
+  <!-- <NutGrid :gutter="10" :column-num="3" square class="dashboard-view">
     <NutGridItem>
       <div class="pro-statistics-wrapper">
         <div class="pro-statistics-title">绱鏀舵</div>
@@ -54,15 +54,80 @@
         <div class="pro-statistics-content">{{ topStatistics?.yesterdayActiveUsers ?? 0 }}</div>
       </div>
     </NutGridItem>
-  </NutGrid>
+  </NutGrid> -->
+  <div class="dashboard-view">
+    <Chunk title="鏍稿績鏁版嵁">
+      <DashboardLargeCell class="dashboard-large-cell1">
+        <DashboardItem
+          title="绱鏀舵"
+          :icon="IconDashboard1"
+          :value="toThousand(topStatistics?.accumulatedReceipts ?? 0)"
+          need-symbol
+        />
+        <DashboardItem
+          title="鏄ㄦ棩鏀舵"
+          :icon="IconDashboard2"
+          :value="toThousand(topStatistics?.receiptsYesterday ?? 0)"
+          need-symbol
+        />
+      </DashboardLargeCell>
+      <div class="dashboard-item-grad">
+        <DashboardItem
+          title="绱涓嬪崟"
+          :icon="IconDashboard3"
+          :value="toThousand(topStatistics?.accumulatedOrders ?? 0)"
+        />
+        <DashboardItem
+          title="鏄ㄦ棩涓嬪崟"
+          :icon="IconDashboard4"
+          :value="toThousand(topStatistics?.ordersNumYesterday ?? 0)"
+        />
+        <DashboardItem
+          title="绱鏀剁泭"
+          :icon="IconDashboard5"
+          :value="toThousand(topStatistics?.accumulatedIncome ?? 0)"
+          need-symbol
+        />
+        <DashboardItem
+          title="鏄ㄦ棩鎴愬姛"
+          :icon="IconDashboard6"
+          :value="toThousand(topStatistics?.yesterdaySuccess ?? 0)"
+        />
+      </div>
+    </Chunk>
+    <Chunk title="鐢ㄦ埛缁熻">
+      <DashboardLargeCell>
+        <DashboardItem
+          title="绱鐢ㄦ埛"
+          :icon="IconDashboard7"
+          :value="toThousand(topStatistics?.accumulatedUsers ?? 0)"
+        />
+        <DashboardItem
+          title="鏄ㄦ棩娲昏穬"
+          :icon="IconDashboard8"
+          :value="toThousand(topStatistics?.yesterdayActiveUsers ?? 0)"
+        />
+      </DashboardLargeCell>
+    </Chunk>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { Grid as NutGrid, GridItem as NutGridItem } from '@nutui/nutui-taro';
 import { toThousand } from '../../utils';
 import { useQuery } from '@tanstack/vue-query';
 import { useLifeRechargeContext, TopStatisticsOutput } from '@life-payment/core-vue';
 import { computed } from 'vue';
+import Chunk from '../../components/Layout/Chunk.vue';
+import DashboardLargeCell from './components/DashboardLargeCell.vue';
+import DashboardItem from './components/DashboardItem.vue';
+import IconDashboard1 from '../../assets/dashboard/icon-dashboard1.png';
+import IconDashboard2 from '../../assets/dashboard/icon-dashboard2.png';
+import IconDashboard3 from '../../assets/dashboard/icon-dashboard3.png';
+import IconDashboard4 from '../../assets/dashboard/icon-dashboard4.png';
+import IconDashboard5 from '../../assets/dashboard/icon-dashboard5.png';
+import IconDashboard6 from '../../assets/dashboard/icon-dashboard6.png';
+import IconDashboard7 from '../../assets/dashboard/icon-dashboard7.png';
+import IconDashboard8 from '../../assets/dashboard/icon-dashboard8.png';
 
 defineOptions({
   name: 'Dashboard',
diff --git a/packages/components/src/views/Mine/components/DashboardItem.vue b/packages/components/src/views/Mine/components/DashboardItem.vue
new file mode 100644
index 0000000..9453a7a
--- /dev/null
+++ b/packages/components/src/views/Mine/components/DashboardItem.vue
@@ -0,0 +1,48 @@
+<template>
+  <div class="dashboard-item-wrapper">
+    <div class="dashboard-item-title-wrapper">
+      <img class="dashboard-item-title-icon" :src="icon" />
+      <div class="dashboard-item-title">{{ title }}</div>
+    </div>
+    <div class="dashboard-item-value-wrapper">
+      <div class="dashboard-item-symbol" v-if="needSymbol" v-html="showSymbol"></div>
+      <div class="dashboard-item-value">{{ value }}</div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue';
+
+defineOptions({
+  name: 'DashboardItem',
+});
+
+type Props = {
+  icon?: string;
+  title?: string;
+  value?: string | number;
+  needSymbol?: boolean;
+  symbol?: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  needSymbol: false,
+  symbol: '&yen;',
+});
+
+const replaceSpecialChar = (url: string) => {
+  url = url.replace(/&quot;/g, '"');
+  url = url.replace(/&amp;/g, '&');
+  url = url.replace(/&lt;/g, '<');
+  url = url.replace(/&gt;/g, '>');
+  url = url.replace(/&nbsp;/g, ' ');
+  url = url.replace(/&yen;/g, '锟�');
+  return url;
+};
+
+const showSymbol = computed(() => {
+  const symbol = props.needSymbol ? replaceSpecialChar(props.symbol) : '';
+  return symbol;
+});
+</script>
diff --git a/packages/components/src/views/Mine/components/DashboardLargeCell.vue b/packages/components/src/views/Mine/components/DashboardLargeCell.vue
new file mode 100644
index 0000000..30b66f6
--- /dev/null
+++ b/packages/components/src/views/Mine/components/DashboardLargeCell.vue
@@ -0,0 +1,15 @@
+<template>
+  <div class="dashboard-large-cell">
+    <slot></slot>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineOptions({
+  name: 'DashboardLargeCell',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+</script>
diff --git a/packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue b/packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue
index 196f20f..e598d3c 100644
--- a/packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue
+++ b/packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue
@@ -28,6 +28,15 @@
 const stepperInfo = useStepper(['step1', 'step2'], 'step2');
 const current = computed(() => stepperInfo.current.value);
 
+const outCurrent = defineModel<'step1' | 'step2'>({
+  set(value) {
+    stepperInfo.goTo(value);
+  },
+  get() {
+    return stepperInfo.current.value;
+  },
+});
+
 const emit = defineEmits<{
   (e: 'goPay', orderNo: string): void;
   (e: 'paySuccess', orderNo: string): void;
diff --git a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
index 099fdef..1319215 100644
--- a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
+++ b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
@@ -6,34 +6,36 @@
     label-position="top"
     class="order-bill-recharge phone"
   >
-    <NutFormItem class="bole-form-item" prop="currentUserAccountId">
-      <NutRadioGroup
-        v-model="form.currentUserAccountId"
-        direction="horizontal"
-        class="par-account-list"
-        v-if="userAccountAllList.length > 0"
-        @change="handleUserAccountChange"
-      >
-        <NutRadio
-          :label="item.id"
-          shape="button"
-          v-for="item in userAccountAllList"
-          :key="item.id"
-          >{{ item.content }}</NutRadio
+    <Chunk borderRadiusSmall>
+      <NutFormItem class="bole-form-item" prop="currentUserAccountId">
+        <NutRadioGroup
+          v-model="form.currentUserAccountId"
+          direction="horizontal"
+          class="par-account-list"
+          v-if="userAccountAllList.length > 0"
+          @change="handleUserAccountChange"
         >
-      </NutRadioGroup>
-      <AccountCard
-        v-if="userAccountAllList.length > 0"
-        title="鍏呭�兼墜鏈哄彿"
-        :content="form.phone"
-        :remark="form.remark"
-      >
-        <template #action>
-          <div class="account-card-action" @click="handleAddUserAccount">鏂板</div>
-        </template>
-      </AccountCard>
-      <AccountAddCard v-else @click="handleAddUserAccount" />
-    </NutFormItem>
+          <NutRadio
+            :label="item.id"
+            shape="button"
+            v-for="item in userAccountAllList"
+            :key="item.id"
+            >{{ item.content }}</NutRadio
+          >
+        </NutRadioGroup>
+        <AccountCard
+          v-if="userAccountAllList.length > 0"
+          title="鍏呭�兼墜鏈哄彿"
+          :content="form.phone"
+          :remark="form.remark"
+        >
+          <template #action>
+            <div class="account-card-action" @click="handleAddUserAccount">鏂板</div>
+          </template>
+        </AccountCard>
+        <AccountAddCard v-else @click="handleAddUserAccount" />
+      </NutFormItem>
+    </Chunk>
 
     <NutFormItem label="閫夋嫨鍏呭�奸噾棰�" class="bole-form-item" prop="parValue" required>
       <NutRadioGroup v-model="form.parValue" direction="horizontal" class="parValue-radio-group">
@@ -115,6 +117,7 @@
 import SelectPayTypeFormItem from '../../components/SelectPayTypeFormItem/SelectPayTypeFormItem.vue';
 import { useSelectPayType, useGetPayStatusByOrderNo } from '../../hooks/selectPayType';
 import { RechargeProps } from './types';
+import Chunk from '../../components/Layout/Chunk.vue';
 
 defineOptions({
   name: 'PhoneBillRechargeStep2',
diff --git a/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep1.vue b/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep1.vue
index bc5630f..402cb1a 100644
--- a/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep1.vue
+++ b/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep1.vue
@@ -56,6 +56,7 @@
   city: '',
   sixID: '',
   remark: '',
+  name: '',
 });
 
 const { goToNext } = useElectricBillRechargeContext();

--
Gitblit v1.9.1