123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- 'use client'
- import List from './list'
- import React, { useEffect, useState } from 'react'
- import Input from '@/app/components/base/input'
- import cn from '@/utils/classnames'
- import { RiAddLine, RiPriceTagLine, RiRefreshLine, RiSearchLine } from '@remixicon/react'
- import Button from '@/app/components/base/button'
- import useSWR from 'swr'
- import { fetchCorpus, fetchIntentName, fetchIntentType } from '@/service/common'
- import { SimpleSelect } from '@/app/components/base/select'
- import DetailModal from './detail-modal'
- import TypeModal from './type-modal'
- const CorpusIndex = () => {
- const [page, setPage] = React.useState<number>(0)
- const [limit, setLimit] = useState<number>(10)
- const [question, setQuestion] = useState<string>('') // the input value
- const [intentType, setIntentType] = useState<string>('') // the input value
- const { data: dataOptionsIntentType }: any = useSWR(
- {
- url: '/xxx',
- params: {
- page: 1,
- limit: 1000,
- },
- },
- fetchIntentType,
- )
- const optionsIntentType: any = dataOptionsIntentType?.data.map((v: any) => ({ name: v.name, value: v.id })) || []
- const [intentName, setIntentName] = useState<string>('') // the input value
- const { data: dataOptionsIntentName }: any = useSWR(
- {
- url: '/xxx',
- params: {
- page: 1,
- limit: 1000,
- intentType,
- },
- },
- fetchIntentName,
- )
- const optionsIntentName: any = dataOptionsIntentName?.data.map((v: any) => ({ name: v.name, value: v.id })) || []
- const [query, setQuery] = useState<any>({})
- const { data, mutate }: any = useSWR(
- {
- url: '/xxx',
- params: {
- page: page + 1,
- limit,
- ...query,
- },
- },
- fetchCorpus,
- )
- const list: any = data?.data || []
- const total = data?.total || 0
- const handleSearch = (reset = false) => {
- if (reset) {
- setQuestion('')
- setIntentName('')
- setIntentType('')
- }
- const params: any = {}
- if (question)
- params.question = question
- if (intentType)
- params.intentType = intentType
- if (intentName)
- params.intentName = intentName
- setQuery(params)
- setPage(0)
- }
- useEffect(() => {
- mutate()
- }, [page, limit])
- const [detailModalVisible, setDetailModalVisible] = useState(false)
- const [transfer, setTransfer] = useState<any>({
- mode: 'add',
- row: {},
- })
- const [showIntentTypeModalVisible, setShowIntentTypeModalVisible] = useState(false)
- return (
- <>
- <div className='flex h-full w-full flex-col bg-background-default-subtle p-6'>
- <div className="flex items-center gap-2">
- <div className="flex shrink-0 items-center text-gray-500">
- 意图类型
- <div className="ml-2 flex h-[32px]">
- <SimpleSelect
- className="h-[32px] w-[200px]"
- defaultValue={intentType}
- onSelect={(i: any) => {
- setIntentType(i.value)
- }}
- items={optionsIntentType}
- allowSearch={false}
- placeholder="请选择意图类型"
- />
- </div>
- </div>
- <div className="flex shrink-0 items-center text-gray-500">
- 意图名称
- <Input
- className="ml-2"
- showClearIcon
- wrapperClassName='!w-[200px]'
- value={question}
- onChange={e => setQuestion(e.target.value)}
- onClear={() => setQuestion('')}
- />
- </div>
- <Button variant='primary' className={cn('ml-auto shrink-0')} onClick={() => {
- handleSearch(false)
- }}>
- <RiSearchLine className='mr-1 h-4 w-4' />
- 搜索
- </Button>
- <Button variant='primary' className={cn('shrink-0')} onClick={() => {
- handleSearch(true)
- }}>
- <RiRefreshLine className='mr-1 h-4 w-4' />
- 重置
- </Button>
- </div>
- <div className="mt-2">
- <Button variant='primary' className={cn('shrink-0')}
- onClick={() => {
- setTransfer({ mode: 'add', row: null })
- setDetailModalVisible(true)
- }}>
- <RiAddLine className='mr-1 h-4 w-4' />
- 新增
- </Button>
- <Button variant='primary' className={cn('ml-2 shrink-0')}
- onClick={() => {
- setShowIntentTypeModalVisible(true)
- }}>
- <RiPriceTagLine className='mr-1 h-4 w-4' />
- 意图类型管理
- </Button>
- </div>
- <div className="flex-1">
- <List
- list={list || []}
- onUpdate={mutate}
- pagination={{
- total,
- limit,
- onLimitChange: setLimit,
- current: page,
- onChange: setPage,
- }}
- />
- </div>
- </div>
- {
- detailModalVisible && (
- <DetailModal
- transfer={transfer}
- onCancel={() => setDetailModalVisible(false)}
- onSend={() => {
- setDetailModalVisible(false)
- mutate()
- }}
- />
- )
- }
- {
- showIntentTypeModalVisible && (
- <TypeModal
- onCancel={() => setShowIntentTypeModalVisible(false)}
- onSend={() => {
- setShowIntentTypeModalVisible(false)
- // mutate()
- }}
- />
- )
- }
- </>
- )
- }
- export default CorpusIndex
|