vue3 select-tree 部門+員工

1.效果圖

2.html

<el-select

? ? ? v-model="state.users"

? ? ? value-key="value"

? ? ? placeholder="請選擇"

? ? ? multiple

????collapse-tags

? ? ? collapse-tags-tooltip

? ? ? style="width: 240px"

? ? ? @visible-change="visibleChange"

? ? ? @remove-tag="removeTag">

? ? ? <el-option class="option" value="" />

? ? ? <el-tree

? ? ? ? class="admins-tree"

? ? ? ? :data="state.userList"

? ? ? ? ref="menuTree"

? ? ? ? :props="{

? ? ? ? ? value: 'departmentId',

? ? ? ? ? label: 'departmentName',

? ? ? ? ? children: 'child'

? ? ? ? }"

? ? ? ? node-key="departmentId"

? ? ? ? default-expand-all

? ? ? ? :expand-on-click-node="false">

? ? ? ? <template #default="{ data }">

? ? ? ? ? <div class="custom-tree-node">

? ? ? ? ? ? <div style="line-height: 30px">

? ? ? ? ? ? ? <el-icon class="icon mr5">

? ? ? ? ? ? ? ? <ele-Folder />

? ? ? ? ? ? ? </el-icon>

? ? ? ? ? ? ? <span @click="userClickcChild(data, 2)">{{ data.departmentName }}</span>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div class="tree-div" v-show="data.userList?.length">

? ? ? ? ? ? ? <span

? ? ? ? ? ? ? ? class="texts"

? ? ? ? ? ? ? ? v-for="(item, index) in data.userList"

? ? ? ? ? ? ? ? :key="index"

? ? ? ? ? ? ? ? @click="userClickcChild(item, 1)"

? ? ? ? ? ? ? ? >{{ item.name }}</span

? ? ? ? ? ? ? >

? ? ? ? ? ? </div>

? ? ? ? ? </div>

? ? ? ? </template>

? ? ? </el-tree>

? ? </el-select>

2.js


const props = defineProps({

? // 0-部門/成員,1-成員

? isType: {

? ? type: Number,

? ? required: true,

? ? default: () => 0

? },

? // 是否多選 0-否,1-是

? isMany: {

? ? type: Number,

? ? required: true,

? ? default: () => 0

? },

? users: {

? ? type: Array as PropType<sadas[]>,

? ? required: true,

? ? default: () => []

? },

});

// 監(jiān)聽數(shù)組初始化格式

watch(() => props.users, () => {

? state.users = props.users.map((item: any) => {

? ? return {

? ? ? type: item.userId ? 1 : 2,

? ? ? value: item.userId ? item.userId : item.departmentId,

? ? ? label: item.name ? item.name : item.departmentName

? ? }

? })

},{deep: true});

//

const visibleChange = async (val: boolean) => {

? // console.log(val);

? if (val) {

? ? let res = await promotionApis.getDataListAndUser();

? ? // console.log(res.data);

? ? state.userList = res.data;

? }

};

// 成員點擊

const emit = defineEmits(['update:users'])

// type: 1-人,2-部門

const userClickcChild = (rows: any, type: number) => {

? // console.log(rows)

? let status = {} as any

? if( type == 1 ) {

? ? status = props.users.find(( items: any ) => items.value == rows.userId)

? }

? if( type == 2 && props.isType != 1 ) {

? ? status = props.users.find(( items: any ) => items.value == rows.departmentId)

? }

? if( !status ) {

? ? if( props.isMany ) {

? ? ? state.users.push({

? ? ? ? type: type,

? ? ? ? value: rows.userId ? rows.userId : rows.departmentId,

? ? ? ? label: rows.userId ? rows.name : rows.departmentName

? ? ? })

? ? } else {

? ? ? state.users = [{

? ? ? ? type: type,

? ? ? ? value: rows.userId ? rows.userId : rows.departmentId,

? ? ? ? label: rows.userId ? rows.name : rows.departmentName

? ? ? }]

? ? }

? }

}

// 刪除標簽

const removeTag = (e: any) => {

? state.users.filter((item: any) => item.value == e.value)

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容