454 lines
9.7 KiB
Vue
454 lines
9.7 KiB
Vue
|
<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>
|