From 14368e8a09c4b5793d0975f85e36a4c1d410ca36 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 16 五月 2025 17:27:24 +0800
Subject: [PATCH] feat: UI

---
 apps/taro/src/components/List/ListItemV2.vue             |   63 ++++++++++
 packages/components/src/components/Card/OrderCard.vue    |   63 ++++++---
 apps/taro/src/assets/mine/icon-mine-promotion.png        |    0 
 apps/taro/src/pages/mine/index.vue                       |   51 +++++++
 apps/taro/src/assets/mine/icon-mine-userId.png           |    0 
 apps/taro/src/pages/mine/index.scss                      |   29 ++--
 packages/components/src/constants/img.ts                 |   10 +
 apps/taro/src/assets/mine/icon-mine-order.png            |    0 
 apps/taro/src/components/index.ts                        |    1 
 apps/taro/src/assets/mine/icon-mine-customer-service.png |    0 
 packages/components/src/styles/orderCard.scss            |   80 +++++++++----
 packages/components/src/styles/index.scss                |    2 
 apps/taro/src/constants/img.ts                           |    3 
 apps/taro/src/assets/mine/icon-mine-data-board.png       |    0 
 14 files changed, 235 insertions(+), 67 deletions(-)

diff --git a/apps/taro/src/assets/mine/icon-mine-customer-service.png b/apps/taro/src/assets/mine/icon-mine-customer-service.png
new file mode 100644
index 0000000..ddcbeb4
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-customer-service.png
Binary files differ
diff --git a/apps/taro/src/assets/mine/icon-mine-data-board.png b/apps/taro/src/assets/mine/icon-mine-data-board.png
new file mode 100644
index 0000000..25e3831
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-data-board.png
Binary files differ
diff --git a/apps/taro/src/assets/mine/icon-mine-order.png b/apps/taro/src/assets/mine/icon-mine-order.png
new file mode 100644
index 0000000..defd522
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-order.png
Binary files differ
diff --git a/apps/taro/src/assets/mine/icon-mine-promotion.png b/apps/taro/src/assets/mine/icon-mine-promotion.png
new file mode 100644
index 0000000..5b733c5
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-promotion.png
Binary files differ
diff --git a/apps/taro/src/assets/mine/icon-mine-userId.png b/apps/taro/src/assets/mine/icon-mine-userId.png
new file mode 100644
index 0000000..37fd1d0
--- /dev/null
+++ b/apps/taro/src/assets/mine/icon-mine-userId.png
Binary files differ
diff --git a/apps/taro/src/components/List/ListItemV2.vue b/apps/taro/src/components/List/ListItemV2.vue
new file mode 100644
index 0000000..e880e8f
--- /dev/null
+++ b/apps/taro/src/components/List/ListItemV2.vue
@@ -0,0 +1,63 @@
+<template>
+  <div class="pro-list-itemV2">
+    <div class="pro-list-itemV2-inner">
+      <img v-if="icon" :src="icon" class="pro-list-itemV2-icon" />
+      <div class="pro-list-itemV2-title">{{ title }}</div>
+      <slot name="extra"></slot>
+      <img v-if="showArrow" :src="IconArrow" class="pro-list-itemV2-arrow" />
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import IconArrow from '@/assets/setting/icon-arrow.png';
+
+defineOptions({
+  name: 'ListItemV2',
+});
+
+type Props = {
+  icon?: string;
+  title?: string;
+  showArrow?: boolean;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  showArrow: true,
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.pro-list-itemV2 {
+  padding: 0 boleGetCssVar('size', 'body-padding-h');
+
+  .pro-list-itemV2-inner {
+    height: 112px;
+    display: flex;
+    align-items: center;
+
+    .pro-list-itemV2-icon {
+      width: 48px;
+      height: 48px;
+      margin-right: 16px;
+    }
+
+    .pro-list-itemV2-title {
+      font-weight: 400;
+      font-size: 32px;
+      color: boleGetCssVar('text-color', 'primary');
+      line-height: 44px;
+      flex: 1;
+      min-width: 0;
+      @include ellipsis;
+    }
+
+    .pro-list-itemV2-arrow {
+      width: 32px;
+      height: 32px;
+    }
+  }
+}
+</style>
diff --git a/apps/taro/src/components/index.ts b/apps/taro/src/components/index.ts
index ff8db0e..7675d75 100644
--- a/apps/taro/src/components/index.ts
+++ b/apps/taro/src/components/index.ts
@@ -2,6 +2,7 @@
 export { default as TransparentNavigationBar } from './NavigationBar/TransparentNavigationBar.vue';
 export { default as List } from './List/List.vue';
 export { default as ListItem } from './List/ListItem.vue';
+export { default as ListItemV2 } from './List/ListItemV2.vue';
 export { default as LargeTitleNavigationBar } from './NavigationBar/LargeTitleNavigationBar.vue';
 export { default as PageLayout } from './Layout/PageLayout.vue';
 export { default as PageLayoutWithBg } from './Layout/PageLayoutWithBg.vue';
diff --git a/apps/taro/src/constants/img.ts b/apps/taro/src/constants/img.ts
index 0694927..1a2db99 100644
--- a/apps/taro/src/constants/img.ts
+++ b/apps/taro/src/constants/img.ts
@@ -6,7 +6,8 @@
     HomePageBg: `${OssBasePath}/lifePayment/assets/common/icon-home-page-bg.png`,
   },
   mine: {
-    Bg: `${OssBasePath}/matchMakingMini/assets/mine/icon-bg.png`,
+    // Bg: `${OssBasePath}/matchMakingMini/assets/mine/icon-bg.png`,
+    Bg: `${OssBasePath}/lifePayment/assets/common/icon-home-page-bg.png`,
     IdBg: `${OssBasePath}/matchMakingMini/assets/mine/icon-id-bg.png`,
   },
   setting: {
diff --git a/apps/taro/src/pages/mine/index.scss b/apps/taro/src/pages/mine/index.scss
index fcd093e..63af7e4 100644
--- a/apps/taro/src/pages/mine/index.scss
+++ b/apps/taro/src/pages/mine/index.scss
@@ -4,26 +4,27 @@
 //   background-color: $body-background-color;
 // }
 
-.mine-page-bg {
-  position: fixed;
-  z-index: -1;
-  top: 0;
-  left: 0;
-  width: 750px;
-  height: 434px;
-  object-fit: cover;
+.index-page-wrapper {
+  .home-page-bg {
+    position: fixed;
+    z-index: -1;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
 }
 
 .mine-page-top-view {
   display: flex;
-  padding: 30px 20px;
-  margin-top: 30px;
+  padding: 36px 36px 64px;
 
   .mine-avatar {
-    width: 120px;
-    height: 120px;
+    width: 176px;
+    height: 176px;
     object-fit: cover;
-    margin-right: 30px;
+    margin-right: 36px;
   }
 
   .user-info {
@@ -44,5 +45,5 @@
 }
 
 .mine-list-wrapper {
-  margin-top: 60px;
+  border-radius: 20px;
 }
diff --git a/apps/taro/src/pages/mine/index.vue b/apps/taro/src/pages/mine/index.vue
index 403801c..d6a3c92 100644
--- a/apps/taro/src/pages/mine/index.vue
+++ b/apps/taro/src/pages/mine/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayoutWithBg class="mine-page-wrapper" title="鎴戠殑" :need-auth="false">
+  <!-- <PageLayoutWithBg class="mine-page-wrapper" title="鎴戠殑" :need-auth="false">
     <template #navigationBar>
       <TransparentNavigationBar
         title="涓汉涓績"
@@ -31,17 +31,60 @@
         <ListItem v-if="isLogin" title="閫�鍑虹櫥褰�" @click="goLogout"></ListItem>
       </List>
     </ContentScrollView>
-  </PageLayoutWithBg>
+  </PageLayoutWithBg> -->
+  <PageLayout class="index-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" />
+    </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>
+    <ContentView>
+      <List class="mine-list-wrapper">
+        <ListItemV2 :icon="IconMineOrder" title="璁㈠崟绠$悊" @click="goOrderManage"></ListItemV2>
+        <ListItemV2 :icon="IconMineUserId" title="鎴峰彿绠$悊" @click="goUserAccountList"></ListItemV2>
+        <template v-if="isChannelAccount">
+          <ListItemV2 :icon="IconMineDataBoard" title="鏁版嵁鐪嬫澘" @click="goDashboard"></ListItemV2>
+          <ListItemV2
+            :icon="IconMinePromotion"
+            title="鎺ㄥ箍浜岀淮鐮�"
+            @click="goShareQrcode"
+          ></ListItemV2>
+        </template>
+        <ListItemV2
+          :icon="IconMineCustomerService"
+          v-if="isWeb && !isInAlipay"
+          title="鍦ㄧ嚎瀹㈡湇"
+          @click="handleChat"
+        ></ListItemV2>
+        <ListItemV2 v-if="isLogin" title="閫�鍑虹櫥褰�" @click="goLogout"></ListItemV2>
+      </List>
+    </ContentView>
+  </PageLayout>
 </template>
 
 <script setup lang="ts">
-import { TransparentNavigationBar, List, ListItem } from '@/components';
+import { TransparentNavigationBar, List, ListItemV2 } from '@/components';
 import { useUser, useIsLogin, useGoLogin, useAccessLogin, useOnlineService } from '@/hooks';
 import Taro from '@tarojs/taro';
 import { RouterPath, OssAssets } from '@/constants';
 import DefaultAvatar from '@/assets/components/icon-default-avatar.png';
+import IconMineOrder from '@/assets/mine/icon-mine-order.png';
+import IconMineUserId from '@/assets/mine/icon-mine-userId.png';
+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 { useSystemStore } from '@/stores/modules/system';
-import PageLayoutWithBg from '@/components/Layout/PageLayoutWithBg.vue';
 import { useUserStore } from '@/stores/modules/user';
 import { Message } from '@/utils';
 import { isWeb, isInAlipay } from '@/utils/env';
diff --git a/packages/components/src/components/Card/OrderCard.vue b/packages/components/src/components/Card/OrderCard.vue
index d261033..d8f2a47 100644
--- a/packages/components/src/components/Card/OrderCard.vue
+++ b/packages/components/src/components/Card/OrderCard.vue
@@ -1,42 +1,44 @@
 <template>
   <div class="order-card">
     <div class="order-card-title">
-      <div class="order-card-title-top">
+      <div class="order-card-title-left">
         <div class="order-card-title-text">{{ title }}</div>
-        <div class="order-card-title-status">
-          {{ LifeRechargeConstants.LifePayOrderStatusEnumText[status] }}
-        </div>
-      </div>
-      <div class="order-card-title-ordernum-wrapper">
         <div class="order-card-title-ordernum">
           {{ `璁㈠崟缂栧彿锛�${orderNo}` }}
         </div>
-        <slot name="actions">
-          <div
-            class="order-card-action"
-            v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.鍏呭�间腑"
-            @click="emit('goApplyRefund', id)"
-          >
-            鐢宠閫�娆�
-          </div>
-          <div
-            class="order-card-action"
-            v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.閫�娆惧け璐�"
-            @click="emit('goRefundDetail', orderNo)"
-          >
-            璇︽儏
-          </div>
-        </slot>
+      </div>
+      <div class="order-card-title-status">
+        <img :src="LifePayOrderStatusEnumImg[status]" alt="" />
       </div>
     </div>
     <div class="order-card-content">
       <slot></slot>
     </div>
+    <slot name="actions">
+      <div class="order-card-footer" v-if="shoeFooter">
+        <div
+          v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.鍏呭�间腑"
+          class="order-card-action"
+          @click="emit('goApplyRefund', id)"
+        >
+          鐢宠閫�娆�
+        </div>
+        <div
+          class="order-card-action"
+          v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.閫�娆惧け璐�"
+          @click="emit('goRefundDetail', orderNo)"
+        >
+          璇︽儏
+        </div>
+      </div>
+    </slot>
   </div>
 </template>
 
 <script setup lang="ts">
 import { LifeRechargeConstants } from '@life-payment/core-vue';
+import { OssAssets } from '../../constants';
+import { computed } from 'vue';
 
 defineOptions({
   name: 'OrderCard',
@@ -55,4 +57,21 @@
   (e: 'goApplyRefund', id: string): void;
   (e: 'goRefundDetail', orderNo: string): void;
 }>();
+
+const LifePayOrderStatusEnumImg = {
+  [LifeRechargeConstants.LifePayOrderStatusEnum.鍏呭�间腑]: OssAssets.card.Recharge,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.宸插け璐: OssAssets.card.Failed,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.宸插畬鎴怾: OssAssets.card.Success,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.寰呴��娆綸: OssAssets.card.WaitRefund,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.宸查��娆綸: OssAssets.card.Refunded,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.閫�娆惧け璐: OssAssets.card.RefundFail,
+  [LifeRechargeConstants.LifePayOrderStatusEnum.閫�娆句腑]: OssAssets.card.Refund,
+};
+
+const shoeFooter = computed(() => {
+  return (
+    props.status === LifeRechargeConstants.LifePayOrderStatusEnum.鍏呭�间腑 ||
+    props.status === LifeRechargeConstants.LifePayOrderStatusEnum.閫�娆惧け璐�
+  );
+});
 </script>
diff --git a/packages/components/src/constants/img.ts b/packages/components/src/constants/img.ts
index cb5fab6..26f4d94 100644
--- a/packages/components/src/constants/img.ts
+++ b/packages/components/src/constants/img.ts
@@ -6,4 +6,14 @@
     FreeDian: `${OssBasePath}/lifePayment/assets/home/icon-free-dian.png`,
     FreeGas: `${OssBasePath}/lifePayment/assets/home/icon-free-gas.png`,
   },
+
+  card: {
+    Failed: `${OssBasePath}/lifePayment/assets/card/card-status-failed.png`,
+    Recharge: `${OssBasePath}/lifePayment/assets/card/card-status-recharge.png`,
+    RefundFail: `${OssBasePath}/lifePayment/assets/card/card-status-refund-fail.png`,
+    Refund: `${OssBasePath}/lifePayment/assets/card/card-status-refund.png`,
+    Refunded: `${OssBasePath}/lifePayment/assets/card/card-status-refunded.png`,
+    Success: `${OssBasePath}/lifePayment/assets/card/card-status-success.png`,
+    WaitRefund: `${OssBasePath}/lifePayment/assets/card/card-status-wait-refund.png`,
+  },
 };
diff --git a/packages/components/src/styles/index.scss b/packages/components/src/styles/index.scss
index bb0c7c7..7ccae1d 100644
--- a/packages/components/src/styles/index.scss
+++ b/packages/components/src/styles/index.scss
@@ -52,5 +52,5 @@
 
 .life-page-infinite-scroll-list {
   @include lifeListScrollView;
-  padding-top: 16px;
+  padding-top: 32px;
 }
diff --git a/packages/components/src/styles/orderCard.scss b/packages/components/src/styles/orderCard.scss
index 8578715..9619746 100644
--- a/packages/components/src/styles/orderCard.scss
+++ b/packages/components/src/styles/orderCard.scss
@@ -1,10 +1,9 @@
 @use './common.scss' as *;
 
 .order-card {
-  border: 1px solid #e8e8e8;
-  border-radius: 12px;
-  padding: 20px;
-  margin-bottom: 20px;
+  border-radius: 24px;
+  padding: 40px 28px;
+  margin-bottom: 32px;
   background-color: #fff;
 
   &:last-child {
@@ -13,46 +12,73 @@
 
   .order-card-title {
     display: flex;
-    flex-direction: column;
-    border-bottom: 1px solid #e8e8e8;
-    padding-bottom: 20px;
-    margin-bottom: 20px;
+    border-bottom: 1px solid #f3f3f3;
+    padding-bottom: 32px;
+    margin-bottom: 32px;
 
-    .order-card-title-top {
+    .order-card-title-left {
       display: flex;
+      flex-direction: column;
       justify-content: space-between;
       color: #333333;
-      font-size: 28px;
-      line-height: 40px;
-      font-weight: 600;
-      margin-bottom: 12px;
+      flex: 1;
+      min-width: 0;
+      margin-right: 56px;
+
+      .order-card-title-text {
+        font-size: 30px;
+        line-height: 42px;
+        font-weight: 400;
+      }
     }
 
     .order-card-title-ordernum {
-      font-size: 24px;
-      color: #999999;
-      flex: 1;
-      min-width: 0;
+      font-size: 28px;
+      line-height: 40px;
+      color: #575b6c;
       @include ellipsis;
     }
 
-    .order-card-title-ordernum-wrapper {
-      display: flex;
-      align-items: center;
+    .order-card-title-status {
+      width: 116px;
+      height: 116px;
 
-      .order-card-action {
-        font-size: 24px;
-        color: boleGetCssVar('color', 'primary');
+      img {
+        width: 100%;
+        height: 100%;
       }
     }
+  }
+
+  .order-card-content {
+    padding-bottom: 26px;
+  }
+
+  .order-card-footer {
+    display: flex;
+    justify-content: flex-end;
+    padding-top: 32px;
+    border-top: solid 1px #f7f7f7;
+  }
+
+  .order-card-action {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 6px 24px;
+    color: boleGetCssVar('color', 'primary');
+    font-size: 26px;
+    line-height: 36px;
+    border: 1px solid boleGetCssVar('color', 'primary');
+    border-radius: 8px;
   }
 }
 
 .order-card-item {
   display: flex;
   font-size: 28px;
-  line-height: 40px;
-  margin-bottom: 15px;
+  line-height: 48px;
+  margin-bottom: 8px;
 
   .order-card-item-label {
     color: #333333;
@@ -69,4 +95,8 @@
       color: boleGetCssVar('color', 'danger');
     }
   }
+
+  &:last-child {
+    margin-bottom: 0;
+  }
 }

--
Gitblit v1.9.1