From fe384a3020fd2080d843704537b77954a8d82707 Mon Sep 17 00:00:00 2001
From: ahao <liuhaoai545@gmail.com>
Date: 星期五, 29 九月 2023 00:06:57 +0800
Subject: [PATCH] fix #I8550V https://gitee.com/dromara/RuoYi-Vue-Plus/issues/I8550V
---
src/components/RightToolbar/index.vue | 121 +++++++++++++++++++---------------------
1 files changed, 58 insertions(+), 63 deletions(-)
diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue
index fd94360..0f4219f 100644
--- a/src/components/RightToolbar/index.vue
+++ b/src/components/RightToolbar/index.vue
@@ -1,92 +1,82 @@
+<template>
+ <div class="top-right-btn" :style="style">
+ <el-row>
+ <el-tooltip class="item" effect="dark" :content="showSearch ? '闅愯棌鎼滅储' : '鏄剧ず鎼滅储'" placement="top" v-if="search">
+ <el-button circle icon="Search" @click="toggleSearch()" />
+ </el-tooltip>
+ <el-tooltip class="item" effect="dark" content="鍒锋柊" placement="top">
+ <el-button circle icon="Refresh" @click="refresh()" />
+ </el-tooltip>
+ <el-tooltip class="item" effect="dark" content="鏄剧ず/闅愯棌鍒�" placement="top" v-if="columns">
+ <el-popover placement="bottom" trigger="click">
+ <div class="tree-header">鏄剧ず/闅愯棌鍒�</div>
+ <el-tree
+ ref="columnRef"
+ :data="columns"
+ show-checkbox
+ @check="columnChange"
+ node-key="key"
+ :props="{ label: 'label', children: 'children' }"
+ ></el-tree>
+ <template #reference>
+ <el-button circle icon="Menu" />
+ </template>
+ </el-popover>
+ </el-tooltip>
+ </el-row>
+ </div>
+</template>
+
<script setup lang="ts">
-import { TransferKey } from "element-plus";
-import { PropType } from "vue";
+import { propTypes } from '@/utils/propTypes';
const props = defineProps({
- showSearch: {
- type: Boolean,
- default: true,
- },
- columns: {
- type: Array as PropType<FieldOption[]>,
- },
- search: {
- type: Boolean,
- default: true,
- },
- gutter: {
- type: Number,
- default: 10,
- },
+ showSearch: propTypes.bool.def(true),
+ columns: {
+ type: Array as PropType<FieldOption[]>,
+ },
+ search: propTypes.bool.def(true),
+ gutter: propTypes.number.def(10),
})
+const columnRef = ref<ElTreeInstance>();
const emits = defineEmits(['update:showSearch', 'queryTable']);
-// 鏄鹃殣鏁版嵁
-const value = ref<Array<number>>([]);
-// 寮瑰嚭灞傛爣棰�
-const title = ref("鏄剧ず/闅愯棌");
-// 鏄惁鏄剧ず寮瑰嚭灞�
-const open = ref(false);
-
const style = computed(() => {
- const ret: any = {};
- if (props.gutter) {
- ret.marginRight = `${props.gutter / 2}px`;
- }
- return ret;
+ const ret: any = {};
+ if (props.gutter) {
+ ret.marginRight = `${props.gutter / 2}px`;
+ }
+ return ret;
});
// 鎼滅储
function toggleSearch() {
- emits("update:showSearch", !props.showSearch);
+ emits("update:showSearch", !props.showSearch);
}
// 鍒锋柊
function refresh() {
- emits("queryTable");
+ emits("queryTable");
}
-// 鍙充晶鍒楄〃鍏冪礌鍙樺寲
-function dataChange(data: TransferKey[]) {
+// 鏇存敼鏁版嵁鍒楃殑鏄剧ず鍜岄殣钘�
+function columnChange(...args: any[]) {
props.columns?.forEach((item) => {
- item.visible = !data.includes(item.key);
+ item.visible = args[1].checkedKeys.includes(item.key);
})
-}
-
-// 鎵撳紑鏄鹃殣鍒梔ialog
-const showColumn = () => {
- open.value = true;
}
// 鏄鹃殣鍒楀垵濮嬮粯璁ら殣钘忓垪
onMounted(() => {
- props.columns?.forEach((item) => {
- if (!item.visible) {
- value.value.push(item.key);
- }
- })
+ props.columns?.forEach((item) => {
+ if (item.visible) {
+ columnRef.value?.setChecked(item.key, true, false);
+ // value.value.push(item.key);
+ }
+ })
})
</script>
-
-<template>
- <div class="top-right-btn" :style="style">
- <el-row>
- <el-tooltip class="item" effect="dark" :content="showSearch ? '闅愯棌鎼滅储' : '鏄剧ず鎼滅储'" placement="top" v-if="search">
- <el-button circle icon="Search" @click="toggleSearch()" />
- </el-tooltip>
- <el-tooltip class="item" effect="dark" content="鍒锋柊" placement="top">
- <el-button circle icon="Refresh" @click="refresh()" />
- </el-tooltip>
- <el-tooltip class="item" effect="dark" content="鏄鹃殣鍒�" placement="top" v-if="columns">
- <el-button circle icon="Menu" @click="showColumn()" />
- </el-tooltip>
- </el-row>
- <el-dialog :title="title" v-model="open" append-to-body>
- <el-transfer :titles="['鏄剧ず', '闅愯棌']" v-model="value" :data="columns" @change="dataChange"></el-transfer>
- </el-dialog>
- </div>
-</template>
<style lang="scss" scoped>
:deep(.el-transfer__button) {
@@ -101,4 +91,9 @@
.my-el-transfer {
text-align: center;
}
+.tree-header{
+ width: 100%;
+ line-height: 24px;
+ text-align: center;
+}
</style>
--
Gitblit v1.9.3