123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <!--输入搜索框用此组件,限制了中英文输入长度-->
- <template>
- <div class="input-box">
- <!--普通输入框-->
- <el-input v-model="value" @input="searchInput($event)" :placeholder="placeholdertip" :maxlength="maxLen" :ref="inputName" v-if="mode == 'input'"></el-input>
- <!--搜索框,支持自动搜索-->
- <el-input v-if="mode == 'search' && openAutoSearch" :maxlength="maxLen" @compositionend.native="handlecompositionend" @compositionstart.native="handlecompositionstart" size="mini" class="console-tree-search" :placeholder="placeholdertip" suffix-icon="tree-search-icon" @click.native="handleClickOnTableSearchInput" @keyup.native="handleTreeEnter" v-model="value" @input="searchInput($event)" :ref="inputName">
- <i slot="suffix" v-if="value" @click="handleTreeEnter(value = '')" class="el-input__icon el-icon-circle-close el-input__clear" style="margin-right: 14px;"></i>
- </el-input>
- <!--搜索框,支持回车搜索-->
- <el-input v-if="mode == 'search' && !openAutoSearch" :maxlength="maxLen" size="mini" class="console-tree-search" :placeholder="placeholdertip" suffix-icon="tree-search-icon" @click.native="handleClickOnTableSearchInput" @keyup.enter.native="handleTreeEnter" v-model="value" @input="searchInput($event)" :ref="inputName">
- <i slot="suffix" v-if="value" @click="handleTreeEnter(value = '')" class="el-input__icon el-icon-circle-close el-input__clear" style="margin-right: 14px;"></i>
- </el-input>
- </div>
- </template>
- <script>
- module.exports = {
- data() {
- return {
- compositioning: false,
- searchTimer: null,
- keyStatus: null,
- value: ''
- }
- },
-
- props: {
- //输入框提示信息
- placeholdertip: {
- type: String,
- },
- //输入框模式 input 仅输入功能 search 输入并带搜索功能
- mode: {
- default: 'input',
- type: String
- },
- maxLen: {
- type: Number,
- default: 120
- },
- inputName: {
- type: String,
- default: 'searchInput'
- },
- //是否开启自动搜索
- openAutoSearch: {
- type: Boolean,
- default: false
- }
- },
-
- methods: {
- /**
- * @method searchInput 输入后把新的搜索值传给父组件,input模式输入后通知父组件
- */
- searchInput (value) {
- if (value.length > this.maxLen) value = value.slice(0, this.maxLen)
- value = value.trim()
- this.$emit('input', value)
- },
- /**
- * @method handlecompositionend() 中文输入法
- */
- handlecompositionstart() {
- this.compositioning = true
- },
- /**
- * @method handlecompositionend() 中文输入法输入结束
- */
- handlecompositionend() {
- this.compositioning = false
- },
- keydownEvent(e) {
- //当输入中文按下回车松开时,不会触发keyup事件
- if (e.code == 'Enter' || e.code == 'NumpadEnter') {
- this.keyStatus = 'keyup'
- } else {
- this.keyStatus = 'keydown'
- }
- },
- keyupEvent() {
- this.keyStatus = 'keyup'
- },
- /**
- * @method handleClickOnTableSearchInput table搜索框点击事件
- */
- handleClickOnTableSearchInput(e) {
- // 如果是点击在搜索图标上,就去查询
- if (e && e.target && e.target.className && e.target.className.includes('el-input__icon')) this.handleTreeEnter()
- },
- /**
- * @method handleTreeEnter 搜索方法,search模式输入后通知父组件
- */
- handleTreeEnter() {
- //输入防抖
- clearTimeout(this.searchTimer)
- //如果还在中文输入
- if(this.compositioning) return
- this.searchTimer = setTimeout(() => {
- //如果键盘还是按下状态,持续输入
- if(this.keyStatus == 'keydown') return
- if (this.value.length > this.maxLen) this.value = this.value.slice(0, this.maxLen)
- this.value = this.value.trim()
- //把搜索值传到父组件
- this.$emit('search', this.value)
- }, 600)
- }
- }
- }
- </script>
- <style scoped>
- .input-box {
- width: 100%;
- display: inline-block;
- }
- /deep/ i.tree-search-icon {
- top: 6px;
- }
- /deep/ .el-input--suffix .el-input__inner {
- padding-right: 40px;
- }
- </style>
|