mrr.sj.front/pages/wallet/wallet.vue

551 lines
14 KiB
Vue
Raw Normal View History

2026-03-24 11:45:13 +08:00
<template>
<view class="wallet-page">
<!-- 顶部导航栏 -->
<custom-navbar title="我的钱包" :showBack="true" titleColor="#fff" backgroundColor="transparent" borderBottom="none"
leftImg="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/d37f08d8-4399-4a5b-ba17-e7675c905b4b"></custom-navbar>
<view class="wallet-content">
<view class="wallet-content-title">
<view class="wallet-content-title-text1">总金额 <text>()</text></view>
<view class="wallet-content-title-text2">
<image src="/static/images/wallet/wallet.png" class="wallet-content-title-icon"></image>
总金额=可提现金额+提现中金额
</view>
</view>
<view class="wallet-content-price">
{{ userInfo.money ? formatBalance(userInfo.money) : "0.00" }}
</view>
<view class="wallet-content-cash">
<view class="wallet-content-cash-left" style="width: 50%;">
<view class="wallet-content-cash-title">可提现<text>()</text></view>
<view class="wallet-content-cash-left-text">{{
userInfo.usable_money
? formatBalance(userInfo.usable_money)
: "0.00"
}}</view>
</view>
<view class="wallet-content-cash-right">
<view class="wallet-content-cash-title">
提现中<text>()</text>
<image src="/static/images/wallet/tip.png" class="wallet-content-cash-title-icon"
@click="openTip"></image>
</view>
<view class="wallet-content-cash-right-text">
{{
userInfo.other_money
? formatBalance(userInfo.other_money)
: "0.00"
}}
</view>
</view>
</view>
<view class="wallet-content-btn" @click="goCash">去提现</view>
</view>
<view class="wallet-detail">
<scroll-view scroll-x class="wallet-detail-tabs" :show-scrollbar="false">
<view :class="[`wallet-detail-line`,`walletDetailTab`,{tabActive: tabsIndex == 0}]" @click="changeTab(0)">余额变动
</view>
<view :class="[`walletDetailTab`,{tabActive: tabsIndex == 1}] " @click="changeTab(1)">提现记录
</view>
</scroll-view>
<view class="wallet-detail-content">
<CommonList ref="groupRef" :apiUrl="tabsList[tabsIndex].url"
:listScrollHeight="`calc(100vh - ${statusBarHeight * 2 + 820}rpx)`">
<template #listData="{ list }">
<view class="lists">
<view v-if="tabsIndex == 0" class="lists-item" :style="{
'border-bottom': list[index + 1] && '1rpx solid #F5F5F5',
paddingBottom: '20rpx',
}" v-for="(item, index) in list" :key="index">
<view class="lists-item-title">{{ getDescriptionByNumber(item.type) }}</view>
<view class="lists-item-content">
<view class="lists-item-text1">{{ item.order_num }}</view>
<view class="lists-item-text2">{{ item.inorde == 1 ? "+" : "-" }}{{ item.money }}
</view>
</view>
<view class="lists-item-content">
<view class="lists-item-text1">{{ item.add_time }}</view>
<view class="lists-item-text1">余额{{ formatPriceNumber(item.after_money) }}</view>
</view>
</view>
<view v-if="tabsIndex == 1" class="lists-item" :style="{
'border-bottom': list[index + 1] && '1rpx solid #F5F5F5',
paddingBottom: '20rpx',
}" v-for="(item, index) in list" :key="index" @click="openCahPop(item)">
<view class="lists-item-title"> {{ item.cash_outbizno }} </view>
<view class="lists-item-content">
<view class="lists-item-text1">提现状态</view>
<view class="lists-item-text3">{{
getTabName(item.cash_state)
}}</view>
</view>
<view class="lists-item-content">
<view class="lists-item-text1">{{ item.cash_add_time }}</view>
<view class="lists-item-text1">金额{{ item.cash_money }}</view>
</view>
</view>
</view>
</template>
<!-- 空数据状态 -->
<template #empty>
<noData></noData>
</template>
</CommonList>
</view>
</view>
<!-- 提示弹窗 -->
<uni-popup mask-background-color="rgba(0,0,0,0.5)" ref="popup">
<view class="popup-content">
<view class="popup-content-title"> 温馨提示 </view>
<view class="popup-content-text">
提交申请后提现的金额将会在最多5个工作日内到账
</view>
<view class="popup-content-btn" @click="closeTip"> 好的 </view>
</view>
</uni-popup>
<!-- 记录弹窗 -->
<cashPop v-model="popShow" :cashObj="cashObj"></cashPop>
</view>
</template>
<script>
import cashPop from "./components/cashPop.vue";
import request from "@/utils/request";
import CommonList from "@/components/common/CommonList.vue";
export default {
components: {
CommonList,
cashPop,
},
data() {
return {
tabsList: [{
name: "余额变动",
id: 0,
url: "/user/balancechangelist",
},
{
name: "提现记录",
id: 1,
url: "/user/getcashrecord",
},
],
popShow: false, // 控制弹窗显示隐藏
cashObj: {},
tabsIndex: 0,
statusBarHeight: 0,
artisanType: getApp().globalData.artisanType,
userInfo: {},
listQuery: {},
};
},
async onLoad() {
const systemInfo = uni.getSystemInfoSync();
this.statusBarHeight = systemInfo.statusBarHeight;
if (this.artisanType) {
this.listQuery.user_type = this.artisanType;
this.listQuery.cash_type = this.artisanType;
await this.getUserInfo();
this.search();
}
},
computed: {},
methods: {
getDescriptionByNumber(num) {
// 创建数字与描述的映射关系
const descriptionMap = {
1: "提现",
2: "订单分账入账",
3: "余额消费",
4: "余额退款",
5: "工时订单分帐入帐",
6: "工位订单分帐入帐",
11:"自营订单分帐入帐",
};
// 检查输入是否为有效数字且在映射范围内
if (typeof num !== "number" || !descriptionMap.hasOwnProperty(num)) {
return "未知类型";
}
return descriptionMap[num];
},
goCash() {
uni.navigateTo({
url: "/pages/wallet/withdrawCash",
});
},
openCahPop(item) {
this.cashObj = item;
this.popShow = true;
},
openTip() {
this.$refs.popup.open("center");
},
closeTip() {
this.$refs.popup.close();
},
// 根据提现状态返回对应文字
getTabName(id) {
const stateMap = {
1: '审核中',
2: '审核中',
3: '已打款',
4: '已驳回',
5: '已驳回'
};
// 若传入非1-5的值返回空字符串或自定义提示根据业务需求调整
return stateMap[id] || '';
},
// 切换tab
changeTab(index) {
if (this.tabsIndex === index) return;
this.tabsIndex = index;
this.$nextTick(() => {
this.$refs.groupRef.clearList();
this.$refs.groupRef.manualRefresh(this.listQuery);
});
},
async getUserInfo() {
const type = this.artisanType == 1 ? 2 : this.artisanType == 2 ? 3 : "";
2026-03-25 13:29:04 +08:00
const result = await request.post("/sj/user/getuser", {
2026-03-24 11:45:13 +08:00
type
});
this.userInfo = result.data;
this.listQuery.user_id = this.userInfo.id;
this.listQuery.cash_user_id = this.userInfo.id;
},
search() {
// 触发列表刷新
this.$refs.groupRef.manualRefresh(this.listQuery);
},
// 格式化余额,添加千位分隔符
formatBalance(value) {
return value.toLocaleString("en-US", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
},
},
};
</script>
<style lang="less">
// page {
// background-color: #fff;
// }
.wallet-page {
background-image: url("https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/d43afda1-6e28-4649-98d6-e52806073151");
background-size: contain;
background-position: center top;
background-repeat: no-repeat;
height: 100vh;
width: 100%;
position: relative;
//
.wallet-content {
border-radius: 40rpx;
padding: 40rpx;
background-image: url("/static/images/wallet/bj2.png");
background-size: cover;
background-position: center top;
background-repeat: no-repeat;
margin: 60rpx 20rpx 0 20rpx;
.wallet-content-title {
display: flex;
align-items: center;
gap: 8rpx;
.wallet-content-title-text1 {
display: flex;
align-items: center;
gap: 8rpx;
font-weight: 400;
font-size: 28rpx;
color: #333333;
line-height: 40rpx;
text-align: left;
font-style: normal;
}
.wallet-content-title-text2 {
display: flex;
align-items: center;
background: rgba(235, 61, 51, 0.06);
border-radius: 18rpx;
padding: 6rpx 12rpx;
font-weight: 400;
font-size: 22rpx;
color: #925a57;
line-height: 28rpx;
text-align: left;
font-style: normal;
}
.wallet-content-title-icon {
width: 21rpx;
height: 23rpx;
margin-right: 6rpx;
}
}
.wallet-content-price {
font-family: DINPro, DINPro;
font-weight: 500;
font-size: 72rpx;
color: #333333;
line-height: 93rpx;
text-align: left;
font-style: normal;
}
.wallet-content-cash {
margin-top: 34rpx;
display: flex;
// justify-content: space-between;
.wallet-content-cash-left {
.wallet-content-cash-left-text {
font-family: DINPro, DINPro;
font-weight: 500;
font-size: 36rpx;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
line-height: 46rpx;
text-align: left;
font-style: normal;
}
}
.wallet-content-cash-right {
.wallet-content-cash-right-text {
font-family: DINPro, DINPro;
font-weight: 500;
font-size: 36rpx;
color: #333333;
line-height: 46rpx;
text-align: left;
font-style: normal;
}
}
.wallet-content-cash-title {
font-weight: 400;
font-size: 28rpx;
color: #666666;
line-height: 40rpx;
text-align: left;
font-style: normal;
display: flex;
align-items: center;
gap: 4rpx;
.wallet-content-cash-title-icon {
width: 24rpx;
height: 24rpx;
}
}
}
.wallet-content-btn {
margin: 0 auto;
margin-top: 69rpx;
width: 614rpx;
height: 88rpx;
2026-06-02 11:39:23 +08:00
background: linear-gradient(180deg, #ff8e9d 0%, #FF4767 100%);
2026-03-24 11:45:13 +08:00
border-radius: 44rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
line-height: 50rpx;
text-align: left;
font-style: normal;
display: flex;
align-items: center;
justify-content: center;
}
}
//记录列表样式
.wallet-detail {
margin: 20rpx 20rpx 0 20rpx;
width: 710rpx;
background: #ffffff;
border-radius: 36rpx;
.wallet-detail-tabs {
// display: flex;
// justify-content: space-between;
border-bottom: 2rpx solid #faf8f8;
position: relative;
.walletDetailTab {
display: inline-block;
position: relative;
margin-top: 30rpx;
margin-bottom: 33rpx;
width: 350rpx;
font-weight: 500;
font-size: 32rpx;
color: #333333;
line-height: 45rpx;
text-align: center;
font-style: normal;
}
.wallet-detail-line {
&::before {
content: "";
position: absolute;
right: 0;
top: 0;
width: 4rpx;
border-radius: 4rpx;
height: 100%;
background: #eaeaea;
}
}
.tabActive {
font-weight: 500;
2026-06-02 11:39:23 +08:00
color: #FF4767;
2026-03-24 11:45:13 +08:00
}
.walletDetailTab.tabActive::after {
content: "";
width: 56rpx;
height: 8rpx;
2026-06-02 11:39:23 +08:00
background: #FF4767;
2026-03-24 11:45:13 +08:00
border-radius: 5rpx;
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: -13rpx;
}
}
}
//提示弹窗样式
.popup-content {
margin: 0 84rpx;
width: 582rpx;
height: 526rpx;
background-image: url("/static/images/wallet/tipBj.png");
background-size: cover;
background-position: center top;
background-repeat: no-repeat;
.popup-content-title {
padding-top: 161rpx;
font-weight: 500;
font-size: 38rpx;
color: #333333;
line-height: 53rpx;
text-align: center;
font-style: normal;
}
.popup-content-text {
margin-top: 42rpx;
padding: 0 47rpx;
font-weight: 400;
font-size: 30rpx;
color: #333333;
line-height: 42rpx;
text-align: left;
font-style: normal;
}
.popup-content-btn {
margin: 50rpx 76rpx 0 76rpx;
display: flex;
align-items: center;
justify-content: center;
width: 430rpx;
height: 86rpx;
2026-06-02 11:39:23 +08:00
background: linear-gradient(181deg, #f52540 0%, #FF4767 100%);
2026-03-24 11:45:13 +08:00
border-radius: 43rpx;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
line-height: 50rpx;
text-align: left;
font-style: normal;
}
}
}
.lists {
display: flex;
flex-wrap: wrap;
gap: 50rpx;
.lists-item {
width: 100%;
.lists-item-title {
font-weight: 400;
font-size: 30rpx;
color: #333333;
line-height: 42rpx;
text-align: left;
font-style: normal;
}
.lists-item-text1 {
margin-top: 4rpx;
font-weight: 400;
font-size: 24rpx;
color: #999999;
line-height: 33rpx;
text-align: left;
font-style: normal;
}
.lists-item-text2 {
font-family: DINPro, DINPro;
font-weight: 500;
font-size: 30rpx;
color: #333333;
line-height: 38rpx;
text-align: left;
font-style: normal;
}
.lists-item-text3 {
font-weight: 500;
font-size: 26rpx;
color: #333333;
line-height: 37rpx;
text-align: left;
font-style: normal;
}
.lists-item-content {
display: flex;
justify-content: space-between;
align-items: center;
}
}
}
// .wallet-page::before {
// content: "";
// position: fixed;
// top: 0;
// left: 0;
// right: 0;
// height: 600rpx !important;
// background-image: url("/static/images/wallet/bj.png");
// background-size: contain;
// background-position: center top;
// background-repeat: no-repeat;
// z-index: 1;
// }
</style>