<script setup lang="ts"> import text2videoService from "@/api/service/text2videoService"; import utils from "@/utils/utils"; import { ElMessage, genFileId, type UploadInstance, type UploadProps, type UploadRawFile } from "element-plus"; import { nextTick, onMounted, reactive, ref } from "vue"; const debug = ref(import.meta.env.MODE === 'production' ? false : true); // const debug = ref(false); const loading = ref(false); const form = reactive({ task_id: "", task_content: "开发一款坦克大战的小游戏", prompt: `你是一名高级的程序员。现在需要根据产品需求,设计一份完整的程序编写的思路,比如第一步写什么模块,第二步写什么模块,整个思路应逻辑清晰、流畅。以json格式输出:\n[{"序号": 序号, "描述": 描述, "详细说明": 详细说明}, ...]\n`, answer: "", answer_json: [], }); const llms = { tyqw_online: {'api': 'tyqw', 'name':'线上通义千问'}, baichuan: {'api': 'langchain', 'name':'本地baichuan2-7b'}, qwen_local: {'api': 'langchain', 'name':'本地Qwen-7B-Chat'}, chatgpt: {'api': 'gpt', 'name':'chatgpt'}, kimi: {'api': 'kimi', 'name':'kimi'}, }; onMounted(() => { // 初始化task_id form.task_id = utils.genDateTimeStr(); console.log('页面加载,task_id=', form.task_id) }); const onSubmitGpt = () => { const my_prompt = ref(`${form.prompt}。产品需求如下:${form.task_content}`); text2videoService .submitLLM(utils.aesEncrypt(my_prompt.value), utils.aesEncrypt(llms.tyqw_online.api), [], form.task_id, "true") .then((result: string) => { console.log(result); form.answer = result; const jsonText = utils.extractJSON(result); console.log(jsonText); form.answer_json = utils.formatJsonObj(jsonText!); }) .catch((error: any) => { console.error(error); ElMessage({ message: error, type: "error", }); }); }; </script> <!-- ============================================================================================================ --> <!-- ============================================================================================================ --> <!-- ============================================================================================================ --> <template> <main class="home-container"> <!-- 标题 --> <el-divider content-position="left">将产品需求拆解为开发步骤</el-divider> <el-form :model="form" label-width="114px" v-loading="loading"> <!-- 产品需求 --> <el-form-item label="产品需求"> <el-input v-model="form.task_content" :autosize="true" type="textarea" /> </el-form-item> <!-- Prompt --> <el-form-item label="Prompt"> <el-text class="mx-1" type="danger">{{ form.prompt }}</el-text> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmitGpt" >生成步骤({{ llms.tyqw_online.name }})</el-button > </el-form-item> <!-- 结果 --> <el-form-item label="步骤"> <!-- <el-text class="mx-1">{{ form.answer }}</el-text> --> <el-table :data="form.answer_json" border style="width: 100%; z-index: calc(var(--el-table-index) -1)" > <el-table-column prop="序号" label="序号" width="55" /> <el-table-column prop="描述" label="描述" width="300"> <template v-slot="scope"> <el-text class="mx-1">{{ scope.row.描述 }}</el-text> </template> </el-table-column> <el-table-column prop="详细说明" label="详细说明"> <template v-slot="scope"> <el-text class="mx-1">{{ scope.row.详细说明 }}</el-text> </template> </el-table-column> <el-table-column width="200" label="操作" align="center"> <template v-slot="scope"> <div style="margin: 5px 0"> <el-button type="primary" size="small" @click="" >与大模型继续沟通</el-button > </div> <!-- <div style="margin: 10px 0"> <el-button type="danger" size="small" @click="">删除本步骤</el-button> </div> --> </template> </el-table-column> </el-table> </el-form-item> <!-- <el-form-item> <el-button type="primary" @click="">保存所有记录</el-button> </el-form-item> --> </el-form> </main> </template> <style lang="scss" scoped> .home-container { width: 100%; } </style> <style lang="scss"> .home-container { .el-table .el-table__cell { z-index: calc(var(--el-table-index) -1); } } .dashed-div { border: 1px dashed #999; margin: 5px 0; padding: 2px; } </style>