新上传

新上传
This commit is contained in:
liozvqe 2024-12-03 09:50:46 +08:00
parent 6e6aac066e
commit d757586b4b
4 changed files with 362 additions and 3 deletions

View File

@ -1,3 +1 @@
# ZhangQiangEcologyKit 泛微OA Ecology 9 流程功能代码
一些OA功能函数

View File

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

View File

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

View File

@ -0,0 +1,35 @@
<script type="text/javascript">
function applyRowColoring() {
var rows = document.querySelectorAll('tr.ant-table-row-level-0');
rows.forEach(row => {
var value10 = parseFloat(row.querySelector('td:nth-child(10) span').textContent);
var value11 = parseFloat(row.querySelector('td:nth-child(11) span').textContent);
var leaveType = row.querySelector('td:nth-child(6) span').textContent;
var difvalue = value10 - value11;
// 检查当前背景色是否已设置
var currentColor = row.style.backgroundColor;
if (leaveType === '年假' || leaveType === '调休') {
if (difvalue < -20 && currentColor !== 'green') {
row.style.backgroundColor = 'green';
} else if (difvalue >= -20 && difvalue < -10 && currentColor !== 'blue') {
row.style.backgroundColor = 'blue';
} else if (difvalue >= -10 && difvalue <= 10 && currentColor !== '') {
row.style.backgroundColor = ''; // 不变
} else if (difvalue > 10 && difvalue <= 20 && currentColor !== 'orange') {
row.style.backgroundColor = 'orange';
} else if (difvalue > 20 && currentColor !== 'red') {
row.style.backgroundColor = 'red';
}
}
});
}
// 定时器每200毫秒执行一次
setInterval(function() {
applyRowColoring();
}, 200);
</script>