gdoo/public/assets/js/gdoo.js

222 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function($) {
var GdooEvent = function(args) {
var me = this;
me.args = args;
me.trigger = function(fun) {
if (typeof me.args[fun] == 'function') {
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
return me.args[fun].apply(me, args);
}
}
me.exist = function(fun) {
if (typeof me.args[fun] == 'function') {
return true;
}
return false;
}
};
var gdoo = {
formKey(params) {
if (params.form_id) {
var key = params.form_id + '.' + params.id;
var id = params.form_id + '_' + params.id;
var name = params.form_id + '_' + params.name;
} else {
var key = params.id;
var id = params.id;
var name = params.name;
}
return {id: id, key: key, name: name};
},
widgets: {},
forms: {},
dialogs: {},
grids: {},
event: {
events: {},
set: function(tag, fun) {
this.events[tag] = new GdooEvent(fun);
},
get: function(tag) {
return this.events[tag] || new GdooEvent({});
}
}
};
gdoo.grid = function(table) {
var root = this;
this.table = table;
this.grid = new agGridOptions();
this.header = Vue.reactive({
init: false,
name: '',
master_table: '',
access: {},
create_btn: false,
trash_btn: false,
simple_search_form: true,
right_buttons: [],
left_buttons: [],
buttons: [],
tabs: {items:[], active:''},
search_form:{columns:[]},
by_title: '全部',
bys: {items:[]}
});
this.search = {
simple: {el: null, query: {}},
advanced: {el: null, query: {}}
};
this.action = new gridAction();
// 默认不自动计算栏目宽度
this.grid.autoColumnsToFit = false;
// 默认点击行触发
this.grid.onRowDoubleClicked = function (params) {
if (params.node.rowPinned) {
return;
}
if (params.data == undefined) {
return;
}
if (params.data.master_id > 0) {
if (root.action.rowDoubleClick) {
root.action.rowDoubleClick(params.data);
}
}
};
this.div = function(height) {
var gridDiv = document.querySelector("#" + this.table + "-grid");
// 因为panel高度根据页面原素高度不一致这里设置修正值
gridDiv.style.height = this.getPanelHeight(height);
new agGrid.Grid(gridDiv, this.grid);
// 绑定自定义事件
$(gridDiv).on('click', '[data-toggle="event"]', function () {
var data = $(this).data();
if (data.master_id > 0) {
root.action[data.action](data);
}
});
return gridDiv;
}
/**
* 获取panel计算整体窗口高度
*/
this.getPanelHeight = function(v) {
var list = $('.gdoo-list-grid').position();
var position = list.top + v +'px';
return 'calc(100vh - ' + position + ')';
}
this.init = function(res) {
var me = this;
if (me.header.init == false) {
var header = res.header;
me.header.init = true;
me.header.create_btn = header.create_btn;
me.header.trash_btn = header.trash_btn;
me.header.name = header.name;
me.header.table = table;
// 搜索
var search_form = header.search_form;
search_form.simple_search = header.simple_search_form;
me.header.search_form = search_form;
me.search.forms = search_form.forms;
// 操作
me.action.table = table;
me.action.name = header.master_name;
me.action.bill_url = header.bill_uri;
// access
if (header.access) {
me.header.access = header.access;
}
// 按钮
if (header.right_buttons) {
me.header.right_buttons = header.right_buttons;
}
if (header.left_buttons) {
me.header.left_buttons = header.left_buttons;
}
if (header.buttons) {
me.header.center_buttons = header.buttons;
}
// bys
if (header.bys) {
me.header.bys = header.bys;
}
// tabs
if (header.tabs) {
me.header.tabs = header.tabs;
me.header.tabs.active = search_form.params['tab'] ? search_form.params['tab'] : header.tabs.items[0].value;
}
// 设置栏目
me.grid.api.setColumnDefs(header.columns);
me.grid.columnDefs = header.columns;
me.grid.remoteParams = search_form.query;
// 渲染完成显示div
$('#' + table + '-page').show();
setTimeout(function() {
me.searchForm();
}, 1);
}
}
this.searchForm = function() {
var me = this;
me.search.advanced.el = $('#' + me.table + '-search-form-advanced').searchForm({
data: me.search.forms,
advanced: true
});
me.search.simple.el = $('#' + me.table + '-search-form').searchForm({
data: me.search.forms
});
me.search.simple.el.find('#search-submit').on('click', function() {
var query = me.search.simple.el.serializeArray();
var params = {};
me.search.queryType = 'simple';
$.map(query, function(row) {
params[row.name] = row.value;
});
params['page'] = 1;
me.grid.remoteData(params);
return false;
});
}
this.setup = {
header: this.header,
action: this.action,
grid: this.grid
};
gdoo.grids[table] = {
grid: this.grid,
search: this.search
};
}
window.gdoo = gdoo;
})(jQuery);