Antd 树形穿梭框操作按钮高量问题

<template>

<a-transfer

class="tree-transfer"

:data-source="dataSource"

:target-keys="targetKeys"

:render="(item) => item.title"

:show-select-all="false"

@change="onChange"

:listStyle="listStyle"

:titles="['可选择属性', '已选择属性']"

>

<template

slot="children"

slot-scope="{ props: { direction, selectedKeys }, on: { itemSelect } }"

>

<template v-if="direction === 'left'">

<el-input

style="width: 100%"

placeholder="请输入内容"

v-model="inputValue"

prefix-icon="el-icon-search"

@change="onChangeInput()"

clearable

>

</el-input>

<a-tree

v-if="leftTreeData.length"

style="margin-top: 10px"

blockNode

checkable

:key="leftTreeDatakey"

:replace-fields="replaceFields"

:tree-data="leftTreeData"

:checked-keys="leftCheckedKey"

@check="

(_, props) => {

handleLeftChecked(

_,

props,

[...selectedKeys, ...targetKeys],

itemSelect

);

}

"

/>

<a-empty v-else>

<template #description>暂无数据</template>

</a-empty>

</template>

<template v-else-if="direction === 'right'">

<el-input

style="width: 100%"

placeholder="请输入内容"

v-model="inputValueRight"

prefix-icon="el-icon-search"

@change="onChangeInputRight()"

clearable

>

</el-input>

<a-tree

v-if="rightTreeData.length"

blockNode

checkable

:key="rightTreeDatakey"

:replace-fields="replaceFields"

:tree-data="rightTreeData"

v-model:checked-keys="rightCheckedKey"

v-model:expanded-keys="rightExpandedKey"

:defaultExpandAll="defaultExpandAll"

@check="

(_, props) => {

handleRightChecked(

_,

props,

[...selectedKeys, ...targetKeys],

itemSelect

);

}

"

/>

<a-empty v-else>

<!-- <div class="lodingIcon" :style="{'display':_display}">

<a-spin tip="Loading...">

<a-icon

slot="indicator"

type="loading"

style="font-size: 24px"

spin

/>

</a-spin>

</div> -->

<template #description> 暂无数据</template>

</a-empty>

</template>

</template>

</a-transfer>

</template>

<script>

import {

cloneDeep,

flatten,

getDeepList,

getTreeKeys,

handleLeftTreeData,

handleRightTreeData,

isChecked,

uniqueTree,

} from "./index";

