yd-yunxing-web/src/views/ai/app/info.vue

99 lines
3.1 KiB
Vue

<script lang="ts" setup>
import AppBase from './base/index.vue';
import ApiChannel from './channel-api/index.vue';
// import SvgIcon from '@/components/SvgIcon/index.vue';
import { useRouter, useRoute } from 'vue-router';
import { onMounted, ref } from 'vue';
import { useAppStore } from './store';
import { getAppInfo } from '@/api/new-ai/chat';
const appStore = useAppStore();
const router = useRouter();
const route = useRoute();
const form = ref<any>({name: 123});
const loading = ref(false);
const activeMenus = [
{ key: 'setting', icon: 'uil:setting', label: '应用配置' },
{ key: 'api', icon: 'hugeicons:api', label: 'API接入渠道' },
];
onMounted(async () => {
await fetchData();
});
async function fetchData() {
loading.value = true;
const id = route.params.id;
const data = await getAppInfo({
appId: id,
conversationId: null,
});
form.value = data;
loading.value = false;
}
</script>
<template>
<div v-if="form.name !== undefined" class="rounded bg-[#f9f9f9] w-full h-full pb-10 children">
<div class="p-4 flex justify-between items-center bg-white rounded">
<div class="flex gap-5 items-center min-w-20">
<el-button text type="primary" @click="router.push('/ai/app')">
<SvgIcon class="text-xl" icon="icon-park-outline:back" />
</el-button>
<div class="flex gap-2 items-center pr-4">
<div class="mr-3">
<div class="relative bg-orange-100 p-4 rounded-lg">
<SvgIcon class="text-3xl" icon="prime:microchip-ai" />
<div
class="absolute bottom-[-6px] p-1 right-[-5px] shadow bg-white mx-auto rounded-lg"
>
<SvgIcon class="text-sm text-orange-500" icon="lucide:bot" />
</div>
</div>
</div>
<div class="flex flex-col justify-between gap-2">
<div class="font-bold text-lg">{{ form.name }}</div>
<div v-if="!loading" class="text-gray-400 text-xs">自动保存:{{ form.saveTime }}</div>
<div v-else class="flex items-center gap-1 text-gray-400 text-xs">
<SvgIcon icon="eos-icons:bubble-loading" />保存中...
</div>
</div>
</div>
</div>
<div class="flex items-center gap-2">
<el-button
v-for="item in activeMenus"
:key="item.key"
:type="appStore.activeMenu === item.key ? 'primary' : 'default'"
class="!px-5 !rounded-2xl"
secondary
strong
@click="appStore.setActiveMenu(item.key)"
>
<template #icon>
<SvgIcon :icon="item.icon" />
</template>
{{ item.label }}
</el-button>
</div>
</div>
<AppBase v-if="appStore.activeMenu === 'setting'" />
<ApiChannel v-if="appStore.activeMenu === 'api'" />
</div>
</template>
<style lang="scss" scoped>
.children {
height: calc(100vh - var(--top-tool-height) - var(--tags-view-height) - var(--app-footer-height) - (var(--app-content-padding) * 4)) !important;
box-sizing: border-box;
&>* {
box-sizing: border-box;
}
}
</style>