|
@@ -25,24 +25,26 @@ import { uploadFile } from "@/utils/http";
|
|
import { EUploadFileScene } from "@/consts/enum";
|
|
import { EUploadFileScene } from "@/consts/enum";
|
|
|
|
|
|
import Taro, { useRouter } from "@tarojs/taro";
|
|
import Taro, { useRouter } from "@tarojs/taro";
|
|
-import { getKnowledgeQa, updateKnowledgeQa } from "@/service/knowledge";
|
|
|
|
import { isSuccess } from "@/utils";
|
|
import { isSuccess } from "@/utils";
|
|
|
|
+import { editVisitorDislikeAnswer, getVisitorMessagesByMsgId } from "@/service/visitor";
|
|
|
|
|
|
-type TFormdata = {q:string, a: string, links: string[], mediaList: TMediaType[]}
|
|
|
|
|
|
+import { TVisitorChat } from "@/types/visitor";
|
|
|
|
|
|
|
|
+type TFormdata = {content:string, correctionAnswer: string, links: string[], mediaList: TMediaType[]}
|
|
|
|
|
|
-interface IProps {
|
|
|
|
- initialData?: TFormdata
|
|
|
|
-}
|
|
|
|
export default function Index() {
|
|
export default function Index() {
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
- const { knowledgeId, qaId, knowledgeTitle } = router.params
|
|
|
|
|
|
+ const { msgId, visitorId, agentId } = router.params as {msgId: string, visitorId: string, agentId: string}
|
|
|
|
+
|
|
|
|
+ console.log(msgId, visitorId, agentId, 8888)
|
|
|
|
|
|
|
|
+ const [visitorQ, setQVisitor] = useState<TVisitorChat|null>(null)
|
|
|
|
+ const [visitor, setVisitor] = useState<TVisitorChat|null>(null)
|
|
const [formData, setFormData] = useState<TFormdata>(
|
|
const [formData, setFormData] = useState<TFormdata>(
|
|
{
|
|
{
|
|
- q: '',
|
|
|
|
- a: '',
|
|
|
|
|
|
+ content: '',
|
|
|
|
+ correctionAnswer: '',
|
|
links: [],
|
|
links: [],
|
|
mediaList: [] //{fileType: 'image',url: 'https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png'}
|
|
mediaList: [] //{fileType: 'image',url: 'https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png'}
|
|
}
|
|
}
|
|
@@ -51,13 +53,13 @@ export default function Index() {
|
|
const handleInput = (value: string) => {
|
|
const handleInput = (value: string) => {
|
|
setFormData({
|
|
setFormData({
|
|
...formData,
|
|
...formData,
|
|
- q: value,
|
|
|
|
|
|
+ content: value,
|
|
});
|
|
});
|
|
};
|
|
};
|
|
const handleValueAInput = (value: string) => {
|
|
const handleValueAInput = (value: string) => {
|
|
setFormData({
|
|
setFormData({
|
|
...formData,
|
|
...formData,
|
|
- a: value,
|
|
|
|
|
|
+ correctionAnswer: value,
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
@@ -98,33 +100,47 @@ export default function Index() {
|
|
};
|
|
};
|
|
|
|
|
|
const handleSubmit = async () => {
|
|
const handleSubmit = async () => {
|
|
- if(!knowledgeId || !qaId){
|
|
|
|
|
|
+ if(!msgId || !visitorId || !visitor){
|
|
return
|
|
return
|
|
}
|
|
}
|
|
-
|
|
|
|
const dataToSubmit = {
|
|
const dataToSubmit = {
|
|
- answer: formData.a,
|
|
|
|
- questions: [formData.q],
|
|
|
|
- qaId: parseInt(qaId),
|
|
|
|
|
|
+ questions : [visitorQ?.content],
|
|
|
|
+ visitorId: visitorId,
|
|
|
|
+ answer: formData.correctionAnswer,
|
|
|
|
+ content: formData.content,
|
|
|
|
+ agentId: agentId,
|
|
|
|
+ msgId: msgId,
|
|
|
|
+ correctionId: visitor.correctionId,
|
|
links: formData.links.filter(link => link.trim() !== ''),
|
|
links: formData.links.filter(link => link.trim() !== ''),
|
|
- pics: formData.mediaList.map( item => item.url)
|
|
|
|
|
|
+ pics: formData.mediaList.map( item => item.url),
|
|
}
|
|
}
|
|
console.log(dataToSubmit)
|
|
console.log(dataToSubmit)
|
|
- const {status} = await updateKnowledgeQa(knowledgeId, qaId, dataToSubmit)
|
|
|
|
|
|
+
|
|
|
|
+ const {status} = await editVisitorDislikeAnswer(dataToSubmit)
|
|
if(isSuccess(status)){
|
|
if(isSuccess(status)){
|
|
Taro.showToast({title: '保存成功', icon: 'success'})
|
|
Taro.showToast({title: '保存成功', icon: 'success'})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- const getQaDetail = async (knowledgeId: string, qaId: string)=> {
|
|
|
|
- const {status, data} = await getKnowledgeQa(knowledgeId, qaId)
|
|
|
|
- if(isSuccess(status)){
|
|
|
|
|
|
+ const getDetail = async () => {
|
|
|
|
+ const {status, data} = await getVisitorMessagesByMsgId({
|
|
|
|
+ msgId,
|
|
|
|
+ visitorId,
|
|
|
|
+ size: 2,
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ if(isSuccess(status), data[0]){
|
|
|
|
+ const _visitor = data[0]
|
|
|
|
+ setVisitor(_visitor)
|
|
|
|
+ if(data[1]){
|
|
|
|
+ setQVisitor(data[1])
|
|
|
|
+ }
|
|
setFormData({
|
|
setFormData({
|
|
- q: data.questions[0],
|
|
|
|
- a: data.answer,
|
|
|
|
- links: data.links,
|
|
|
|
- mediaList: data.pics.map( pic => {
|
|
|
|
|
|
+ content: _visitor.content,
|
|
|
|
+ correctionAnswer: _visitor.correctionAnswer,
|
|
|
|
+ links: _visitor.correctionLinks ?? [],
|
|
|
|
+ mediaList: _visitor.correctionPics?.map( pic => {
|
|
return {fileType: 'image', url: pic}
|
|
return {fileType: 'image', url: pic}
|
|
- }),
|
|
|
|
|
|
+ }) ?? [],
|
|
})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -150,32 +166,44 @@ export default function Index() {
|
|
}
|
|
}
|
|
|
|
|
|
useEffect(()=> {
|
|
useEffect(()=> {
|
|
- if(knowledgeId && qaId){
|
|
|
|
- getQaDetail(knowledgeId, qaId)
|
|
|
|
|
|
+ if(visitorId && msgId){
|
|
|
|
+ getDetail()
|
|
}
|
|
}
|
|
|
|
|
|
- }, [knowledgeId, qaId])
|
|
|
|
|
|
+ }, [visitorId, msgId])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
<PageCustom>
|
|
<PageCustom>
|
|
- <NavBarNormal scrollFadeIn backText={knowledgeTitle ?? '...'}></NavBarNormal>
|
|
|
|
|
|
+ <NavBarNormal scrollFadeIn backText={'差评记录'}></NavBarNormal>
|
|
<View className="w-full pb-120">
|
|
<View className="w-full pb-120">
|
|
<View className="p-16">
|
|
<View className="p-16">
|
|
|
|
+ <View className="text-gray-45 text-14 text-center py-8">修改后的问答将存入知识库,持续训练提升您的智能体</View>
|
|
<View className="flex flex-col gap-16">
|
|
<View className="flex flex-col gap-16">
|
|
<View className="flex flex-col">
|
|
<View className="flex flex-col">
|
|
<View className="flex items-start gap-8 mb-6">
|
|
<View className="flex items-start gap-8 mb-6">
|
|
<View className="flex-center h-28">
|
|
<View className="flex-center h-28">
|
|
<IconQ />
|
|
<IconQ />
|
|
</View>
|
|
</View>
|
|
- <View className="flex-1 text-14 leading-28">问题描述</View>
|
|
|
|
|
|
+ <View className="flex-1 text-14 leading-28">提问</View>
|
|
|
|
+ </View>
|
|
|
|
+ <View className="p-16 bg-white rounded-12">
|
|
|
|
+ {visitorQ?.content}
|
|
|
|
+ </View>
|
|
|
|
+ </View>
|
|
|
|
+ <View className="flex flex-col">
|
|
|
|
+ <View className="flex items-start gap-8 mb-6">
|
|
|
|
+ <View className="flex-center h-28">
|
|
|
|
+ <IconA />
|
|
|
|
+ </View>
|
|
|
|
+ <View className="flex-1 text-14 leading-28">原回答</View>
|
|
</View>
|
|
</View>
|
|
<View className="">
|
|
<View className="">
|
|
<WemetaTextarea
|
|
<WemetaTextarea
|
|
- value={formData.q}
|
|
|
|
|
|
+ value={formData.content}
|
|
|
|
+ disabled
|
|
onInput={handleInput}
|
|
onInput={handleInput}
|
|
- placeholder="描述你想要生成的画面和动作。例如:职场精英在点头微笑"
|
|
|
|
/>
|
|
/>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
@@ -186,13 +214,13 @@ export default function Index() {
|
|
<View className="flex-center h-28">
|
|
<View className="flex-center h-28">
|
|
<IconA />
|
|
<IconA />
|
|
</View>
|
|
</View>
|
|
- <View className="flex-1 text-14 leading-28">回答</View>
|
|
|
|
|
|
+ <View className="flex-1 text-14 leading-28">纠错回答</View>
|
|
</View>
|
|
</View>
|
|
<View>
|
|
<View>
|
|
<WemetaTextarea
|
|
<WemetaTextarea
|
|
- value={formData.a}
|
|
|
|
|
|
+ value={formData.correctionAnswer}
|
|
onInput={handleValueAInput}
|
|
onInput={handleValueAInput}
|
|
- placeholder="描述你想要生成的画面和动作。例如:职场精英在点头微笑"
|
|
|
|
|
|
+ placeholder="描述正确的回答"
|
|
/>
|
|
/>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</View>
|