2023-04-28 12:22:26 +08:00

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'
};
}