vue 级联选择器

vue

如何使用Element_UI 组件中的

Cascader 级联组件,使用起来很简单,

但是有的项目不会引用Element_UI,而是使用 Vuetify,是没有级联组件的,我今天记录一下,我实现的方法。

 点击此输入框,会弹出级联信息,可以选择,也可以自己搜索

<v-row>

<div

style="position: absolute;

width: 100%;

height: 72px;

z-index: 1;"

@click.stop="pickerVisible=true"

/>

<v-text-field

v-model="editForm.schoolName"

readonly

:rules="schoolNameRules"

:counter="20"

label="学校"

required

prepend-icon="mdi-home"

/>

</v-row>

View Code

<v-bottom-sheet v-model="pickerVisible">

<v-card>

<v-sheet class="pa-4 primary lighten-2">

<v-text-field

v-model="search"

label="请输入"

dark

flat

solo-inverted

hide-details

clearable

clear-icon="mdi-close-circle-outline"

/>

</v-sheet>

<v-card-text style="overflow: auto;max-height: 80vh;">

<v-treeview

:items="departmentTree"

:search="search"

:filter="filter"

item-key="value"

item-text="label"

activatable

color="warning"

open-all

@update:active="onUpdate"

></v-treeview>

</v-card-text>

</v-card>

</v-bottom-sheet>

View Code

<script>

import { wechatLogin, saveSchool } from "@/api/user";

import { getSchoolTree } from "@/api/interfaces/ip";

export default {

data() {

return {

editDialog: false,

loading: null,

departmentTree: [],

editForm: {

username: "",

categoryId: "",

password: "",

password2: "",

telephone: "",

categoryName: "",

},

schoolNameRules: [(v) => !!v || "请选择学校"],

rules: {

categoryId: [

{

required: true,

message: "请选择学校",

trigger: "change",

},

],

},

pickerVisible: false,

search: null,

overlay: true,

};

},

computed: {

filter() {

return this.caseSensitive

? (item, search, textKey) => item[textKey].indexOf(search) > -1

: undefined;

},

},

created() {

this.overlay = true;

const code = this.$route.query.code;

const formData = new FormData();

formData.append("code", code);

wechatLogin(formData).then((response) => {

const data = response.data;

this.$store

.dispatch("user/wechatLogin_phone", data.token)

.then(() => {

// this.$router.push({ path: this.redirect || \'/\' })

if (data.noCategory == "noCategory") {

getSchoolTree().then((response) => {

this.departmentTree = response.data;

this.editDialog = true;

});

} else {

window.opener.location.reload();

window.close();

}

})

.catch((error) => {});

});

},

methods: {

saveSchools() {

if (this.$refs.editForm.validate()) {

this.overlay = true;

saveSchool(this.editForm.categoryId)

.then((response) => {

//loading.close();

//window.opener.location.reload();

//window.close();

this.overlay = false;

this.$router.push({ path: this.redirect || "/home" });

})

.catch(() => {

this.overlay = false;

});

} else {

console.log("error submit!!");

return false;

}

},

onUpdate(result) {

const id = result[0];

this.$set(

this.editForm,

"schoolName",

this.getDepartmentName(id, this.departmentTree)

);

this.$set(this.editForm, "categoryId", id);

this.pickerVisible = false;

},

getDepartmentName(id, departmentTree) {

for (let i = 0; i < departmentTree.length; i++) {

if (departmentTree[i].value == id) {

return departmentTree[i].label;

}

if (departmentTree[i].children) {

const name = this.getDepartmentName(id, departmentTree[i].children);

if (name) {

return name;

}

}

}

return null;

},

},

};

</script>

<style scoped>

.login-container {

background: url(~@/assets/images/login-bg.jpg) no-repeat;

height: 100%;

background-size: 100%;

display: flex;

padding: 0;

align-items: center;

}

.v-form {

flex: auto;

padding: 12px;

background: linear-gradient(

to bottom,

rgb(255 255 255 / 0),

rgb(255 255 255 / 0.7),

rgb(255 255 255 / 0)

);

}

.form-container >>> .row.justify-center {

padding-top: 20px;

}

.select {

position: relative;

}

</style>

以上是 vue 级联选择器 的全部内容, 来源链接: utcz.com/z/375694.html

回到顶部