kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
274 lines (238 loc) • 8.56 kB
JavaScript
/**
* Module : Kero webpack entry dataTable index
* Author : huyue(huyueb@yonyou.com)
* Date : 2016-08-09 15:24:46
*/
import { extend } from 'tinper-sparrow/src/extend';
import { copyRowFunObj } from './copyRow';
import { dataFunObj } from './data';
import { enableFunObj } from './enable';
import { getCurrentFunObj } from './getCurrent';
import { getDataFunObj } from './getData';
import { getFocusFunObj } from './getFocus';
import { getMetaFunObj } from './getMeta';
import { getPageFunObj } from './getPage';
import { getParamFunObj } from './getParam';
import { getSelectFunObj } from './getSelect';
import { getSimpleDataFunObj } from './getSimpleData';
import { metaFunObj } from './meta';
import { pageFunObj } from './page';
import { paramFunObj } from './param';
import { refFunObj } from './ref';
import { removeRowFunObj } from './removeRow';
import { rowFunObj } from './row';
import { rowCurrentFunObj } from './rowCurrent';
import { rowDeleteFunObj } from './rowDelete';
import { rowSelectFunObj } from './rowSelect';
import { rowFocusFunObj } from './rowFocus';
import { simpleDataFunObj } from './simpleData';
import { utilFunObj } from './util';
import { eventsFunObj } from './events';
/**
* DataTable
* @namespace
* @description 前端数据模型对象
*/
var DataTable = function DataTable(options) {
babelHelpers.classCallCheck(this, DataTable);
options = options || {};
/**
* DataTable对应的唯一标识
* @type {string}
*/
this.id = options['id'];
/**
* 在设置数据时是否自动创建对应字段,如果为true则不自动创建,如果为false则自动创建缺失的字段
* @type {boolean}
* @default false
*/
this.strict = options['strict'] || false;
/**
* DataTable的所有字段属性信息
* @type {object}
*/
this.meta = DataTable.createMetaItems(options['meta']);
/**
* DataTable的是否支持编辑功能
* @type {boolean}
* @default true
*/
this.enable = options['enable'] || DataTable.DEFAULTS.enable;
/**
* DataTable支持翻页功能时每页显示数据条数
* @type {number}
* @default 20
*/
this.pageSize = ko.observable(options['pageSize'] || DataTable.DEFAULTS.pageSize);
/**
* DataTable支持翻页功能时当前页码
* @type {number}
* @default 0
*/
this.pageIndex = ko.observable(options['pageIndex'] || DataTable.DEFAULTS.pageIndex);
/**
* DataTable支持翻页功能时总页数
* @type {number}
* @default 0
*/
this.totalPages = ko.observable(options['totalPages'] || DataTable.DEFAULTS.totalPages);
// 存储所有行对象
this.totalRow = ko.observable();
/**
* DataTable的是否支持前端缓存,支持前端缓存则前端会存储所有页的数据信息,否则只保存当前页的数据信息。如果使用前端缓存则需要使用框架封装的fire方法来与后台进行交互
* @type {boolean}
* @default false
*/
this.pageCache = options['pageCache'] === undefined ? DataTable.DEFAULTS.pageCache : options['pageCache'];
/**
* DataTable删除数据时是否强制删除,如果设置为true则不再考虑数据的状态,执行删除时则删除此条数据。如果设置为false则需要考虑数据的状态,如果状态为new则删除此条数据否则将状态修改为fdel
* @type {boolean}
* @default false
*/
this.forceDel = options['forceDel'] === undefined ? DataTable.DEFAULTS.forceDel : options['forceDel'];
// 存储所有row对象
this.rows = ko.observableArray([]);
// 存储所有的选中行的index
this.selectedIndices = ko.observableArray([]);
// 原有的当前行,用于判断当前行是否发生变化
this._oldCurrentIndex = -1;
// 当前focus行
this.focusIndex = ko.observable(-1);
// 存储所有页对象
this.cachedPages = [];
// 存储meta改变信息
this.metaChange = {};
// 存储valuecahnge改变信息
this.valueChange = {}; //ko.observable(1);
// 监听当前行改变
this.currentRowChange = ko.observable(1);
// 监听是否可修改属性的改变
this.enableChange = ko.observable(1);
/**
* 使用者自定义的属性合集,框架内部不会针对此属性进行特殊处理,仅用于设置及获取
* @type {object}
*/
this.params = options['params'] || {};
/**
* 使用者自定义的属性,框架内部不会针对此属性进行特殊处理,仅用于设置及获取。
* @type {string}
*/
this.master = options['master'] || '';
// 监听是否全部选中
this.allSelected = ko.observable(false);
/**
* 通过getSimpleData获取数据时,日期字段是否转化为long型,如果为true时不进行转化,为false时转化为long型
* @type {boolean}
* @default false
*/
this.dateNoConvert = options['dateNoConvert'] || false;
// 对于子表通过root字段存储根datatable对象
if (options['root']) {
this.root = options['root'];
} else {
this.root = this;
}
// 记录子表的路径
if (options['ns']) {
this.ns = options['ns'];
} else {
this.ns = '';
}
// 前端分页情况下记录前端新增的数据
this.newCount = 0;
};
var DataTableProto = DataTable.prototype;
Object.assign(DataTableProto, copyRowFunObj);
Object.assign(DataTableProto, dataFunObj);
Object.assign(DataTableProto, enableFunObj);
Object.assign(DataTableProto, getCurrentFunObj);
Object.assign(DataTableProto, getDataFunObj);
Object.assign(DataTableProto, getFocusFunObj);
Object.assign(DataTableProto, getMetaFunObj);
Object.assign(DataTableProto, getPageFunObj);
Object.assign(DataTableProto, getParamFunObj);
Object.assign(DataTableProto, getSelectFunObj);
Object.assign(DataTableProto, getSimpleDataFunObj);
Object.assign(DataTableProto, pageFunObj);
Object.assign(DataTableProto, metaFunObj);
Object.assign(DataTableProto, refFunObj);
Object.assign(DataTableProto, paramFunObj);
Object.assign(DataTableProto, rowFunObj);
Object.assign(DataTableProto, removeRowFunObj);
Object.assign(DataTableProto, rowCurrentFunObj);
Object.assign(DataTableProto, simpleDataFunObj);
Object.assign(DataTableProto, rowFocusFunObj);
Object.assign(DataTableProto, eventsFunObj);
Object.assign(DataTableProto, utilFunObj);
Object.assign(DataTableProto, rowSelectFunObj);
Object.assign(DataTableProto, rowDeleteFunObj);
DataTable.DEFAULTS = {
pageSize: 20,
pageIndex: 0,
totalPages: 0,
pageCache: false,
enable: true,
forceDel: false
};
DataTable.META_DEFAULTS = {
enable: true,
required: false,
descs: {}
//事件类型
};DataTable.ON_ROW_SELECT = 'select';
DataTable.ON_ROW_UNSELECT = 'unSelect';
DataTable.ON_ROW_ALLSELECT = 'allSelect';
DataTable.ON_ROW_ALLUNSELECT = 'allUnselect';
DataTable.ON_VALUE_CHANGE = 'valueChange';
DataTable.ON_BEFORE_VALUE_CHANGE = 'beforeValueChange';
DataTable.ON_CURRENT_VALUE_CHANGE = 'currentValueChange'; //当前行变化
// DataTable.ON_AFTER_VALUE_CHANGE = 'afterValueChange'
// DataTable.ON_ADD_ROW = 'addRow'
DataTable.ON_INSERT = 'insert';
DataTable.ON_UPDATE = 'update';
DataTable.ON_CURRENT_UPDATE = 'currentUpdate';
DataTable.ON_DELETE = 'delete';
DataTable.ON_DELETE_ALL = 'deleteAll';
DataTable.ON_ROW_FOCUS = 'focus';
DataTable.ON_ROW_UNFOCUS = 'unFocus';
DataTable.ON_LOAD = 'load';
DataTable.ON_ENABLE_CHANGE = 'enableChange';
DataTable.ON_META_CHANGE = 'metaChange';
DataTable.ON_ROW_META_CHANGE = 'rowMetaChange';
DataTable.ON_CURRENT_META_CHANGE = 'currentMetaChange';
DataTable.ON_CURRENT_ROW_CHANGE = 'currentRowChange';
DataTable.SUBMIT = {
current: 'current',
focus: 'focus',
all: 'all',
select: 'select',
change: 'change',
empty: 'empty',
allSelect: 'allSelect',
allPages: 'allPages'
/**
* 将默认meta与传入进行的meta对象进行合并
* meta: {
f1: {
enable:false
}
}
newMetas:{
f1:{
enable:false,
required:false,
descs:{
}
}
}
*/
};DataTable.createMetaItems = function (metas) {
var newMetas = {};
for (var key in metas) {
var meta = metas[key];
if (typeof meta == 'string') meta = {};
newMetas[key] = extend({}, DataTable.META_DEFAULTS, meta);
}
return newMetas;
};
export { DataTable };