Browse Source

feat: 一些调整

main-v2
betaqi 1 month ago
parent
commit
1f6437b09b
  1. 1
      src/components/Edfs-wrap.vue
  2. 23
      src/views/firmwareUpload/index.vue
  3. 104
      src/views/stationData/transferData.vue

1
src/components/Edfs-wrap.vue

@ -1,7 +1,6 @@
<template> <template>
<div class="edfs-wrap" :class="{ 'edfs-wrap-cvh': useCvh }"> <div class="edfs-wrap" :class="{ 'edfs-wrap-cvh': useCvh }">
<div class="wrap-title" v-if="title || customLeft"> <div class="wrap-title" v-if="title || customLeft">
{{}}
<div class="title-left" v-if="!customLeft"> <div class="title-left" v-if="!customLeft">
<template v-if="shape === 'rect'"> <template v-if="shape === 'rect'">
<div <div

23
src/views/firmwareUpload/index.vue

@ -2,12 +2,12 @@
<div class="flex justify-center items-center size-full"> <div class="flex justify-center items-center size-full">
<EdfsWrap :title="title" style="width: 50%; height: 50%"> <EdfsWrap :title="title" style="width: 50%; height: 50%">
<el-upload v-model:fileList="fileList" v-loading="loading" element-loading-text="上传中..." drag action="" <el-upload v-model:fileList="fileList" v-loading="loading" element-loading-text="上传中..." drag action=""
accept=".tar.gz" :limit="1" :on-exceed="handleExceed" :auto-upload="false" ref="uploadRef" accept=".zip,.tar,.tar.gz" :limit="1" :on-exceed="handleExceed" :auto-upload="false" ref="uploadRef"
class="h-[calc(100%-30px)] w-full"> :before-upload="beforeAvatarUpload" class="h-[calc(100%-30px)] w-full">
<div class="i-line-md:cloud-alt-upload-loop text-20px mx-auto"></div> <div class="i-line-md:cloud-alt-upload-loop text-20px mx-auto"></div>
<div class="text">拖拽文件或者 <em>点击上传</em></div> <div class="text">拖拽文件或者 <em>点击上传</em></div>
<template #tip v-if="!fileList.length"> <template #tip v-if="!fileList.length">
<div class="el-upload__tip">上传限制一个文件新文件会覆盖旧文件</div> <div class="el-upload__tip">上传限制一个文件新文件会覆盖旧文件仅支持 .zip.tar .tar.gz 格式</div>
</template> </template>
</el-upload> </el-upload>
<div class="flex justify-center"> <div class="flex justify-center">
@ -43,14 +43,23 @@ const handleExceed: UploadProps['onExceed'] = files => {
const uploadRef = ref<UploadInstance>() const uploadRef = ref<UploadInstance>()
const beforeAvatarUpload: UploadProps['beforeUpload'] = rawFile => { const beforeAvatarUpload: UploadProps['beforeUpload'] = rawFile => {
const accept = ['.zip', '.tar', '.tar.gz'] const fileName = rawFile.name.toLowerCase()
const fileTypes = rawFile.name.substring(rawFile.name.indexOf('.')) const supportedFormats = ['.zip', '.tar', '.tar.gz']
const isValidFormat = supportedFormats.some(format => fileName.endsWith(format))
if (!accept.includes(fileTypes)) { if (!isValidFormat) {
message.error('请上传 tar.gz 文件') message.error('请上传 .zip、.tar 或 .tar.gz 格式的文件')
uploadRef.value?.clearFiles?.() uploadRef.value?.clearFiles?.()
return false return false
} }
// const maxSize = 100 * 1024 * 1024
// if (rawFile.size > maxSize) {
// message.error('100MB')
// uploadRef.value?.clearFiles?.()
// return false
// }
return true return true
} }
function validate() { function validate() {

104
src/views/stationData/transferData.vue

@ -3,18 +3,27 @@
<el-button type="primary" @click="onBack" class="w-150px"> <el-button type="primary" @click="onBack" class="w-150px">
<i class="i-line-md:arrow-left"></i>返回站点数据 <i class="i-line-md:arrow-left"></i>返回站点数据
</el-button> </el-button>
<EdfsWrap title="设备列表" class="flex-1" useScrollBar> <EdfsWrap
:title="isonLineTransfer ? `在线设备列表` : `历史设备列表`"
class="flex-1"
useScrollBar
:shapeColor="isonLineTransfer ? '#4B9E5F' : '#F1BF63'"
>
<template #title-right> <template #title-right>
<template v-if="env.VITE_APP_ENV == 'local'"> <template v-if="env.VITE_APP_ENV == 'local'">
<template v-if="isBatchTransfer || isBatchUpgrade"> <template v-if="isBatchTransfer || isBatchUpgrade">
<el-button type="primary" @click="onBatchSave"> 确定{{ batchText }} </el-button> <el-button type="primary" @click="onBatchSave">
确定{{ batchText }}
</el-button>
<el-button type="info" @click="onBatchCancel"> 取消 </el-button> <el-button type="info" @click="onBatchCancel"> 取消 </el-button>
</template> </template>
<template v-else> <template v-else>
<el-button type="primary" @click="onBatchTransfer"> <i class="i-mdi:database-arrow-right-outline mr-1" /> <el-button type="primary" @click="onBatchTransfer">
{{ isonLineTransfer ? '数据迁移' : '数据导出' }} </el-button> <i class="i-mdi:database-arrow-right-outline mr-1" />
<el-button v-if="isonLineTransfer" type="primary" @click="onBatchUpgrade"> <i {{ isonLineTransfer ? '数据迁移' : '数据导出' }}
class="i-codicon:chip mr-1" />批量升级 </el-button>
<el-button v-if="isonLineTransfer" type="primary" @click="onBatchUpgrade">
<i class="i-codicon:chip mr-1" />批量升级
</el-button> </el-button>
</template> </template>
</template> </template>
@ -24,7 +33,10 @@
<div class="device-item" v-for="item in devices"> <div class="device-item" v-for="item in devices">
<div class="device-item-header"> <div class="device-item-header">
<div class="flex items-center"> <div class="flex items-center">
<el-checkbox :value="item.sn" v-if="(isBatchTransfer || isBatchUpgrade) && item.status !== '离线'"> <el-checkbox
:value="item.sn"
v-if="(isBatchTransfer || isBatchUpgrade) && item.status !== '离线'"
>
<div>设备ID: {{ item.sn }}</div> <div>设备ID: {{ item.sn }}</div>
</el-checkbox> </el-checkbox>
<div v-else class="h-32 leading-32px"> <div v-else class="h-32 leading-32px">
@ -32,23 +44,36 @@
</div> </div>
</div> </div>
<div class="flex items-center gap-col-2" v-if="!(isBatchTransfer || isBatchUpgrade)"> <div
class="flex items-center gap-col-2"
v-if="!(isBatchTransfer || isBatchUpgrade)"
>
<template v-if="env.VITE_APP_ENV == 'local'"> <template v-if="env.VITE_APP_ENV == 'local'">
<el-tooltip :content="isonLineTransfer ? '数据迁移' : '数据导出'" <el-tooltip
v-if="isonLineTransfer ? item.status === '在线' : true"> :content="isonLineTransfer ? '数据迁移' : '数据导出'"
<i class="i-mdi:database-arrow-right-outline :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px" v-if="isonLineTransfer ? item.status === '在线' : true"
@click="onBatchTransferSave([item])"></i> >
<i
class="i-mdi:database-arrow-right-outline :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px"
@click="onBatchTransferSave([item])"
></i>
</el-tooltip> </el-tooltip>
<el-tooltip content="固件升级" v-if="isonLineTransfer && item.status === '在线'"> <el-tooltip
<i class="i-codicon:chip :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px" content="固件升级"
@click="onFirmwareUpload([item])"></i> v-if="isonLineTransfer && item.status === '在线'"
>
<i
class="i-codicon:chip :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px"
@click="onFirmwareUpload([item])"
></i>
</el-tooltip> </el-tooltip>
</template> </template>
<el-tooltip content="详情"> <el-tooltip content="详情">
<div <div
class="i-material-symbols:info-outline :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px" class="i-material-symbols:info-outline :hover:color-[#8ACE6A] color-[#4B9E5F] cursor-pointer text-20px"
@click="onDeviceDetails(item)"></div> @click="onDeviceDetails(item)"
></div>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
@ -91,10 +116,23 @@
</EdfsWrap> </EdfsWrap>
</div> </div>
<OnLineTransferDlg ref="onLineTransferDlgRef" @on-save="onLineDeviceTransfer" :is-batch-transfer="isBatchTransfer" /> <OnLineTransferDlg
<OffTransferDlg ref="offTransferDlgRef" :isBatchTransfer="false" :siteInfo="siteInfo" ref="onLineTransferDlgRef"
@on-save="onOffDeviceTransfer" /> @on-save="onLineDeviceTransfer"
<DeviceDrawer v-model="isShowDetails" ref="deviceDrawerRef" :siteInfo="siteInfo" :is-transfer="isonLineTransfer" /> :is-batch-transfer="isBatchTransfer"
/>
<OffTransferDlg
ref="offTransferDlgRef"
:isBatchTransfer="false"
:siteInfo="siteInfo"
@on-save="onOffDeviceTransfer"
/>
<DeviceDrawer
v-model="isShowDetails"
ref="deviceDrawerRef"
:siteInfo="siteInfo"
:is-transfer="isonLineTransfer"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -103,10 +141,7 @@ import OnLineTransferDlg from './components/onLineTransferDlg.vue'
import OffTransferDlg from './components/offTransferDlg.vue' import OffTransferDlg from './components/offTransferDlg.vue'
import { useTransferDataStore } from '@/stores/transferData' import { useTransferDataStore } from '@/stores/transferData'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import type { import type { IOfflineDevice, IOnlineDevice } from './type'
IOfflineDevice,
IOnlineDevice,
} from './type'
import { useMessage } from '@/composables/useMessage' import { useMessage } from '@/composables/useMessage'
import { getDeviceList, type ISite } from '@/api/module/transfer' import { getDeviceList, type ISite } from '@/api/module/transfer'
import DeviceDrawer from './components/deviceDrawer.vue' import DeviceDrawer from './components/deviceDrawer.vue'
@ -128,14 +163,16 @@ const message = useMessage()
const transferDataStore = useTransferDataStore() const transferDataStore = useTransferDataStore()
const { devicesMap } = storeToRefs(transferDataStore) const { devicesMap } = storeToRefs(transferDataStore)
const transferStatus = ref<'progress' | 'success' | 'failed' | 'timeout' | 'stop' | undefined>() const transferStatus = ref<
'progress' | 'success' | 'failed' | 'timeout' | 'stop' | undefined
>()
const devices = computed(() => { const devices = computed(() => {
return isonLineTransfer.value ? Array.from(devicesMap.value.values()) : offLineDeviceList.value return isonLineTransfer.value
? Array.from(devicesMap.value.values())
: offLineDeviceList.value
}) as Ref<any[]> }) as Ref<any[]>
// 线 // 线
function onLineDeviceTransfer() { function onLineDeviceTransfer() {
if (isBatchTransfer.value) { if (isBatchTransfer.value) {
@ -182,10 +219,9 @@ function onBatchTransferSave(checkDeviceList: IOnlineDevice[] | IOfflineDevice[]
const deivcesParms = lineDevices.map(item => ({ const deivcesParms = lineDevices.map(item => ({
sn: item.sn, sn: item.sn,
host: item.clientIp, host: item.clientIp,
disk: item.footprint disk: item.footprint,
})) }))
const parmas: TaskCreateParams = { const parmas: TaskCreateParams = {
site, site,
devices: deivcesParms, devices: deivcesParms,
@ -247,9 +283,7 @@ function getOnlineDeviceList(): IOnlineDevice[] {
} }
function getOfflineDeviceList(): IOfflineDevice[] { function getOfflineDeviceList(): IOfflineDevice[] {
return offLineDeviceList.value.filter(item => return offLineDeviceList.value.filter(item => checkDeviceList.value.includes(item.sn))
checkDeviceList.value.includes(item.sn)
)
} }
function onBatchCancel() { function onBatchCancel() {
@ -327,10 +361,9 @@ async function onFirmwareUpload(devices: IOnlineDevice[]) {
const deivcesParms = devices.map(item => ({ const deivcesParms = devices.map(item => ({
sn: item.sn, sn: item.sn,
host: item.clientIp, host: item.clientIp,
disk: item.footprint disk: item.footprint,
})) }))
const parmas: TaskCreateParams = { const parmas: TaskCreateParams = {
site, site,
devices: deivcesParms, devices: deivcesParms,
@ -352,7 +385,6 @@ function onOffDeviceTransfer() {
onBatchCancel() onBatchCancel()
} }
// ================ 线 end ========= // ================ 线 end =========
// const transferLogScrollbar = ref() // const transferLogScrollbar = ref()

Loading…
Cancel
Save