mirror of
https://github.com/nocodb/nocodb.git
synced 2026-05-01 05:26:53 +00:00
112 lines
2.6 KiB
Vue
112 lines
2.6 KiB
Vue
<script lang="ts" setup>
|
|
import { AiWizardTabsType } from '#imports'
|
|
|
|
interface Props {
|
|
activeTab: AiWizardTabsType
|
|
showCloseBtn?: boolean
|
|
/**
|
|
* null to hide tooltip
|
|
*/
|
|
closeBtnTooltip?: string | null
|
|
}
|
|
|
|
const props = withDefaults(defineProps<Props>(), {
|
|
activeTab: AiWizardTabsType.AUTO_SUGGESTIONS,
|
|
showCloseBtn: false,
|
|
})
|
|
|
|
const emits = defineEmits(['update:activeTab', 'close'])
|
|
|
|
const activeTab = useVModel(props, 'activeTab', emits)
|
|
|
|
const { aiLoading } = useNocoAi()
|
|
</script>
|
|
|
|
<template>
|
|
<NcTabs
|
|
v-model:active-key="activeTab"
|
|
theme="ai"
|
|
class="nc-ai-wizard-tabs"
|
|
:class="{
|
|
'nc-ai-loading': aiLoading,
|
|
}"
|
|
>
|
|
<template #leftExtra>
|
|
<div class="w-0"></div>
|
|
</template>
|
|
<template #rightExtra>
|
|
<NcTooltip
|
|
:title="closeBtnTooltip ?? $t('labels.disableNocoAI')"
|
|
:disabled="ncIsNull(closeBtnTooltip)"
|
|
class="flex children:flex-none"
|
|
>
|
|
<NcButton v-if="showCloseBtn" size="small" type="text" @click.stop="emits('close')">
|
|
<GeneralIcon icon="close" class="text-nc-content-gray-subtle2" />
|
|
</NcButton>
|
|
</NcTooltip>
|
|
</template>
|
|
<a-tab-pane :key="AiWizardTabsType.AUTO_SUGGESTIONS" class="w-full" :disabled="aiLoading">
|
|
<template #tab>
|
|
<div
|
|
class="tab-title"
|
|
:class="{
|
|
'!cursor-wait': aiLoading,
|
|
}"
|
|
>
|
|
{{ $t('labels.autoSuggested') }}
|
|
</div>
|
|
</template>
|
|
<div class="w-full">
|
|
<slot name="AutoSuggestedContent"></slot>
|
|
</div>
|
|
</a-tab-pane>
|
|
|
|
<a-tab-pane :key="AiWizardTabsType.PROMPT" class="w-full" disabled>
|
|
<template #tab>
|
|
<NcTooltip class="flex">
|
|
<template #title> {{ $t('msg.toast.futureRelease') }}</template>
|
|
<div class="tab-title">{{ $t('labels.usePrompt') }}</div>
|
|
</NcTooltip>
|
|
</template>
|
|
<div>
|
|
<slot name="PromptContent"></slot>
|
|
</div>
|
|
</a-tab-pane>
|
|
</NcTabs>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.nc-ai-wizard-tabs {
|
|
:deep(.ant-tabs-nav) {
|
|
@apply !pl-0 mx-5;
|
|
}
|
|
:deep(.ant-tabs-tab) {
|
|
@apply px-0 pt-1 pb-2;
|
|
|
|
&.ant-tabs-tab-active {
|
|
@apply font-medium;
|
|
}
|
|
}
|
|
|
|
&.nc-ai-loading {
|
|
:deep(.ant-tabs-tab) {
|
|
@apply !cursor-wait;
|
|
}
|
|
}
|
|
|
|
:deep(.ant-tabs-tab + .ant-tabs-tab) {
|
|
@apply ml-4;
|
|
}
|
|
|
|
.tab-title {
|
|
@apply text-xs leading-[24px] px-2 rounded hover:bg-nc-bg-gray-light transition-colors;
|
|
}
|
|
|
|
:deep(.ant-tabs-tab-disabled) {
|
|
.tab-title {
|
|
@apply text-nc-content-gray-muted hover:bg-transparent;
|
|
}
|
|
}
|
|
}
|
|
</style>
|