| | |
| | | <template> |
| | | <a-menu v-model:selectedKeys="current" mode="horizontal" @select="select"> |
| | | <a-menu-item :key="EDeviceTypeName.Aircraft" class="ml20"> |
| | | Aircraft |
| | | 飞行器 |
| | | </a-menu-item> |
| | | <a-menu-item :key="EDeviceTypeName.Dock"> |
| | | Dock |
| | | 机场 |
| | | </a-menu-item> |
| | | </a-menu> |
| | | <div class="device-table-wrap table flex-display flex-column"> |
| | |
| | | style="margin: -5px 0" |
| | | /> |
| | | <template v-else> |
| | | {{ text }} |
| | | <a-tooltip :title="text"> |
| | | {{ text }} |
| | | </a-tooltip> |
| | | </template> |
| | | </div> |
| | | </template> |
| | |
| | | import { DeviceCmdExecuteInfo, DeviceCmdExecuteStatus } from '/@/types/device-cmd' |
| | | import DeviceLogUploadRecordDrawer from '/@/components/devices/device-log/DeviceLogUploadRecordDrawer.vue' |
| | | import DeviceHmsDrawer from '/@/components/devices/device-hms/DeviceHmsDrawer.vue' |
| | | import { message } from 'ant-design-vue' |
| | | import { message, notification } from 'ant-design-vue' |
| | | |
| | | interface DeviceData { |
| | | device: Device[] |
| | |
| | | const deleteTip = ref<boolean>(false) |
| | | const deleteSn = ref<string>() |
| | | const columns: ColumnProps[] = [ |
| | | { title: 'Model', dataIndex: 'device_name', width: 100, className: 'titleStyle' }, |
| | | { title: 'SN', dataIndex: 'device_sn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { title: '设备型号', dataIndex: 'device_name', width: 100, className: 'titleStyle' }, |
| | | { title: '设备SN', dataIndex: 'device_sn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { |
| | | title: 'Name', |
| | | title: '设备组织名称', |
| | | dataIndex: 'nickname', |
| | | width: 100, |
| | | sorter: (a: Device, b: Device) => a.nickname.localeCompare(b.nickname), |
| | |
| | | ellipsis: true, |
| | | slots: { customRender: 'nickname' } |
| | | }, |
| | | { title: 'Firmware Version', dataIndex: 'firmware_version', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: 'Status', dataIndex: 'status', width: 100, className: 'titleStyle', slots: { customRender: 'status' } }, |
| | | { title: '固件版本', dataIndex: 'firmware_version', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: '在线状态', dataIndex: 'status', width: 100, className: 'titleStyle', slots: { customRender: 'status' } }, |
| | | { |
| | | title: 'Workspace', |
| | | title: '所属项目', |
| | | dataIndex: 'workspace_name', |
| | | width: 100, |
| | | className: 'titleStyle', |
| | |
| | | return obj |
| | | } |
| | | }, |
| | | { title: 'Joined', dataIndex: 'bound_time', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: 'Last Online', dataIndex: 'login_time', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { title: '加入组织时间', dataIndex: 'bound_time', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: '在线时间', dataIndex: 'login_time', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { |
| | | title: 'Actions', |
| | | title: '操作', |
| | | dataIndex: 'actions', |
| | | width: 100, |
| | | className: 'titleStyle', |
| | |
| | | for (let i = 0; i < devices.length; i++) { |
| | | if (devices[i].device_sn === payload.sn) { |
| | | if (!payload.output) return |
| | | const { status, progress } = payload.output |
| | | const { status, progress, ext } = payload.output |
| | | if (status === DeviceCmdExecuteStatus.Sent || status === DeviceCmdExecuteStatus.InProgress) { // 升级中 |
| | | const rate = ext?.rate ? (ext.rate / 1024).toFixed(2) + 'kb/s' : '' |
| | | devices[i].firmware_status = DeviceFirmwareStatusEnum.DuringUpgrade |
| | | devices[i].firmware_progress = progress?.percent || 0 |
| | | devices[i].firmware_progress = (progress?.percent || 0) + '% ' + rate |
| | | } else { // 终态:成功,失败,超时 |
| | | if (status === DeviceCmdExecuteStatus.Failed || status === DeviceCmdExecuteStatus.Timeout) { |
| | | message.error(`设备(${payload.sn}) 升级失败`) |
| | | notification.error({ |
| | | message: `(${payload.sn}) Upgrade failed`, |
| | | description: `Error Code: ${payload.result}`, |
| | | duration: null |
| | | }) |
| | | } |
| | | // 拉取列表 |
| | | getDevices(current.value[0], true) |
| | |
| | | useDeviceUpgradeEvent(onDeviceUpgradeWs) |
| | | |
| | | // 获取设备列表信息 |
| | | function getDevices (domain: string, closeLoading?: boolean) { |
| | | function getDevices (domain: number, closeLoading?: boolean) { |
| | | if (!closeLoading) { |
| | | loading.value = true |
| | | } |