zs
2025-06-04 5a149d626ae8bc3fa4bddbb53f8caf40f51f6da6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 
//高级查询工具文件
 
 /**
 * 保存当前高级查询数据,合并过滤后的数据并更新响应式查询对象
 * @param {Object} filteredData - 过滤后的查询数据对象,包含用户输入的查询条件
 * @param {Ref<Object>} _curHighQueryData - Vue响应式对象,存储当前完整的查询条件
 * @param {Ref<Object>} queryForm - Vue响应式对象,存储表单输入的查询条件
 * @param {Ref<string>} _searchFormInputAttrs - Vue响应式字符串,存储查询表单的输入属性配置
 * @returns {void}
 * @example
 * commonSaveCurHighQueryData(
 *   { name: 'John', age: 30 },
 *   ref({}),
 *   ref({ searchVal: '', searchVal_FilterMode: 'contains' }),
 *   ref('name,age,email')
 * );
 */
export const commonSaveCurHighQueryData = (filteredData, _curHighQueryData, queryForm, _searchFormInputAttrs) => {
  _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData };
  setValueForCurHighQueryData(_curHighQueryData, queryForm, _searchFormInputAttrs);
}
 
/**
 * 为响应式查询数据对象设置基础查询值
 * @param {Ref<Object>} _curHighQueryData - Vue响应式对象,存储当前完整的查询条件
 * @param {Ref<Object>} queryForm - Vue响应式对象,存储表单输入的查询条件
 * @param {Ref<string>} _searchFormInputAttrs - Vue响应式字符串,存储查询表单的输入属性配置
 * @returns {void}
 * @example
 * setValueForCurHighQueryData(
 *   ref({}),
 *   ref({ searchVal: 'test', searchVal_FilterMode: 'equals' }),
 *   ref('name,age')
 * );
 * // _curHighQueryData.value 将包含 searchVal, searchVal_FilterMode 和 str_searchFormInputAttrs
 */
export const setValueForCurHighQueryData = (_curHighQueryData, queryForm, _searchFormInputAttrs) => {
  _curHighQueryData.value.searchVal = queryForm.value.searchVal;
  _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;
  _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value;
}
 
/**
 * 初始化查询表单,设置默认值
 * @param {Ref<Object>} queryForm - Vue响应式对象,存储表单输入的查询条件
 * @param {Ref<string>} _searchFormInputAttrs - Vue响应式字符串,存储查询表单的输入属性配置
 * @param {Array<Object>} arr - 过滤模式选项数组,每个选项包含value和label属性
 * @returns {void}
 * @example
 * initQueryForm(
 *   ref({}),
 *   ref('name,age'),
 *   [{ value: 'contains', label: '包含' }, { value: 'equals', label: '等于' }]
 * );
 * // queryForm.value 将被初始化为 { searchVal: '', searchVal_FilterMode: 'contains', str_searchFormInputAttrs: 'name,age' }
 */
export const initQueryForm = (queryForm, _searchFormInputAttrs, arr) => {
  queryForm.value.searchVal = '';
  queryForm.value.searchVal_FilterMode = arr[0]?.value || '';
  queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value;
}
 
/**
 * 获取高级查询弹出框的查询值,过滤无效数据并组合完整查询条件
 * @param {Object} extraParams - 额外的查询参数对象,可能包含特殊查询条件
 * @param {Ref<Object>} queryForm - Vue响应式对象,存储表单输入的查询条件
 * @param {Ref<string>} _searchFormInputAttrs - Vue响应式字符串,存储查询表单的输入属性配置
 * @returns {Object} 组合后的有效查询数据对象
 * @example
 * const queryData = commonGetHighQueryForm(
 *   { status: 'active', category: 'books' },
 *   ref({ searchVal: 'javascript', searchVal_FilterMode: 'contains' }),
 *   ref('title,author')
 * );
 * // 返回 { status: 'active', category: 'books', searchVal: 'javascript', searchVal_FilterMode: 'contains', str_searchFormInputAttrs: 'title,author' }
 */
export const commonGetHighQueryForm = (extraParams, queryForm, _searchFormInputAttrs) => {
  // 过滤掉 undefined 的值
  let filteredData = Object.assign(
    {},
    ...Object.entries(extraParams).map(([key, value]) =>
      value !== undefined ? { [key]: value } : {}
    )
  );
  // 组合模糊查询
  filteredData.searchVal = queryForm.value.searchVal;
  filteredData.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;
  filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value;
  return filteredData;
}
 
/**
 * 新版的查询弹出框关闭方法,获取过滤数据并保存到响应式对象
 * @param {Object} extraParams - 额外的查询参数对象,可能包含特殊查询条件
 * @param {Ref<Object>} queryForm - Vue响应式对象,存储表单输入的查询条件
 * @param {Ref<string>} _searchFormInputAttrs - Vue响应式字符串,存储查询表单的输入属性配置
 * @param {Ref<Object>} _curHighQueryData - Vue响应式对象,存储当前完整的查询条件
 * @returns {Object} 组合后的有效查询数据对象
 * @example
 * const queryData = GetFilteredData(
 *   { type: 'article' },
 *   ref({ searchVal: 'news', searchVal_FilterMode: 'startsWith' }),
 *   ref('title,content'),
 *   ref({})
 * );
 * // 返回有效查询数据并更新 _curHighQueryData
 */
export const GetFilteredData = (extraParams, queryForm, _searchFormInputAttrs, _curHighQueryData) => {
  let filteredData = commonGetHighQueryForm(extraParams, queryForm, _searchFormInputAttrs);
  commonSaveCurHighQueryData(filteredData, _curHighQueryData, queryForm, _searchFormInputAttrs);
  return filteredData;
}