<template> <div class="from-content" style="width: 100%"> <div class="InputSearch input" v-if="params && types == 'input'"> <ElInput style="width: 100%" v-model="value" :placeholder="placeholder" @change="handleSearch" ></ElInput> <img src="./search.svg" @click="handleFormShow" /> </div> <ElPopover v-else ref="PopoverRef" placement="bottom" popper-class="global-input-search-popover" :popperOptions="popperOptions" :visibleArrow="false" :width="this.width" trigger="click" @show="handleShow" style="width: 100%" > <div class="InputSearch" slot="reference" ref="ReferenceInputRef"> <span>{{ placeholder }}</span> <img src="./search.svg" @click="handleFormShow" /> </div> <div style="width: 100%; max-height: 360px"> <slot> <Form v-if="formList && formList.length" class="form" ref="FormConfigRef" :formList="formList" v-bind="getFormConfigOptions" /> <!-- <ElEmpty v-else description="暂无搜索内容"></ElEmpty> --> <div v-else class="no-data">暂无数据</div> </slot> <div class="footer"> <Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="handleResetForm" > 重置 </Button> <Button @click.native="handleSearch"> 搜索 </Button> </div> </div> </ElPopover> </div> </template> <script> import Button from "@screen/components/Buttons/Button.vue"; import Form from "@screen/components/FormConfig"; import { cloneDeep } from "lodash"; export default { name: "InputSearch", components: { Button, Form, }, props: { type: { type: String, default: "form", }, placeholder: { type: String, default: "请点击右侧图标筛选", }, valueData: { type: String, }, params: { type: String, }, queryParams: { type: Array, }, formConfigOptions: { type: Object, default: null, }, formList: { type: Array, default: () => [], }, }, data() { return { types: this.type, value: this.valueData, width: null, popperOptions: { popHideCallBack: () => { // console.log("---") }, }, }; }, emit: ["handleSearch"], computed: { getFormConfigOptions() { return { column: "1", labelWidth: "120px", ...this.formConfigOptions, }; }, }, methods: { handleFormShow() { console.log(this.params, this.types); if (this.params) { if (this.types == "form") { this.types = "input"; } else { this.types = "form"; } } else { this.types = "form"; } console.log(this.params, this.types); }, handleShow() { if (this.width) return; this.width = this.$refs.ReferenceInputRef.getBoundingClientRect().width; }, handleResetForm() { this.$refs.FormConfigRef?.reset(); this.$refs.PopoverRef.doClose(); this.$emit("handleSearch", cloneDeep(this.$refs.FormConfigRef?.formData)); }, handleSearch() { if (this.types == "form") { this.$refs.FormConfigRef.validate() .then((result) => { this.$refs.PopoverRef.doClose(); this.$emit("handleSearch", result); }) .catch((err) => { console.log("catch"); }); } else { let params = {}; params[this.params] = this.value; this.$emit("handleSearch", params); } }, }, }; </script> <style lang="scss" scoped> .InputSearch { width: 100%; height: 26px; 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; font-size: 12px; font-family: PingFang SC, PingFang SC; font-weight: 400; color: #ffffff; line-height: 14px; } .input ::v-deep .el-input__inner { background: none; height: auto !important; font-size: 12px; padding: 0px 0; line-height: 14px; } ::v-deep .el-input__inner::placeholder { font-size: 12px; } </style>