From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx |  231 +++++++++++++++++++++++++++------------------------------
 1 files changed, 108 insertions(+), 123 deletions(-)

diff --git a/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx b/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx
index 952ad66..69e18e3 100644
--- a/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx
+++ b/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx
@@ -3,30 +3,21 @@
 import React, { useEffect, useState } from 'react'
 import { useTranslation } from 'react-i18next'
 import { useContext } from 'use-context-selector'
-import {
-  RiArrowLeftLine,
-  RiCloseLine,
-} from '@remixicon/react'
-import Drawer from '@/app/components/base/drawer'
-import Loading from '@/app/components/base/loading'
-import ActionButton from '@/app/components/base/action-button'
-import Icon from '@/app/components/plugins/card/base/card-icon'
-import OrgInfo from '@/app/components/plugins/card/base/org-info'
-import Description from '@/app/components/plugins/card/base/description'
-import TabSlider from '@/app/components/base/tab-slider-plain'
-
-import Button from '@/app/components/base/button'
+import cn from '@/utils/classnames'
+import Drawer from '@/app/components/base/drawer-plus'
 import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'
 import { addDefaultValue, toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
 import type { Collection, Tool } from '@/app/components/tools/types'
 import { CollectionType } from '@/app/components/tools/types'
 import { fetchBuiltInToolList, fetchCustomToolList, fetchModelToolList, fetchWorkflowToolList } from '@/service/tools'
 import I18n from '@/context/i18n'
+import Button from '@/app/components/base/button'
+import Loading from '@/app/components/base/loading'
+import { DiagonalDividingLine } from '@/app/components/base/icons/src/public/common'
 import { getLanguage } from '@/i18n/language'
-import cn from '@/utils/classnames'
+import AppIcon from '@/app/components/base/app-icon'
 
 type Props = {
-  showBackButton?: boolean
   collection: Collection
   isBuiltIn?: boolean
   isModel?: boolean
@@ -38,7 +29,6 @@
 }
 
 const SettingBuiltInTool: FC<Props> = ({
-  showBackButton = false,
   collection,
   isBuiltIn = true,
   isModel = true,
@@ -56,8 +46,8 @@
   const [tools, setTools] = useState<Tool[]>([])
   const currTool = tools.find(tool => tool.name === toolName)
   const formSchemas = currTool ? toolParametersToFormSchemas(currTool.parameters) : []
-  const infoSchemas = formSchemas.filter(item => item.form === 'llm')
-  const settingSchemas = formSchemas.filter(item => item.form !== 'llm')
+  const infoSchemas = formSchemas.filter((item: any) => item.form === 'llm')
+  const settingSchemas = formSchemas.filter((item: any) => item.form !== 'llm')
   const hasSetting = settingSchemas.length > 0
   const [tempSetting, setTempSetting] = useState(setting)
   const [currType, setCurrType] = useState('info')
@@ -88,7 +78,7 @@
           setTempSetting(addDefaultValue(setting, formSchemas))
         }
       }
-      catch { }
+      catch (e) { }
       setIsLoading(false)
     })()
   }, [collection?.name, collection?.id, collection?.type])
