Newer
Older
smart-metering-front / src / components / SearchBar / index.vue
Stephanie on 1 Dec 2022 1 KB first commit
<script lang="ts" setup name="SearchBar">
const props = defineProps({
  showMore: {
    type: Boolean,
    default: false,
  },
  unfold: {
    type: Boolean,
    default: false,
  },
})

const emit = defineEmits(['toggle'])

const isUnfold = ref(!props.unfold)

watch(() => props.unfold, () => toggle(), {
  immediate: true,
})

function toggle() {
  isUnfold.value = !isUnfold.value
  emit('toggle', isUnfold.value)
}
</script>

<template>
  <div class="search-container">
    <slot />
    <div v-if="showMore" class="more">
      <el-button text size="small" @click="toggle">
        <template #icon>
          <el-icon>
            <svg-icon :name="isUnfold ? 'ep:caret-top' : 'ep:caret-bottom'" />
          </el-icon>
        </template>
        {{ isUnfold ? '收起' : '展开' }}
      </el-button>
    </div>
  </div>
</template>

<style lang="scss" scoped>
.search-container {
  position: relative;
  margin: 20px 0;
  padding: 20px;
  background-color: var(--el-fill-color-lighter);
  transition: background-color 0.3s;

  &:first-child {
    margin-top: 0;
  }

  &:last-child {
    margin-bottom: 0;
  }

  :deep(.el-form) {
    margin-bottom: -10px;

    .el-select {
      width: 100%;
    }

    .el-date-editor {
      width: 100%;
    }
  }

  .more {
    position: relative;
    text-align: center;
    margin-bottom: -10px;
  }
}
</style>