From 8a1c08baaf0ee002b471996b195e7da180b90209 Mon Sep 17 00:00:00 2001 From: feige <791364011@qq.com> Date: 星期一, 21 七月 2025 09:38:47 +0800 Subject: [PATCH] 增加了前端代码库 --- src/components/RightToolbar/index.vue | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 154 insertions(+), 0 deletions(-) diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..7865214 --- /dev/null +++ b/src/components/RightToolbar/index.vue @@ -0,0 +1,154 @@ +<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 size="mini" circle icon="el-icon-search" @click="toggleSearch()" /> + </el-tooltip> + <el-tooltip class="item" effect="dark" content="鍒锋柊" placement="top"> + <el-button size="mini" circle icon="el-icon-refresh" @click="refresh()" /> + </el-tooltip> + <el-tooltip class="item" effect="dark" content="鏄鹃殣鍒�" placement="top" v-if="columns"> + <el-button size="mini" circle icon="el-icon-menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/> + <el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'"> + <el-button size="mini" circle icon="el-icon-menu" /> + <el-dropdown-menu slot="dropdown"> + <!-- 鍏ㄩ��/鍙嶉�� 鎸夐挳 --> + <el-dropdown-item> + <el-checkbox :indeterminate="isIndeterminate" v-model="isChecked" @change="toggleCheckAll"> 鍒楀睍绀� </el-checkbox> + </el-dropdown-item> + <div class="check-line"></div> + <template v-for="item in columns"> + <el-dropdown-item :key="item.key"> + <el-checkbox v-model="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" /> + </el-dropdown-item> + </template> + </el-dropdown-menu> + </el-dropdown> + </el-tooltip> + </el-row> + <el-dialog :title="title" :visible.sync="open" append-to-body> + <el-transfer + :titles="['鏄剧ず', '闅愯棌']" + v-model="value" + :data="columns" + @change="dataChange" + ></el-transfer> + </el-dialog> + </div> +</template> +<script> +export default { + name: "RightToolbar", + data() { + return { + // 鏄鹃殣鏁版嵁 + value: [], + // 寮瑰嚭灞傛爣棰� + title: "鏄剧ず/闅愯棌", + // 鏄惁鏄剧ず寮瑰嚭灞� + open: false + } + }, + props: { + /* 鏄惁鏄剧ず妫�绱㈡潯浠� */ + showSearch: { + type: Boolean, + default: true + }, + /* 鏄鹃殣鍒椾俊鎭� */ + columns: { + type: Array + }, + /* 鏄惁鏄剧ず妫�绱㈠浘鏍� */ + search: { + type: Boolean, + default: true + }, + /* 鏄鹃殣鍒楃被鍨嬶紙transfer绌挎妗嗐�乧heckbox澶嶉�夋锛� */ + showColumnsType: { + type: String, + default: "checkbox" + }, + /* 鍙冲杈硅窛 */ + gutter: { + type: Number, + default: 10 + }, + }, + computed: { + style() { + const ret = {} + if (this.gutter) { + ret.marginRight = `${this.gutter / 2}px` + } + return ret + }, + isChecked: { + get() { + return this.columns.every((col) => col.visible) + }, + set() {} + }, + isIndeterminate() { + return this.columns.some((col) => col.visible) && !this.isChecked + } + }, + created() { + if (this.showColumnsType == 'transfer') { + // 鏄鹃殣鍒楀垵濮嬮粯璁ら殣钘忓垪 + for (let item in this.columns) { + if (this.columns[item].visible === false) { + this.value.push(parseInt(item)) + } + } + } + }, + methods: { + // 鎼滅储 + toggleSearch() { + this.$emit("update:showSearch", !this.showSearch) + }, + // 鍒锋柊 + refresh() { + this.$emit("queryTable") + }, + // 鍙充晶鍒楄〃鍏冪礌鍙樺寲 + dataChange(data) { + for (let item in this.columns) { + const key = this.columns[item].key + this.columns[item].visible = !data.includes(key) + } + }, + // 鎵撳紑鏄鹃殣鍒梔ialog + showColumn() { + this.open = true + }, + // 鍗曞嬀閫� + checkboxChange(event, label) { + this.columns.filter(item => item.label == label)[0].visible = event + }, + // 鍒囨崲鍏ㄩ��/鍙嶉�� + toggleCheckAll() { + const newValue = !this.isChecked + this.columns.forEach((col) => (col.visible = newValue)) + } + }, +} +</script> +<style lang="scss" scoped> +::v-deep .el-transfer__button { + border-radius: 50%; + padding: 12px; + display: block; + margin-left: 0px; +} +::v-deep .el-transfer__button:first-child { + margin-bottom: 10px; +} +.check-line { + width: 90%; + height: 1px; + background-color: #ccc; + margin: 3px auto; +} +</style> -- Gitblit v1.9.1