| | |
| | | <!-- #endregion --> |
| | | |
| | | <!-- #region ====================== 过程输出 ======================--> |
| | | <el-steps v-show="msg?.stepGroup?.[index].isShow" class="mt-3" direction="vertical"> |
| | | <el-step |
| | | :key="`template-${stepIndex}`" |
| | | v-for="(subItem, stepIndex) in msg?.stepGroup?.[index].value" |
| | | :title="subItem.title" |
| | | :status="stepEnumMap[subItem.status]" |
| | | > |
| | | <template |
| | | #icon |
| | | v-if=" |
| | | stepIndex + 1 === msg?.stepGroup?.[index].value.length && |
| | | isTalking && |
| | | isLast && |
| | | (subItem.finishLoading === false || subItem.finishLoading === undefined) |
| | | " |
| | | <div class="mt-3 step-list max-h-[500px] overflow-y-auto" ref="stepListRef"> |
| | | <el-steps v-show="msg?.stepGroup?.[index].isShow" class="mt-3" direction="vertical"> |
| | | <el-step |
| | | :key="`template-${stepIndex}`" |
| | | v-for="(subItem, stepIndex) in msg?.stepGroup?.[index].value" |
| | | :title="subItem.title" |
| | | :status="stepEnumMap[subItem.status]" |
| | | > |
| | | <span class="ywifont ywicon-loading1 animate-spin !text-[24px]"></span> |
| | | </template> |
| | | <template #title> |
| | | <span class=""> |
| | | <span v-html="renderMd(subItem.title ?? '')"></span> |
| | | <span v-if="subItem.ms" class="text-green-600">{{ `(${subItem.ms})` }}</span></span |
| | | <template |
| | | #icon |
| | | v-if=" |
| | | stepIndex + 1 === msg?.stepGroup?.[index].value.length && |
| | | isTalking && |
| | | isLast && |
| | | (subItem.finishLoading === false || subItem.finishLoading === undefined) |
| | | " |
| | | > |
| | | </template> |
| | | |
| | | <template #description v-if="subItem?.subStep?.length > 0"> |
| | | <div class="my-1 flex flex-col gap-1 text-[14px]"> |
| | | <div |
| | | :key="`${msg.historyId}-${stepIndex + 1}-${multiChatIndex + 1}`" |
| | | v-for="(multiChatItem, multiChatIndex) in subItem.subStep" |
| | | <span class="ywifont ywicon-loading1 animate-spin !text-[24px]"></span> |
| | | </template> |
| | | <template #title> |
| | | <span class=""> |
| | | <span v-html="renderMd(subItem.title ?? '')"></span> |
| | | <span v-if="subItem.ms" class="text-green-600">{{ `(${subItem.ms})` }}</span></span |
| | | > |
| | | <component |
| | | :order="`${stepIndex + 1}-${multiChatIndex + 1}`" |
| | | :item="multiChatItem" |
| | | :is="multiChatTypeMapCom[multiChatItem.type]" |
| | | @change="multiChatChange" |
| | | :disabled="!(stepIndex + 1 === msg?.stepGroup?.[index].value.length && isTalking && isLast)" |
| | | /> |
| | | </template> |
| | | |
| | | <template #description v-if="subItem?.subStep?.length > 0"> |
| | | <div class="my-1 flex flex-col gap-1 text-[14px]"> |
| | | <div |
| | | :key="`${msg.historyId}-${stepIndex + 1}-${multiChatIndex + 1}`" |
| | | v-for="(multiChatItem, multiChatIndex) in subItem.subStep" |
| | | > |
| | | <component |
| | | :order="`${stepIndex + 1}-${multiChatIndex + 1}`" |
| | | :item="multiChatItem" |
| | | :is="multiChatTypeMapCom[multiChatItem.type]" |
| | | @change="multiChatChange" |
| | | :disabled="!(stepIndex + 1 === msg?.stepGroup?.[index].value.length && isTalking && isLast)" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-step> |
| | | </el-steps> |
| | | </template> |
| | | </el-step> |
| | | </el-steps> |
| | | </div> |
| | | |
| | | <!-- #endregion --> |
| | | </div> |
| | | <!-- #endregion --> |
| | |
| | | <div class="flex items-center justify-center size-[15px]" v-if="checkIsText(msg)"> |
| | | <i class="p-2 ywifont ywicon-copy cursor-pointer hover:text-[#0284ff] hover:!text-[18px]" @click="copyClick(msg)" /> |
| | | </div> |
| | | <template v-if="msg.content.errCode !== ErrorCode.Message"> |
| | | <el-tooltip v-if="checkIsText(msg)" effect="dark" :content="isSpeaking ? '暂停朗读' : '语音朗读'" placement="top"> |
| | | <div v-if="isSpeaking" class="cursor-pointer flex items-center space-x-[1px]" @click="speechClick(msg)"> |
| | | <div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite]"></div> |
| | | <div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.1s]"></div> |
| | | <div class="w-[2px] h-[12px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.2s]"></div> |
| | | <div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.3s]"></div> |
| | | <div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.4s]"></div> |
| | | </div> |
| | | <el-tooltip v-if="checkIsText(msg)" effect="dark" :content="isItemSpeaking(msg) ? '暂停朗读' : '语音朗读'" placement="top"> |
| | | <div v-if="isItemSpeaking(msg)" class="cursor-pointer flex items-center space-x-[1px]" @click="speechClick(msg)"> |
| | | <div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite]"></div> |
| | | <div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.1s]"></div> |
| | | <div class="w-[2px] h-[12px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.2s]"></div> |
| | | <div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.3s]"></div> |
| | | <div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.4s]"></div> |
| | | </div> |
| | | |
| | | <div v-else class="flex items-center justify-center size-[15px]"> |
| | | <i |
| | | class="p-2 ywifont ywicon-shengyin cursor-pointer hover:text-[#0284ff] font-medium hover:!text-[18px]" |
| | | @click="speechClick(msg)" |
| | | /> |
| | | </div> |
| | | </el-tooltip> |
| | | <div v-else class="flex items-center justify-center size-[15px]"> |
| | | <i |
| | | class="p-2 ywifont ywicon-shengyin cursor-pointer hover:text-[#0284ff] font-medium hover:!text-[18px]" |
| | | @click="speechClick(msg)" |
| | | /> |
| | | </div> |
| | | </el-tooltip> |
| | | <template v-if="msg.content.errCode !== ErrorCode.Message"> |
| | | <el-tooltip effect="dark" content="点赞" placement="top"> |
| | | <div class="flex items-center justify-center size-[15px]"> |
| | | <i |
| | |
| | | fixQuestionClick, |
| | | showFixQuestion, |
| | | speechClick, |
| | | isSpeaking, |
| | | |
| | | isItemSpeaking, |
| | | checkIsText, |
| | | } = useAssistantContentOpt({ |
| | | sendChatMessage, |