398 lines
12 KiB
JavaScript
398 lines
12 KiB
JavaScript
/// <reference path="../../js/jquery-3.6.0.min.js" />
|
|
/// <reference path="../../js/utility.js" />
|
|
|
|
$.fn.tab = function (obj) {
|
|
return this.each(function () {
|
|
var _this = $(this);
|
|
_this.data('tabparam', obj);
|
|
|
|
function switchPage(page) {
|
|
_this.children('.tab_page').hide();
|
|
_this.children('#' + page).show();
|
|
}
|
|
|
|
var titles = _this.children('.tab_header').children('.tab_title');
|
|
titles.click(function (e) {
|
|
var n_this = $(this);
|
|
// invoke function
|
|
function next() {
|
|
if (typeof obj.onnext === 'function') {
|
|
obj.onnext();
|
|
}
|
|
titles.removeClass('selected');
|
|
var dfor = n_this.addClass('selected').attr('data-for');
|
|
switchPage(dfor);
|
|
}
|
|
if (typeof obj.onclick === 'function') {
|
|
obj.onclick(n_this, next);
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
var datafor = titles.removeClass('selected').first().addClass('selected').attr('data-for');
|
|
switchPage(datafor);
|
|
});
|
|
};
|
|
|
|
$.fn.selectable = function (param) {
|
|
|
|
param = param || {};
|
|
|
|
function multi_click(e) {
|
|
var target = $(e.target);
|
|
if (!target.is('tr')) {
|
|
target = target.parents('tr').first();
|
|
}
|
|
if (param.multiple) {
|
|
if (!target.length)
|
|
return;
|
|
// ctrl
|
|
if (e.ctrlKey) {
|
|
if (target.hasClass('selected')) {
|
|
target.removeClass('selected');
|
|
} else {
|
|
target.addClass('selected');
|
|
}
|
|
} else if (e.shiftKey) {
|
|
target.addClass('selected');
|
|
var first = $(this).children('tr.selected:first');
|
|
var last = $(this).children('tr.selected:last');
|
|
while (first.attr('uid') != last.attr('uid')) {
|
|
first = first.next();
|
|
if (!first.length)
|
|
break;
|
|
first.addClass('selected');
|
|
}
|
|
} else {
|
|
$(this).children('tr').removeClass('selected');
|
|
target.addClass('selected');
|
|
}
|
|
} else {
|
|
$(this).children('tr').removeClass('selected');
|
|
if (!target.length)
|
|
return;
|
|
target.addClass('selected');
|
|
}
|
|
}
|
|
|
|
function dbl_click(e) {
|
|
if (typeof param.dblclick !== 'function')
|
|
return;
|
|
|
|
var target = $(e.target);
|
|
if (!target.is('tr')) {
|
|
target = target.parents('tr').first();
|
|
}
|
|
param.dblclick.apply(this, [target]);
|
|
}
|
|
|
|
return this.each(function () {
|
|
$(this).click(multi_click).dblclick(dbl_click);
|
|
});
|
|
};
|
|
|
|
$.fn.tree = function (data, selectedValues, options) {
|
|
|
|
options = options || {};
|
|
selectedValues = selectedValues || [];
|
|
|
|
if (!data) {
|
|
return this;
|
|
}
|
|
|
|
function changeExpand() {
|
|
var flag = $(this).hasClass('collapse');
|
|
if (flag) {
|
|
$(this).removeClass('collapse').addClass('expand').parent('li').children('ul').show();
|
|
} else {
|
|
$(this).removeClass('expand').addClass('collapse').parent('li').children('ul').hide();
|
|
}
|
|
}
|
|
|
|
function checkSelected(data) {
|
|
for (var i = 0; i < data.length; i++) {
|
|
var item = data[i];
|
|
if (selectedValues.indexOf(item.ID) >= 0) {
|
|
return true;
|
|
}
|
|
if (item.SubData && item.SubData.length > 0) {
|
|
if (checkSelected(item.SubData)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkChanged() {
|
|
var li = $(this).parents('li:first');
|
|
var checked = $(this).prop('checked');
|
|
|
|
// 如果有子节点
|
|
var ul = li.children('ul');
|
|
var indeter = $(this).prop('indeter');
|
|
$(this).removeProp('indeter');
|
|
if (checked) {
|
|
// check all
|
|
ul.find('input').removeProp('indeter').prop({ 'indeterminate': false, 'checked': true });
|
|
} else {
|
|
if (!indeter && ul.length > 0) {
|
|
$(this).prop({
|
|
'indeterminate': true,
|
|
'indeter': true,
|
|
'checked': true
|
|
});
|
|
} else {
|
|
// uncheck all
|
|
ul.find('input').removeProp('indeter').prop({ 'indeterminate': false, 'checked': false });
|
|
}
|
|
}
|
|
checkUpper.apply(this);
|
|
}
|
|
|
|
function checkUpper() {
|
|
// 向上寻找父节点
|
|
var ul = $(this).parents('ul:first');
|
|
var inp = ul.prev('em').prev('span').children('input');
|
|
if (inp.length > 0) {
|
|
var chks = ul.children('li').children('span').children('input');
|
|
var count = chks.length;
|
|
for (var i = 0; i < chks.length; i++) {
|
|
if (chks[i].indeterminate) {
|
|
count = 0.5;
|
|
break;
|
|
}
|
|
|
|
if (!chks[i].checked) {
|
|
count--;
|
|
}
|
|
}
|
|
if (count == chks.length) {
|
|
// checked all
|
|
inp.removeProp('indeter').prop({ 'indeterminate': false, 'checked': true });
|
|
} else if (count == 0) {
|
|
// unchecked all
|
|
inp.removeProp('indeter').prop({ 'indeterminate': false, 'checked': false });
|
|
} else {
|
|
inp.prop({
|
|
'indeterminate': true,
|
|
'indeter': true,
|
|
'checked': true
|
|
});
|
|
}
|
|
// 遍历
|
|
checkUpper.apply(inp);
|
|
}
|
|
|
|
}
|
|
|
|
function fillChildren(ul, item, selected) {
|
|
var li = $('<li></li>');
|
|
var uid = 'li_' + Math.random().toString().substring(2);
|
|
var chk = $('<input type="checkbox"/>').attr('id', uid).val(item.ID).change(checkChanged);
|
|
if (selected || selectedValues.indexOf(item.ID) >= 0) {
|
|
chk.prop('checked', true);
|
|
selected = true;
|
|
}
|
|
var span = $('<span></span>');
|
|
span.append(chk, $('<label></label>').attr('for', uid).text(item.Description));
|
|
li.append(span);
|
|
ul.append(li);
|
|
// 判断是否有子节点
|
|
if (item.SubData && item.SubData.length > 0) {
|
|
// 判断子节点选中状态
|
|
var ulc;
|
|
if (selected || checkSelected(item.SubData)) {
|
|
li.append($('<em class="icn expand"></em>').click(changeExpand));
|
|
ulc = $('<ul></ul>');
|
|
} else {
|
|
li.append($('<em class="icn collapse"></em>').click(changeExpand));
|
|
ulc = $('<ul></ul>').css('display', 'none');
|
|
}
|
|
var cnt = 0
|
|
for (var i = 0; i < item.SubData.length; i++) {
|
|
if (fillChildren(ulc, item.SubData[i], selected)) {
|
|
cnt++;
|
|
}
|
|
}
|
|
li.append(ulc);
|
|
// 补充父节点的不定状态
|
|
if (!selected && cnt > 0) {
|
|
chk.prop({
|
|
'indeterminate': true,
|
|
'indeter': true,
|
|
'checked': true
|
|
});
|
|
}
|
|
}
|
|
return selected;
|
|
}
|
|
|
|
return this.each(function () {
|
|
for (var i = 0 ; i < data.length; i++) {
|
|
fillChildren($(this), data[i]);
|
|
}
|
|
});
|
|
};
|
|
|
|
var TYPE_USER = 2;
|
|
var TYPE_GROUP = 1;
|
|
|
|
$.fn.appendUserCtl = function (param) {
|
|
param = param || {};
|
|
|
|
function dtquery(method, p, callback) {
|
|
_network.request("Security/DataTablePermission.aspx", -1, method, p, callback, function (e) {
|
|
console.log(e);
|
|
showmaskbg(false);
|
|
showAlert(e.statusText, 'Error');
|
|
});
|
|
}
|
|
|
|
function groupTitleClick(e) {
|
|
if ($(this.lastChild).hasClass('collapse')) {
|
|
$(this.lastChild).removeClass('collapse').addClass('expand');
|
|
$(this).nextAll().show();
|
|
} else {
|
|
$(this.lastChild).removeClass('expand').addClass('collapse');
|
|
$(this).nextAll().hide();
|
|
}
|
|
}
|
|
|
|
var usersul = $('<ul class="ul_menu"></ul>').attr('usertype', TYPE_USER);
|
|
var usertitle = $('<li class="ul_header"></li>').append('<span>Users</span><em class="icn expand"></em>').click(groupTitleClick);
|
|
usersul.append(usertitle);
|
|
dtquery('GetUsers', '', function (data) {
|
|
usertitle.nextAll().remove();
|
|
for (var i = 0; i < data.length; i++) {
|
|
var li = $('<li class="subitem"></li>')
|
|
.attr({
|
|
'id': data[i].IID,
|
|
'title': data[i].ID
|
|
})
|
|
//.text(data[i].DisplayName)
|
|
.append($('<span></span>').text(data[i].DisplayName), $('<i></i>').text('(' + data[i].ID + ')'))
|
|
.data('usertype', data[i].UserType);
|
|
li.click(param.selectUser);
|
|
usersul.append(li);
|
|
}
|
|
|
|
// default to load the first
|
|
usertitle.next().click();
|
|
});
|
|
|
|
var groupsul = $('<ul class="ul_menu"></ul>').attr('usertype', TYPE_GROUP);
|
|
var grouptitle = $('<li class="ul_header"></li>').append('<span>User Groups</span><em class="icn expand"></em>').click(groupTitleClick);
|
|
groupsul.append(grouptitle);
|
|
dtquery('GetUserGroups', '', function (data) {
|
|
grouptitle.nextAll().remove();
|
|
for (var i = 0; i < data.length; i++) {
|
|
var li = $('<li class="subitem"></li>').attr('id', data[i].ID).text(data[i].Name);
|
|
li.click(param.selectUser);
|
|
groupsul.append(li);
|
|
}
|
|
});
|
|
|
|
return this.append(usersul, groupsul);
|
|
};
|
|
$.fn.getUserIdType = function () {
|
|
var li = this.find('li.selected');
|
|
var id = li.attr('id');
|
|
var usertype;
|
|
if (li.parent().attr('usertype') == TYPE_GROUP) {
|
|
usertype = TYPE_GROUP;
|
|
} else {
|
|
usertype = TYPE_USER;
|
|
}
|
|
return {
|
|
'id': id,
|
|
'type': usertype,
|
|
'permission': li.data('usertype')
|
|
};
|
|
};
|
|
|
|
if (typeof Class !== 'function') {
|
|
|
|
// 基类实现 (空实现)
|
|
Class = function () { };
|
|
|
|
/* Simple JavaScript Inheritance
|
|
* By John Resig http://ejohn.org/
|
|
* MIT Licensed.
|
|
*/
|
|
// Inspired by base2 and Prototype
|
|
(function () {
|
|
'use strict';
|
|
|
|
var initializing = false, fnTest = /xyz/.test(function () { xyz; }) ? /\b_super\b/ : /.*/;
|
|
|
|
// 创建一个继承当前调用类的子类
|
|
Class.extend = function ext(prop) {
|
|
var _super = this.prototype;
|
|
|
|
// 实例化,此时不执行构造方法 (x.prototype.constructor)
|
|
initializing = true;
|
|
var prototype = new this();
|
|
initializing = false;
|
|
|
|
// 复制属性到新的prototype中
|
|
for (var name in prop) {
|
|
// 判断属性或重载方法
|
|
prototype[name] = typeof prop[name] == "function" &&
|
|
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
|
|
(function (name, fn) {
|
|
return function () {
|
|
var tmp = this._super;
|
|
|
|
this._super = _super[name];
|
|
var ret = fn.apply(this, arguments);
|
|
this._super = tmp;
|
|
|
|
return ret;
|
|
};
|
|
})(name, prop[name]) :
|
|
prop[name];
|
|
}
|
|
|
|
// 临时构造方法
|
|
function Class() {
|
|
if (!initializing && this.init)
|
|
this.init.apply(this, arguments);
|
|
}
|
|
|
|
Class.prototype = prototype;
|
|
// 修正构造方法的指向
|
|
Class.prototype.constructor = Class;
|
|
// 添加扩展
|
|
Class.extend = ext; // arguments.callee;
|
|
|
|
return Class;
|
|
};
|
|
}());
|
|
}
|
|
if (typeof _chartType === 'undefined') {
|
|
_chartType = {
|
|
Gauge: 'Gauge',
|
|
Grid: 'Grid',
|
|
Grid3D: 'Grid3D',
|
|
List: 'List',
|
|
Line2D: 'Line',
|
|
Line3D: 'Line3D',
|
|
Column2D: 'Column',
|
|
Column3D: 'Column3D',
|
|
Bar2D: 'Bar',
|
|
Bar3D: 'Bar3D',
|
|
ColumnLine: 'ColumnLine',
|
|
Scatter: 'ScatterPlot',
|
|
Pie: 'Pie',
|
|
Doughnut: 'Doughnut',
|
|
Scorecard: 'FreeChart',
|
|
Rss: 'RSS',
|
|
Video: 'Video',
|
|
Stock: 'Stock',
|
|
Alert: 'Alert',
|
|
Favorites: 'Favorites',
|
|
FRPT: 'FRPT'
|
|
};
|
|
}
|