1094 lines
39 KiB
JavaScript
1094 lines
39 KiB
JavaScript
var main = main || { version: "1.2" };
|
|
|
|
main.getMaturityDayPicture = function (minDay) { //获取
|
|
var picture = "";
|
|
if (minDay <= 1) {
|
|
picture = "light_red.png";
|
|
} else if (minDay <= 2) {
|
|
picture = "light_yellow.png";
|
|
} else if (minDay <= 3) {
|
|
picture = "light_green.png";
|
|
}
|
|
return picture;
|
|
};
|
|
|
|
main.isDate = function (d) {
|
|
return moment(d).isValid() && /(\d)+\-(\d)+\-(\d)+/.test(d);
|
|
};
|
|
|
|
var g_columnset = false;
|
|
var g_targetName = "";
|
|
var g_subgridobj = "";
|
|
|
|
main.setcolumnChooser = function (jgrid, targetName, isReturnSub) { //设置显示列 只设置一次
|
|
if (g_columnset && g_targetName === targetName) return;
|
|
g_columnset = true;
|
|
g_targetName = targetName;
|
|
return main.post("/configcolumn/columnchose", { targetname: targetName }, { suppressError: true, waitMe: false }).done(function (res) {
|
|
if (res.obj && res.obj.data) {
|
|
var columndata = JSON.parse(res.obj.data);
|
|
columndata = _.uniqBy(columndata, "name");
|
|
var perm = new Array();
|
|
var canremap = true;
|
|
|
|
//检查column列是否被更新,如果更新调用 /System/RemoveColumnConfig
|
|
var current_colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
var ss = _.filter(current_colModel.map(o => o.name), (val, i, iteratee) => _.includes(iteratee, val, i + 1));
|
|
ss.length && console.log("存在重复值" + ss);
|
|
var newCols = [];
|
|
|
|
var cbSetDataIndex = columndata.findIndex(o => o.name == "cb");
|
|
if (cbSetDataIndex >= 0) {
|
|
columndata.splice(cbSetDataIndex, 1);
|
|
}
|
|
|
|
var cbIndex = current_colModel.findIndex(o => o.name == "cb");
|
|
if (cbIndex>=0) {
|
|
columndata.unshift(current_colModel[cbIndex]);
|
|
}
|
|
|
|
$.each(current_colModel, function (i, d) {
|
|
var isExist = columndata.some(function (dd, ii) { return dd.name === d.name; });
|
|
if (!isExist) {
|
|
newCols.push(d.name);
|
|
columndata.push(d);
|
|
}
|
|
});
|
|
|
|
if (isReturnSub) g_subgridobj = columndata;
|
|
var undefinedColumnIndexList = _.range(0, current_colModel.length);
|
|
columndata.forEach(function (item, index) {
|
|
if (item !== null && (item.hidden || $.inArray(item.name, newCols) >= 0)) {
|
|
jgrid.setGridParam().hideCol([item.name]);
|
|
}
|
|
else {
|
|
jgrid.setGridParam().showCol([item.name]);
|
|
}
|
|
var i = current_colModel.findIndex(o => o.name == item.name);
|
|
if (i >= 0) {
|
|
perm.push(i);
|
|
_.remove(undefinedColumnIndexList, o => o === i);
|
|
}
|
|
});
|
|
if (undefinedColumnIndexList.length > 0) {
|
|
perm = perm.concat(undefinedColumnIndexList);
|
|
}
|
|
|
|
if (canremap) {
|
|
jgrid.jqGrid("remapColumns", perm, true);
|
|
}
|
|
|
|
//jgrid.trigger("reloadGrid");
|
|
}
|
|
});
|
|
};
|
|
|
|
main.setcolumnChooser2 = function (jgrid, targetName, isReturnSub) { //设置显示列 只设置一次
|
|
if (g_columnset && g_targetName === targetName) return;
|
|
g_columnset = true;
|
|
g_targetName = targetName;
|
|
return main.post("/configcolumn/columnchose", { targetname: targetName }, { suppressError: true }).done(function (res) {
|
|
if (res.obj && res.obj.data) {
|
|
var columndata = JSON.parse(res.obj.data);
|
|
columndata = _.uniqBy(columndata, "name");
|
|
var perm = new Array();
|
|
var canremap = true;
|
|
|
|
//检查column列是否被更新,如果更新调用 /System/RemoveColumnConfig
|
|
var current_colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
var ss = _.filter(current_colModel.map(o => o.name), (val, i, iteratee) => _.includes(iteratee, val, i + 1));
|
|
ss.length && console.log("存在重复值" + ss);
|
|
var newCols = [];
|
|
$.each(current_colModel, function (i, d) {
|
|
var isExist = columndata.some(function (dd, ii) { return dd.name === d.name; });
|
|
if (!isExist) {
|
|
newCols.push(d.name);
|
|
columndata.push(d);
|
|
}
|
|
//isMatch = isMatch && isExist;
|
|
});
|
|
if (isReturnSub) g_subgridobj = columndata;
|
|
|
|
var tempGroupHeader = jgrid.getGridParam("groupHeader");
|
|
var groupHeaders = tempGroupHeader.groupHeaders;
|
|
var groupIndex = 0, groupIndexArray = [];
|
|
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
if (tempGroupHeader) {
|
|
jgrid.jqGrid('destroyGroupHeader', true);
|
|
groupHeaders.forEach(function (item, index) {
|
|
groupIndexArray[index] = [];
|
|
var startIndex = -1;
|
|
for (var i = 0; i < colModel.length; i++) {
|
|
if (item.startColumnName === colModel[i].name) {
|
|
groupIndexArray[index].push(colModel[i].name);
|
|
startIndex = i;
|
|
} else if (startIndex >= 0) {
|
|
if (i < startIndex + item.numberOfColumns) {
|
|
groupIndexArray[index].push(colModel[i].name);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
item.startColumnName = null;
|
|
});
|
|
}
|
|
|
|
var currentGroupShowCount = -1;
|
|
var isInArray = false;
|
|
columndata.forEach(function (item, index) {
|
|
isInArray = false;
|
|
if (tempGroupHeader && !main.isEmpty(groupIndexArray) && groupIndex < groupIndexArray.length) {
|
|
if (main.isEmpty(groupIndexArray[groupIndex])) {
|
|
//groupIndexArray.splice(groupIndex, 1);
|
|
if (currentGroupShowCount === 0) {
|
|
//groupHeaders.splice(groupIndex, 1);
|
|
//groupIndexArray.splice(groupIndex, 1);
|
|
//groupIndex--;
|
|
groupHeaders[groupIndex].notShow = true;
|
|
}
|
|
groupIndex++;
|
|
currentGroupShowCount = -1;
|
|
}
|
|
if (!main.isEmpty(groupIndexArray[groupIndex])) {
|
|
if (currentGroupShowCount === -1) {
|
|
currentGroupShowCount = groupIndexArray[groupIndex].length;
|
|
}
|
|
var currentGroupColumnIndex = groupIndexArray[groupIndex].findIndex(function (currentValue) {
|
|
return item.name === currentValue;
|
|
});
|
|
if (currentGroupColumnIndex > -1) {
|
|
if (groupHeaders[groupIndex].startColumnName === null) {
|
|
groupHeaders[groupIndex].startColumnName = item.name;
|
|
}
|
|
isInArray = true;
|
|
groupIndexArray[groupIndex].splice(currentGroupColumnIndex, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (item !== null && (item.hidden || $.inArray(item.name, newCols) >= 0)) {
|
|
jgrid.setGridParam().hideCol([item.name]);
|
|
if (isInArray && currentGroupShowCount > 0) {
|
|
currentGroupShowCount--;
|
|
}
|
|
}
|
|
else {
|
|
jgrid.setGridParam().showCol([item.name]);
|
|
}
|
|
var i = colModel.findIndex(o => o.name == item.name);
|
|
if (i >= 0) {
|
|
perm.push(i);
|
|
}
|
|
});
|
|
|
|
if (currentGroupShowCount === 0) {
|
|
groupHeaders[groupIndex].notShow = true;
|
|
}
|
|
|
|
if (canremap) {
|
|
jgrid.jqGrid("remapColumns", perm, true);
|
|
}
|
|
|
|
if (tempGroupHeader) {
|
|
var tempGroupHeaders = groupHeaders.slice(0);
|
|
for (var i = groupHeaders.length - 1; i >= 0; i--) {
|
|
if (groupHeaders[i].notShow) {
|
|
groupHeaders[i].notShow = false;
|
|
groupHeaders.splice(i, 1);
|
|
}
|
|
}
|
|
jgrid.jqGrid('setGroupHeaders', tempGroupHeader);
|
|
tempGroupHeader = jgrid.getGridParam("groupHeader");
|
|
tempGroupHeader.groupHeaders = tempGroupHeaders;
|
|
}
|
|
|
|
//jgrid.trigger("reloadGrid");
|
|
}
|
|
});
|
|
};
|
|
|
|
main.showcolumnChooser = function (jgrid, targetName, options) {
|
|
options = options || {};
|
|
var _options = {
|
|
width: 550,
|
|
dialog_opts: {
|
|
modal: false,
|
|
minWidth: 470,
|
|
height: 470,
|
|
show: 'blind',
|
|
hide: 'explode',
|
|
dividerLocation: 0.5
|
|
},
|
|
done: function (perm) {
|
|
if (perm) {
|
|
this.jqGrid("remapColumns", perm, true);
|
|
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
if (options.liteOnly) {
|
|
colModel = colModel.map(function (x) { return { name: x.name, hidden: x.hidden }; });
|
|
}
|
|
main.post("/configcolumn/saveconfig", { targetname: targetName, data: JSON.stringify(colModel) }).done(function (res) {
|
|
$(window).trigger("resize");
|
|
});
|
|
}
|
|
}
|
|
};
|
|
jgrid.jqGrid('columnChooser', _options);
|
|
};
|
|
|
|
main.showcolumnChooser2 = function (jgrid, targetName, opts) {
|
|
var _d = $.Deferred();
|
|
var defaultOpts = {
|
|
width: 580,
|
|
dialog_opts: {
|
|
modal: false,
|
|
minWidth: 470,
|
|
height: 700,
|
|
show: 'blind',
|
|
hide: 'explode',
|
|
dividerLocation: 0.5
|
|
},
|
|
done: function (perm) {
|
|
if (perm) {
|
|
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
main.post("/configcolumn/saveconfig", { targetname: targetName, data: JSON.stringify(colModel) }).done(_d.resolve);
|
|
}
|
|
}
|
|
};
|
|
if (opts !== undefined && opts !== null) {
|
|
$.extend(defaultOpts, opts);
|
|
}
|
|
jgrid.jqGrid('columnChooser2', defaultOpts);
|
|
return _d.promise();
|
|
};
|
|
|
|
main.setsubcolumnChooser = function (jgrid, targetName, isReturnSub, removecb, removesubgrid) { //子列设置显示列
|
|
return main.post("/configcolumn/columnchose", { targetname: targetName }, { suppressError: true }).done(function (res) {
|
|
if (res.obj && res.obj.data) {
|
|
var columndata = JSON.parse(res.obj.data);
|
|
columndata = _.uniqBy(columndata, "name");
|
|
var perm = new Array();
|
|
var canremap = true;
|
|
var addNum = 0;
|
|
|
|
//检查column列是否被更新,如果更新调用 /System/RemoveColumnConfig
|
|
var current_colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
var ss = _.filter(current_colModel.map(o => o.name), (val, i, iteratee) => _.includes(iteratee, val, i + 1));
|
|
ss.length && console.log("存在重复值" + ss);
|
|
var newCols = [];
|
|
$.each(current_colModel, function (i, d) {
|
|
var isExist = columndata.some(function (dd, ii) { return dd.name === d.name; });
|
|
if (!isExist) {
|
|
newCols.push(d.name);
|
|
columndata.push(d);
|
|
}
|
|
});
|
|
if (isReturnSub) g_subgridobj = columndata;
|
|
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
|
|
columndata.forEach(function (item, index) {
|
|
if (item !== null && (item.hidden || $.inArray(item.name, newCols) >= 0)) {
|
|
jgrid.setGridParam().hideCol([item.name]);
|
|
}
|
|
else {
|
|
jgrid.setGridParam().showCol([item.name]);
|
|
}
|
|
var i = colModel.findIndex(o => o.name == item.name);
|
|
if (i >= 0) {
|
|
perm.push(i);
|
|
}
|
|
});
|
|
|
|
if (canremap) {
|
|
jgrid.jqGrid("remapColumns", perm, true);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
main.showsubcolumnChooser = function (jgrid, targetName, options) {
|
|
options = options || {};
|
|
var _options = {
|
|
width: 550,
|
|
dialog_opts: {
|
|
modal: false,
|
|
minWidth: 470,
|
|
height: 470,
|
|
show: 'blind',
|
|
hide: 'explode',
|
|
dividerLocation: 0.5
|
|
},
|
|
done: function (perm) {
|
|
var subList = [];
|
|
if (options.expandSubs !== 'none') {
|
|
var rowIds = $("#listGrid").jqGrid('getDataIDs');
|
|
for (var k = 0; k < rowIds.length; k++) {
|
|
var curIndex = rowIds[k];
|
|
var curRowData = $("#listGrid").jqGrid('getRowData', curIndex);
|
|
var curCheckId = "jqg_listGrid_" + curIndex;
|
|
var cbTableId = "listGrid_" + curIndex + "_t";
|
|
|
|
var expanded = $("#" + curCheckId).parent().parent().find(".sgexpanded");
|
|
if (expanded.length > 0) {
|
|
subList.push($("#" + curCheckId).parent().parent().attr("id"));
|
|
}
|
|
}
|
|
}
|
|
if (!perm) return;
|
|
|
|
this.jqGrid("remapColumns", perm, true);
|
|
$.each(subList, function (index, value) {
|
|
var sub = "listGrid_" + value + "_t";
|
|
if (value !== 1) {
|
|
$("#" + sub).jqGrid("remapColumns", perm, true);
|
|
}
|
|
});
|
|
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
|
if (options.liteOnly) {
|
|
colModel = colModel.map(function (x) { return { name: x.name, hidden: x.hidden }; });
|
|
}
|
|
main.post("/configcolumn/saveconfig",
|
|
{
|
|
targetname: targetName,
|
|
data: JSON.stringify(colModel)
|
|
}).done(function (res) {
|
|
//页面加载
|
|
window.location.href = window.location.href.replace(/#/g, '');
|
|
});
|
|
}
|
|
};
|
|
jgrid.jqGrid('columnChooser', _options);
|
|
};
|
|
|
|
//映射已经保存下来的列配置
|
|
main.mapSavedColModel = function (savedData, originals) {
|
|
if (!savedData) return originals;
|
|
var columndata = JSON.parse(savedData);
|
|
//必需完全匹配才可以
|
|
var isMatch = originals.length === columndata.length;
|
|
if (isMatch) {
|
|
$.each(originals, function (i, d) {
|
|
var item = columndata.find(dd => dd.name === d.name);
|
|
if (!item) {
|
|
isMatch = false;
|
|
return false;
|
|
}
|
|
item.formatter = d.formatter;
|
|
});
|
|
}
|
|
if (!isMatch) {
|
|
main.post("/configcolumn/removeConfig", { targetname: targetName });
|
|
return originals;
|
|
}
|
|
return columndata;
|
|
};
|
|
|
|
main.hasEventFunction = function (ele, eventName, func) {
|
|
var eventsData = $(ele).data("events");
|
|
if (main.isEmpty(eventsData)) {
|
|
return false;
|
|
}
|
|
if (!eventsData[eventName]) {
|
|
return false;
|
|
}
|
|
for (var i = 0; i < eventsData[eventName].length; i++) {
|
|
if (eventsData[eventName][i].handler === func) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
main.loadJs = function (url, callback) {
|
|
var script = document.createElement('script');
|
|
script.type = "text/javascript";
|
|
if (typeof callback !== "undefined") {
|
|
if (script.readyState) {
|
|
script.onreadystatechange = function () {
|
|
if (script.readyState === "loaded" || script.readyState === "complete") {
|
|
script.onreadystatechange = null;
|
|
callback();
|
|
}
|
|
};
|
|
} else {
|
|
script.onload = function () {
|
|
callback();
|
|
};
|
|
}
|
|
}
|
|
script.src = url;
|
|
document.body.appendChild(script);
|
|
};
|
|
|
|
main.toExcel = function (jqGrid, fileName, fileType, include, notInclude, formatters, useGroupHeader, numberWithTab) {
|
|
var callbackFunc = function () {
|
|
if (typeof jqGrid === "string") {
|
|
jqGrid = $("#" + jqGrid);
|
|
} else {
|
|
jqGrid = $(jqGrid);
|
|
}
|
|
fileType = fileType || "xls";
|
|
include = include || [];
|
|
notInclude = notInclude || [];
|
|
formatters = formatters || [];
|
|
useGroupHeader = useGroupHeader || false;
|
|
if (typeof include === "string") {
|
|
include = include.split(",");
|
|
}
|
|
if (typeof notInclude === "string") {
|
|
notInclude = notInclude.split(",");
|
|
}
|
|
var colModel = [];
|
|
var colModelOriginal = jQuery.extend(true, [], $(jqGrid).jqGrid('getGridParam', 'colModel'));
|
|
var groupHeader = jqGrid.getGridParam("groupHeader");
|
|
var groupHeaders, groupIndex, isInGroup, groupColumnCount, tempNumberOfColumns;
|
|
if (groupHeader) {
|
|
groupHeaders = groupHeader.groupHeaders;
|
|
groupIndex = 0;
|
|
isInGroup = false;
|
|
groupColumnCount = 0;
|
|
tempNumberOfColumns = 0;
|
|
}
|
|
var j = 0;
|
|
var formatterArray = [];
|
|
var cellattrArray = [];
|
|
for (var i = 0; i < colModelOriginal.length; i++) {
|
|
if (useGroupHeader && groupHeader) {
|
|
if (groupIndex < groupHeaders.length) {
|
|
if (colModelOriginal[i].name === groupHeaders[groupIndex].startColumnName) {
|
|
isInGroup = true;
|
|
tempNumberOfColumns = groupHeaders[groupIndex].numberOfColumns;
|
|
groupHeaders[groupIndex].numberOfColumns = 0;
|
|
groupColumnCount++;
|
|
groupHeaders[groupIndex].title = groupHeaders[groupIndex].titleText.replace(/<[^>]+>/g, "");
|
|
} else if (isInGroup) {
|
|
groupColumnCount++;
|
|
}
|
|
}
|
|
}
|
|
if (!colModelOriginal[i].hidden && colModelOriginal[i].name !== "cb" && colModelOriginal[i].name !== "subgrid"
|
|
&& $.inArray(colModelOriginal[i].label, notInclude) === -1 || $.inArray(colModelOriginal[i].label, include) > -1) {
|
|
if (useGroupHeader && groupHeader && isInGroup) {
|
|
if (groupHeaders[groupIndex].startColumnName === null) {
|
|
groupHeaders[groupIndex].startColumnName = colModelOriginal[i].name;
|
|
}
|
|
groupHeaders[groupIndex].numberOfColumns++;
|
|
}
|
|
|
|
var curCol = {
|
|
colName: colModelOriginal[i].label,
|
|
fieldName: colModelOriginal[i].name,
|
|
colIndex: j++,
|
|
keepFormatter: false
|
|
};
|
|
if (!main.isEmpty(formatters)) {
|
|
var colFormatter = formatters.find(function (currentValue) {
|
|
return colModelOriginal[i].label === currentValue.colName;
|
|
});
|
|
if (colFormatter) {
|
|
colModelOriginal[i].formatter = colFormatter.formatter;
|
|
curCol.keepFormatter = true;
|
|
}
|
|
}
|
|
|
|
if (colModelOriginal[i].formatter !== undefined && colModelOriginal[i].formatter !== null) {
|
|
if (typeof colModelOriginal[i].formatter === "string") {
|
|
if (colModelOriginal[i].formatter === "number" || colModelOriginal[i].formatter === "number2") {
|
|
curCol.formatter = "number";//"number2";
|
|
} else {
|
|
curCol.formatter = colModelOriginal[i].formatter;
|
|
}
|
|
formatterArray[j - 1] = curCol.formatter;
|
|
} else if (typeof colModelOriginal[i].formatter === "function") {
|
|
formatterArray[j - 1] = colModelOriginal[i].formatter;
|
|
curCol.formatter = function (colValue, rowModel, colIndex) {
|
|
var formaterFunc = formatterArray[colIndex];
|
|
return formaterFunc(colValue, null, rowModel);
|
|
};
|
|
}
|
|
} else {
|
|
formatterArray[j - 1] = null;
|
|
}
|
|
|
|
if (colModelOriginal[i].cellattr !== undefined && colModelOriginal[i].cellattr !== null) {
|
|
if (typeof colModelOriginal[i].cellattr === "function") {
|
|
cellattrArray[j - 1] = colModelOriginal[i].cellattr;
|
|
curCol.cellattr = function (colValue, rowModel, colIndex) {
|
|
var cellattrFunc = cellattrArray[colIndex];
|
|
return cellattrFunc(colValue, null, rowModel);
|
|
};
|
|
}
|
|
} else {
|
|
cellattrArray[j - 1] = null;
|
|
}
|
|
colModel.push(curCol);
|
|
} else if (useGroupHeader && groupHeader && colModelOriginal[i].name === groupHeaders[groupIndex].startColumnName) {
|
|
groupHeaders[groupIndex].startColumnName = null;
|
|
}
|
|
|
|
if (useGroupHeader && groupHeader && isInGroup && groupColumnCount >= tempNumberOfColumns) {
|
|
groupIndex++;
|
|
isInGroup = false;
|
|
groupColumnCount = 0;
|
|
}
|
|
}
|
|
|
|
var rowDatas = main.GetSortedGridObjs(jqGrid);
|
|
if (!main.isEmpty(rowDatas)) {
|
|
$.each(colModel, function () {
|
|
if (!this.keepFormatter) {
|
|
this.formatter = null;
|
|
}
|
|
});
|
|
$.fn.exportToExcel({
|
|
data: rowDatas,
|
|
colModel: colModel,
|
|
groupHeader: useGroupHeader ? groupHeader : null,
|
|
fileName: fileName,
|
|
fileType: fileType,
|
|
numberWithTab: numberWithTab
|
|
});
|
|
return;
|
|
}
|
|
|
|
var url = $(jqGrid).jqGrid('getGridParam', 'url');
|
|
var postData = $(jqGrid).jqGrid('getPostData');
|
|
postData.rows = 0;
|
|
postData.PageSize = 0;
|
|
$.fn.exportToExcel({
|
|
url: url,
|
|
remote: true,
|
|
postData: postData,
|
|
colModel: colModel,
|
|
groupHeader: useGroupHeader ? groupHeader : null,
|
|
fileName: fileName,
|
|
fileType: fileType,
|
|
numberWithTab: numberWithTab
|
|
});
|
|
};
|
|
if ($("script[src*='exportUtil.js']").length === 0) {
|
|
main.loadJs("/Statics/libs/v1/exportUtil.js?t=0.9", callbackFunc);
|
|
} else {
|
|
callbackFunc();
|
|
}
|
|
};
|
|
|
|
//只需要初始化一次
|
|
const __holiDays = (function () {
|
|
function getDatas() {
|
|
var val = [];
|
|
|
|
main.post("/calendar/GetCalendarsV2", "", { async: false }).done(function (res) {
|
|
if (res.version === '多日历') {
|
|
val = "多日历";
|
|
} else {
|
|
for (var i = 0; i < res.length; i++) {
|
|
var tempcal = eval(res[i].HolidayJson);
|
|
val = val.concat(tempcal);
|
|
}
|
|
}
|
|
});
|
|
|
|
return val;
|
|
}
|
|
var results;
|
|
return function () {
|
|
if (results) return results;
|
|
return results = getDatas();
|
|
};
|
|
})();
|
|
|
|
//为页面所有日期设置交易时间才可选择 deadline 之后的都不能选择
|
|
main.setTradeDatePicker = function (maturedate, picker, deadline, sel, hasHolidays) {
|
|
|
|
var natDays = __holiDays();
|
|
|
|
function noWeekendsOrHolidays(date) {
|
|
var deadlinetemp = $(this).attr("deadline");
|
|
if (deadlinetemp) deadline = deadlinetemp;
|
|
if (deadline && date > moment(deadline)) return [false];
|
|
return nationalDays(date);
|
|
}
|
|
|
|
function nationalDays(date) {
|
|
|
|
if (natDays === '多日历') {
|
|
if (moment(date).isoWeekday() > 5) {
|
|
return [false];
|
|
}
|
|
} else {
|
|
var m = date.getMonth();
|
|
var d = date.getDate();
|
|
var y = date.getFullYear();
|
|
|
|
for (var i = 0; i < natDays.length - 1; i++) {
|
|
var myDate = new Date(natDays[i]);
|
|
if (!hasHolidays && m === myDate.getMonth() && d === myDate.getDate() && y === myDate.getFullYear()) {
|
|
return [false];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (maturedate && date > maturedate) {
|
|
return [false]; //大于到期日的都不能选
|
|
}
|
|
|
|
return [true];
|
|
}
|
|
|
|
$(picker || ".datepicker").datepicker({
|
|
beforeShowDay: noWeekendsOrHolidays,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
showButtonPanel: true,
|
|
showOtherMonths: true,
|
|
selectOtherMonths: true,
|
|
onSelect: sel
|
|
});
|
|
};
|
|
|
|
main.checkPhone = function (id) {
|
|
var tagObj = $("#" + id);
|
|
var phoneNumb = tagObj.val();
|
|
if (phoneNumb === "" || phoneNumb) {
|
|
var reg = /^1[345789]\d{9}$/;
|
|
if (!reg.test(phoneNumb)) {
|
|
main.notify("手机号码不符合要求,请重新输入!");
|
|
if (tagObj) {
|
|
tagObj.focus();
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
main.isEmpty = function (obj) {
|
|
if (obj === undefined || obj === null) {
|
|
return true;
|
|
}
|
|
if (typeof obj === "string" && obj === "") {
|
|
return true;
|
|
}
|
|
if (obj instanceof Array && obj.length === 0) {
|
|
return true;
|
|
}
|
|
if (typeof obj === "object" && $.isEmptyObject(obj)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
//两元素交换位置
|
|
main.eleExchange = function (eleA, eleB) {
|
|
var n = eleA.next(), p = eleB.prev();
|
|
eleB.insertBefore(n);
|
|
eleA.insertAfter(p);
|
|
};
|
|
|
|
//layer弹窗和新页面
|
|
(function () {
|
|
|
|
function getWindowClientArea(window) {
|
|
let document = window.document;
|
|
let width = 0, height = 0;
|
|
// 获取窗口宽度
|
|
if (window.innerWidth)
|
|
width = window.innerWidth;
|
|
else if ((document.body) && (document.body.clientWidth))
|
|
width = document.body.clientWidth;
|
|
// 获取窗口高度
|
|
if (window.innerHeight)
|
|
height = window.innerHeight;
|
|
else if ((document.body) && (document.body.clientHeight))
|
|
height = document.body.clientHeight;
|
|
// 通过深入 Document 内部对 body 进行检测,获取窗口大小
|
|
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
|
|
height = document.documentElement.clientHeight;
|
|
width = document.documentElement.clientWidth;
|
|
}
|
|
return { width: width, height: height };
|
|
}
|
|
|
|
/**
|
|
* 打开弹窗
|
|
* @param {any} title 弹窗标题
|
|
* @param {any} url 弹窗url
|
|
* @param {any} options 弹窗选项(layer选项)
|
|
*/
|
|
main.open = function (title, url, options) {
|
|
|
|
let defaultOptions = {
|
|
type: 2,
|
|
title: title,
|
|
shadeClose: false,
|
|
shade: 0.4,
|
|
area: ['95%', '95%'],
|
|
content: url,
|
|
maxmin: true
|
|
};
|
|
|
|
if (window.parent && window.parent !== window) {
|
|
let parent = window.parent, layerWin = window;
|
|
while (parent.parent && parent.parent !== parent) {
|
|
layerWin = parent;
|
|
parent = parent.parent;
|
|
}
|
|
let area = getWindowClientArea(layerWin);
|
|
$.extend(defaultOptions, { area: [area.width + 'px', area.height + 'px'] }, options);
|
|
let successFn = defaultOptions.success;
|
|
defaultOptions.success = function (layero, index) {
|
|
let win = layero.find('iframe')[0].contentWindow;
|
|
win.opener = layerWin;
|
|
successFn && successFn();
|
|
layerWin.onunload = function () { win.opener = null; };
|
|
layerWin.onbeforeunload = function () { win.opener = null; };
|
|
};
|
|
return parent.layer.open(defaultOptions);
|
|
}
|
|
|
|
options && $.extend(defaultOptions, options);
|
|
return layer.open(defaultOptions);
|
|
};
|
|
|
|
/**
|
|
* 打开单一弹窗(同时关闭弹窗的弹窗)
|
|
* @param {any} title
|
|
* @param {any} url
|
|
* @param {any} options
|
|
*/
|
|
main.openMono = function (title, url, options) {
|
|
var index = window.parent.main.open(title, url, options);
|
|
if (window.parent !== window) {
|
|
var layer = window.parent.layer;
|
|
layer.close(layer.getFrameIndex(window.name));
|
|
}
|
|
return index;
|
|
};
|
|
|
|
//打开非iframe弹窗
|
|
main.open2 = function (title, html, options) {
|
|
var defaultOptions = {
|
|
type: 1,
|
|
title: title,
|
|
shadeClose: false,
|
|
shade: 0.4,
|
|
area: ['95%', '95%'],
|
|
content: html
|
|
};
|
|
if (options !== undefined && options !== null) {
|
|
$.extend(defaultOptions, options);
|
|
}
|
|
return layer.open(defaultOptions);
|
|
};
|
|
|
|
//main.open
|
|
main.infopage = function (title, url, options) {
|
|
return main.open(title, url, typeof options === 'object' ? $.extend({ area: ['700px', '90%'] }, options) : { area: ['700px', '90%'] });
|
|
};
|
|
|
|
//刷新父窗体(页面或数据)
|
|
main.parentReload = function (reload) {
|
|
let winp = window.opener || window.parent;
|
|
if (!winp || !reload) return;
|
|
if (reload.startsWith('#')) {
|
|
winp.history.replaceState(null, null, _.trimStart(reload, '#'));
|
|
winp.location.reload();
|
|
}
|
|
else if (reload === 'reload' || reload === true) {
|
|
winp.location.reload();
|
|
} else if (reload === 'reloadData') {
|
|
winp.reloadData && winp.reloadData();
|
|
} else if (typeof reload === 'string') {
|
|
reload = winp[reload];
|
|
typeof reload === 'function' && reload();
|
|
}
|
|
};
|
|
|
|
//刷新父窗体数据
|
|
main.parentReloadData = main.parentReload.bind(null, 'reloadData');
|
|
|
|
//以下为layer扩展
|
|
|
|
if (!layer || !layer.open) return;
|
|
|
|
//关闭当前IFrame
|
|
layer.closeMe = function (reload, message) {
|
|
if (!window.parent || window.parent === window) return;
|
|
|
|
main.parentReload(reload);
|
|
|
|
message && (typeof (message) === "string" || typeof (message) === "number") && parent.main.message(message);
|
|
|
|
let index;
|
|
if (window.name) {
|
|
index = parent.layer.getFrameIndex(window.name);
|
|
index && parent.layer.close(index);
|
|
}
|
|
if (!index) {
|
|
parent.layer.closeAll();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 激发顶层window的事件
|
|
* @param {string} winLoc 窗体位置:'top' or 'parent',默认'parent'
|
|
* @param {string} type 事件类型
|
|
* @param {any} data 事件数据
|
|
*/
|
|
layer.raiseParentEvent = function (winLoc, type, data) {
|
|
let win;
|
|
if (winLoc === 'top') {
|
|
win = window.top;
|
|
} else {
|
|
win = window.opener || window.parent;
|
|
}
|
|
if (win) {
|
|
win.$('body').trigger(type, data);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 调用顶层window的方法
|
|
* @param {string} winLoc 窗体位置:'top' or 'parent',默认'parent'
|
|
* @param {string} method 方法名称
|
|
* @param {any} data 方法参数,apply数组
|
|
*/
|
|
layer.callParentMethod = layer.invokeParentMethod = function (winLoc, method, data) {
|
|
let win;
|
|
if (winLoc === 'top') {
|
|
win = window.top;
|
|
} else {
|
|
win = window.opener || window.parent;
|
|
}
|
|
if (method && win && typeof win[method] === 'function') {
|
|
if (data && !Array.isArray(data)) {
|
|
data = [data];
|
|
}
|
|
win[method].apply(win, data);
|
|
}
|
|
};
|
|
|
|
//别名
|
|
layer.closeSelf = layer.closeMe;
|
|
}());
|
|
|
|
main.toDate = function (cellValue, options, rowObject) {
|
|
return new moment(cellValue).format("YYYY-MM-DD");
|
|
};
|
|
|
|
main.toTime = function (cellValue, options, rowObject) {
|
|
return new moment(cellValue).format("YYYY-MM-DD HH:mm");
|
|
};
|
|
|
|
main.SetDropdownText = function (idname, textname) {
|
|
$("#" + textname).val($("#" + idname).find(":selected").text());
|
|
};
|
|
|
|
main.GetGridObjs = function (ggrid) {
|
|
var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow');
|
|
var ors = [];
|
|
for (var i = 0; i < rowIds.length; i++) {
|
|
var or = ggrid.getRowData(rowIds[i]);
|
|
ors.push(or);
|
|
}
|
|
return ors;
|
|
};
|
|
|
|
main.GetSortedGridObjs = function (ggrid) {
|
|
var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow');
|
|
var rowDatas = ggrid.getRowData();
|
|
if (main.isEmpty(rowIds)) {
|
|
return [];
|
|
}
|
|
var ors = $.grep(rowDatas,
|
|
function (ele, index) {
|
|
return rowIds.some(function (rowId) { return rowId === ele.id; });
|
|
});
|
|
|
|
ors.forEach(function (item, index) {
|
|
if (item !== null) {
|
|
Object.keys(item).forEach(function (key) {
|
|
const regex = /#=(.*?)#/g;
|
|
var result = regex.exec(item[key]);
|
|
if (result) {
|
|
item[key] = result[1];
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
return ors;
|
|
};
|
|
|
|
main.GetGridIds = function (ggrid, propname) {
|
|
var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow');
|
|
var ors = [];
|
|
for (var i = 0; i < rowIds.length; i++) {
|
|
var or = {};
|
|
if (propname) {
|
|
or = ggrid.getRowData(rowIds[i])[propname];
|
|
} else
|
|
or = ggrid.getRowData(rowIds[i]).id;
|
|
ors.push(or);
|
|
}
|
|
return ors;
|
|
};
|
|
|
|
//jqgrid,选中行不勾选,只在点击checkbox时勾选 true 可以选,false不可以
|
|
main.disableRowCheck = function (rowid, e) {
|
|
var $myGrid = $(this),
|
|
i = $.jgrid.getCellIndex($(e.target).closest('td')[0]),
|
|
cm = $myGrid.jqGrid('getGridParam', 'colModel');
|
|
return (cm[i].name === 'cb') && $(e.target).prop("tagName") !== "TD";
|
|
};
|
|
|
|
main.toInt = function (val, opt, data) {
|
|
var numdata = numeral(val).format("0");
|
|
if (numdata === "NaN") numdata = 0;
|
|
return numdata;
|
|
};
|
|
|
|
main.toNumber = function (data, decimalPlaces) {
|
|
var formatStr = "0.";
|
|
if (decimalPlaces !== undefined && decimalPlaces !== null) {
|
|
for (var i = 0; i < decimalPlaces; i++) {
|
|
formatStr += "0";
|
|
}
|
|
} else {
|
|
formatStr = "0.00";
|
|
}
|
|
return numeral(data).format(formatStr);
|
|
};
|
|
|
|
main.toNumberExcludingNaN = function (data, decimalPlaces) {
|
|
var formatStr = "0.";
|
|
if (decimalPlaces !== undefined && decimalPlaces !== null) {
|
|
for (var i = 0; i < decimalPlaces; i++) {
|
|
formatStr += "0";
|
|
}
|
|
} else {
|
|
formatStr = "0.00";
|
|
}
|
|
var numdata = numeral(data).format(formatStr);
|
|
if (numdata === "NaN") numdata = 0;
|
|
return numdata;
|
|
};
|
|
|
|
main.toNumberExcludingNaNEx = function (data, decimalPlaces) {
|
|
var formatStr = "0.";
|
|
if (decimalPlaces !== undefined && decimalPlaces !== null) {
|
|
for (var i = 0; i < decimalPlaces; i++) {
|
|
formatStr += "0";
|
|
}
|
|
} else {
|
|
formatStr = "0.00";
|
|
}
|
|
var numdata = numeral(data).format(formatStr);
|
|
if (numdata === "NaN" || numdata === "-NaN" || numdata === 0) numdata = "0.00";
|
|
return numdata;
|
|
};
|
|
|
|
//得到url参数值
|
|
main.getUrlParam = function (name) {
|
|
var urlPara = window.location.search.substr(1).split("&");
|
|
var paraCounts = urlPara.length;
|
|
for (var i = 0; i < paraCounts; i++) {
|
|
if (urlPara[i].substr(0, urlPara[i].indexOf("=")).indexOf(name) > -1) {
|
|
return urlPara[i].substr(urlPara[i].indexOf("=") + 1);
|
|
}
|
|
}
|
|
return "";
|
|
};
|
|
|
|
//转换为中文财务数字
|
|
main.changeMoneyToChinese = function (money) {
|
|
var hundredMillion = 100000000;
|
|
var tenThousand = 10000;
|
|
|
|
var countOfHundredMillion = Math.floor(money / hundredMillion);
|
|
var countOfTenThousand = Math.floor((money % hundredMillion) / tenThousand);
|
|
var lessThanTenThousand = money % tenThousand;
|
|
|
|
var result = lessThanTenThousand.toFixed(2);
|
|
if (countOfTenThousand > 0) {
|
|
result = countOfTenThousand + "万" + result;
|
|
}
|
|
|
|
if (countOfHundredMillion > 0) {
|
|
result = countOfHundredMillion + "亿" + result;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
main.downloadFiles = (function () {
|
|
|
|
//解决pdf文件自动打开的问题
|
|
function downloadFile(file_path) {
|
|
var a = document.createElement('A');
|
|
a.href = file_path;
|
|
a.download = file_path.substr(file_path.lastIndexOf('/') + 1);
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
document.body.removeChild(a);
|
|
}
|
|
|
|
return function (files) {
|
|
if (files instanceof Array) {
|
|
let downFn = files.length > 1 ? downloadFile : window.open;
|
|
$.each(files, function (index, val) {
|
|
val && setTimeout(downFn.bind(null, val), 500);
|
|
});
|
|
} else {
|
|
if (files !== undefined && files !== null && files !== "") {
|
|
window.open(files);
|
|
}
|
|
}
|
|
};
|
|
|
|
}());
|
|
|
|
//清除非数字字符
|
|
main.clearNoNum = function (num) {
|
|
num = num + "";
|
|
num = num.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
|
|
num = num.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
|
|
num = num.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
|
|
num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');//只能输入两个小数
|
|
if (num.indexOf(".") < 0 && num !== "") {//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
|
|
num = parseFloat(num);
|
|
}
|
|
return num;
|
|
};
|
|
|
|
//转换为中文大写金额
|
|
main.toChineseCapital = function (numstr) {
|
|
var unit = "千百拾亿千百拾万千百拾元角分", str = "";
|
|
var p = numstr.indexOf('.');
|
|
if (p < 0) {
|
|
numstr += '00';
|
|
} else {
|
|
numstr = numstr.substring(0, p) + numstr.substr(p + 1, 2);
|
|
}
|
|
unit = unit.substr(unit.length - numstr.length);
|
|
for (var i = 0; i < numstr.length; i++) {
|
|
str += '零壹贰叁肆伍陆柒捌玖'.charAt(numstr.charAt(i)) + unit.charAt(i);
|
|
}
|
|
return str.replace(/零(千|百|拾|角|分)/g, "零").replace(/(零)+/g, "").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元");
|
|
}
|
|
|
|
main.formartDate = function (time,formatStr) {
|
|
if (!formatStr) {
|
|
formatStr = "YYYY-MM-DD";
|
|
}
|
|
var momDate = new moment(time);
|
|
if (!momDate.isValid() || typeof time === "undefined") return "";
|
|
return momDate.format(formatStr);
|
|
}
|
|
///校验邮件地址
|
|
main.checkEmail = function (email) {
|
|
const regex = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
|
|
return regex.test(email);
|
|
}
|
|
|