UNPKG

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