|
|
@ -47,11 +47,11 @@ |
|
|
<!-- 今日登录用户数 --> |
|
|
<!-- 今日登录用户数 --> |
|
|
<div class="stat-card purple-gradient big-card"> |
|
|
<div class="stat-card purple-gradient big-card"> |
|
|
<div class="card-title"> |
|
|
<div class="card-title"> |
|
|
<el-icon><UserFilled /></el-icon> 今日登录用户数 |
|
|
|
|
|
|
|
|
<el-icon><UserFilled /></el-icon> {{ statsTitle }}登录用户数 |
|
|
</div> |
|
|
</div> |
|
|
<div class="big-card-content"> |
|
|
<div class="big-card-content"> |
|
|
<div class="card-value">{{ loginStats.total }}</div> |
|
|
<div class="card-value">{{ loginStats.total }}</div> |
|
|
<div class="card-tag" :class="getGrowthClass(loginStats.total_growth)"> |
|
|
|
|
|
|
|
|
<div v-if="loginStats.total_growth" class="card-tag" :class="getGrowthClass(loginStats.total_growth)"> |
|
|
{{ getGrowthText(loginStats.total_growth) }} |
|
|
{{ getGrowthText(loginStats.total_growth) }} |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
@ -62,12 +62,12 @@ |
|
|
<div class="stat-card orange-gradient small-card"> |
|
|
<div class="stat-card orange-gradient small-card"> |
|
|
<div class="top-row"> |
|
|
<div class="top-row"> |
|
|
<div class="card-title"> |
|
|
<div class="card-title"> |
|
|
<el-icon><Trophy /></el-icon> 今日登录会员用户数 |
|
|
|
|
|
|
|
|
<el-icon><Trophy /></el-icon> {{ statsTitle }}登录会员用户数 |
|
|
</div> |
|
|
</div> |
|
|
<div class="card-value-small">{{ loginStats.member }}</div> |
|
|
<div class="card-value-small">{{ loginStats.member }}</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="card-tag-wrapper"> |
|
|
<div class="card-tag-wrapper"> |
|
|
<div class="card-tag" :class="getGrowthClass(loginStats.member_growth)"> |
|
|
|
|
|
|
|
|
<div v-if="loginStats.member_growth" class="card-tag" :class="getGrowthClass(loginStats.member_growth)"> |
|
|
{{ getGrowthText(loginStats.member_growth) }} |
|
|
{{ getGrowthText(loginStats.member_growth) }} |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
@ -77,12 +77,12 @@ |
|
|
<div class="stat-card blue-gradient small-card"> |
|
|
<div class="stat-card blue-gradient small-card"> |
|
|
<div class="top-row"> |
|
|
<div class="top-row"> |
|
|
<div class="card-title"> |
|
|
<div class="card-title"> |
|
|
<el-icon><User /></el-icon> 今日登录非网用户数 |
|
|
|
|
|
|
|
|
<el-icon><User /></el-icon> {{ statsTitle }}登录非网用户数 |
|
|
</div> |
|
|
</div> |
|
|
<div class="card-value-small">{{ loginStats.normal }}</div> |
|
|
<div class="card-value-small">{{ loginStats.normal }}</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="card-tag-wrapper"> |
|
|
<div class="card-tag-wrapper"> |
|
|
<div class="card-tag" :class="getGrowthClass(loginStats.normal_growth)"> |
|
|
|
|
|
|
|
|
<div v-if="loginStats.normal_growth" class="card-tag" :class="getGrowthClass(loginStats.normal_growth)"> |
|
|
{{ getGrowthText(loginStats.normal_growth) }} |
|
|
{{ getGrowthText(loginStats.normal_growth) }} |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
@ -266,6 +266,7 @@ const loginStats = ref({ |
|
|
|
|
|
|
|
|
// 获取增长率的样式类 |
|
|
// 获取增长率的样式类 |
|
|
const chartTrendTitle = ref('近7天登录趋势'); |
|
|
const chartTrendTitle = ref('近7天登录趋势'); |
|
|
|
|
|
const statsTitle = ref('今日'); |
|
|
|
|
|
|
|
|
const getGrowthClass = (growthStr) => { |
|
|
const getGrowthClass = (growthStr) => { |
|
|
if (!growthStr) return ''; |
|
|
if (!growthStr) return ''; |
|
|
@ -291,8 +292,21 @@ const formatDate = (date) => { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const fetchLoginData = async () => { |
|
|
const fetchLoginData = async () => { |
|
|
|
|
|
let params = {}; |
|
|
|
|
|
if (dateRange.value && dateRange.value.length === 2) { |
|
|
|
|
|
params.start_time = formatDate(dateRange.value[0]); |
|
|
|
|
|
params.end_time = formatDate(dateRange.value[1]); |
|
|
|
|
|
statsTitle.value = `${params.start_time} 至 ${params.end_time}`; |
|
|
|
|
|
} else { |
|
|
|
|
|
statsTitle.value = '今日'; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (selectedRegion.value && selectedRegion.value !== 'all') { |
|
|
|
|
|
params.region = selectedRegion.value; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
const res = await getUserLoginList(); |
|
|
|
|
|
|
|
|
const res = await getUserLoginList(params); |
|
|
console.log("获取用户登录数据响应:", res); |
|
|
console.log("获取用户登录数据响应:", res); |
|
|
|
|
|
|
|
|
// 兼容处理拦截器 |
|
|
// 兼容处理拦截器 |
|
|
@ -393,7 +407,7 @@ const handleSearch = () => { |
|
|
router.replace({ query }); |
|
|
router.replace({ query }); |
|
|
|
|
|
|
|
|
fetchTrendData(); |
|
|
fetchTrendData(); |
|
|
// 这里也可以加上 fetchLoginData() 如果登录统计也支持搜索参数 |
|
|
|
|
|
|
|
|
fetchLoginData(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const handleReset = () => { |
|
|
const handleReset = () => { |
|
|
@ -408,6 +422,7 @@ const handleReset = () => { |
|
|
router.replace({ query }); |
|
|
router.replace({ query }); |
|
|
|
|
|
|
|
|
fetchTrendData(); |
|
|
fetchTrendData(); |
|
|
|
|
|
fetchLoginData(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// Tab 1 数据 |
|
|
// Tab 1 数据 |
|
|
|