diff --git a/README.md b/README.md index c66ef54..ce9678b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ -# ZhangQiangEcologyKit - -一些OA功能函数 \ No newline at end of file +泛微OA Ecology 9 流程功能代码 \ No newline at end of file diff --git a/明细搜索功能函数V1.js b/明细搜索功能函数V1.js new file mode 100644 index 0000000..536660b --- /dev/null +++ b/明细搜索功能函数V1.js @@ -0,0 +1,190 @@ +//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能开始 +/*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); // 清空所有勾选项 + } +} +//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------搜索功能结束 \ No newline at end of file diff --git a/未设置函数前的代码.js b/未设置函数前的代码.js new file mode 100644 index 0000000..c8c2a08 --- /dev/null +++ b/未设置函数前的代码.js @@ -0,0 +1,136 @@ +//------搜索相关字段开始 +var fuzzySearchFI = "field201846";//模糊搜索 +var nameFI = "field204845";//姓名搜索 +var numberFI = "field201848";//证件号码搜索 +var tagFI = "field201849";//身份标签搜索 +var dtnameFI = "field188336";//明细姓名搜索 +var dtnumberFI = "field193852";//明细证件号码搜索 +var dttagFI = "field201845";//明细身份标签搜索 +//--------------------------------------------------------------------------------清空搜索字段的值开始 +WfForm.changeFieldValue("field194398", { value: "" });//批量修改开关 +WfForm.changeFieldValue("field194399", { value: "" });//只显示勾选项 +WfForm.changeFieldValue(fuzzySearchFI, { value: "" });//模糊搜索 +WfForm.changeFieldValue(nameFI, { value: "" });//姓名搜索 +WfForm.changeFieldValue(numberFI, { value: "" });//证件号码搜索 +WfForm.changeFieldValue(tagFI, { value: "" });//身份标签搜索 +//--------------------------------------------------------------------------------清空搜索字段的值结束 +//------搜索相关字段结束 +//---------------------------------------------------------------------------------------------------------搜索功能 +WfForm.bindFieldChangeEvent(fuzzySearchFI, function (obj, id, value) {//模糊搜索 + showAndClose(fuzzySearchFI, value); +}); +$(".wf-input-" + fuzzySearchFI).keydown(function (event) {//模糊搜索 + let value = event.target.value; + showAndClose(fuzzySearchFI, value); +}); +//搜索区间触发 +//姓名,证件号码,人员标签 "field200843,field200844,field200845", +WfForm.bindFieldChangeEvent( + nameFI + "," + numberFI + "," + tagFI, + function (obj, id, value) { + showAndClose(id, value); + } +); +$(".wf-input-" + numberFI).keydown(function (event) {//证件号码 + let value = event.target.value; + showAndClose(numberFI, value); +}); +function showAndClose(fieldid, value) { + Arrtmp = []; + if (fieldid == fuzzySearchFI) {//---------------------------------------------------------------------模糊搜索 + var search = {}; + var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(","); + for (var i = 0; i < rowArr.length; i++) { + var rowIndex = rowArr[i]; + if (rowIndex !== "") { + var name = dtnameFI + "_" + rowIndex; //姓名 + var zjnum = dtnumberFI + "_" + rowIndex; //证件号码 + var sfbq = dttagFI + "_" + rowIndex; //身份标签 + let tmp = + WfForm.getBrowserShowName(name) + + ";" + + WfForm.getFieldValue(zjnum) + + ";" + + WfForm.getBrowserShowName(sfbq) + + ";"; + //以逗号分隔获取浏览按钮字段显示值 + 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_1", "all", false); + } else { + WfForm.controlDetailRowDisplay("detail_1", "all", true); // 全部隐藏 + WfForm.controlDetailRowDisplay("detail_1", Arrtmp.join(), false); // 显示符合条件的行 + } + WfForm.checkDetailRow("detail_1", "", true); // 清空所有勾选项 + } else { + var search = {}; + var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(","); + rowArr.forEach(rowIndex => { + if (rowIndex !== "") { + var name = dtnameFI + "_" + rowIndex; //姓名 + var zjnum = dtnumberFI + "_" + rowIndex; //证件号码 + var sfbq = dttagFI + "_" + rowIndex; //身份标签 + var nameValue = WfForm.getFieldValue(name); + var zjnumValue = WfForm.getFieldValue(zjnum); + var sfbqValue = WfForm.getFieldValue(sfbq); + var detailObj = { + name: nameValue, + zjnum: zjnumValue, + sfbq: sfbqValue, + rowIndex: rowIndex + }; + search[rowIndex] = detailObj; + } + }); + let name = WfForm.getFieldValue(nameFI);//姓名 + let zjnum = WfForm.getFieldValue(numberFI);//证件号码 + let sfbq = WfForm.getFieldValue(tagFI);//身份标签 + // 遍历每个明细行,判断是否匹配 + Object.keys(search).forEach(key => { + let detail = search[key]; + // 检查姓名是否匹配 + let nameMatches = !name || name.includes(detail.name); + // 检查证件号码是否匹配 + let tmp = zjnum.trim().split(" ").filter(i => i && i.trim()); + let zjnumMatches = !zjnum || tmp.some(item => { + let regex = new RegExp(item); + return regex.test(detail.zjnum); + }); + // 如果证件号码为空,直接设置为匹配 + if (!zjnum) { + zjnumMatches = true; + } + // 检查身份标签是否匹配 + let sfbqMatches = !sfbq || sfbq.includes(detail.sfbq); + // 如果所有条件都匹配,则添加到结果数组 + if (nameMatches && zjnumMatches && sfbqMatches) { + Arrtmp.push(detail.rowIndex); + } + }); + // console.log("符合条件的明细行是", Arrtmp); + // 显示符合条件的明细行 + if (!name && !zjnum && !sfbq) { + WfForm.controlDetailRowDisplay("detail_1", "all", false); // 显示所有明细行 + } else { + WfForm.controlDetailRowDisplay("detail_1", "all", true); // 全部隐藏 + WfForm.controlDetailRowDisplay("detail_1", Arrtmp.join(), false); // 显示符合条件的行 + } + WfForm.checkDetailRow("detail_1", "", true); // 清空所有勾选项 + } +} +//---------------------------------------------------------------------------------------------------------搜索功能结束 \ No newline at end of file diff --git a/查询列表改变背景色.js b/查询列表改变背景色.js new file mode 100644 index 0000000..979260d --- /dev/null +++ b/查询列表改变背景色.js @@ -0,0 +1,35 @@ + \ No newline at end of file