3074 lines
75 KiB
JavaScript
3074 lines
75 KiB
JavaScript
/**
|
||
* 命名空间与全局方法
|
||
* @author life
|
||
*/
|
||
|
||
// 命名空间
|
||
var dk =
|
||
order =
|
||
shipment =
|
||
gis =
|
||
party =
|
||
contract =
|
||
network =
|
||
equip =
|
||
manual =
|
||
reason =
|
||
payment =
|
||
auth =
|
||
cron =
|
||
{};
|
||
|
||
// 全局配置
|
||
G_CONFIG = {
|
||
defaultCountryId: "402895853e3bd7a5013e3bd7b2c20000",
|
||
split: "/"
|
||
};
|
||
|
||
// cache
|
||
dk.cache = {
|
||
countries: {},
|
||
regions: {},
|
||
cities: {},
|
||
towns: {}
|
||
};
|
||
|
||
// 公用方法
|
||
// 除公用方法外, 其它方法必须在命名空间下
|
||
|
||
//-----------
|
||
// 国际化
|
||
//-----------
|
||
|
||
/**
|
||
* 得到国际化
|
||
* @param key String 键名
|
||
* @param data Array 替换的值
|
||
* @param [source] Object 数据源
|
||
* @returns String 国际化后的值
|
||
*/
|
||
function getText(key, data, source) {
|
||
// 判断key有无'.', 比如 msg.title.info
|
||
// 得到最终的value
|
||
var keyArr = key.split('.');
|
||
var value = source ? source : i18n;
|
||
for(var i = 0; i < keyArr.length; ++i) {
|
||
value = value[keyArr[i]];
|
||
}
|
||
|
||
if(!data) return value;
|
||
|
||
// 替换之
|
||
// 防止{1}/{1}, 里面的数字是有意义的!
|
||
var i = 0;
|
||
var str = value.replace(/{[0-9]+}/g, function(each) {
|
||
// 从{11}中得到11
|
||
var index = each.substr(1, each.length-2);
|
||
return data[index];
|
||
});
|
||
|
||
return str;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param key
|
||
* @param data
|
||
* @returns
|
||
*/
|
||
function getMsgText(key, data) {
|
||
return getText(key, data, i18n.msg);
|
||
}
|
||
function getMsgTitleText(key, data) {
|
||
return getText(key, data, i18n.msg.title);
|
||
}
|
||
|
||
function getWinText(key, data) {
|
||
return getText(key, data, i18n.win);
|
||
}
|
||
function getWinTitleText(key, data) {
|
||
return getText(key, data, i18n.win.title);
|
||
}
|
||
|
||
//---------------
|
||
// dataGrid 表格
|
||
//---------------
|
||
|
||
/**
|
||
* 检查是否选中了
|
||
*
|
||
* @return Object row
|
||
*/
|
||
function checkSelectOne(gridId) {
|
||
var datagrid = $('#' + gridId);
|
||
if(!datagrid) return false;
|
||
|
||
var rows = datagrid.datagrid('getChecked');
|
||
if(rows.length < 1) {
|
||
msgAlert('info', 'selectOne', 'info');
|
||
|
||
return false;
|
||
}
|
||
if(rows.length > 1) {
|
||
msgAlert('info', 'selectOnlyOne', 'info');
|
||
return false;
|
||
}
|
||
|
||
return rows[0];
|
||
}
|
||
|
||
/**
|
||
* 可以选中多行
|
||
*/
|
||
function checkSelects(gridId) {
|
||
var datagrid = $('#' + gridId);
|
||
if(!datagrid) return false;
|
||
|
||
var rows = datagrid.datagrid('getChecked');
|
||
if(rows.length < 1) {
|
||
msgAlert('info', 'select', 'info');
|
||
return false;
|
||
}
|
||
|
||
return rows;
|
||
}
|
||
|
||
/**
|
||
* 表格移除多条
|
||
* @param gridId String
|
||
* @param rows Array[Object]
|
||
*/
|
||
function deleteRows(gridId, rows) {
|
||
for(var i = 0; i < rows.length; ++i) {
|
||
deleteRow(gridId, rows[i]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 表格移除一条
|
||
* @param gridId String
|
||
* @param row Object
|
||
*/
|
||
function deleteRow(gridId, row) {
|
||
var index = $('#' + gridId).datagrid('getRowIndex', row);
|
||
$('#' + gridId).datagrid('deleteRow', index);
|
||
}
|
||
|
||
/**
|
||
* 表格添加多条
|
||
* @param gridId String
|
||
* @param rows Array[Object]
|
||
*/
|
||
function appendRows(gridId, rows) {
|
||
for(var i = 0; i < rows.length; ++i) {
|
||
appendRow(gridId, rows[i]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 表格添加一条
|
||
* @param gridId String
|
||
* @param row Object
|
||
*/
|
||
function appendRow(gridId, row) {
|
||
$("#" + gridId).datagrid('appendRow', row);
|
||
}
|
||
|
||
/**
|
||
* 得到多行记录的主键列表
|
||
* @param rows
|
||
* @param fieldId 主键字段名
|
||
* @returns {Array}
|
||
*/
|
||
function getRowsIds(rows, fieldId) {
|
||
var ids = [];
|
||
for(var i in rows) {
|
||
ids.push(rows[i][fieldId]);
|
||
}
|
||
return ids;
|
||
}
|
||
|
||
/**
|
||
* 刷新dataGrid
|
||
* @param gridId
|
||
*/
|
||
function reloadGrid(gridId) {
|
||
$('#' + gridId).datagrid('reload');
|
||
}
|
||
|
||
/**
|
||
* 为grid加载数据
|
||
* @param gridId
|
||
* @param queryParams
|
||
* @param [url]
|
||
*/
|
||
function loadGrid(gridId, queryParams, url) {
|
||
var gridObj = $('#' + gridId);
|
||
if(url) {
|
||
gridObj.datagrid('options').url = url;
|
||
}
|
||
gridObj.datagrid('options').queryParams = queryParams;
|
||
gridObj.datagrid('load');
|
||
}
|
||
|
||
/**
|
||
* 表格添加标题
|
||
* 显示数据用
|
||
* @param title
|
||
* @returns {String}
|
||
*/
|
||
function addTitle(title) {
|
||
return '<span title="' + title + '">' + title + '</span>';
|
||
}
|
||
|
||
/**
|
||
* 将true/false转成是/否
|
||
* @param bool true or false
|
||
* @returns
|
||
*/
|
||
function getYesOrNo(bool) {
|
||
return bool ? getText('yes') : getText('no');
|
||
}
|
||
|
||
//------------
|
||
// 弹框
|
||
//------------
|
||
|
||
// 弹框默认配置
|
||
dk.winDefaultConfig = {
|
||
minimizable: false, // 不可最小化
|
||
resizable: true,
|
||
collapsible: false, // 不能折叠
|
||
modal: true, // 遮罩
|
||
closed: false,
|
||
onClose : function() {
|
||
$(this).window('destroy');
|
||
}
|
||
};
|
||
|
||
// 得到grid 宽度
|
||
// 传过来的winWidth是win的宽度, 根据win宽度调整grid宽度
|
||
// min是否有下拉滚动条, 有会减少grid宽度
|
||
function getGridWidth(winWidth, min) {
|
||
var borderWidth = 16;
|
||
var borderWidthm = 36;
|
||
if(min) {
|
||
return winWidth - borderWidthm;
|
||
}
|
||
return winWidth - borderWidth;
|
||
}
|
||
|
||
// 得到win的宽度
|
||
// size是规格大小, selfWidth是自定义的大小, 如果有该值, 表示最大规格是size
|
||
// selfWidth超过它将用size
|
||
function getWinWidth(size, selfWidth) {
|
||
var width = $('body').width() * 0.1 * size;
|
||
if(typeof selfWidth != 'undefined') {
|
||
if(width > selfWidth) return selfWidth;
|
||
}
|
||
return width;
|
||
}
|
||
|
||
// 得到win的高度
|
||
function getWinHeight(size, selfHeight) {
|
||
// 这里之前是$('body').height(), 有bug, 当最大化win后, 该值为0
|
||
var height = $(window).height() * 0.1 * size;
|
||
if(typeof selfHeight != 'undefined') {
|
||
if(height > selfHeight) return selfHeight;
|
||
}
|
||
return height;
|
||
}
|
||
|
||
/**
|
||
* 打开win弹框
|
||
* @param winVar bool 是否自定义win, 如果为false, 则用g_custom_win, 否则用winVar
|
||
* @param winId string [不要使用, 将会弃用]
|
||
*/
|
||
dk.win = {};
|
||
function openWin(config, winVar, winId) {
|
||
config = $.extend({}, dk.winDefaultConfig, config);
|
||
if(!winId) winId = 'newWin'; // + (new Date().getTime());
|
||
|
||
// win的标题
|
||
config.title = getWinTitleText(config.title);
|
||
// 调整宽度和高度
|
||
config.width = getWinWidth(9, config.width);
|
||
config.height = getWinHeight(9, config.height);
|
||
|
||
var win = $('<div id="'+ winId+ '" class="newWin"/>').window(config);
|
||
|
||
if(!winVar) { // 用全局的
|
||
dk.win['g_custom_win'] = win;
|
||
} else {
|
||
dk.win[winVar] = win; // 避免不是由自己的子来关闭的情况, 其它可以控制关闭
|
||
// window[winVar] = win;
|
||
}
|
||
}
|
||
|
||
// 关闭弹框
|
||
// 空 or target Object或创建时定义的全局变量名
|
||
function closeWin(target) {
|
||
if(target == undefined) {
|
||
var theEvent = window.event || arguments.callee.caller.arguments[0];
|
||
var theObj = theEvent.target || theEvent.srcElement;
|
||
closeWin(theObj);
|
||
} else if(typeof target == "object") {
|
||
// 向上找class="newWin"的div
|
||
var obj = $(target).parents("div.newWin");
|
||
if(obj) {
|
||
$(obj).window('destroy');
|
||
}
|
||
} else if(typeof target == "string") {
|
||
if(dk.win[target]){
|
||
dk.win[target].window('destroy');
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 关闭win, 更新grid
|
||
* @param winVar
|
||
* @param gridId
|
||
*/
|
||
function closeWinAndReloadGrid(winVar, gridId) {
|
||
closeWin(winVar);
|
||
reloadGrid(gridId);
|
||
}
|
||
|
||
//---------
|
||
// 表单
|
||
//---------
|
||
|
||
/**
|
||
* 提交数据
|
||
* @param formId string <form id="formId"> 会通过该ID取该form的serialize数据
|
||
* @param successFunc Function 成功处理函数
|
||
* @param failureFunc Function 失败处理函数
|
||
*/
|
||
function formSubmit(formId, formDataFunc, successFunc, failureFunc, hasProgress) {
|
||
hasProgress = hasProgress == undefined ? true : hasProgress;
|
||
if(hasProgress) {
|
||
showProgress('info', 'processing');
|
||
}
|
||
|
||
formId = $('#' + formId);
|
||
var isValid = $(formId).form('validate'); // 验证数据
|
||
if(!isValid) {
|
||
hideProgress();
|
||
msgAlert("info", "inputError", "info");
|
||
return;
|
||
}
|
||
|
||
var formData = $(formId).serialize();
|
||
if(typeof formDataFunc == 'function') {
|
||
formData = formDataFunc(formData);
|
||
}
|
||
|
||
ajaxPost($(formId).attr('action'), formData, function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
hideProgress();
|
||
});
|
||
}
|
||
|
||
/**
|
||
* form的数据通过Json形式提交到后台
|
||
* @param formId
|
||
* @param formDataFunc 数据处理方法
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @author Life
|
||
* @datetime 2013/4/20 18:00
|
||
*/
|
||
function formSubmitJson(formId, formDataFunc, successFunc, failureFunc, hasProgress) {
|
||
hasProgress = hasProgress == undefined ? true : hasProgress;
|
||
if(hasProgress) {
|
||
showProgress('info', 'processing');
|
||
}
|
||
var formId2 = $('#' + formId);
|
||
var isValid = $(formId2).form('validate'); // 验证数据
|
||
|
||
if(!isValid) {
|
||
hideProgress();
|
||
msgAlert("info", "inputError", "info");
|
||
return;
|
||
}
|
||
|
||
// 得到form Json数据
|
||
var formData = getFormJsonData(formId);
|
||
if(typeof formDataFunc == 'function') {
|
||
formData = formDataFunc(formData);
|
||
}
|
||
|
||
$.ajax({
|
||
url : $(formId2).attr('action'),
|
||
type : "POST",
|
||
contentType: "application/json; charset=utf-8",
|
||
datatype: "json",
|
||
data : JSON.stringify(formData),
|
||
success : function(data, stats) {
|
||
_ajaxCallback(data, successFunc, failureFunc);
|
||
if(hasProgress) {
|
||
hideProgress();
|
||
}
|
||
},
|
||
error: function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
if(hasProgress) {
|
||
hideProgress();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// 得到form的数据
|
||
// 返回json
|
||
// 会处理date, autocomplete值
|
||
function getFormJsonData(formId, needFilter) {
|
||
if(needFilter == undefined) {
|
||
needFilter = true;
|
||
}
|
||
var data = formArrDataToJson($('#' + formId).serializeArray());
|
||
|
||
// date->dbType,如果是date类型,dbType是timestamp类型,要转
|
||
$("#" + formId + " input.Wdate").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name && data[name]) {
|
||
var viewType = $(this).attr("viewType");
|
||
var dbType = $(this).attr("dbType");
|
||
if(viewType == dbType) {
|
||
return;
|
||
}
|
||
if(viewType == "date" && dbType == "datetime") {
|
||
data[name] = data[name] + " 00:00:00";
|
||
}
|
||
}
|
||
});
|
||
|
||
/*if(needFilter) {
|
||
// 如果是autocomplete,那么不需要该值, 删除它
|
||
$("#" + formId + " input.ac_input").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(!name) {
|
||
return;
|
||
}
|
||
if(data[name]) {
|
||
delete data[name];
|
||
}
|
||
});
|
||
}*/
|
||
|
||
//mxm 2013.11.29
|
||
//如果是autocomplete,删除名字,那对应的Id也不应该保留
|
||
$("#" + formId + " input.ac_input").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(!name) {
|
||
return;
|
||
}
|
||
if(data[name]==null || data[name]=="" || data[name]==undefined) {
|
||
var id = name.substring(0,(name.length-4))+'Id';
|
||
delete data[id];
|
||
}
|
||
});
|
||
|
||
return data;
|
||
}
|
||
|
||
// $('#form').serializeArray()的数据[{name: a, value: b}, {name: "c[]", value: d}]
|
||
// 转成{a:b}
|
||
function formArrDataToJson(arrData) {
|
||
var datas = {};
|
||
var arrObj= {}; // {a:[1, 2], b:[2, 3]};
|
||
for(var i in arrData) {
|
||
var attr = arrData[i].name;
|
||
var value = arrData[i].value;
|
||
// 判断是否是a[]形式
|
||
if(attr.substring(attr.length-2, attr.length) == '[]') {
|
||
attr = attr.substring(0, attr.length-2);
|
||
if(arrObj[attr] == undefined) {
|
||
arrObj[attr] = [value];
|
||
} else {
|
||
arrObj[attr].push(value);
|
||
}
|
||
continue;
|
||
}
|
||
|
||
datas[attr] = value;
|
||
}
|
||
|
||
return $.extend(datas, arrObj);
|
||
}
|
||
|
||
// 将serialize的的form值转成json
|
||
function formSerializeDataToJson(formSerializeData) {
|
||
var arr = formSerializeData.split("&");
|
||
var datas = {};
|
||
var arrObj= {}; // {a:[1, 2], b:[2, 3]};
|
||
for(var i = 0; i < arr.length; ++i) {
|
||
var each = arr[i].split("=");
|
||
var attr = decodeURI(each[0]);
|
||
var value = decodeURI(each[1]);
|
||
// 判断是否是a[]形式
|
||
if(attr.substring(attr.length-2, attr.length) == '[]') {
|
||
attr = attr.substring(0, attr.length-2);
|
||
if(arrObj[attr] == undefined) {
|
||
arrObj[attr] = [value];
|
||
} else {
|
||
arrObj[attr].push(value);
|
||
}
|
||
continue;
|
||
}
|
||
datas[attr] = value;
|
||
}
|
||
|
||
return $.extend(datas, arrObj);
|
||
}
|
||
|
||
/**
|
||
* 选择radio
|
||
* TODO 有问题, 只能处理一批只有两个的情况
|
||
* @param names Array [] radio名
|
||
* @param source Object {} 值
|
||
*/
|
||
function setRadios(names, source, parentId) {
|
||
for(var i = 0; i < names.length; ++i) {
|
||
setRadio(names[i], source[names[i]], parentId);
|
||
}
|
||
}
|
||
// jquery 选择radio
|
||
// $("#rdo1").attr("checked","checked");
|
||
// $("#rdo1").removeAttr("checked");
|
||
function setRadio(name, value, parentId) {
|
||
var index = value ? 0 : 1; // 是在前, 否在后
|
||
id = 'input[name="' + name + '"]';
|
||
if(parentId) {
|
||
id = '#' + parentId + ' ' + id;
|
||
}
|
||
$(id).eq(index).attr("checked", "checked");
|
||
}
|
||
|
||
/**
|
||
* 设置input, textarea值
|
||
* @param names
|
||
* @param source
|
||
*/
|
||
function setInputTextareas(ids, values, parentId) {
|
||
for(var i = 0; i < ids.length; ++i) {
|
||
setInputTextarea(ids[i], values[ids[i]], parentId);
|
||
}
|
||
}
|
||
function setInputTextarea(id, value, parentId) {
|
||
var id = '#' + id;
|
||
if(parentId) {
|
||
id = '#' + parentId + ' ' + id;
|
||
}
|
||
$(id).val(value);
|
||
}
|
||
|
||
/**
|
||
* 设置comboboxs值, 选中.
|
||
* @param names
|
||
* @param values
|
||
*/
|
||
function setComboboxs(names, values, parentId) {
|
||
for(var i = 0; i < names.length; ++i) {
|
||
setCombobox(names[i], values[names[i]], parentId);
|
||
}
|
||
}
|
||
function setCombobox(name, value, parentId) {
|
||
if(value == null || value == undefined) {
|
||
return;
|
||
}
|
||
|
||
var id = '#' + name;
|
||
if(parentId) {
|
||
id = '#' + parentId + ' ' + id;
|
||
}
|
||
$(id).val(value);
|
||
// 等待easyui渲染完闭
|
||
setTimeout(function() {
|
||
$(id).combobox();
|
||
$(id).combobox('setValue', value);
|
||
}, 0);
|
||
}
|
||
|
||
function getCombobox(name, parentId) {
|
||
if(name == null || name == undefined) {
|
||
return;
|
||
}
|
||
var id = '#' + name;
|
||
if(parentId) {
|
||
id = '#' + parentId + ' ' + id;
|
||
}
|
||
var value=$(id).combobox('getValue');
|
||
if(value){
|
||
return value;
|
||
}else{
|
||
return $(id).val();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 在父parentId下所有值为value的checkbox选中
|
||
* @param parentId String 父ID
|
||
* @param values Array [vlaue1, value2]
|
||
*/
|
||
function setCheckboxs(values, parentId) {
|
||
if(!values) return;
|
||
for(var i = 0; i < values.length; ++i) {
|
||
setCheckbox(values[i], parentId);
|
||
}
|
||
}
|
||
function setCheckbox(value, parentId) {
|
||
id = 'input[value="' + value + '"]';
|
||
if(parentId) {
|
||
id = '#' + parentId + ' ' + id;
|
||
}
|
||
$(id).attr('checked', 'checked');
|
||
}
|
||
|
||
/**
|
||
* 展示信息
|
||
* @Param ids <span id="id1"></span> id集合
|
||
* @param sourceData 数据源, sourceData[id]
|
||
* @Param parent 父对象, for精确查询#id
|
||
*/
|
||
function showInfos(ids, sourceData, parentId) {
|
||
if(!ids || !sourceData) return;
|
||
for(var i = 0; i < ids.length; ++i) {
|
||
showInfo(ids[i], sourceData, parentId);
|
||
}
|
||
}
|
||
function showInfo(id, sourceData, parentId) {
|
||
var id2 = '#' + id;
|
||
if(parentId) {
|
||
id2 = '#' + parentId + ' ' + id2;
|
||
}
|
||
$(id2).html(sourceData[id]);
|
||
}
|
||
|
||
//------------
|
||
// messager
|
||
//------------
|
||
|
||
/**
|
||
* 提示框
|
||
*/
|
||
function msgAlert(title, msg, icon, confirmFunc) {
|
||
if(icon == undefined || icon == "") icon = "info";
|
||
title = getMsgTitleText(title);
|
||
msg = getMsgText(msg);
|
||
$.messager.alert(title, msg, icon, confirmFunc);
|
||
}
|
||
|
||
/**
|
||
* 提示, 自己输入信息, 不拿国际化
|
||
*/
|
||
function msgAlertSelf(title, msg, icon, confirmFunc) {
|
||
if(icon == undefined || icon == "") icon = "info";
|
||
$.messager.alert(getMsgTitleText(title), msg, icon, confirmFunc);
|
||
}
|
||
|
||
/**
|
||
* 确认?
|
||
* @param title
|
||
* @param msg
|
||
* @param yesFunc
|
||
* @param noFunc
|
||
*/
|
||
function msgConfirm(title, msg, yesFunc, noFunc) {
|
||
title = getMsgTitleText(title);
|
||
msg = getMsgText(msg);
|
||
|
||
$.messager.confirm(title, msg, function(r) {
|
||
if(r) {
|
||
if(typeof yesFunc == "function") yesFunc();
|
||
} else {
|
||
if(typeof noFunc == "function") noFunc();
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
//-----------
|
||
// 工具
|
||
//-----------
|
||
|
||
// 判断后台处理的结果是否为true
|
||
function _checkRetStatus(ret) {
|
||
if(!ret) {
|
||
//此处为地图专门处理
|
||
return true;
|
||
}
|
||
|
||
if(typeof ret == "object" && (ret.success == true || typeof ret.success == 'undefined')) {
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
// 显示进度条
|
||
function showProgress(title, msg) {
|
||
var param = {};
|
||
if(title != undefined) {
|
||
param.title = getMsgTitleText(title);
|
||
}
|
||
if(msg != undefined) {
|
||
param.msg = getMsgText(msg)
|
||
}
|
||
$.messager.progress(param);
|
||
}
|
||
// 关闭进度条
|
||
function hideProgress() {
|
||
$.messager.progress('close'); // 关闭进度条
|
||
}
|
||
|
||
/**
|
||
* 是否无权限, 登录(session过期)
|
||
* @param ret
|
||
* @returns {Boolean}
|
||
*/
|
||
function _noAuth(ret) {
|
||
if(typeof ret == "object") {
|
||
// 没有权限
|
||
if(ret.objectId == "noAuth") {
|
||
msgAlert("info", "noAccess", "info", function() {
|
||
});
|
||
return true;
|
||
// 没有登录, session过时
|
||
} else if(ret.objectId == "sessionTimeOut" || ret.objectId == "otherOneLogined") {
|
||
msgAlert("info", ret.objectId, "info", function() {
|
||
location.href = G_PATH + "/app/login.jsp";
|
||
});
|
||
// 清空定时
|
||
if(dk.activeUserCountInterval) {
|
||
clearInterval(dk.activeUserCountInterval);
|
||
}
|
||
if(dk.notReadMsgInterval) {
|
||
clearInterval(dk.notReadMsgInterval);
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 得到异常信息
|
||
* @param ret
|
||
* @returns
|
||
*/
|
||
function _getExceptionMsgs(ret) {
|
||
var msg = "";
|
||
//var msg = getMsgText('opFailure');
|
||
if(ret.exceptionList) {
|
||
for(var i in ret.exceptionList) {
|
||
if(ret.exceptionList[i]) {
|
||
msg += ret.exceptionList[i] + "<br />";
|
||
}
|
||
}
|
||
}
|
||
if(!msg) {
|
||
msg = getMsgText('opFailure');
|
||
}
|
||
return msg;
|
||
}
|
||
|
||
/**
|
||
* 得到异常信息
|
||
* @param ret
|
||
* @returns
|
||
*/
|
||
function getExceptionMsg(ret) {
|
||
var msg = "";
|
||
if(ret.exceptionList) {
|
||
for(var i in ret.exceptionList) {
|
||
if(ret.exceptionList[i]) {
|
||
msg += ret.exceptionList[i] + "<br />";
|
||
}
|
||
}
|
||
}
|
||
return msg;
|
||
}
|
||
|
||
/**
|
||
* 异常错误! 供datagrid中调用
|
||
* @param ret
|
||
* @returns bool 有错误,异常返回true
|
||
*/
|
||
function exceptionError(ret) {
|
||
// no auth
|
||
if(_noAuth(ret)) {
|
||
//...
|
||
return true;
|
||
} else {
|
||
// processStatus有错误, 输出异常信息
|
||
if(typeof ret == "object" && typeof ret.success != "undefined" && !ret.success) {
|
||
msgAlertSelf('info', _getExceptionMsgs(ret), 'info');
|
||
return true;
|
||
} else if(typeof ret != "object" ) {
|
||
msgAlert("info", "opFailure", "info");
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
// ajax请求返回结果后的操作
|
||
// 用于ajaxGet(), ajaxPost(), formSubmit()
|
||
function _ajaxCallback(ret, successFunc, failureFunc) {
|
||
if(_checkRetStatus(ret)) {
|
||
if(typeof successFunc == 'function') successFunc(ret);
|
||
else msgAlert('info', 'opSuccess', 'info');
|
||
} else {
|
||
// no auth
|
||
if(_noAuth(ret)) {
|
||
//...
|
||
} else {
|
||
if(typeof failureFunc == 'function') {
|
||
failureFunc(ret);
|
||
} else {
|
||
// processStatus有错误, 输出异常信息
|
||
if(typeof ret == "object") {
|
||
msgAlertSelf('info', _getExceptionMsgs(ret), 'info');
|
||
} else {
|
||
msgAlert("info", "opFailure", "info");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function _ajax(type, url, param, successFunc, failureFunc, hasProgress, async) {
|
||
if(typeof async == "undefined") {
|
||
async = true;
|
||
} else {
|
||
async = false;
|
||
}
|
||
$.ajax({
|
||
type: type,
|
||
url: url,
|
||
data: param,
|
||
async: async, // 是否异步
|
||
success: function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
if(hasProgress) hideProgress();
|
||
},
|
||
error: function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
if(hasProgress) hideProgress();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 发送ajax get请求
|
||
* @param url
|
||
* @param param
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @param hasProgress
|
||
* @param async 是否异步
|
||
* @returns
|
||
*/
|
||
function ajaxGet(url, param, successFunc, failureFunc, hasProgress, async) {
|
||
if(hasProgress == undefined) hasProgress = true;
|
||
if(hasProgress) showProgress('info', 'processing');
|
||
_ajax("GET", url, param, successFunc, failureFunc, hasProgress, async);
|
||
}
|
||
|
||
/**
|
||
* 发送post请求
|
||
* @param url
|
||
* @param param
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @param hasProgress
|
||
* @param async 是否异步, 默认为true
|
||
* @returns
|
||
*/
|
||
function ajaxPost(url, param, successFunc, failureFunc, hasProgress, async) {
|
||
if(hasProgress == undefined) hasProgress = true;
|
||
if(hasProgress) showProgress('info', 'processing');
|
||
_ajax("POST", url, param, successFunc, failureFunc, hasProgress, async);
|
||
}
|
||
|
||
/**
|
||
* 传送Json数据
|
||
* @param url
|
||
* @param param
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @param hasProgress
|
||
* @param async
|
||
* @returns
|
||
*/
|
||
function ajaxPostJson(url, param, successFunc, failureFunc, hasProgress, async) {
|
||
if(hasProgress == undefined) hasProgress = true;
|
||
if(hasProgress) showProgress('info', 'processing');
|
||
// 默认是异步的
|
||
if(typeof async == "undefined") {
|
||
async = true;
|
||
} else {
|
||
async = false;
|
||
}
|
||
$.ajax({
|
||
url : url,
|
||
type : "POST",
|
||
contentType: "application/json; charset=utf-8",
|
||
datatype: "json",
|
||
async: async,
|
||
data : JSON.stringify(param),
|
||
success : function(data, stats) {
|
||
_ajaxCallback(data, successFunc, failureFunc);
|
||
if(hasProgress) hideProgress();
|
||
},
|
||
error: function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
if(hasProgress) hideProgress();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 隐藏按钮
|
||
* @param btns Object | string 按钮IDs
|
||
*/
|
||
function hideBtn(btns) {
|
||
if(typeof btns == "object") {
|
||
for(var i in btns) {
|
||
$('#' + btns[i]).css("display", "none");
|
||
}
|
||
} else {
|
||
$('#' + btns).css("display", "none");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 显示按钮
|
||
* @param btns Object | string 按钮IDs
|
||
*/
|
||
function showBtn(btns) {
|
||
if(typeof btns == "object") {
|
||
for(var i in btns) {
|
||
$('#' + btns[i]).css("display", "inline-block");
|
||
}
|
||
} else {
|
||
$('#' + btns).css("display", "inline-block");
|
||
}
|
||
}
|
||
|
||
// 关闭按钮
|
||
function disableBtn(btns) {
|
||
if(typeof btns == "object") {
|
||
for(var i in btns) {
|
||
$('#' + btns[i]).linkbutton({disabled: true});
|
||
}
|
||
} else {
|
||
$('#' + btns).linkbutton({disabled: true});
|
||
}
|
||
}
|
||
|
||
function enableBtn(btns) {
|
||
if(typeof btns == "object") {
|
||
for(var i in btns) {
|
||
$('#' + btns[i]).linkbutton({disabled: false});
|
||
}
|
||
} else {
|
||
$('#' + btns).linkbutton({disabled: false});
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
* country, region, city, town多级联动
|
||
*
|
||
*/
|
||
// function areaCascade(countryWebId, regionWebId, cityWebId, townWebId, defaultCountryId, defaultRegionId, defaultCityId, defaultTownId) {
|
||
function areaCascade(config) {
|
||
var areaData = {regions: {}, cities: {}, towns: {}}; // 缓存
|
||
|
||
// 配置处理
|
||
|
||
// 默认中国
|
||
if(config.defaultCountryId == undefined) {
|
||
config.defaultCountryId = G_CONFIG['defaultCountryId'];
|
||
}
|
||
var countryWebId = (!config.countryWebId) ? false : '#' + config.countryWebId;
|
||
var regionWebId = (!config.regionWebId) ? false : '#' + config.regionWebId;
|
||
var cityWebId = (!config.cityWebId) ? false : '#' + config.cityWebId;
|
||
var townWebId = (!config.townWebId) ? false : '#' + config.townWebId;
|
||
|
||
function clearRegion() {
|
||
if(regionWebId && $(regionWebId)) {
|
||
$(regionWebId).combobox('loadData', false);
|
||
$(regionWebId).combobox('clear');
|
||
}
|
||
}
|
||
|
||
function clearCity() {
|
||
if(cityWebId && $(cityWebId)) {
|
||
$(cityWebId).combobox('loadData', false);
|
||
$(cityWebId).combobox('clear');
|
||
}
|
||
}
|
||
|
||
function clearTown() {
|
||
if(townWebId && $(townWebId)) {
|
||
$(townWebId).combobox({data: []});
|
||
$(townWebId).combobox('clear');
|
||
}
|
||
}
|
||
|
||
// 保存缓存
|
||
// 以后地址有用
|
||
// type: countries, regions, cities, towns
|
||
function saveCache(rows, type) {
|
||
if(!rows) {
|
||
return;
|
||
}
|
||
for(var i = 0; i < rows.length; ++i) {
|
||
dk.cache[type][rows[i].typeId] = rows[i].shortDesc;
|
||
}
|
||
}
|
||
|
||
// 国家
|
||
if(countryWebId && $(countryWebId)) {
|
||
$(countryWebId).combobox({
|
||
valueField: 'typeId',
|
||
textField: 'shortDesc',
|
||
required: false,
|
||
url: G_PATH + '/geo/getCountries', // 首先载入国家, 通过url, onLoadSuccess有问题
|
||
onLoadSuccess: function(ret) {
|
||
// $(this).combobox('select', config.defaultCountryId); // 选中中国
|
||
// 选中第一行记录
|
||
if(ret && ret.length > 0) {
|
||
$(this).combobox('select', ret[0].typeId);
|
||
}
|
||
|
||
saveCache(ret, "countries");
|
||
},
|
||
onSelect: function() {
|
||
var countryId = $(this).combobox('getValue');
|
||
|
||
// 载入省
|
||
clearRegion();
|
||
clearCity();
|
||
clearTown();
|
||
if(regionWebId && $(regionWebId)) {
|
||
if(areaData['regions'][countryId]) {
|
||
$(regionWebId).combobox('loadData', areaData['regions'][countryId]);
|
||
} else {
|
||
$.get(G_PATH + '/geo/getRegions', {countryId: countryId}, function(ret) {
|
||
if(ret.length) {
|
||
areaData['regions'][countryId] = ret;
|
||
$(regionWebId).combobox('loadData', ret);
|
||
|
||
saveCache(ret, "regions");
|
||
}
|
||
|
||
// 第一次初始化时选中默认的省. 第一次肯定没有默认的, 所以, 必须要从数据库中, 所以
|
||
// 肯定会执行!
|
||
if(typeof config.defaultRegionId != 'undefined') {
|
||
// alert("region " + ret);
|
||
$(regionWebId).combobox('select', config.defaultRegionId);
|
||
config.defaultRegionId = null;
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
// 选中中国
|
||
// _selectArea(config.countryWebId, config.defaultCountryId);
|
||
|
||
// 省
|
||
if(regionWebId && $(regionWebId)) {
|
||
$(regionWebId).combobox({
|
||
valueField: 'typeId',
|
||
textField: 'shortDesc',
|
||
required: false,
|
||
onSelect: function() {
|
||
var regionId = $(this).combobox('getValue');
|
||
|
||
// 载入市
|
||
clearCity();
|
||
clearTown();
|
||
if(cityWebId && $(cityWebId)) {
|
||
if(areaData['cities'][regionId]) {
|
||
$(cityWebId).combobox('loadData', areaData['cities'][regionId]);
|
||
// 如果市只有一行记录, 则默认选中
|
||
if(areaData['cities'][regionId].length == 1) {
|
||
$(cityWebId).combobox('select', areaData['cities'][regionId][0].typeId);
|
||
}
|
||
} else {
|
||
$.get(G_PATH + '/geo/getCities', {regionId: regionId}, function(ret) {
|
||
if(ret.length) {
|
||
areaData['cities'][regionId] = ret;
|
||
$(cityWebId).combobox('loadData', ret);
|
||
|
||
// 如果市只有一行记录, 则默认选中
|
||
if(ret && typeof ret == "object" && ret.length == 1) {
|
||
$(cityWebId).combobox('select', ret[0].typeId);
|
||
}
|
||
|
||
saveCache(ret, "cities");
|
||
}
|
||
|
||
// 第一次初始化时选中默认的市
|
||
if(typeof config.defaultCityId != 'undefined') {
|
||
$(cityWebId).combobox('select', config.defaultCityId);
|
||
config.defaultCityId = null;
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// 市
|
||
if(cityWebId && $(cityWebId)) {
|
||
$(cityWebId).combobox({
|
||
valueField: 'typeId',
|
||
textField: 'shortDesc',
|
||
required: false,
|
||
onSelect: function() {
|
||
var cityId = $(this).combobox('getValue');
|
||
// 载入县
|
||
clearTown();
|
||
if(townWebId && $(townWebId)) {
|
||
if(areaData['towns'][cityId]) {
|
||
$(townWebId).combobox('loadData', areaData['towns'][cityId]);
|
||
} else {
|
||
$.get(G_PATH + '/geo/getTowns?cityId=' + cityId, {}, function(ret) {
|
||
if(ret.length) {
|
||
areaData['towns'][cityId] = ret;
|
||
$(townWebId).combobox('loadData', ret);
|
||
}
|
||
|
||
// 第一次初始化时选中默认的镇
|
||
if(typeof config.defaultTownId != 'undefined') {
|
||
$(townWebId).combobox('select', config.defaultTownId);
|
||
config.defaultTownId = null;
|
||
}
|
||
|
||
saveCache(ret, "towns");
|
||
})
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// 县
|
||
if(townWebId && $(townWebId)) {
|
||
$(townWebId).combobox({
|
||
valueField: 'typeId',
|
||
textField: 'shortDesc',
|
||
required: false,
|
||
onSelect: function() {
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
// 选择联动
|
||
// config与areaCascade的config一至!// 选择区域
|
||
// 因为ajax的原因, 所以要定时循环判断
|
||
function _selectArea(areaId, value) {
|
||
if(areaId != undefined && $('#' + areaId)) {
|
||
areaObj = $('#' + areaId);
|
||
var loadedData = areaObj.combobox('getData');
|
||
if(loadedData != "") {
|
||
// 判断是否有该值, 若没该值, 则不选择, 不然会显示其它值
|
||
for(var i in loadedData) {
|
||
if(loadedData[i].typeId == value) {
|
||
areaObj.combobox('select', value);
|
||
return;
|
||
}
|
||
}
|
||
// 执行到此, 没有值
|
||
return;
|
||
}
|
||
setTimeout(function() {_selectArea(areaId, value);}, 10);
|
||
}
|
||
}
|
||
function selectArea(config) {
|
||
if(config.defaultCountryId != undefined) {
|
||
_selectArea(config.countryWebId, config.defaultCountryId);
|
||
if(config.defaultRegionId != undefined) {
|
||
_selectArea(config.regionWebId, config.defaultRegionId);
|
||
if(config.defaultCityId != undefined) {
|
||
_selectArea(config.cityWebId, config.defaultCityId);
|
||
if(config.defaultTownId != undefined) {
|
||
_selectArea(config.townWebId, config.defaultTownId);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
function a() {
|
||
<th>国家</th>
|
||
<td><input id="areaCountry" class="easyui-combobox combobox-width80" name="country"></td>
|
||
<th><fmt:message key="geo.region" bundle="${AdminStrings}"/></th>
|
||
<td><input id="areaRegion" class="easyui-combobox combobox-width80" name="region"></td>
|
||
<th><fmt:message key="geo.city" bundle="${AdminStrings}"/></th>
|
||
<td><input id="areaCity" class="easyui-combobox combobox-width80" name="city"></td>
|
||
<th><fmt:message key="geo.town" bundle="${AdminStrings}"/></th>
|
||
<td><input id="areaTown" class="easyui-combobox combobox-width80" name="town"></td>
|
||
}
|
||
*/
|
||
|
||
// 类型获取
|
||
|
||
// type全局变量
|
||
// 缓存
|
||
dk.types = {
|
||
//id: "desc"
|
||
};
|
||
dk.catTypes = {
|
||
//'catName' : {id: "desc"}
|
||
};
|
||
|
||
/**
|
||
* 是否有types
|
||
* @param type
|
||
*/
|
||
function hasTypes(type) {
|
||
if(dk.types[type] != undefined) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 通过type获取类型, type可取 weightUoms
|
||
* @Param type String 类型名
|
||
* @Param callback function 异步获取types的回调方法
|
||
* @return Object
|
||
*/
|
||
function getTypes(type, callback) {
|
||
// 有回调方法,异步加载
|
||
if(typeof callback == "function") {
|
||
if(dk.types[type] != undefined) {
|
||
callback(dk.types[type]);
|
||
return;
|
||
}
|
||
ajaxGet(G_PATH + '/type/getTypes', {type: type}, function(types) {
|
||
setTypes(type, types);
|
||
callback(types);
|
||
}, '', false, true);
|
||
|
||
} else {
|
||
if(dk.types[type] != undefined) return dk.types[type];
|
||
|
||
jQuery.ajax({
|
||
type: 'GET',
|
||
url: G_PATH + '/type/getTypes',
|
||
data: {type: type},
|
||
async: false, // false代表只有在等待ajax执行完毕后才执行
|
||
success: function(ret) {
|
||
thisTypes = ret;
|
||
}
|
||
});
|
||
|
||
setTypes(type, thisTypes);
|
||
|
||
return thisTypes;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 得到type的字段描述
|
||
* @Param type String 类型名
|
||
* @return String
|
||
*/
|
||
function getTypeText(type, key) {
|
||
var types = getTypes(type);
|
||
if(types) return types[key];
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* 为某类设置types
|
||
* @param type
|
||
* @param types
|
||
*/
|
||
function setTypes(type, types) {
|
||
dk.types[type] = types;
|
||
}
|
||
|
||
|
||
/**
|
||
* 得到复杂类型下某分类的types
|
||
* @param cat catName
|
||
* @param catId 所选择的catId
|
||
* @returns
|
||
*/
|
||
function getCatTypes(cat, catId) {
|
||
if(dk.catTypes[cat] != undefined && dk.catTypes[cat][catId] != undefined) {
|
||
return dk.catTypes[cat][catId];
|
||
}
|
||
var thisTypes;
|
||
jQuery.ajax({
|
||
type: 'GET',
|
||
url: G_PATH + '/type/getCatTypes',
|
||
data: {cat: cat, catId: catId},
|
||
async: false, // false代表只有在等待ajax执行完毕后才执行
|
||
success: function(ret) { // {id: "", id: ""}
|
||
thisTypes = ret;
|
||
}
|
||
});
|
||
|
||
// 缓存
|
||
if(dk.catTypes[cat] == undefined) {
|
||
dk.catTypes[cat] = {};
|
||
}
|
||
dk.catTypes[cat][catId] = thisTypes;
|
||
|
||
return thisTypes;
|
||
}
|
||
|
||
/**
|
||
* type的32位字符串是否等于 desc
|
||
* @param type
|
||
* @param key
|
||
* @param desc
|
||
* @returns {Boolean}
|
||
*/
|
||
function typeEqualTo(type, desc, targetDesc) {
|
||
if(!type || !desc || !targetDesc) return false;
|
||
if(!G_TYPES || !G_TYPES[type] || !G_TYPES[type][desc]) return false;
|
||
if(G_TYPES[type][desc] == targetDesc) return true;
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 先得到combobox Text,再判断是否相等
|
||
* @param type
|
||
* @param comboboxId
|
||
* @param desc
|
||
* @returns {Boolean}
|
||
*/
|
||
function comboboxTypeEqualTo(type, comboboxId, targetDesc) {
|
||
if(!type || !comboboxId || !targetDesc) return false;
|
||
var desc = $('#' + comboboxId).combobox('getText');
|
||
|
||
if(!desc || !G_TYPES || !G_TYPES[type] || !G_TYPES[type][desc]) return false;
|
||
if(G_TYPES[type][desc] == targetDesc) return true;
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 得到某type,某key的desc
|
||
* @param type
|
||
* @param key
|
||
* @returns
|
||
*/
|
||
function getTypeDesc(type, desc) {
|
||
if(!type || !desc || !G_TYPES || !G_TYPES[type]) return false;
|
||
return G_TYPES['type'][desc];
|
||
}
|
||
|
||
//----------------
|
||
// get url
|
||
//----------------
|
||
|
||
function getPlatformPath(url) {
|
||
return G_PATH + '/getJsp?jsp=platform/' + url;
|
||
}
|
||
|
||
function getOrgPath(url) {
|
||
return G_PATH + '/getJsp?jsp=org/' + url;
|
||
}
|
||
|
||
function getUserPath(url) {
|
||
return G_PATH + '/getJsp?jsp=user/' + url;
|
||
}
|
||
|
||
function getCommonPath(url) {
|
||
return G_PATH + '/getJsp?jsp=common/' + url;
|
||
}
|
||
|
||
//.. web重构, 加载jsp页面时会自动加载其相应的js(如果有)
|
||
|
||
function getPlatformJspJsPath(url) {
|
||
return G_PATH + '/getJspJs?jsp=platform/' + url;
|
||
}
|
||
|
||
function getOrgJspJsPath(url) {
|
||
return G_PATH + '/getJspJs?jsp=org/' + url;
|
||
}
|
||
|
||
function getUserJspJsPath(url) {
|
||
return G_PATH + '/getJspJs?jsp=user/' + url;
|
||
}
|
||
|
||
function getCommonJspJsPath(url) {
|
||
return G_PATH + '/getJspJs?jsp=common/' + url;
|
||
}
|
||
|
||
/**
|
||
easyui validate
|
||
*/
|
||
$.extend($.fn.validatebox.defaults.rules, {
|
||
CHS: {
|
||
validator: function (value, param) {
|
||
return /^[\u0391-\uFFE5]+$/.test(value);
|
||
},
|
||
message: '请输入汉字'
|
||
},
|
||
ZIP: {
|
||
validator: function (value, param) {
|
||
return /^[1-9]\d{5}$/.test(value);
|
||
},
|
||
message: '邮政编码不存在'
|
||
},
|
||
QQ: {
|
||
validator: function (value, param) {
|
||
return /^[1-9]\d{4,10}$/.test(value);
|
||
},
|
||
message: 'QQ号码不正确'
|
||
},
|
||
mobile: {
|
||
validator: function (value, param) {
|
||
return /^13\d{9}$/g.test(value) || /^14\d{9}$/g.test(value) || (/^15[0-35-9]\d{8}$/g.test(value)) || (/^18[05-9]\d{8}$/g.test(value));
|
||
},
|
||
message: '手机号码不正确'
|
||
},
|
||
mobileOrPhone: {
|
||
validator: function (value, param) {
|
||
return /^([0-9]|\-)*$/.test(value);
|
||
},
|
||
message: '号码不正确'
|
||
},
|
||
loginName: {
|
||
validator: function (value, param) {
|
||
return /^[\u0391-\uFFE5\w]+$/.test(value);
|
||
},
|
||
message: '登录名称只允许汉字、英文字母、数字及下划线。'
|
||
},
|
||
safePassword: {
|
||
validator: function (value, param) {
|
||
if(value.length < 6) {
|
||
return false;
|
||
}
|
||
if(/[a-zA-Z]+/.test(value) && /[0-9]+/.test(value)/* && /\W+\D+/.test(string)*/) {
|
||
return true;
|
||
}
|
||
},
|
||
message: '密码由字母和数字组成,至少6位'
|
||
},
|
||
equalTo: {
|
||
validator: function (value, param) {
|
||
return value == $(param[0]).val();
|
||
},
|
||
message: '两次输入的字符不一至'
|
||
},
|
||
number: {
|
||
validator: function (value, param) {
|
||
return /^\d*\.?\d*$/.test(value);
|
||
},
|
||
message: '请输入数字'
|
||
},
|
||
integer: {
|
||
validator: function (value, param) {
|
||
return /^\d+$/.test(value);
|
||
},
|
||
message: '请输入整数'
|
||
},
|
||
time: {
|
||
validator: function (value, param) {
|
||
if(/^\d+\:\d+$/.test(value)) {
|
||
var a = value.split(":");
|
||
if(a[0] > 23 || a[1] > 59) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
},
|
||
message: '请输入时间'
|
||
},
|
||
email: {
|
||
validator: function (value, param) {
|
||
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
|
||
return myreg.test(value);
|
||
},
|
||
message: '请输入正确邮箱'
|
||
},
|
||
postalCode: {
|
||
validator: function (value, param) {
|
||
if(/^\d+$/.test(value)) {
|
||
if(value.length == 6) return true;
|
||
}
|
||
return false;
|
||
},
|
||
message: '请输入6位数字'
|
||
},
|
||
idcard: {
|
||
validator: function (value, param) {
|
||
return idCard(value);
|
||
},
|
||
message:'请输入正确的身份证号码'
|
||
},
|
||
maxLength: {
|
||
validator: function(value, param){
|
||
return value.length <= param[0];
|
||
},
|
||
message: '最多输入{0}个字符'
|
||
}
|
||
});
|
||
|
||
// var myDate = new Date();
|
||
// var date = myDate.format('yyyy-MM-dd hh:mm:ss');
|
||
Date.prototype.format = function(format)
|
||
{
|
||
var o =
|
||
{
|
||
"M+" : this.getMonth()+1, //month
|
||
"d+" : this.getDate(), //day
|
||
"h+" : this.getHours(), //hour
|
||
"m+" : this.getMinutes(), //minute
|
||
"s+" : this.getSeconds(), //second
|
||
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
|
||
"S" : this.getMilliseconds() //millisecond
|
||
}
|
||
if(/(y+)/.test(format))
|
||
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
|
||
for(var k in o)
|
||
if(new RegExp("("+ k +")").test(format))
|
||
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
|
||
return format;
|
||
}
|
||
|
||
function getCurrentTimestamp() {
|
||
var myDate = new Date();
|
||
return myDate.format('yyyy-MM-dd hh:mm:ss');
|
||
}
|
||
|
||
function getCurrentDate() {
|
||
var myDate = new Date();
|
||
return myDate.format('yyyy-MM-dd');
|
||
}
|
||
|
||
function getTomorrowDate() {
|
||
var myDate = new Date();
|
||
myDate.setDate(myDate.getDate()+1);
|
||
return myDate.format('yyyy-MM-dd');
|
||
}
|
||
|
||
function getEndTimestamp() {
|
||
return "2100-12-31 12:59:59";
|
||
}
|
||
|
||
function getEndDate() {
|
||
return "2100-12-31";
|
||
}
|
||
|
||
/**
|
||
* 是否为空
|
||
* 可判断任意类型,string array
|
||
*/
|
||
function isEmpty(obj) {
|
||
if(!obj) {
|
||
return true;
|
||
}
|
||
|
||
if(isArray(obj)) {
|
||
if(obj.length == 0) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Enter键触发点击事件
|
||
* @param btnId
|
||
*/
|
||
function enterPressSubmit(btnId) {
|
||
var theEvent = window.event || arguments.callee.caller.arguments[0];
|
||
if(theEvent.keyCode == 13||theEvent.keyCode == 108) {
|
||
$('#' + btnId).trigger('click');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Enter键触发点击事件
|
||
* @param btnId
|
||
*/
|
||
function enterPressSearch(func) {
|
||
var theEvent = window.event || arguments.callee.caller.arguments[0];
|
||
if(theEvent.keyCode == 13||theEvent.keyCode == 108) {
|
||
$('#' + btnId).click(func);
|
||
}
|
||
}
|
||
|
||
// 其它 在哪用到了?
|
||
|
||
/**
|
||
* 设置单个或者多个下拉列表的默认值,id和value的个数必须一致,即一一对应
|
||
* @param selectIds Array 下拉列表Id的数组,比如['numId','numId2']
|
||
* @param values Array 要设置的值的数组,比如['numId','numId2']
|
||
*/
|
||
function setSelectValues(selectIds,values){
|
||
if(selectIds.length == 1 && values.length == 1){
|
||
$('#' + selectIds).combobox('select', values);
|
||
|
||
}else if(selectIds.length>1 && values.length>1 && selectIds.length==values.length){
|
||
for(var i=0;i<selectIds.length;i++){
|
||
$('#' + selectIds[i]).combobox('select', values[i]);
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* 验证数字格式是否正确,正确,返回true,反之false
|
||
* @param numberIds Array 输入框Id的数组,比如['numId','numId2']
|
||
*/
|
||
function regIsNums(numberIds){
|
||
if(numberIds.length == 1){
|
||
var s = $("#" + numberIds).val();
|
||
if(!isNum(s)){
|
||
$("#" + numberIds).css("boreder","10px solid red");
|
||
msgAlert('info','numberNotCorrect','info');
|
||
return false;
|
||
}
|
||
}else if(numberIds.length > 1){
|
||
for(var i=0;i<numberIds.length;i++){
|
||
var s = $("#" + numberIds[i]).val();
|
||
if(!isNum(s)){
|
||
msgAlert('info','numberNotCorrect','info');
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function isNum(num) {
|
||
reg = /^\d+$/;
|
||
reg2 = /^\d+.\d+$/;
|
||
return reg.test(num) || reg2.test(num);
|
||
}
|
||
/**
|
||
* 验证输入框是否是否为空,不空,返回true,反之false
|
||
* @param inputIds Array 输入框Id的数组,比如['rateTypeId','rateTypeId2']
|
||
*/
|
||
function checkInputIsNull(inputIds){
|
||
if(inputIds.length == 1){
|
||
var s = $("#" + inputIds).val();
|
||
if(s==null || s==""){
|
||
msgAlert('info','pageNotCorrect','info');
|
||
return false;
|
||
}
|
||
}else if(inputIds.length > 1){
|
||
for(var i=0;i<inputIds.length;i++){
|
||
var s = $("#" + inputIds[i]).val();
|
||
if(s==null || s==""){
|
||
msgAlert('info','pageNotCorrect','info');
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
/**
|
||
* 验证select下拉框是否选中
|
||
* @param selectIds Array 下拉框Id的数组,比如['rateTypeId','rateTypeId2']
|
||
*/
|
||
function checkIsSelected(selectIds){
|
||
if(selectIds.length == 1){
|
||
var s = $("#" + selectIds).combobox('getValue');
|
||
if(s==null || s==""){
|
||
msgAlert('info','pageNotCorrect','info');
|
||
return false;
|
||
}
|
||
}else if(selectIds.length > 1){
|
||
for(var i=0;i<selectIds.length;i++){
|
||
var s = $("#" + selectIds[i]).combobox('getValue');
|
||
if(s==null || s==""){
|
||
msgAlert('info','pageNotCorrect','info');
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// 与具体应用相关
|
||
|
||
/**
|
||
* 查询站点
|
||
* @param inputId 要显示站点名称的input
|
||
* @param valueId 要存储站点ID的input
|
||
*
|
||
* 用户添加/修改, 订单添加/修改
|
||
*/
|
||
function searchLocation(inputId, valueId) {
|
||
areaInputId = inputId;
|
||
areaValueId = valueId;
|
||
var areaName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'locationSearch',
|
||
width: 820,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/commom_window_area_name_search',
|
||
onLoad: function() {
|
||
initGrid('common_locationSearch', 'main', 'areaSearchGrid', {
|
||
fit: true,
|
||
singleSelect: true,
|
||
url: G_PATH + '/site/checkLocation',
|
||
queryParams: {areaName: areaName}
|
||
});
|
||
$("#areaSearchForm #areaName").val(areaName);
|
||
}
|
||
};
|
||
|
||
openWin(config, 'commonSearchLocationWin');
|
||
}
|
||
|
||
|
||
/**
|
||
* 查询设备组
|
||
* @param inputId 要显示设备组的input
|
||
* @param valueId 要存储设备组ID的input
|
||
*
|
||
* 用户添加/修改, 订单添加/修改
|
||
*/
|
||
var equipTeamInputId;
|
||
var equipTeamValueId;
|
||
function searchEquipTeam(inputId, valueId) {
|
||
equipTeamInputId = inputId;
|
||
equipTeamValueId = valueId;
|
||
var equipTeamName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'equipTeamSearch',
|
||
width: 820,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/equip/equip_list_window_search',
|
||
onLoad: function() {
|
||
|
||
$("#equipListSearchForm #equipListName").val(equipTeamName);
|
||
$('#searchEquipListBtn').click();
|
||
}
|
||
};
|
||
|
||
openWin(config, 'equipTeamSearchWin');
|
||
}
|
||
/**
|
||
* 合同线路 查询 出发地 目的地
|
||
*/
|
||
var areaAndLocationInputId;
|
||
var areaAndLocationValueId;
|
||
function searchAreaAndLocation(inputId, valueId) {
|
||
areaAndLocationInputId = inputId;
|
||
areaAndLocationValueId = valueId;
|
||
var areaName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'areaSearch',
|
||
width: 880,
|
||
height: 550,
|
||
href: G_PATH + '/getJsp?jsp=common/area/commom_window_area_search',
|
||
onLoad: function() {
|
||
|
||
}
|
||
};
|
||
|
||
openWin(config, 'areaSearchWin');
|
||
}
|
||
/**
|
||
* 承运商(外部) 组织 查询
|
||
*/
|
||
var carrierOrgInputId;
|
||
var carrierOrgValueId;
|
||
function searchCarrierOrgCommon(inputId, valueId) {
|
||
carrierOrgInputId = inputId;
|
||
carrierOrgValueId = valueId;
|
||
var orgName = $('#' + inputId).val();
|
||
var config = {
|
||
title: 'carrierOrgSearch',
|
||
width: 900,
|
||
height: 487,
|
||
href: G_PATH + '/orgCommon/searchCarrierOrgJsp'
|
||
};
|
||
|
||
openWin(config, 'searchCarrierOrgWin');
|
||
}
|
||
|
||
/**
|
||
* 客户 组织 查询
|
||
*/
|
||
var customerOrgInputId;
|
||
var customerOrgValueId;
|
||
function searchCustomerOrgCommon(inputId, valueId) {
|
||
customerOrgInputId = inputId;
|
||
customerOrgValueId = valueId;
|
||
var orgName = $('#' + inputId).val();
|
||
var config = {
|
||
title: 'customerOrgSearch',
|
||
width: 900,
|
||
height: 487,
|
||
href: G_PATH + '/orgCommon/searchCustomerOrgJsp'
|
||
};
|
||
|
||
openWin(config, 'searchCustomerOrgWin');
|
||
}
|
||
|
||
/**
|
||
* 承运商(内部) 组织 查询
|
||
*/
|
||
var carrierInnerOrgInputId;
|
||
var carrierInnerOrgValueId;
|
||
function searchCarrierInnerOrgCommon(inputId, valueId) {
|
||
carrierInnerOrgInputId = inputId;
|
||
carrierInnerOrgValueId = valueId;
|
||
var config = {
|
||
title: 'carrierOrgSearch',
|
||
width: 900,
|
||
height: 487,
|
||
href: G_PATH + '/orgCommon/searchCarrierInnerOrgJsp'
|
||
};
|
||
|
||
openWin(config, 'searchCarrierInnerOrgWin');
|
||
}
|
||
|
||
/**
|
||
* 组织分组 查询
|
||
*/
|
||
var memberListInputId;
|
||
var memberListValueId;
|
||
function searchMemberListCommon(inputId, valueId) {
|
||
memberListInputId = inputId;
|
||
memberListValueId = valueId;
|
||
var orgName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'searchMemberList',
|
||
width: 900,
|
||
height: 487,
|
||
href:G_PATH + '/getJsp?jsp=common/memberlist/org_layout_center_searchMemberlist'
|
||
};
|
||
|
||
openWin(config, 'searchMemberListWin');
|
||
}
|
||
var orgInputId;
|
||
var orgValueId;
|
||
function searchOrg(inputId, valueId) {
|
||
orgInputId = inputId;
|
||
orgValueId = valueId;
|
||
var orgName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'orgSearch',
|
||
width: 900,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/org/org_window_search',
|
||
onLoad: function() {
|
||
initGrid('orgSearch', 'main', 'orgSearchGrid', {
|
||
fit: true,
|
||
singleSelect: true,
|
||
url: G_PATH + '/orgCommon/searchOrg'
|
||
});
|
||
//$("#areaSearchForm #areaName").val(areaName);
|
||
}
|
||
};
|
||
|
||
openWin(config, 'orgSearchWin');
|
||
}
|
||
|
||
var fcOrgInputId;
|
||
var fcOrgValueId;
|
||
function searchFCOrg(inputId, valueId) {
|
||
fcOrgInputId = inputId;
|
||
fcOrgValueId = valueId;
|
||
var orgName = $('#' + inputId).val();
|
||
|
||
var config = {
|
||
title: 'orgSearch',
|
||
width: 900,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/org/org_window_searchFcOrg',
|
||
onLoad: function() {
|
||
initGrid('orgSearch', 'main', 'orgSearchGrid', {
|
||
fit: true,
|
||
singleSelect: true,
|
||
url: G_PATH + '/orgCommon/searchFCOrg'
|
||
});
|
||
//$("#areaSearchForm #areaName").val(areaName);
|
||
}
|
||
};
|
||
|
||
openWin(config, 'fcOrgSearchWin');
|
||
}
|
||
|
||
/**
|
||
* 通用添加分段费率
|
||
*/
|
||
var selectedShipmentAttribTypeId;
|
||
var selectedUomId;
|
||
var breakTemplateCommonId;
|
||
var breakTemplateCommonName;
|
||
var showBreakTemplate;
|
||
function searchBreakTemplateCommon(shipmentAttribTypeId, uomId,breakTemplateName,breakTemplateId,showFunc) {
|
||
selectedShipmentAttribTypeId = shipmentAttribTypeId;
|
||
selectedUomId = uomId;
|
||
breakTemplateCommonName=breakTemplateName;
|
||
breakTemplateCommonId=breakTemplateId;
|
||
showBreakTemplate=showFunc;
|
||
var config = {
|
||
title: 'createBreakTemplate',
|
||
width: 990,
|
||
height: 555,
|
||
href: G_PATH + '/getJsp?jsp=org/breakTemplate/common_breakTemplate_search',
|
||
onLoad:function(){
|
||
initGrid('contract', 'addBreakTemplate', 'breakCostInfo', {
|
||
fit:true,
|
||
afterLoad: function() {
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
openWin(config, 'searchBreakTemplateCommonWin');
|
||
}
|
||
|
||
var simpleOrgInputId;
|
||
var simpleOrgValueId;
|
||
function searchOriginSimpleOrg(inputId,valueId) {
|
||
simpleOrgInputId = inputId;
|
||
simpleOrgValueId = valueId;
|
||
|
||
var winWidth = getWinWidth(9, 950);
|
||
var config = {
|
||
title: 'orgNews',
|
||
width: winWidth,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/org/user_window_origin_org_simpleInfo_search'
|
||
};
|
||
|
||
|
||
openWin(config, 'originOrgSimpleInfoWin');
|
||
}
|
||
|
||
function searchDestSimpleOrg(inputId,valueId) {
|
||
simpleOrgInputId = inputId;
|
||
simpleOrgValueId = valueId;
|
||
|
||
var winWidth = getWinWidth(9, 850);
|
||
var config = {
|
||
title: 'orgNews',
|
||
width: winWidth,
|
||
height: 450,
|
||
href: G_PATH + '/getJsp?jsp=common/org/user_window_dest_org_simpleInfo_search'
|
||
};
|
||
|
||
|
||
openWin(config, 'destOrgSimpleInfoWin');
|
||
}
|
||
|
||
/**
|
||
* 得到状态描述
|
||
* @param activeFlag
|
||
* @returns
|
||
*/
|
||
function getActiveFlagDesc(activeFlag) {
|
||
return activeFlag ? getText('activeFlagOn') : getText('activeFlagOff');
|
||
}
|
||
|
||
/**
|
||
* 判断浏览器
|
||
*/
|
||
function judgeNav() {
|
||
var nav = {};
|
||
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
|
||
nav.isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera
|
||
nav.isMaxthon = userAgent.indexOf("Maxthon") > -1 ; //判断是否傲游3.0
|
||
nav.isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !nav.isOpera ; //判断是否IE
|
||
nav.isFF = userAgent.indexOf("Firefox") > -1 ; //判断是否Firefox
|
||
nav.isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") < 1 ; //判断是否Safari
|
||
nav.isChrome = userAgent.indexOf("Chrome") > -1 ; //判断是否Chrome
|
||
|
||
return nav;
|
||
}
|
||
|
||
/**
|
||
* 得到rows的ids
|
||
* @param rows
|
||
* @param pk
|
||
* @returns {Array}
|
||
*/
|
||
function getIds(rows, pk) {
|
||
var ids = new Array();
|
||
for( var i = 0; i < rows.length; ++i) {
|
||
ids.push(rows[i][pk]);
|
||
}
|
||
return ids;
|
||
}
|
||
|
||
/**
|
||
* 查看帮助
|
||
* @Depreciated
|
||
*/
|
||
function viewManual(tag) {
|
||
if(!tag) {
|
||
return;
|
||
}
|
||
var config = {
|
||
title : 'viewManual',
|
||
width : 800,
|
||
height : 600,
|
||
href : G_PATH + "/manual/viewManual?tag=" + tag
|
||
};
|
||
|
||
openWin(config, 'viewManual');
|
||
}
|
||
|
||
/**
|
||
* 搜索并刷新grid
|
||
* @param formId
|
||
* @param tableId
|
||
* @param url
|
||
*/
|
||
function searchReloadGrid(formId, tableId, url, extData) {
|
||
if(!tableId) {
|
||
tableId = "mainGrid";
|
||
}
|
||
var data = getFormJsonData(formId);
|
||
|
||
$.extend(data, extData);
|
||
loadGrid(tableId, data, url);
|
||
}
|
||
|
||
|
||
|
||
function clearHiddenId(name,id) {
|
||
var value=$("#"+name).val();
|
||
if(!value){
|
||
log(value);
|
||
$("#"+id).val("");
|
||
}
|
||
}
|
||
|
||
// 重构 -----------------
|
||
|
||
// 是否是数组
|
||
function isArray(obj) {
|
||
return Object.prototype.toString.call(obj) === '[object Array]';
|
||
}
|
||
|
||
/**
|
||
* 得到深层次值
|
||
* @param row
|
||
* @param name a.b.c
|
||
* @returns
|
||
*/
|
||
function getDeepValue(row, name) {
|
||
if(!name) {
|
||
return null;
|
||
}
|
||
var nameArr = name.split('.');
|
||
if(!nameArr || nameArr.length == 0) {
|
||
return null;
|
||
}
|
||
/*
|
||
if(nameArr.length == 1) {
|
||
return row[name];
|
||
}
|
||
return _getDeepValue(row, nameArr);
|
||
*/
|
||
|
||
// 循环版
|
||
var curData = row;
|
||
for(var i = 0; i < nameArr.length; ++i) {
|
||
var key = nameArr[i];
|
||
if(i == nameArr.length - 1) {
|
||
return curData[key];
|
||
}
|
||
if(!curData[key]) {
|
||
return null;
|
||
}
|
||
curData = curData[key];
|
||
}
|
||
}
|
||
|
||
// 深层次解析
|
||
function _getDeepValue(row, fieldArr, index) {
|
||
if(!index) {
|
||
index = 0;
|
||
}
|
||
if(row[fieldArr[index]]) {
|
||
if(index == fieldArr.length - 1) {
|
||
// 到最后了
|
||
return row[fieldArr[index]];
|
||
} else {
|
||
// 递归下一位
|
||
return _getDeepValue(row[fieldArr[index]], fieldArr, index+1);
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/**
|
||
* 设置表单值
|
||
* @param formId
|
||
* @param row
|
||
*/
|
||
function setForm(formId, row) {
|
||
if(!formId || !row) {
|
||
return;
|
||
}
|
||
var parent = "#" + formId + " ";
|
||
// input[type='text']
|
||
$(parent + "input[type='text'] ," + parent + "input[type='hidden']").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name) {
|
||
$(this).val(getDeepValue(row, name));
|
||
}
|
||
});
|
||
// input[type="radio"]
|
||
var hasSetRaioNames = {}; // 已经设置过的 radio name
|
||
$(parent + "input[type='radio']").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name && !hasSetRaioNames[name]) {
|
||
var val = getDeepValue(row, name);
|
||
if(typeof val == "boolean") {
|
||
val = val ? 1 : 0;
|
||
}
|
||
$(parent + " input[name='" + name + "'][value='" + val + "']").attr("checked", "checked");
|
||
hasSetRaioNames[name] = true;
|
||
}
|
||
});
|
||
// input[type="checkbox"]
|
||
$(parent + "input[type='checkbox']").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name) {
|
||
var val = getDeepValue(row, name);
|
||
if(isArray(val)) {
|
||
for(var i = 0; i < val.length; ++i) {
|
||
$(parent + " input[name='" + name + "'][value='" + val[i] + "']").attr("checked", "checked");
|
||
}
|
||
} else {
|
||
$(parent + " input[name='" + name + "'][value='" + val + "']").attr("checked", "checked");
|
||
}
|
||
}
|
||
});
|
||
|
||
// 以下datebox, datetimebox以后会弃用,全部采用my97
|
||
|
||
// datebox
|
||
$(parent + "input.easyui-datebox").each(function() {
|
||
var name = $(this).attr("comboname") || $(this).attr("name");
|
||
if(name) {
|
||
var val = getDeepValue(row, name);
|
||
if(val) {
|
||
val = getDate(val);
|
||
var id = $(this).attr("id");
|
||
$("#" + id).datebox({value: val});
|
||
}
|
||
}
|
||
});
|
||
// datetimebox
|
||
$(parent + "input.easyui-datetimebox").each(function() {
|
||
var name = $(this).attr("comboname") || $(this).attr("name");
|
||
if(name) {
|
||
var val = getDeepValue(row, name);
|
||
if(val) {
|
||
var id = $(this).attr("id");
|
||
$("#" + id).datetimebox({value: val});
|
||
}
|
||
}
|
||
});
|
||
|
||
// my97日期时间控件
|
||
// <dk:date name="a"/>
|
||
$(parent + "input.Wdate").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name) {
|
||
var val = getDeepValue(row, name);
|
||
if(!val) {
|
||
return;
|
||
}
|
||
var viewType = $(this).attr("viewType");
|
||
if(viewType == "date") {
|
||
val = transeToDate(val);
|
||
} else if(viewType == "time") {
|
||
val = transeToTime(val);
|
||
}
|
||
|
||
if(val) {
|
||
$(this).val(val);
|
||
}
|
||
}
|
||
});
|
||
|
||
// textarea
|
||
$(parent + "textarea").each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name) {
|
||
$(this).val(getDeepValue(row, name));
|
||
}
|
||
});
|
||
|
||
// combobox
|
||
$(parent + "select.easyui-combobox").each(function() {
|
||
var name = $(this).attr("comboname") || $(this).attr("name");
|
||
if(name) {
|
||
setCombobox($(this).attr("id"), getDeepValue(row, name), formId);
|
||
}
|
||
});
|
||
|
||
// timespinner
|
||
$(parent + "input.easyui-timespinner").each(function() {
|
||
var name = $(this).attr("comboname") || $(this).attr("name");
|
||
if(name) {
|
||
var val = getDeepValue(row, name);
|
||
if(val) {
|
||
var id = $(this).attr("id");
|
||
$("#" + id).timespinner({value: val});
|
||
}
|
||
}
|
||
});
|
||
|
||
/* // input[type='hidden']
|
||
$(parent + "input[type='hidden'] ") .each(function() {
|
||
var name = $(this).attr("name");
|
||
if(name) {
|
||
$(this).val(getDeepValue(row, name));
|
||
}
|
||
});*/
|
||
}
|
||
|
||
/**
|
||
* 更深层次解析
|
||
* 如果是date,查看属性dbType
|
||
*
|
||
* needValidateForm 需要验证表单
|
||
*/
|
||
function getFormDeepJsonData(formId, needValidateForm) {
|
||
if(needValidateForm) {
|
||
if(!$("#" + formId).valid()){
|
||
return false;
|
||
}
|
||
}
|
||
var data = getFormJsonData(formId);
|
||
if(!data) {
|
||
return null;
|
||
}
|
||
return transToDeepJsonData(data);
|
||
}
|
||
/**
|
||
* 将普通的没有层次的json数据转成有层次的数据
|
||
* data = {'a.b.c': "xx", 'a.b.d': 'kk', 'b.c': 'll'};
|
||
* => data = {a: {b:{c:"xx"}}}
|
||
*/
|
||
function transToDeepJsonData(data) {
|
||
if(!data) {
|
||
return null;
|
||
}
|
||
function extendData(data, keyArr, val, index) {
|
||
if(!index) {
|
||
index = 0;
|
||
}
|
||
var curKey = keyArr[index];
|
||
if(index == keyArr.length - 1) {
|
||
data[curKey] = val;
|
||
return;
|
||
}
|
||
|
||
if(!data[curKey]) {
|
||
data[curKey] = {};
|
||
}
|
||
|
||
extendData(data[curKey], keyArr, val, index + 1);
|
||
}
|
||
|
||
// data = {'a.b.c': "life", 'a.b.d': "xx"}
|
||
var data2 = {};
|
||
for(var key in data) {
|
||
var keyArr = key.split('.');
|
||
if(!keyArr || keyArr.length <= 0) {
|
||
continue;
|
||
}
|
||
if(keyArr.length == 1) {
|
||
data2[key] = data[key];
|
||
}
|
||
|
||
extendData(data2, keyArr, data[key], 0);
|
||
}
|
||
return data2;
|
||
}
|
||
|
||
/**
|
||
* 得到date值, date, datetime
|
||
* 会判断dbType转化
|
||
* @param id
|
||
* @returns
|
||
*/
|
||
function getDateValue(id, parent) {
|
||
var obj;
|
||
if(parent) {
|
||
obj = $("#" + parent + " #" + id);
|
||
} else {
|
||
obj = $("#" + id);
|
||
}
|
||
var val = $(obj).val();
|
||
if(!val) {
|
||
return null;
|
||
}
|
||
var viewType = $(obj).attr("viewType");
|
||
var dbType = $(obj).attr("dbType");
|
||
if(viewType == dbType) {
|
||
return val;
|
||
}
|
||
if(viewType == "date" && dbType == "datetime") {
|
||
return val + " 00:00:00";
|
||
}
|
||
}
|
||
|
||
// 设置日期
|
||
function setDateValue(id, val) {
|
||
if(typeof id != "object") {
|
||
id = $("#" + id);
|
||
}
|
||
var viewType = $(id).attr("viewType");
|
||
if(viewType == "date") {
|
||
val = transeToDate(val);
|
||
} else if(viewType == "time") {
|
||
val = transeToTime(val);
|
||
}
|
||
|
||
if(val) {
|
||
$(id).val(val);
|
||
}
|
||
}
|
||
|
||
// 将2012-12-12 12:12:12分隔出2012-12-12
|
||
function transeToDate(dateTime) {
|
||
var dateTimeArr = dateTime.split(' ');
|
||
if(dateTimeArr && dateTimeArr.length > 0) {
|
||
return dateTimeArr[0];
|
||
}
|
||
return dateTime;
|
||
}
|
||
|
||
// 将2012-12-12 12:12:12分隔出12:12:12
|
||
function transeToTime(dateTime) {
|
||
// 如果是datetime格式的
|
||
var dateTimeArr = dateTime.split(' ');
|
||
if(dateTimeArr && dateTimeArr.length > 1) {
|
||
return dateTimeArr[1];
|
||
}
|
||
|
||
// 如果是12:12:12格式的
|
||
return dateTime;
|
||
}
|
||
|
||
// 设置信息 idDesc没有controller还未测
|
||
// <span id="a.b" class="info" data-options="type:'date', source:'a.b'"/></span>
|
||
// <span id="a.dddb" class="info" data-options="type:'constant', source:'d', typeValue:'snsRoles'"/></span>
|
||
// <span id="c" class="info" data-options="type:'datetime', source:'modelName'"/></span>
|
||
// <span id="d" class="info" data-options="type:'idDesc', typeValue:'org/getOrgNames'"/></span>
|
||
// <span id="resizable" class="info" data-options="type:'boolean', typeValue:'yes,no'"/></span>
|
||
// <span id="f" class="info" data-options="type:'combine', typeValue:'{modelName}-{modelType}-{d}'"/></span>
|
||
// <span id="f" class="info" data-options="type:'address', typeValue:'{country}-{region}-{city}', source:'addressPartyInfo'"/></span>
|
||
function setInfo(parentId, row) {
|
||
if(!parentId) {
|
||
return;
|
||
}
|
||
|
||
// 找到所有的
|
||
$("#" + parentId + " .info").each(function() {
|
||
setValueOrInfo(this, row);
|
||
});
|
||
}
|
||
|
||
// 设置input, span信息
|
||
function setValueOrInfo(idOrgObjOrArr, row) {
|
||
var obj = idOrgObjOrArr;
|
||
if(isArray(obj)) {
|
||
for(var i = 0; i < obj.length; ++i) {
|
||
setValueOrInfo(obj[i], row);
|
||
}
|
||
return;
|
||
} else if(typeof obj == "object") {
|
||
obj = $(obj);
|
||
} else {
|
||
// <span id=""> <input id="" />
|
||
obj = $("#" + obj);
|
||
}
|
||
|
||
if($(obj).is("input") || $(obj).is("textarea")) {
|
||
var setValue = function(value) {
|
||
obj.val(value);
|
||
}
|
||
} else {
|
||
var setValue = function(value) {
|
||
obj.html(value);
|
||
}
|
||
}
|
||
|
||
var id = obj.attr("id");
|
||
|
||
var dataOptions = obj.attr("data-options");
|
||
if(!dataOptions) {
|
||
dataOptions = {};
|
||
} else {
|
||
try {
|
||
dataOptions = eval("({" + dataOptions + "})");
|
||
} catch(e) {
|
||
alert(dataOptions + " 有误!无法解析成Json, 少了单引号?");
|
||
return;
|
||
}
|
||
}
|
||
|
||
// 数据源
|
||
var source = dataOptions['source'] || obj.attr("name") || id;
|
||
if(!source) {
|
||
return;
|
||
}
|
||
|
||
// 组合描述
|
||
function combineDescs(types, ids) {
|
||
if(!types || !ids) {
|
||
return;
|
||
}
|
||
var descs = "";
|
||
for(var i = 0; i < ids.length; ++i) {
|
||
descs += types[ids[i]];
|
||
if(i != ids.length - 1) {
|
||
descs += G_CONFIG['split'];
|
||
}
|
||
}
|
||
return descs;
|
||
}
|
||
|
||
var type = dataOptions.type;
|
||
var typeValue = dataOptions.typeValue;
|
||
|
||
// 只有conbine类型不需要数据源
|
||
var val = getDeepValue(row, source);
|
||
if(val == undefined && type != "combine") {
|
||
return;
|
||
}
|
||
if(!type) {
|
||
setValue(val);
|
||
} else if(type == 'datetime') {
|
||
setValue(val);
|
||
} else if(type == 'date') {
|
||
setValue(transeToDate(val));
|
||
} else if(type == 'time') {
|
||
setValue(transeToTime(val));
|
||
} else if(type == 'boolean') {
|
||
var options = typeValue.split(","); // yes,no
|
||
if(!options || options.length <= 1) {
|
||
return;
|
||
}
|
||
setValue(val ? getText($.trim(options[0])) : getText($.trim(options[1])));
|
||
} else if(type == 'constant') {
|
||
if(!typeValue) {
|
||
return;
|
||
}
|
||
// 常量,需要异步
|
||
// 异步加载
|
||
getTypes(typeValue, function(types) {
|
||
if(isArray(val)) {
|
||
setValue(combineDescs(types, val));
|
||
} else {
|
||
setValue(types[val]);
|
||
}
|
||
});
|
||
} else if(type == 'idDesc') {
|
||
if(!typeValue) {
|
||
return;
|
||
}
|
||
|
||
// id转decs, 需要异步,先把所有的controller收集
|
||
// {controller: "", target: that, ids: []}
|
||
if(dk.cache[typeValue] && dk.cache[typeValue][val]) {
|
||
setValue(dk.cache[typeValue][val]);
|
||
} else {
|
||
ajaxPost(G_PATH + '/' + typeValue, {ids: [val]}, function(ret) {
|
||
// 数据缓存起来
|
||
if(!dk.cache[typeValue]) {
|
||
dk.cache[typeValue] = {}
|
||
}
|
||
$.extend(dk.cache[typeValue], ret);
|
||
setValue(dk.cache[typeValue][val]);
|
||
}, '', false);
|
||
}
|
||
} else if(type == 'combine') {
|
||
if(!typeValue) {
|
||
return;
|
||
}
|
||
|
||
// 组合类型 {a.b}-{c}-{d}
|
||
var fieldArr = typeValue.match(/\{.+?\}/g);
|
||
if(!fieldArr) {
|
||
return;
|
||
}
|
||
|
||
var fieldArr2 = [];
|
||
for(var i = 0; i < fieldArr.length; ++i) {
|
||
if(fieldArr[i].length < 3) { // 至少{a}
|
||
continue;
|
||
}
|
||
fieldArr2.push(fieldArr[i].substr(1, fieldArr[i].length - 2));
|
||
}
|
||
if(fieldArr2.length == 0) {
|
||
return;
|
||
}
|
||
|
||
function contactValue(row, typeValue, fieldArr2) {
|
||
for(var i = 0; i < fieldArr2.length; ++i) {
|
||
var str = getDeepValue(row, fieldArr2[i]);
|
||
if(!str) {
|
||
str = "";
|
||
}
|
||
// 替换
|
||
typeValue = typeValue.replace("{" + fieldArr2[i] + "}", str);
|
||
}
|
||
return typeValue;
|
||
}
|
||
|
||
setValue(contactValue(row, typeValue, fieldArr2));
|
||
|
||
} else if(type = "address") {
|
||
// 地址组合
|
||
if(!typeValue) {
|
||
return;
|
||
}
|
||
var addressInfo = getDeepValue(row, source);
|
||
if(!addressInfo) {
|
||
return;
|
||
}
|
||
var address = "";
|
||
var ajaxData = {};
|
||
var needAjax = false;
|
||
var names = {
|
||
country: '',
|
||
region: '',
|
||
city: '',
|
||
town: ''
|
||
}
|
||
// 收集要发送请求的id
|
||
if(addressInfo.countryId && typeValue.indexOf("country")) {
|
||
if(dk.cache.countries[addressInfo.countryId]) {
|
||
names['country'] = dk.cache.countries[addressInfo.countryId];
|
||
} else {
|
||
ajaxData['countryId'] = addressInfo.countryId;
|
||
needAjax = true;
|
||
}
|
||
}
|
||
if(addressInfo.regionId && typeValue.indexOf("region")) {
|
||
if(dk.cache.regions[addressInfo.regionId]) {
|
||
names['region'] = dk.cache.regions[addressInfo.regionId];
|
||
} else {
|
||
ajaxData['regionId'] = addressInfo.regionId;
|
||
needAjax = true;
|
||
}
|
||
}
|
||
if(addressInfo.cityId && typeValue.indexOf("city")) {
|
||
if(dk.cache.cities[addressInfo.cityId]) {
|
||
names['city'] = dk.cache.cities[addressInfo.cityId];
|
||
} else {
|
||
ajaxData['cityId'] = addressInfo.cityId;
|
||
needAjax = true;
|
||
}
|
||
}
|
||
if(addressInfo.townId && typeValue.indexOf("town")) {
|
||
if(dk.cache.towns[addressInfo.townId]) {
|
||
names['town'] = dk.cache.towns[addressInfo.townId];
|
||
} else {
|
||
ajaxData['townId'] = addressInfo.townId;
|
||
needAjax = true;
|
||
}
|
||
}
|
||
|
||
// ajax取
|
||
if(needAjax) {
|
||
ajaxGet(G_PATH + "/desc/getAddress", ajaxData, function(ret) {
|
||
$.extend(names, ret);
|
||
// 保存到cache中
|
||
if(ajaxData['countryId']) {
|
||
dk.cache.countries[ajaxData['countryId']] = names['country'];
|
||
}
|
||
if(ajaxData['regionId']) {
|
||
dk.cache.regions[ajaxData['regionId']] = names['region'];
|
||
}
|
||
if(ajaxData['cityId']) {
|
||
dk.cache.cities[ajaxData['cityId']] = names['city'];
|
||
}
|
||
if(ajaxData['townId']) {
|
||
dk.cache.towns[ajaxData['townId']] = names['town'];
|
||
}
|
||
renderAddress();
|
||
}, '', false);
|
||
} else {
|
||
renderAddress();
|
||
}
|
||
|
||
function renderAddress() {
|
||
if(typeValue.indexOf("country")) {
|
||
typeValue = typeValue.replace("{country}", names.country || "");
|
||
}
|
||
if(typeValue.indexOf("region")) {
|
||
typeValue = typeValue.replace("{region}", names.region || "");
|
||
}
|
||
if(typeValue.indexOf("city")) {
|
||
typeValue = typeValue.replace("{city}", names.city || "");
|
||
}
|
||
if(typeValue.indexOf("town")) {
|
||
typeValue = typeValue.replace("{town}", names.town || "");
|
||
}
|
||
for(var j = 1; j <= 4; ++j) {
|
||
var street = "street" + j;
|
||
if(typeValue.indexOf(street)) {
|
||
var desc = addressInfo[street] || "";
|
||
typeValue = typeValue.replace("{" + street + "}", desc);
|
||
}
|
||
}
|
||
|
||
setValue(typeValue);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 自动将表单的数据解析成有层次的Json数据提交
|
||
* @param formId
|
||
* @param formDataFunc
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @param hasProgress
|
||
*/
|
||
function formSubmitDeepJson(formId, url, formDataFunc, successFunc, failureFunc, hasProgress) {
|
||
hasProgress = hasProgress == undefined ? true : hasProgress;
|
||
if(hasProgress) {
|
||
showProgress('info', 'processing');
|
||
}
|
||
var formId2 = $('#' + formId);
|
||
initValidator(formId);
|
||
var isValid = valid(formId); // 验证数据, 用jQuery validation
|
||
|
||
if(!isValid) {
|
||
hideProgress();
|
||
// msgAlert("info", "inputError", "info");
|
||
return;
|
||
}
|
||
|
||
// 得到form Json数据
|
||
var formData = getFormDeepJsonData(formId); // 这里这之前是getFormJsonData();
|
||
if(typeof formDataFunc == 'function') {
|
||
formData = formDataFunc(formData);
|
||
}
|
||
|
||
$.ajax({
|
||
url : url,
|
||
type : "POST",
|
||
contentType: "application/json; charset=utf-8",
|
||
datatype: "json",
|
||
data : JSON.stringify(formData),
|
||
success : function(data, stats) {
|
||
_ajaxCallback(data, successFunc, failureFunc);
|
||
if(hasProgress) {
|
||
hideProgress();
|
||
}
|
||
},
|
||
error: function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
if(hasProgress) {
|
||
hideProgress();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 与formSubmit()不同的是验证采用jQuery validation
|
||
* 取的是json数据
|
||
* 显示传递url
|
||
* @param formId
|
||
* @param formDataFunc
|
||
* @param successFunc
|
||
* @param failureFunc
|
||
* @param hasProgress
|
||
*/
|
||
function formSubmit2(formId, url, formDataFunc, successFunc, failureFunc, hasProgress) {
|
||
hasProgress = hasProgress == undefined ? true : hasProgress;
|
||
if(hasProgress) {
|
||
showProgress('info', 'processing');
|
||
}
|
||
var formId2 = $('#' + formId);
|
||
// initValidator(formId);
|
||
var isValid = valid(formId); // 验证数据, 用jQuery validation
|
||
if(!isValid) {
|
||
hideProgress();
|
||
// msgAlert("info", "inputError", "info");
|
||
return;
|
||
}
|
||
|
||
var formData = getFormJsonData(formId);
|
||
if(typeof formDataFunc == 'function') {
|
||
formData = formDataFunc(formData);
|
||
}
|
||
|
||
ajaxPost(url, formData, function(ret) {
|
||
_ajaxCallback(ret, successFunc, failureFunc);
|
||
hideProgress();
|
||
});
|
||
}
|
||
|
||
// jquery validate
|
||
/* 支持:
|
||
required – Makes the element required.
|
||
remote – Requests a resource to check the element for validity.
|
||
minlength – Makes the element require a given minimum length.
|
||
maxlength – Makes the element require a given maxmimum length.
|
||
rangelength – Makes the element require a given value range.
|
||
min – Makes the element require a given minimum.
|
||
max – Makes the element require a given maximum.
|
||
range – Makes the element require a given value range.
|
||
email – Makes the element require a valid email
|
||
url – Makes the element require a valid url
|
||
date – Makes the element require a date.
|
||
dateISO – Makes the element require a ISO date.
|
||
number – Makes the element require a decimal number.
|
||
digits – Makes the element require digits only.
|
||
creditcard – Makes the element require a creditcard number.
|
||
equalTo – Requires the element to be the same as another one
|
||
*/
|
||
if($.validator) {
|
||
$.validator.setDefaults({
|
||
submitHandler: function() { alert("submitted!"); },
|
||
errorPlacement: function(error, element) {
|
||
var parent = element.parent();
|
||
if(parent.is(".each-chk")) { // dk:checkbox,checkbox与 label是一对
|
||
parent = parent.parent();
|
||
} else if(element.is(".combo-value")) {
|
||
parent = parent.parent();
|
||
}
|
||
error.appendTo(parent);
|
||
},
|
||
debug: true,
|
||
ignore: "" // 隐藏表单也要验证
|
||
});
|
||
|
||
$.validator.addMethod("comboboxRequired", function(value, element) {
|
||
var value = $(element).val();
|
||
if(!value) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}, "必选项");
|
||
|
||
$.validator.addMethod("minSelect", function(value, element, param) {
|
||
var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
|
||
return this.optional(element) || length >= param;
|
||
}, $.validator.format("至少选择 {0} 项"));
|
||
|
||
|
||
//Double 数据库小数点后最多三位
|
||
$.validator.addMethod("double", function(value, element, param) {
|
||
|
||
if(value!=null && value!=""){
|
||
var array=value.split(".");
|
||
if(array.length>2){
|
||
return false;
|
||
}else if(array.length==2) {
|
||
if(array[1].length>param){
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}, $.validator.format("小数点后最多 {0} 位"));
|
||
}
|
||
|
||
/**
|
||
* 初始化验证器
|
||
* @param formId
|
||
* @param isId 默认为true
|
||
*/
|
||
function initValidator(formId, isId) {
|
||
if(isId == undefined) {
|
||
isId = true;
|
||
}
|
||
if(isId) {
|
||
$("#" + formId).validate();
|
||
} else {
|
||
$(formId).validate();
|
||
}
|
||
}
|
||
// 验证
|
||
function valid(formId, isId) {
|
||
if(isId == undefined) {
|
||
isId = true;
|
||
}
|
||
if(isId) {
|
||
return $("#" + formId).valid();
|
||
} else {
|
||
return $(formId).valid();
|
||
}
|
||
}
|
||
|
||
// autocomplete
|
||
|
||
/**
|
||
原生用法
|
||
$("#auto").autocomplete(G_PATH + "/tips/searchOrg", {
|
||
minChars: 2,
|
||
width: 230,
|
||
matchContains: false,
|
||
autoFill: false,
|
||
dataType: 'json', // 返回的数据类型为JSON类型
|
||
parse: function(data) { // 解释返回的数据,把其存在数组里
|
||
var rows = data.rows;
|
||
var parsed = [];
|
||
for (var i = 0; i < rows.length; i++) {
|
||
var row = rows[i];
|
||
parsed[i] = {
|
||
data: row, // 数据行
|
||
value: row.orgId, // 存储的结果
|
||
result: row.orgName + "(" + row.account +")" // 显示到表单
|
||
};
|
||
}
|
||
return parsed;
|
||
},
|
||
// 显示到选项列表
|
||
formatItem: function(row, i, max) {
|
||
return row.orgName + "(" + row.account + ")";
|
||
}
|
||
}).result(function(event, row, formatted) {
|
||
// 把结果存在某个地方
|
||
log(row.orgId);
|
||
});
|
||
|
||
// 示例
|
||
initAutocomplete("auto", G_PATH + "/tips/searchOrg", {
|
||
valueKey: "orgId", // 要得到的值的key
|
||
targetInputId: "orgIdHidden", // 存储选中值的inputId <input type="hidden" id="xx" /> 也可以不要,自动给你生成一个
|
||
formatResult: function(row) { // 用户选中一条数据后,显示在表单里
|
||
return row.orgName + "(" + row.account +")";
|
||
},
|
||
formatItem: function(row) { // 列表显示
|
||
return row.orgName + "(" + row.account + ")";
|
||
}
|
||
});
|
||
|
||
或:
|
||
initAutocomplete("auto", G_PATH + "/tips/searchOrg", {
|
||
valueKey: "orgId",
|
||
controller: 'desc/get',
|
||
itemKeys: ["orgName", "account"],
|
||
resultKeys: ["orgName", "account"]
|
||
});
|
||
*/
|
||
dk.autocomplete = {}; // 定义id与targerId映射
|
||
function initAutocomplete(id, url, userConfig) {
|
||
// userConfig['formatResult'] = userConfig['formatResult'] || userConfig['formatItem'];
|
||
// userConfig['formatItem'] = userConfig['formatItem'] || userConfig['formatResult'];
|
||
var config = {
|
||
id: id,
|
||
minChars: 2,
|
||
width: 230,
|
||
matchContains: false,
|
||
autoFill: false,
|
||
dataType: 'json', // 返回的数据类型为JSON类型
|
||
delimiter: ' ', // 分隔符
|
||
itemKeys: [], // 列表显示的字段
|
||
resultKeys: [] // 选中一条数据后,在input里要显示的字段
|
||
};
|
||
|
||
$.extend(config, userConfig);
|
||
|
||
// 是否已定义把值放在的input
|
||
// 没有,则插入一个
|
||
if(!config['targetInputId']) {
|
||
var hiddenInputId = id + "_hidden_input";
|
||
config['targetInputId'] = hiddenInputId;
|
||
var name = $("#" + id).attr('name') || id;
|
||
$("#" + id).attr("name", name + "_raw_input");
|
||
$("#" + id).parent().append('<input type="hidden" name="' + name + '" id="' + hiddenInputId + '"/>');
|
||
}
|
||
|
||
|
||
// 是否需要通过listKeys, resultKeys来建立
|
||
if(typeof config['formatResult'] != "function") {
|
||
if(!isArray(config['resultKeys']) || config['resultKeys'].length == 0) {
|
||
log("config['resultKeys'] 未定义,或formatResult方法未定义");
|
||
return;
|
||
}
|
||
config['formatResult'] = function(row) {
|
||
var str = "";
|
||
for(var i = 0; i < config['resultKeys'].length; ++i) {
|
||
var key = config['resultKeys'][i];
|
||
if(!row[key]) {
|
||
continue;
|
||
}
|
||
str += row[key];
|
||
if(i != config['resultKeys'].length - 1) {
|
||
str += config['delimiter'];
|
||
}
|
||
}
|
||
return str;
|
||
};
|
||
}
|
||
if(typeof config['formatItem'] != "function") {
|
||
if(!isArray(config['itemKeys']) || config['itemKeys'].length == 0) {
|
||
log("config['itemKeys'] 未定义,或formatItem方法未定义");
|
||
return;
|
||
}
|
||
config['formatItem'] = function(row) {
|
||
var str = "";
|
||
for(var i = 0; i < config['itemKeys'].length; ++i) {
|
||
var key = config['itemKeys'][i];
|
||
str += row[key];
|
||
if(i != config['itemKeys'].length - 1) {
|
||
str += config['delimiter'];
|
||
}
|
||
}
|
||
return str;
|
||
};
|
||
}
|
||
|
||
// parse
|
||
var valueKey = config['valueKey'];
|
||
if(!config['parse']) {
|
||
if(!valueKey) {
|
||
return;
|
||
}
|
||
config.parse = function(rows) { // 解释返回的数据,把其存在数组里
|
||
if(!rows || !isArray(rows)) {
|
||
return null;
|
||
}
|
||
var parsed = [];
|
||
for (var i = 0; i < rows.length; i++) {
|
||
var row = rows[i];
|
||
parsed[i] = {
|
||
data: row, // 数据行
|
||
value: row[valueKey], // 存储的结果
|
||
result: config['formatResult'](row)// 显示到表单
|
||
};
|
||
}
|
||
return parsed;
|
||
};
|
||
}
|
||
|
||
// 建立映射,可以得到值
|
||
dk.autocomplete[id] = config;
|
||
|
||
$("#" + id).autocomplete(url, config).result(function(event, row, formatted) {
|
||
$("#" + config.targetInputId).val(row[valueKey]);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 得到autocomplete值
|
||
* @param id autocomplete ID,不是targerInputId
|
||
* @returns
|
||
*/
|
||
function getAutocompleteValue(id) {
|
||
if(!dk.autocomplete[id] || !dk.autocomplete[id]['targetInputId']) {
|
||
return null;
|
||
}
|
||
return $("#" + dk.autocomplete[id]['targetInputId']).val();
|
||
}
|
||
|
||
/**
|
||
* 设置值
|
||
* @param row
|
||
* @returns
|
||
*/
|
||
function setAutocompleteValue(id, row) {
|
||
if(!dk.autocomplete[id] || !dk.autocomplete[id]['targetInputId']) {
|
||
return null;
|
||
}
|
||
|
||
var config = dk.autocomplete[id];
|
||
|
||
if(!config) {
|
||
return;
|
||
}
|
||
|
||
var result = config['formatResult'](row);
|
||
var value = row[config['valueKey']];
|
||
|
||
log(result==undefined);
|
||
if(!result||result==undefined) {
|
||
//log(result);
|
||
// 需要通过controller来取?
|
||
if(config.controller) {
|
||
ajaxGet(G_PATH + "/" + config.controller, {ids: [value]}, function(ret) {
|
||
$("#" + id).val(ret[value]);
|
||
}, "", false);
|
||
}
|
||
}
|
||
|
||
$("#" + id).val(result);
|
||
$("#" + config.targetInputId).val(value);
|
||
|
||
return true;
|
||
}
|
||
|
||
// log 日志
|
||
function log(o) {
|
||
if(window.console) {
|
||
console.log(o);
|
||
}
|
||
}
|
||
|
||
// 刷新单元格
|
||
// rowNum从0开始
|
||
function refreshCell(tableId, field, rowNum, val) {
|
||
var target = $('#' + tableId).parent().children().find('tr[datagrid-row-index="' + rowNum + '"] td[field="' + field + '"] div');
|
||
if(target) {
|
||
target.html(val);
|
||
}
|
||
}
|
||
|
||
//searchFlag 为指定的 结算类型查询controller 方法的 的url
|
||
var commonPaymentItemTypeName;
|
||
var commonPaymentItemTypeId;
|
||
var commonPaymentItemTypeFlag;
|
||
var searchPaymentItemFunc;
|
||
function searchPaymentItemType(paymentItemTypeName,paymentItemTypeId,searchFlag,func){
|
||
commonPaymentItemTypeName=paymentItemTypeName;
|
||
commonPaymentItemTypeId=paymentItemTypeId;
|
||
commonPaymentItemTypeFlag=searchFlag;
|
||
searchPaymentItemFunc=func;
|
||
var config = {
|
||
title: 'searchPaymentItemType',
|
||
width: 900,
|
||
height: 487,
|
||
href:getCommonPath('paymentItemType/common_paymentItemType_search')
|
||
};
|
||
openWin(config, 'searchPaymentItemTypeWin');
|
||
}
|
||
|
||
// theme
|
||
function getThemeTypeId(themeName) {
|
||
// themeName是css文件名, typeId是存数据库中的
|
||
for(var themeTypeId in G_USER['themeTypeId2ThemeName']) {
|
||
if(themeName2ThemeTypeId[themeTypeId] == themeName) {
|
||
return themeTypeId;
|
||
}
|
||
}
|
||
return "";
|
||
}
|
||
// 根据themeTypeId得到themeName
|
||
function getThemeName(themeTypeId) {
|
||
return G_USER['themeTypeId2ThemeName'][themeTypeId];
|
||
} |