git-proxy / src /components /RepoHeader.vue
github-actions[bot]
Update from GitHub Actions
15ff6c7
raw
history blame
2.4 kB
<script setup lang="ts">
import { computed } from 'vue';
import { FolderIcon } from 'tdesign-icons-vue-next';
import type { Account } from '../services/accountApi';
const props = defineProps<{
selectedAccount: number | '';
currentPath: string;
accounts: Account[];
isNewFile?: boolean;
}>();
const emit = defineEmits<{
(e: 'pathClick', path: string): void;
(e: 'rootClick'): void;
(e: 'update:selectedAccount', value: number): void;
}>();
const pathBreadcrumbs = computed(() => {
const { currentPath, isNewFile } = props;
if (isNewFile) {
// For new files, show "新建文件" at the end of the breadcrumb
const paths = currentPath ? currentPath.split('/').filter(Boolean) : [];
const breadcrumbs = paths.map((path: string, index: number) => ({
text: path,
path: paths.slice(0, index + 1).join('/')
}));
return breadcrumbs;
}
// Regular file browsing
if (!currentPath || typeof currentPath !== 'string') return [];
const paths = currentPath.split('/').filter(Boolean);
if (paths.length === 0) return [];
return paths.map((path: string, index: number) => ({
text: path,
path: paths.slice(0, index + 1).join('/')
}));
});
</script>
<template>
<div class="header-section bg-white p-4 rounded-lg shadow-sm">
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-3">
<div class="flex flex-col md:flex-row md:items-center gap-3">
<t-select :value="selectedAccount" class="w-full md:w-64" placeholder="选择仓库"
@update:value="(val: number) => emit('update:selectedAccount', val)">
<t-option v-for="acc in accounts" :key="acc.id" :value="acc.id" :label="`${acc.owner}/${acc.repo}`" />
</t-select>
<t-breadcrumb v-if="currentPath && pathBreadcrumbs.length > 0 || isNewFile" class="mt-3">
<t-breadcrumb-item @click="emit('rootClick')" class="cursor-pointer hover:text-blue-500">
<span class="flex items-center gap-1">
<FolderIcon /> 根目录
</span>
</t-breadcrumb-item>
<t-breadcrumb-item v-for="item in pathBreadcrumbs" :key="item.path" @click="emit('pathClick', item.path)"
class="cursor-pointer hover:text-blue-500">
{{ item.text }}
</t-breadcrumb-item>
</t-breadcrumb>
</div>
<slot></slot>
</div>
</div>
</template>