feat(resettle2): 架构2功能实现

This commit is contained in:
woody 2025-09-28 11:33:52 +08:00
parent e0f56bfa1e
commit 84d7c728c6
5 changed files with 137 additions and 95 deletions

View File

@ -47,3 +47,6 @@ export const getRefundList = params =>
// 获取个人点位信息 // 获取个人点位信息
export const getPersonalPointInfo = () => export const getPersonalPointInfo = () =>
http.get('/member/api/member/member-point') http.get('/member/api/member/member-point')
export const getMemberBoxCount = () =>
http.get('/retail-member/api/retail-member/member-box')

View File

@ -20,7 +20,7 @@ module.exports = vm => {
//#ifdef DEV_SERVER //#ifdef DEV_SERVER
console.log('DEV_SERVER') console.log('DEV_SERVER')
config.baseURL = 'https://t-zk.beida666.com/prod-api' config.baseURL = 'http://192.168.2.86:8080'
//#endif //#endif
//#ifdef QA_SERVER //#ifdef QA_SERVER

View File

@ -659,18 +659,22 @@ export default {
} }
} }
/* 点位展示区域 */ /* 点位展示区域 - 紧凑布局 */
.points-container { .points-container {
.layer-wrapper { .layer-wrapper {
margin-bottom: 30rpx; margin-bottom: 16rpx;
.layer-title { .layer-title {
font-size: 28rpx; font-size: 24rpx;
font-weight: bold; font-weight: bold;
color: #333; color: #005bac;
margin-bottom: 20rpx; margin-bottom: 12rpx;
padding-left: 20rpx; padding-left: 12rpx;
position: relative; position: relative;
background: #f8fafe;
padding: 8rpx 12rpx;
border-radius: 8rpx;
display: inline-block;
&::before { &::before {
content: ''; content: '';
@ -678,42 +682,42 @@ export default {
left: 0; left: 0;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
width: 8rpx; width: 4rpx;
height: 28rpx; height: 20rpx;
background: #005bac; background: #005bac;
border-radius: 4rpx; border-radius: 2rpx;
} }
} }
.points-row { .points-row {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 16rpx; gap: 8rpx;
&.multi-row { &.multi-row {
.point-slot { .point-slot {
width: calc((100% - 48rpx) / 4); width: calc((100% - 24rpx) / 4);
} }
} }
.point-slot { .point-slot {
flex: 1; flex: 1;
min-height: 120rpx; min-height: 70rpx;
border-radius: 16rpx; border-radius: 12rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative; position: relative;
transition: all 0.3s ease; transition: all 0.2s ease;
&.small { &.small {
min-height: 100rpx; min-height: 60rpx;
} }
&.occupied { &.occupied {
background: linear-gradient(135deg, #005bac 0%, #0066cc 100%); background: linear-gradient(135deg, #005bac 0%, #0066cc 100%);
color: #fff; color: #fff;
box-shadow: 0 4rpx 12rpx rgba(0, 91, 172, 0.3); box-shadow: 0 2rpx 8rpx rgba(0, 91, 172, 0.25);
&:active { &:active {
transform: scale(0.95); transform: scale(0.95);
@ -721,12 +725,12 @@ export default {
} }
&.empty { &.empty {
background: #f5f6f8; background: #fafbfc;
border: 2rpx dashed #ccc; border: 1rpx dashed #d9d9d9;
color: #999; color: #999;
&:active { &:active {
background: #e8e9eb; background: #f0f0f0;
} }
} }
@ -736,7 +740,7 @@ export default {
align-items: center; align-items: center;
.point-label { .point-label {
font-size: 24rpx; font-size: 20rpx;
font-weight: bold; font-weight: bold;
} }
} }

View File

@ -38,7 +38,7 @@
</view> </view>
<view class="stage-info"> <view class="stage-info">
<text class="stage">{{ item.stageLabel }}</text> <text class="stage">{{ item.stageLabel }}</text>
<text class="date">{{ formatDate(item.stageDate) }}</text> <!-- <text class="date">{{ formatDate(item.stageDate) }}</text> -->
</view> </view>
</view> </view>
@ -589,7 +589,7 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: flex-start; align-items: flex-start;
margin-bottom: 30rpx; margin-bottom: 10rpx;
padding-bottom: 20rpx; padding-bottom: 20rpx;
border-bottom: 2rpx solid #f5f6f8; border-bottom: 2rpx solid #f5f6f8;
@ -661,18 +661,22 @@ export default {
} }
} }
/* 点位展示区域 */ /* 点位展示区域 - 紧凑布局 */
.points-container { .points-container {
.layer-wrapper { .layer-wrapper {
margin-bottom: 30rpx; margin-bottom: 16rpx;
.layer-title { .layer-title {
font-size: 28rpx; font-size: 24rpx;
font-weight: bold; font-weight: bold;
color: #333; color: #005bac;
margin-bottom: 20rpx; margin-bottom: 12rpx;
padding-left: 20rpx; padding-left: 12rpx;
position: relative; position: relative;
background: #f8fafe;
padding: 8rpx 12rpx;
border-radius: 8rpx;
display: inline-block;
&::before { &::before {
content: ''; content: '';
@ -680,42 +684,42 @@ export default {
left: 0; left: 0;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
width: 8rpx; width: 4rpx;
height: 28rpx; height: 20rpx;
background: #005bac; background: #005bac;
border-radius: 4rpx; border-radius: 2rpx;
} }
} }
.points-row { .points-row {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 16rpx; gap: 8rpx;
&.multi-row { &.multi-row {
.point-slot { .point-slot {
width: calc((100% - 48rpx) / 4); width: calc((100% - 24rpx) / 4);
} }
} }
.point-slot { .point-slot {
flex: 1; flex: 1;
min-height: 120rpx; min-height: 70rpx;
border-radius: 16rpx; border-radius: 12rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative; position: relative;
transition: all 0.3s ease; transition: all 0.2s ease;
&.small { &.small {
min-height: 100rpx; min-height: 60rpx;
} }
&.occupied { &.occupied {
background: linear-gradient(135deg, #005bac 0%, #0066cc 100%); background: linear-gradient(135deg, #005bac 0%, #0066cc 100%);
color: #fff; color: #fff;
box-shadow: 0 4rpx 12rpx rgba(0, 91, 172, 0.3); box-shadow: 0 2rpx 8rpx rgba(0, 91, 172, 0.25);
&:active { &:active {
transform: scale(0.95); transform: scale(0.95);
@ -723,12 +727,12 @@ export default {
} }
&.empty { &.empty {
background: #f5f6f8; background: #fafbfc;
border: 2rpx dashed #ccc; border: 1rpx dashed #d9d9d9;
color: #999; color: #999;
&:active { &:active {
background: #e8e9eb; background: #f0f0f0;
} }
} }
@ -738,7 +742,7 @@ export default {
align-items: center; align-items: center;
.point-label { .point-label {
font-size: 24rpx; font-size: 20rpx;
font-weight: bold; font-weight: bold;
} }
} }

View File

@ -47,6 +47,68 @@
</view> </view>
</view> </view>
<!-- 会员点位信息展示区域 -->
<view class="member-point-info">
<view class="point-info-grid">
<view class="point-info-item">
<view class="point-info-value">{{
personalPointInfo.pointCount || 0
}}</view>
<view class="point-info-label">子点位总数</view>
</view>
<view class="point-info-divider"></view>
<view class="point-info-item">
<view class="point-info-value">{{
personalPointInfo.waitPointCount || 0
}}</view>
<view class="point-info-label">待激活点位</view>
</view>
<view class="point-info-divider"></view>
<view class="point-info-item">
<view class="point-info-value">{{
personalPointInfo.repPvBalance || 0
}}</view>
<view class="point-info-label">复购业绩余额</view>
</view>
</view>
</view>
<view class="my_order">
<view class="my_title">
<text class="thetitle">{{ '市场动态' }}</text>
</view>
<view class="market-stats-container">
<view
class="stat-block primary"
@click="goTo('/pages/mine/marketDynamic/achievement-list')"
>
<view class="stat-content">
<view class="stat-item">
<text class="stat-label">总业绩</text>
<view class="stat-value">
<text class="stat-value__integer">{{
formattedTotalSumPv.integer
}}</text>
<text class="stat-value__decimal">{{
formattedTotalSumPv.decimal
}}</text>
</view>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-label">小区业绩</text>
<view class="stat-value">
<text class="stat-value__integer">{{
formattedSmallAreaPv.integer
}}</text>
<text class="stat-value__decimal">{{
formattedSmallAreaPv.decimal
}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="my_order"> <view class="my_order">
<view class="my_title"> <view class="my_title">
<text class="thetitle">{{ '我的订单' }}</text> <text class="thetitle">{{ '我的订单' }}</text>
@ -87,33 +149,6 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 会员点位信息展示区域 -->
<view class="member-point-info">
<view class="point-info-grid">
<view class="point-info-item">
<view class="point-info-label">子点位总数</view>
<view class="point-info-value">{{
personalPointInfo.pointCount || 0
}}</view>
</view>
<view class="point-info-divider"></view>
<view class="point-info-item">
<view class="point-info-label">待激活点位</view>
<view class="point-info-value">{{
personalPointInfo.waitPointCount || 0
}}</view>
</view>
<view class="point-info-divider"></view>
<view class="point-info-item">
<view class="point-info-label">复购业绩余额</view>
<view class="point-info-value">{{
personalPointInfo.repPvBalance || 0
}}</view>
</view>
</view>
</view>
<view class="my_order"> <view class="my_order">
<view class="order_flex"> <view class="order_flex">
<template v-for="(item, index) in otherMenuList"> <template v-for="(item, index) in otherMenuList">
@ -174,7 +209,11 @@ import * as min from '@/config/balance.js'
import * as api from '@/config/login.js' import * as api from '@/config/login.js'
import { MEMBER_SIGN } from '@/util/common.js' import { MEMBER_SIGN } from '@/util/common.js'
import RegionSelect from '@/components/region-select/index.vue' import RegionSelect from '@/components/region-select/index.vue'
import { getRegionSelect, getPersonalPointInfo } from '@/config/mine.js' import {
getRegionSelect,
getPersonalPointInfo,
getMemberBoxCount,
} from '@/config/mine.js'
// import talentList from "@/components/talentList.vue"; // import talentList from "@/components/talentList.vue";
export default { export default {
components: { components: {
@ -280,10 +319,12 @@ export default {
this.getInfo().then(isNormal => { this.getInfo().then(isNormal => {
this.orderNum() this.orderNum()
this.getPersonalPointInfo() this.getPersonalPointInfo()
this.getMemberMarket()
this.isNormal = isNormal
if (!isNormal) { if (!isNormal) {
return return
} }
this.isNormal = isNormal
// this.getUserAwardss() // this.getUserAwardss()
}) })
}, },
@ -327,12 +368,6 @@ export default {
rawPercentage: clampedPercentage, rawPercentage: clampedPercentage,
} }
}, },
marketWrapperVisible() {
return this.userInfo.memberSign !== MEMBER_SIGN.ZERO_LEVEL
},
regionInfoVisible() {
return this.regionInfo?.regionStatus === 0
},
formattedTotalSumPv() { formattedTotalSumPv() {
const value = String(this.totalSumPv || '0.00') const value = String(this.totalSumPv || '0.00')
const parts = value.split('.') const parts = value.split('.')
@ -349,25 +384,21 @@ export default {
decimal: parts.length > 1 ? `.${parts[1]}` : '', 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]}` : '',
}
},
}, },
methods: { methods: {
getMemberMarket() {
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
}
})
},
getPersonalPointInfo() { getPersonalPointInfo() {
getPersonalPointInfo().then(res => { getPersonalPointInfo().then(res => {
if (res.code == 200) { if (res.code == 200) {
@ -1261,7 +1292,7 @@ export default {
font-size: 24rpx; font-size: 24rpx;
color: #666666; color: #666666;
font-weight: 500; font-weight: 500;
margin-bottom: 8rpx; margin-top: 8rpx;
} }
.point-info-divider { .point-info-divider {