UNPKG

8.27 kBJavaScriptView Raw
1/**
2 * Module : Kero webpack entry dataTable index
3 * Author : liuyk(liuyuekai@yonyou.com)
4 * Date : 2016-08-09 15:24:46
5 */
6
7import { extend } from 'tinper-sparrow/src/extend';
8
9import { copyRowFunObj } from './copyRow';
10
11import { dataFunObj } from './data';
12
13import { enableFunObj } from './enable';
14
15import { getCurrentFunObj } from './getCurrent';
16
17import { getDataFunObj } from './getData';
18
19import { getFocusFunObj } from './getFocus';
20
21import { getMetaFunObj } from './getMeta';
22
23import { getPageFunObj } from './getPage';
24
25import { getParamFunObj } from './getParam';
26
27import { getSelectFunObj } from './getSelect';
28
29import { getSimpleDataFunObj } from './getSimpleData';
30
31import { metaFunObj } from './meta';
32
33import { pageFunObj } from './page';
34
35import { paramFunObj } from './param';
36
37import { refFunObj } from './ref';
38
39import { removeRowFunObj } from './removeRow';
40
41import { rowFunObj } from './row';
42
43import { rowCurrentFunObj } from './rowCurrent';
44
45import { rowDeleteFunObj } from './rowDelete';
46
47import { rowSelectFunObj } from './rowSelect';
48
49import { rowFocusFunObj } from './rowFocus';
50
51import { simpleDataFunObj } from './simpleData';
52
53import { utilFunObj } from './util';
54
55import { eventsFunObj } from './events';
56
57/**
58 * DataTable
59 * @namespace
60 * @description 前端数据模型对象
61 */
62
63var DataTable = function DataTable(options) {
64 babelHelpers.classCallCheck(this, DataTable);
65
66 options = options || {};
67 /**
68 * DataTable对应的唯一标识
69 * @type {string}
70 */
71 this.id = options['id'];
72 /**
73 * 在设置数据时是否自动创建对应字段,如果为true则不自动创建,如果为false则自动创建缺失的字段
74 * @type {boolean}
75 * @default false
76 */
77 this.strict = options['strict'] || false;
78 /**
79 * DataTable的所有字段属性信息
80 * @type {object}
81 */
82 this.meta = DataTable.createMetaItems(options['meta']);
83 /**
84 * DataTable的是否支持编辑功能
85 * @type {boolean}
86 * @default true
87 */
88 this.enable = options['enable'] || DataTable.DEFAULTS.enable;
89 /**
90 * DataTable支持翻页功能时每页显示数据条数
91 * @type {number}
92 * @default 20
93 */
94 this.pageSize = ko.observable(options['pageSize'] || DataTable.DEFAULTS.pageSize);
95 /**
96 * DataTable支持翻页功能时当前页码
97 * @type {number}
98 * @default 0
99 */
100 this.pageIndex = ko.observable(options['pageIndex'] || DataTable.DEFAULTS.pageIndex);
101 /**
102 * DataTable支持翻页功能时总页数
103 * @type {number}
104 * @default 0
105 */
106 this.totalPages = ko.observable(options['totalPages'] || DataTable.DEFAULTS.totalPages);
107 // 存储所有行对象
108 this.totalRow = ko.observable();
109 /**
110 * DataTable的是否支持前端缓存,支持前端缓存则前端会存储所有页的数据信息,否则只保存当前页的数据信息。如果使用前端缓存则需要使用框架封装的fire方法来与后台进行交互
111 * @type {boolean}
112 * @default false
113 */
114 this.pageCache = options['pageCache'] === undefined ? DataTable.DEFAULTS.pageCache : options['pageCache'];
115 /**
116 * DataTable删除数据时是否强制删除,如果设置为true则不再考虑数据的状态,执行删除时则删除此条数据。如果设置为false则需要考虑数据的状态,如果状态为new则删除此条数据否则将状态修改为fdel
117 * @type {boolean}
118 * @default false
119 */
120 this.forceDel = options['forceDel'] === undefined ? DataTable.DEFAULTS.forceDel : options['forceDel'];
121 // 存储所有row对象
122 this.rows = ko.observableArray([]);
123 // 存储所有的选中行的index
124 this.selectedIndices = ko.observableArray([]);
125 // 原有的当前行,用于判断当前行是否发生变化
126 this._oldCurrentIndex = -1;
127 // 当前focus行
128 this.focusIndex = ko.observable(-1);
129 // 存储所有页对象
130 this.cachedPages = [];
131 // 存储meta改变信息
132 this.metaChange = {};
133 // 存储valuecahnge改变信息
134 this.valueChange = {}; //ko.observable(1);
135 // 监听当前行改变
136 this.currentRowChange = ko.observable(1);
137 // 监听是否可修改属性的改变
138 this.enableChange = ko.observable(1);
139 /**
140 * 使用者自定义的属性合集,框架内部不会针对此属性进行特殊处理,仅用于设置及获取
141 * @type {object}
142 */
143 this.params = options['params'] || {};
144 /**
145 * 使用者自定义的属性,框架内部不会针对此属性进行特殊处理,仅用于设置及获取。
146 * @type {string}
147 */
148 this.master = options['master'] || '';
149 // 监听是否全部选中
150 this.allSelected = ko.observable(false);
151 /**
152 * 通过getSimpleData获取数据时,日期字段是否转化为long型,如果为true时不进行转化,为false时转化为long型
153 * @type {boolean}
154 * @default false
155 */
156 this.dateNoConvert = options['dateNoConvert'] || false;
157 // 对于子表通过root字段存储根datatable对象
158 if (options['root']) {
159 this.root = options['root'];
160 } else {
161 this.root = this;
162 }
163 // 记录子表的路径
164 if (options['ns']) {
165 this.ns = options['ns'];
166 } else {
167 this.ns = '';
168 }
169 // 前端分页情况下记录前端新增的数据
170 this.newCount = 0;
171};
172
173var DataTableProto = DataTable.prototype;
174Object.assign(DataTableProto, copyRowFunObj);
175Object.assign(DataTableProto, dataFunObj);
176Object.assign(DataTableProto, enableFunObj);
177Object.assign(DataTableProto, getCurrentFunObj);
178Object.assign(DataTableProto, getDataFunObj);
179Object.assign(DataTableProto, getFocusFunObj);
180Object.assign(DataTableProto, getMetaFunObj);
181Object.assign(DataTableProto, getPageFunObj);
182Object.assign(DataTableProto, getParamFunObj);
183Object.assign(DataTableProto, getSelectFunObj);
184Object.assign(DataTableProto, getSimpleDataFunObj);
185Object.assign(DataTableProto, pageFunObj);
186Object.assign(DataTableProto, metaFunObj);
187Object.assign(DataTableProto, refFunObj);
188Object.assign(DataTableProto, paramFunObj);
189Object.assign(DataTableProto, rowFunObj);
190Object.assign(DataTableProto, removeRowFunObj);
191Object.assign(DataTableProto, rowCurrentFunObj);
192Object.assign(DataTableProto, simpleDataFunObj);
193Object.assign(DataTableProto, rowFocusFunObj);
194Object.assign(DataTableProto, eventsFunObj);
195Object.assign(DataTableProto, utilFunObj);
196Object.assign(DataTableProto, rowSelectFunObj);
197Object.assign(DataTableProto, rowDeleteFunObj);
198
199DataTable.DEFAULTS = {
200 pageSize: 20,
201 pageIndex: 0,
202 totalPages: 0,
203 pageCache: false,
204 enable: true,
205 forceDel: false
206};
207
208DataTable.META_DEFAULTS = {
209 enable: true,
210 required: false,
211 descs: {}
212
213 //事件类型
214};DataTable.ON_ROW_SELECT = 'select';
215DataTable.ON_ROW_UNSELECT = 'unSelect';
216DataTable.ON_ROW_ALLSELECT = 'allSelect';
217DataTable.ON_ROW_ALLUNSELECT = 'allUnselect';
218DataTable.ON_VALUE_CHANGE = 'valueChange';
219DataTable.ON_BEFORE_VALUE_CHANGE = 'beforeValueChange';
220DataTable.ON_CURRENT_VALUE_CHANGE = 'currentValueChange'; //当前行变化
221// DataTable.ON_AFTER_VALUE_CHANGE = 'afterValueChange'
222// DataTable.ON_ADD_ROW = 'addRow'
223DataTable.ON_INSERT = 'insert';
224DataTable.ON_UPDATE = 'update';
225DataTable.ON_CURRENT_UPDATE = 'currentUpdate';
226DataTable.ON_DELETE = 'delete';
227DataTable.ON_DELETE_ALL = 'deleteAll';
228DataTable.ON_ROW_FOCUS = 'focus';
229DataTable.ON_ROW_UNFOCUS = 'unFocus';
230DataTable.ON_LOAD = 'load';
231DataTable.ON_ENABLE_CHANGE = 'enableChange';
232DataTable.ON_META_CHANGE = 'metaChange';
233DataTable.ON_ROW_META_CHANGE = 'rowMetaChange';
234DataTable.ON_CURRENT_META_CHANGE = 'currentMetaChange';
235DataTable.ON_CURRENT_ROW_CHANGE = 'currentRowChange';
236
237DataTable.SUBMIT = {
238 current: 'current',
239 focus: 'focus',
240 all: 'all',
241 select: 'select',
242 change: 'change',
243 empty: 'empty',
244 allSelect: 'allSelect',
245 allPages: 'allPages'
246};
247
248DataTable.createMetaItems = function (metas) {
249 var newMetas = {};
250 for (var key in metas) {
251 var meta = metas[key];
252 if (typeof meta == 'string') meta = {};
253 newMetas[key] = extend({}, DataTable.META_DEFAULTS, meta);
254 }
255 return newMetas;
256};
257
258export { DataTable };
\No newline at end of file