import type { Ref } from 'vue';
|
import { onActivated, onDeactivated, onMounted, onUnmounted, ref, watch } from 'vue';
|
import { deepClone } from '/@/utils/other';
|
import { convertListToTree, flatten } from '/@/utils/util';
|
|
/**
|
*
|
* @param originData 原始数据,接口拿到的数据
|
* @param queryParams 查询参数 form
|
* @param getTableData
|
* @param isTree 是否是 ParentID 构建树的数组
|
* @param isChildTree 是否是 Children 构建的树的数组
|
* @returns
|
*/
|
export const useSearch = (originData: Ref<any[]>, queryParams: Ref<Object>, isChildTree = false) => {
|
const queryData = ref(null as any[]);
|
|
const resetQuery = () => {
|
for (const key in queryParams.value) {
|
if (typeof queryParams.value[key] === 'string') {
|
queryParams.value[key] = '';
|
} else if (typeof queryParams.value[key] === 'number') {
|
queryParams.value[key] = null;
|
}
|
}
|
queryData.value = originData.value;
|
};
|
|
const query = () => {
|
if (checkQueryParamsIsEmpty()) {
|
queryData.value = originData.value;
|
return;
|
}
|
const convertData = isChildTree ? flatten(originData.value) : originData.value;
|
const filterTableData = convertData.filter((item: any) => {
|
return Object.keys(queryParams.value).every((key) => {
|
const queryValue = queryParams.value[key];
|
let queryStr = '';
|
if (queryValue !== null) {
|
queryStr = String(queryValue);
|
}
|
return String(item[key]).toLowerCase().includes(queryStr.trim().toLowerCase());
|
});
|
});
|
queryData.value = filterTableData;
|
};
|
|
const checkQueryParamsIsEmpty = () => {
|
return Object.values(queryParams.value).every((objectValue) => objectValue === '' || objectValue === null);
|
};
|
|
watch(
|
() => originData.value,
|
(val) => {
|
queryData.value = originData.value;
|
},
|
{ immediate: true }
|
);
|
|
|
return {
|
checkQueryParamsIsEmpty,
|
resetQuery,
|
query,
|
queryData };
|
};
|