Files
2025-08-18 09:57:10 +08:00

454 lines
9.7 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<!-- Header -->
<view class="header">
<image :src="user.errandAvatarUrl || '../../static/logo.png'" class="user-icon" @click="changeUserMessage"></image>
<view class="user-info">
<text class="name">{{ user.errandName||'未登录' }}</text>
<text class="rating">快送员星级 </text>
</view>
<view class="settings">
<text class="rule">快送员评分规则</text>
<uni-icons type="right" size="16" class="settings-icon"></uni-icons>
</view>
</view>
<!-- Summary -->
<view class="summary">
<view class="summary-item">
<text class="summary-value">{{allMoney}}</text>
<text class="summary-label">总收入</text>
<text class="summary-detail">总金额></text>
</view>
<view class="summary-item" @click="navigateToOrder">
<text class="summary-value">{{OrderNumber}}</text>
<text class="summary-label">今日完成</text>
<text class="summary-detail">完成订单数></text>
</view>
<view class="summary-item" @click="purse">
<text class="summary-value">{{OrderMoney}}</text>
<text class="summary-label">已结算</text>
<text class="summary-detail">用户已确认></text>
</view>
<view class="summary-item">
<text class="summary-value">{{waitMoney}}</text>
<text class="summary-label">待结算</text>
<text class="summary-detail">等待用户确认></text>
</view>
</view>
<!-- Menu -->
<view class="menu">
<view class="menu-item" @click="navigateToOrder">
<text>我的订单</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
<view>
<!-- 原来的菜单项改为触发弹窗 -->
<view class="menu-item" @click="purse">
<text>我的钱包</text>
<uni-icons type="right" size="25" class="arrow-icon"></uni-icons>
</view>
<!-- 自定义弹窗 -->
<uni-popup ref="popupRef" type="center" background-color="#fff">
<view class="popup-content">
<text class="popup-text" style="">敬请期待</text>
</view>
</uni-popup>
</view>
<view class="menu-item" @click="navigateToAuthentication">
<text>身份认证</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
<view class="menu-item" @click="navigateToAppeal">
<text>申诉中心</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
<view class="menu-item" @click="navigateToServiceEvaluation">
<text>服务评价</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
<view class="menu-item" @click="signOut">
<text>注销账户</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
<view class="menu-item" @click="login">
<text>{{loginState.loginName}}</text>
<uni-icons type="right" size="16" class="arrow-icon"></uni-icons>
</view>
</view>
</view>
</template>
<script setup>
import {
apiImageUrl
} from '../../API/api';
import {
onMounted,
ref
} from 'vue';
import {
onShow,
onLoad
} from "@dcloudio/uni-app";
const userInfo=uni.getStorageSync("userInfo")
const login = () => {
uni.request({
url:apiImageUrl+'/api/user/logout',
method:'POST',
success(res) {
console.log(res);
uni.removeStorageSync('userInfo');
uni.removeStorageSync('currentUser');
uni.reLaunch({
url: '/pages/login/login'
});
},
fail(err) {
console.log(err);
}
})
};
const signOut=()=>{
uni.showModal({
title: '是否注销账号',
content: '注销账号后将无法再次登录',
showCancel: true,
success: function (res) {
if (res.confirm) { //confirm为ture代表用户点击确定
console.log('点击了确定按钮');
uni.request({
url:apiImageUrl+'/api/errand/delete',
method:'POST',
success(res) {
console.log(res);
uni.reLaunch({
url: '/pages/login/login'
});
},
fail(err) {
console.log(err);
}
})
} else if (res.cancel) { //cancel为ture代表用户点击取消
console.log('点击了取消按钮');
}
}
})
}
const changeUserMessage=()=>{
uni.navigateTo({
url:'/pages/changeUserMessage/changeUserMessage'
})
}
const navigateToOrder = () => {
uni.navigateTo({
url: '/pages/order/order'
});
};
// 弹窗引用
const popupRef = ref('敬请期待')
const purse = () => {
popupRef.value.open()
// 1 秒后自动关闭
setTimeout(() => {
popupRef.value.close()
}, 1000)
};
const navigateToAuthentication = () => {
uni.navigateTo({
url: '/pages/authentication/authentication'
});
};
const navigateToAppeal = () => {
uni.navigateTo({
url: '/pages/appeal/appeal'
});
};
const navigateToServiceEvaluation = () => {
uni.navigateTo({
url: '/pages/serviceEvaluation/serviceEvaluation'
});
};
// 用户信息响应式引用
const user = ref({ username: '未登录' });
const loginState=ref({loginName:'去登录'})
// 获取当前用户信息
const getCurrentUser = () => {
uni.request({
url: apiImageUrl + '/api/errand/get/current',
method: 'POST',
header: {
'cookie': uni.getStorageSync("cookie")
},
success(res) {
console.log(res);
if (res.data.code === 0) { // 检查HTTP状态码和业务状态码
uni.setStorageSync("currentUser",res.data.data)
user.value = res.data.data; // 假设返回的数据结构包含用户信息
loginState.value={loginName:'退出登录'}
} else {
user.value = { username: '未登录' }; // 设置为未登录状态
}
},
fail(err) {
console.error('请求失败:', err);
user.value = { username: '未登录' }; // 请求失败时也设置为未登录状态
}
});
};
onShow(() => {
getCurrentUser(),
getOrderNumber(),
getOrderMoney()
getwaitMoney()
getallMoney()
})
const OrderNumber = ref(0);
const getOrderNumber=()=>{
uni.request({
url:apiImageUrl+'/api/errandIncome/count/number',
method:'POST',
success(res) {
console.log(res.data.data);
OrderNumber.value=res.data.data
},
fail(err) {
console.log(err);
}
})
}
const OrderMoney=ref(0)
const getOrderMoney=()=>{
uni.request({
url:apiImageUrl+'/api/errandIncome/count/money',
method:'POST',
success(res) {
console.log(res);
OrderMoney.value=res.data.data
},
fail(err) {
console.log(err);
}
})
}
const waitMoney=ref(0)
const getwaitMoney=()=>{
uni.request({
url:apiImageUrl+'/api/errandIncome/count/money/no',
method:'POST',
success(res) {
console.log(res);
waitMoney.value=res.data.data
},
fail(err) {
console.log(err);
}
})
}
const allMoney=ref(0)
const getallMoney=()=>{
uni.request({
url:apiImageUrl+'/api/errandIncome/count/money/no',
method:'POST',
success(res) {
console.log(res);
allMoney.value=res.data.data
},
fail(err) {
console.log(err);
}
})
}
</script>
<style scoped lang="scss">
.container {
background-image: linear-gradient(to bottom, #5e7dec, #d0f0ff);
padding: 20px;
height: 100vh;
}
.header {
display: flex;
align-items: center;
padding: 10px;
background-color: #ffffff;
border-radius: 15px;
}
.user-icon {
width: 60px;
height: 60px;
border-radius: 50%;
margin-right: 10px;
}
.user-info {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.name {
font-size: 16px;
font-weight: bold;
}
.rule {
font-size: 12px;
color: #999;
}
.rating {
color: #ff9800;
margin-top: 5px;
}
.settings {
margin-left: auto;
}
.settings-icon {
width: 24px;
height: 24px;
}
.summary {
display: flex;
justify-content: space-around;
margin-top: 20px;
background-color: #1970fd;
padding: 10px;
border-radius: 15px;
}
.summary-item {
text-align: center;
color: #ffffff;
display: flex;
flex-direction: column;
align-items: center;
}
.summary-label {
padding: 5px;
font-size: 14px;
}
.summary-detail {
font-size: 12px;
color: #92b1e9;
padding: 5px;
}
.summary-value {
font-size: 20px;
font-weight: bold;
padding: 5px;
}
.menu {
background-color: #ffffff;
border-radius: 8px;
margin-top: 20px;
padding: 0 15px;
.menu-item {
display: flex;
align-items: center;
justify-content: space-between; /* 关键属性 */
height: 50px;
border-bottom: 1px solid #f5f5f5;
&:last-child {
border-bottom: none;
}
text {
font-size: 15px;
color: #333;
flex-shrink: 0; /* 防止文字被压缩 */
}
.arrow-icon {
color: #999;
margin-left: 20px; /* 增加图标与文字的间距 */
}
}
}
.popup-content {
background-color: #ffffff;
padding: 30px 40px;
border-radius: 16px;
min-width: 240px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
text-align: center;
animation: fadeIn 0.3s ease;
border: 2px solid #5e7dec; /* 主色调蓝边框 */
}
.popup-text {
font-size: 24px;
color: #2a3f88; /* 深蓝文字 */
font-weight: bold;
letter-spacing: 1px;
}
/* 弹出动画 */
@keyframes fadeIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
</style>
<script>
export default {
data() {
return {
items: [{
label: '我的订单'
},
{
label: '收入查询'
},
{
label: '我的钱包'
},
{
label: '身份认证'
},
{
label: '申诉中心'
},
{
label: '服务评价'
}
]
};
}
};
</script>