Files
certd/packages/ui/certd-client/src/components/project-selector/index.vue
T

69 lines
2.0 KiB
Vue
Raw Normal View History

<template>
<a-dropdown class="project-selector">
<template #overlay>
<a-menu @click="handleMenuClick">
<a-menu-item v-for="item in projectStore.myProjects" :key="item.id">
2026-02-26 23:50:15 +08:00
<div class="flex items-center justify-between w-full">
<span class="mr-1">{{ item.name }}</span>
<fs-values-format :model-value="item.permission" :dict="projectPermissionDict"></fs-values-format>
</div>
</a-menu-item>
2026-02-28 12:13:31 +08:00
<a-menu-item key="join">
<div class="flex items-center w-full">
<fs-icon icon="ion:add" class="mr-1"></fs-icon>
<span>加入其他项目</span>
</div>
</a-menu-item>
</a-menu>
</template>
2026-02-13 21:28:17 +08:00
<div class="rounded pl-3 pr-3 px-2 py-1 flex-center flex pointer items-center bg-accent h-10 button-text" title="当前项目">
2026-02-26 23:50:15 +08:00
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
2026-02-13 21:28:17 +08:00
当前项目{{ projectStore.currentProject?.name || "..." }}
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
</div>
</a-dropdown>
</template>
<script lang="ts" setup>
2026-02-26 23:50:15 +08:00
import { computed, onMounted } from "vue";
import { useProjectStore } from "/@/store/project";
2026-02-26 23:50:15 +08:00
import { useDicts } from "/@/views/certd/dicts";
2026-02-28 12:13:31 +08:00
import { useRouter } from "vue-router";
defineOptions({
name: "ProjectSelector",
});
const projectStore = useProjectStore();
onMounted(async () => {
await projectStore.reload();
2026-02-26 23:50:15 +08:00
console.log(projectStore.myProjects);
});
2026-02-28 12:13:31 +08:00
const router = useRouter();
function handleMenuClick({ key }: any) {
2026-02-28 12:13:31 +08:00
if (key === "join") {
router.push("/certd/project/join");
return;
}
projectStore.changeCurrentProject(key);
2026-02-13 22:24:04 +08:00
window.location.reload();
}
2026-02-26 23:50:15 +08:00
const { projectPermissionDict } = useDicts();
const currentIcon = computed(() => {
return projectPermissionDict.dataMap[projectStore.currentProject?.permission || ""]?.icon || "";
});
</script>
<style lang="less">
.project-selector {
&.button-text {
2026-02-13 21:28:17 +08:00
min-width: 150px;
max-width: 250px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
</style>