Commit 1c9672c1 by Liu

feat:A01时隐藏回答中的操作按钮

parent 47f1d0df
import { Avatar, Button } from '@heroui/react'
import { useEffect, useState } from 'react'
import { useEffect, useMemo, useState } from 'react'
import { ChatAnswerShower } from './ChatAnswerShower'
import { ChatAnswerParser } from './ChatAnswerParser'
import { ChatAnswerRecommend } from './ChatAnswerRecommend'
......@@ -49,16 +49,34 @@ export const ChatAnswerBox: React.FC<ChatAnswerBoxProps> = ({ record, showIndex,
setInnerRecord(record)
}, [record])
// 检查 sessionStorage 中是否存在 from=tactics
const hasFromTactics = useMemo(() => {
try {
const raw = sessionStorage.getItem('tacticsMeta')
if (!raw) {
return false
}
const parsed = JSON.parse(raw)
return parsed?.from === 'tactics'
}
catch {
return false
}
}, [])
/**
* 当当前 AI 记录没有对应的问题文本时(例如策略页进入会话后的自动分析、
* 点击「重新分析」触发的自动问题),需要隐藏点赞 / 点踩 / 复制按钮。
* 对于正常问答(有用户问题)则保持原有行为。
* 当 recordType 为 A01 且 sessionStorage 中存在 from=tactics 时,也需要隐藏点赞 / 点踩 / 复制按钮。
*/
const hideOperateForRecord = !innerRecord.question
return (
<div>
{innerRecord.answerList.map((item, index) => {
// 检查当前项的 recordType,如果是 A01 且 sessionStorage 中存在 from=tactics 则隐藏操作按钮
const shouldHideOperate = hideOperateForRecord || (hasFromTactics && item.recordType === 'A01')
return (
index === showIndex && (
<div className="chatItemBotContainer w-full" key={`${item.recordId}-${index}`}>
......@@ -79,7 +97,7 @@ export const ChatAnswerBox: React.FC<ChatAnswerBoxProps> = ({ record, showIndex,
onSubmitQuestion={onSubmitQuestion}
isLastAnswer={isLastAnswer}
answer={item}
hideOperate={hideOperateForRecord}
hideOperate={shouldHideOperate}
/>
)}
{!item.isShow && !item.isChatMaxCount && (
......@@ -90,7 +108,7 @@ export const ChatAnswerBox: React.FC<ChatAnswerBoxProps> = ({ record, showIndex,
onTyping={handleTyping}
onComplate={() => handleComplate(item)}
answer={item}
hideOperate={hideOperateForRecord}
hideOperate={shouldHideOperate}
/>
)}
{!item.isShow && item.isChatMaxCount && <ChatMaxCount />}
......
import React from 'react'
import { formatMarkdown } from './markdownFormatter'
import { ChatAnswerAttachment } from './ChatAnswerAttchment'
import { ChatAnswerOperate } from './ChatAnswerOperate'
......@@ -8,10 +9,12 @@ interface ChatAnswerShowerProps {
answer: Answer
isLastAnswer: boolean
onSubmitQuestion: (question: string) => void
hideOperate?: boolean
}
export const ChatAnswerShower: React.FC<ChatAnswerShowerProps> = ({ answer, isLastAnswer, onSubmitQuestion }) => {
const hideOperate = (answer.cardList || []).some(attachment => attachment.type === 'box' || attachment?.type?.includes('card-'))
export const ChatAnswerShower: React.FC<ChatAnswerShowerProps> = ({ answer, isLastAnswer, onSubmitQuestion, hideOperate: hideOperateProp }) => {
const hideOperateByCard = (answer.cardList || []).some(attachment => attachment.type === 'box' || attachment?.type?.includes('card-'))
const hideOperate = hideOperateByCard || hideOperateProp
return (
<div className="answerShower">
{answer.answer && (
......@@ -23,7 +26,7 @@ export const ChatAnswerShower: React.FC<ChatAnswerShowerProps> = ({ answer, isLa
)}
{answer.cardList && answer.cardList?.length !== 0 && <ChatAnswerAttachment onSubmitQuestion={onSubmitQuestion} isLastAnswer={isLastAnswer} answer={answer} />}
{/* {} */}
{!hideOperate && <ChatAnswerOperate answer={answer} />}
{!hideOperate && <ChatAnswerOperate answer={answer} hideFeedbackAndCopy={hideOperateProp} />}
<div className="flex text-[10px] right-[16px] text-[#d0d1d2] bottom-[4px]">AI生成</div>
</div>
)
......
......@@ -48,6 +48,7 @@ export interface Answer {
toolId?: string
cardList: Attachment[]
step?: AnswerStep
recordType?: string
}
export interface OriginalRecord {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment