|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|