diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json
index e78fb7e..d4f0c4b 100644
--- a/api/.vscode/launch.json
+++ b/api/.vscode/launch.json
@@ -40,8 +40,10 @@
// 测试
// "--apiEmisUrl http://10.8.30.161:1111",
// "--apiEmisUrl http://10.8.30.161:31111/",
- // "--apiEmisUrl https://pepca-demo.anxinyun.cn/_api",
- "--apiEmisUrl http://localhost:14000",
+ "--apiEmisUrl https://pepca-demo.anxinyun.cn/_api",
+ // "--apiEmisUrl https://pep-ca.anxinyun.cn/_api",
+
+ // "--apiEmisUrl http://localhost:14000",
"--apiVcmpUrl http://localhost:4000",
"--apiIotAuth http://localhost:4200",
"--godUrl https://restapi.amap.com/v3",
@@ -106,6 +108,7 @@
"--confirmAlarmAnxinUserId 1",
"--vcmpAppId 5048b08d-c449-4d7f-b1ec-f741012aefe8",
"--vcmpAppSecret 5ba8c0ab-9fbd-4f07-9817-c48017c3cbad",
+ "--apiCrawUrl http://218.3.126.49:30555/v1" //设备升级接口
]
},
{
diff --git a/api/app/lib/controllers/firmwareUpgrade/index.js b/api/app/lib/controllers/firmwareUpgrade/index.js
new file mode 100644
index 0000000..1148272
--- /dev/null
+++ b/api/app/lib/controllers/firmwareUpgrade/index.js
@@ -0,0 +1,366 @@
+'use strict';
+const request = require('superagent');
+const moment = require('moment')
+const http = require('http');
+
+
+
+
+
+ const ApiTable = {
+ getFirmwares:'firmwareupgrade/getPkg',
+ firmwareUpgrade:'firmwareupgrade',
+ getThingMessages:'firmwareupgrade/getThingMessages',
+ distributeConfiguration:'firmwareupgrade/redisSet'
+}
+
+ //设备维护记录
+async function getDeviceType (ctx) {
+ try {
+ // const { models } = ctx.fs.dc
+ // const sequelize = ctx.fs.dc.ORM
+ const { clickHouse } = ctx.app.fs
+ const rlst = await clickHouse.iot.query(`
+ SELECT id,model FROM DeviceMeta
+ WHERE model in ('FS-YTSW','FS-YTDZ-GD','FS-iFWL-ZXSJ','ZSJ-iVW08','FS-Q90-NHB1-HC','FS-RTU-P4-SL','FS-RTU-SL','FS-V08','FS-M24','FS-LPWAN08')
+ `).toPromise()
+ ctx.body=rlst||[]
+ ctx.status=200
+ }catch(error){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `查询设备型号失败`
+ }
+ }
+}
+//查询结构物
+async function getStruc (ctx) {
+ try {
+ const { clickHouse } = ctx.app.fs
+ // const { models } = ctx.fs.dc
+ // const sequelize = ctx.fs.dc.ORM
+ const { pepProjectId, keywordTarget, keyword} = ctx.query
+ const { utils: {anxinStrucIdRange } } = ctx.app.fs
+ let anxinStruc = await anxinStrucIdRange({
+ ctx, pepProjectId, keywordTarget, keyword
+ })
+ // console.log('anxinStruc1',anxinStruc)
+ let thingIds=new Set()
+ if(anxinStruc&&anxinStruc.length){
+ anxinStruc.map(item=>thingIds.add(item.thingId))
+ }
+ let deviceType= thingIds.size ?
+ await clickHouse.iot.query(`
+ SELECT distinct dm.id id,dm.model model,dc.thingId thingId
+ FROM Device dc
+ INNER JOIN DeviceMeta dm
+ ON dm.id=dc.deviceMetaId
+ WHERE dc.thingId in (${[...thingIds].map(id => `'${id}'`).join(',')},'-000')`
+ ).toPromise() :[]
+ let rslt=[]
+ if(deviceType&&deviceType.length&&anxinStruc&&anxinStruc.length){
+ rslt= anxinStruc.map(item=>{
+ item.deviceType=deviceType.filter(child=>child.thingId===item.thingId)
+ return item
+ })
+ }
+// //返回数据结构示例
+// // [ {strucId: s.strucId,
+// // strucName: s.strucName,
+// // projectId: s.projectId,
+// // project: [{ id: s.projectId,}],
+// // pomsProject: [],
+// // deviceType:[{}]
+// // }]
+ ctx.body=rslt||[]
+ ctx.status=200
+ }catch(error){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `查询结构物以及设备类型失败`
+ }
+ }
+}
+
+async function getFirmwares (ctx) {
+ const query = ctx.query
+ // console.log('query1',query)
+ try{
+ const res=await ctx.app.fs.craw.get(ApiTable.getFirmwares,{query})
+ // console.log('666x1111',res)
+ let rslt=[]
+ if(res){
+ if( JSON.parse(res).msg){
+ JSON.parse(JSON.parse(res).msg)&&JSON.parse(JSON.parse(res).msg).length?JSON.parse(JSON.parse(res).msg).map(item=>{
+ // console.log('xxxx',item)
+ rslt.push(
+ {device_meta_id:item.device_meta_id,
+ deviceMetaName:item.device_meta_name,
+ versionNo:item.version,
+ firmwareName:item.filename,
+ filepath:item.filepath,
+ uploader:item.userid,
+ comment:item.comment,
+ uploadTime:moment(item.UpdatedTime).format('YYYY-MM-DD'),
+ fileObj:item.Bin
+ })
+ }):[]
+ }
+
+ }
+ ctx.body=rslt
+ ctx.status=200
+ }catch(error){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `查询固件包列表失败`
+ }
+ }
+}
+
+
+function getFileAsBuffer(remoteFileUrl) {
+ return new Promise((resolve, reject) => {
+ // 发起 HTTP 请求
+ http.get(remoteFileUrl, (response) => {
+ if (response.statusCode !== 200) {
+ reject(new Error(`HTTP请求失败,状态码:${response.statusCode}`));
+ return;
+ }
+ const buffers = [];
+ // 监听数据流
+ response.on('data', (chunk) => {
+ buffers.push(chunk);
+ });
+
+ // 数据传输完成
+ response.on('end', () => {
+ // 将文件数据合并为一个 Buffer
+ const fileData = Buffer.concat(buffers);
+ // 返回文件内容的 Buffer
+ resolve(fileData);
+ });
+
+ // 处理请求错误
+ response.on('error', (error) => {
+ reject(error);
+ });
+ });
+ });
+ }
+
+//增加/覆盖固件包
+async function firmwareUpgrades (ctx) {
+ try{
+ const {qiniu,version,tokenup,device_meta_id,wholeFile} = ctx.query
+ const {deviceMetaName,filePath,userId,fileObj,comment} = ctx.request.body
+ const url=qiniu+'/'+wholeFile
+ // 发起 GET 请求以获取文件
+ // console.log('url1',url)
+
+ // var data = fs.readFileSync(url, "utf-8");
+ // console.log('xxxx111',data)
+ request.get(url).responseType('blob').end((err, response) => {
+ if (err) {
+ console.error('Superagent request error:', err);
+ return;
+ }
+ if (response.ok) {
+ const blobData = response.body
+ // console.log('xxxxx1',response)
+ request.post('http://218.3.126.49:30555/v1/firmwareupgrade')
+ // .set('Content-Type','application/octet-stream')
+ .attach('file',blobData,fileObj.name||'')
+ .field('filePath', filePath||'')
+ .field('userId', userId||'')
+ .field('comment',comment||'')
+ .field('device_meta_name',deviceMetaName||'')
+ .query({ version,device_meta_id,token:tokenup})
+ .then((resolve, reject) => {
+ return (err, res) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(res);
+ }
+ };
+ })
+ }
+
+ })
+
+
+ // const ressss= await request.get(url).end(function(err, sourceResponse) {
+ // console.log('xxx2',sourceResponse)
+
+ // if (err) {
+ // console.error('文件获取失败:', err);
+ // return;
+ // }
+ // 从响应中获取文件内容
+ // const fileContent = sourceResponse.body;
+ // // 创建一个 POST 请求以上传文件
+ // request
+ // .post(ApiTable.firmwareUpgrade)
+ // .field('caption', 'My cats') // 其他表单字段
+ // .attach('file', fileContent, 'file.jpeg') // 将文件添加为表单字段
+ // .end(function(err, targetResponse) {
+ // if (err) {
+ // console.error('上传失败:', err);
+ // return;
+ // }
+
+ // // 处理目标服务器的响应
+ // console.log('上传成功');
+ // console.log(targetResponse.text);
+ // });
+// });
+// console.log('xxx1',ressss)
+ // console.log('query1111', ctx.query)
+ // const fileObj=await getFileAsBuffer(qiniu+'/'+wholeFile)
+ // console.log('xx1',fileObj)
+ // const file=qiniu+'/'+wholeFile
+ // console.log('xxxx666',deviceMetaName)
+ // const {files}=await parse(fileObjq)
+ // const file=files[0]
+ // const res=await ctx.app.fs.craw.post(ApiTable.firmwareUpgrade,
+ // {query:{version,token:tokenup,device_meta_id},
+ // data:{deviceMetaName,filePath,userId,fileObjq},
+ // header:{ 'Content-Type':'multipart/form-data'}})
+
+
+ // const formData = new FormData(ApiTable.firmwareUpgrade,{query:{version,token:tokenup,device_meta_id},data:{deviceMetaName,filePath,userId,file},header:{
+ // 'Content-Type':'multipart/form-data; boundary=--------------------------033155845889797072451758'
+ // }});
+ // // 添加普通字段到 FormData
+ // // formData.append('device_meta_name', device_meta_name);
+ // // formData.append('filePath', filePath);
+ // // formData.append('userId', userId)
+ // // formData.append('file', fileObj);
+ // // console.log('fileObj',formData)
+ // // const body= ctx.request.body
+ // // const fileData = await getFileAsBase64(qiniu+'/'+wholeFile);
+ // // const res=await ctx.app.fs.craw.post1(ApiTable.firmwareUpgrade,userId,filePath,{query:{version:version,token:tokenup,device_meta_id:device_meta_id},data:fileObj})
+ ctx.body={}
+ ctx.status=200
+ }catch(error){
+ // console.log('xx1111',error)
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `增加/覆盖固件包失败`
+ }
+ }
+
+
+}
+
+
+async function deleteFirmware(ctx){
+ const {version,device_meta_id,tokenup}=ctx.query
+ try{
+ await ctx.app.fs.craw.delete(ApiTable.firmwareUpgrade,{query:{version,device_meta_id,token:tokenup}})
+ ctx.status=204
+ }catch(eror){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `删除固件包失败`
+ }
+}
+}
+
+
+async function getThingMessages(ctx){
+ try{
+ const {thingIds,device_meta_id,searchVal}=ctx.query
+ const res= await ctx.app.fs.craw.get(ApiTable.getThingMessages,{query:{thingIds,device_meta_id}})
+ // console.log('xxxxxx',res)
+ let rslt=[]
+ if(res){
+ JSON.parse(res).data&&JSON.parse(res).data.length?JSON.parse(res).data.map(item=>{
+ if( item.devices&& item.devices.length){
+ item.devices.map(child=>{
+ // console.log('childx',child)
+ rslt.push({
+ key:child.id,
+ thingId:item.thingId,
+ devicemetaId:child.deviceMetaId||'',
+ deviceType:JSON.parse(child.properties).productType||'',
+ deviceName:child.name||'',
+ firmwareName:child.fileName||'',
+ firmwareNo:child.updateVersion||'',
+ status:child.updateState||'',
+ updatePercentage:child.updatePercentage||'',
+ switchStatus:JSON.parse(child.properties).switch||false,
+ deviceId:child.id
+ })
+ // console.log('xxxx2',child.properties)
+ // console.log('xxxx2',child)
+
+ })
+ }
+
+ // console.log('xxxx1',item)
+
+ }):[]
+
+ }
+ let result
+ if(searchVal&&rslt&&rslt.length){
+ result= rslt.filter(item=>item.deviceName===searchVal)
+ }
+ if(!searchVal){
+ result=rslt
+ }
+ ctx.body=result
+ ctx.status=200
+ }catch(error){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `查询结构物状态失败`
+ }
+ }
+}
+
+async function distributeConfiguration(ctx){
+ try{
+ const {version,device_meta_id,tokenup}=ctx.query
+ const res= await ctx.app.fs.craw.post(ApiTable.distributeConfiguration,{query:{version,device_meta_id,token:tokenup},data:JSON.stringify(ctx.request.body)})
+ if(res){
+ ctx.body=JSON.parse(res)
+ ctx.status=200
+ }else{
+ ctx.status=400
+ ctx.body = {
+ message: `下发配置失败`
+ }
+ }
+ }catch(error){
+ ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`)
+ ctx.status = 400
+ ctx.body = {
+ message: `下发配置失败`
+ }
+ }
+
+
+
+
+}
+
+
+
+module.exports = {
+ getDeviceType,
+ getStruc,
+ getFirmwares,
+ firmwareUpgrades,
+ deleteFirmware,
+ getThingMessages,
+ distributeConfiguration
+};
\ No newline at end of file
diff --git a/api/app/lib/routes/firmwareUpgrade/index.js b/api/app/lib/routes/firmwareUpgrade/index.js
new file mode 100644
index 0000000..d91ead1
--- /dev/null
+++ b/api/app/lib/routes/firmwareUpgrade/index.js
@@ -0,0 +1,29 @@
+'use strict';
+
+const firmwareUpgrade = require('../../controllers/firmwareUpgrade');
+
+module.exports = function (app, router, opts) {
+ app.fs.api.logAttr['GET/deviceType'] = { content: '获取设备型号', visible: true }
+ router.get('/deviceType', firmwareUpgrade.getDeviceType)
+
+ app.fs.api.logAttr['GET/structure'] = { content: '获取结构物相关', visible: true }
+ router.get('/structure', firmwareUpgrade.getStruc)
+
+ app.fs.api.logAttr['GET/firmware'] = { content: '获取固件包列表', visible: true }
+ router.get('/firmware', firmwareUpgrade.getFirmwares)
+
+ // app.fs.api.logAttr['POST/upgradeFirmware'] = { content: '增加/覆盖固件包', visible: true }
+ // router.post('/upgradeFirmware', firmwareUpgrade.firmwareUpgrades)
+
+ app.fs.api.logAttr['DELETE/deleteFirmware'] = { content: '删除固件包', visible: true }
+ router.delete('/deleteFirmware', firmwareUpgrade.deleteFirmware)
+
+ app.fs.api.logAttr['GET/getThingMessages'] = { content: '获取设备信息', visible: true }
+ router.get('/getThingMessages', firmwareUpgrade.getThingMessages)
+
+ app.fs.api.logAttr['POST/distributeConfiguration'] = { content: '下发配置(单个或批量)', visible: true }
+ router.post('/distributeConfiguration', firmwareUpgrade.distributeConfiguration)
+
+
+
+}
\ No newline at end of file
diff --git a/api/app/lib/utils/dataRange.js b/api/app/lib/utils/dataRange.js
index e6cbfcb..7c399f3 100644
--- a/api/app/lib/utils/dataRange.js
+++ b/api/app/lib/utils/dataRange.js
@@ -11,7 +11,7 @@ module.exports = function (app, opts) {
return role.some(r => r == 'SuperAdmin' || r == 'admin')
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
- }
+ }
}
async function pomsWithPepRangeParams ({ ctx, pepProjectId, keywordTarget, keyword }) {
@@ -90,6 +90,7 @@ module.exports = function (app, opts) {
async function anxinStrucIdRange ({ ctx, pepProjectId, keywordTarget, keyword }) {
const { clickHouse } = ctx.app.fs
+
const { pepProjectRes, bindRes, } = await pomsWithPepRangeParams({ ctx, pepProjectId, keywordTarget, keyword })
// 获取不重复的 安心云项目 id
@@ -124,6 +125,7 @@ module.exports = function (app, opts) {
t_project.id AS projectId,
t_structure.id AS strucId,
t_structure.name AS strucName,
+ t_structure.iota_thing_id as thingId,
project_state
FROM
t_project
@@ -175,7 +177,8 @@ module.exports = function (app, opts) {
project: [{
id: s.projectId,
}],
- pomsProject: []
+ pomsProject: [],
+ thingId:s.thingId
}
undelStruc.push(corStruc)
}
diff --git a/api/config.js b/api/config.js
index d8b3d7a..327a8cd 100644
--- a/api/config.js
+++ b/api/config.js
@@ -61,6 +61,9 @@ args.option('caiyunKey', '彩云天气 apiKey');
args.option('vcmpAppId', '视频平台 应用 id')
args.option('vcmpAppSecret', '视频平台 应用秘钥')
+//设备升级
+args.option('apiCrawUrl', '设备升级')
+
const flags = args.parse(process.argv);
const POMS_DB = process.env.POMS_DB || flags.pg;
@@ -90,6 +93,9 @@ const API_EMIS_URL = process.env.API_EMIS_URL || flags.apiEmisUrl;
const API_VCMP_URL = process.env.API_VCMP_URL || flags.apiVcmpUrl;
// iot鉴权平台 api
const API_IOT_AUTH = process.env.API_IOT_AUTH || flags.apiIotAuth;
+//设备升级
+const API_CRAW_URL = process.env.API_CRAW_URL || flags.apiCrawUrl;
+
// 高德地图的参数
const GOD_URL = process.env.GOD_URL || flags.godUrl || 'https://restapi.amap.com/v3';
@@ -153,6 +159,7 @@ const requireParams = {
// CLICKHOUST_CAM_WORKFLOW,
CONFIRM_ALARM_ANXIN_USER_ID,
VCMP_APP_ID, VCMP_APP_SECRET,
+ API_CRAW_URL
}
Object.keys(requireParams).forEach(key => {
@@ -260,6 +267,10 @@ const product = {
pssaRequest: [{// name 会作为一个 request 出现在 ctx.app.fs
name: 'axyRequest',
root: API_ANXINYUN_URL
+ },{
+ name:'craw',
+ root:API_CRAW_URL,
+ dataWord:'text'
}, {
name: 'emisRequest',
root: API_EMIS_URL
diff --git a/web/client/src/layout/actions/global.js b/web/client/src/layout/actions/global.js
index a53555b..0967589 100644
--- a/web/client/src/layout/actions/global.js
+++ b/web/client/src/layout/actions/global.js
@@ -50,6 +50,7 @@ export function initApiRoot () {
qiniu: res.qiniu,
webEmis: res.webEmis,
webOa: res.webOa,
+ crawapi:res.crawapi
}
})
});
diff --git a/web/client/src/layout/reducers/global.js b/web/client/src/layout/reducers/global.js
index 84be4a5..40e847c 100644
--- a/web/client/src/layout/reducers/global.js
+++ b/web/client/src/layout/reducers/global.js
@@ -20,6 +20,7 @@ function global (state = {
pomsEs: '',
pomsNotebook: '',
dcWeb: '',
+ crawapi:'',
qiniu: {}
}, action) {
const payload = action.payload;
@@ -52,6 +53,7 @@ function global (state = {
qiniu: payload.qiniu,
webEmis: payload.webEmis,
webOa: payload.webOa,
+ crawapi:payload.crawapi
}).toJS();
case PEPPROJECTID:
return Immutable.fromJS(state).merge({
diff --git a/web/client/src/sections/service/actions/firmwareUpgrade.js b/web/client/src/sections/service/actions/firmwareUpgrade.js
new file mode 100644
index 0000000..0910b66
--- /dev/null
+++ b/web/client/src/sections/service/actions/firmwareUpgrade.js
@@ -0,0 +1,103 @@
+'use strict';
+
+import { ApiTable, basicAction } from '$utils'
+
+export function getDeviceType(query) { //获取设备型号
+ return dispatch => basicAction({
+ type: 'get',
+ dispatch: dispatch,
+ query,
+ actionType: 'GET_DEVICE_TYPE',
+ url: `${ApiTable.getDeviceType}`,
+ msg: { option: '获取设备型号' },
+ reducer: {
+ name: "deviceType",
+ params: { noClear: true }
+ }
+ });
+}
+
+export function getStruc(query) { //获取结构物以及设备类型
+ return dispatch => basicAction({
+ type: 'get',
+ dispatch: dispatch,
+ query,
+ actionType: 'GET_STRUC',
+ url: `${ApiTable.getStruc}`,
+ msg: { option: '获取结构物以及设备类型' },
+ reducer: {
+ name: "structAndDeviceType",
+ params: { noClear: true }
+ }
+ });
+}
+
+export function getFirmware(query) { //获取固件包
+ return dispatch => basicAction({
+ type: 'get',
+ dispatch: dispatch,
+ query,
+ actionType: 'GET_FIRMWARE',
+ url: `${ApiTable.getFirmware}`,
+ msg: { option: '获取固件包' },
+ reducer: {
+ name: "firmware",
+ params: { noClear: true }
+ }
+ });
+}
+
+
+export function upgradeFirmware(query,data) { //增加/覆盖固件包
+ return dispatch => basicAction({
+ type: 'post',
+ dispatch: dispatch,
+ query,
+ data,
+ actionType: 'UPGRADE_FIRMWARE',
+ url: `${ApiTable.upgradeFirmware}`,
+ msg: { option: '增加/覆盖固件包' },
+
+ });
+}
+
+
+export function deleteFirmware(query) { //删除固件包
+ return dispatch => basicAction({
+ type: 'delete',
+ dispatch: dispatch,
+ query,
+ actionType: 'DELETE_FIRMWARE',
+ url: `${ApiTable.deleteFirmware}`,
+ msg: { option: '删除固件包' },
+
+ });
+}
+
+
+export function getThingMessages(query) { //获取固件包信息
+ return dispatch => basicAction({
+ type: 'get',
+ dispatch: dispatch,
+ query,
+ actionType: 'GET_THING_MESSAGES',
+ url: `${ApiTable.getThingMessages}`,
+ msg: { option: '获取设备信息' },
+
+ });
+}
+
+export function distributeConfiguration(query,data) { //下发配置
+ return dispatch => basicAction({
+ type: 'post',
+ dispatch: dispatch,
+ query,
+ data,
+ actionType: 'DISTRIBUTE_CONNFIGURATION',
+ url: `${ApiTable.distributeConfiguration}`,
+ msg: { option: '下发配置'},
+
+ });
+}
+
+
diff --git a/web/client/src/sections/service/actions/index.js b/web/client/src/sections/service/actions/index.js
index 5e6815f..aa913ce 100644
--- a/web/client/src/sections/service/actions/index.js
+++ b/web/client/src/sections/service/actions/index.js
@@ -4,6 +4,7 @@ import * as emPush from './emPush'
import * as redcord from './record'
import * as maintenancePlan from './maintenancePlan'
import * as equipment from './equipment'
+import * as firmwareUpgrade from './firmwareUpgrade'
export default {
- ...emPush, ...redcord, ...maintenancePlan, ...equipment
+ ...emPush, ...redcord, ...maintenancePlan, ...equipment,...firmwareUpgrade
}
\ No newline at end of file
diff --git a/web/client/src/sections/service/components/addFirmwareModal.jsx b/web/client/src/sections/service/components/addFirmwareModal.jsx
new file mode 100644
index 0000000..313fa71
--- /dev/null
+++ b/web/client/src/sections/service/components/addFirmwareModal.jsx
@@ -0,0 +1,152 @@
+import React, { useState, useEffect, useRef } from 'react'
+import { connect } from 'react-redux';
+import moment from 'moment'
+import { Button, Table, Modal, Form,Notification,Upload } from '@douyinfe/semi-ui';
+import { IconUpload } 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 {service}=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(service.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(service.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,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){
+ setRemoveFlag(false)
+ onCancel()
+ }else{
+ console.error('Superagent request failed:');
+
+ }
+ })
+
+
+
+ })
+ }
+
+ // 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 <>
+