|
|
@@ -68,8 +68,8 @@ const handleColumns = (columns: any, status?: string) => {
|
|
|
}
|
|
|
|
|
|
// 获取表格列
|
|
|
-const getTableColumns = async (isInit: boolean) => {
|
|
|
- tableLoading.value = true
|
|
|
+const getTableColumns = async () => {
|
|
|
+ tableLoadingColumn.value = true
|
|
|
await $api.getBookingTableColumns().then((res: any) => {
|
|
|
if (res.code === 200) {
|
|
|
bookingTable.value.columns = [
|
|
|
@@ -80,20 +80,19 @@ const getTableColumns = async (isInit: boolean) => {
|
|
|
}
|
|
|
})
|
|
|
nextTick(() => {
|
|
|
- if (!isInit) {
|
|
|
- tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
- tableLoading.value = false
|
|
|
- }
|
|
|
+ tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
+ tableLoadingColumn.value = false
|
|
|
})
|
|
|
}
|
|
|
|
|
|
const pageInfo = ref({ pageNo: 1, pageSize: 100, total: 0 })
|
|
|
|
|
|
+const tempSearch = ref()
|
|
|
// 获取表格数据
|
|
|
let filterdataobj: any = {}
|
|
|
-const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
+const getTableData = async (isPageChange?: boolean) => {
|
|
|
const rc = isPageChange ? pageInfo.value.total : -1
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingTableData.value = true
|
|
|
await $api
|
|
|
.getBookingTableData({
|
|
|
cp: pageInfo.value.pageNo,
|
|
|
@@ -106,7 +105,7 @@ const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
if (res.code === 200) {
|
|
|
bookingTable.value.data = res.data.searchData || []
|
|
|
pageInfo.value.total = Number(res.data.rc)
|
|
|
-
|
|
|
+ tempSearch.value = res.data.tmp_search
|
|
|
// 拥有所有字段的表格
|
|
|
setTimeout(() => {
|
|
|
allTable.value.columns = handleColumns(res.data.allColums, 'all')
|
|
|
@@ -119,15 +118,13 @@ const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
|
|
|
}
|
|
|
})
|
|
|
nextTick(() => {
|
|
|
- if (!isInit) {
|
|
|
- tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
- tableLoading.value = false
|
|
|
- }
|
|
|
+ tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
+ tableLoadingTableData.value = false
|
|
|
})
|
|
|
}
|
|
|
// 查询列表数据
|
|
|
const searchTableData = (data: any) => {
|
|
|
- tableLoading.value = true
|
|
|
+ tableLoadingTableData.value = true
|
|
|
filterdataobj = data
|
|
|
$api
|
|
|
.getBookingTableData({
|
|
|
@@ -151,9 +148,10 @@ const searchTableData = (data: any) => {
|
|
|
} else {
|
|
|
bookingTable.value.data = res.data.searchData || []
|
|
|
pageInfo.value.total = Number(res.data.rc)
|
|
|
+ tempSearch.value = res.data.tmp_search
|
|
|
nextTick(() => {
|
|
|
tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
- tableLoading.value = false
|
|
|
+ tableLoadingTableData.value = false
|
|
|
})
|
|
|
// 拥有所有字段的表格
|
|
|
setTimeout(() => {
|
|
|
@@ -170,11 +168,9 @@ const searchTableData = (data: any) => {
|
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
|
- tableLoading.value = true
|
|
|
- Promise.all([getTableColumns(true), getTableData(true)]).finally(() => {
|
|
|
+ Promise.all([getTableColumns(), getTableData()]).finally(() => {
|
|
|
nextTick(() => {
|
|
|
tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
- tableLoading.value = false
|
|
|
})
|
|
|
})
|
|
|
})
|
|
|
@@ -276,6 +272,44 @@ 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(bookingTable.value.columns)
|
|
|
+ } else {
|
|
|
+ column = buildColumnString(allTable.value.columns)
|
|
|
+ }
|
|
|
+
|
|
|
+ $api
|
|
|
+ .getAllBookingTableData({
|
|
|
+ '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 = {
|
|
|
@@ -294,7 +328,8 @@ const exportTable = (status: number) => {
|
|
|
allTableRef.value?.exportData(exportConfig)
|
|
|
}
|
|
|
|
|
|
-const tableLoading = ref(false)
|
|
|
+const tableLoadingColumn = ref(false)
|
|
|
+const tableLoadingTableData = ref(false)
|
|
|
|
|
|
const CustomizeColumnsRef = ref()
|
|
|
// 打开定制表格弹窗
|
|
|
@@ -314,7 +349,7 @@ const handleCustomizeColumns = () => {
|
|
|
}
|
|
|
// 定制表格
|
|
|
const customizeColumns = async () => {
|
|
|
- await getTableColumns(false)
|
|
|
+ await getTableColumns()
|
|
|
nextTick(() => {
|
|
|
tableRef.value && autoWidth(bookingTable.value, tableRef.value)
|
|
|
})
|
|
|
@@ -357,7 +392,12 @@ defineExpose({
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
- <div style="padding: 0px 24px" class="booking-table">
|
|
|
+ <div
|
|
|
+ style="padding: 0px 24px"
|
|
|
+ class="booking-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">
|
|
|
@@ -373,7 +413,7 @@ defineExpose({
|
|
|
</div>
|
|
|
<vxe-grid
|
|
|
ref="tableRef"
|
|
|
- v-vloading="tableLoading"
|
|
|
+ v-vloading="tableLoadingTableData || tableLoadingColumn"
|
|
|
:height="props.height"
|
|
|
:style="{ border: 'none' }"
|
|
|
v-bind="bookingTable"
|
|
|
@@ -382,7 +422,7 @@ defineExpose({
|
|
|
@checkbox-all="handleCheckAllChange"
|
|
|
>
|
|
|
<!-- 空数据时的插槽 -->
|
|
|
- <template #empty>
|
|
|
+ <template #empty v-if="!tableLoadingTableData && bookingTable.data.length === 0">
|
|
|
<VEmpty>
|
|
|
<template #suggestion>
|
|
|
<p style="color: var(--color-neutral-3)">
|
|
|
@@ -431,12 +471,12 @@ defineExpose({
|
|
|
background
|
|
|
layout="sizes, prev, pager, next"
|
|
|
:total="pageInfo.total"
|
|
|
- @size-change="getTableData(false, true)"
|
|
|
- @current-change="getTableData(false, true)"
|
|
|
+ @size-change="getTableData(true)"
|
|
|
+ @current-change="getTableData(true)"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <DownloadDialog @export="exportTable" ref="downloadDialogRef" />
|
|
|
+ <DownloadDialog @export="getExportTableData" ref="downloadDialogRef" />
|
|
|
<CustomizeColumns @customize="customizeColumns" ref="CustomizeColumnsRef" />
|
|
|
</div>
|
|
|
</template>
|