<!-- 
    inf交易查询条件面板
    用法：
        1、提供两个具名slot分别对应持续展示区和可控（展开收起）展示区，根据页面实际情况单选或全选使用
        2、needToggle：接收一个属性，控制‘展开/收起’按钮是否显示，默认为true，显示
        3、handleSearch：查询按钮事件提供回调函数用于控制按钮状态，父组件查询事件中，在适当时机调用即可控制按钮状态
    示例如下：
    <template slot='keepShow'> 持续展示元素 </template>
    <template slot='changeShow'> 可控展示元素 </template>

    父组件查询事件写法
    handleSearch(callback){
        // post请求数据等逻辑处理....
        callback()  // 调用回调函数控制按钮状态
    }

 -->

<template>

    <div class="searchGroup">
        <!-- 保持展示区 -->
        <slot name="keepShow"></slot>
        <!-- 可控展示区 -->
        <slot name="changeShow" v-if="searchToggle"></slot>
        <!-- 通用按钮 -->
        <div class="commonBtn">
            <el-button size="small" @click="handleReset">重置</el-button>
            <el-button size="small" type="primary" icon="el-icon-search" @click="handleSearch" :loading="searchLoading">
                查询</el-button>
            <el-button size="small" type="text" @click="handleToggle" v-show="needToggle">
                {{searchToggle?'收起': '展开'}}
                <i :class="searchToggle? 'el-icon-arrow-up': 'el-icon-arrow-down'"></i>
            </el-button>
        </div>
    </div>

</template>

<script>
    export default {
        props: {
            // 展开收起按钮是否显示
            needToggle: {
                type: Boolean,
                default: true
            }

        },

        data: function () {
            return {
                searchToggle: false,
                searchLoading: false,
            }
        },

        methods: {
            // 查询
            handleSearch() {
                this.searchLoading = true
                this.$emit("handleSearch", () => {
                    this.searchLoading = false
                })
            },
            // 重置
            handleReset() {
                this.$emit("handleReset")
            },
            // 展开收起
            handleToggle() {
                this.searchToggle = !this.searchToggle
            }
        }
    }

</script>

<style scoped>
    .searchGroup {
        padding: 20px 20px 10px 20px;
        border-bottom: 10px solid rgb(232, 232, 232);
    }

    .commonBtn {
        display: flex;
        justify-content: right;
        padding-right: 20px;
        margin-top: 10px;
    }
</style>