Files
spark-store/src/components/RankingContributorRow.vue
T
xiyidaiwa b89c001401 refactor: 基于 upstream/Erotica 重新整合本地功能(来源选择/合并详情/计数/窗口/首页)
将本地在 upstream !408(已安装应用合并+统计)之上的后续改动重新整合到最新 upstream/Erotica:
- 已安装应用:卸载/打开按 APM/Spark 来源选择;计数总数=APM+Spark 包数(双来源计为独立包)
- 查看详情:已安装页复用所有应用页合并详情视图(单来源优先已装类型,双来源自动模式)
- 窗口:恢复阈值改为 1600x900,过大回退默认尺寸并居中,不自动最大化
- 首页推荐:致谢卡片移至其他内容下方,加大标题/卡片/致谢间距
- 隐藏排行榜/荣耀榜侧栏入口(代码保留,v-if=false)
- 新增 scripts/test-build.sh 测试打包脚本(版本末段+1 加 -test)并更新 AGENTS.md

冲突文件(index.ts/App.vue/InstalledAppsModal.vue)均取本地完整实现(为上游版本的超集)。
2026-08-03 11:06:28 +08:00

56 lines
1.6 KiB
Vue
Raw 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>
<div
class="group flex items-center gap-2 rounded-lg border border-slate-200/70 bg-white/90 p-2 transition hover:border-brand/50 dark:border-slate-800/60 dark:bg-slate-900/60"
>
<!-- 排名序号 3 名金// -->
<span
class="w-5 shrink-0 text-center text-sm font-bold"
:class="rankClass"
>{{ rank }}</span
>
<!-- 贡献者头像 -->
<div
class="flex h-9 w-9 shrink-0 items-center justify-center rounded-md bg-gradient-to-b from-amber-100 to-amber-200 text-amber-600 shadow-inner dark:from-amber-900/40 dark:to-amber-800/40"
>
<i class="fas fa-user"></i>
</div>
<!-- 贡献者信息 -->
<div class="flex min-w-0 flex-1 flex-col gap-1 overflow-hidden">
<div class="truncate text-xs font-semibold text-slate-900 dark:text-white">
{{ name }}
</div>
<div
class="truncate text-xs leading-tight text-slate-500 dark:text-slate-400"
>
{{ label }}
</div>
</div>
<!-- 数量徽标 -->
<span
class="shrink-0 rounded-full bg-slate-100 px-2 py-0.5 text-xs font-semibold text-slate-600 dark:bg-slate-800 dark:text-slate-300"
>{{ count }}</span
>
</div>
</template>
<script setup lang="ts">
import { computed } from "vue";
const props = defineProps<{
rank: number;
name: string;
count: number;
label?: string;
}>();
const rankClass = computed(() => {
if (props.rank === 1) return "text-amber-400";
if (props.rank === 2) return "text-slate-400";
if (props.rank === 3) return "text-amber-600";
return "text-slate-400 dark:text-slate-500";
});
</script>