From 1495679b89ab371d7fc939abc96518804fd39b38 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E9=99=8C?= <xiaomo.drip@gmail.com>
Date: Tue, 9 Jan 2024 12:42:47 +0800
Subject: [PATCH] =?UTF-8?q?table=20=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/xTable/columnItem.vue | 9 +++++----
 src/components/xTable/index.vue      | 4 ++--
 src/views/table/1/index.vue          | 6 +++++-
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/components/xTable/columnItem.vue b/src/components/xTable/columnItem.vue
index 684ecb2..a7a6a11 100644
--- a/src/components/xTable/columnItem.vue
+++ b/src/components/xTable/columnItem.vue
@@ -81,12 +81,13 @@ export default {
 				return;
 			} else if (item.http && item.http.url && item.http.key && String(row[item.http.key])?.trim()) {
 
-				this.$confirm(item.http.title || '确定要执行?', '提示', { type: item.http.type || 'warning' }).then(() => {
-					const loading = this.$loading();
-					this.$http.post(item.http.url, { [item.http.key]: row[item.http.key] }).then((res) => {
-						loading.close();
+				this.$confirm(item.http.tips || '确定要执行?', item.http.title || '提示', { type: item.http.type || 'warning' }).then(() => {
+					var param = Object.assign({}, { [item.http.key]: row[item.http.key] }, item.http.param || {});
+					this.$http.post(item.http.url, param).then((res) => {
 						if (res.code == 200) {
 							this.$message.success(res.message || '操作成功')
+							// 刷新
+							this.$emit('xtablerefresh');
 							return;
 						}
 						this.$alert(res.message || '操作失败', "提示", { type: 'error' });
diff --git a/src/components/xTable/index.vue b/src/components/xTable/index.vue
index 90320ba..fd38061 100644
--- a/src/components/xTable/index.vue
+++ b/src/components/xTable/index.vue
@@ -8,13 +8,13 @@
 					<el-table-column :align="item.align || 'left'" :label="item.label" v-if="item.column && item.column.length > 0">
 						<el-table-column v-for="(items, indexs) in item.column" :key="indexs" :align="items.align || 'left'" :column-key="items.prop || items.name" :label="items.label" :prop="items.prop || items.name" :width="items.width || 'auto'" :min-width="items.minWidth || 'auto'" :sortable="items.sortable" :fixed="items.fixed" :filters="items.filters" :filter-method="remoteFilter || !items.filters ? null : filterHandler" :show-overflow-tooltip="items.showOverflowTooltip">
 							<template #default="{ row }">
-								<columnItem :row="row" :item="items" @xtablehandleClick="xtablehandleClick"> </columnItem>
+								<columnItem :row="row" :item="items" @xtablehandleClick="xtablehandleClick" @xtablerefresh="refresh"> </columnItem>
 							</template>
 						</el-table-column>
 					</el-table-column>
 					<el-table-column v-else-if="!item.hide && (item.name || item.prop)" :align="item.align || 'left'" :column-key="item.prop || item.name" :label="item.label" :prop="item.prop || item.name" :width="item.width || 'auto'" :min-width="item.minWidth || 'auto'" :sortable="item.sortable" :fixed="item.fixed" :filters="item.filters" :filter-method="remoteFilter || !item.filters ? null : filterHandler" :show-overflow-tooltip="item.showOverflowTooltip">
 						<template #default="{ row }">
-							<columnItem :row="row" :item="item" @xtablehandleClick="xtablehandleClick"> </columnItem>
+							<columnItem :row="row" :item="item" @xtablehandleClick="xtablehandleClick" @xtablerefresh="refresh"> </columnItem>
 						</template>
 					</el-table-column>
 				</template>
diff --git a/src/views/table/1/index.vue b/src/views/table/1/index.vue
index 39f368d..61eb7e1 100644
--- a/src/views/table/1/index.vue
+++ b/src/views/table/1/index.vue
@@ -3,7 +3,7 @@
 		<el-container class="container">
 			<el-header v-if="tabs && tabs.length > 0">
 				<el-tabs v-model="search[tabskey]" @tab-change="tabChange" style="--el-tabs-header-height: 58px; line-height: 58px;">
-					<el-tab-pane v-for="item in tabs" :key="item.value" :label="item.label + (item.num ? '(' + item.num + ')' : '')" :name="item.value" />
+					<el-tab-pane v-for="item in tabs" :key="item.value" :label="item.label + ((item.num || (search[tabskey] == item.value && !$refs.table.loading)) ? '(' + (search[tabskey] == item.value ? $refs.table.total : (item.num || 0)) + ')' : '')" :name="item.value" />
 				</el-tabs>
 			</el-header>
 			<el-header v-if="operation.plus || operation.batchdeletion || filter.length > 0">
@@ -231,6 +231,10 @@ export default {
 	margin: 0;
 }
 
+.container:deep(.el-tabs__nav-wrap::after) {
+	background: none
+}
+
 @media (max-width: 992px) {
 	.container:deep(.el-header) .right-panel {
 		display: block;