3 changed files with 108 additions and 39 deletions
@ -1,42 +1,111 @@ |
|||
<template> |
|||
<ElInput v-on="$listeners" :placeholder="placeholder" size="mini" class='InputSearch'> |
|||
<img slot="suffix" src="./search.svg"> |
|||
</ElInput> |
|||
<ElPopover placement="bottom" popper-class="global-input-search-popover" :popperOptions="popperOptions" |
|||
:visibleArrow="false" :width="this.width" trigger="hover" @show="handleShow"> |
|||
<div class='InputSearch' slot="reference" ref="ReferenceInputRef"> |
|||
<span>{{ placeholder }}</span> |
|||
<img src="./search.svg"> |
|||
</div> |
|||
|
|||
<div style="width: 100%"> |
|||
<slot> |
|||
<Form class="form" :formList="formList" v-bind="getFormConfigOptions" /> |
|||
<ElEmpty description="暂无搜索内容"></ElEmpty> |
|||
</slot> |
|||
|
|||
<div class="footer"> |
|||
<Button style="background-color: rgba(0, 179, 204, .3);"> |
|||
重置 |
|||
</Button> |
|||
<Button> |
|||
搜索 |
|||
</Button> |
|||
</div> |
|||
</div> |
|||
</ElPopover> |
|||
</template> |
|||
|
|||
<script> |
|||
import Button from '@screen/components/Buttons/Button.vue'; |
|||
import Form from '@screen/components/FormConfig'; |
|||
|
|||
export default { |
|||
name: 'InputSearch', |
|||
components: { |
|||
Button, |
|||
Form |
|||
}, |
|||
props: { |
|||
placeholder: { |
|||
type: String, |
|||
default: "请点击右侧图标筛选" |
|||
}, |
|||
formConfigOptions: { |
|||
type: Object, |
|||
default: null |
|||
}, |
|||
formList: { |
|||
type: Array, |
|||
default: () => [] |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
width: null, |
|||
popperOptions: {} |
|||
} |
|||
}, |
|||
emit: [ |
|||
'handleReset', |
|||
"handleSearch" |
|||
], |
|||
computed: { |
|||
getFormConfigOptions() { |
|||
return { |
|||
column: "1", |
|||
labelWidth: "120px", |
|||
...this.formConfigOptions |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
handleShow() { |
|||
if (this.width) return; |
|||
|
|||
this.width = this.$refs.ReferenceInputRef.getBoundingClientRect().width |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang='scss'> |
|||
div.el-popper.global-input-search-popover { |
|||
background: #064258; |
|||
|
|||
.footer { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: flex-end; |
|||
gap: 9px; |
|||
} |
|||
} |
|||
</style> |
|||
<style lang='scss' scoped> |
|||
.InputSearch { |
|||
height: 26px; |
|||
opacity: 1; |
|||
|
|||
::v-deep { |
|||
.el-input__inner { |
|||
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%) !important; |
|||
color: #fff; |
|||
border-radius: 2px; |
|||
|
|||
&::placeholder { |
|||
color: #fff; |
|||
} |
|||
} |
|||
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%) !important; |
|||
color: #fff; |
|||
border-radius: 2px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
padding: 3px 15px; |
|||
padding-right: 9px; |
|||
cursor: pointer; |
|||
|
|||
.el-input__suffix { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
} |
|||
} |
|||
font-size: 12px; |
|||
font-family: PingFang SC, PingFang SC; |
|||
font-weight: 400; |
|||
color: #FFFFFF; |
|||
line-height: 14px; |
|||
} |
|||
</style> |
|||
|
Loading…
Reference in new issue