文件

306 行
13 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>骑手详情</title>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/layui-v2.4.3/layui/css/layui.css"/>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/vue/element-ui.css?v=2.13.2">
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/vue/js/vue2.5.16.js"></script>
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/vue/element-ui.js?v=2.13.2"></script>
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/jquery/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/layui-v2.4.3/layui/layui.js"></script>
<style>
body { margin: 0; padding: 20px; background: #f5f7fa; }
.detail-section { margin-bottom: 20px; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,0.1); }
.detail-section-title { font-size: 16px; font-weight: bold; color: #303133; margin-bottom: 15px; padding-left: 10px; border-left: 4px solid #409EFF; }
.detail-item { display: flex; margin-bottom: 12px; }
.detail-label { width: 120px; color: #606266; font-weight: 500; }
.detail-value { flex: 1; color: #303133; }
.status-tag { padding: 2px 8px; border-radius: 4px; font-size: 12px; }
.status-active { background: #f0f9ff; color: #1890ff; }
.status-inactive { background: #fff2f0; color: #ff4d4f; }
.status-pending { background: #fffbe6; color: #faad14; }
.avatar-display { width: 100px; height: 100px; border-radius: 8px; object-fit: cover; }
.rating-display { color: #ff9900; }
</style>
</head>
<body>
<div id="RiderDetailApp" v-cloak>
<div v-loading="loading">
<!-- 基本信息 -->
<div class="detail-section">
<div class="detail-section-title">基本信息</div>
<el-row :gutter="20">
<el-col :span="16">
<div class="detail-item">
<div class="detail-label">骑手姓名:</div>
<div class="detail-value">{{ riderInfo.rider_name || '-' }}</div>
</div>
<div class="detail-item">
<div class="detail-label">手机号:</div>
<div class="detail-value">{{ riderInfo.rider_phone || '-' }}</div>
</div>
<div class="detail-item">
<div class="detail-label">身份证号:</div>
<div class="detail-value">{{ riderInfo.id_card || '-' }}</div>
</div>
<div class="detail-item">
<div class="detail-label">工作状态:</div>
<div class="detail-value">
<span :class="getWorkStatusClass(riderInfo.work_status)">
{{ getWorkStatusText(riderInfo.work_status) }}
</span>
</div>
</div>
<div class="detail-item">
<div class="detail-label">账户状态:</div>
<div class="detail-value">
<span :class="riderInfo.status == 1 ? 'status-tag status-active' : 'status-tag status-inactive'">
{{ riderInfo.status == 1 ? '启用' : '禁用' }}
</span>
</div>
</div>
</el-col>
<el-col :span="8" style="text-align: center;">
<img v-if="riderInfo.rider_avatar" :src="riderInfo.rider_avatar" class="avatar-display" alt="骑手头像">
<div v-else style="width: 100px; height: 100px; background: #f5f7fa; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #c0c4cc;">
<i class="el-icon-user" style="font-size: 40px;"></i>
</div>
</el-col>
</el-row>
</div>
<!-- 财务信息 -->
<div class="detail-section">
<div class="detail-section-title">财务信息</div>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">账户余额:</div>
<div class="detail-value">¥{{ riderInfo.balance }}</div>
</div>
<div class="detail-item">
<div class="detail-label">冻结金额:</div>
<div class="detail-value">¥{{ riderInfo.frozen_balance }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">评分:</div>
<div class="detail-value rating-display">
<el-rate v-model="riderInfo.rating" disabled show-score text-color="#ff9900" score-template="{value}分"></el-rate>
</div>
</div>
<div class="detail-item">
<div class="detail-label">准时率:</div>
<div class="detail-value">{{ riderInfo.on_time_rate }}%</div>
</div>
</el-col>
</el-row>
</div>
<!-- 紧急联系人 -->
<div class="detail-section">
<div class="detail-section-title">紧急联系人</div>
<el-row :gutter="20">
<el-col :span="8">
<div class="detail-item">
<div class="detail-label">联系人姓名:</div>
<div class="detail-value">{{ riderInfo.emergency_name || '-' }}</div>
</div>
</el-col>
<el-col :span="8">
<div class="detail-item">
<div class="detail-label">联系人电话:</div>
<div class="detail-value">{{ riderInfo.emergency_phone || '-' }}</div>
</div>
</el-col>
<el-col :span="8">
<div class="detail-item">
<div class="detail-label">关系:</div>
<div class="detail-value">{{ riderInfo.emergency_relation || '-' }}</div>
</div>
</el-col>
</el-row>
</div>
<!-- 认证信息 -->
<div class="detail-section">
<div class="detail-section-title">认证信息</div>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">认证状态:</div>
<div class="detail-value">
<span :class="getAuthStatusClass(riderInfo.auth_status)">
{{ getAuthStatusText(riderInfo.auth_status) }}
</span>
</div>
</div>
<div class="detail-item">
<div class="detail-label">健康证状态:</div>
<div class="detail-value">
<span :class="getHealthStatusClass(riderInfo.health_status)">
{{ getHealthStatusText(riderInfo.health_status) }}
</span>
</div>
</div>
<div class="detail-item">
<div class="detail-label">健康证过期时间:</div>
<div class="detail-value">{{ riderInfo.health_cert_expire || '-' }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">认证备注:</div>
<div class="detail-value">{{ riderInfo.auth_remark || '-' }}</div>
</div>
<div class="detail-item">
<div class="detail-label">健康证备注:</div>
<div class="detail-value">{{ riderInfo.health_remark || '-' }}</div>
</div>
</el-col>
</el-row>
</div>
<!-- 位置信息 -->
<div class="detail-section">
<div class="detail-section-title">位置信息</div>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">最后位置纬度:</div>
<div class="detail-value">{{ riderInfo.last_location_lat || '-' }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">最后位置经度:</div>
<div class="detail-value">{{ riderInfo.last_location_lng || '-' }}</div>
</div>
</el-col>
</el-row>
</div>
<!-- 时间信息 -->
<div class="detail-section">
<div class="detail-section-title">时间信息</div>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">注册时间:</div>
<div class="detail-value">{{ riderInfo.create_time || '-' }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<div class="detail-label">最后更新:</div>
<div class="detail-value">{{ riderInfo.update_time || '-' }}</div>
</div>
</el-col>
</el-row>
</div>
</div>
</div>
<script>
new Vue({
el: '#RiderDetailApp',
data() {
return {
loading: false,
riderInfo: {}
}
},
mounted() {
// 获取URL参数中的骑手ID
const urlParams = new URLSearchParams(window.location.search);
const riderId = urlParams.get('id');
if (riderId) {
this.loadRiderDetail(riderId);
}
},
methods: {
async loadRiderDetail(id) {
this.loading = true;
try {
const response = await $.ajax({
url: '/Retail/Rider/getRiderInfo',
type: 'POST',
data: { id: id },
dataType: 'json'
});
if (response.code === 1) {
this.riderInfo = { ...response.data, rating: +response.data.rating || 0 };
} else {
this.$message.error(response.message || '获取骑手详情失败');
}
} catch (error) {
this.$message.error('网络错误,请重试');
console.error('获取骑手详情异常:', error);
} finally {
this.loading = false;
}
},
getWorkStatusText(status) {
const statusMap = {
0: '休息中',
1: '工作中',
2: '暂停接单'
};
return statusMap[+status] || '未知';
},
getWorkStatusClass(status) {
const classMap = {
0: 'status-tag status-inactive',
1: 'status-tag status-active',
2: 'status-tag status-pending'
};
return classMap[+status] || 'status-tag';
},
getAuthStatusText(status) {
const statusMap = {
0: '未认证',
1: '待审核',
2: '已认证',
3: '认证失败'
};
return statusMap[+status] || '未知';
},
getAuthStatusClass(status) {
const classMap = {
0: 'status-tag status-inactive',
1: 'status-tag status-pending',
2: 'status-tag status-active',
3: 'status-tag status-inactive'
};
return classMap[+status] || 'status-tag';
},
getHealthStatusText(status) {
const statusMap = {
0: '未上传',
1: '已上传',
2: '已过期'
};
return statusMap[+status] || '未知';
},
getHealthStatusClass(status) {
const classMap = {
0: 'status-tag status-pending',
1: 'status-tag status-active',
2: 'status-tag status-inactive'
};
return classMap[+status] || 'status-tag';
}
}
});
</script>
</body>
</html>