Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Hooke
/
data-table
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Authored by
hookehuyr
2024-05-31 11:33:09 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
4624d69114aa9dd8158a4b513878aee90fdf4511
4624d691
1 parent
b2129af0
fix 搜索框逻辑整理
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
93 additions
and
131 deletions
src/components/TreeField/index.vue
src/components/TreeField/index.vue
View file @
4624d69
<!--
* @Date: 2022-08-29 14:31:20
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2024-05-31
00:19:33
* @LastEditTime: 2024-05-31
11:32:37
* @FilePath: /data-table/src/components/TreeField/index.vue
* @Description: 树形组件
-->
...
...
@@ -13,14 +13,22 @@
</div>
<van-popup
v-model:show="show
Bottom
"
v-model:show="show
Popover
"
position="bottom"
:style="{ height: '90vh' }"
>
<div v-if="!is_search" class="search-box" @click="onSearchFocus">
<van-icon name="search" size="1.1rem" /> 点击搜索
</div>
<van-field ref="searchInputRef" v-else v-model="search_value" label="" placeholder="可通过名称,手机号或邮箱查询" :border="false" @blur="onSearchBlur" @focus="onSearchFocus">
<van-field
v-else
ref="searchInputRef"
v-model="searchValue"
placeholder="可通过名称,手机号或邮箱查询"
:border="false"
@blur="onSearchBlur"
@focus="onSearchFocus"
>
<template #button>
<van-button size="small" type="primary" @click="onCloseSearch">关闭</van-button>
</template>
...
...
@@ -86,8 +94,8 @@
<van-row gutter="">
<van-col span="10" style="border-right: 1px solid #eee; height: 60vh; overflow: scroll;">
<Vtree
ref="
memb
erTreeRef"
v-model="select_
memb
er_value"
ref="
us
erTreeRef"
v-model="select_
us
er_value"
selectable
titleField="name"
keyField="id"
...
...
@@ -101,22 +109,22 @@
</van-col>
<van-col span="14">
<van-checkbox-group
v-model="
memb
er_checked"
v-model="
us
er_checked"
style="padding: 0 0 1rem 1rem;"
@change="on
Memb
erChange"
@change="on
Us
erChange"
>
<van-checkbox
@click="onCheck
MemberChange(memb
er, $event)"
v-for="(
member, index) in memb
erList"
:id="
memb
er.id"
:type="
memb
er.type"
:text="
memb
er.name"
@click="onCheck
UserChange(us
er, $event)"
v-for="(
user, index) in us
erList"
:id="
us
er.id"
:type="
us
er.type"
:text="
us
er.name"
:key="index"
:name="
memb
er.id"
:name="
us
er.id"
shape="square"
icon-size="13px"
:checked-color="styleColor.baseColor" style="margin-bottom: 0.5rem;">{{
memb
er.name }}</van-checkbox>
:checked-color="styleColor.baseColor" style="margin-bottom: 0.5rem;">{{
us
er.name }}</van-checkbox>
</van-checkbox-group>
</van-col>
</van-row>
...
...
@@ -212,93 +220,79 @@ const isGroup = computed(() => {
return props.item.component_props.is_field_group
});
const showBottom = ref(true);
/******* 搜索输入项 *******/
const showPopover = ref(true); // 显示/隐藏弹框
const search_value = ref('');
const onSearch = (val) => {
console.log(val);
};
const onCancel = () => {
search_value.value = '';
};
const searchInputRef = ref(null);
const searchValue = ref('');
const is_search = ref(false); // 默认不显示搜索框
/**
* 搜索选中结果集
* @param {Number} id
*/
const search_result_checked = ref([]);
const onSearchBlur = () => { // 搜索框失去焦点
}
const onSearchFocus = () => { // 搜索框获取焦点回调
is_search.value = true; // 打开搜索状态
// 自动选中搜索框
nextTick(() => {
searchInputRef.value.focus();
});
// 如果选中框有值,点击搜索框后把结果选中到搜索结果集里面
// TODO:待实现 真实情况应该是请求搜索结果后做
handleSelectToSearch();
}
const handleSelectToSearch = () => { // 把选中结果集同步,到搜索结果集上勾中显示
let dept = checkedGroup.value.dept.map(item => item.id);
let role = checkedGroup.value.role.map(item => item.id);
let user = checkedGroup.value.user.map(item => item.id);
search_result_checked.value = [...dept, ...role, ...user]; // 搜索选中结果集
}
const onCloseSearch = () => { // 点击搜索关闭按钮回调
tabActive.value = 0; // 默认选中组织结构
is_search.value = false; // 关闭搜索状态
// 组织结构,勾选状态还原
deptTreeRef.value?.setCheckedKeys(checkedGroup.value.dept.map(item => item.id), true);
// 角色选中,勾选状态还原
role_checked.value = checkedGroup.value.role.map(item => item.id);
// 成员选中,勾选状态还原
user_checked.value = checkedGroup.value.user.map(item => item.id)
}
/****************************** END ********************************/
/*************** Tab 功能模块 ****************/
const tabRef = ref(null);
const tabActive = ref(0);
const select_dept_value = ref();
const select_dept_value = ref();
// 组织结构树形选中值
const deptTreeRef = ref();
const role_checked = ref([]);
const role_checked = ref([]);
// 角色多选选中值
const roleList = ref([]);
const select_
member_value = ref();
const
memb
erTreeRef = ref();
const
member_checked = ref([]);
const
memb
erList = ref([]);
const select_
user_value = ref(); // 成员树形选中值
const
us
erTreeRef = ref();
const
user_checked = ref([]); // 成员多选选中值
const
us
erList = ref([]);
const onClickTab = ({ title }) => { // tab点击事件
if (title === '组织结构') {
nextTick(() => {
if (title === '组织结构') {
deptListReset();
});
}
if (title === '角色') {
nextTick(() => {
roleListReset();
});
}
if (title === '成员') {
nextTick(() => {
memberListReset();
});
userListReset();
}
});
};
const testData = [{
id: 1,
name: '西园寺',
children: [{
name: '保安',
id: 2,
children: [{
name: '1号',
id: 3
}]
}, {
name: '餐饮',
id: 4,
children: [{
name: '5号',
id: 5
}]
}, {
name: '保安',
id: 21,
children: [{
name: '1号',
id: 31
}]
}, {
name: '餐饮',
id: 41,
children: [{
name: '5号',
id: 51
}]
}, {
name: '保安',
id: 22,
children: [{
name: '1号',
id: 32
}]
}, {
name: '餐饮',
id: 42,
children: [{
name: '5号',
id: 52
}]
}]
}];
const checkedGroup = ref({
dept: [],
role: [],
...
...
@@ -329,9 +323,8 @@ onMounted(() => {
deptTreeRef.value.setData(role_list);
// 默认展开第一个
deptTreeRef.value.setExpand(35697, true)
// memberTreeRef.value.setData(testData);
// // 默认展开第一个
//
memb
erTreeRef.value.setExpand(1, true)
//
us
erTreeRef.value.setExpand(1, true)
});
const searchMethod = (value) => {
...
...
@@ -351,37 +344,6 @@ const checkedChangeMethod = (arr) => {
checkedGroup.value.dept = list;
}
const is_search = ref(false); // 默认不显示搜索框
const onSearchBlur = () => { // 搜索框失去焦点
// search_result_checked.value = []
}
const onSearchFocus = () => { // 搜索框获取焦点
is_search.value = true;
nextTick(() => {
searchInputRef.value.focus()
})
// 角色选中
let dept = checkedGroup.value.dept.map(item => item.id);
let role = checkedGroup.value.role.map(item => item.id);
let user = checkedGroup.value.user.map(item => item.id);
search_result_checked.value = [...dept, ...role, ...user];
}
const onCloseSearch = () => { // 搜索关闭按钮
tabActive.value = 0
is_search.value = false;
// 组织结构勾选状态还原
deptTreeRef.value?.setCheckedKeys(checkedGroup.value.dept.map(item => item.id), true);
// console.warn(checkedGroup.value.role);
// 角色选中
role_checked.value = checkedGroup.value.role.map(item => item.id);
//
member_checked.value = checkedGroup.value.user.map(item => item.id)
}
const searchInputRef = ref(null);
const deptListReset = () => { // 组织重置列表
deptTreeRef.value.setData(role_list);
...
...
@@ -391,18 +353,18 @@ const deptListReset = () => { // 组织重置列表
const roleListReset = () => {
roleList.value = dept_list;
}
const
memb
erListReset = () => {
memb
erTreeRef.value.setData(role_list);
const
us
erListReset = () => {
us
erTreeRef.value.setData(role_list);
memb
erTreeRef.value.setExpand(35697, true)
us
erTreeRef.value.setExpand(35697, true)
}
const onNodeClick = (node) => {
// console.warn(node);
console.warn(checkedGroup.value.user);
// console.warn(node.user);
memb
erList.value = node.user;
memb
er_checked.value = checkedGroup.value.user.map(item => item.id)
us
erList.value = node.user;
us
er_checked.value = checkedGroup.value.user.map(item => item.id)
}
const roleChangeMethod = (val) => { // 角色多选组点击回调
...
...
@@ -423,13 +385,13 @@ const roleChangeMethod = (val) => { // 角色多选组点击回调
}
const onChange = (val) => {
console.warn(
memb
erList.value);
console.warn(
us
erList.value);
}
const roleTreeList = ref(role_list);
const on
Memb
erChange = (val) => { // 成员多选组点击回调
//
memb
erList.value.forEach(item => {
const on
Us
erChange = (val) => { // 成员多选组点击回调
//
us
erList.value.forEach(item => {
// if (val.includes(item.id)) {
// item.checked = true;
// } else {
...
...
@@ -437,7 +399,7 @@ const onMemberChange = (val) => { // 成员多选组点击回调
// }
// });
// checkedGroup.value.user =
memb
er_checked.value;
// checkedGroup.value.user =
us
er_checked.value;
}
const onRemoveDeptTag = (dept) => { // 移除部门标签
...
...
@@ -467,8 +429,8 @@ const onRemoveUserTag = (user) => { // 移除成员标签
const index = checkedGroup.value.user.indexOf(user);
checkedGroup.value.user.splice(index, 1);
//
const idx =
memb
er_checked.value.indexOf(user);
memb
er_checked.value.splice(index, 1);
const idx =
us
er_checked.value.indexOf(user);
us
er_checked.value.splice(index, 1);
// 移除搜索结果选中显示
const i = search_result_checked.value.indexOf(user);
search_result_checked.value.splice(i, 1);
...
...
@@ -512,7 +474,7 @@ const user_dept_role = ref({
]
});
const search_result_checked = ref([]);
// watch(
// search_result_checked
...
...
@@ -648,8 +610,8 @@ const onSearchUserChange = (val, evt) => {
const index = checkedGroup.value.user.findIndex(user => user.id === obj.id);
checkedGroup.value.user.splice(index, 1);
// //
// const idx =
memb
er_checked.value.indexOf(obj);
//
memb
er_checked.value.splice(index, 1);
// const idx =
us
er_checked.value.indexOf(obj);
//
us
er_checked.value.splice(index, 1);
// // 移除搜索结果选中显示
// const i = search_result_checked.value.indexOf(obj);
// search_result_checked.value.splice(i, 1);
...
...
@@ -658,7 +620,7 @@ const onSearchUserChange = (val, evt) => {
})
}
const onCheck
Memb
erChange = (val, evt) => {
const onCheck
Us
erChange = (val, evt) => {
nextTick(() => {
let checked = false;
let id = '';
...
...
Please
register
or
login
to post a comment