forked from angelo/web-retail-h5
				
			
		
			
				
	
	
		
			1454 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			1454 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | ||
|   <view class="content">
 | ||
|     <!-- 上方头部 -->
 | ||
|     <view class="header-container">
 | ||
|       <view class="user-info-wrapper">
 | ||
|         <view class="avatar-container">
 | ||
|           <image
 | ||
|             class="avatar-image"
 | ||
|             :src="
 | ||
|               userInfo.headPath
 | ||
|                 ? userInfo.headPath
 | ||
|                 : userInfo.settleCountryCircularIcon
 | ||
|             "
 | ||
|             mode="aspectFill"
 | ||
|           >
 | ||
|           </image>
 | ||
|         </view>
 | ||
|         <view class="user-details">
 | ||
|           <view class="user-name-and-level">
 | ||
|             <text class="user-name">{{ userInfo.memberCode }}</text>
 | ||
|             <view class="svip-badge">
 | ||
|               <text class="svip-text">{{ userInfo.pkGradeVal || '-' }}</text>
 | ||
|             </view>
 | ||
|           </view>
 | ||
|           <!-- <view class="awards-container">
 | ||
|             <view class="award-tag">
 | ||
|               <text class="award-label">荣誉奖衔:</text>
 | ||
|               <text class="award-value">{{
 | ||
|                 userInfo.pkMaxAwardsVal || userInfo.pkAwardsVal || '无'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|             <view style="display: flex; gap: 10rpx">
 | ||
|               <view class="award-tag">
 | ||
|                 <text class="award-label">当月奖衔:</text>
 | ||
|                 <text class="award-value">{{
 | ||
|                   userInfo.pkAwardsVal || '无'
 | ||
|                 }}</text>
 | ||
|               </view>
 | ||
|               <view v-if="userInfo.pkRangeAwardsVal" class="award-tag">
 | ||
|                 <text class="award-label">分红奖衔:</text>
 | ||
|                 <text class="award-value">{{ userInfo.pkRangeAwardsVal }}</text>
 | ||
|               </view>
 | ||
|             </view>
 | ||
|           </view> -->
 | ||
|         </view>
 | ||
|       </view>
 | ||
|       <view
 | ||
|         class="settings-icon-container"
 | ||
|         @click="goTo('/pages/userData/index')"
 | ||
|       >
 | ||
|         <u-icon color="#ffffff" size="22" name="setting-fill"></u-icon>
 | ||
|       </view>
 | ||
|     </view>
 | ||
| 
 | ||
|     <view class="my_order">
 | ||
|       <view class="my_title">
 | ||
|         <text class="thetitle">{{ '我的订单' }}</text>
 | ||
|         <!-- <view class="findallorder" @click="goTo('/pages/mine/order/index')">
 | ||
|           <text>{{ '全部订单' }}</text>
 | ||
|           <u-icon name="arrow-right" color="#999999" size="16rpx"></u-icon>
 | ||
|         </view> -->
 | ||
|       </view>
 | ||
|       <view class="order_flex thepadding" style="justify-content: center">
 | ||
|         <view
 | ||
|           class="theorderflex1"
 | ||
|           style="margin-bottom: 0"
 | ||
|           @click="goOrder('')"
 | ||
|         >
 | ||
|           <image class="order_img2" src="../../static/images/myorder_1.png" />
 | ||
|           <view class="order_text">全部订单</view>
 | ||
|         </view>
 | ||
|         <view
 | ||
|           class="theorderflex1"
 | ||
|           style="margin-bottom: 0"
 | ||
|           @click="goOrder(1)"
 | ||
|         >
 | ||
|           <image class="order_img2" src="../../static/images/myorder_2.png" />
 | ||
|           <view class="order_text">{{ '待发货' }}</view>
 | ||
|           <view v-if="payNum" class="qiu">{{ payNum }}</view>
 | ||
|         </view>
 | ||
|         <view
 | ||
|           class="theorderflex1"
 | ||
|           style="margin-bottom: 0"
 | ||
|           @click="goOrder(3)"
 | ||
|         >
 | ||
|           <image class="order_img2" src="../../static/images/myorder_3.png" />
 | ||
|           <view class="order_text">{{ '待收货' }}</view>
 | ||
|         </view>
 | ||
|         <view
 | ||
|           class="theorderflex1"
 | ||
|           style="margin-bottom: 0"
 | ||
|           @click="goOrder(5)"
 | ||
|         >
 | ||
|           <image class="order_img2" src="../../static/images/myorder_4.png" />
 | ||
|           <view class="order_text">{{ '已收货' }}</view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
| 
 | ||
|     <!-- 区域信息Tab -->
 | ||
|     <view class="my_order" v-if="showRegionTabs">
 | ||
|       <u-tabs
 | ||
|         :list="regionTabList"
 | ||
|         @change="onRegionTabChange"
 | ||
|         :current="currentRegionTab"
 | ||
|         :activeColor="'#005BAC'"
 | ||
|         :inactiveColor="'#999999'"
 | ||
|         :lineWidth="30"
 | ||
|         :lineHeight="4"
 | ||
|         :lineColor="'#005BAC'"
 | ||
|         :itemStyle="'padding: 15rpx 25rpx; font-size: 20rpx;'"
 | ||
|       >
 | ||
|       </u-tabs>
 | ||
| 
 | ||
|       <!-- Tab内容区域 -->
 | ||
|       <view class="tab-content">
 | ||
|         <!-- 已选区域内容 -->
 | ||
|         <view v-if="currentRegionTab === 0 && hasRegionData">
 | ||
|           <view class="region-info-box">
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '省' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 regionInfo.provinceVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '市' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 regionInfo.cityVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '区' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 regionInfo.countyVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|           </view>
 | ||
|         </view>
 | ||
| 
 | ||
|         <!-- 配送中心内容 -->
 | ||
|         <view v-if="currentRegionTab === 1 && hasDistributionData">
 | ||
|           <view class="region-info-box">
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '省' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 dstributionCenter.provinceVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '市' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 dstributionCenter.cityVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|             <view class="region-info-item">
 | ||
|               <text class="region-info-label">{{ '区' }}</text>
 | ||
|               <text class="region-info-value">{{
 | ||
|                 dstributionCenter.countyVal || '-'
 | ||
|               }}</text>
 | ||
|             </view>
 | ||
|           </view>
 | ||
|         </view>
 | ||
| 
 | ||
|         <!-- 配送中心无数据状态 -->
 | ||
|         <view v-if="currentRegionTab === 1 && !hasDistributionData">
 | ||
|           <view class="empty-state">
 | ||
|             <text class="empty-text">暂无配送中心信息</text>
 | ||
|           </view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
|     <view class="my_order">
 | ||
|       <view class="order_flex">
 | ||
|         <template v-for="(item, index) in otherMenuList">
 | ||
|           <view
 | ||
|             class="theorderflex1"
 | ||
|             v-if="item.ifshow"
 | ||
|             :key="index"
 | ||
|             @click="goTo(item.url)"
 | ||
|           >
 | ||
|             <image class="order_img" :src="item.imgurl" />
 | ||
|             <view class="order_text">{{ item.name }}</view>
 | ||
|           </view>
 | ||
|         </template>
 | ||
|         <!-- <view
 | ||
|         class="theorderflex1"
 | ||
|         @click="goTo('/pages/mine/feedBack/feedBack')"
 | ||
|       >
 | ||
|         <image class="order_img" src="../../static/images/my_icon12.png" />
 | ||
|         <view class="order_text">{{ '意见反馈' }}</view>
 | ||
|       </view> -->
 | ||
|         <!-- <picker
 | ||
|         :range="getLanguageList"
 | ||
|         :value="index"
 | ||
|         range-key="label"
 | ||
|         @change="bindPickerChange"
 | ||
|       >
 | ||
|         <view class="theorderflex1" @click="goTo('')">
 | ||
|           <image class="order_img" src="../../static/images/mark6.png" />
 | ||
|           <view class="order_text">{{ '多语言切换' }}</view>
 | ||
|         </view>
 | ||
|       </picker> -->
 | ||
|         <!-- <view
 | ||
|         class="theorderflex1"
 | ||
|         @click="goTo('/pages/mine/branchAddress/branchAddress')"
 | ||
|       >
 | ||
|         <image class="order_img" src="../../static/images/my_icon9.png" />
 | ||
|         <view class="order_text"
 | ||
|           >{{ '分公司' }}{{ '地址' }}</view
 | ||
|         >
 | ||
|       </view> -->
 | ||
| 
 | ||
|         <!-- <view class="theorderflex1" @click="goYear">
 | ||
|                   <image class='order_img' src="../../static/images/my_icon12.png" />
 | ||
|                   <view class="order_text">{{ '年度奖衔' }}</view>
 | ||
|               </view>  -->
 | ||
|         <!-- <view class="theorderflex1" @click="goTo('')">
 | ||
|                   <image class='order_img' src="../../static/images/my_icon12.png" />
 | ||
|                   <view class="order_text">关于我们</view>
 | ||
|               </view> -->
 | ||
|       </view>
 | ||
|     </view>
 | ||
| 
 | ||
|     <!-- 会员中心 -->
 | ||
| 
 | ||
|     <view class="btnbox">
 | ||
|       <u-button
 | ||
|         shape="circle"
 | ||
|         @click="loginOut()"
 | ||
|         color="#005BAC"
 | ||
|         :text="'退出登录'"
 | ||
|       ></u-button>
 | ||
|     </view>
 | ||
|     <cl-tabbar :current="4"></cl-tabbar>
 | ||
|     <u-popup
 | ||
|       :show="pswShow"
 | ||
|       class="pspopup"
 | ||
|       mode="center"
 | ||
|       closeable
 | ||
|       @close="pswShow = false"
 | ||
|     >
 | ||
|       <view class="t_tit">{{ '二级密码' }}</view>
 | ||
|       <view class="box">
 | ||
|         <view class="c_tit">{{ '请输入二级密码' }}</view>
 | ||
| 
 | ||
|         <u--input
 | ||
|           border="surround"
 | ||
|           type="password"
 | ||
|           v-model="password"
 | ||
|         ></u--input>
 | ||
|         <u-button
 | ||
|           type="success"
 | ||
|           class="uBtn"
 | ||
|           shape="circle"
 | ||
|           @tap="surePsw"
 | ||
|           color="#005BAC"
 | ||
|           >{{ '确认' }}
 | ||
|         </u-button>
 | ||
|       </view>
 | ||
|     </u-popup>
 | ||
|     <!-- <RegionSelect
 | ||
|       v-if="isNormal"
 | ||
|       ref="regionSelect"
 | ||
|       @success="getRegionSelect"
 | ||
|     /> -->
 | ||
|     <!-- <talentList :drShow="drShow" @closeShow="closeShow"></talentList> -->
 | ||
|   </view>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| import clTabbar from '@/components/cl-tabbar.vue'
 | ||
| import * as min from '@/config/balance.js'
 | ||
| import * as api from '@/config/login.js'
 | ||
| import { MEMBER_SIGN } from '@/util/common.js'
 | ||
| import { getMarketDynamicBoxCount } from '@/config/mine.js'
 | ||
| import RegionSelect from '@/components/region-select/index.vue'
 | ||
| import {
 | ||
|   getRegionSelect,
 | ||
|   getMemberBoxCount,
 | ||
|   getMemberPerformance,
 | ||
| } from '@/config/mine.js'
 | ||
| // import talentList from "@/components/talentList.vue";
 | ||
| export default {
 | ||
|   components: {
 | ||
|     'cl-tabbar': clTabbar,
 | ||
|     // talentList,
 | ||
|     RegionSelect,
 | ||
|   },
 | ||
|   data() {
 | ||
|     return {
 | ||
|       MEMBER_SIGN,
 | ||
|       getLanguageList: [],
 | ||
|       index: 0,
 | ||
|       userInfo: {},
 | ||
|       userData: {},
 | ||
|       pswShow: false,
 | ||
|       password: '',
 | ||
|       waitPayNum: '',
 | ||
|       payNum: '',
 | ||
|       awards: {},
 | ||
|       otherMenuList: [
 | ||
|         {
 | ||
|           url: '1',
 | ||
|           name: '我的钱包',
 | ||
|           imgurl: '../../static/images/my_icon1.png',
 | ||
|           menuKey: 'wallet',
 | ||
|           ifshow: false,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/bonus/menu',
 | ||
|           name: '奖金明细',
 | ||
|           imgurl: '../../static/images/mark2.png',
 | ||
|           menuKey: 'incomeDetail',
 | ||
|           ifshow: false,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/ticket/index',
 | ||
|           name: '自助购票',
 | ||
|           imgurl: '../../static/images/tickets.png',
 | ||
|           menuKey: 'ticket',
 | ||
|           ifshow: true,
 | ||
|           alwaysShow: true,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/selfService/index',
 | ||
|           name: '自助服务',
 | ||
|           imgurl: '../../static/images/my_icon6.png',
 | ||
|           menuKey: 'selfHelp',
 | ||
|           ifshow: true,
 | ||
|         },
 | ||
|         // {
 | ||
|         //   url: '/pages/mine/share/index',
 | ||
|         //   name: '个人推广',
 | ||
|         //   imgurl: '../../static/images/list.svg',
 | ||
|         //   menuKey: 'share',
 | ||
|         //   ifshow: false,
 | ||
|         // },
 | ||
|         {
 | ||
|           url: '/pages/userSecure/index',
 | ||
|           name: '账号安全',
 | ||
|           imgurl: '../../static/images/my_icon8.png',
 | ||
|           menuKey: 'userSecure',
 | ||
|           ifshow: true,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/addressList/index',
 | ||
|           name: '地址管理',
 | ||
|           imgurl: '../../static/images/my_icon9.png',
 | ||
|           menuKey: 'addressList',
 | ||
|           ifshow: true,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/mine/directPush/index',
 | ||
|           name: '直推列表',
 | ||
|           imgurl: '../../static/images/mark5.png',
 | ||
|           menuKey: 'directPush',
 | ||
|           ifshow: false,
 | ||
|         },
 | ||
|         {
 | ||
|           url: '/pages/pickupArea/pickupArea',
 | ||
|           name: '提货专区',
 | ||
|           imgurl: '../../static/images/my_icon3.png',
 | ||
|           menuKey: 'pickGoods',
 | ||
|           ifshow: true,
 | ||
|         },
 | ||
|         // {
 | ||
|         //   url: '/pages/mine/bindBank/index',
 | ||
|         //   name: '银行信息',
 | ||
|         //   imgurl: '../../static/images/my_icon10.png',
 | ||
|         //   menuKey: 'bankInfo',
 | ||
|         //   ifshow: true,
 | ||
|         // },
 | ||
|         // {
 | ||
|         //   url: '/pages/bonus/regional-assessment/index',
 | ||
|         //   name: '区域考核',
 | ||
|         //   imgurl: '../../static/images/mark5.png',
 | ||
|         //   menuKey: 'areaAssessment',
 | ||
|         //   ifshow: false,
 | ||
|         // },
 | ||
|         // {
 | ||
|         //   url: '/pages/mine/addNewPv/index',
 | ||
|         //   name: '新增业绩',
 | ||
|         //   imgurl: '../../static/images/mark9.png',
 | ||
|         //   menuKey: 'iNewAchievement',
 | ||
|         //   ifshow: false,
 | ||
|         // },
 | ||
|       ],
 | ||
|       drShow: false,
 | ||
|       actMenu: false,
 | ||
|       iHonorAward: false,
 | ||
|       ifSpecial: false,
 | ||
|       awardsList: '',
 | ||
|       regionInfo: {},
 | ||
|       dstributionCenter: {},
 | ||
|       smallAreaBox: 0,
 | ||
|       totalBox: 0,
 | ||
|       // performanceData: {},
 | ||
|       marketDynamicBoxInfo: {},
 | ||
|       totalSumPv: 0,
 | ||
|       smallAreaPv: 0,
 | ||
|       isNormal: false,
 | ||
|       currentRegionTab: 0, // 当前选中的tab索引
 | ||
|     }
 | ||
|   },
 | ||
|   onShow() {
 | ||
|     this.getInfo().then(isNormal => {
 | ||
|       this.orderNum()
 | ||
|       if (!isNormal) {
 | ||
|         return
 | ||
|       }
 | ||
|       this.isNormal = isNormal
 | ||
|       this.getRegionSelect()
 | ||
|       this.getMemberBoxCount()
 | ||
|       this.getMarketDynamicBoxCount()
 | ||
|       // this.getUserAwardss()
 | ||
|     })
 | ||
|   },
 | ||
| 
 | ||
|   computed: {
 | ||
|     sprintProgress() {
 | ||
|       const targetPvStr = this.awards.targetPv
 | ||
|       const sumRealPvStr = this.awards.sumRealPv // 这是"小区仅需"的量,即差距
 | ||
| 
 | ||
|       const targetPv = parseFloat(targetPvStr)
 | ||
|       const sumRealPv = parseFloat(sumRealPvStr)
 | ||
| 
 | ||
|       let achievedPv = 0
 | ||
|       let percentage = 0
 | ||
|       const numericTargetPv =
 | ||
|         Math.floor((isNaN(targetPv) ? 0 : targetPv) * 100) / 100
 | ||
| 
 | ||
|       if (!isNaN(targetPv) && targetPv > 0) {
 | ||
|         // sumRealPv 是差距,所以已完成的是 targetPv - sumRealPv
 | ||
|         achievedPv = targetPv - (isNaN(sumRealPv) ? 0 : sumRealPv)
 | ||
| 
 | ||
|         achievedPv = Math.max(0, Math.min(achievedPv, targetPv))
 | ||
| 
 | ||
|         percentage = (sumRealPvStr / targetPv) * 100
 | ||
|       } else if (
 | ||
|         !isNaN(targetPv) &&
 | ||
|         targetPv === 0 &&
 | ||
|         !isNaN(sumRealPv) &&
 | ||
|         sumRealPv <= 0
 | ||
|       ) {
 | ||
|         // 如果目标是0,且差距也是0或负数(表示已满足或超越0目标),则认为是100%
 | ||
|         achievedPv = 0
 | ||
|         percentage = 100
 | ||
|       }
 | ||
| 
 | ||
|       const clampedPercentage = Math.min(100, Math.max(0, percentage))
 | ||
| 
 | ||
|       return {
 | ||
|         percentageString: `${Math.floor(clampedPercentage)}%`,
 | ||
|         achieved: (Math.floor(achievedPv * 100) / 100).toFixed(2),
 | ||
|         target: numericTargetPv.toFixed(2),
 | ||
|         rawPercentage: clampedPercentage,
 | ||
|       }
 | ||
|     },
 | ||
|     marketWrapperVisible() {
 | ||
|       return this.userInfo.memberSign !== MEMBER_SIGN.ZERO_LEVEL
 | ||
|     },
 | ||
|     dstributionCenterVisible() {
 | ||
|       return !!this.dstributionCenter
 | ||
|     },
 | ||
|     formattedTotalSumPv() {
 | ||
|       const value = String(this.totalSumPv || '0.00')
 | ||
|       const parts = value.split('.')
 | ||
|       return {
 | ||
|         integer: parts[0],
 | ||
|         decimal: parts.length > 1 ? `.${parts[1]}` : '',
 | ||
|       }
 | ||
|     },
 | ||
|     formattedSmallAreaPv() {
 | ||
|       const value = String(this.smallAreaPv || '0.00')
 | ||
|       const parts = value.split('.')
 | ||
|       return {
 | ||
|         integer: parts[0],
 | ||
|         decimal: parts.length > 1 ? `.${parts[1]}` : '',
 | ||
|       }
 | ||
|     },
 | ||
|     formattedTotalBox() {
 | ||
|       const value = String(this.totalBox || '0')
 | ||
|       const parts = value.split('.')
 | ||
|       return {
 | ||
|         integer: parts[0],
 | ||
|         decimal: parts.length > 1 ? `.${parts[1]}` : '',
 | ||
|       }
 | ||
|     },
 | ||
|     formattedSmallAreaBox() {
 | ||
|       const value = String(this.smallAreaBox || '0')
 | ||
|       const parts = value.split('.')
 | ||
|       return {
 | ||
|         integer: parts[0],
 | ||
|         decimal: parts.length > 1 ? `.${parts[1]}` : '',
 | ||
|       }
 | ||
|     },
 | ||
|     // 是否有已选区域数据
 | ||
|     hasRegionData() {
 | ||
|       return !!(
 | ||
|         this.regionInfo &&
 | ||
|         (this.regionInfo.provinceVal ||
 | ||
|           this.regionInfo.cityVal ||
 | ||
|           this.regionInfo.countyVal)
 | ||
|       )
 | ||
|     },
 | ||
|     // 是否有配送中心数据
 | ||
|     hasDistributionData() {
 | ||
|       return !!(
 | ||
|         this.dstributionCenter &&
 | ||
|         (this.dstributionCenter.provinceVal ||
 | ||
|           this.dstributionCenter.cityVal ||
 | ||
|           this.dstributionCenter.countyVal)
 | ||
|       )
 | ||
|     },
 | ||
|     showRegionTabs() {
 | ||
|       return !!(
 | ||
|         (this.regionInfo && Object.keys(this.regionInfo).length) ||
 | ||
|         (this.dstributionCenter && Object.keys(this.dstributionCenter).length)
 | ||
|       )
 | ||
|     },
 | ||
|     regionTabList() {
 | ||
|       const tabs = []
 | ||
| 
 | ||
|       if (this.regionInfo) {
 | ||
|         tabs.push({
 | ||
|           name: '已选区域',
 | ||
|         })
 | ||
|       }
 | ||
| 
 | ||
|       if (this.dstributionCenter) {
 | ||
|         tabs.push({
 | ||
|           name: '配送中心',
 | ||
|         })
 | ||
|       }
 | ||
| 
 | ||
|       return tabs
 | ||
|     },
 | ||
|   },
 | ||
| 
 | ||
|   methods: {
 | ||
|     // Tab切换事件
 | ||
|     onRegionTabChange({ index }) {
 | ||
|       this.currentRegionTab = index
 | ||
|     },
 | ||
|     getRegionSelect() {
 | ||
|       uni.showLoading({
 | ||
|         title: '加载中...',
 | ||
|       })
 | ||
|       getRegionSelect()
 | ||
|         .then(res => {
 | ||
|           if (res.code == 200) {
 | ||
|             this.regionInfo = (res.data || []).filter(
 | ||
|               item => item.businessType === 1
 | ||
|             )?.[0]
 | ||
|             this.dstributionCenter = (res.data || []).filter(
 | ||
|               item => item.businessType === 2
 | ||
|             )?.[0]
 | ||
|           }
 | ||
|         })
 | ||
|         .finally(() => {
 | ||
|           uni.hideLoading()
 | ||
|         })
 | ||
|     },
 | ||
|     openRegionSelect() {
 | ||
|       uni.showLoading({
 | ||
|         title: '加载中...',
 | ||
|       })
 | ||
|       this.$refs.regionSelect
 | ||
|         ?.open()
 | ||
|         .then(() => {
 | ||
|           uni.hideLoading()
 | ||
|         })
 | ||
|         .catch(() => {
 | ||
|           uni.hideLoading()
 | ||
|         })
 | ||
|     },
 | ||
|     goYear() {
 | ||
|       uni.navigateTo({
 | ||
|         url: '/pages/mine/yearGift/index',
 | ||
|       })
 | ||
|     },
 | ||
|     closeShow() {
 | ||
|       this.drShow = false
 | ||
|     },
 | ||
|     goHonoray() {
 | ||
|       uni.navigateTo({
 | ||
|         url: '/pages/mine/honoraryAwards/honoraryAwards',
 | ||
|       })
 | ||
|     },
 | ||
|     //获取用户真实奖衔
 | ||
|     getUserAwardss() {
 | ||
|       api.getUserAwards().then(res => {
 | ||
|         this.awards = res.data || {}
 | ||
|       })
 | ||
|     },
 | ||
|     GetPercent(num, total) {
 | ||
|       num = parseFloat(num)
 | ||
|       total = parseFloat(total)
 | ||
|       if (isNaN(num) || isNaN(total)) {
 | ||
|         return '-'
 | ||
|       }
 | ||
|       if (total == 0) {
 | ||
|         return '0%'
 | ||
|       } else if (total < 0) {
 | ||
|         return 100 + '%'
 | ||
|       } else {
 | ||
|         return Math.round((num / total) * 10000) / 100.0 + '%'
 | ||
|       }
 | ||
|     },
 | ||
|     yesPercent(left, right) {
 | ||
|       left = parseFloat(left)
 | ||
|       right = parseFloat(right)
 | ||
|       if (isNaN(left) || isNaN(right)) {
 | ||
|         return '0%'
 | ||
|       }
 | ||
|       return right + left == 0
 | ||
|         ? '0%'
 | ||
|         : Math.round((left / (right + left)) * 10000) / 100.0 + '%'
 | ||
|     },
 | ||
|     orderNum() {
 | ||
|       api.orderNum().then(res => {
 | ||
|         this.waitPayNum = res.data.waitPayNum
 | ||
|         this.payNum = res.data.payNum
 | ||
|       })
 | ||
|     },
 | ||
|     getInfo() {
 | ||
|       return new Promise(resolve => {
 | ||
|         api.getInfo().then(res => {
 | ||
|           if (res.code == 200) {
 | ||
|             this.userInfo = res.data
 | ||
| 
 | ||
|             if (this.userInfo.memberCode != 'BL66886688') {
 | ||
|               this.otherMenuList = this.otherMenuList.map(item => {
 | ||
|                 item.ifshow = true
 | ||
|                 return item
 | ||
|               })
 | ||
|               resolve(true)
 | ||
|               return
 | ||
|             }
 | ||
|             resolve(false)
 | ||
|           } else {
 | ||
|             reject()
 | ||
|           }
 | ||
|         })
 | ||
|       })
 | ||
|     },
 | ||
|     goTo(url) {
 | ||
|       if (url == 1) {
 | ||
|         this.pswShow = true
 | ||
|       } else if (url == 2) {
 | ||
|         //达人榜单
 | ||
|         this.drShow = true
 | ||
|       } else {
 | ||
|         uni.navigateTo({
 | ||
|           url: url,
 | ||
|         })
 | ||
|       }
 | ||
|     },
 | ||
|     getMarketDynamicBoxCount() {
 | ||
|       getMarketDynamicBoxCount({
 | ||
|         pkBigMember: this.userInfo.memberCode,
 | ||
|       }).then(res => {
 | ||
|         if (res.code == 200) {
 | ||
|           this.marketDynamicBoxInfo = res.data
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|     goOrder(index) {
 | ||
|       //全部订单
 | ||
|       uni.navigateTo({
 | ||
|         url: '/pages/mine/order/index?isTab=' + index,
 | ||
|       })
 | ||
|     },
 | ||
|     goRoad(index) {
 | ||
|       //1等级2奖衔
 | ||
|       if (index == 1) {
 | ||
|         uni.navigateTo({
 | ||
|           url: '/pages/mine/growthRoad/gradeRoad',
 | ||
|         })
 | ||
|       } else if (index == 2) {
 | ||
|         uni.navigateTo({
 | ||
|           url: '/pages/mine/growthRoad/awardRoad',
 | ||
|         })
 | ||
|       }
 | ||
|     },
 | ||
|     loginOut() {
 | ||
|       uni.setStorageSync('pkCountry', '')
 | ||
|       uni.setStorageSync('showInfo', 0)
 | ||
|       this.$store.dispatch('LogOut')
 | ||
|       uni.reLaunch({
 | ||
|         url: '/pages/login/index',
 | ||
|       })
 | ||
|     },
 | ||
|     getMemberBoxCount() {
 | ||
|       getMemberBoxCount({
 | ||
|         pkBigMember: this.userInfo.memberCode,
 | ||
|       }).then(res => {
 | ||
|         if (res.code == 200) {
 | ||
|           this.totalBox = res.data?.totalBox || 0
 | ||
|           this.smallAreaBox = res.data?.smallAreaBox || 0
 | ||
|           this.totalSumPv = res.data?.totalSumPv || 0
 | ||
|           this.smallAreaPv = res.data?.smallAreaPv || 0
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|     surePsw() {
 | ||
|       min
 | ||
|         .checkPwd({
 | ||
|           pwd: this.password,
 | ||
|         })
 | ||
|         .then(res => {
 | ||
|           if (res.code == 200) {
 | ||
|             this.password = ''
 | ||
|             this.pswShow = false
 | ||
|             uni.navigateTo({
 | ||
|               url: '/pages/mine/balance/index',
 | ||
|             })
 | ||
|           } else {
 | ||
|             uni.showToast({
 | ||
|               title: res.msg,
 | ||
|               icon: 'error',
 | ||
|             })
 | ||
|           }
 | ||
|         })
 | ||
|     },
 | ||
|     goSpecialArea() {
 | ||
|       uni.switchTab({
 | ||
|         url: '/pages/specialArea/index',
 | ||
|       })
 | ||
|     },
 | ||
|   },
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .ju_grade {
 | ||
|   box-shadow: 0rpx 3rpx 7rpx 0rpx rgba(0, 0, 0, 0.08);
 | ||
|   border-radius: 20rpx;
 | ||
|   padding: 20rpx;
 | ||
|   background: #ffffff;
 | ||
|   font-size: 24rpx;
 | ||
| 
 | ||
|   .descriptive-text {
 | ||
|     font-size: 22rpx;
 | ||
|     color: #666666;
 | ||
|     margin-right: 8rpx;
 | ||
|   }
 | ||
|   .jugrade_flex {
 | ||
|     display: flex;
 | ||
|     justify-content: space-between;
 | ||
|     align-items: center;
 | ||
|     // margin-top: 20rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .ju_left {
 | ||
|     flex: 1;
 | ||
| 
 | ||
|     .ju_left_top {
 | ||
|       color: #666666;
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|       justify-content: center;
 | ||
|       .ju_text1 {
 | ||
|         font-weight: 400;
 | ||
|         color: #333;
 | ||
|       }
 | ||
| 
 | ||
|       .ju_text2 {
 | ||
|         color: #005bac;
 | ||
|         font-weight: bold;
 | ||
|         font-size: 16px;
 | ||
|         padding: 0 6rpx;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .ju_left_bottom {
 | ||
|       // width: 100%;
 | ||
|       flex: 1;
 | ||
|       height: 34rpx;
 | ||
|       background: #eeeeee;
 | ||
|       border-radius: 20rpx;
 | ||
|       margin: 10rpx;
 | ||
|       // margin-top: 23rpx;
 | ||
|       position: relative;
 | ||
|     }
 | ||
|     .ju_left_bottom1 {
 | ||
|       // width: 100%;
 | ||
|       flex: 1;
 | ||
|       height: 34rpx;
 | ||
|       background: #ffb74d;
 | ||
|       border-radius: 20rpx;
 | ||
|       margin: 10rpx;
 | ||
|       // margin-top: 23rpx;
 | ||
|       position: relative;
 | ||
|     }
 | ||
|     // .current-schedule1 {
 | ||
|     //   position: absolute;
 | ||
|     //   width: 30%;
 | ||
|     //   background: #005BAC;
 | ||
|     //   height: 34rpx;
 | ||
|     //   border-radius: 20px;
 | ||
|     // }
 | ||
|     // .current-schedule2 {
 | ||
|     //   position: absolute;
 | ||
|     //   width: 30%;
 | ||
|     //   background: #005BAC;
 | ||
|     //   height: 34rpx;
 | ||
|     //   border-radius: 20px;
 | ||
|     // }
 | ||
|     // .current-schedule3 {
 | ||
|     //   position: absolute;
 | ||
|     //   width: 30%;
 | ||
|     //   background: #005BAC;
 | ||
|     //   height: 34rpx;
 | ||
|     //   border-radius: 20px;
 | ||
|     // }
 | ||
|     .current-progress {
 | ||
|       position: absolute;
 | ||
|       width: 30%;
 | ||
|       background: #3385d6;
 | ||
|       height: 34rpx;
 | ||
|       border-radius: 20px;
 | ||
|     }
 | ||
|     .cha {
 | ||
|       width: 100%;
 | ||
|       position: absolute;
 | ||
|       top: 60%;
 | ||
|       left: 0;
 | ||
|       transform: translate(0%, -55%);
 | ||
|       white-space: nowrap;
 | ||
|       text-align: center;
 | ||
|     }
 | ||
|     .yestDay {
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|       margin-top: 10rpx;
 | ||
|     }
 | ||
|     .yes_t {
 | ||
|       margin-right: 20rpx;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .ju_right {
 | ||
|     width: 104rpx;
 | ||
|     height: 94rpx;
 | ||
|     margin-left: 20rpx;
 | ||
| 
 | ||
|     .ju_img {
 | ||
|       width: 100%;
 | ||
|       height: 100%;
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .my_order {
 | ||
|   background-color: #ffffff;
 | ||
|   box-shadow: 0px 4px 20px 0px rgba(204, 204, 204, 0.4);
 | ||
|   border-radius: 20rpx;
 | ||
|   padding: 0 20rpx;
 | ||
|   margin-top: 40rpx;
 | ||
| 
 | ||
|   .my_title {
 | ||
|     display: flex;
 | ||
|     justify-content: space-between;
 | ||
|     align-items: center;
 | ||
|     border-bottom: 2rpx solid #eeeeee;
 | ||
|     padding: 20rpx 0;
 | ||
| 
 | ||
|     .thetitle {
 | ||
|       font-size: 28rpx;
 | ||
|       font-family:
 | ||
|         PingFangSC-Semibold,
 | ||
|         PingFang SC;
 | ||
|       font-weight: 600;
 | ||
|       color: #333333;
 | ||
|     }
 | ||
| 
 | ||
|     .findallorder {
 | ||
|       font-family:
 | ||
|         PingFangSC-Regular,
 | ||
|         PingFang SC;
 | ||
|       color: #999999;
 | ||
|       font-size: 16rpx;
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .thepadding {
 | ||
|     padding: 20rpx 0;
 | ||
|   }
 | ||
| 
 | ||
|   .order_flex {
 | ||
|     padding: 20rpx 0;
 | ||
|     display: flex;
 | ||
|     align-items: center;
 | ||
|     flex-wrap: wrap;
 | ||
| 
 | ||
|     .theorderflex1 {
 | ||
|       margin: 18rpx 0;
 | ||
|       width: 165rpx;
 | ||
|       text-align: center;
 | ||
|       position: relative;
 | ||
| 
 | ||
|       .order_img {
 | ||
|         width: 48rpx;
 | ||
|         height: 46rpx;
 | ||
|       }
 | ||
| 
 | ||
|       .order_text {
 | ||
|         margin-top: 15rpx;
 | ||
|         font-size: 20rpx;
 | ||
|         font-family:
 | ||
|           PingFangSC-Semibold,
 | ||
|           PingFang SC;
 | ||
|         font-weight: 600;
 | ||
|         color: #333333;
 | ||
|       }
 | ||
| 
 | ||
|       .order_img2 {
 | ||
|         width: 68rpx;
 | ||
|         height: 68rpx;
 | ||
|         border-radius: 50%;
 | ||
|         border-bottom: 20rpx;
 | ||
|       }
 | ||
| 
 | ||
|       .order_text2 {
 | ||
|         font-size: 28rpx;
 | ||
|         font-family:
 | ||
|           PingFangSC-Regular,
 | ||
|           PingFang SC;
 | ||
|         font-weight: 400;
 | ||
|         color: #333333;
 | ||
|       }
 | ||
| 
 | ||
|       .qiu {
 | ||
|         position: absolute;
 | ||
|         width: 20px;
 | ||
|         height: 20px;
 | ||
|         background: rgb(249, 48, 38);
 | ||
|         top: -10px;
 | ||
|         right: 10px;
 | ||
|         border-radius: 50%;
 | ||
|         font-size: 12px;
 | ||
|         color: #ffffff;
 | ||
|         text-align: center;
 | ||
|         line-height: 20px;
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .order_flex2 {
 | ||
|     justify-content: flex-start;
 | ||
| 
 | ||
|     .theorderflex1 {
 | ||
|       width: 120rpx; // flex: 1;
 | ||
|       margin-right: 66rpx;
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .pspopup {
 | ||
|   .t_tit {
 | ||
|     text-align: center;
 | ||
|     margin-top: 40rpx;
 | ||
|     font-weight: bold;
 | ||
|     font-size: 32rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .c_tit {
 | ||
|     margin-bottom: 40rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .box {
 | ||
|     padding: 40rpx 40rpx;
 | ||
|     text-align: center;
 | ||
|   }
 | ||
| 
 | ||
|   .uBtn {
 | ||
|     margin-top: 40rpx;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .content {
 | ||
|   padding: 0 22rpx;
 | ||
|   padding-bottom: 100rpx; // background-color: #f2f2f2;
 | ||
|   position: relative;
 | ||
|   font-size: 24rpx;
 | ||
|   height: 100vh;
 | ||
|   overflow: scroll;
 | ||
|   background-image: linear-gradient(
 | ||
|     to bottom,
 | ||
|     #005bac 25%,
 | ||
|     #f2f2f2 40%
 | ||
|   ); // background-position: top;
 | ||
| }
 | ||
| 
 | ||
| .header-container {
 | ||
|   display: flex;
 | ||
|   justify-content: space-between;
 | ||
|   align-items: flex-start;
 | ||
|   padding: 40rpx 0;
 | ||
|   color: #ffffff;
 | ||
|   position: relative;
 | ||
|   padding-bottom: 0; // Add some bottom padding
 | ||
| }
 | ||
| 
 | ||
| .user-info-wrapper {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   gap: 24rpx;
 | ||
| }
 | ||
| 
 | ||
| .avatar-container {
 | ||
|   width: 110rpx;
 | ||
|   height: 110rpx;
 | ||
|   border-radius: 50%;
 | ||
|   border: 4rpx solid rgba(255, 255, 255, 0.5);
 | ||
|   overflow: hidden;
 | ||
|   box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.1);
 | ||
| 
 | ||
|   .avatar-image {
 | ||
|     width: 100%;
 | ||
|     height: 100%;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .user-details {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   gap: 16rpx;
 | ||
| }
 | ||
| 
 | ||
| .user-name-and-level {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   gap: 16rpx;
 | ||
| 
 | ||
|   .user-name {
 | ||
|     font-size: 36rpx;
 | ||
|     font-weight: bold;
 | ||
|     color: #fff;
 | ||
|   }
 | ||
| 
 | ||
|   .svip-badge {
 | ||
|     background: linear-gradient(145deg, #fde468, #fad02c);
 | ||
|     color: #5d4203;
 | ||
|     padding: 4rpx 16rpx;
 | ||
|     border-radius: 50px;
 | ||
|     font-size: 22rpx;
 | ||
|     font-weight: 600;
 | ||
|     box-shadow:
 | ||
|       inset 0 1px 1px rgba(255, 255, 255, 0.4),
 | ||
|       0 1px 2px rgba(0, 0, 0, 0.15);
 | ||
|     border: 1rpx solid #c8a000;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .awards-container {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   gap: 8rpx;
 | ||
|   align-items: flex-start;
 | ||
| }
 | ||
| 
 | ||
| .award-tag {
 | ||
|   background-color: rgba(255, 255, 255, 0.15);
 | ||
|   padding: 8rpx 16rpx;
 | ||
|   border-radius: 50px;
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   gap: 8rpx;
 | ||
|   font-size: 22rpx;
 | ||
| 
 | ||
|   .award-label {
 | ||
|     opacity: 0.8;
 | ||
|   }
 | ||
|   .award-value {
 | ||
|     font-weight: 500;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .settings-icon-container {
 | ||
|   padding: 10rpx;
 | ||
|   background-color: rgba(255, 255, 255, 0.1);
 | ||
|   border-radius: 50%;
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   justify-content: center;
 | ||
|   cursor: pointer;
 | ||
|   margin-top: 10rpx; // Align vertically with user name
 | ||
| }
 | ||
| 
 | ||
| .jiangxian {
 | ||
|   display: flex;
 | ||
|   color: #ffffff;
 | ||
|   align-items: center;
 | ||
|   margin: 0rpx 0 10rpx 0;
 | ||
| }
 | ||
| 
 | ||
| .yt1 {
 | ||
|   font-weight: 600;
 | ||
|   font-size: 18px;
 | ||
|   margin-left: 10rpx;
 | ||
| }
 | ||
| 
 | ||
| .hisImg {
 | ||
|   width: 50rpx;
 | ||
|   height: 50rpx;
 | ||
|   margin-left: 10rpx;
 | ||
| }
 | ||
| 
 | ||
| .jxTit {
 | ||
|   flex: 1;
 | ||
|   text-align: center;
 | ||
| }
 | ||
| 
 | ||
| .jxTit1 {
 | ||
|   font-weight: 600;
 | ||
|   font-size: 24rpx;
 | ||
| }
 | ||
| 
 | ||
| .contentLink {
 | ||
|   .linktitle {
 | ||
|     font-size: 28rpx;
 | ||
|     font-family: Source Han Sans CN;
 | ||
|     font-weight: bold;
 | ||
|     color: #333333;
 | ||
|     margin-bottom: 25rpx;
 | ||
|   }
 | ||
| 
 | ||
|   background-color: #ffffff; // border-radius: 25px;
 | ||
|   border-top-left-radius: 25px;
 | ||
|   border-top-right-radius: 25px;
 | ||
|   padding: 35rpx 25rpx;
 | ||
| 
 | ||
|   .my_icon {
 | ||
|     width: 39rpx;
 | ||
|     height: 37rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .my_icon2 {
 | ||
|     width: 39rpx;
 | ||
|     height: 43rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .my_icon3 {
 | ||
|     width: 43rpx;
 | ||
|     height: 37rpx;
 | ||
|   }
 | ||
| 
 | ||
|   .u-cell-text {
 | ||
|     margin-left: 25rpx;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| ::v-deep .u-line {
 | ||
|   border: none !important;
 | ||
| }
 | ||
| 
 | ||
| .btnbox {
 | ||
|   margin-top: 190rpx;
 | ||
|   padding: 20rpx 22rpx 150rpx 22rpx;
 | ||
| }
 | ||
| 
 | ||
| .sprint-progress-container {
 | ||
|   flex: 1;
 | ||
|   height: 34rpx;
 | ||
|   background: #eeeeee;
 | ||
|   border-radius: 20rpx;
 | ||
|   margin: 10rpx;
 | ||
|   position: relative;
 | ||
|   overflow: hidden;
 | ||
| }
 | ||
| 
 | ||
| .sprint-current-progress {
 | ||
|   position: absolute;
 | ||
|   left: 0;
 | ||
|   top: 0;
 | ||
|   height: 100%;
 | ||
|   border-radius: 20rpx;
 | ||
|   background: linear-gradient(135deg, #ed9a38 0%, #fdd05f 50%, #e68a2e 100%);
 | ||
|   transition: width 0.6s ease-in-out;
 | ||
|   box-shadow: none;
 | ||
|   overflow: hidden;
 | ||
| }
 | ||
| 
 | ||
| .sprint-current-progress::before {
 | ||
|   content: '';
 | ||
|   position: absolute;
 | ||
|   top: 0;
 | ||
|   left: 0;
 | ||
|   width: 100%;
 | ||
|   height: 100%;
 | ||
|   background: linear-gradient(
 | ||
|     100deg,
 | ||
|     rgba(255, 255, 255, 0) 20%,
 | ||
|     rgba(255, 255, 255, 0.4) 50%,
 | ||
|     rgba(255, 255, 255, 0) 80%
 | ||
|   );
 | ||
|   transform: translateX(-100%);
 | ||
|   animation: premium_shimmer_animation 2.5s infinite linear;
 | ||
| }
 | ||
| 
 | ||
| @keyframes premium_shimmer_animation {
 | ||
|   0% {
 | ||
|     transform: translateX(-100%);
 | ||
|   }
 | ||
|   100% {
 | ||
|     transform: translateX(100%);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .sprint-progress-text {
 | ||
|   width: 100%;
 | ||
|   position: absolute;
 | ||
|   top: 50%;
 | ||
|   left: 0;
 | ||
|   transform: translateY(-50%);
 | ||
|   white-space: nowrap;
 | ||
|   text-align: center;
 | ||
|   font-size: 22rpx;
 | ||
|   color: #333333;
 | ||
|   display: flex;
 | ||
|   align-items: baseline;
 | ||
|   justify-content: center;
 | ||
| }
 | ||
| 
 | ||
| .sprint-progress-text span {
 | ||
|   margin: 0 3rpx;
 | ||
| }
 | ||
| 
 | ||
| .sprint-progress-text .award-name {
 | ||
|   font-weight: bold;
 | ||
|   color: #005bac;
 | ||
|   font-size: 26rpx;
 | ||
|   padding: 0 4rpx;
 | ||
| }
 | ||
| 
 | ||
| .sprint-progress-text .award-amount {
 | ||
|   font-weight: bold;
 | ||
|   color: #d9534f;
 | ||
|   font-size: 24rpx;
 | ||
|   padding: 0 4rpx;
 | ||
| }
 | ||
| 
 | ||
| .region-info-box {
 | ||
|   display: flex;
 | ||
|   justify-content: space-around;
 | ||
|   padding: 30rpx 0;
 | ||
|   text-align: center;
 | ||
| }
 | ||
| 
 | ||
| .region-info-item {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   align-items: center;
 | ||
|   justify-content: center;
 | ||
| }
 | ||
| 
 | ||
| .region-info-label {
 | ||
|   font-size: 24rpx;
 | ||
|   color: #999;
 | ||
|   margin-bottom: 10rpx;
 | ||
| }
 | ||
| 
 | ||
| .region-info-value {
 | ||
|   font-size: 28rpx;
 | ||
|   color: #333;
 | ||
|   font-weight: 600;
 | ||
| }
 | ||
| 
 | ||
| .extra-info-card {
 | ||
|   background: #ffffff;
 | ||
|   box-shadow: 0rpx 6rpx 24rpx rgba(0, 0, 0, 0.06);
 | ||
|   border-radius: 24rpx;
 | ||
|   padding: 20rpx;
 | ||
|   margin-top: 20rpx;
 | ||
| }
 | ||
| 
 | ||
| .info-grid {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   text-align: center;
 | ||
|   justify-content: space-around;
 | ||
| }
 | ||
| 
 | ||
| .info-grid.multiple-items {
 | ||
|   justify-content: space-between;
 | ||
| }
 | ||
| 
 | ||
| .info-item {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   gap: 10rpx;
 | ||
|   align-items: center;
 | ||
|   justify-content: center;
 | ||
|   flex: 1;
 | ||
|   position: relative;
 | ||
| }
 | ||
| 
 | ||
| .info-grid.multiple-items .info-item:not(:last-child)::after {
 | ||
|   content: '';
 | ||
|   position: absolute;
 | ||
|   right: 0;
 | ||
|   top: 50%;
 | ||
|   transform: translateY(-50%);
 | ||
|   width: 2rpx;
 | ||
|   height: 60rpx;
 | ||
|   background-color: #f0f0f0;
 | ||
| }
 | ||
| 
 | ||
| .info-value {
 | ||
|   font-size: 36rpx;
 | ||
|   font-weight: 600;
 | ||
|   color: #333333;
 | ||
|   line-height: 1.3;
 | ||
| }
 | ||
| 
 | ||
| .info-label {
 | ||
|   font-size: 24rpx;
 | ||
|   color: #999999;
 | ||
| }
 | ||
| 
 | ||
| .market-stats-container {
 | ||
|   padding: 20rpx 0;
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   gap: 20rpx;
 | ||
| }
 | ||
| 
 | ||
| .stat-block {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   justify-content: space-between;
 | ||
|   padding: 20rpx 30rpx;
 | ||
|   border-radius: 16rpx;
 | ||
|   color: #fff;
 | ||
|   position: relative;
 | ||
|   transition: transform 0.2s ease;
 | ||
| }
 | ||
| 
 | ||
| .stat-block:active {
 | ||
|   transform: scale(0.98);
 | ||
|   filter: brightness(1.1);
 | ||
| }
 | ||
| 
 | ||
| .stat-block.primary {
 | ||
|   background: linear-gradient(135deg, #005bac, #007bff);
 | ||
|   box-shadow: 0 6rpx 12rpx rgba(0, 91, 172, 0.3);
 | ||
| }
 | ||
| 
 | ||
| .stat-block.secondary {
 | ||
|   background: linear-gradient(135deg, #4682b4, #87ceeb);
 | ||
|   box-shadow: 0 6rpx 12rpx rgba(70, 130, 180, 0.3);
 | ||
| }
 | ||
| 
 | ||
| .stat-content {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   gap: 20rpx;
 | ||
|   flex-grow: 1;
 | ||
|   justify-content: space-around;
 | ||
| }
 | ||
| 
 | ||
| .stat-item {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   align-items: center;
 | ||
|   text-align: center;
 | ||
|   flex: 1;
 | ||
| }
 | ||
| 
 | ||
| .stat-divider {
 | ||
|   width: 2rpx;
 | ||
|   height: 60rpx;
 | ||
|   background: linear-gradient(
 | ||
|     to bottom,
 | ||
|     rgba(255, 255, 255, 0.1),
 | ||
|     rgba(255, 255, 255, 0.5),
 | ||
|     rgba(255, 255, 255, 0.1)
 | ||
|   );
 | ||
| }
 | ||
| 
 | ||
| .stat-label {
 | ||
|   font-size: 24rpx;
 | ||
|   opacity: 0.9;
 | ||
| }
 | ||
| 
 | ||
| .stat-value {
 | ||
|   display: flex;
 | ||
|   align-items: baseline;
 | ||
|   line-height: 1;
 | ||
|   margin-top: 8rpx;
 | ||
|   word-break: break-all;
 | ||
| }
 | ||
| 
 | ||
| .stat-value__integer {
 | ||
|   font-size: 40rpx;
 | ||
|   font-weight: 600;
 | ||
| }
 | ||
| 
 | ||
| .stat-value__decimal {
 | ||
|   font-size: 28rpx;
 | ||
|   font-weight: 500;
 | ||
|   margin-left: 4rpx;
 | ||
| }
 | ||
| 
 | ||
| .stat-more-arrow {
 | ||
|   margin-left: 20rpx;
 | ||
|   flex-shrink: 0;
 | ||
|   width: 50rpx;
 | ||
|   height: 50rpx;
 | ||
|   border-radius: 50%;
 | ||
|   background-color: rgba(255, 255, 255, 0.15);
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
|   justify-content: center;
 | ||
|   box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.1);
 | ||
| }
 | ||
| 
 | ||
| @keyframes bling_shimmer {
 | ||
|   from {
 | ||
|     transform: translateX(-100%);
 | ||
|   }
 | ||
|   to {
 | ||
|     transform: translateX(100%);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| /* Tab相关样式 */
 | ||
| .tab-content {
 | ||
|   padding: 0;
 | ||
| }
 | ||
| 
 | ||
| .empty-state {
 | ||
|   padding: 60rpx 20rpx;
 | ||
|   text-align: center;
 | ||
| }
 | ||
| 
 | ||
| .empty-text {
 | ||
|   font-size: 28rpx;
 | ||
|   color: #999999;
 | ||
| }
 | ||
| 
 | ||
| .region-select-action {
 | ||
|   padding: 30rpx 20rpx;
 | ||
| }
 | ||
| ::v-deep .u-tabs__wrapper__nav__item__text {
 | ||
|   font-size: 26rpx !important;
 | ||
| }
 | ||
| </style>
 |