/** * Copyright (c) OpenSpug Organization. https://github.com/openspug/spug * Copyright (c) * Released under the AGPL-3.0 License. */ import React, { useState, useEffect } from 'react'; import { observer } from 'mobx-react'; import { UploadOutlined } from '@ant-design/icons'; import { Modal, Form, Input, Upload, DatePicker, message, Button } from 'antd'; import HostSelector from './HostSelector'; import { http, clsNames, X_TOKEN } from 'libs'; import styles from './index.module.less'; import store from './store'; import lds from 'lodash'; export default observer(function () { const [form] = Form.useForm(); const [visible, setVisible] = useState(false); const [loading, setLoading] = useState(false); const [uploading, setUploading] = useState(false); const [fileList, setFileList] = useState([]); const [host_ids, setHostIds] = useState([]); const [plan, setPlan] = useState(store.record.plan); useEffect(() => { const {app_host_ids, host_ids, extra} = store.record; setHostIds(lds.clone(host_ids || app_host_ids)); if (store.record.extra) setFileList([{...extra, uid: '0'}]) }, []) function handleSubmit() { if (host_ids.length === 0) { return message.error('请至少选择一个要发布的目标主机') } setLoading(true); const formData = form.getFieldsValue(); formData['id'] = store.record.id; formData['host_ids'] = host_ids; formData['type'] = store.record.type; formData['deploy_id'] = store.record.deploy_id; if (plan) formData.plan = plan.format('YYYY-MM-DD HH:mm:00'); if (fileList.length > 0) formData['extra'] = lds.pick(fileList[0], ['path', 'name']); http.post('/api/deploy/request/ext2/', formData) .then(res => { message.success('操作成功'); store.ext2Visible = false; store.fetchRecords() }, () => setLoading(false)) } function handleUploadChange(v) { if (v.fileList.length === 0) { setFileList([]) } } function handleUpload(file, fileList) { setUploading(true); const formData = new FormData(); formData.append('file', file); formData.append('deploy_id', store.record.deploy_id); http.post('/api/deploy/request/upload/', formData, {timeout: 300000}) .then(res => { file.path = res; setFileList([file]) }) .finally(() => setUploading(false)) return false } const {app_host_ids, deploy_id, type, require_upload} = store.record; return ( store.ext2Visible = false} confirmLoading={loading} onOk={handleSubmit}>
{require_upload && ( )} {host_ids.length > 0 && ( 已选择 {host_ids.length} 台(可选{app_host_ids.length}) )} {type !== '2' && ( {plan ? 大约 {plan.fromNow()} : null} )}
{visible && setVisible(false)} onOk={ids => setHostIds(ids)}/>}
) })