{
}
setAllItems(nextItems)
setHeaderItems(topItems)
+ console.log('topItems',topItems)
if (lastSelectedKeys) {//如果有缓存
for (let i = 0; i < nextItems.length; i++) {
if (JSON.parse(lastSelectedKeys)[0] == nextItems[i].itemKey) {
diff --git a/web/client/src/sections/firmwareUpgrade/actions/firmwareUpgrade.js b/web/client/src/sections/firmwareUpgrade/actions/firmwareUpgrade.js
new file mode 100644
index 0000000..0910b66
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/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/firmwareUpgrade/actions/index.js b/web/client/src/sections/firmwareUpgrade/actions/index.js
new file mode 100644
index 0000000..227c849
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/actions/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+
+import * as firmwareUpgrade from './firmwareUpgrade'
+export default {
+ ...firmwareUpgrade
+}
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/components/addFirmwareModal.jsx b/web/client/src/sections/firmwareUpgrade/components/addFirmwareModal.jsx
new file mode 100644
index 0000000..2a6c450
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/components/addFirmwareModal.jsx
@@ -0,0 +1,159 @@
+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 <>
+
+
+
+
+
+ {
+ 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")
+ })
+ }}
+ >
+ } theme="light">
+ 点击上传
+
+
+
+
+
+
+
+
+ >
+}
+
+
+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)
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/components/firmwareListModal.jsx b/web/client/src/sections/firmwareUpgrade/components/firmwareListModal.jsx
new file mode 100644
index 0000000..200bb49
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/components/firmwareListModal.jsx
@@ -0,0 +1,86 @@
+import React, { useState, useEffect, useRef } from 'react'
+import { connect } from 'react-redux';
+import moment from 'moment'
+import { Button, Table, Modal, Form } from '@douyinfe/semi-ui';
+import { IconUpload } from '@douyinfe/semi-icons';
+
+
+const firmwareListModal = (props) => {
+ const {modalVis,onCancel,apiRoot,recordRow,versionData,vData,actions,dispatch} =props
+ const api = useRef();
+ const [uploadData, setUploadData] = useState({})
+ const [data,setData]=useState()
+ const {firmwareUpgrade}=actions
+ const okHandler=()=>{
+ api.current.validate().then((res)=>{
+ const query = {
+ version:res?.type,
+ device_meta_id:data[0]?.device_meta_id,
+ tokenup: '22767e1f-db8d-4a1d-87d4-56347cf21247',
+ }
+ const body=[{thing_id:data[0]?.thing_id,device_ids:data?.map(item=>item.deviceId)}]
+ dispatch(firmwareUpgrade.distributeConfiguration(query,body)).then((res)=>{
+ if(res.success) onCancel()
+
+ })
+
+ // console.log('rexxxx',res)
+ })
+ }
+
+useEffect(()=>{
+ // console.log('versionData',vData,versionData)
+if(recordRow&&recordRow.length&&versionData&&versionData.length&&vData&&vData.length){
+
+ //匹配设备id
+ const res= versionData?.filter(item=>recordRow?.some(p=>p.deviceId===item.deviceId))?.map(child=>{
+ return {
+ device_meta_id:child.devicemetaId,
+ deviceId:child.deviceId,
+ thing_id:child.thingId,
+ firmwareNo:child.firmwareNo,
+ firmwareName:child.firmwareName,
+ versionList:vData.filter(n=>n.device_meta_id==child.devicemetaId)
+ }
+ })
+
+ setData(res)
+}
+
+},[recordRow,versionData,vData])
+// console.log('recordRow1',recordRow,data)
+
+ return <>
+
+
+ {data&&data.length&&data[0].versionList&&data[0].versionList.length?
+ data[0].versionList.map((item,index)=>{`版本名称:${item.firmwareName}-版本号:${item.versionNo}`})
+ :''}
+
+
+
+
+
+
+ >
+}
+
+
+function mapStateToProps (state) {
+ const { auth, global } = state;
+ return {
+ user: auth.user,
+ actions: global.actions,
+ apiRoot: global.apiRoot
+
+ };
+ }
+
+export default connect(mapStateToProps)(firmwareListModal)
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/containers/deviceManagement.jsx b/web/client/src/sections/firmwareUpgrade/containers/deviceManagement.jsx
new file mode 100644
index 0000000..e163fb1
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/containers/deviceManagement.jsx
@@ -0,0 +1,246 @@
+import React, { useEffect, useState } from 'react';
+import { connect } from 'react-redux';
+import { Button, Table, Popconfirm, Pagination,Select,Input,Switch,Notification,Progress } from '@douyinfe/semi-ui';
+import moment from 'moment'
+import FirmwareListModal from '../components/firmwareListModal';
+
+
+const DeviceManagement = (props) => {
+ const {actions,dispatch,pepProjectId,user}=props
+ const {firmwareUpgrade}=actions
+ const [updataButtonDisabled,setUpdataButtonDisabled]=useState(true)//批量升级的按钮的显示与隐藏
+ const [firmwareModalVis,setFirmwareModalVis]=useState(false)
+ const [strucAndDeviceType,setStrucAndDeviceType]=useState([])//
+ const [struc,setStruc]=useState([])//
+ const [deviceType,setDeviceType]=useState([])//设备类型的optionList
+ const [data,setData]=useState([])//列表数据
+ const [thingIds,setThingIds]=useState([])//结构物id数组
+ const [defaultVal,setDefaultVal]=useState('')//设备类型id
+ const [thingId,setThingId]=useState()//单个结构物id
+ const [searchVal,setSearchVal]=useState()//搜索框值
+ const [recordRow,setRecordRow]=useState()
+ const [selectedRows,setSelectedRows]=useState([])//选择的key
+ const [selectdR,setSelectedR]=useState([])//选择行
+ const [vData,setVData]=useState([])//版本信息
+ const getData=(query)=>{
+ dispatch(firmwareUpgrade.getThingMessages(query)).then((res)=>{
+ if(res.success) {
+ setData(res.payload.data)
+ }
+
+ })
+ dispatch(firmwareUpgrade.getFirmware(query)).then(res=>{
+ if(res.success) setVData(res.payload.data)
+ })
+ }
+ useEffect(()=>{
+ //结构物和设备类型
+ dispatch(firmwareUpgrade.getStruc({pepProjectId})).then((res)=>{
+ if(res.success) {
+ setStrucAndDeviceType( res.payload.data)
+ setStruc( res.payload.data?.map(item=>{
+ return {label:item.strucName,value:item.thingId}
+ }))
+ setThingIds(res.payload.data?.map(item=>item.thingId)?.join(',')||'')
+ }
+
+ })
+ // console.log('xxxx111',user)
+ },[])
+ useEffect(()=>{
+ const query={thingIds}
+ getData(query)
+ },[thingIds])
+
+ const structChange =value => {
+ clearSelectedRows()
+ setUpdataButtonDisabled(true)
+ const deviceTypeList= strucAndDeviceType?.find(item=>item.thingId==value)?.deviceType?.map(child=>{
+ return {
+ label:child.model,
+ value:child.id
+ }
+ })||[]
+ setDefaultVal('')
+ // console.log('event',deviceTypeList)
+ setDeviceType(deviceTypeList)
+ setThingId(value)
+ const query={thingIds:value,device_meta_id:defaultVal}
+ getData(query)
+
+ };
+ const deviceTypeChange=value=>{
+ setUpdataButtonDisabled(true)
+ clearSelectedRows()
+ setDefaultVal(value)
+ const query={thingIds:thingId,device_meta_id:value}
+ getData(query)
+ // console.log(value,'event')
+ }
+ //清除结构物的逻辑
+ const clearHandler=()=>{
+ setUpdataButtonDisabled(true)
+ clearSelectedRows()
+ const query={thingIds}
+ getData(query)
+
+ }
+ //清楚设备类型的逻辑
+ const cleartypeHandler=()=>{
+ setUpdataButtonDisabled(true)
+ clearSelectedRows()
+ setDefaultVal(null)
+ const query={thingIds:thingId}
+ getData(query)
+ }
+ //搜索按钮的逻辑
+ const searchHandler=()=>{
+ if(!thingId&&!defaultVal){
+ const query={thingIds}
+ getData(query)
+ }else{
+ const query={thingIds:thingId,device_meta_id:defaultVal,searchVal}
+ getData(query)
+ }
+ }
+ const clearSelectedRows = () => {
+ setSelectedRows([]);
+ };
+ const rowSelection = {
+ selectedRowKeys: selectedRows, // 已选择的行的 keys
+ getCheckboxProps: record => ({
+ name: record.name,
+ }),
+
+ // onSelect: (record, selected) => {
+ // console.log(`select row: ${selected}`, record);
+ // },
+ onSelectAll: (selected, selectedRows) => {
+ setUpdataButtonDisabled(!selectedRows.every(item=>selectedRows[0]?.deviceType===item.deviceType))
+ },
+ onChange: (selectedRowKeys, selectedRows) => {
+ setSelectedR(selectedRows)
+ setSelectedRows(selectedRowKeys)
+ // console.log('xxxx',selectedRows)
+ //选择之后,清空选择
+ if(selectedRows&&selectedRows.length===0){
+ setUpdataButtonDisabled(true)
+ }
+ //选择很多的时候,如果有设备型号不对应的情况
+ if(selectedRows&&selectedRows.length>0){
+ setUpdataButtonDisabled(!selectedRows.every(item=>selectedRows[0].deviceType===item.deviceType))
+ }
+
+
+ },
+ };
+
+
+
+ let columns=[{
+ title: '序号',
+ render: (t, r, i) => {
+ return i + 1;
+ }
+ },{
+ title: '设备名称',
+ dataIndex: 'deviceName'
+ },{
+ title: '设备型号',
+ dataIndex: 'deviceType'
+ },
+ {
+ title: '固件名称',
+ dataIndex: 'firmwareName'
+ },
+ {
+ title: '固件版本号',
+ dataIndex: 'firmwareNo'
+ },
+ {
+ title: '升级状态',
+ render:(_,record)=>{
+ return record.status!=='未升级'&&record.status!=='升级成功'?:record.status
+ }
+ },
+ {
+ title: '升级开关状态',
+ dataIndex: 'switchStatus' ,
+ render:(_,record)=>{
+ return
+ }
+ },
+ {
+ title: '操作',
+ render:(_,record)=>{
+ return
+
+
+ }
+ }
+ ]
+return <>
+
+
+
+
设备管理
+
Device Management
+
+
+
+
+
{setSearchVal(e)}}>
+
+
+
+
+
+
{setFirmwareModalVis(false);setRecordRow(null)}}>
+
+
+>
+}
+
+function mapStateToProps (state) {
+ const { auth, global, getPush } = state;
+ return {
+ loading: getPush.isRequesting,
+ user: auth.user,
+ actions: global.actions,
+ pepProjectId:global.pepProjectId
+ };
+ }
+
+ export default connect(mapStateToProps)(DeviceManagement);
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/containers/firmwareLibrary.jsx b/web/client/src/sections/firmwareUpgrade/containers/firmwareLibrary.jsx
new file mode 100644
index 0000000..564eb48
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/containers/firmwareLibrary.jsx
@@ -0,0 +1,137 @@
+import React, { useEffect, useState } from 'react';
+import { connect } from 'react-redux';
+import { Button, Table, Popconfirm, Pagination,Input,Toast } from '@douyinfe/semi-ui';
+import moment from 'moment'
+import AddFirmwareModal from '../components/addFirmwareModal'
+
+
+
+const FirmwareLibrary = (props) => {
+ const {actions,dispatch}=props
+ const [modalVis,setModalVis]=useState(false)//添加固件弹框的显示与隐藏
+ const [recordRow,setRecordRow]=useState()
+ const [data,setData]=useState([])//列表数据
+ const [searchVal,setSearchVal]=useState('')//存储搜索框的值
+ const [users,setUsers]=useState([])//所有用户信息
+ const {service,firmwareUpgrade}=actions
+ // console.log(data,'data1111')
+ const getData=(query)=>{
+ dispatch(firmwareUpgrade.getFirmware(query)).then(res=>{
+ if(res.success)setData(res.payload.data)
+ })
+ }
+ useEffect(()=>{
+
+ //获得已上传的固件列表
+ getData()
+ //用户信息
+ dispatch(service.getOrganizationUsers()).then(res=>{
+ if(res.success) setUsers(res.payload.data)
+
+ })
+ },[])
+
+ const searchHandler=()=>{
+ const query={version:searchVal,device_meta_name:searchVal}
+ getData(query)
+
+ }
+ const onConfirm = (record) => {
+ const query={version:record?.versionNo,device_meta_id:record?.device_meta_id,tokenup:'22767e1f-db8d-4a1d-87d4-56347cf21247'}
+ dispatch(firmwareUpgrade.deleteFirmware(query)).then(res=>{
+ if(res.success) {
+ getData()
+ // Toast.success('删除成功');
+
+ }
+
+ })
+ };
+
+ const onCancel = () => {
+ Toast.warning('取消删除');
+ };
+let columns=[{
+ title: '序号',
+ render: (t, r, i) => {
+ return i + 1;
+ }
+},{
+ title: '固件名称',
+ dataIndex: 'firmwareName'
+},{
+ title: '设备型号',
+ dataIndex: 'deviceMetaName'
+},
+{
+ title: '版本号',
+ dataIndex: 'versionNo'
+},
+{
+ title: '上传时间',
+ dataIndex: 'uploadTime'
+},
+{
+ title: '上传人',
+ render:(_,record)=>{
+ return {users?.find(item=>item.id==record.uploader)?.name||''}
+}
+},
+{
+ title: '备注',
+ dataIndex: 'comment'
+},
+{
+ title: '操作',
+ render:(_,record)=>{
+ return onConfirm(record)}
+ onCancel={onCancel}
+ >
+
+
+
+
+ }
+}
+
+
+
+
+]
+ return <>
+
+
+
+
固件库
+
Firmware Library
+
+
{setSearchVal(e)}}>
+
+
+
+
+
+
{getData({version:searchVal});setModalVis(false);setRecordRow(null)}}>
+
+
+ >
+
+
+}
+
+function mapStateToProps (state) {
+ const { auth, global, getPush } = state;
+ // console.log('state1',state)
+ return {
+ loading: getPush.isRequesting,
+ user: auth.user,
+ actions: global.actions,
+ };
+ }
+
+ export default connect(mapStateToProps)(FirmwareLibrary);
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/containers/index.js b/web/client/src/sections/firmwareUpgrade/containers/index.js
new file mode 100644
index 0000000..c83a49d
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/containers/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+import FirmwareLibrary from './firmwareLibrary'
+import DeviceManagement from './deviceManagement';
+export { DeviceManagement,FirmwareLibrary };
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/index.js b/web/client/src/sections/firmwareUpgrade/index.js
new file mode 100644
index 0000000..4acbd06
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/index.js
@@ -0,0 +1,15 @@
+'use strict';
+
+import reducers from './reducers';
+import routes from './routes';
+import actions from './actions';
+import { getNavItem } from './nav-item';
+
+export default {
+ key: 'firmwareUpgrade',
+ name: '固件升级',
+ reducers: reducers,
+ routes: routes,
+ actions: actions,
+ getNavItem: getNavItem
+};
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/nav-item.jsx b/web/client/src/sections/firmwareUpgrade/nav-item.jsx
new file mode 100644
index 0000000..5d2f255
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/nav-item.jsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { IconCode } from '@douyinfe/semi-icons';
+
+export function getNavItem (user, dispatch) {
+ return (
+ [
+ {
+ itemKey: 'device',
+ text: '设备',
+ icon: ,
+ items: [
+ {
+ itemKey: 'firmwareUpgrade',
+ text: '固件库',
+ icon: ,
+ to: '/device/firmwareUpgrade/FirmwareLibrary',
+ items: [{ itemKey:'FirmwareLibrary',to:'/device/firmwareUpgrade/FirmwareLibrary',text:'固件库'},
+ { itemKey:'DeviceManagement',to:'/device/firmwareUpgrade/DeviceManagement',text:'设备管理'}
+ ]
+ }
+ ]
+ },
+ ]
+ );
+}
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/reducers/index.js b/web/client/src/sections/firmwareUpgrade/reducers/index.js
new file mode 100644
index 0000000..7ed1088
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/reducers/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+export default {
+
+}
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/routes.js b/web/client/src/sections/firmwareUpgrade/routes.js
new file mode 100644
index 0000000..6cd6ae8
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/routes.js
@@ -0,0 +1,29 @@
+import { ReportManagement, CyclePlan, TemporaryResponse, EmPush, AppPush, MaintenanceModel, ServiceRecord, MaintenanceRecords,FirmwareLibrary,DeviceManagement } from './containers';
+
+export default [{
+ type: 'inner',
+ route: {
+ path: '/device',
+ key: 'device',
+ breadcrumb: '设备',
+ // 不设置 component 则面包屑禁止跳转
+ childRoutes: [
+ {
+ path: '/firmwareUpgrade',
+ key: 'firmwareUpgrade',
+ breadcrumb: '固件库',
+ childRoutes: [{
+ path: '/FirmwareLibrary',
+ key: 'firmwareLibrary',
+ component: FirmwareLibrary,
+ breadcrumb: '固件库',
+ },{
+ path: '/DeviceManagement',
+ key: 'deviceManagement',
+ component: DeviceManagement,
+ breadcrumb: '设备管理',
+ }]
+ }
+ ]
+ }
+}];
\ No newline at end of file
diff --git a/web/client/src/sections/firmwareUpgrade/style.less b/web/client/src/sections/firmwareUpgrade/style.less
new file mode 100644
index 0000000..0eaa50f
--- /dev/null
+++ b/web/client/src/sections/firmwareUpgrade/style.less
@@ -0,0 +1,5 @@
+.myempush {
+ .semi-input-wrapper {
+ margin-bottom: 0px !important;
+ }
+}
diff --git a/web/client/src/sections/install/components/memberModal.jsx b/web/client/src/sections/install/components/memberModal.jsx
index ded1a1b..f411f4c 100644
--- a/web/client/src/sections/install/components/memberModal.jsx
+++ b/web/client/src/sections/install/components/memberModal.jsx
@@ -41,6 +41,11 @@ function memberModal (props) {
value: 'customer_service',
text: '拥有服务、工单、资料相关的权限'
},
+ {
+ label: '固件升级',
+ value: 'firmware_upgrade',
+ text: '拥有固件升级、固件包上传相关的权限'
+ },
]); //权限配置
const [pomsList_, setPomsList_] = useState([])
//初始化
diff --git a/web/client/src/sections/install/containers/roles.jsx b/web/client/src/sections/install/containers/roles.jsx
index fff1b65..4533852 100644
--- a/web/client/src/sections/install/containers/roles.jsx
+++ b/web/client/src/sections/install/containers/roles.jsx
@@ -259,6 +259,40 @@ const Roles = (props) => {
);
}
},
+ {
+ title: (
+
+ 固件升级
+
+
+
+
+ ),
+ render: (_, row) => {
+ let rolearr = row.role
+ return (
+
+ {
+ rolearr.indexOf('firmware_upgrade') != -1 ? (
+
+
+
+
+
有权限
+
+ ) : (
+
+
+
+
+
无权限
+
+ )
+ }
+
+ );
+ }
+ },
{
title: "管理",
width: "20%",
@@ -527,6 +561,7 @@ const Roles = (props) => {
售后运维
资源管理者
客户服务
+ 固件升级
diff --git a/web/client/src/sections/service/nav-item.jsx b/web/client/src/sections/service/nav-item.jsx
index d891eb5..94abaf4 100644
--- a/web/client/src/sections/service/nav-item.jsx
+++ b/web/client/src/sections/service/nav-item.jsx
@@ -58,15 +58,15 @@ export function getNavItem (user, dispatch) {
to: '/service/serviceRecord/MaintenanceRecords',
items: [{ itemKey:'MaintenanceRecords',to:'/service/serviceRecord/MaintenanceRecords',text:'维修记录'}]
},
- {
- itemKey: 'firmwareUpgrade',
- text: '固件升级',
- icon: ,
- to: '/service/firmwareUpgrade/FirmwareLibrary',
- items: [{ itemKey:'FirmwareLibrary',to:'/service/firmwareUpgrade/FirmwareLibrary',text:'固件库'},
- { itemKey:'DeviceManagement',to:'/service/firmwareUpgrade/DeviceManagement',text:'设备管理'}
- ]
- }
+ // {
+ // itemKey: 'firmwareUpgrade',
+ // text: '固件升级',
+ // icon: ,
+ // to: '/service/firmwareUpgrade/FirmwareLibrary',
+ // items: [{ itemKey:'FirmwareLibrary',to:'/service/firmwareUpgrade/FirmwareLibrary',text:'固件库'},
+ // { itemKey:'DeviceManagement',to:'/service/firmwareUpgrade/DeviceManagement',text:'设备管理'}
+ // ]
+ // }
]
},
]