运维服务中台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

159 lines
6.6 KiB

import React, { useState, useEffect, useRef } from 'react'
import { connect } from 'react-redux';
import moment from 'moment'
import { Button, Table, Modal, Form,Notification,Upload,Toast } from '@douyinfe/semi-ui';
import { IconUpload,IconVigoLogo } from '@douyinfe/semi-icons';
import request from 'superagent';
const AddFirmwareModal = (props) => {
const {modalVis,onCancel,crawapi,recordRow,actions,dispatch,qiniu} =props
const api = useRef();
const {domain}=qiniu //七牛服务器地址
const {firmwareUpgrade}=actions
const [uploadData, setUploadData] = useState({})
const [options,setOptions]=useState([])//设备类型的下拉选项
const [fileObj,setFileObj]=useState({})//文件对象
const [fileUrl,setFileUrl]=useState()//文件地址
const userId = JSON.parse(sessionStorage.getItem('pomsUser'))?.id
const [removeFlag,setRemoveFlag]=useState(false)//文件是否清除过
useEffect(()=>{
//获取设备类型
dispatch(firmwareUpgrade.getDeviceType()).then((res) => {
setOptions( res.payload.data?.map(item=> {
return {
label:item.model,
value:item.id
}
}))
})
},[])
// console.log('xxxx1111',recordRow)
// console.log('xxxx11112',fileUrl)
const okHandler= ()=>{
// console.log('fileObj',fileObj)
api.current.validate().then(async (res)=>{
// console.log('ressss',res)
// const query = {
// version:res?.versionNo,
// qiniu:domain,
// device_meta_id: res?.deviceName,
// tokenup: '22767e1f-db8d-4a1d-87d4-56347cf21247',
// wholeFile:fileUrl,
// }
// const body={
// filePath:fileUrl,
// userId:userId,
// comment:res?.remark,
// deviceMetaName:options?.find(item=>item.value===res?.deviceName)?.label,
// fileObj:fileObj
// }
// dispatch(firmwareUpgrade.upgradeFirmware(query,body)).then(res=>{
// })
const responseData=await request.get(qiniu+'/'+fileUrl).responseType('blob')
const blobData = responseData.body;
request.post(crawapi+'/firmwareupgrade')
// .set('Content-Type','application/octet-stream')
.attach('file',blobData,removeFlag?fileObj.name:recordRow?recordRow.firmwareName:fileObj.name)
.field('filePath',removeFlag?fileUrl:recordRow?recordRow.filepath:fileUrl)
.field('userId', userId||'')
.field('comment',res?.remark||'')
.field('device_meta_name', options?.find(item=>item.value===res?.deviceName)?.label||'')
.query({ version:res?.versionNo,device_meta_id: res?.deviceName,token:'22767e1f-db8d-4a1d-87d4-56347cf21247'})
.end((err, response) => {
if(response?.ok){
Notification.success({ title: recordRow?'编辑固件包':'新增固件包',
content: recordRow?'编辑成功':'新增成功',
duration: 3,
})
setRemoveFlag(false)
onCancel()
}else{
console.error('Superagent request failed:');
Notification.error({ title: recordRow?'编辑固件包':'新增固件包',
content: recordRow?'编辑失败':'新增失败',
duration: 3,
})
}
})
})
}
// function readFileAsBlob(file) {
// return new Promise((resolve, reject) => {
// const reader = new FileReader();
// reader.onload = () => {
// const blob = new Blob([reader.result], { type: file.type });
// resolve(blob);
// };
// reader.onerror = (error) => {
// reject(error);
// };
// reader.readAsArrayBuffer(file);
// });
// }
return <>
<Modal visible={modalVis} onCancel={onCancel} title='固件上传' onOk={okHandler} >
<Form initValues={{
'firmwareName':recordRow?.firmwareName,
'deviceName':recordRow?.device_meta_id,
'versionNo':recordRow?.versionNo,
'files':recordRow?[{ url: `${domain}/${recordRow?.filepath}`, name: recordRow?.firmwareName }]:[],
'remark':recordRow?.remark
}} getFormApi={formApi => api.current = formApi} labelCol={{ span: 7,offset:1}} wrapperCol={{span: 15,offset:1}} labelPosition='left' >
<Form.Input field='firmwareName' label='固件版本名称:' style={{with:'80%'}} rules={[{ required: true, message: '固件版本名称必填' }]}></Form.Input>
<Form.Select field='deviceName' label='设备型号:' placeholder='请选择设备型号' optionList={options} rules={[{ required: true, message: '设备型号必填' }]}></Form.Select>
<Form.Input field='versionNo' label='版本号:' rules={[{ required: true, message: '版本号必填' }]}></Form.Input>
<Form.Upload limit={1}
action={`/_upload/attachments`}
field='files' label='文件上传'
rules={[{ required: true, message: '文件上传必填' }]}
onRemove={() => {
setUploadData({})
setRemoveFlag(true)
}}
onSuccess={ async(responseBody, file,all) => {
// console.log('file111',file)
setFileObj(file)
setFileUrl(responseBody?.uploaded)
setUploadData({
name: file.name,
size: file.size,
url: responseBody?.uploaded,
uploadTime: moment().format("YYYY-MM-DD HH:mm:ss")
})
}}
>
<Button icon={<IconUpload />} theme="light">
点击上传
</Button>
</Form.Upload>
<Form.TextArea field='remark' label='备注:' placeholder='请输入项目介绍'></Form.TextArea>
</Form>
</Modal>
</>
}
function mapStateToProps (state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
crawapi: global.crawapi,
qiniu:global.qiniu,
};
}
export default connect(mapStateToProps)(AddFirmwareModal)