Pārlūkot izejas kodu

意图识别-意图类型管理

CzRger 2 mēneši atpakaļ
vecāks
revīzija
a8758dda58

+ 2 - 3
web/app/components/skill/intent/index.tsx

@@ -80,7 +80,7 @@ const CorpusIndex = () => {
     mode: 'add',
     row: {},
   })
-  const [showIntentTypeModalVisible, setShowIntentTypeModalVisible] = useState(true)
+  const [showIntentTypeModalVisible, setShowIntentTypeModalVisible] = useState(false)
   return (
     <>
       <div className='flex h-full w-full flex-col bg-background-default-subtle p-6'>
@@ -135,8 +135,7 @@ const CorpusIndex = () => {
           </Button>
           <Button variant='primary' className={cn('ml-2 shrink-0')}
             onClick={() => {
-              setTransfer({ mode: 'add', row: null })
-              setDetailModalVisible(true)
+              setShowIntentTypeModalVisible(true)
             }}>
             <RiPriceTagLine className='mr-1 h-4 w-4' />
             意图类型管理

+ 51 - 42
web/app/components/skill/intent/type-modal.tsx

@@ -1,9 +1,9 @@
 'use client'
-import React, { useCallback, useEffect, useState } from 'react'
+import React, { useEffect, useState } from 'react'
 import { RiAddLine, RiCloseLine, RiRefreshLine, RiSearchLine } from '@remixicon/react'
 import Modal from '@/app/components/base/modal'
 import Button from '@/app/components/base/button'
-import { delCorpus, fetchIntentType } from '@/service/common'
+import { addIntentType, delCorpus, editIntentType, fetchIntentType } from '@/service/common'
 import 'react-multi-email/dist/style.css'
 import Input from '@/app/components/base/input'
 import useSWR from 'swr'
@@ -21,7 +21,7 @@ const TypeModal = ({
   const [query, setQuery] = useState<any>({})
   const { data, mutate }: any = useSWR(
     {
-      url: '/xxx',
+      url: '/intentions/types',
       params: {
         page: page + 1,
         limit,
@@ -32,57 +32,65 @@ const TypeModal = ({
   )
   const list: any = data?.data || []
   const total = data?.total || 0
+  const [refresh, setRefresh] = useState<boolean>(false)
   const handleSearch = (reset = false) => {
-    if (reset)
-      setIntentType('')
-
+    setRefresh(true)
+    setPage(0)
     const params: any = {}
-    if (intentType)
-      params.intentType = intentType
+    if (reset) {
+      setIntentType('')
+    }
+    else {
+      if (intentType)
+        params.search = intentType
+    }
     setQuery(params)
-    setPage(0)
+    mutate()
+    setRefresh(false)
   }
   useEffect(() => {
-    mutate()
+    if (!refresh)
+      mutate()
   }, [page, limit])
   const [showConfirmDelete, setShowConfirmDelete] = useState(false)
   const [row, setRow] = useState<any>({})
   const handleDel = async () => {
     try {
       await delCorpus({
-        url: `/tags/${row.id}`,
+        url: `/intentions/types/${row.id}`,
         body: {},
       })
       setShowConfirmDelete(false)
+      handleSearch(false)
     }
     catch (e) { }
   }
   const [showDetail, setShowDetail] = useState(false)
   const [mode, setMode] = useState<any>('add')
-  const [editIntentType, setEditIntentType] = useState('')
-  const handleSave = useCallback(async () => {
-    // try {
-    //   let res
-    //   if (transfer.mode === 'add') {
-    //     res = await addCorpus({
-    //       url: '/xxx',
-    //       body: { name, type: 'knowledge_category' },
-    //     })
-    //   }
-    //   else {
-    //     res = await editCorpus({
-    //       url: '/xxx',
-    //       body: { name },
-    //     })
-    //   }
-    //   const { id }: any = res
-    //   if (id) {
-    //     onCancel()
-    //     onSend()
-    //   }
-    // }
-    // catch (e) { }
-  }, [mode, editIntentType, onCancel, onSend])
+  const [editIntentTypeName, setEditIntentTypeName] = useState('')
+  const handleSave = async () => {
+    try {
+      let res
+      if (mode === 'add') {
+        res = await addIntentType({
+          url: '/intentions/types',
+          body: { name: editIntentTypeName },
+        })
+      }
+      else {
+        res = await editIntentType({
+          url: `/intentions/types/${row.id}`,
+          body: { name: editIntentTypeName },
+        })
+      }
+      const { id }: any = res
+      if (id) {
+        setShowDetail(false)
+        handleSearch(false)
+      }
+    }
+    catch (e) { }
+  }
   return (
     <div>
       <Modal overflowVisible isShow onClose={() => { }} className="p-[24px 32px] w-[800px] max-w-[800px]">
@@ -120,7 +128,7 @@ const TypeModal = ({
             <Button variant='primary' className={cn('shrink-0')}
               onClick={() => {
                 setMode('add')
-                setEditIntentType('')
+                setEditIntentTypeName('')
                 setShowDetail(true)
               }}>
               <RiAddLine className='mr-1 h-4 w-4' />
@@ -145,16 +153,17 @@ const TypeModal = ({
                         className={'h-8 border-b border-divider-subtle hover:bg-background-default-hover'}
                       >
                         <td>{item.name}</td>
-                        <td>4</td>
+                        <td>{item.intention_count}</td>
                         <td className="flex justify-center gap-2">
                           <Button variant='ghost-accent' size='small' className={cn('shrink-0')} onClick={() => {
                             setMode('edit')
-                            setEditIntentType(item.name)
+                            setRow(item)
+                            setEditIntentTypeName(item.name)
                             setShowDetail(true)
                           }}>
                             编辑
                           </Button>
-                          <Button variant='ghost' size='small' className={cn('shrink-0 text-red-600')} onClick={() => {
+                          <Button variant='ghost' size='small' className={cn('shrink-0 text-red-600')} disabled={item.intention_count > 0} onClick={() => {
                             setRow(item)
                             setShowConfirmDelete(true)
                           }}>
@@ -203,8 +212,8 @@ const TypeModal = ({
                   意图类型
                 </div>
                 <Input
-                  value={editIntentType}
-                  onChange={e => setEditIntentType(e.target.value)}
+                  value={editIntentTypeName}
+                  onChange={e => setEditIntentTypeName(e.target.value)}
                   className='h-9'
                   placeholder='请输入意图类型'
                 />
@@ -213,7 +222,7 @@ const TypeModal = ({
                 tabIndex={0}
                 className='w-full'
                 onClick={handleSave}
-                disabled={!editIntentType.length}
+                disabled={!editIntentTypeName.length}
                 variant='primary'
               >
                 保存

+ 16 - 20
web/service/common.ts

@@ -514,26 +514,22 @@ export const fetchLog = ({ url, params }: any) => {
 
 export const fetchIntentType = ({ url, params }: any) => {
   console.log('查询意图类型', url, params)
-  // return get(url, { params })
-  return new Promise((resolve) => {
-    setTimeout(() => {
-      const arr: any = []
-      for (let i = 1; i < 10; i++) {
-        arr.push({
-          id: i,
-          name: `意图类型_${i}`,
-          binding_count: i,
-        })
-      }
-      resolve({
-        data: arr,
-        has_more: false,
-        limit: 10,
-        total: 100,
-        page: 1,
-      })
-    }, 1000)
-  })
+  return get(url, { params })
+}
+
+export const addIntentType = ({ url, body }: any) => {
+  console.log('新增意图类型', url, body)
+  return post(url, { body })
+}
+
+export const editIntentType = ({ url, body }: any) => {
+  console.log('编辑意图类型', url, body)
+  return patch(url, { body })
+}
+
+export const delIntentType = ({ url, body }: any) => {
+  console.log('删除意图类型', url, body)
+  return del(url, { body })
 }
 
 export const fetchIntentName = ({ url, params }: any) => {