Files
admin-govern/src/views/govern/device/control/offLineDataImport/index.vue
2024-12-25 10:53:07 +08:00

194 lines
7.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 离线数据导入 -->
<template>
<!-- <el-dialog v-model.trim="dialogVisible" title="文件列表" width="70%" :destroy-on-close="true" draggable @closed="close"> -->
<!-- 上传文件列表 -->
<div class=" ">
<!-- <div class="offline_data_btn">
<el-button :loading="loading" style="margin-left: 10px" type="primary" @click="submitUpload">
上传离线数据
</el-button>
<el-button type="primary" @click="removeAllFile" :loading="loading"
:disabled="offLineFileList.length == 0">
重置上传文件
</el-button>
<el-button type="primary" @click="handleUpload" :loading="loading"
:disabled="offLineFileList.length == 0 || disableHandleUpload">
开始上传
</el-button>
</div> -->
<TableHeader ref="refheader" :showSearch="false">
<template #operation>
<el-button :loading="loading" style="margin-left: 10px" type="primary" @click="submitUpload">
上传离线数据
</el-button>
<el-button type="primary" @click="removeAllFile" :loading="loading"
:disabled="offLineFileList.length == 0">
重置上传文件
</el-button>
<el-button type="primary" @click="handleUpload" :loading="loading"
:disabled="offLineFileList.length == 0 || disableHandleUpload">
开始上传
</el-button>
<el-button :icon="Back" @click="go(-1)">返回</el-button>
</template>
</TableHeader>
<div :style="tableHeight">
<vxe-table border auto-resize height="auto" :data="offLineFileList" v-bind="defaultAttribute"
:key="updateKey">
<vxe-column field="name" align="center" title="文件名"></vxe-column>
<vxe-column field="webkitRelativePath" align="center" title="文件地址"></vxe-column>
<vxe-column field="status" align="center" title="状态" width="300">
<template v-slot:default="scoped">
<el-progress v-if="scoped.row.status == 0" :percentage="0">
<el-button text>等待上传</el-button>
</el-progress>
<el-progress v-if="scoped.row.status == -1" :percentage="30" :indeterminate="true">
<el-button text>上传中...</el-button>
</el-progress>
<el-progress v-if="scoped.row.status == 1" status="success" :percentage="100">
<el-button text>上传成功</el-button>
</el-progress>
</template>
</vxe-column>
<vxe-column title="操作" width="200px">
<template v-slot:default="scoped">
<el-button link type="danger" @click="removeFile(scoped.row)">移除</el-button>
</template>
</vxe-column>
</vxe-table>
</div>
</div>
<!-- <template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleUpload" :loading="loading"
:disabled="offLineFileList.length == 0 || disableHandleUpload">
开始上传
</el-button>
</div>
</template> -->
<!-- </el-dialog> -->
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import TableHeader from '@/components/table/header/index.vue'
import { uploadOffLineDataFile } from '@/api/cs-device-boot/EquipmentDelivery.ts'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { Back } from '@element-plus/icons-vue'
import { mainHeight } from '@/utils/layout'
import { useRouter, useRoute } from 'vue-router'
const { go } = useRouter() // 路由
const routes = useRoute()
const dialogVisible = ref(false)
const loading = ref(false)
const offLineFileList: any = ref([])
const disableHandleUpload = ref(true)
const tableHeight = mainHeight(85)
//上传离线数据
const submitUpload = (e: any) => {
const input = document.createElement('input')
input.type = 'file'
input.setAttribute('allowdirs', 'true')
input.setAttribute('directory', 'true')
input.setAttribute('webkitdirectory', 'true')
input.multiple = true
document.querySelector('body').appendChild(input)
// todo 这里增加了input标签可以给它删掉
input.click()
input.onchange = function (e) {
const formData = new FormData()
const file = e.target['files']
for (let i = 0; i < file.length; i++) {
formData.append('files', file[i])
}
offLineFileList.value = formData.getAll('files')
offLineFileList.value.map((item: any) => {
item.status = 0
})
disableHandleUpload.value = false
}
}
//清空文件
const removeAllFile = () => {
offLineFileList.value = []
}
//移除文件
const removeFile = async (file: any) => {
const delIndex = offLineFileList.value.findIndex((item: any) => {
return item.webkitRelativePath == file.webkitRelativePath && item.name == file.name
})
offLineFileList.value.splice(delIndex, 1)
return
}
//开始上传
const updateKey = ref(0)
const handleUpload = () => {
loading.value = true
const subForm = new FormData()
subForm.append('devId', routes.query.deviceId)
subForm.append('lineId', routes.query.lineId)
let webkitRelativePathList: any = []
offLineFileList.value.map((item: any, index: any) => {
subForm.append(`files[${index}]`, item)
webkitRelativePathList.push(item.webkitRelativePath)
})
subForm.append('paths', webkitRelativePathList.join(','))
offLineFileList.value.map((item: any) => {
item.status = -1
})
// 操作数据后更新视图
updateKey.value += 1
disableHandleUpload.value = true
uploadOffLineDataFile(subForm).then(res => {
if (res.code == 'A0000') {
offLineFileList.value.map((item: any) => {
item.status = 1
})
// 操作数据后更新视图
updateKey.value += 1
loading.value = false
disableHandleUpload.value = true
}
}).catch(() => {
loading.value = false
disableHandleUpload.value = false
offLineFileList.value.map((item: any) => {
item.status = 0
})
updateKey.value += 1
})
}
// const deviceId: any = ref()
// const lineId: any = ref()
// const open = (devId: any, lineIds: any) => {
// deviceId.value = devId
// lineId.value = lineIds
// dialogVisible.value = true
// }
const close = () => {
offLineFileList.value = []
dialogVisible.value = false
}
defineExpose({ open })
</script>
<style lang="scss" scoped>
.offline_data {
width: 100%;
.offline_data_btn {
width: 100%;
height: 60px;
display: flex;
align-items: center;
justify-content: flex-end;
}
}
// .device {
// height: calc(100vh - 130px);
// }</style>