|
|
@@ -5,10 +5,8 @@ import { useRowClickStyle } from '@/hooks/rowClickStyle'
|
|
|
import dayjs from 'dayjs'
|
|
|
import { useRouter } from 'vue-router'
|
|
|
import { transportationMode } from '@/components/TransportationMode'
|
|
|
-import { useHeaderSearch } from '@/stores/modules/headerSearch'
|
|
|
|
|
|
const router = useRouter()
|
|
|
-const headerSearch = useHeaderSearch()
|
|
|
const props = defineProps({
|
|
|
height: {
|
|
|
type: Number,
|
|
|
@@ -67,7 +65,7 @@ const handleColumns = (columns: any, status?: string) => {
|
|
|
|
|
|
// 获取表格列
|
|
|
const getTableColumns = async (isInit: boolean) => {
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingColumn.value = true
|
|
|
await $api.getTrackingTableColumns().then((res: any) => {
|
|
|
if (res.code === 200) {
|
|
|
const index = trackingTable.value.columns.findIndex((item: any) => item.title === 'Action')
|
|
|
@@ -87,12 +85,13 @@ const getTableColumns = async (isInit: boolean) => {
|
|
|
}
|
|
|
})
|
|
|
nextTick(() => {
|
|
|
- !isInit && (tableLoading.value = false)
|
|
|
+ !isInit && (tableLoadingColumn.value = false)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
const pageInfo = ref({ pageNo: 1, pageSize: 100, total: 0 })
|
|
|
const TagsList = ref()
|
|
|
+const tempSearch = ref('')
|
|
|
|
|
|
// 获取表格数据
|
|
|
let filterdataobj: any = {}
|
|
|
@@ -103,6 +102,8 @@ const getSharedTableData = () => {
|
|
|
pageInfo.value.total = Number(trackingData.rc)
|
|
|
pageInfo.value.pageSize = Number(trackingData.ps)
|
|
|
TagsList.value = trackingData.tagsList
|
|
|
+ tempSearch.value = trackingData.tmp_search
|
|
|
+
|
|
|
if (trackingData.canEdiVgm && trackingTable.value.columns.length > 0) {
|
|
|
const index = trackingTable.value.columns.findIndex((item: any) => item.title === 'Action')
|
|
|
if (index === -1) {
|
|
|
@@ -114,6 +115,9 @@ const getSharedTableData = () => {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+ nextTick(() => {
|
|
|
+ tableRef.value && autoWidth(trackingTable.value, tableRef.value)
|
|
|
+ })
|
|
|
|
|
|
// 拥有所有字段的表格
|
|
|
setTimeout(() => {
|
|
|
@@ -131,7 +135,8 @@ const getSharedTableData = () => {
|
|
|
|
|
|
const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
const rc = isPageChange ? pageInfo.value.total : -1
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingTableData.value = true
|
|
|
+
|
|
|
if (
|
|
|
sessionStorage.getItem('clickParams') != null &&
|
|
|
sessionStorage.getItem('clickParams') != '{}'
|
|
|
@@ -140,6 +145,9 @@ const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
trackingTable.value.data = data.searchData || []
|
|
|
pageInfo.value.total = Number(data.rc)
|
|
|
TagsList.value = data.tagsList
|
|
|
+
|
|
|
+ tempSearch.value = data.tmp_search
|
|
|
+
|
|
|
if (data.canEdiVgm && trackingTable.value.columns.length > 0) {
|
|
|
const index = trackingTable.value.columns.findIndex((item: any) => item.title === 'Action')
|
|
|
if (index === -1) {
|
|
|
@@ -176,6 +184,8 @@ const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
if (res.code === 200) {
|
|
|
trackingTable.value.data = res.data.searchData || []
|
|
|
pageInfo.value.total = Number(res.data.rc)
|
|
|
+
|
|
|
+ tempSearch.value = res.data.tmp_search
|
|
|
if (res.data.canEdiVgm && trackingTable.value.columns.length > 0) {
|
|
|
const index = trackingTable.value.columns.findIndex(
|
|
|
(item: any) => item.title === 'Action'
|
|
|
@@ -202,13 +212,16 @@ const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
})
|
|
|
}
|
|
|
nextTick(() => {
|
|
|
- !isInit && (tableLoading.value = false)
|
|
|
+ if (!isInit) {
|
|
|
+ tableRef.value && autoWidth(trackingTable.value, tableRef.value)
|
|
|
+ tableLoadingTableData.value = false
|
|
|
+ }
|
|
|
})
|
|
|
}
|
|
|
|
|
|
// 查询列表数据
|
|
|
const searchTableData = (data: any) => {
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingTableData.value = true
|
|
|
filterdataobj = data
|
|
|
$api
|
|
|
.getTrackingTableData({
|
|
|
@@ -232,7 +245,11 @@ const searchTableData = (data: any) => {
|
|
|
} else {
|
|
|
trackingTable.value.data = res.data.searchData
|
|
|
pageInfo.value.total = Number(res.data.rc)
|
|
|
- tableLoading.value = false
|
|
|
+ tempSearch.value = res.data.tmp_search
|
|
|
+
|
|
|
+ nextTick(() => {
|
|
|
+ tableRef.value && autoWidth(trackingTable.value, tableRef.value)
|
|
|
+ })
|
|
|
|
|
|
// 拥有所有字段的表格
|
|
|
setTimeout(() => {
|
|
|
@@ -245,12 +262,15 @@ const searchTableData = (data: any) => {
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
+ .finally(() => {
|
|
|
+ tableLoadingTableData.value = false
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingColumn.value = true
|
|
|
Promise.all([getTableColumns(true)]).finally(() => {
|
|
|
- tableLoading.value = false
|
|
|
+ tableLoadingColumn.value = false
|
|
|
nextTick(() => {
|
|
|
tableRef.value && autoWidth(trackingTable.value, tableRef.value)
|
|
|
})
|
|
|
@@ -356,7 +376,45 @@ const handleDownload = () => {
|
|
|
downloadDialogRef.value.openDialog(props.tagsData, curSelectedColumns)
|
|
|
}
|
|
|
|
|
|
-// 导出表格
|
|
|
+const exportLoading = ref(false)
|
|
|
+// 获取导出表格数据
|
|
|
+const getExportTableData = (status: number) => {
|
|
|
+ exportLoading.value = true
|
|
|
+ const buildColumnString = (columns: any[]): string => {
|
|
|
+ return columns
|
|
|
+ .filter((item) => item.field)
|
|
|
+ .map((item) => item.title)
|
|
|
+ .join(',')
|
|
|
+ }
|
|
|
+
|
|
|
+ let column = ''
|
|
|
+ if (status === 1) {
|
|
|
+ column = buildColumnString(trackingTable.value.columns)
|
|
|
+ } else {
|
|
|
+ column = buildColumnString(allTable.value.columns)
|
|
|
+ }
|
|
|
+
|
|
|
+ $api
|
|
|
+ .getAllTrackingTableData({
|
|
|
+ selected_fields: column,
|
|
|
+ excel_filter_condition: props.tagsData.join(','),
|
|
|
+ tmp_search: tempSearch.value
|
|
|
+ })
|
|
|
+ .then((res: any) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ allTable.value.data = res.data.Data || []
|
|
|
+ nextTick(() => {
|
|
|
+ exportLoading.value = false
|
|
|
+ // 导出数据
|
|
|
+ exportTable(status)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ exportLoading.value = false
|
|
|
+ })
|
|
|
+}
|
|
|
+// 导出表格 status: 1 导出当前表格 2 导出所有字段表格
|
|
|
const exportTable = (status: number) => {
|
|
|
const exportConfig: any = {
|
|
|
type: 'xlsx',
|
|
|
@@ -376,7 +434,8 @@ const exportTable = (status: number) => {
|
|
|
allTableRef.value?.exportData(exportConfig)
|
|
|
}
|
|
|
|
|
|
-const tableLoading = ref(false)
|
|
|
+const tableLoadingColumn = ref(false)
|
|
|
+const tableLoadingTableData = ref(false)
|
|
|
|
|
|
const CustomizeColumnsRef = ref()
|
|
|
// 打开定制表格弹窗
|
|
|
@@ -449,7 +508,12 @@ defineExpose({
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
- <div style="padding: 0px 24px" class="tracking-table">
|
|
|
+ <div
|
|
|
+ style="padding: 0px 24px"
|
|
|
+ class="tracking-table"
|
|
|
+ v-loading.fullscreen.lock="exportLoading"
|
|
|
+ element-loading-background="rgb(43, 47, 54, 0.7)"
|
|
|
+ >
|
|
|
<div class="table-tools">
|
|
|
<div class="left-total-records">{{ selectedNumber }} Selected</div>
|
|
|
<div class="right-tools-btn">
|
|
|
@@ -466,7 +530,7 @@ defineExpose({
|
|
|
|
|
|
<vxe-grid
|
|
|
ref="tableRef"
|
|
|
- v-vloading="tableLoading"
|
|
|
+ v-vloading="tableLoadingColumn || tableLoadingTableData"
|
|
|
:height="props.height"
|
|
|
:style="{ border: 'none' }"
|
|
|
v-bind="trackingTable"
|
|
|
@@ -475,7 +539,7 @@ defineExpose({
|
|
|
@checkbox-all="handleCheckAllChange"
|
|
|
>
|
|
|
<!-- 空数据时的插槽 -->
|
|
|
- <template #empty>
|
|
|
+ <template #empty v-if="!tableLoadingTableData && trackingTable.data.length === 0">
|
|
|
<VEmpty>
|
|
|
<template #suggestion>
|
|
|
<p>We support the following references number to find tracking:</p>
|
|
|
@@ -533,7 +597,7 @@ defineExpose({
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <DownloadDialog @export="exportTable" ref="downloadDialogRef" />
|
|
|
+ <DownloadDialog @export="getExportTableData" ref="downloadDialogRef" />
|
|
|
<CustomizeColumns @customize="customizeColumns" ref="CustomizeColumnsRef" />
|
|
|
</div>
|
|
|
</template>
|