export default {

name: "OptionsTransfer",

props: {

/** 树数据 */

treeData: {

type: Array,

default: () => [],

},

/** 编辑 key */

editKey: {

type: Array,

default: () => [],

},

_display:{

type:String,

default:''

}

},

mounted() {

},

data() {

return {

rightTreeDatakey: '123',

leftTreeDatakey: '333',

defaultExpandAll: true,

inputValue: '',

inputValueRight: '',

replaceFields: {

// id:'templateId',

children: 'child',

title: 'name',

parentId: 'pid',

},

listStyle: {

width: '350px',

height: '320px',

overflowY: 'auto',

display: 'block',

},

leftTreeAllData: [],

rightTreeAllData: [],

targetKeys: [], // 显示在右侧框数据的 key 集合

dataSource: [], // 数据源,其中的数据将会被渲染到左边一栏

leftCheckedKey: [], // 左侧树选中 key 集合

leftHalfCheckedKeys: [], // 左侧半选集合

leftCheckedAllKey: [], // 左侧树选中的 key 集合,包括半选与全选

leftTreeData: [], // 左侧树

rightCheckedKey: [], // 右侧树选中集合

rightCheckedAllKey: [], // 右侧树选中集合,包括半选与全选

rightExpandedKey: [], // 右侧展开数集合

rightTreeData: [], // 右侧树

emitKeys: [], // 往父级组件传递的数据

deepList: [], // 深层列表

};

},

watch: {

treeData: {

deep: true,

handler(val) {

// console.log("123123");

this.processTreeData();

},

},

editKey: {

deep: true,

handler(val) {

this.processTreeData();

},

},

},

created() {

this.processTreeData();

},

computed: {

},

methods: {

// 处理树数据

processTreeData() {

this.dataSource = []

flatten(cloneDeep(this.treeData), this.dataSource);

// console.log('数据源',this.dataSource);

if (this.editKey.length) {

this.processEditData();

} else {

this.leftTreeData = handleLeftTreeData(

cloneDeep(this.treeData),

this.leftCheckedKey

);

this.leftTreeAllData = this.leftTreeData

}

},

// 处理编辑数据

processEditData() {

this.leftCheckedAllKey = this.editKey;

this.rightExpandedKey = this.editKey;

this.targetKeys = this.editKey;

this.rightTreeData = handleRightTreeData(

cloneDeep(this.treeData),

this.editKey

);

// console.log('this.rightTreeData', this.rightTreeData);

getDeepList(this.deepList, this.treeData);

this.leftCheckedKey = uniqueTree(this.editKey, this.deepList);

this.leftHalfCheckedKeys = this.leftCheckedAllKey.filter(

(item) => this.leftCheckedKey.indexOf(item) === -1

);

this.leftTreeData = handleLeftTreeData(

cloneDeep(this.treeData),

this.leftCheckedKey

);

this.emitKeys = this.rightExpandedKey;

},

// 穿梭更改

onChange(targetKeys, direction, moveKeys) {

// console.log('targeKeys',targetKeys);

if (direction === "right") {

this.targetKeys = this.leftCheckedAllKey;

console.log('this.targetKeys', this.targetKeys);

this.rightCheckedKey = [];

this.rightTreeData = handleRightTreeData(

cloneDeep(this.treeData),

this.leftCheckedAllKey,

"right"

);

console.log('rightTreeData', this.rightTreeData);

this.rightTreeAllData = this.rightTreeData

console.log('+++++ +++', this.leftCheckedKey);

if (this.leftCheckedKey.length == 0) {

this.targetKeys = []

this.leftCheckedAllKey = []

this.rightTreeData = []

}

console.log('aaa', this.targetKeys);

// console.log(this.leftTreeData, "左边1");

console.log(this.leftCheckedAllKey, "左边");

console.log('leftCheckedKey', this.leftCheckedKey);

this.leftTreeData = handleLeftTreeData(

cloneDeep(this.treeData),

this.leftCheckedKey,

"right"

);

this.rightTreeDatakey = Date.now().valueOf()

// console.log(this.leftTreeData, "左边2");

} else if (direction === "left") {

this.digui(this.rightTreeAllData, this.rightCheckedKey)

this.rightTreeData = handleRightTreeData(

this.rightTreeData,

this.rightCheckedKey,

"left"

);

this.leftTreeData = handleLeftTreeData(

this.leftTreeData,

this.rightCheckedKey,

"left"

);

this.leftCheckedKey = this.leftCheckedKey.filter(

(item) => this.rightCheckedKey.indexOf(item) === -1

);

this.targetKeys = this.targetKeys.filter(

(item) => this.rightCheckedKey.indexOf(item) === -1

);

this.leftHalfCheckedKeys = this.leftHalfCheckedKeys.filter(

(item) => this.rightCheckedKey.indexOf(item) === -1

);

this.rightCheckedKey = [];

}

// console.log('this,rightChe99++', this.defaultExpandAll);

this.rightExpandedKey = [];

// this.rightExpandedKey=getTreeKeys(this.rightTreeData)

this.emitKeys = this.rightExpandedKey;

},

onChangeInput() {

this.leftTreeData = this.fuzzyMatching(this.leftTreeAllData, this.inputValue)

},

digui(data, dataId) {

if (data != null && data.length > 0) {

for (var i = 0; i < data.length; i++) {

if (dataId.indexOf(data[i].key) != -1) {

data.splice(i, 1)

continue

}

if (data[i].child != null && data[i].child.length > 0) {

this.digui(data[i].child, dataId)

}

}

}

},

fuzzyMatching(data, value) {

if (value === '') {

let abs = []

this.leftCheckedKey.forEach(item => {

console.log('item', item);

this.dataSource.forEach(el => {

if (item == el.key) {

if (el.child == null || el.child.length < 0) {

abs.push(el.key)

}

}

})

})

this.leftCheckedKey = [...abs]

return data

}

let tempData = [];

if (data !== null && data.length > 0) {

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

let have = false;

let obj = { ...data[i] };

if (obj.name.indexOf(value) !== -1) {

have = true;

}

let child = this.fuzzyMatching(obj.child, value)

if (child !== null && child.length > 0) {

have = true;

}

obj.child = child

if (have) {

tempData.push(obj)

}

}

}

return tempData

},

onChangeInputRight() {

// console.log('rightTreeAllData', this.rightTreeAllData);

// console.log('rightTreeData', this.rightTreeData);

this.rightTreeData = this.fuzzyMatchingRight(this.rightTreeAllData, this.inputValueRight)

// console.log('rightTreeData999', this.rightTreeData);

},

fuzzyMatchingRight(data, value) {

if (value === '') {

let allGroup = [], allkey = [], allPath = [], arrani = [], arrRightKey = []

// console.log('this.leftCheckedKey', this.leftCheckedKey);

this.leftCheckedKey.forEach(el => {

this.dataSource.forEach(item => {

if (el == item.key) {

allGroup.push(item)

}

})

})

allGroup.forEach(tel => {

let idPath = tel.idPath.split('/')

idPath.shift()

idPath.pop()

allkey.push(...idPath)

})

allPath = Array.from(new Set(allkey))

allPath.forEach(absEl => {

this.dataSource.forEach(ele => {

if (absEl == ele.templateId && ele.child) {

arrani.push(ele.key)

let kui = Array.from(new Set(arrani))

arrRightKey = [...kui, ...this.leftCheckedKey]

}

})

})

this.rightTreeData = handleRightTreeData(

cloneDeep(this.treeData),

arrRightKey,

'right'

)

return this.rightTreeData

}

let tempData = [];

if (data !== null && data !== undefined && data.length > 0) {

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

let have = false;

let obj = { ...data[i] };

if (obj.name.indexOf(value) !== -1) {

have = true;

}

let child = this.fuzzyMatchingRight(obj.child, value)

if (child !== null && child.length > 0) {

have = true;

}

obj.child = child

if (have) {

tempData.push(obj)

// console.log('tempData', tempData);

}

}

}

return tempData

},

