| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import React, { useState, useEffect } from 'react'; |
| import { Modal, Typography, Input } from '@douyinfe/semi-ui'; |
|
|
| const { Text } = Typography; |
|
|
| const ConfirmationDialog = ({ |
| visible, |
| onCancel, |
| onConfirm, |
| title, |
| type = 'danger', |
| deployment, |
| t, |
| loading = false, |
| }) => { |
| const [confirmText, setConfirmText] = useState(''); |
|
|
| useEffect(() => { |
| if (!visible) { |
| setConfirmText(''); |
| } |
| }, [visible]); |
|
|
| const requiredText = deployment?.container_name || deployment?.id || ''; |
| const isConfirmed = Boolean(requiredText) && confirmText === requiredText; |
|
|
| const handleCancel = () => { |
| setConfirmText(''); |
| onCancel(); |
| }; |
|
|
| const handleConfirm = () => { |
| if (isConfirmed) { |
| onConfirm(); |
| handleCancel(); |
| } |
| }; |
|
|
| return ( |
| <Modal |
| title={title} |
| visible={visible} |
| onCancel={handleCancel} |
| onOk={handleConfirm} |
| okText={t('确认')} |
| cancelText={t('取消')} |
| okButtonProps={{ |
| disabled: !isConfirmed, |
| type: type === 'danger' ? 'danger' : 'primary', |
| loading, |
| }} |
| width={480} |
| > |
| <div className='space-y-4'> |
| <Text type='danger' strong> |
| {t('此操作具有风险,请确认要继续执行')}。 |
| </Text> |
| <Text> |
| {t('请输入部署名称以完成二次确认')}: |
| <Text code className='ml-1'> |
| {requiredText || t('未知部署')} |
| </Text> |
| </Text> |
| <Input |
| value={confirmText} |
| onChange={setConfirmText} |
| placeholder={t('再次输入部署名称')} |
| autoFocus |
| /> |
| {!isConfirmed && confirmText && ( |
| <Text type='danger' size='small'> |
| {t('部署名称不匹配,请检查后重新输入')} |
| </Text> |
| )} |
| </div> |
| </Modal> |
| ); |
| }; |
|
|
| export default ConfirmationDialog; |
|
|