el-select 點(diǎn)擊按鈕滾動(dòng)到選擇框頂部的實(shí)現(xiàn)代碼

主要代碼是在visibleChange 在這個(gè) popper 里面找到 .el-select-dropdown__list
let popper = ref.$refs.popper
const ref = this.$refs.select
let dom = popper.querySelector('.el-select-dropdown__list')
setTimeout(() => {
dom.scrollIntoView()
}, 800)<template>
<div class="SetTags">
<strong>標(biāo)簽:</strong>
<el-select
v-model="name"
size="medium"
ref="select"
clearable
filterable
multiple
placeholder="請選擇"
style="width: 370px"
@visible-change="visibleChange"
@change="selectChange"
>
<el-option :label="item.name" :value="item.id" v-for="(item, index) in selectList" :key="index">
<!-- :disabled="!item.id" -->
<div style="float: left">
<span v-if="!item.isHandle">{{ item.name }}</span>
<span v-else @click.stop.prevent="() => {}">
<el-input style="width: 120px" size="mini" maxlength="15" clearable v-model.lazy="item.name2"></el-input>
</span>
</div>
<div style="float: right; margin-right: 20px">
<span
style="margin: 0 5px; font-size: 14px; color: #409eff"
v-if="!item.isHandle"
@click.stop="isEditBtn(item, true)"
>編輯</span
>
<span
style="margin: 0 5px; font-size: 14px; color: #409eff"
v-if="item.isHandle"
@click.stop="isEditBtn(item, false)"
>保存</span
>
<span
style="margin: 0 5px; font-size: 14px; color: #409eff"
v-if="item.isHandle"
@click.stop="cancelBtn(item)"
>取消</span
>
</div>
</el-option>
</el-select>
</div>
</template>
<script>
import request from '@/utils/request'
export default {
components: {},
data () {
return {
name: [],
selectList: []
}
},
computed: {},
watch: {},
created () {},
mounted () {},
methods: {
async getSelectList () {
const res = await request({
url: '/op/tmsOrder/label/dropdown',
method: 'get'
})
res.data.forEach((item) => {
item.name2 = JSON.parse(JSON.stringify(item.name))
item.isHandle = false
})
this.selectList = res.data
},
handleSubmit () {
return new Promise((resolve, reject) => {
// if (this.name.length === 0) {
// this.$message.error('請選擇標(biāo)簽名稱')
// reject(new Error('數(shù)據(jù)校驗(yàn)失敗,請檢查'))
// }
resolve(this.name)
})
},
handleReset () {
this.name = []
},
// true 編輯 false 保存
async isEditBtn (item, bol) {
let apiUrl = '/op/tmsOrder/save/label'
if (bol) {
item.isHandle = true
} else {
// 新增
if (!item.id) {
await request({
url: apiUrl,
method: 'post',
data: {
name: item.name2
}
})
this.$message.success('新增成功')
this.getSelectList()
} else {
// 修改
await request({
url: apiUrl,
method: 'post',
data: {
name: item.name2,
id: item.id
}
})
}
this.$message.success('保存成功')
this.getSelectList()
}
},
cancelBtn (item) {
if (!item.name2 && !item.id) return this.selectList.splice(0, 1)
item.name2 = item.name
item.isHandle = false
},
visibleChange (visible) {
// 下拉框顯示隱藏
if (visible) {
const ref = this.$refs.select
console.log('ref:', ref)
let popper = ref.$refs.popper
console.log('popper:', popper)
if (popper.$el) popper = popper.$el
// 判斷是否有添加按鈕
if (!Array.from(popper.children).some((v) => v.className === 'btn-box')) {
const el = document.createElement('div')
el.className = 'btn-box'
el.innerHTML = `<a class="btn" style="font-size:14px;display:block;line-height:38px;text-align:center;">
<i class="el-icon-plus"></i>添加其他標(biāo)簽
</a>`
popper.appendChild(el)
el.onclick = () => {
let dom = popper.querySelector('.el-select-dropdown__list')
setTimeout(() => {
dom.scrollIntoView()
}, 800)
// 初始情況 沒有數(shù)據(jù)
if (this.selectList.length === 0) {
return this.selectList.unshift({ name: '', name2: '', id: '', isHandle: true })
}
if (this.selectList[0].name === '') {
this.$message.error('請回到選擇列表頂部,填寫第一項(xiàng)內(nèi)容')
return
}
this.selectList.unshift({ name: '', name2: '', id: '', isHandle: true })
}
}
} else {
if (this.selectList.length > 0 && !this.selectList[0].id) {
this.selectList.shift()
}
}
this.selectList.forEach((item) => {
item.isHandle = false
})
},
selectChange (e) {
let bol = e.some((item) => item == '' || item == null || item == undefined)
this.name = this.name.filter((item) => item !== '')
if (bol) return this.$message.error('此項(xiàng)不能進(jìn)行選中操作,請?zhí)顚憙?nèi)容后保存此項(xiàng)后重試!')
}
}
}
</script>
<style lang="scss" scoped>
.SetTags {
display: flex;
justify-content: center;
align-items: center;
padding-top: 40px;
}
</style>到此這篇關(guān)于el-select 點(diǎn)擊按鈕滾動(dòng)到選擇框頂部的文章就介紹到這了,更多相關(guān)el-select內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-router清除url地址欄路由參數(shù)的操作代碼
這篇文章主要介紹了vue-router清除url地址欄路由參數(shù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2015-11-11
vue:axios請求本地json路徑錯(cuò)誤問題及解決
這篇文章主要介紹了vue:axios請求本地json路徑錯(cuò)誤問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
使用vite搭建ssr活動(dòng)頁架構(gòu)的實(shí)現(xiàn)
本文主要介紹了使用vite搭建ssr活動(dòng)頁架構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
解決vue+router路由跳轉(zhuǎn)不起作用的一項(xiàng)原因
這篇文章主要介紹了解決vue+router路由跳轉(zhuǎn)不起作用的一項(xiàng)原因,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
vue 實(shí)現(xiàn)移動(dòng)端鍵盤搜索事件監(jiān)聽
今天小編就為大家分享一篇vue 實(shí)現(xiàn)移動(dòng)端鍵盤搜索事件監(jiān)聽,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue如何使用swiper插件修改左右箭頭的默認(rèn)樣式
這篇文章主要介紹了vue如何使用swiper插件修改左右箭頭的默認(rèn)樣式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
解決vue項(xiàng)目報(bào)錯(cuò)webpackJsonp is not defined問題
下面小編就為大家分享一篇解決vue項(xiàng)目報(bào)錯(cuò)webpackJsonp is not defined問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03

