|
@@ -1,105 +1,106 @@
|
|
|
<template>
|
|
|
- <div class=" w-full h-full app-pageContainer" style="overflow: hidden;">
|
|
|
- <TitleH5 titleName="创建场景" />
|
|
|
+ <div class=" w-full app-pageContainer relative" style="overflow: hidden; height: calc(var(--vh, 1vh) * 100);">
|
|
|
+ <TitleH5 titleName=" 创建场景" />
|
|
|
<!-- 第一步场景基本信息 -->
|
|
|
- <div v-show="active == 1" class="px-6 pb-8 mx-auto overflow-y-auto w-full"
|
|
|
- style="height: calc(100% - 49px - 80px - 60px);">
|
|
|
- <div>
|
|
|
- <div class="py-4 flex flex-col">
|
|
|
- <div class="w-20 h-20">
|
|
|
- <div v-if="!character.id" @click="showPopup1 = true"
|
|
|
- class="w-20 h-20 bg-gray-100 rounded-full cursor-pointer flex flex-col justify-center items-center text-sm hover:bg-gray-200">
|
|
|
- <p>选择</p>
|
|
|
- <p>角色</p>
|
|
|
+ <div class="overflow-y-auto" style="height: calc(100% - 49px);">
|
|
|
+ <div v-show="active == 1" class="px-6 pb-4 mx-auto w-full">
|
|
|
+ <div>
|
|
|
+ <div class="py-4 flex flex-col">
|
|
|
+ <div class="w-20 h-20">
|
|
|
+ <div v-if="!character.id" @click="showPopup1 = true"
|
|
|
+ class="w-20 h-20 bg-gray-100 rounded-full cursor-pointer flex flex-col justify-center items-center text-sm hover:bg-gray-200">
|
|
|
+ <p>选择</p>
|
|
|
+ <p>角色</p>
|
|
|
+ </div>
|
|
|
+ <img v-else class="w-20 h-20 rounded-full cursor-pointer object-cover shadow" @click="showPopup1 = true"
|
|
|
+ :src="baseApi + character.picture" alt="">
|
|
|
</div>
|
|
|
- <img v-else class="w-20 h-20 rounded-full cursor-pointer object-cover shadow" @click="showPopup1 = true"
|
|
|
- :src="baseApi + character.picture" alt="">
|
|
|
+ <div class="mt-1.5 text-2xl">{{ character.id ? character.characterName : '请选择角色' }}</div>
|
|
|
+ <div class="mt-1 text-gray-400 text-sm">定义角色所属的上下文,为角色补充创作的故事或设定。</div>
|
|
|
</div>
|
|
|
- <div class="mt-1.5 text-2xl">{{ character.id ? character.characterName : '请选择角色' }}</div>
|
|
|
- <div class="mt-1 text-gray-400 text-sm">定义角色所属的上下文,为角色补充创作的故事或设定。</div>
|
|
|
- </div>
|
|
|
|
|
|
- <div class="py-4">
|
|
|
- <div>场景名称</div>
|
|
|
- <div class="mt-1 text-gray-400 text-sm">场景的标题</div>
|
|
|
- <el-input class="mt-4" v-model="form.sceneName" placeholder="例如:第一次约会" maxlength="10"
|
|
|
- show-word-limit></el-input>
|
|
|
- </div>
|
|
|
+ <div class="py-4">
|
|
|
+ <div>场景名称</div>
|
|
|
+ <div class="mt-1 text-gray-400 text-sm">场景的标题</div>
|
|
|
+ <el-input class="mt-4" v-model="form.sceneName" placeholder="例如:第一次约会" maxlength="10"
|
|
|
+ show-word-limit></el-input>
|
|
|
+ </div>
|
|
|
|
|
|
- <div class="py-4">
|
|
|
- <div>场景描述</div>
|
|
|
- <div class="mt-1 text-gray-400 text-sm">
|
|
|
- 详细的场景描述,可以为角色补充创作的故事或设定,可以指定互动发生的位置和时间。
|
|
|
+ <div class="py-4">
|
|
|
+ <div>场景描述</div>
|
|
|
+ <div class="mt-1 text-gray-400 text-sm">
|
|
|
+ 详细的场景描述,可以为角色补充创作的故事或设定,可以指定互动发生的位置和时间。
|
|
|
+ </div>
|
|
|
+ <el-input class="mt-4" v-model="form.sceneDescription"
|
|
|
+ placeholder="例:{char} 成为 {user} 的女朋友已有一段時間了,今天你们决定开始同居。" type="textarea" maxlength="400"
|
|
|
+ :autosize="{ minRows: 4 }" show-word-limit></el-input>
|
|
|
</div>
|
|
|
- <el-input class="mt-4" v-model="form.sceneDescription" placeholder="例:{char} 成为 {user} 的女朋友已有一段時間了,今天你们决定开始同居。"
|
|
|
- type="textarea" maxlength="400" :autosize="{ minRows: 4 }" show-word-limit></el-input>
|
|
|
- </div>
|
|
|
- <div class="py-4">
|
|
|
- <div>欢迎语</div>
|
|
|
- <div class="mt-1 text-gray-400 text-sm">
|
|
|
- 请填写欢迎语和指定的发言角色,這将会是进入场景时收到的第一句话,将会印象场景的剧情走向
|
|
|
+ <div class="py-4">
|
|
|
+ <div>欢迎语</div>
|
|
|
+ <div class="mt-1 text-gray-400 text-sm">
|
|
|
+ 请填写欢迎语和指定的发言角色,這将会是进入场景时收到的第一句话,将会印象场景的剧情走向
|
|
|
+ </div>
|
|
|
+ <el-input class="mt-4" v-model="form.sceneWelcome" placeholder="例如:他的声音里充满了恼怒,问道: “你是我新來的保姆吗?”"
|
|
|
+ type="textarea" maxlength="400" :autosize="{ minRows: 4 }" show-word-limit></el-input>
|
|
|
</div>
|
|
|
- <el-input class="mt-4" v-model="form.sceneWelcome" placeholder="例如:他的声音里充满了恼怒,问道: “你是我新來的保姆吗?”" type="textarea"
|
|
|
- maxlength="400" :autosize="{ minRows: 4 }" show-word-limit></el-input>
|
|
|
- </div>
|
|
|
- <div class="py-4">
|
|
|
- <div>模型</div>
|
|
|
- <div class="flex items-start py-3">
|
|
|
- <el-radio-group class="radio" v-model="form.modelId">
|
|
|
- <el-radio-button v-for="(item, index) in modelList" :key="index" :label="item.id">
|
|
|
- {{ item.model }}
|
|
|
- </el-radio-button>
|
|
|
- </el-radio-group>
|
|
|
+ <div class="py-4">
|
|
|
+ <div>模型</div>
|
|
|
+ <div class="flex items-start py-3">
|
|
|
+ <el-radio-group class="radio" v-model="form.modelId">
|
|
|
+ <el-radio-button v-for="(item, index) in modelList" :key="index" :label="item.id">
|
|
|
+ {{ item.model }}
|
|
|
+ </el-radio-button>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <!-- 第二步背景 -->
|
|
|
- <div v-show="active == 2" class="w-full relative" style="height: calc(100% - 49px - 80px - 60px);">
|
|
|
- <img v-if="uploadList.length > 0" class=" w-full h-full object-cover" :src="baseApi + uploadList[bgActive].url"
|
|
|
- alt="">
|
|
|
- <div
|
|
|
- class="absolute bg-white p-4 bottom-1/2 right-1/2 transform translate-x-1/2 translate-y-1/2 rounded-lg border border-gray-200"
|
|
|
- style="height: 582px;">
|
|
|
- <el-tabs v-model="tabActive2">
|
|
|
- <el-tab-pane label="上传背景" name="1">
|
|
|
- <div class="flex flex-col">
|
|
|
- <div>直接使用上传的图像</div>
|
|
|
- <div class="mt-1 text-gray-400 text-sm">直接使用上传的图像</div>
|
|
|
- <el-upload class=" w-full text-center mt-4" drag :action="uploadUrl" :headers="headers"
|
|
|
- :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" :on-error="handleUploadError"
|
|
|
- :show-file-list="false" :limit="10">
|
|
|
- <i class="el-icon-upload"></i>
|
|
|
- <div class="el-upload__text"><em>点击上传</em></div>
|
|
|
- <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过5M</div>
|
|
|
- </el-upload>
|
|
|
- <div>背景</div>
|
|
|
- <div class="mt-2 grid grid-cols-4 gap-1 gap-y-2">
|
|
|
- <div v-for="(item, index) in uploadList" :key="index" @click="bgActive = index">
|
|
|
- <img class=" rounded object-cover cursor-pointer border" :class="bgActive === index ? 'bgActive' : ''"
|
|
|
- style="width: 120px; height: 90px;" :src="baseApi + item.url" alt="">
|
|
|
+ <!-- 第二步背景 -->
|
|
|
+ <div v-show="active == 2" class="w-full">
|
|
|
+ <img v-if="uploadList.length > 0" class=" w-full h-full object-cover" :src="baseApi + uploadList[bgActive].url"
|
|
|
+ alt="">
|
|
|
+ <div
|
|
|
+ class="absolute h-full bg-white p-4 bottom-1/2 right-1/2 transform translate-x-1/2 translate-y-1/2 rounded-lg border border-gray-200">
|
|
|
+ <el-tabs v-model="tabActive2">
|
|
|
+ <el-tab-pane label="上传背景" name="1">
|
|
|
+ <div class="flex flex-col">
|
|
|
+ <div>直接使用上传的图像</div>
|
|
|
+ <div class="mt-1 text-gray-400 text-sm">直接使用上传的图像</div>
|
|
|
+ <el-upload class=" w-full text-center mt-4" drag :action="uploadUrl" :headers="headers"
|
|
|
+ :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" :on-error="handleUploadError"
|
|
|
+ :show-file-list="false" :limit="10">
|
|
|
+ <i class="el-icon-upload"></i>
|
|
|
+ <div class="el-upload__text"><em>点击上传</em></div>
|
|
|
+ <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过5M</div>
|
|
|
+ </el-upload>
|
|
|
+ <div>背景</div>
|
|
|
+ <div class="mt-2 grid grid-cols-4 gap-1 gap-y-2">
|
|
|
+ <div v-for="(item, index) in uploadList" :key="index" @click="bgActive = index">
|
|
|
+ <img class=" rounded object-cover cursor-pointer border" :class="bgActive === index ? 'bgActive' : ''"
|
|
|
+ style="width: 120px; height: 90px;" :src="baseApi + item.url" alt="">
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="bottom flex justify-end items-center pr-6">
|
|
|
- <el-button v-if="active == 1" type="primary" :disabled="nextDisabled" @click="next()">下一步</el-button>
|
|
|
- <el-button v-if="active == 2" @click="active--">上一步</el-button>
|
|
|
+ <div class="bottomA flex justify-end items-center pr-6">
|
|
|
+ <el-button v-if="active == 1" type="primary" :disabled="nextDisabled" @click="next()">下一步</el-button>
|
|
|
+ <el-button v-if="active == 2" @click="active--">上一步</el-button>
|
|
|
|
|
|
- <el-dropdown @command="handleCommand" trigger="click">
|
|
|
- <el-button class="mx-2 w-28 " v-show="active == 2">
|
|
|
- {{ this.form.type == 0 ? '公开' : '非公开' }}
|
|
|
- <i class="el-icon-arrow-up el-icon--right"></i>
|
|
|
- </el-button>
|
|
|
- <el-dropdown-menu slot="dropdown">
|
|
|
- <el-dropdown-item command="0">公开</el-dropdown-item>
|
|
|
- <el-dropdown-item command="1">非公开</el-dropdown-item>
|
|
|
- </el-dropdown-menu>
|
|
|
- </el-dropdown>
|
|
|
- <el-button v-if="active == 2" :disabled="uploadList.length == 0" type="primary" @click="submit">发布</el-button>
|
|
|
+ <el-dropdown @command="handleCommand" trigger="click">
|
|
|
+ <el-button class="mx-2 w-28 " v-show="active == 2">
|
|
|
+ {{ this.form.type == 0 ? '公开' : '非公开' }}
|
|
|
+ <i class="el-icon-arrow-up el-icon--right"></i>
|
|
|
+ </el-button>
|
|
|
+ <el-dropdown-menu slot="dropdown">
|
|
|
+ <el-dropdown-item command="0">公开</el-dropdown-item>
|
|
|
+ <el-dropdown-item command="1">非公开</el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </el-dropdown>
|
|
|
+ <el-button v-if="active == 2" :disabled="uploadList.length == 0" type="primary" @click="submit">发布</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<!-- 选择角色对话框 -->
|
|
|
<el-dialog class="dialog" title="选择角色" :visible.sync="showPopup1" fullscreen>
|
|
@@ -335,8 +336,12 @@ export default {
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.bottom {
|
|
|
- height: 80px;
|
|
|
+.bottomA {
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+ position: relative;
|
|
|
+ // bottom: 60px;
|
|
|
+ background: #fff;
|
|
|
}
|
|
|
|
|
|
.characterName {
|