/*************************/
|
/* 1. 由main.html引用 */
|
/* 2. 其他界面不引用 */
|
/*************************/
|
|
// 日志
|
function debug(message, obj) {
|
if (config.isDebug) {
|
if (obj) {
|
console.log(message, obj);
|
}
|
else {
|
console.log(message);
|
}
|
}
|
}
|
|
|
/*********** object *************/
|
Object.init = function(config) {
|
if (prototyping) {
|
return;
|
}
|
|
this.config = config;
|
if (config) {
|
var name = null,
|
value;
|
|
for (name in config) {
|
value = config[name];
|
|
if (typeof value === "function" && typeof value.nodeType !== "number") {
|
this[name] = value;
|
}
|
}
|
}
|
};
|
|
Object.subClass = function(properties) {
|
if (!properties) {
|
return;
|
}
|
|
var clazz = properties.init;
|
delete properties.init;
|
|
if (!clazz) {
|
clazz = new Function();
|
}
|
|
prototyping = true;
|
try {
|
var prototype = new this();
|
} finally {
|
prototyping = false;
|
}
|
|
if($) {
|
$.extend(prototype, properties);
|
}
|
|
|
clazz.prototype = prototype;
|
clazz.subClass = arguments.callee;
|
|
return clazz;
|
};
|
|
/********* Server 请求*************/
|
var ServerClass = Object.subClass({
|
|
ajaxRequest: function(url, param, callback, onFail, onSuccess, onError) {
|
var me = this;
|
|
if (!url) {
|
return;
|
}
|
|
if (url.substring(0, 8) == "rootact/") {
|
url = config.url_act + url.substring(8);
|
}
|
else {
|
url = config.url_root + url;
|
}
|
|
if (!param) {
|
param = {}
|
}
|
|
if (Root) {
|
var token = Root.getToken();
|
if (url.indexOf("?") > 0) {
|
url = url + "&" + "token=" + token;
|
}
|
else {
|
url = url + "?" + "token=" + token;
|
}
|
|
if (!param.token) {
|
param.token = token;
|
}
|
}
|
|
var option = {
|
contentType: param.contentType || "text/plain" ,
|
dataType: param.dataType || "json",
|
type: param.type || "post",
|
headers: param.headers || {}
|
}
|
param = util.encode(param);
|
|
|
debug("请求:" + url);
|
debug("参数:" + param);
|
|
try {
|
$.ajax({
|
url: url,
|
contentType: option.contentType,
|
dataType: option.dataType,
|
type: option.type,
|
headers: option.headers,
|
data: param,
|
|
success: function(result) {
|
debug("返回:", result);
|
if (result) {
|
if ("timeout" == result.errorcode) {
|
window.top.location.href = config.page_timeout;
|
}
|
else if (!result.success) {
|
console.log(result);
|
|
if (onFail) {
|
onError(onFail, result);
|
}
|
else if(!result.success && result.message) {
|
Root.message({
|
type: 'error',
|
message: result.message
|
});
|
}
|
else {
|
var error = util.decode(result.errormessage);
|
try {
|
if (console.log) {
|
console.log(error);
|
}
|
} catch (e) {}
|
alert(error);
|
}
|
}
|
else if (result.success){
|
onSuccess(callback, result);
|
}
|
|
}
|
},
|
error: function(d1, error, message) {
|
if (error == "parsererror" && d1.responseText) {
|
var result_ = clone(d1.responseText);
|
console.log(result_);
|
result_ = result_.replace(/[\t\r\n]/g,"");
|
result_ = JSON.parse(result_);
|
|
if (result_.success) {
|
onSuccess(callback, result_);
|
return
|
}
|
}
|
alert(error);
|
try {
|
if (console.log) {
|
console.log(error);
|
}
|
} catch (e) {}
|
}
|
});
|
} catch (e) {}
|
},
|
|
call: function(url, param, callback, onFail) {
|
if (!url) {
|
return;
|
}
|
var me = this;
|
|
var afterRequest = function(doCallback, result) {
|
if (doCallback) {
|
try {
|
result = util.decode(result);
|
} finally {
|
doCallback(result);
|
}
|
}
|
};
|
|
me.ajaxRequest(url, param, callback, onFail, afterRequest, afterRequest);
|
},
|
|
upload: function(url, file, onProgress, onSuccess, onError) {
|
var formdata = new FormData();
|
formdata.append("fileList", file);
|
try {
|
$.ajax({
|
cache: true,
|
type: "POST",
|
url: serverAddress + url,
|
data: formdata,
|
dataType: "json",
|
processData: false,
|
contentType: false,
|
xhr: function() {
|
var xhr = $.ajaxSettings.xhr();
|
if (onProgress && xhr.upload) {
|
xhr.upload.addEventListener("progress", onProgress, false);
|
return xhr;
|
}
|
},
|
error: function(request) {
|
if (onError) {
|
onError();
|
}
|
},
|
success: function(data) {
|
data = util.decode(data);
|
if (onSuccess) {
|
onSuccess(data);
|
}
|
}
|
});
|
} catch (e) {
|
if (onError) {
|
onError();
|
}
|
}
|
}
|
});
|
Server = new ServerClass();
|
|
/********* Dictionary 字典*************/
|
DictionaryClass = Object.subClass({
|
|
init: function() {
|
data: {}
|
},
|
|
getLabel: function(value, dictCode) {
|
var dict = this.data[dictCode];
|
|
if (!dict) {
|
return value;
|
}
|
|
var result = dict.map[value];
|
|
if (!result) {
|
return value;
|
}
|
|
return result.label;
|
},
|
|
getList: function(dictCode) {
|
var dict = this.data[dictCode];
|
|
if (!dict) {
|
return [];
|
}
|
|
return dict.list;
|
},
|
|
getMap: function(dictCode) {
|
var dict = this.data[dictCode];
|
|
if (!dict) {
|
return {};
|
}
|
|
return dict.map;
|
},
|
|
load: function(datalist) {
|
if (!(datalist && datalist.length > 0)) {
|
return;
|
}
|
var dataobj_ = {};
|
var dictionary_list = [
|
{code: "sysdictionary", value: "字典组名"}
|
];
|
var dictionary_map = {code: "sysdictionary", value: "字典组名"};
|
datalist.map(e=>{
|
var dictionary_ = {
|
code: e.code,
|
value: e.name
|
}
|
dictionary_list.push(dictionary_);
|
dictionary_map[e.code] = dictionary_;
|
|
if (e.items.length) {
|
dataobj_[e.code] = e.items;
|
}
|
});
|
|
var data = {};
|
data.sysdictionary = {
|
"list": dictionary_list,
|
"map": dictionary_map
|
}
|
|
for (var prop in dataobj_) {
|
var dict = dataobj_[prop];
|
|
var list = dict,
|
map = {};
|
|
for (var i = 0; i < list.length; i++) {
|
var item = list[i];
|
map[item.code] = item.value;
|
}
|
|
data[prop] = {
|
"list": list,
|
"map": map
|
}
|
}
|
|
this.data = data;
|
}
|
|
});
|
Dictionary = new DictionaryClass();
|
|
|
/********* util 小工具*************/
|
util = {
|
debug: function(message) {
|
if (RootSetting.isDebug) {
|
console.log(message);
|
}
|
},
|
buildURL: function(url) {
|
if (!url) {
|
return null;
|
}
|
|
if (url.startsWith("http")) {
|
return url;
|
}
|
|
if (url.startsWith("/")) {
|
return "/" + RootSetting.appName + url;
|
}
|
|
url = window.top.config.url_page + url
|
|
return url;
|
},
|
|
decode: function(obj) {
|
if (!obj) {
|
return null;
|
}
|
|
if ($.isArray(obj)) {
|
return this.decodeArray(obj);
|
} else if (typeof obj == "object") {
|
return this.decodeObject(obj);
|
} else if (typeof obj == "string") {
|
try {
|
return decodeURIComponent(obj);
|
} catch (e) {
|
return obj;
|
}
|
} else {
|
return obj;
|
}
|
},
|
|
decodeArray: function(data) {
|
for (var i = 0; i < data.length; i++) {
|
if (typeof data[i] == 'string') {
|
data[i] = this.decode(data[i]);
|
} else {
|
data[i] = this.decodeObject(data[i]);
|
}
|
}
|
|
return data;
|
},
|
|
decodeObject: function(data) {
|
for (var prop in data) {
|
if (data[prop]) {
|
data[prop] = this.decode(data[prop]);
|
}
|
}
|
|
return data;
|
},
|
|
encode: function(obj) {
|
if ($.isArray(obj)) {
|
return this.encodeArray(obj);
|
} else if (typeof obj == "object") {
|
return this.encodeObject(obj);
|
} else if (typeof obj == "string") {
|
return "\"" + encodeURI(obj) + "\"";
|
} else if (typeof obj == "boolean") {
|
return String(obj);
|
} else if (typeof obj == "number") {
|
return String(obj);
|
} else if (typeof obj === "function") {
|
return "";
|
}
|
},
|
|
encodeArray: function(o) {
|
var a = ["[", ""],
|
|
len = o.length,
|
i;
|
for (i = 0; i < len; i += 1) {
|
a.push(this.encode(o[i]), ',');
|
}
|
|
a[a.length - 1] = ']';
|
return a.join("");
|
},
|
|
encodeObject: function(o) {
|
if (!o) {
|
return "null";
|
}
|
if (o.length) {
|
return "el";
|
}
|
var a = ["{", ""];
|
|
for (var i in o) {
|
if (i == 'parent') {
|
continue;
|
}
|
a.push(this.encode(i), ":", this.encode(o[i]), ',');
|
}
|
|
a[a.length - 1] = '}';
|
return a.join("");
|
},
|
|
objectToURI: function(object) {
|
if (!object) {
|
return null;
|
}
|
|
if (typeof object == "String") {
|
return encodeURI(object);
|
}
|
|
var param = null;
|
for (var prop in object) {
|
if (object[prop] != null) {
|
if (param) {
|
param = param + "&" + prop + "=" + encodeURI(object[prop]);
|
} else {
|
param = prop + "=" + encodeURI(object[prop]);
|
}
|
}
|
}
|
|
return param;
|
},
|
|
combine: function(obj1, obj2, override) {
|
if (!obj1) {
|
return obj2;
|
}
|
|
if (!obj2) {
|
return obj1;
|
}
|
|
for (var name in obj2) {
|
if (override || obj1[name] === undefined) {
|
obj1[name] = obj2[name];
|
}
|
}
|
|
return obj1;
|
},
|
|
combineObj: function(obj1, obj2, override) {
|
if (!obj1) {
|
return obj2;
|
}
|
|
if (!obj2) {
|
return obj1;
|
}
|
|
for (var name in obj2) {
|
//如果1没有该属性
|
if (override || obj1[name] === undefined) {
|
obj1[name] = obj2[name];
|
}
|
//如果1存在该属性
|
else if (typeof(obj1[name]) == "object") {
|
util.combine(obj1[name], obj2[name]);
|
}
|
}
|
|
return obj1;
|
},
|
|
setVisible: function(el, visible) {
|
if (visible) {
|
el.show();
|
} else {
|
el.hide();
|
}
|
},
|
|
getEl: function(element) {
|
var type = typeof element;
|
|
if (type == "string") {
|
if ("#" != element.substring(0, 1)) {
|
element = "#" + element;
|
}
|
|
var el = $(element);
|
return el;
|
}
|
|
return element;
|
},
|
|
pageTo: function(frame, url) {
|
if (!url) {
|
url = frame;
|
frame = null;
|
}
|
|
if (!url) {
|
return;
|
}
|
|
//1. root
|
var exists = url && url.lastIndexOf("root/");
|
if (exists >= 0) {
|
var current = window.top.location.pathname;
|
var pos = current.indexOf("root/");
|
|
if (pos >= 0) {
|
url = current.substring(0, pos) + url;
|
}
|
}
|
|
//2. random
|
if (url.indexOf("?") > 0) {
|
url = url + "&" + new Date().getTime();
|
} else {
|
url = url + "?" + new Date().getTime();
|
}
|
|
//3. set
|
if (frame) {
|
frame.attr("src", window.top.config.url_page + url);
|
} else {
|
window.top.location.href = url;
|
}
|
},
|
|
//日期格式转换
|
dateFormat: function(date, fmt) {
|
if (typeof date == 'string') {
|
date = new Date(date);
|
}
|
if (null == date || undefined == date) return '';
|
var o = {
|
"M+": date.getMonth() + 1, //月份
|
"d+": date.getDate(), //日
|
"h+": date.getHours(), //小时
|
"m+": date.getMinutes(), //分
|
"s+": date.getSeconds(), //秒
|
"S": date.getMilliseconds() //毫秒
|
};
|
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
|
for (var k in o)
|
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k])
|
.substr(("" + o[k]).length)));
|
return fmt;
|
},
|
//数值转金额格式,可设置小数位数
|
toMoney: function(num, digit) {
|
if (digit == null) {//几位小数
|
digit = 2;
|
}
|
if (num) {
|
if (isNaN(num)) {
|
//alert('金额中含有不能识别的字符');
|
return;
|
}
|
num = typeof num == 'string' ? parseFloat(num) : num // 判断是否是字符串如果是字符串转成数字
|
num = num.toFixed(digit); // 保留两位
|
num = parseFloat(num); // 转成数字
|
num = num.toLocaleString(); // 转成金额显示模式
|
// 判断是否有小数
|
if (num.indexOf('.') === -1) {
|
num = '¥' + num + '.00';
|
} else {
|
// console.log(num.split('.')[1].length)
|
num = num.split('.')[1].length < 2 ? '¥' + num + '0' : '¥' + num;
|
}
|
return num; // 返回的是字符串23,245.12保留2位小数
|
} else {
|
return num = null;
|
}
|
},
|
//数值转率,可设置小数位数
|
toPercent: function(num, digit) {
|
if (digit == null) {//几位小数
|
digit = 2;
|
}
|
|
if (num) {
|
if (isNaN(num)) {
|
//alert('金额中含有不能识别的字符');
|
return;
|
}
|
num = typeof num == 'string' ? parseFloat(num) : num // 判断是否是字符串如果是字符串转成数字
|
num = num.toFixed(digit); // 保留两位
|
num = parseFloat(num); // 转成数字
|
num += "%";
|
return num; // 返回的是字符串23,245.12保留2位小数
|
} else {
|
return num = null;
|
}
|
},
|
//数值保留几位小数
|
toFloat: function(num, digit) {
|
if (digit == null) {//几位小数
|
digit = 2;
|
}
|
|
if (num) {
|
if (isNaN(num)) {
|
//alert('金额中含有不能识别的字符');
|
return;
|
}
|
num = typeof num == 'string' ? parseFloat(num) : num // 判断是否是字符串如果是字符串转成数字
|
num = num.toFixed(digit); // 保留两位
|
num = parseFloat(num); // 转成数字
|
|
return num; // 返回的是字符串23,245.12保留2位小数
|
} else {
|
return num = null;
|
}
|
},
|
|
};
|
|
|
///////////////////formatter//////////////////
|
/////////////////组件中的formatter///////////////////
|
//通用formatterjson转换,根据json对应关系显示,
|
function formatter_json(row, column, cellValue, index, json_) {
|
var json = json_;
|
var val = "";
|
if (typeof(json_)=="string") {
|
json = JSON.parse(json_);
|
}
|
if (json[cellValue]) {
|
return json[cellValue];
|
}
|
else if (cellValue && json.othervaldefaultval) {
|
//没有对应关系但是有值,可设置其它数值的显示值
|
return json.othervaldefaultval;
|
}
|
else if (!cellValue && json.defaultval) {
|
//没有值,可设置默认显示值
|
return json.defaultval;
|
}
|
else {
|
return cellValue
|
}
|
};
|
//日期格式化
|
function formatter_date(row, column, cellValue, index, format) {
|
var format_ = "yyyy-MM-dd";
|
if (format) {
|
format_ = format;
|
}
|
|
if (cellValue) {
|
return util.dateFormat(cellValue, format_);
|
}
|
return cellValue;
|
};
|
//金额格式化
|
function formatter_money(row, column, cellValue, index, digit) {
|
if (cellValue) {
|
return util.toMoney(cellValue, digit);
|
}
|
return cellValue;
|
};
|
//小数格式化
|
function formatter_float(row, column, cellValue, index, digit) {
|
if (cellValue) {
|
return util.toFloat(cellValue, digit);
|
}
|
return cellValue;
|
};
|
//率转换格式化
|
function formatter_percent(row, column, cellValue, index, digit) {
|
if (cellValue) {
|
return util.toPercent(cellValue, digit);
|
}
|
return cellValue;
|
};
|
//有前缀或后缀的格式化
|
function formatter_prefixorunit(row, column, cellValue, index, prefix, unit) {
|
if (cellValue != null) {
|
var cellValue_ = cellValue;
|
if (prefix) {
|
cellValue_ = prefix + (cellValue_);
|
}
|
if (unit) {
|
cellValue_ = (cellValue_) + unit;
|
}
|
return cellValue_;
|
}
|
return cellValue;
|
};
|
|
////////////////非通用的格式化////////////////
|
function formatter_earlyWarning(row, column, cellValue, index) {
|
var d_ = 31;
|
var date_ = Date.parse(new Date());
|
var closedate_ = Date.parse(new Date(row.closedate));
|
var d_ = parseInt((closedate_-date_)/ (1000 * 60 * 60 * 24));
|
return d_;
|
};
|
|
|
/********* root *************/
|
var RootClass = Object.subClass({
|
|
popupParames: {},
|
popupList: [],
|
userInfo: {},
|
tab: null,
|
message: null,
|
|
init: function(config) {
|
Object.call(this, {});
|
this.tab = config.tab;
|
this.userInfo = config.userInfo;
|
},
|
|
setUserInfo: function(userInfo) {
|
this.userInfo = userInfo;
|
},
|
|
showSubTab: function(config) {
|
this.tab.showSubItem(config);
|
},
|
|
hideSubTab: function(config) {
|
this.tab.hideSubItem(config);
|
},
|
|
showPopup: function(config) {
|
config.url = util.buildURL(config.url);
|
this.popupParames = config;
|
var popup = new PopupWindowClass(config);
|
this.popupList.push(popup);
|
|
popup.show();
|
},
|
|
setPopupWH: function(w, h) {
|
if (!this.popupList.length) {
|
return;
|
}
|
|
var popup = this.popupList[this.popupList.length - 1];
|
popup.setSize(w, h);
|
},
|
|
hidePopup: function(closecallback) {
|
if (!this.popupList.length) {
|
return;
|
}
|
var popup = this.popupList.pop();
|
if (closecallback) {
|
closecallback()
|
}
|
popup.hide();
|
},
|
|
init_vue: function() {
|
this.confirm = vue.$confirm;
|
this.message = vue.$message;
|
},
|
|
getToken: function() {
|
return this.userInfo.token;
|
}
|
});
|
Root = null;
|
|
/********* RootParent *************/
|
RootBodyClass = Object.subClass({
|
init: function() {
|
this.controls = [];
|
this.win = $(window);
|
this.document = $(document);
|
this._width = this.win.width();
|
this._height = this.win.height();
|
},
|
|
width: function() {
|
return this._width;
|
},
|
|
height: function() {
|
return this._height;
|
},
|
|
append: function(element) {
|
if (!this.body) {
|
this.body = $('body');
|
var me = this;
|
this.document.click(function() {
|
me.notifyAll();
|
});
|
}
|
|
this.body.append(element);
|
},
|
|
register: function(control) {
|
this.controls.push(control);
|
},
|
|
notifyAll: function() {
|
for (var i = 0; i < this.controls.length; i++) {
|
this.notifyOne(this.controls[i]);
|
}
|
},
|
|
notifyOne: function(control) {
|
if (control && control.onNotify) {
|
control.onNotify.call(control, "rootClick");
|
}
|
}
|
});
|
RootBody = new RootBodyClass();
|