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