// 左侧选择

// 左侧选择

handleLeftChecked(_, { node, halfCheckedKeys }, checkedKeys, itemSelect) {

this.leftCheckedKey = _;

this.leftHalfCheckedKeys = [

...new Set([...this.leftHalfCheckedKeys, ...halfCheckedKeys]),

];

this.leftCheckedAllKey = [

...new Set([...this.leftHalfCheckedKeys, ...halfCheckedKeys, ..._]),

];

const { eventKey } = node;

console.log('this.leftCheckedKey', this.leftCheckedKey);

console.log('checkedKeys', checkedKeys);

itemSelect(eventKey, !isChecked(checkedKeys, eventKey));

},

// 右侧选择

handleRightChecked(_, { node, halfCheckedKeys }, checkedKeys, itemSelect) {

console.log('_+9+9+', _);

this.rightCheckedKey = _;

this.rightCheckedAllKey = [...halfCheckedKeys, ..._];

const { eventKey } = node;

itemSelect(eventKey, isChecked(_, eventKey));

},

},

};

</script>

<style lang="scss">

.ant-transfer-list {

width: 800px;

}

.lodingIcon {

position: absolute;

bottom: 125px;

left: 144px;

}

.ant-empty-image {

svg {

//display: none;

}

}

.tree-transfer {

div.ant-transfer-list-header {

height: 39px;

span.ant-transfer-list-header-selected span:first-child {

display: none;

}

span.ant-transfer-list-header-selected span:last-child {

right: 0px;

left: 12px;

}

}

}

</style>

点击完子节点选中不取消在点击父节点选中,取消父节点选中取消操作按钮仍然常量
Antd 树形穿梭框操作按钮高量问题Antd 树形穿梭框操作按钮高量问题Antd 树形穿梭框操作按钮高量问题


回答:

贴下代码?
官方demo:https://ant.design/components...

以上是 Antd 树形穿梭框操作按钮高量问题 的全部内容, 来源链接: utcz.com/p/937386.html

回到顶部