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