修改mqtt文件下载问题
This commit is contained in:
@@ -19,7 +19,7 @@ const cascaderProps = {
|
|||||||
const cascader = ref()
|
const cascader = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const options = dictData.state.area
|
const options = dictData.state.area
|
||||||
const areaName = ref(dictData.state.area[0].name)
|
const areaName = ref(dictData.state.area[0]?.name || '')
|
||||||
const change = (e: any) => {
|
const change = (e: any) => {
|
||||||
if (cascader.value.getCheckedNodes()[0].pathLabels.length == 1) {
|
if (cascader.value.getCheckedNodes()[0].pathLabels.length == 1) {
|
||||||
areaName.value = cascader.value.getCheckedNodes()[0].pathLabels[0]
|
areaName.value = cascader.value.getCheckedNodes()[0].pathLabels[0]
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ const handlerHeight = () => {
|
|||||||
}
|
}
|
||||||
// 刷新页面handler高度出下拉
|
// 刷新页面handler高度出下拉
|
||||||
const computedSearchRow = () => {
|
const computedSearchRow = () => {
|
||||||
|
|
||||||
if (!headerForm.value.$el) return
|
if (!headerForm.value.$el) return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -590,7 +590,7 @@ const formatCountOptions = (list: any) => {
|
|||||||
}
|
}
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
tableHeaderRef.value.computedSearchRow()
|
tableHeaderRef.value.computedSearchRow()
|
||||||
}, 100)
|
}, 500)
|
||||||
}
|
}
|
||||||
// 判断下拉框是否存在
|
// 判断下拉框是否存在
|
||||||
const onCountChange = (val: any, index: any) => {
|
const onCountChange = (val: any, index: any) => {
|
||||||
|
|||||||
@@ -8,12 +8,8 @@
|
|||||||
<div class="right_nav">
|
<div class="right_nav">
|
||||||
<div class="menu" v-if="activePathList.length != 0">
|
<div class="menu" v-if="activePathList.length != 0">
|
||||||
<el-breadcrumb separator="/">
|
<el-breadcrumb separator="/">
|
||||||
<el-breadcrumb-item
|
<el-breadcrumb-item v-for="(item, index) in activePathList" style="cursor: pointer" :key="index"
|
||||||
v-for="(item, index) in activePathList"
|
@click="handleIntoByPath(item)">
|
||||||
style="cursor: pointer"
|
|
||||||
:key="index"
|
|
||||||
@click="handleIntoByPath(item)"
|
|
||||||
>
|
|
||||||
<span>{{ outPutPath(item, index) }}</span>
|
<span>{{ outPutPath(item, index) }}</span>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
</el-breadcrumb>
|
</el-breadcrumb>
|
||||||
@@ -24,25 +20,14 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter" v-if="activePathList.length != 0">
|
<div class="filter" v-if="activePathList.length != 0">
|
||||||
<el-input
|
<el-input style="width: 200px; height: 32px" placeholder="请输入文件或文件夹名称" clearable v-model="filterText"
|
||||||
style="width: 200px; height: 32px"
|
type="text"></el-input>
|
||||||
placeholder="请输入文件或文件夹名称"
|
|
||||||
clearable
|
|
||||||
v-model="filterText"
|
|
||||||
type="text"
|
|
||||||
></el-input>
|
|
||||||
<el-button type="primary" @click="handleSearch" :icon="Search">搜索</el-button>
|
<el-button type="primary" @click="handleSearch" :icon="Search">搜索</el-button>
|
||||||
<el-button @click="handleRefresh" :icon="Refresh">重置</el-button>
|
<el-button @click="handleRefresh" :icon="Refresh">重置</el-button>
|
||||||
<el-upload
|
<el-upload v-if="activePath != '/'" action="" :auto-upload="false" :show-file-list="false" :on-change="(file: any, fileList: any) => {
|
||||||
v-if="activePath != '/'"
|
|
||||||
action=""
|
|
||||||
:auto-upload="false"
|
|
||||||
:show-file-list="false"
|
|
||||||
:on-change="(file: any, fileList: any) => {
|
|
||||||
handleUpload(file, fileList, activePath)
|
handleUpload(file, fileList, activePath)
|
||||||
}
|
}
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<el-button>
|
<el-button>
|
||||||
文件上传
|
文件上传
|
||||||
<el-icon class="el-icon--right">
|
<el-icon class="el-icon--right">
|
||||||
@@ -60,29 +45,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 以列表形式展示 -->
|
<!-- 以列表形式展示 -->
|
||||||
<div :style="tableHeight">
|
<div :style="tableHeight">
|
||||||
<vxe-table
|
<vxe-table style="margin-top: 10px" border auto-resize height="auto" :data="dirList"
|
||||||
style="margin-top: 10px"
|
v-bind="defaultAttribute">
|
||||||
border
|
|
||||||
auto-resize
|
|
||||||
height="auto"
|
|
||||||
:data="dirList"
|
|
||||||
v-bind="defaultAttribute"
|
|
||||||
>
|
|
||||||
<vxe-column type="seq" title="序号" width="80"></vxe-column>
|
<vxe-column type="seq" title="序号" width="80"></vxe-column>
|
||||||
<vxe-column field="prjDataPath" align="center" title="名称" #default="{ row }">
|
<vxe-column field="prjDataPath" align="center" title="名称" #default="{ row }">
|
||||||
<span
|
<span style="cursor: pointer; color: #551a8b" :style="{
|
||||||
style="cursor: pointer; color: #551a8b"
|
'text-decoration': row.type == 'dir' ? 'underline' : 'none',
|
||||||
:style="{
|
color: row.type == 'dir' ? '#551a8b' : '#000'
|
||||||
'text-decoration': row.type == 'dir' ? 'underline' : 'none',
|
}" @click="handleIntoDir(row)">
|
||||||
color: row.type == 'dir' ? '#551a8b' : '#000'
|
|
||||||
}"
|
|
||||||
@click="handleIntoDir(row)"
|
|
||||||
>
|
|
||||||
{{
|
{{
|
||||||
row &&
|
row &&
|
||||||
row?.prjDataPath &&
|
row?.prjDataPath &&
|
||||||
row?.prjDataPath.includes(activePath) &&
|
row?.prjDataPath.includes(activePath) &&
|
||||||
row?.prjDataPath.length > activePath.length
|
row?.prjDataPath.length > activePath.length
|
||||||
? row?.prjDataPath.replace(activePath, ' ').replace('/', ' ')
|
? row?.prjDataPath.replace(activePath, ' ').replace('/', ' ')
|
||||||
: row?.prjDataPath.replace('/', ' ')
|
: row?.prjDataPath.replace('/', ' ')
|
||||||
}}
|
}}
|
||||||
@@ -97,7 +72,7 @@
|
|||||||
{{ row.type == 'dir' ? '文件夹' : row.type == 'file' ? '文件' : '/' }}
|
{{ row.type == 'dir' ? '文件夹' : row.type == 'file' ? '文件' : '/' }}
|
||||||
</span>
|
</span>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column field="size" align="center" width="120" title="大小" #default="{ row }">
|
<vxe-column field="size" align="center" width="120" title="大小" #default="{ row }">
|
||||||
<span>
|
<span>
|
||||||
{{ row.size && row.type == 'file' ? row.size + 'KB' : '/' }}
|
{{ row.size && row.type == 'file' ? row.size + 'KB' : '/' }}
|
||||||
</span>
|
</span>
|
||||||
@@ -108,13 +83,8 @@
|
|||||||
<vxe-column title="操作" width="200px">
|
<vxe-column title="操作" width="200px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-button link size="small" type="danger" @click="handleDelDirOrFile(row)">删除</el-button>
|
<el-button link size="small" type="danger" @click="handleDelDirOrFile(row)">删除</el-button>
|
||||||
<el-button
|
<el-button v-if="row.type == 'file'" link size="small" type="primary"
|
||||||
v-if="row.type == 'file'"
|
@click="handleDownLoad(row)">
|
||||||
link
|
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
@click="handleDownLoad(row)"
|
|
||||||
>
|
|
||||||
下载
|
下载
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -125,13 +95,8 @@
|
|||||||
<div class="list" v-if="dirList.length != 0 && !loading" style="display: none">
|
<div class="list" v-if="dirList.length != 0 && !loading" style="display: none">
|
||||||
<div class="list_item" v-for="(item, index) in dirList" :key="index">
|
<div class="list_item" v-for="(item, index) in dirList" :key="index">
|
||||||
<div class="item_download">
|
<div class="item_download">
|
||||||
<el-button
|
<el-button v-if="activePath && activePath != '/'" type="danger" size="small"
|
||||||
v-if="activePath && activePath != '/'"
|
@click="handleDelDirOrFile(item)" circle>
|
||||||
type="danger"
|
|
||||||
size="small"
|
|
||||||
@click="handleDelDirOrFile(item)"
|
|
||||||
circle
|
|
||||||
>
|
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<Delete />
|
<Delete />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@@ -143,19 +108,15 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<img v-if="item?.type == 'dir'" @click="handleIntoDir(item)" src="@/assets/img/wenjianjia.svg" />
|
<img v-if="item?.type == 'dir'" @click="handleIntoDir(item)" src="@/assets/img/wenjianjia.svg" />
|
||||||
<img
|
<img class="img_file" @click="handleIntoDir(item)" v-if="item?.type == 'file'"
|
||||||
class="img_file"
|
src="@/assets/img/wenjian.svg" />
|
||||||
@click="handleIntoDir(item)"
|
|
||||||
v-if="item?.type == 'file'"
|
|
||||||
src="@/assets/img/wenjian.svg"
|
|
||||||
/>
|
|
||||||
<!-- <span v-if="!item.type">暂无数据</span> -->
|
<!-- <span v-if="!item.type">暂无数据</span> -->
|
||||||
<p>
|
<p>
|
||||||
{{
|
{{
|
||||||
item &&
|
item &&
|
||||||
item?.prjDataPath &&
|
item?.prjDataPath &&
|
||||||
item?.prjDataPath.includes(activePath) &&
|
item?.prjDataPath.includes(activePath) &&
|
||||||
item?.prjDataPath.length > activePath.length
|
item?.prjDataPath.length > activePath.length
|
||||||
? item?.prjDataPath.replace(activePath, ' ').replace('/', ' ')
|
? item?.prjDataPath.replace(activePath, ' ').replace('/', ' ')
|
||||||
: item?.prjDataPath.replace('/', ' ')
|
: item?.prjDataPath.replace('/', ' ')
|
||||||
}}
|
}}
|
||||||
@@ -165,18 +126,9 @@
|
|||||||
<!-- <el-empty v-if="dirList.length === 0" /> -->
|
<!-- <el-empty v-if="dirList.length === 0" /> -->
|
||||||
</div>
|
</div>
|
||||||
<popup ref="fileRef"></popup>
|
<popup ref="fileRef"></popup>
|
||||||
<el-dialog
|
<el-dialog v-model="addDeviceDirOpen" :destroy-on-close="true" title="新建文件夹目录" width="500" @closed="close">
|
||||||
v-model="addDeviceDirOpen"
|
<el-form ref="formRef" :model="form"
|
||||||
:destroy-on-close="true"
|
:rules="{ path: [{ required: true, message: '请输入文件夹名称', trigger: 'blur' }] }">
|
||||||
title="新建文件夹目录"
|
|
||||||
width="500"
|
|
||||||
@closed="close"
|
|
||||||
>
|
|
||||||
<el-form
|
|
||||||
ref="formRef"
|
|
||||||
:model="form"
|
|
||||||
:rules="{ path: [{ required: true, message: '请输入文件夹名称', trigger: 'blur' }] }"
|
|
||||||
>
|
|
||||||
<el-form-item label="文件夹名称" prop="path">
|
<el-form-item label="文件夹名称" prop="path">
|
||||||
<el-input v-model="form.path" placeholder="请输入文件夹名称" />
|
<el-input v-model="form.path" placeholder="请输入文件夹名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -207,13 +159,14 @@ import { defaultAttribute } from '@/components/table/defaultAttribute'
|
|||||||
import { Delete, Download, Upload, Plus, Refresh, Search } from '@element-plus/icons-vue'
|
import { Delete, Download, Upload, Plus, Refresh, Search } from '@element-plus/icons-vue'
|
||||||
import popup from './popup.vue'
|
import popup from './popup.vue'
|
||||||
import mqtt from 'mqtt'
|
import mqtt from 'mqtt'
|
||||||
|
import { useAdminInfo } from '@/stores/adminInfo'
|
||||||
import { passwordConfirm } from '@/api/user-boot/user'
|
import { passwordConfirm } from '@/api/user-boot/user'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'govern/device/fileService'
|
name: 'govern/device/fileService'
|
||||||
})
|
})
|
||||||
const pageHeight = mainHeight(20)
|
const pageHeight = mainHeight(20)
|
||||||
const tableHeight = mainHeight(130)
|
const tableHeight = mainHeight(130)
|
||||||
|
const adminInfo = useAdminInfo()
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
//nDid
|
//nDid
|
||||||
const nDid = ref<string>('')
|
const nDid = ref<string>('')
|
||||||
@@ -496,7 +449,7 @@ const changeType = ref<any>('')
|
|||||||
//下载文件
|
//下载文件
|
||||||
const fileRef = ref()
|
const fileRef = ref()
|
||||||
const handleDownLoad = async (row: any) => {
|
const handleDownLoad = async (row: any) => {
|
||||||
;(await nDid.value) && fileRef.value && fileRef.value.open(row, nDid.value)
|
; (await nDid.value) && fileRef.value && fileRef.value.open(row, nDid.value)
|
||||||
// fileName.value = row?.prjDataPath.split('/')[row?.prjDataPath.split('/').length - 1]
|
// fileName.value = row?.prjDataPath.split('/')[row?.prjDataPath.split('/').length - 1]
|
||||||
// localStorage.setItem('fileName', fileName.value)
|
// localStorage.setItem('fileName', fileName.value)
|
||||||
changeType.value = 'download'
|
changeType.value = 'download'
|
||||||
@@ -569,15 +522,21 @@ const status: any = ref()
|
|||||||
|
|
||||||
mqttRef.value.on('message', (topic: any, message: any) => {
|
mqttRef.value.on('message', (topic: any, message: any) => {
|
||||||
console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))))
|
console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))))
|
||||||
|
|
||||||
let str = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
|
let str = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
|
||||||
|
|
||||||
let regex = /fileName:(.*?),allStep/
|
let regex = /fileName:(.*?),allStep/
|
||||||
let regex1 = /allStep:(.*?),nowStep/
|
let regex1 = /allStep:(.*?),nowStep/
|
||||||
let regex2 = /nowStep:(.*?)}/
|
let regex2 = /nowStep:(.*?),userId/
|
||||||
|
let regex3 = /userId:(.*?)}/
|
||||||
|
|
||||||
mqttMessage.value = {
|
mqttMessage.value = {
|
||||||
fileName: str.match(regex)[1],
|
fileName: str.match(regex)[1],
|
||||||
allStep: str.match(regex1)[1],
|
allStep: str.match(regex1)[1],
|
||||||
nowStep: str.match(regex2)[1]
|
nowStep: str.match(regex2)[1],
|
||||||
|
userId: str.match(regex3)[1]
|
||||||
}
|
}
|
||||||
|
console.log("🚀 ~ str.match(regex3)[1]:", str.match(regex3)[1])
|
||||||
status.value = parseInt(Number((mqttMessage.value.nowStep / mqttMessage.value.allStep) * 100))
|
status.value = parseInt(Number((mqttMessage.value.nowStep / mqttMessage.value.allStep) * 100))
|
||||||
fileRef.value.setStatus(mqttMessage.value)
|
fileRef.value.setStatus(mqttMessage.value)
|
||||||
fileName.value = mqttMessage.value.fileName
|
fileName.value = mqttMessage.value.fileName
|
||||||
@@ -613,6 +572,7 @@ onBeforeUnmount(() => {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
|
|
||||||
.main_left {
|
.main_left {
|
||||||
// width: 280px;
|
// width: 280px;
|
||||||
}
|
}
|
||||||
@@ -696,6 +656,7 @@ onBeforeUnmount(() => {
|
|||||||
padding-bottom: 200px;
|
padding-bottom: 200px;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.list_item {
|
.list_item {
|
||||||
flex: none;
|
flex: none;
|
||||||
width: 23.3%;
|
width: 23.3%;
|
||||||
@@ -714,6 +675,7 @@ onBeforeUnmount(() => {
|
|||||||
height: 40px;
|
height: 40px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: 1px solid #eee;
|
border: 1px solid #eee;
|
||||||
|
|
||||||
.item_download,
|
.item_download,
|
||||||
.item_upload {
|
.item_upload {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
@@ -3,16 +3,14 @@
|
|||||||
<div :class="downLoading ? 'all_disabled' : ''">
|
<div :class="downLoading ? 'all_disabled' : ''">
|
||||||
<el-dialog v-model="dialogVisible" title="文件信息" width="50%" @closed="handleClose">
|
<el-dialog v-model="dialogVisible" title="文件信息" width="50%" @closed="handleClose">
|
||||||
<div v-loading="loading">
|
<div v-loading="loading">
|
||||||
<div
|
<div class="download_progress"
|
||||||
class="download_progress"
|
v-if="mqttFileName.includes(fileNameInfoMation) && status != 0 && status != 100">
|
||||||
v-if="mqttFileName.includes(fileNameInfoMation) && status != 0 && status != 100"
|
|
||||||
>
|
|
||||||
<div class="progress_left">
|
<div class="progress_left">
|
||||||
正在下载:
|
正在下载:
|
||||||
{{
|
{{
|
||||||
// fileData?.prjDataPath
|
// fileData?.prjDataPath
|
||||||
// ? fileData?.prjDataPath.split('/')[fileData?.prjDataPath.split('/').length - 1]
|
// ? fileData?.prjDataPath.split('/')[fileData?.prjDataPath.split('/').length - 1]
|
||||||
// : '/'
|
// : '/'
|
||||||
mqttFileName
|
mqttFileName
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
@@ -59,9 +57,11 @@ import {
|
|||||||
downLoadDeviceFilePath
|
downLoadDeviceFilePath
|
||||||
} from '@/api/cs-device-boot/fileService.ts'
|
} from '@/api/cs-device-boot/fileService.ts'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { useAdminInfo } from '@/stores/adminInfo'
|
||||||
import { downLoadFile } from '@/api/cs-system-boot/manage.ts'
|
import { downLoadFile } from '@/api/cs-system-boot/manage.ts'
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
|
const adminInfo = useAdminInfo()
|
||||||
const downLoading = ref(false)
|
const downLoading = ref(false)
|
||||||
const emit = defineEmits(['downLoadFile'])
|
const emit = defineEmits(['downLoadFile'])
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
@@ -146,14 +146,16 @@ const handleDownLoad = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {})
|
onMounted(() => { })
|
||||||
onUnmounted(() => {})
|
onUnmounted(() => { })
|
||||||
const status = ref(0)
|
const status = ref(0)
|
||||||
const mqttFileName = ref('')
|
const mqttFileName = ref('')
|
||||||
const setStatus = (val: any) => {
|
const setStatus = (val: any) => {
|
||||||
status.value = parseInt(Number((val.nowStep / val.allStep) * 100))
|
status.value = parseInt(Number((val.nowStep / val.allStep) * 100)) || 0
|
||||||
|
|
||||||
mqttFileName.value = val.fileName
|
mqttFileName.value = val.fileName
|
||||||
downLoading.value=true
|
if (adminInfo.userIndex != val.userId) return
|
||||||
|
downLoading.value = true
|
||||||
if (status.value == 100) {
|
if (status.value == 100) {
|
||||||
downLoadDeviceFilePath({ nDid: fileData.value.nDid, name: fileData.value.prjDataPath }).then((ress: any) => {
|
downLoadDeviceFilePath({ nDid: fileData.value.nDid, name: fileData.value.prjDataPath }).then((ress: any) => {
|
||||||
if (ress.code == 'A0000') {
|
if (ress.code == 'A0000') {
|
||||||
@@ -196,9 +198,11 @@ defineExpose({ open, setStatus })
|
|||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.progress_left {
|
.progress_left {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.progress_right {
|
.progress_right {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
|
|||||||
@@ -113,6 +113,12 @@
|
|||||||
:value="item.id"></el-option>
|
:value="item.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item for="-" label="统计类型" label-width="80px">
|
||||||
|
<el-select style="width: 120px" v-model="searchForm.type" placeholder="请选择值类型">
|
||||||
|
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item for="-" label="值类型">
|
<el-form-item for="-" label="值类型">
|
||||||
<el-select style="width: 12px !important" v-model="searchForm.dataLevel">
|
<el-select style="width: 12px !important" v-model="searchForm.dataLevel">
|
||||||
<el-option value="Primary" label="一次值"></el-option>
|
<el-option value="Primary" label="一次值"></el-option>
|
||||||
@@ -129,12 +135,7 @@
|
|||||||
:value="vv"></el-option>
|
:value="vv"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item for="-" label="统计类型" label-width="80px">
|
|
||||||
<el-select style="width: 120px" v-model="searchForm.type" placeholder="请选择值类型">
|
|
||||||
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name"
|
|
||||||
:value="item.id"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:operation>
|
<template v-slot:operation>
|
||||||
<el-button type="primary" icon="el-icon-Download" @click="handleExport">
|
<el-button type="primary" icon="el-icon-Download" @click="handleExport">
|
||||||
@@ -756,7 +757,8 @@ const formatCountOptions = (list: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
tableHeaderRef.value && tableHeaderRef.value[activeName.value]?.computedSearchRow()
|
|
||||||
|
tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
const flag = ref(false)
|
const flag = ref(false)
|
||||||
|
|||||||
Reference in New Issue
Block a user