export default function Email()

in frontend/src/routes/settings/global/routes/email/index.tsx [47:160]


export default function Email() {
    const { loading, fetchGlobalSettings } = useContext(GlobalSettingsContext);
    const { settings, changeSettingItem } = useSettings<SettingKeysTypes>(SETTING_KEYS as any);
    const {
        buttonLoading,
        modalVisible,
        setModalVisible,
        isChanged,
        setIsChanged,
        handleSaveEmailSettings,
        handleDeleteEmailSettings,
        handleSendTestEmail,
    } = useEmailSettings(settings, fetchGlobalSettings);

    const buttonDisabled =
        !settings['email-smtp-host']?.value ||
        !settings['email-smtp-port']?.value ||
        !settings['email-from-address']?.value ||
        settings['email-smtp-security']?.value == null;

    const sendEmailButtonVisible = !isChanged && settings['email-from-address']?.value;

    const changeEmailSettingItem = (key: SettingKeysTypes) => (e: any) => {
        setIsChanged(true);
        changeSettingItem(key, undefined, false)(e);
    };

    return (
        <LoadingLayout loading={loading} wrapperStyle={LOADING_WRAPPER_STYLE}>
            <SettingItemLayout title="SMTP地址" description={settings['email-smtp-host']?.description}>
                <Input
                    style={{ width: 400 }}
                    value={settings['email-smtp-host']?.value}
                    placeholder="请输入SMTP地址"
                    defaultValue={settings['email-smtp-host']?.default}
                    onChange={changeEmailSettingItem('email-smtp-host')}
                />
            </SettingItemLayout>
            <SettingItemLayout title="SMTP端口" description={settings['email-smtp-port']?.description}>
                <InputNumber
                    style={{ width: 400 }}
                    value={getValueFromJson(settings['email-smtp-port']?.value)}
                    placeholder="请输入SMTP端口"
                    defaultValue={settings['email-smtp-port']?.default}
                    onChange={v => changeEmailSettingItem('email-smtp-port')(v + '')}
                />
            </SettingItemLayout>
            <SettingItemLayout title="SMTP安全">
                <Radio.Group
                    value={settings['email-smtp-security']?.value}
                    defaultValue={settings['email-smtp-security']?.default}
                    onChange={changeEmailSettingItem('email-smtp-security')}
                >
                    {SMTP_SECURITY_OPTIONS.map(options => (
                        <Radio value={options.value} key={options.value}>
                            {options.label}
                        </Radio>
                    ))}
                </Radio.Group>
            </SettingItemLayout>
            <SettingItemLayout title="SMTP用户名">
                <Input
                    style={{ width: 400 }}
                    value={settings['email-smtp-username']?.value}
                    placeholder="请输入SMTP用户名"
                    defaultValue={settings['email-smtp-username']?.default}
                    onChange={changeEmailSettingItem('email-smtp-username')}
                />
            </SettingItemLayout>
            <SettingItemLayout title="SMTP密码">
                <Input.Password
                    style={{ width: 400 }}
                    value={settings['email-smtp-password']?.value}
                    placeholder="请输入SMTP密码"
                    defaultValue={settings['email-smtp-password']?.default}
                    onChange={changeEmailSettingItem('email-smtp-password')}
                    autoComplete="new-password"
                />
            </SettingItemLayout>
            <SettingItemLayout title="选择地址" description={settings['email-from-address']?.description}>
                <Input
                    style={{ width: 400 }}
                    value={settings['email-from-address']?.value}
                    placeholder="请输入邮箱地址"
                    defaultValue={settings['email-from-address']?.default}
                    onChange={changeEmailSettingItem('email-from-address')}
                />
            </SettingItemLayout>
            <EmailModal
                visible={modalVisible}
                onOk={handleSendTestEmail}
                confirmLoading={buttonLoading}
                onCancel={() => {
                    setModalVisible(false);
                }}
            />
            <Row gutter={5}>
                <Col>
                    <Button
                        disabled={buttonDisabled}
                        type="primary"
                        loading={buttonLoading}
                        onClick={handleSaveEmailSettings}
                    >
                        保存修改
                    </Button>
                </Col>
                {sendEmailButtonVisible && (
                    <Col>
                        <Button loading={buttonLoading} onClick={() => setModalVisible(true)}>
                            发送邮件测试
                        </Button>
                    </Col>
                )}