import { addApp, apiInterceptors, getAppList, getTeamMode, updateApp } from '@/client/api'; import { CreateAppParams, TeamMode } from '@/types/app'; import { useRequest } from 'ahooks'; import { App, ConfigProvider, Divider, Form, Input, Modal, Spin } from 'antd'; import classNames from 'classnames'; import Image from 'next/image'; import { useRouter } from 'next/router'; import React, { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import styles from './styles.module.css'; interface WorkModeSelectProps { disable: boolean; options: TeamMode[]; value?: TeamMode; onChange?: (value: TeamMode) => void; } // 自定义team_mode选择 const WorkModeSelect: React.FC = ({ disable = false, options = [], value, onChange }) => { const [selected, setSelected] = useState(value || ({} as TeamMode)); const { i18n } = useTranslation(); const returnOptionStyle = (item: TeamMode) => { if (disable) { return classNames( `flex items-center p-4 border rounded-lg border-[#d9d9d9] cursor-not-allowed relative transition-all duration-500 ease-in-out`, { 'bg-[rgba(0,0,0,0.04)] dark:bg-[#606264]': item.value === selected?.value, }, ); } return `flex items-center p-4 border dark:border-[rgba(217,217,217,0.85)] rounded-lg cursor-pointer hover:border-[#0c75fc] hover:bg-[#f5faff] dark:hover:border-[rgba(12,117,252,0.85)] dark:hover:bg-[#606264] relative transition-all duration-300 ease-in-out ${ item.value === selected?.value ? 'border-[#0c75fc] bg-[#f5faff] dark:bg-[#606264] dark:border-[#0c75fc]' : 'border-[#d9d9d9]' } `; }; const language = i18n.language === 'en'; return (
{options.map(item => (
{ if (disable) { return; } setSelected(item); onChange?.({ ...value, ...item }); }} > {item.value}
{language ? item.name_en : item.name_cn} {language ? item.description_en : item.description}
{item.value === selected?.value && (
)}
))}
); }; const CreateAppModal: React.FC<{ open: boolean; onCancel: () => void; refresh?: any; type?: 'add' | 'edit'; }> = ({ open, onCancel, type = 'add', refresh }) => { const { t, i18n } = useTranslation(); const appInfo = JSON.parse(localStorage.getItem('new_app_info') || '{}'); const { message } = App.useApp(); const [form] = Form.useForm(); const teamMode = Form.useWatch('team_mode', form); const router = useRouter(); const language = i18n.language === 'en'; // 获取工作模式列表 const { data, loading } = useRequest(async () => { const [_, res] = await apiInterceptors(getTeamMode()); return res ?? []; }); // 创建应用 const { run: createApp, loading: createLoading } = useRequest( async (params: CreateAppParams) => { if (type === 'edit') { return await apiInterceptors( updateApp({ app_code: appInfo?.app_code, language: 'zh', ...params, }), ); } else { return await apiInterceptors( addApp({ language: 'zh', ...params, }), ); } }, { manual: true, onSuccess: async res => { const [error, data] = res; if (!error) { if (type === 'edit') { const [, res] = await apiInterceptors(getAppList({})); const curApp = res?.app_list?.find(item => item.app_code === appInfo?.app_code); localStorage.setItem('new_app_info', JSON.stringify({ ...curApp, isEdit: true })); message.success(t('Update_successfully')); } else { message.success(t('Create_successfully')); localStorage.setItem('new_app_info', JSON.stringify(data)); router.push(`/construct/app/extra`); } } else { message.error(type === 'edit' ? t('Update_failure') : t('Create_failure')); } await refresh?.(); onCancel(); }, }, ); const mode = useMemo(() => { return data?.filter(item => item.value === appInfo?.team_mode)?.[0]; }, [appInfo, data]); if (loading) { return null; } return ( { form.validateFields().then(async (values: any) => { await createApp({ app_name: values?.app_name, app_describe: values?.app_describe, team_mode: values?.team_mode?.value, }); }); }} onCancel={onCancel} centered={true} >
{/* */}
{language ? teamMode?.name_en : teamMode?.name_cn}
{language ? teamMode?.remark_en : teamMode?.remark}
); }; export default CreateAppModal;