66 lines
2.3 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.

<script setup lang="ts">
import { ref } from 'vue';
import { NButton, NEmpty, NInput, NModal, useMessage } from 'naive-ui';
import { computed } from 'vue';
const props = defineProps<{
show: boolean;
}>();
const emit = defineEmits<{
'update:show': [value: boolean];
}>();
const message = useMessage();
const DEMO_KEYWORD = '骑着摩托的小猫咪,疾驰在路上,动漫场景,详细的细节。';
const keyword = ref('');
const iframeSrc = ref('');
const isCreating = ref(false);
const isShowModal = computed({
get: () => props.show,
set: (value) => emit('update:show', value),
});
const createImage = () => {
if (!keyword.value) {
message.error('请先输入关键词');
return;
}
isCreating.value = true;
iframeSrc.value = `/images/create?re=1&showselective=1&sude=1&kseed=7500&SFX=2&q=${encodeURIComponent(keyword.value)}&t=${Date.now()}`;
};
const onClose = () => {
keyword.value = '';
iframeSrc.value = '';
};
const useDemo = () => {
keyword.value = DEMO_KEYWORD;
return createImage();
};
</script>
<template>
<NModal class="w-11/12 lg:w-[540px] select-none" v-model:show="isShowModal" :on-close="onClose" preset="card" title="图像创建">
<head class="flex justify-center gap-3 px-8">
<NInput class="flex-1" placeholder="提示词" v-model:value="keyword" :clearable="true" @keyup.enter="createImage" maxlength="100"></NInput>
<NButton secondary type="info" @click="createImage" :loading="isCreating">开始创建</NButton>
</head>
<main class="flex justify-center items-center">
<iframe v-if="iframeSrc" class="w-[310px] h-[350px] xl:w-[475px] xl:h-[520px] my-4" :src="iframeSrc" frameborder="0" @load="isCreating = false"></iframe>
<NEmpty v-else class="h-[40vh] xl:h-[60vh] flex justify-center items-center" description="暂未创建">
<template #extra>
<NButton secondary type="info" @click="useDemo">使用示例创建</NButton>
<div class="text-[#c2c2c2] px-2 xl:px-10">
<p class="text-left">提示形容词+名词+动词+风格描述得越详细时效果越好</p>
<p class="text-left">示例{{ DEMO_KEYWORD }}</p>
</div>
</template>
</NEmpty>
</main>
</NModal>
</template>