//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能开始 /*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); // 清空所有勾选项 } } //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能结束