| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import React, { useState, useRef, useEffect } from 'react'; |
| | import { Modal, Form, Col, Row } from '@douyinfe/semi-ui'; |
| | import { API, showError, showSuccess } from '../../../../helpers'; |
| | import { Typography } from '@douyinfe/semi-ui'; |
| | import { IconLink } from '@douyinfe/semi-icons'; |
| | import { useTranslation } from 'react-i18next'; |
| | import { useIsMobile } from '../../../../hooks/common/useIsMobile'; |
| |
|
| | const EditVendorModal = ({ visible, handleClose, refresh, editingVendor }) => { |
| | const { t } = useTranslation(); |
| | const [loading, setLoading] = useState(false); |
| | const formApiRef = useRef(null); |
| |
|
| | const isMobile = useIsMobile(); |
| | const isEdit = editingVendor && editingVendor.id !== undefined; |
| |
|
| | const getInitValues = () => ({ |
| | name: '', |
| | description: '', |
| | icon: '', |
| | status: true, |
| | }); |
| |
|
| | const handleCancel = () => { |
| | handleClose(); |
| | formApiRef.current?.reset(); |
| | }; |
| |
|
| | const loadVendor = async () => { |
| | if (!isEdit || !editingVendor.id) return; |
| |
|
| | setLoading(true); |
| | try { |
| | const res = await API.get(`/api/vendors/${editingVendor.id}`); |
| | const { success, message, data } = res.data; |
| | if (success) { |
| | |
| | data.status = data.status === 1; |
| | if (formApiRef.current) { |
| | formApiRef.current.setValues({ ...getInitValues(), ...data }); |
| | } |
| | } else { |
| | showError(message); |
| | } |
| | } catch (error) { |
| | showError(t('加载供应商信息失败')); |
| | } |
| | setLoading(false); |
| | }; |
| |
|
| | useEffect(() => { |
| | if (visible) { |
| | if (isEdit) { |
| | loadVendor(); |
| | } else { |
| | formApiRef.current?.setValues(getInitValues()); |
| | } |
| | } else { |
| | formApiRef.current?.reset(); |
| | } |
| | }, [visible, editingVendor?.id]); |
| |
|
| | const submit = async (values) => { |
| | setLoading(true); |
| | try { |
| | |
| | const submitData = { |
| | ...values, |
| | status: values.status ? 1 : 0, |
| | }; |
| |
|
| | if (isEdit) { |
| | submitData.id = editingVendor.id; |
| | const res = await API.put('/api/vendors/', submitData); |
| | const { success, message } = res.data; |
| | if (success) { |
| | showSuccess(t('供应商更新成功!')); |
| | refresh(); |
| | handleClose(); |
| | } else { |
| | showError(t(message)); |
| | } |
| | } else { |
| | const res = await API.post('/api/vendors/', submitData); |
| | const { success, message } = res.data; |
| | if (success) { |
| | showSuccess(t('供应商创建成功!')); |
| | refresh(); |
| | handleClose(); |
| | } else { |
| | showError(t(message)); |
| | } |
| | } |
| | } catch (error) { |
| | showError(error.response?.data?.message || t('操作失败')); |
| | } |
| | setLoading(false); |
| | }; |
| |
|
| | return ( |
| | <Modal |
| | title={isEdit ? t('编辑供应商') : t('新增供应商')} |
| | visible={visible} |
| | onOk={() => formApiRef.current?.submitForm()} |
| | onCancel={handleCancel} |
| | confirmLoading={loading} |
| | size={isMobile ? 'full-width' : 'small'} |
| | > |
| | <Form |
| | initValues={getInitValues()} |
| | getFormApi={(api) => (formApiRef.current = api)} |
| | onSubmit={submit} |
| | > |
| | <Row gutter={12}> |
| | <Col span={24}> |
| | <Form.Input |
| | field='name' |
| | label={t('供应商名称')} |
| | placeholder={t('请输入供应商名称,如:OpenAI')} |
| | rules={[{ required: true, message: t('请输入供应商名称') }]} |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.TextArea |
| | field='description' |
| | label={t('描述')} |
| | placeholder={t('请输入供应商描述')} |
| | rows={3} |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.Input |
| | field='icon' |
| | label={t('供应商图标')} |
| | placeholder={t('请输入图标名称')} |
| | extraText={ |
| | <span> |
| | {t( |
| | "图标使用@lobehub/icons库,如:OpenAI、Claude.Color,支持链式参数:OpenAI.Avatar.type={'platform'}、OpenRouter.Avatar.shape={'square'},查询所有可用图标请 ", |
| | )} |
| | <Typography.Text |
| | link={{ |
| | href: 'https://icons.lobehub.com/components/lobe-hub', |
| | target: '_blank', |
| | }} |
| | icon={<IconLink />} |
| | underline |
| | > |
| | {t('请点击我')} |
| | </Typography.Text> |
| | </span> |
| | } |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.Switch field='status' label={t('状态')} initValue={true} /> |
| | </Col> |
| | </Row> |
| | </Form> |
| | </Modal> |
| | ); |
| | }; |
| |
|
| | export default EditVendorModal; |
| |
|