ZhangQiangEcologyKit/明细搜索功能函数V1.js
2024-12-03 09:50:46 +08:00

190 lines
9.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能开始
/*all_search_field_id 为模糊搜索字段id search_obj 为搜索对象。
search_obj 中的 detail_field_id 为搜索对象在明细中的字段id search_field_id 为搜索对象的搜索字段id control_field_id 为控制搜索字段可选范围的字段id控制功能只针对浏览框
search_field_id 与 control_field_id 均为主表字段,均允许值为 undefined
当 search_field_id 为 undefined 时,表示该搜索对象仅为模糊搜索的对象,无需精准搜索
当 control_field_id 为 undefined 时,表示该搜索对象的搜索字段可选范围不受明细已有值的影响
当type: 'displayValue' // 指定获取显示值这个代表是浏览框或者下拉框type: 'rawValue' // 指定获取值,这个代表文本,显示值和实际值一致
***如需控制浏览框搜索字段的可选范围需在泛微对该浏览框做相应的选择范围设置一般为数据id属于 control_field_id 字段值的范围!!!
***当前代码不支持对明细多选字段的搜索功能!!!
*/
var searchDetailNum = 1; // 搜索明细序号设置
var basic_info = {//搜索字段初始化
all_search_field_id: 'field200841',//模糊搜索字段此字段搜索search_obj里的detail_field_id对应字段内容的显示值均为
search_obj: [
{
detail_field_id: 'field198856',//证件号码
search_field_id: 'field200844',
control_field_id: undefined,
type: 'rawValue' // 文本显示和实际值一致
},
{
detail_field_id: 'field199842',//姓名
search_field_id: 'field205846',
control_field_id: 'field200344',
type: 'displayValue' // 浏览框
},
{
detail_field_id: 'field201352',//身份标签
search_field_id: 'field200845',
control_field_id: undefined,
type: 'displayValue' // 浏览框
},
{
detail_field_id: 'field198858',//部门
search_field_id: 'field223429',
control_field_id: undefined,
type: 'displayValue' // 浏览框
},
{
detail_field_id: 'field198857',//机构
search_field_id: 'field223430',
control_field_id: undefined,
type: 'displayValue' // 浏览框
}
]
}
basic_info.search_obj.forEach(function (search) {
if (search.search_field_id) {
WfForm.changeFieldValue(search.search_field_id, { value: "" });//清空搜索字段
}
});
WfForm.changeFieldValue(basic_info.all_search_field_id, { value: "" });//清空模糊搜索字段
WfForm.bindFieldChangeEvent(basic_info.all_search_field_id, function (obj, id, value) {//模糊搜索
detailSearch(basic_info.all_search_field_id, value);
});
$(".wf-input-" + basic_info.all_search_field_id).keydown(function (event) {//模糊搜索
let value = event.target.value;
detailSearch(basic_info.all_search_field_id, value);
}); //搜索区间触发
// 生成字段变化事件绑定字符串
function getFieldChangeEventIds() {
return basic_info.search_obj
.filter(field => field.search_field_id) // 只保留有 search_field_id 的字段
.map(field => field.search_field_id) // 提取 search_field_id
.join(","); // 拼接成逗号分隔的字符串,生成类似:field188336,field193852,field201846
}
WfForm.bindFieldChangeEvent(
getFieldChangeEventIds(), // 动态生成的字段 ID 字符串
function (obj, id, value) {
detailSearch(id, value);
}
);
$(".wf-input-" + basic_info.search_obj[0].search_field_id).keydown(function (event) {//证件号码
let value = event.target.value;
detailSearch(basic_info.search_obj[0].search_field_id, value);
});
//明细搜索函数
function detailSearch(fieldid, value) {
Arrtmp = [];
if (fieldid == basic_info.all_search_field_id) {//---------------------------------------------------------------------模糊搜索
var search = {};
var rowArr = WfForm.getDetailAllRowIndexStr("detail_" + searchDetailNum).split(",");
rowArr.forEach(rowIndex => {
if (rowIndex !== "") {
let fieldValues = [];
basic_info.search_obj.forEach(field => {
if (field.detail_field_id) {
let fieldId = field.detail_field_id + "_" + rowIndex;
let fieldType = field.type;
let value;
if (fieldType == 'rawValue') {//实际值和显示值一致,如文本框
value = WfForm.getFieldValue(fieldId);
} else if (fieldType == 'displayValue') {//浏览框
value = WfForm.getBrowserShowName(fieldId);
}
fieldValues.push(value);
}
});
let tmp = fieldValues.join(";") + ";";
// 以分号分隔存入值
search[rowIndex] = tmp;
}
});
let tmp = value.trim().split(" ");
if (tmp[0].length > 0) {
tmp = tmp.filter((i) => i && i.trim());
}
tmp.forEach((item) => {
let regex = new RegExp(item);
Object.keys(search).forEach((e) => {
if (regex.test(search[e])) {
Arrtmp.push(e);
}
});
});
if (value.trim() === "") {
// 如果value为空显示所有明细行
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, "all", false);
} else {
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, "all", true); // 全部隐藏
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, Arrtmp.join(), false); // 显示符合条件的行
}
WfForm.checkDetailRow("detail_" + searchDetailNum, "", true); // 清空所有勾选项
} else {
// 生成明细对象
var search = {};
var rowArr = WfForm.getDetailAllRowIndexStr("detail_" + searchDetailNum).split(",");
// 遍历所有明细行
rowArr.forEach(rowIndex => {
if (rowIndex !== "") {
var detailObj = {};
// 遍历 search_obj 获取每个字段的实际值,并存入 detailObj
basic_info.search_obj.forEach(field => {
if (field.detail_field_id) {
var fieldId = field.detail_field_id + "_" + rowIndex;
var fieldValue = WfForm.getFieldValue(fieldId); // 获取实际值
detailObj[field.detail_field_id] = {
value: fieldValue,
detail_field_id: field.detail_field_id // 关联 detail_field_id
};
}
});
detailObj.rowIndex = rowIndex;
search[rowIndex] = detailObj;
}
});
// 生成搜索值对象
var searchValues = {};
basic_info.search_obj.forEach(field => {
if (field.search_field_id) {
let searchFieldId = field.search_field_id;
let searchValue = WfForm.getFieldValue(searchFieldId); // 获取实际值
let type = field.type; // 获取字段的类型
searchValues[field.detail_field_id] = { value: searchValue, type: type }; // 用 detail_field_id 作为键
}
});
// 遍历每个明细行,判断是否匹配
Object.keys(search).forEach(key => {
let detail = search[key];
let isMatch = true;
// 遍历每个字段进行匹配
basic_info.search_obj.forEach(field => {
if (field.detail_field_id) {
let searchField = searchValues[field.detail_field_id];
let detailValue = detail[field.detail_field_id].value;
if (searchField.type == 'rawValue') {
// 部分匹配
isMatch = isMatch && (!searchField.value || detailValue.includes(searchField.value));
} else if (searchField.type == 'displayValue') {
// 完整匹配,但处理多个逗号分隔的值
let searchValuesArray = searchField.value.split(',').map(v => v.trim());
isMatch = isMatch && (!searchField.value || searchValuesArray.includes(detailValue));
}
}
});
if (isMatch) {
Arrtmp.push(detail.rowIndex);
}
});
// 显示符合条件的明细行
if (Object.values(searchValues).every(v => !v.value.trim())) {
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, "all", false); // 显示所有明细行
} else {
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, "all", true); // 全部隐藏
WfForm.controlDetailRowDisplay("detail_" + searchDetailNum, Arrtmp.join(), false); // 显示符合条件的行
}
WfForm.checkDetailRow("detail_" + searchDetailNum, "", true); // 清空所有勾选项
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能结束