最近动态

This commit is contained in:
2025-12-26 18:18:15 +08:00
parent d8785fe915
commit 32b7ae9ded

View File

@@ -21,6 +21,103 @@ const quickActions = [
{ icon: 'i-carbon-settings', label: '设置', path: '/pagesBank/me/index' },
]
// 最近动态数据
interface RecentActivity {
id: number
type: 'audit' | 'visit' | 'customer' | 'withdraw'
title: string
description: string
time: string
status?: 'pending' | 'approved' | 'rejected' | 'completed'
}
const recentActivities = ref<RecentActivity[]>([
{
id: 1,
type: 'audit',
title: '贷款审核',
description: '商户"张三便利店"提交的贷款申请待审核',
time: '10分钟前',
status: 'pending',
},
{
id: 2,
type: 'visit',
title: '拜访计划',
description: '已安排拜访"李四超市"了解经营情况',
time: '30分钟前',
status: 'completed',
},
{
id: 3,
type: 'audit',
title: '提现审核',
description: '商户"王五五金店"提现申请已通过',
time: '1小时前',
status: 'approved',
},
{
id: 4,
type: 'customer',
title: '客户入驻',
description: '新商户"赵六服装店"提交入驻申请',
time: '2小时前',
status: 'pending',
},
{
id: 5,
type: 'audit',
title: '贷款审核',
description: '商户"孙七水果店"的贷款申请已拒绝',
time: '3小时前',
status: 'rejected',
},
])
// 获取动态类型对应的图标
function getActivityIcon(type: string) {
const iconMap: Record<string, string> = {
audit: 'i-carbon-task-approved',
visit: 'i-carbon-calendar',
customer: 'i-carbon-group',
withdraw: 'i-carbon-wallet',
}
return iconMap[type] || 'i-carbon-information'
}
// 获取动态类型对应的颜色
function getActivityColor(type: string) {
const colorMap: Record<string, string> = {
audit: '#ff8f0d',
visit: '#00c05a',
customer: '#3b82f6',
withdraw: '#8b5cf6',
}
return colorMap[type] || '#666'
}
// 获取状态对应的文本
function getStatusText(status?: string) {
const statusMap: Record<string, string> = {
pending: '待审核',
approved: '已通过',
rejected: '已拒绝',
completed: '已完成',
}
return status ? statusMap[status] : ''
}
// 获取状态对应的颜色
function getStatusColor(status?: string) {
const colorMap: Record<string, string> = {
pending: '#ff8f0d',
approved: '#00c05a',
rejected: '#ef4444',
completed: '#3b82f6',
}
return status ? colorMap[status] : ''
}
function handleAction(path: string) {
if (!path) {
uni.showToast({ title: '功能开发中', icon: 'none' })
@@ -29,6 +126,20 @@ function handleAction(path: string) {
uni.navigateTo({ url: path })
}
function handleActivityClick(activity: RecentActivity) {
// 根据动态类型跳转到对应页面
const pathMap: Record<string, string> = {
audit: '/pagesBank/audit/list',
visit: '/pagesBank/visit/list',
customer: '/pagesBank/customer/list',
withdraw: '/pagesBank/audit/list',
}
const path = pathMap[activity.type]
if (path) {
uni.navigateTo({ url: path })
}
}
onMounted(() => {
bankStore.fetchStats()
})
@@ -116,15 +227,37 @@ onMounted(() => {
</view>
</view>
<!-- 最近动态 (Placeholder) -->
<!-- 最近动态 -->
<view class="section">
<view class="section-header">
<text class="section-title">最近动态</text>
<text class="more">更多 ></text>
<text class="more" @click="handleAction('/pagesBank/audit/list')">更多 ></text>
</view>
<view class="empty-dynamic">
<text class="i-carbon-reminder-attendance"></text>
<text>暂无新的审核动态</text>
<view class="activity-list">
<view
v-for="activity in recentActivities"
:key="activity.id"
class="activity-item"
@click="handleActivityClick(activity)"
>
<view class="activity-icon" :style="{ background: `${getActivityColor(activity.type)}15` }">
<text :class="getActivityIcon(activity.type)" :style="{ color: getActivityColor(activity.type) }"></text>
</view>
<view class="activity-content">
<view class="activity-header">
<text class="activity-title">{{ activity.title }}</text>
<text
v-if="activity.status"
class="activity-status"
:style="{ color: getStatusColor(activity.status) }"
>
{{ getStatusText(activity.status) }}
</text>
</view>
<text class="activity-description">{{ activity.description }}</text>
<text class="activity-time">{{ activity.time }}</text>
</view>
</view>
</view>
</view>
</view>
@@ -334,21 +467,74 @@ onMounted(() => {
}
}
.empty-dynamic {
.activity-list {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40rpx 0;
color: #adb5bd;
gap: 16rpx;
gap: 24rpx;
text:first-child {
font-size: 64rpx;
}
text:last-child {
font-size: 26rpx;
.activity-item {
display: flex;
gap: 20rpx;
padding: 24rpx;
background: #f8f9fa;
border-radius: 16rpx;
transition: all 0.2s;
&:active {
background: #e9ecef;
transform: scale(0.98);
}
.activity-icon {
width: 72rpx;
height: 72rpx;
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
text {
font-size: 36rpx;
}
}
.activity-content {
flex: 1;
display: flex;
flex-direction: column;
gap: 8rpx;
.activity-header {
display: flex;
justify-content: space-between;
align-items: center;
.activity-title {
font-size: 28rpx;
font-weight: 600;
color: #333;
}
.activity-status {
font-size: 22rpx;
padding: 4rpx 12rpx;
background: rgba(0, 0, 0, 0.05);
border-radius: 8rpx;
}
}
.activity-description {
font-size: 24rpx;
color: #666;
line-height: 1.5;
}
.activity-time {
font-size: 22rpx;
color: #999;
}
}
}
}
</style>