@@ -99,45 +89,46 @@
 
   const isValid = (() => {
     let valid = true
-    settingSchemas.forEach((item) => {
+    settingSchemas.forEach((item: any) => {
       if (item.required && !tempSetting[item.name])
         valid = false
     })
     return valid
   })()
 
-  const getType = (type: string) => {
-    if (type === 'number-input')
-      return t('tools.setBuiltInTools.number')
-    if (type === 'text-input')
-      return t('tools.setBuiltInTools.string')
-    if (type === 'file')
-      return t('tools.setBuiltInTools.file')
-    return type
-  }
-
   const infoUI = (
-    <div className=''>
+    <div className='pt-2'>
+      <div className='leading-5 text-sm font-medium text-gray-900'>
+        {t('tools.setBuiltInTools.toolDescription')}
+      </div>
+      <div className='mt-1 leading-[18px] text-xs font-normal text-gray-600'>
+        {currTool?.description[language]}
+      </div>
+
       {infoSchemas.length > 0 && (
-        <div className='space-y-1 py-2'>
-          {infoSchemas.map((item, index) => (
-            <div key={index} className='py-1'>
-              <div className='flex items-center gap-2'>
-                <div className='code-sm-semibold text-text-secondary'>{item.label[language]}</div>
-                <div className='system-xs-regular text-text-tertiary'>
-                  {getType(item.type)}
+        <div className='mt-6'>
+          <div className='flex items-center mb-4 leading-[18px] text-xs font-semibold text-gray-500 uppercase'>
+            <div className='mr-3'>{t('tools.setBuiltInTools.parameters')}</div>
+            <div className='grow w-0 h-px bg-[#f3f4f6]'></div>
+          </div>
+          <div className='space-y-4'>
+            {infoSchemas.map((item: any, index) => (
+              <div key={index}>
+                <div className='flex items-center space-x-2 leading-[18px]'>
+                  <div className='text-[13px] font-semibold text-gray-900'>{item.label[language]}</div>
+                  <div className='text-xs font-medium text-gray-500'>{item.type === 'number-input' ? t('tools.setBuiltInTools.number') : t('tools.setBuiltInTools.string')}</div>
+                  {item.required && (
+                    <div className='text-xs font-medium text-[#EC4A0A]'>{t('tools.setBuiltInTools.required')}</div>
+                  )}
                 </div>
-                {item.required && (
-                  <div className='system-xs-medium text-text-warning-secondary'>{t('tools.setBuiltInTools.required')}</div>
+                {item.human_description && (
+                  <div className='mt-1 leading-[18px] text-xs font-normal text-gray-600'>
+                    {item.human_description?.[language]}
+                  </div>
                 )}
               </div>
-              {item.human_description && (
-                <div className='system-xs-regular mt-0.5 text-text-tertiary'>
-                  {item.human_description?.[language]}
-                </div>
-              )}
-            </div>
-          ))}
+            ))}
+          </div>
         </div>
       )}
     </div>
@@ -147,92 +138,86 @@
     <Form
       value={tempSetting}
       onChange={setTempSetting}
-      formSchemas={settingSchemas}
+      formSchemas={settingSchemas as any}
       isEditMode={false}
       showOnVariableMap={{}}
       validating={false}
+      inputClassName='!bg-gray-50'
       readonly={readonly}
     />
   )
 
   return (
     <Drawer
-      isOpen
+      isShow
+      onHide={onHide}
+      title={(
+        <div className='flex items-center'>
+          {typeof collection.icon === 'string'
+            ? (
+              <div
+                className='w-6 h-6 bg-cover bg-center rounded-md flex-shrink-0'
+                style={{
+                  backgroundImage: `url(${collection.icon})`,
+                }}
+              ></div>
+            )
+            : (
+              <AppIcon
+                className='rounded-md'
+                size='tiny'
+                icon={(collection.icon as any)?.content}
+                background={(collection.icon as any)?.background}
+              />
+            )}
+
+          <div className='ml-2 leading-6 text-base font-semibold text-gray-900'>{currTool?.label[language]}</div>
+          {(hasSetting && !readonly) && (<>
+            <DiagonalDividingLine className='mx-4' />
+            <div className='flex space-x-6'>
+              <div
+                className={cn(isInfoActive ? 'text-gray-900 font-semibold' : 'font-normal text-gray-600 cursor-pointer', 'relative text-base')}
+                onClick={() => setCurrType('info')}
+              >
+                {t('tools.setBuiltInTools.info')}
+                {isInfoActive && <div className='absolute left-0 bottom-[-16px] w-full h-0.5 bg-primary-600'></div>}
+              </div>
+              <div className={cn(!isInfoActive ? 'text-gray-900 font-semibold' : 'font-normal text-gray-600 cursor-pointer', 'relative text-base ')}
+                onClick={() => setCurrType('setting')}
+              >
+                {t('tools.setBuiltInTools.setting')}
+                {!isInfoActive && <div className='absolute left-0 bottom-[-16px] w-full h-0.5 bg-primary-600'></div>}
+              </div>
+            </div>
+          </>)}
+        </div>
+      )}
+      panelClassName='mt-[65px] !w-[405px]'
+      maxWidthClassName='!max-w-[405px]'
+      height='calc(100vh - 65px)'
+      headerClassName='!border-b-black/5'
+      body={
+        <div className='h-full pt-3'>
+          {isLoading
+            ? <div className='flex h-full items-center'>
+              <Loading type='app' />
+            </div>
+            : (<div className='flex flex-col h-full'>
+              <div className='grow h-0 overflow-y-auto  px-6'>
+                {isInfoActive ? infoUI : settingUI}
+              </div>
+              {!readonly && !isInfoActive && (
+                <div className='mt-2 shrink-0 flex justify-end py-4 px-6  space-x-2 rounded-b-[10px] bg-gray-50 border-t border-black/5'>
+                  <Button className='flex items-center h-8 !px-3 !text-[13px] font-medium !text-gray-700' onClick={onHide}>{t('common.operation.cancel')}</Button>
+                  <Button className='flex items-center h-8 !px-3 !text-[13px] font-medium' variant='primary' disabled={!isValid} onClick={() => onSave?.(addDefaultValue(tempSetting, formSchemas))}>{t('common.operation.save')}</Button>
+                </div>
+              )}
+            </div>)}
+        </div>
+      }
+      isShowMask={false}
       clickOutsideNotOpen={false}
-      onClose={onHide}
-      footer={null}
-      mask={false}
-      positionCenter={false}
-      panelClassName={cn('mb-2 mr-2 mt-[64px] !w-[420px] !max-w-[420px] justify-start rounded-2xl border-[0.5px] border-components-panel-border !bg-components-panel-bg !p-0 shadow-xl')}
-    >
-      <>
-        {isLoading && <Loading type='app' />}
-        {!isLoading && (
-          <>
-            {/* header */}
-            <div className='relative border-b border-divider-subtle p-4 pb-3'>
-              <div className='absolute right-3 top-3'>
-                <ActionButton onClick={onHide}>
-                  <RiCloseLine className='h-4 w-4' />
-                </ActionButton>
-              </div>
-              {showBackButton && (
-                <div
-                  className='system-xs-semibold-uppercase mb-2 flex cursor-pointer items-center gap-1 text-text-accent-secondary'
-                  onClick={onHide}
-                >
-                  <RiArrowLeftLine className='h-4 w-4' />
-                  BACK
-                </div>
-              )}
-              <div className='flex items-center gap-1'>
-                <Icon size='tiny' className='h-6 w-6' src={collection.icon} />
-                <OrgInfo
-                  packageNameClassName='w-auto'
-                  orgName={collection.author}
-                  packageName={collection.name.split('/').pop() || ''}
-                />
-              </div>
-              <div className='system-md-semibold mt-1 text-text-primary'>{currTool?.label[language]}</div>
-              {!!currTool?.description[language] && (
-                <Description className='mt-3' text={currTool.description[language]} descriptionLineRows={2}></Description>
-              )}
-            </div>
-            {/* form */}
-            <div className='h-full'>
-              <div className='flex h-full flex-col'>
-                {(hasSetting && !readonly) ? (
-                  <TabSlider
-                    className='mt-1 shrink-0 px-4'
-                    itemClassName='py-3'
-                    noBorderBottom
-                    value={currType}
-                    onChange={(value) => {
-                      setCurrType(value)
-                    }}
-                    options={[
-                      { value: 'info', text: t('tools.setBuiltInTools.parameters')! },
-                      { value: 'setting', text: t('tools.setBuiltInTools.setting')! },
-                    ]}
-                  />
-                ) : (
-                  <div className='system-sm-semibold-uppercase p-4 pb-1 text-text-primary'>{t('tools.setBuiltInTools.parameters')}</div>
-                )}
-                <div className='h-0 grow overflow-y-auto px-4'>
-                  {isInfoActive ? infoUI : settingUI}
-                </div>
-                {!readonly && !isInfoActive && (
-                  <div className='mt-2 flex shrink-0 justify-end space-x-2 rounded-b-[10px]  border-t border-divider-regular bg-components-panel-bg px-6 py-4'>
-                    <Button className='flex h-8 items-center !px-3 !text-[13px] font-medium ' onClick={onHide}>{t('common.operation.cancel')}</Button>
-                    <Button className='flex h-8 items-center !px-3 !text-[13px] font-medium' variant='primary' disabled={!isValid} onClick={() => onSave?.(addDefaultValue(tempSetting, formSchemas))}>{t('common.operation.save')}</Button>
-                  </div>
-                )}
-              </div>
-            </div>
-          </>
-        )}
-      </>
-    </Drawer>
+    />
   )
 }
 export default React.memo(SettingBuiltInTool)

--
Gitblit v1.8.0