UNPKG

5.15 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable row util
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-08-08 13:54:01
5 */
6import {
7 isNumber
8} from 'tinper-sparrow/src/util';
9
10
11const eq = function(a, b) {
12 if ((a === null || a === undefined || a === '') && (b === null || b === undefined || b === '')) return true;
13 //判断输入的值是否相等,a,b是字符串直接比较这两个值即可,没必要判断是否是数据,判断是否是数据使用parseFloat转换有时精度不准(431027199110.078573)
14 //if (isNumber(a) && isNumber(b) && parseFloat(a) == parseFloat(b)) return true;
15 if (a + '' == b + '') return true;
16 return false;
17}
18
19
20// 格式化时间
21const _formatDate = function(value) {
22 if (!value) return value
23 var date = new Date();
24 date.setTime(value);
25 //如果不能转为Date 直接返回原值
26 if (isNaN(date)) {
27 return value
28 }
29 var year = date.getFullYear();
30 var month = date.getMonth() + 1;
31 if (parseInt(month) < 10) month = "0" + month;
32 var day = date.getDate();
33 if (parseInt(day) < 10) day = "0" + day;
34 var hours = date.getHours();
35 if (parseInt(hours) < 10) hours = "0" + hours;
36 var minutes = date.getMinutes();
37 if (parseInt(minutes) < 10) minutes = "0" + minutes;
38 var seconds = date.getSeconds();
39 if (parseInt(seconds) < 10) seconds = "0" + seconds;
40 var mill = date.getMilliseconds();
41 var formatString = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds; //+ "." + mill;
42 return formatString;
43}
44
45// 格式化日期为UTCString
46const _dateToUTCString = function(date) {
47 if (!date && date != 0) return ''
48 if (typeof date === 'number')
49 return date
50 if (date.indexOf("-") > -1)
51 date = date.replace(/\-/g, "/");
52 var utcString = Date.parse(date);
53 if (isNaN(utcString)) return "";
54 return utcString;
55}
56
57// 触发数值改变事件
58const _triggerChange = function(rowObj, fieldName, oldValue, ctx) {
59 _getField(rowObj, fieldName).changed = true
60 if (rowObj.status != Row.STATUS.NEW)
61 rowObj.setStatus(Row.STATUS.UPDATE)
62 if (rowObj.valueChange[fieldName])
63 rowObj.valueChange[fieldName](-rowObj.valueChange[fieldName]())
64 if (rowObj.parent.getCurrentRow() == rowObj && rowObj.parent.valueChange[fieldName]) {
65 rowObj.parent.valueChange[fieldName](-rowObj.parent.valueChange[fieldName]());
66 }
67 if (rowObj.parent.ns) {
68 var fName = rowObj.parent.ns + '.' + fieldName;
69 if (rowObj.parent.root.valueChange[fName])
70 rowObj.parent.root.valueChange[fName](-rowObj.parent.root.valueChange[fName]());
71 }
72
73 var event = {
74 eventType: 'dataTableEvent',
75 dataTable: rowObj.parent.id,
76 rowId: rowObj.rowId,
77 field: fieldName,
78 oldValue: oldValue,
79 newValue: rowObj.getValue(fieldName),
80 ctx: ctx || "",
81 rowObj: rowObj
82 }
83 rowObj.parent.trigger(DataTable.ON_VALUE_CHANGE, event);
84 rowObj.parent.trigger(fieldName + "." + DataTable.ON_VALUE_CHANGE, event);
85 if (rowObj == rowObj.parent.getCurrentRow())
86 rowObj.parent.trigger(fieldName + "." + DataTable.ON_CURRENT_VALUE_CHANGE, event);
87
88 // 对于多级字表需要触发顶层div的valuechange事件
89 if (rowObj.parent.ns) {
90 event.fullField = fName;
91 event.ns = rowObj.parent.ns;
92 rowObj.parent.root.trigger(DataTable.ON_VALUE_CHANGE, event);
93 rowObj.parent.root.trigger(fName + "." + DataTable.ON_VALUE_CHANGE, event);
94 }
95
96};
97
98/***
99 * 格式化数据值
100 * @private
101 * @param {Object} field
102 * @param {Object} value
103 */
104const formatValue = function(field, value) {
105 var type = this.parent.getMeta(field, 'type')
106 if (!type) return value
107 if (type == 'date' || type == 'datetime') {
108 return _formatDate(value)
109 }
110 return value
111}
112
113
114// 查找字段
115const _findField = function(rowObj, fieldName) {
116 var rat = rowObj.data[fieldName];
117 if (!rat) {
118 var fnames = fieldName.split('.'); //多级field
119 if (fnames.length > 1) {
120 var tempField = rowObj.data;
121 for (var i = 0; i < fnames.length; i++) {
122 tempField = tempField[fnames[i]];
123 if (tempField.value instanceof DataTable) {
124 var row = tempField.value.getCurrentRow();
125 if (!row) {
126 row = tempField.value.rows()[0]
127 }
128 if (row)
129 tempField = row.data;
130 }
131 if (!tempField) {
132 break;
133 }
134 }
135 rat = tempField;
136 }
137 }
138 return rat || null;
139
140}
141
142const _getField = function(rowObj, fieldName) {
143 var rat = _findField(rowObj, fieldName);
144 if (!rat) {
145 var msg = 'field:' + fieldName + ' not exist in dataTable:' + rowObj.parent.root.id + '!'
146 throw new Error(msg);
147 }
148 return rat;
149}
150
151
152export const rowUtilFunObj = {
153 formatValue: formatValue,
154 eq: eq,
155 _triggerChange: _triggerChange,
156 _getField: _getField,
157 _dateToUTCString: _dateToUTCString,
158}