centaline-data-driven 1.1.54 → 1.1.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.babelrc +12 -12
  2. package/.editorconfig +9 -9
  3. package/.gitattributes +63 -63
  4. package/.postcssrc.js +10 -10
  5. package/Centaline.Front_End.DataDriven.csproj +37 -37
  6. package/Centaline.Front_End.DataDriven.sln +25 -25
  7. package/Properties/launchSettings.json +26 -26
  8. package/README.md +140 -140
  9. package/build/build.js +41 -41
  10. package/build/centaline/centaline.path.js +59 -59
  11. package/build/centaline/webpack.centaline.conf.js +106 -106
  12. package/build/check-versions.js +54 -54
  13. package/build/utils.js +102 -102
  14. package/build/vue-loader.conf.js +22 -22
  15. package/build/webpack.base.conf.js +82 -82
  16. package/build/webpack.dev.conf.js +111 -111
  17. package/build/webpack.prod.conf.js +145 -145
  18. package/config/dev.env.js +12 -12
  19. package/config/index.js +73 -73
  20. package/config/prod.env.js +4 -4
  21. package/index.html +14 -14
  22. package/package.json +75 -75
  23. package/src/App.vue +10 -10
  24. package/src/Detail.vue +26 -26
  25. package/src/Edit.vue +32 -32
  26. package/src/Form.vue +29 -29
  27. package/src/SearchList.vue +40 -40
  28. package/src/SearchTree.vue +51 -51
  29. package/src/Tabs.vue +19 -19
  30. package/src/centaline/api/index.js +249 -249
  31. package/src/centaline/comfirm/index.js +11 -11
  32. package/src/centaline/comfirm/src/comfirm.vue +44 -44
  33. package/src/centaline/common/index.js +738 -738
  34. package/src/centaline/css/common.css +748 -748
  35. package/src/centaline/css/max.css +207 -207
  36. package/src/centaline/dialogList/index.js +11 -11
  37. package/src/centaline/dialogList/src/dialog.vue +210 -210
  38. package/src/centaline/dialogList/src/dialogList.vue +65 -65
  39. package/src/centaline/dialogList/src/dialogNew.vue +78 -78
  40. package/src/centaline/dialogList/src/drag.js +77 -77
  41. package/src/centaline/directives/index.js +23 -23
  42. package/src/centaline/dynamicBtn/index.js +11 -11
  43. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +100 -100
  44. package/src/centaline/dynamicCb/index.js +11 -11
  45. package/src/centaline/dynamicCb/src/dynamicCb.vue +72 -72
  46. package/src/centaline/dynamicCheckbox/index.js +11 -11
  47. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +128 -128
  48. package/src/centaline/dynamicComboBoxWithTextBox/index.js +11 -11
  49. package/src/centaline/dynamicComboBoxWithTextBox/src/dynamicComboBoxWithTextBox.vue +240 -240
  50. package/src/centaline/dynamicD/index.js +11 -11
  51. package/src/centaline/dynamicD/src/dynamicD.vue +92 -92
  52. package/src/centaline/dynamicDetail/index.js +10 -10
  53. package/src/centaline/dynamicDetail/src/dynamicDetail.vue +40 -40
  54. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1280 -1280
  55. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1293 -1293
  56. package/src/centaline/dynamicDrop/index.js +11 -11
  57. package/src/centaline/dynamicDrop/src/dynamicDrop.vue +54 -54
  58. package/src/centaline/dynamicDtd/index.js +11 -11
  59. package/src/centaline/dynamicDtd/src/dynamicDtd.vue +125 -125
  60. package/src/centaline/dynamicDtd/src/dynamicDtdOld.vue +93 -93
  61. package/src/centaline/dynamicFile/index.js +11 -11
  62. package/src/centaline/dynamicFile/src/dynamicFile.vue +288 -283
  63. package/src/centaline/dynamicForm/index.js +24 -24
  64. package/src/centaline/dynamicForm/src/dynamicForm.vue +564 -564
  65. package/src/centaline/dynamicForm/src/dynamicFormList.vue +209 -209
  66. package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +376 -376
  67. package/src/centaline/dynamicGp/index.js +11 -11
  68. package/src/centaline/dynamicGp/src/dynamicGp.vue +27 -27
  69. package/src/centaline/dynamicHyperLink/index.js +11 -11
  70. package/src/centaline/dynamicHyperLink/src/dynamicHyperLink.vue +54 -54
  71. package/src/centaline/dynamicInput/index.js +35 -35
  72. package/src/centaline/dynamicInput/src/dynamicInput.vue +35 -35
  73. package/src/centaline/dynamicInputNumber/index.js +11 -11
  74. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +157 -157
  75. package/src/centaline/dynamicIti/index.js +11 -11
  76. package/src/centaline/dynamicIti/src/dynamicIti.vue +148 -148
  77. package/src/centaline/dynamicL/index.js +11 -11
  78. package/src/centaline/dynamicL/src/dynamicL.vue +37 -37
  79. package/src/centaline/dynamicLabel/index.js +11 -11
  80. package/src/centaline/dynamicLabel/src/dynamicLabel.vue +73 -73
  81. package/src/centaline/dynamicLs/index.js +22 -22
  82. package/src/centaline/dynamicLs/src/dynamicLs.vue +233 -233
  83. package/src/centaline/dynamicMo/index.js +13 -13
  84. package/src/centaline/dynamicMo/src/dynamicMo.vue +421 -421
  85. package/src/centaline/dynamicMt/index.js +11 -11
  86. package/src/centaline/dynamicMt/src/dynamicMt.vue +44 -44
  87. package/src/centaline/dynamicPlaceHolder/index.js +11 -11
  88. package/src/centaline/dynamicPlaceHolder/src/dynamicPlaceHolder.vue +29 -29
  89. package/src/centaline/dynamicPopupSearchList/index.js +11 -11
  90. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchList.vue +157 -157
  91. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchListTable.vue +239 -239
  92. package/src/centaline/dynamicRichText/index.js +11 -11
  93. package/src/centaline/dynamicRichText/src/dynamicRichText.vue +33 -33
  94. package/src/centaline/dynamicSearchList/index.js +11 -11
  95. package/src/centaline/dynamicSearchList/src/dynamicSearchCategory.vue +121 -121
  96. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +135 -135
  97. package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +206 -206
  98. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1069 -1069
  99. package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +41 -41
  100. package/src/centaline/dynamicSearchList/src/dynamicTableTip.vue +46 -46
  101. package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +61 -61
  102. package/src/centaline/dynamicSeg/index.js +11 -11
  103. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +100 -100
  104. package/src/centaline/dynamicSensitiveEye/index.js +11 -11
  105. package/src/centaline/dynamicSensitiveEye/src/dynamicSensitiveEye.vue +74 -74
  106. package/src/centaline/dynamicSo/index.js +14 -14
  107. package/src/centaline/dynamicSo/src/dynamicSo.vue +328 -328
  108. package/src/centaline/dynamicSo/src/dynamicSo/345/211/257/346/234/254.vue +69 -69
  109. package/src/centaline/dynamicSos/index.js +14 -14
  110. package/src/centaline/dynamicSos/src/dynamicSos - /345/244/215/345/210/266.vue" +223 -223
  111. package/src/centaline/dynamicSos/src/dynamicSos.vue +260 -260
  112. package/src/centaline/dynamicSw/index.js +11 -11
  113. package/src/centaline/dynamicSw/src/dynamicSw.vue +74 -74
  114. package/src/centaline/dynamicT/index.js +11 -11
  115. package/src/centaline/dynamicT/src/dynamicT.vue +79 -79
  116. package/src/centaline/dynamicTab/index.js +11 -11
  117. package/src/centaline/dynamicTab/src/dynamicTab.vue +49 -49
  118. package/src/centaline/dynamicTabs/index.js +11 -11
  119. package/src/centaline/dynamicTabs/src/dynamicTabs.vue +69 -69
  120. package/src/centaline/dynamicTags/index.js +13 -13
  121. package/src/centaline/dynamicTags/src/dynamicTags - /345/244/215/345/210/266.vue" +391 -391
  122. package/src/centaline/dynamicTags/src/dynamicTags.vue +427 -427
  123. package/src/centaline/dynamicTimeSelect/index.js +11 -11
  124. package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +141 -141
  125. package/src/centaline/dynamicTree/index.js +11 -11
  126. package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -66
  127. package/src/centaline/dynamicTree/src/dynamicTree.vue +233 -233
  128. package/src/centaline/dynamicTree/src/dynamicTreeList.vue +74 -74
  129. package/src/centaline/formData/index.js +290 -290
  130. package/src/centaline/imgPreview/index.js +42 -42
  131. package/src/centaline/imgPreview/src/imgPreview.vue +26 -26
  132. package/src/centaline/index.js +51 -51
  133. package/src/centaline/loader/index.js +157 -157
  134. package/src/centaline/loader/src/ctl/Base.js +261 -261
  135. package/src/centaline/loader/src/ctl/Button.js +44 -44
  136. package/src/centaline/loader/src/ctl/Cb.js +27 -27
  137. package/src/centaline/loader/src/ctl/Checkbox.js +107 -107
  138. package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +162 -162
  139. package/src/centaline/loader/src/ctl/D.js +31 -31
  140. package/src/centaline/loader/src/ctl/Detail.js +175 -175
  141. package/src/centaline/loader/src/ctl/Dtd.js +115 -115
  142. package/src/centaline/loader/src/ctl/DtdOld.js +129 -129
  143. package/src/centaline/loader/src/ctl/File.js +292 -292
  144. package/src/centaline/loader/src/ctl/Form.js +380 -380
  145. package/src/centaline/loader/src/ctl/FormList.js +428 -428
  146. package/src/centaline/loader/src/ctl/GM.js +20 -20
  147. package/src/centaline/loader/src/ctl/Gp.js +9 -9
  148. package/src/centaline/loader/src/ctl/Hd.js +13 -13
  149. package/src/centaline/loader/src/ctl/HyperLink.js +24 -24
  150. package/src/centaline/loader/src/ctl/InputNumber.js +51 -51
  151. package/src/centaline/loader/src/ctl/Iti.js +108 -108
  152. package/src/centaline/loader/src/ctl/L.js +18 -18
  153. package/src/centaline/loader/src/ctl/Mo.js +183 -183
  154. package/src/centaline/loader/src/ctl/Mt.js +20 -20
  155. package/src/centaline/loader/src/ctl/PlaceHolder.js +17 -17
  156. package/src/centaline/loader/src/ctl/Router.js +273 -273
  157. package/src/centaline/loader/src/ctl/SearchCategory.js +54 -54
  158. package/src/centaline/loader/src/ctl/SearchScreen.js +236 -236
  159. package/src/centaline/loader/src/ctl/SearchTable.js +772 -772
  160. package/src/centaline/loader/src/ctl/Seg.js +37 -37
  161. package/src/centaline/loader/src/ctl/SensitiveEye.js +65 -65
  162. package/src/centaline/loader/src/ctl/So.js +117 -117
  163. package/src/centaline/loader/src/ctl/Sos.js +128 -128
  164. package/src/centaline/loader/src/ctl/Sw.js +27 -27
  165. package/src/centaline/loader/src/ctl/T.js +65 -65
  166. package/src/centaline/loader/src/ctl/Tabs.js +57 -57
  167. package/src/centaline/loader/src/ctl/Tags.js +191 -191
  168. package/src/centaline/loader/src/ctl/TimeSelect.js +87 -87
  169. package/src/centaline/loader/src/ctl/Tree.js +151 -151
  170. package/src/centaline/loader/src/ctl/Ttts.js +78 -78
  171. package/src/centaline/loader/src/ctl/lib/Enum.js +563 -563
  172. package/src/centaline/loader/src/ctl/lib/LibFunction.js +364 -364
  173. package/src/centaline/loader/src/ctl.js +36 -36
  174. package/src/centaline/mixins/dynamicElement.js +151 -151
  175. package/src/centaline/mixins/dynamicSelect.js +84 -84
  176. package/src/centaline/mixins/emitter.js +33 -33
  177. package/src/centaline/progress/index.js +11 -11
  178. package/src/centaline/progress/src/progress.vue +70 -70
  179. package/src/centaline/quickInput/src/quickInput.vue +64 -64
  180. package/src/centaline/selectOption/src/selectOption.vue +61 -61
  181. package/src/centaline/selectOption/src/selectOptionVertical.vue +80 -80
  182. package/src/centaline/templateControls/index.js +17 -17
  183. package/src/centaline/templateControls/src/dynamicTableA.vue +20 -20
  184. package/src/centaline/templateControls/src/dynamicTableCurrency.vue +62 -62
  185. package/src/centaline/templateControls/src/dynamicTableImg.vue +25 -25
  186. package/src/centaline/templates/index.js +34 -34
  187. package/src/centaline/templates/src/ContractSearch.js +67 -67
  188. package/src/centaline/templates/src/test.js +44 -44
  189. package/src/centaline/validate/index.js +332 -332
  190. package/src/main.js +46 -46
  191. package/src/router/index.js +44 -44
  192. package/wwwroot/static/centaline/centaline-data-driven.js +1 -1
  193. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -1,738 +1,738 @@
1
- import Vue from 'vue';
2
- const common = {
3
- install(Vue) {
4
- Vue.prototype.$common = common;
5
- if (typeof window !== 'undefined') {
6
- window.$common = common;
7
- }
8
- },
9
- /**
10
- * @method
11
- * @param {String} flag 按钮类别标识
12
- * @returns {String} 对应Element按钮的Type
13
- * @desc 根据按钮标识获取按钮类别
14
- */
15
- getBtnType(flag) {
16
- switch (flag) {
17
- case 'e':
18
- case 's':
19
- return 'primary';
20
- case 'a':
21
- return 'success';
22
- case 'i':
23
- return 'info';
24
- case 'w':
25
- return 'warning';
26
- case 'd':
27
- return 'danger';
28
- default:
29
- return '';
30
- }
31
- },
32
-
33
- /**
34
- * @method
35
- * @param {String} className 包含的类名
36
- * @param {string} type 匹配的元素类别
37
- * @param {Boolean} [isFirst] 是否只返回第一个元素
38
- * @description 获取包含指定class名的元素
39
- * @returns {Array | Element} 返回匹配元素数组或匹配元素
40
- */
41
- getElementByClassName(className, type, isFirst) {
42
- var rtn = [];
43
- var elements = [];
44
- if (type) {
45
- elements = document.getElementsByTagName(type);
46
- }
47
- else {
48
- elements = document.getElementsByTagName('*');
49
- }
50
-
51
- for (var i = 0; i < elements.length; i++) {
52
- if (elements[i].className.indexOf(className) >= 0) {
53
- if (isFirst) {
54
- return elements[i];
55
- }
56
- else {
57
- rtn.push(elements[i]);
58
- }
59
- }
60
- }
61
- return rtn;
62
- },
63
-
64
- /**
65
- * @method
66
- * @param {Object} obj 需要深层拷贝的对象
67
- * @desc 将对象深层拷贝非引用拷贝
68
- * @returns {Object} 复制的对象
69
- */
70
- deepClone(obj) {
71
- var sourceHistory = [];
72
- var cloneHistory = [];
73
- return this.CloneCode(obj, sourceHistory, cloneHistory);
74
- },
75
-
76
- /**
77
- * @method
78
- * @param {Object} obj 需要拷贝的对象
79
- * @param {Array} sourceHistory 元数据临时数据
80
- * @param {Array} cloneHistory 拷贝临时数据
81
- * @returns {Object} 返回复制对象
82
- */
83
- CloneCode(obj, sourceHistory, cloneHistory) {
84
- var rtn;
85
- switch (typeof obj) {
86
- case 'boolean':
87
- case 'number':
88
- case 'string':
89
- case 'symbol':
90
- case 'undefined':
91
- rtn = obj;
92
- break;
93
- case 'object':
94
- var hisIndex = sourceHistory.indexOf(obj);
95
- if (hisIndex >= 0) {
96
- rtn = cloneHistory[hisIndex];
97
- }
98
- else {
99
- if (Object.prototype.toString.call(obj) === '[object Object]') {
100
- rtn = {};
101
- for (var keyObj in obj) {
102
- rtn[keyObj] = this.CloneCode(obj[keyObj], sourceHistory, cloneHistory);
103
- }
104
- }
105
- else if (Object.prototype.toString.call(obj) === '[object Array]') {
106
- rtn = [];
107
- for (var keyArray in obj) {
108
- rtn.push(this.CloneCode(obj[keyArray],sourceHistory, cloneHistory));
109
- }
110
- }
111
- }
112
- sourceHistory.push(obj);
113
- cloneHistory.push(rtn);
114
- break;
115
- }
116
- return rtn;
117
- },
118
-
119
- /**
120
- * @method
121
- * @param {Element} element 指定的元素
122
- * @desc 查找指定元素上边距
123
- * @returns {Number} 返回上边距
124
- */
125
- getElementPageTop(element) {
126
- var actualTop = element.offsetTop;
127
- var parent = element.offsetParent;
128
- while (parent !== null) {
129
- actualTop += parent.offsetTop + (parent.offsetHeight - parent.clientHeight) / 2;
130
- parent = parent.offsetParent;
131
- }
132
- return actualTop;
133
- },
134
-
135
- /**
136
- * @method
137
- * @param {Element} element 指定的元素
138
- * @desc 查找指定元素左边距
139
- * @returns {Number} 返回左边距
140
- */
141
- getElementPageLeft(element) {
142
- var actualLeft = element.offsetLeft;
143
- var parent = element.offsetParent;
144
- while (parent !== null) {
145
- actualLeft += parent.offsetLeft + (parent.offsetWidth - parent.clientWidth) / 2;
146
- parent = parent.offsetParent;
147
- }
148
- return actualLeft;
149
- },
150
-
151
- /**
152
- * @method
153
- * @desc 获取滚动条宽度
154
- * @returns {Number} 滚动条宽度
155
- */
156
- getScrollbarWidth() {
157
- var odiv = document.createElement('div'),//创建一个div
158
- styles = {
159
- width: '100px',
160
- height: '100px',
161
- overflowY: 'scroll'//让他有滚动条
162
- }, i, scrollbarWidth;
163
- for (i in styles) odiv.style[i] = styles[i];
164
- document.body.appendChild(odiv);//把div添加到body中
165
- scrollbarWidth = odiv.offsetWidth - odiv.clientWidth;//相减
166
- document.body.removeChild(odiv);
167
- return scrollbarWidth;//返回滚动条宽度
168
- },
169
-
170
- /**
171
- * @method
172
- * @param {Element} element 指定元素
173
- * @param {String} direction 横纵方向
174
- * @desc 获取指定元素是否有滚动条
175
- * @return {Boolean} 返回是否
176
- */
177
- hasScrolled(element, direction) {
178
- if (direction === 'Y') {
179
- return element.scrollHeight > element.clientHeight;
180
- } else if (direction === 'X') {
181
- return element.scrollWidth > element.clientWidth;
182
- }
183
- },
184
-
185
- /**
186
- * @method
187
- * @param {Object} vmodel 弹窗的Model驱动数据
188
- * @desc 打开弹窗
189
- */
190
- openDialog(vmodel) {
191
-
192
- //this.dialogList.List.push(vmodel);
193
- this.dialogList.addDialog(vmodel);
194
- },
195
-
196
- /**
197
- * @method
198
- * @param {Object} vmodel 弹窗的驱动数据对象
199
- * @desc 关闭指定弹窗
200
- */
201
- closeDialog(vmodel) {
202
-
203
- if (vmodel) {
204
- if (vmodel.name === 'ct-comfirm' || vmodel.$options.name === 'ctDialog' || vmodel.$options.name === 'ct-dialog') {
205
- //vmodel.dialogTableVisible = false;
206
- this.dialogList.deleteDialog(vmodel);
207
- return;
208
- }
209
- else {
210
- this.closeDialog(vmodel.$parent);
211
- }
212
- }
213
- else {
214
- return;
215
- }
216
- },
217
-
218
- /**
219
- * @method
220
- * @param {Object} message 提示信息
221
- * @param {Object} title 提示框标题
222
- * @param {Object} options 参数 如confirmButtonText,cancelButtonText
223
- * @desc 确认框
224
- */
225
- confirm(message, title, options) {
226
- let self = this;
227
-
228
- return new Promise((resolve,reject) => {
229
- var dialogOption = {
230
- title: title,
231
- name:'ct-comfirm',
232
- vmodel:{},
233
- content: [{
234
- component: 'ct-comfirm',
235
- attrs: {
236
- options:options,
237
- text:message,
238
- width: '400px',
239
- height: '95px'
240
- },
241
- on: {
242
- access(){
243
- self.closeDialog(dialogOption);
244
- resolve();
245
- },
246
- cancel()
247
- {
248
- self.closeDialog(dialogOption);
249
- reject()
250
- },
251
-
252
- }
253
- }]
254
- };
255
- this.openDialog(dialogOption);
256
- })
257
-
258
- },
259
-
260
- /**
261
- * @method
262
- * @param {Object} evControl 指定Vue对象
263
- * @desc 获取指定组件所在的Tab对象
264
- * @return {Object} 返回Tab对象
265
- */
266
- getParentPane(evControl) {
267
- var parent = evControl.$parent;
268
- if (parent) {
269
- if (parent.$options.name === 'ElTabPane') {
270
- return parent;
271
- }
272
- else if (evControl.$options.name === 'ctDialog') {
273
- return evControl.vmodel.pane;
274
- }
275
- else if (parent.$options.name === 'DataDrivenSearch') {
276
- return parent;
277
- }
278
- else if (parent.$options.name === 'DataDrivenForm') {
279
- return parent;
280
- }
281
- else {
282
- return this.getParentPane(parent);
283
- }
284
- }
285
- },
286
-
287
- //执行忙碌标识
288
- evalBizy: false,
289
-
290
- /**
291
- * @method
292
- * @param {String} code 执行代码
293
- * @desc 执行动态脚本
294
- * @returns {obj} 执行脚本
295
- */
296
- eval(code) {
297
- while (this.evalBizy) {
298
- //sleep
299
- }
300
- this.evalBizy = true;
301
- var rtn = {};
302
- var currentKey = [];
303
- for (var k in window) {
304
- currentKey.push(k);
305
- }
306
- if (window.attachEvent && !window.opera) {
307
- //ie
308
- execScript(code);
309
- } else {
310
- //not ie
311
- window.eval(code);
312
- }
313
- for (var j in window) {
314
- if (currentKey.indexOf(j) < 0) {
315
- if (typeof window[j] === 'function') {
316
- rtn[j] = common.initFunction(window[j]);
317
- }
318
- else {
319
- rtn[j] = window[j];
320
- }
321
- delete window[j];
322
- }
323
- }
324
- this.evalBizy = false;
325
- return rtn;
326
- },
327
-
328
- /**
329
- * @method
330
- * @param {Function} f 指定函数
331
- * @desc 将指定函数外套用一层逻辑,默认无参数时传入ID
332
- * @returns {obj} 返回值
333
- */
334
- initFunction(f) {
335
- return function () {
336
- if (arguments.length === 0) {
337
- return f($fd);
338
- }
339
- else {
340
- var exStr = 'f(';
341
- for (var i = 0; i < arguments.length; i++) {
342
- exStr += 'arguments[' + i + ']';
343
- if (i !== arguments.length - 1) {
344
- exStr += ',';
345
- }
346
- else {
347
- exStr += ');';
348
- }
349
- }
350
- return eval(exStr);
351
- }
352
- };
353
- },
354
-
355
- /**
356
- * @method
357
- * @param {String} code 执行脚本
358
- * @desc 执行动态脚本,装载自定义方法和参数在window上(这样使用自定义对象时,不需要this.了)
359
- * @returns {obj} 返回值
360
- */
361
- excute(code) {
362
- var self = this;
363
- common.with(self);
364
- let rtn = eval(code);
365
- common.unWith(self);
366
-
367
- return rtn;
368
- },
369
-
370
- /**
371
- * @method
372
- * @param {Function} fun 执行方法
373
- * @param {Object} para 执行方法的参数
374
- * @desc 执行方法,装载自定义方法和参数在window上
375
- * @returns {obj} 返回值
376
- */
377
- excuteFun(fun, para) {
378
- var self = this;
379
- common.with(self);
380
- let rtn = fun(para);
381
- common.unWith(self);
382
-
383
- return rtn;
384
- },
385
-
386
- /**
387
- * @method
388
- * @param {String} fun 执行方法字符串
389
- * @param {Object} para 执行方法的参数
390
- * @desc 执行方法,装载自定义方法和参数在window上
391
- * @returns {obj} 返回值
392
- */
393
- excuteFunStr(funStr, para) {
394
- var self = this;
395
- common.with(self);
396
- let rtn = eval(funStr + '(para)');
397
- common.unWith(self);
398
-
399
- return rtn;
400
- },
401
-
402
- /**
403
- * @method
404
- * @param {Object} source 作用域对象
405
- * @desc 装载作用域
406
- */
407
- with(source) {
408
- if (typeof window !== 'undefined') {
409
- for (var k in source) {
410
- window[k] = source[k];
411
- }
412
- }
413
- },
414
-
415
- /**
416
- * @method
417
- * @param {Object} source 作用域对象
418
- * @desc 卸载作用域对象
419
- */
420
- unWith(source) {
421
- if (typeof window !== 'undefined') {
422
- for (var k in source) {
423
- delete window[k];
424
- }
425
- }
426
- },
427
-
428
- /**
429
- * @method
430
- * @param {String} fileName 保存文件名
431
- * @param {String} fileContent 文件内容
432
- * @desc 将字符串转为文件提示下载
433
- * @returns {obj} 返回值
434
- */
435
- saveFile(fileName, fileContent) {
436
- var byteArr = new Array(fileContent.length);
437
- for (var i = 0; i < fileContent.length; i++) {
438
- byteArr[i] = fileContent.charCodeAt(i);
439
- }
440
-
441
- var blob = new Blob([new Uint8Array(byteArr)], { type: "application/ms-excel" });
442
- var url = window.URL.createObjectURL(blob);
443
-
444
- var a = document.createElement("a");
445
- if ("download" in a) { // 支持download属性
446
- document.body.appendChild(a);
447
- a.style = "display:none";
448
- a.href = url;
449
- //download属性IE不支持。。。
450
- a.download = fileName;
451
- a.click(); // 触发下载
452
- //revokeObjectURL会导致firefox不能下载。。。
453
- //window.URL.revokeObjectURL(url);
454
- document.body.removeChild(a);
455
- }
456
- else { //IE 10+
457
- if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
458
- return navigator.msSaveOrOpenBlob(blob, name);
459
- }
460
- }
461
- },
462
-
463
- /**
464
- * @method
465
- * @desc 获取中转API地址
466
- * @returns {obj} 返回值
467
- */
468
- globalUri() {
469
- return Vue.prototype.$dataDrivenOpts.baseUrl;
470
- },
471
-
472
- /**
473
- * @method
474
- * @desc 获取外部配置对象
475
- * @returns {obj} 返回值
476
- */
477
- getDataDrivenOpts() {
478
- return Vue.prototype.$dataDrivenOpts;
479
- },
480
-
481
- /**
482
- * @method
483
- * @param {String} str 需要计算的字符串
484
- * @desc 获取字符串的字节数。
485
- * @returns {obj} 返回值
486
- */
487
- strCharLen(str) {
488
- var len = 0;
489
- if (str) {
490
- for (var i = 0; i < str.length; i++) {
491
- var c = str.charCodeAt(i);
492
- //单字节加1
493
- if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
494
- len++;
495
- }
496
- else {
497
- len += 2;
498
- }
499
- }
500
- }
501
-
502
- return len;
503
- },
504
- /**
505
- * @method
506
- * @param {Object} obj 需要克隆的对象
507
- * @desc 深度克隆对象。
508
- * @returns {Object} 克隆好的对象。
509
- */
510
- cloneObject(obj) {
511
- let newObj = Array.isArray(obj) ? [] : {}
512
-
513
- if (obj && typeof obj === "object") {
514
- for (let key in obj) {
515
- if (obj.hasOwnProperty(key)) {
516
- newObj[key] = (obj && typeof obj[key] === 'object') ? this.cloneObject(obj[key]) : obj[key];
517
- }
518
- }
519
- }
520
- return newObj
521
- },
522
- /**
523
- * @method
524
- * @param {Number} total 滚动的位置
525
- * @desc 设置页面滚动。
526
- */
527
- setScrollTop(total) {
528
- if (document.getElementById("form-app")) {
529
- document.getElementById("form-app").scrollTop = total;
530
- }
531
- else if (window.scrollTo) {
532
- window.scrollTo(0, total)
533
- }
534
- else {
535
- // Chrome
536
- document.body.scrollTop = total
537
- // Firefox
538
- document.documentElement.scrollTop = total
539
- // Safari
540
- window.pageYOffset = total
541
- }
542
- },
543
-
544
- /**
545
- * 格式化日期
546
- * @param date 日期
547
- * @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E
548
- * @return 格式化后的日期
549
- */
550
- formatDate: function (date, format) {
551
- var v = "";
552
- if (typeof date === "string" || typeof date !== "object") {
553
- return;
554
- }
555
- if (date == null) return "";
556
-
557
- var year = date.getFullYear();
558
- var month = date.getMonth() + 1;
559
- var day = date.getDate();
560
- var hour = date.getHours();
561
- var minute = date.getMinutes();
562
- var second = date.getSeconds();
563
- var weekDay = date.getDay();
564
- var ms = date.getMilliseconds();
565
- var weekDayString = "";
566
-
567
- if (weekDay === 1) {
568
- weekDayString = "星期一";
569
- } else if (weekDay === 2) {
570
- weekDayString = "星期二";
571
- } else if (weekDay === 3) {
572
- weekDayString = "星期三";
573
- } else if (weekDay === 4) {
574
- weekDayString = "星期四";
575
- } else if (weekDay === 5) {
576
- weekDayString = "星期五";
577
- } else if (weekDay === 6) {
578
- weekDayString = "星期六";
579
- } else if (weekDay === 7) {
580
- weekDayString = "星期日";
581
- }
582
-
583
- v = format;
584
- //Year
585
- v = v.replace(/yyyy/g, year);
586
- v = v.replace(/YYYY/g, year);
587
- v = v.replace(/yy/g, (year + "").substring(2, 4));
588
- v = v.replace(/YY/g, (year + "").substring(2, 4));
589
-
590
- //Month
591
- var monthStr = ("0" + month);
592
- v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2));
593
-
594
- //Day
595
- var dayStr = ("0" + day);
596
- v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2));
597
-
598
- //hour
599
- var hourStr = ("0" + hour);
600
- v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2));
601
- v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2));
602
-
603
- //minute
604
- var minuteStr = ("0" + minute);
605
- v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2));
606
-
607
- //Millisecond
608
- v = v.replace(/sss/g, ms);
609
- v = v.replace(/SSS/g, ms);
610
-
611
- //second
612
- var secondStr = ("0" + second);
613
- v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2));
614
- v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2));
615
-
616
- //weekDay
617
- v = v.replace(/E/g, weekDayString);
618
- return v;
619
- },
620
-
621
-
622
- /**
623
- * @method
624
- * @param {String} str 需要转换的字符串
625
- * @desc 首字母转小写。
626
- */
627
- initialsToUpperCase(str) {
628
- if (typeof str === 'undefined') {
629
- return str;
630
- }
631
- let char = str.charAt(0);
632
- let charUpper = char.toLowerCase();
633
- str = charUpper + str.slice(1);
634
- return str;
635
- },
636
-
637
- /**
638
- * @method
639
- * @param {Number} value 需要转换的字符串
640
- * @param {Number} num 小数点位数
641
- * @param {Number} oldValue 不是小数时 替换成这个数
642
- * @desc 字符串转数字(保留num位小数)。
643
- */
644
- numFloat(value, dc, oldValue){
645
- //value = value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
646
- //value = value.replace(/^\./g, ""); //验证第一个字符是数字而不是.
647
- //value = value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的.
648
- //value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");//只允许输入一个小数点
649
- //value = value.replace(/^(\-)*(\d+)\.(\d{0,${num}}).*$/, '$1$2.$3'); //只能输入n个小数 正则无法用变量
650
- //if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
651
- // value = Math.floor(value * Math.pow(10, num)) / Math.pow(10, num);
652
- //}
653
- // var reg = /^[0-9]+$|^[0-9]+\.[0-9]*$|^[0-9]{1,3}([,'][0-9]{3})+$|^[0-9]{1,3}([,'][0-9]{3})+\.[0-9]*$/;
654
- var reg = '';
655
- if (dc == undefined || dc == "" || dc === "0") {
656
- reg = /^(\-)?\d*$/;
657
- }
658
- else{
659
- if(dc===-1)dc=12;
660
- reg = new RegExp("^(\\-)?\\d*[.]{0,1}(\\d{1," + dc + "})?$");
661
- }
662
- if (value === '' || reg.test(value)) {
663
- // if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
664
- // value = oldValue;
665
- // }
666
- }
667
- else {
668
- value = oldValue;
669
- }
670
-
671
- return value.toString();
672
- },
673
-
674
- /**
675
- * @method
676
- * @param {Number} value 需要转换的字符串
677
- * @param {Number} num 小数点位数
678
- * @desc 字符串转数字(保留num位小数)。
679
- */
680
- numToFloat(value, num){
681
- if (value && num && num > 0) {
682
- value =parseFloat(value).toFixed(num);
683
- }
684
- return value.toString();
685
- },
686
-
687
-
688
- /**
689
- * @method
690
- * @param {String} ext 后缀
691
- * @desc 判断是否是图片格式。
692
- */
693
- isAssetTypeAnImage(ext) {
694
- return [
695
- 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
696
- indexOf(ext.toLowerCase()) !== -1;
697
- },
698
-
699
- /**
700
- * @method
701
- * @param {String} obj 对象
702
- * @desc 对象转url参数字符串。
703
- */
704
- objectToQueryStr(obj) {
705
- if (!obj) {
706
- return '';
707
- }
708
- let query = '?';
709
- for (let i in obj) {
710
- query = query + i + '=' + obj[i] + '&'
711
- }
712
- query = query.substr(0, query.length - 1);
713
- return query
714
- },
715
- /**
716
- * @method
717
- * @param {String} str url字符串
718
- * @desc url参数字符串转对象。
719
- */
720
- queryStrToObject(str) {
721
- if (!str) {
722
- return {};
723
- }
724
- var obj = {};
725
- var arr = str.split("&");
726
- for (var i = 0; i < arr.length; i++) {
727
- var res = arr[i].split("=");
728
- obj[res[0]] = res[1];
729
- }
730
- return obj;
731
- }
732
- };
733
-
734
- if (typeof window !== 'undefined' && window.Vue) {
735
- window.Vue.use(common);
736
- }
737
-
738
- export default common;
1
+ import Vue from 'vue';
2
+ const common = {
3
+ install(Vue) {
4
+ Vue.prototype.$common = common;
5
+ if (typeof window !== 'undefined') {
6
+ window.$common = common;
7
+ }
8
+ },
9
+ /**
10
+ * @method
11
+ * @param {String} flag 按钮类别标识
12
+ * @returns {String} 对应Element按钮的Type
13
+ * @desc 根据按钮标识获取按钮类别
14
+ */
15
+ getBtnType(flag) {
16
+ switch (flag) {
17
+ case 'e':
18
+ case 's':
19
+ return 'primary';
20
+ case 'a':
21
+ return 'success';
22
+ case 'i':
23
+ return 'info';
24
+ case 'w':
25
+ return 'warning';
26
+ case 'd':
27
+ return 'danger';
28
+ default:
29
+ return '';
30
+ }
31
+ },
32
+
33
+ /**
34
+ * @method
35
+ * @param {String} className 包含的类名
36
+ * @param {string} type 匹配的元素类别
37
+ * @param {Boolean} [isFirst] 是否只返回第一个元素
38
+ * @description 获取包含指定class名的元素
39
+ * @returns {Array | Element} 返回匹配元素数组或匹配元素
40
+ */
41
+ getElementByClassName(className, type, isFirst) {
42
+ var rtn = [];
43
+ var elements = [];
44
+ if (type) {
45
+ elements = document.getElementsByTagName(type);
46
+ }
47
+ else {
48
+ elements = document.getElementsByTagName('*');
49
+ }
50
+
51
+ for (var i = 0; i < elements.length; i++) {
52
+ if (elements[i].className.indexOf(className) >= 0) {
53
+ if (isFirst) {
54
+ return elements[i];
55
+ }
56
+ else {
57
+ rtn.push(elements[i]);
58
+ }
59
+ }
60
+ }
61
+ return rtn;
62
+ },
63
+
64
+ /**
65
+ * @method
66
+ * @param {Object} obj 需要深层拷贝的对象
67
+ * @desc 将对象深层拷贝非引用拷贝
68
+ * @returns {Object} 复制的对象
69
+ */
70
+ deepClone(obj) {
71
+ var sourceHistory = [];
72
+ var cloneHistory = [];
73
+ return this.CloneCode(obj, sourceHistory, cloneHistory);
74
+ },
75
+
76
+ /**
77
+ * @method
78
+ * @param {Object} obj 需要拷贝的对象
79
+ * @param {Array} sourceHistory 元数据临时数据
80
+ * @param {Array} cloneHistory 拷贝临时数据
81
+ * @returns {Object} 返回复制对象
82
+ */
83
+ CloneCode(obj, sourceHistory, cloneHistory) {
84
+ var rtn;
85
+ switch (typeof obj) {
86
+ case 'boolean':
87
+ case 'number':
88
+ case 'string':
89
+ case 'symbol':
90
+ case 'undefined':
91
+ rtn = obj;
92
+ break;
93
+ case 'object':
94
+ var hisIndex = sourceHistory.indexOf(obj);
95
+ if (hisIndex >= 0) {
96
+ rtn = cloneHistory[hisIndex];
97
+ }
98
+ else {
99
+ if (Object.prototype.toString.call(obj) === '[object Object]') {
100
+ rtn = {};
101
+ for (var keyObj in obj) {
102
+ rtn[keyObj] = this.CloneCode(obj[keyObj], sourceHistory, cloneHistory);
103
+ }
104
+ }
105
+ else if (Object.prototype.toString.call(obj) === '[object Array]') {
106
+ rtn = [];
107
+ for (var keyArray in obj) {
108
+ rtn.push(this.CloneCode(obj[keyArray],sourceHistory, cloneHistory));
109
+ }
110
+ }
111
+ }
112
+ sourceHistory.push(obj);
113
+ cloneHistory.push(rtn);
114
+ break;
115
+ }
116
+ return rtn;
117
+ },
118
+
119
+ /**
120
+ * @method
121
+ * @param {Element} element 指定的元素
122
+ * @desc 查找指定元素上边距
123
+ * @returns {Number} 返回上边距
124
+ */
125
+ getElementPageTop(element) {
126
+ var actualTop = element.offsetTop;
127
+ var parent = element.offsetParent;
128
+ while (parent !== null) {
129
+ actualTop += parent.offsetTop + (parent.offsetHeight - parent.clientHeight) / 2;
130
+ parent = parent.offsetParent;
131
+ }
132
+ return actualTop;
133
+ },
134
+
135
+ /**
136
+ * @method
137
+ * @param {Element} element 指定的元素
138
+ * @desc 查找指定元素左边距
139
+ * @returns {Number} 返回左边距
140
+ */
141
+ getElementPageLeft(element) {
142
+ var actualLeft = element.offsetLeft;
143
+ var parent = element.offsetParent;
144
+ while (parent !== null) {
145
+ actualLeft += parent.offsetLeft + (parent.offsetWidth - parent.clientWidth) / 2;
146
+ parent = parent.offsetParent;
147
+ }
148
+ return actualLeft;
149
+ },
150
+
151
+ /**
152
+ * @method
153
+ * @desc 获取滚动条宽度
154
+ * @returns {Number} 滚动条宽度
155
+ */
156
+ getScrollbarWidth() {
157
+ var odiv = document.createElement('div'),//创建一个div
158
+ styles = {
159
+ width: '100px',
160
+ height: '100px',
161
+ overflowY: 'scroll'//让他有滚动条
162
+ }, i, scrollbarWidth;
163
+ for (i in styles) odiv.style[i] = styles[i];
164
+ document.body.appendChild(odiv);//把div添加到body中
165
+ scrollbarWidth = odiv.offsetWidth - odiv.clientWidth;//相减
166
+ document.body.removeChild(odiv);
167
+ return scrollbarWidth;//返回滚动条宽度
168
+ },
169
+
170
+ /**
171
+ * @method
172
+ * @param {Element} element 指定元素
173
+ * @param {String} direction 横纵方向
174
+ * @desc 获取指定元素是否有滚动条
175
+ * @return {Boolean} 返回是否
176
+ */
177
+ hasScrolled(element, direction) {
178
+ if (direction === 'Y') {
179
+ return element.scrollHeight > element.clientHeight;
180
+ } else if (direction === 'X') {
181
+ return element.scrollWidth > element.clientWidth;
182
+ }
183
+ },
184
+
185
+ /**
186
+ * @method
187
+ * @param {Object} vmodel 弹窗的Model驱动数据
188
+ * @desc 打开弹窗
189
+ */
190
+ openDialog(vmodel) {
191
+
192
+ //this.dialogList.List.push(vmodel);
193
+ this.dialogList.addDialog(vmodel);
194
+ },
195
+
196
+ /**
197
+ * @method
198
+ * @param {Object} vmodel 弹窗的驱动数据对象
199
+ * @desc 关闭指定弹窗
200
+ */
201
+ closeDialog(vmodel) {
202
+
203
+ if (vmodel) {
204
+ if (vmodel.name === 'ct-comfirm' || vmodel.$options.name === 'ctDialog' || vmodel.$options.name === 'ct-dialog') {
205
+ //vmodel.dialogTableVisible = false;
206
+ this.dialogList.deleteDialog(vmodel);
207
+ return;
208
+ }
209
+ else {
210
+ this.closeDialog(vmodel.$parent);
211
+ }
212
+ }
213
+ else {
214
+ return;
215
+ }
216
+ },
217
+
218
+ /**
219
+ * @method
220
+ * @param {Object} message 提示信息
221
+ * @param {Object} title 提示框标题
222
+ * @param {Object} options 参数 如confirmButtonText,cancelButtonText
223
+ * @desc 确认框
224
+ */
225
+ confirm(message, title, options) {
226
+ let self = this;
227
+
228
+ return new Promise((resolve,reject) => {
229
+ var dialogOption = {
230
+ title: title,
231
+ name:'ct-comfirm',
232
+ vmodel:{},
233
+ content: [{
234
+ component: 'ct-comfirm',
235
+ attrs: {
236
+ options:options,
237
+ text:message,
238
+ width: '400px',
239
+ height: '95px'
240
+ },
241
+ on: {
242
+ access(){
243
+ self.closeDialog(dialogOption);
244
+ resolve();
245
+ },
246
+ cancel()
247
+ {
248
+ self.closeDialog(dialogOption);
249
+ reject()
250
+ },
251
+
252
+ }
253
+ }]
254
+ };
255
+ this.openDialog(dialogOption);
256
+ })
257
+
258
+ },
259
+
260
+ /**
261
+ * @method
262
+ * @param {Object} evControl 指定Vue对象
263
+ * @desc 获取指定组件所在的Tab对象
264
+ * @return {Object} 返回Tab对象
265
+ */
266
+ getParentPane(evControl) {
267
+ var parent = evControl.$parent;
268
+ if (parent) {
269
+ if (parent.$options.name === 'ElTabPane') {
270
+ return parent;
271
+ }
272
+ else if (evControl.$options.name === 'ctDialog') {
273
+ return evControl.vmodel.pane;
274
+ }
275
+ else if (parent.$options.name === 'DataDrivenSearch') {
276
+ return parent;
277
+ }
278
+ else if (parent.$options.name === 'DataDrivenForm') {
279
+ return parent;
280
+ }
281
+ else {
282
+ return this.getParentPane(parent);
283
+ }
284
+ }
285
+ },
286
+
287
+ //执行忙碌标识
288
+ evalBizy: false,
289
+
290
+ /**
291
+ * @method
292
+ * @param {String} code 执行代码
293
+ * @desc 执行动态脚本
294
+ * @returns {obj} 执行脚本
295
+ */
296
+ eval(code) {
297
+ while (this.evalBizy) {
298
+ //sleep
299
+ }
300
+ this.evalBizy = true;
301
+ var rtn = {};
302
+ var currentKey = [];
303
+ for (var k in window) {
304
+ currentKey.push(k);
305
+ }
306
+ if (window.attachEvent && !window.opera) {
307
+ //ie
308
+ execScript(code);
309
+ } else {
310
+ //not ie
311
+ window.eval(code);
312
+ }
313
+ for (var j in window) {
314
+ if (currentKey.indexOf(j) < 0) {
315
+ if (typeof window[j] === 'function') {
316
+ rtn[j] = common.initFunction(window[j]);
317
+ }
318
+ else {
319
+ rtn[j] = window[j];
320
+ }
321
+ delete window[j];
322
+ }
323
+ }
324
+ this.evalBizy = false;
325
+ return rtn;
326
+ },
327
+
328
+ /**
329
+ * @method
330
+ * @param {Function} f 指定函数
331
+ * @desc 将指定函数外套用一层逻辑,默认无参数时传入ID
332
+ * @returns {obj} 返回值
333
+ */
334
+ initFunction(f) {
335
+ return function () {
336
+ if (arguments.length === 0) {
337
+ return f($fd);
338
+ }
339
+ else {
340
+ var exStr = 'f(';
341
+ for (var i = 0; i < arguments.length; i++) {
342
+ exStr += 'arguments[' + i + ']';
343
+ if (i !== arguments.length - 1) {
344
+ exStr += ',';
345
+ }
346
+ else {
347
+ exStr += ');';
348
+ }
349
+ }
350
+ return eval(exStr);
351
+ }
352
+ };
353
+ },
354
+
355
+ /**
356
+ * @method
357
+ * @param {String} code 执行脚本
358
+ * @desc 执行动态脚本,装载自定义方法和参数在window上(这样使用自定义对象时,不需要this.了)
359
+ * @returns {obj} 返回值
360
+ */
361
+ excute(code) {
362
+ var self = this;
363
+ common.with(self);
364
+ let rtn = eval(code);
365
+ common.unWith(self);
366
+
367
+ return rtn;
368
+ },
369
+
370
+ /**
371
+ * @method
372
+ * @param {Function} fun 执行方法
373
+ * @param {Object} para 执行方法的参数
374
+ * @desc 执行方法,装载自定义方法和参数在window上
375
+ * @returns {obj} 返回值
376
+ */
377
+ excuteFun(fun, para) {
378
+ var self = this;
379
+ common.with(self);
380
+ let rtn = fun(para);
381
+ common.unWith(self);
382
+
383
+ return rtn;
384
+ },
385
+
386
+ /**
387
+ * @method
388
+ * @param {String} fun 执行方法字符串
389
+ * @param {Object} para 执行方法的参数
390
+ * @desc 执行方法,装载自定义方法和参数在window上
391
+ * @returns {obj} 返回值
392
+ */
393
+ excuteFunStr(funStr, para) {
394
+ var self = this;
395
+ common.with(self);
396
+ let rtn = eval(funStr + '(para)');
397
+ common.unWith(self);
398
+
399
+ return rtn;
400
+ },
401
+
402
+ /**
403
+ * @method
404
+ * @param {Object} source 作用域对象
405
+ * @desc 装载作用域
406
+ */
407
+ with(source) {
408
+ if (typeof window !== 'undefined') {
409
+ for (var k in source) {
410
+ window[k] = source[k];
411
+ }
412
+ }
413
+ },
414
+
415
+ /**
416
+ * @method
417
+ * @param {Object} source 作用域对象
418
+ * @desc 卸载作用域对象
419
+ */
420
+ unWith(source) {
421
+ if (typeof window !== 'undefined') {
422
+ for (var k in source) {
423
+ delete window[k];
424
+ }
425
+ }
426
+ },
427
+
428
+ /**
429
+ * @method
430
+ * @param {String} fileName 保存文件名
431
+ * @param {String} fileContent 文件内容
432
+ * @desc 将字符串转为文件提示下载
433
+ * @returns {obj} 返回值
434
+ */
435
+ saveFile(fileName, fileContent) {
436
+ var byteArr = new Array(fileContent.length);
437
+ for (var i = 0; i < fileContent.length; i++) {
438
+ byteArr[i] = fileContent.charCodeAt(i);
439
+ }
440
+
441
+ var blob = new Blob([new Uint8Array(byteArr)], { type: "application/ms-excel" });
442
+ var url = window.URL.createObjectURL(blob);
443
+
444
+ var a = document.createElement("a");
445
+ if ("download" in a) { // 支持download属性
446
+ document.body.appendChild(a);
447
+ a.style = "display:none";
448
+ a.href = url;
449
+ //download属性IE不支持。。。
450
+ a.download = fileName;
451
+ a.click(); // 触发下载
452
+ //revokeObjectURL会导致firefox不能下载。。。
453
+ //window.URL.revokeObjectURL(url);
454
+ document.body.removeChild(a);
455
+ }
456
+ else { //IE 10+
457
+ if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
458
+ return navigator.msSaveOrOpenBlob(blob, name);
459
+ }
460
+ }
461
+ },
462
+
463
+ /**
464
+ * @method
465
+ * @desc 获取中转API地址
466
+ * @returns {obj} 返回值
467
+ */
468
+ globalUri() {
469
+ return Vue.prototype.$dataDrivenOpts.baseUrl;
470
+ },
471
+
472
+ /**
473
+ * @method
474
+ * @desc 获取外部配置对象
475
+ * @returns {obj} 返回值
476
+ */
477
+ getDataDrivenOpts() {
478
+ return Vue.prototype.$dataDrivenOpts;
479
+ },
480
+
481
+ /**
482
+ * @method
483
+ * @param {String} str 需要计算的字符串
484
+ * @desc 获取字符串的字节数。
485
+ * @returns {obj} 返回值
486
+ */
487
+ strCharLen(str) {
488
+ var len = 0;
489
+ if (str) {
490
+ for (var i = 0; i < str.length; i++) {
491
+ var c = str.charCodeAt(i);
492
+ //单字节加1
493
+ if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
494
+ len++;
495
+ }
496
+ else {
497
+ len += 2;
498
+ }
499
+ }
500
+ }
501
+
502
+ return len;
503
+ },
504
+ /**
505
+ * @method
506
+ * @param {Object} obj 需要克隆的对象
507
+ * @desc 深度克隆对象。
508
+ * @returns {Object} 克隆好的对象。
509
+ */
510
+ cloneObject(obj) {
511
+ let newObj = Array.isArray(obj) ? [] : {}
512
+
513
+ if (obj && typeof obj === "object") {
514
+ for (let key in obj) {
515
+ if (obj.hasOwnProperty(key)) {
516
+ newObj[key] = (obj && typeof obj[key] === 'object') ? this.cloneObject(obj[key]) : obj[key];
517
+ }
518
+ }
519
+ }
520
+ return newObj
521
+ },
522
+ /**
523
+ * @method
524
+ * @param {Number} total 滚动的位置
525
+ * @desc 设置页面滚动。
526
+ */
527
+ setScrollTop(total) {
528
+ if (document.getElementById("form-app")) {
529
+ document.getElementById("form-app").scrollTop = total;
530
+ }
531
+ else if (window.scrollTo) {
532
+ window.scrollTo(0, total)
533
+ }
534
+ else {
535
+ // Chrome
536
+ document.body.scrollTop = total
537
+ // Firefox
538
+ document.documentElement.scrollTop = total
539
+ // Safari
540
+ window.pageYOffset = total
541
+ }
542
+ },
543
+
544
+ /**
545
+ * 格式化日期
546
+ * @param date 日期
547
+ * @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E
548
+ * @return 格式化后的日期
549
+ */
550
+ formatDate: function (date, format) {
551
+ var v = "";
552
+ if (typeof date === "string" || typeof date !== "object") {
553
+ return;
554
+ }
555
+ if (date == null) return "";
556
+
557
+ var year = date.getFullYear();
558
+ var month = date.getMonth() + 1;
559
+ var day = date.getDate();
560
+ var hour = date.getHours();
561
+ var minute = date.getMinutes();
562
+ var second = date.getSeconds();
563
+ var weekDay = date.getDay();
564
+ var ms = date.getMilliseconds();
565
+ var weekDayString = "";
566
+
567
+ if (weekDay === 1) {
568
+ weekDayString = "星期一";
569
+ } else if (weekDay === 2) {
570
+ weekDayString = "星期二";
571
+ } else if (weekDay === 3) {
572
+ weekDayString = "星期三";
573
+ } else if (weekDay === 4) {
574
+ weekDayString = "星期四";
575
+ } else if (weekDay === 5) {
576
+ weekDayString = "星期五";
577
+ } else if (weekDay === 6) {
578
+ weekDayString = "星期六";
579
+ } else if (weekDay === 7) {
580
+ weekDayString = "星期日";
581
+ }
582
+
583
+ v = format;
584
+ //Year
585
+ v = v.replace(/yyyy/g, year);
586
+ v = v.replace(/YYYY/g, year);
587
+ v = v.replace(/yy/g, (year + "").substring(2, 4));
588
+ v = v.replace(/YY/g, (year + "").substring(2, 4));
589
+
590
+ //Month
591
+ var monthStr = ("0" + month);
592
+ v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2));
593
+
594
+ //Day
595
+ var dayStr = ("0" + day);
596
+ v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2));
597
+
598
+ //hour
599
+ var hourStr = ("0" + hour);
600
+ v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2));
601
+ v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2));
602
+
603
+ //minute
604
+ var minuteStr = ("0" + minute);
605
+ v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2));
606
+
607
+ //Millisecond
608
+ v = v.replace(/sss/g, ms);
609
+ v = v.replace(/SSS/g, ms);
610
+
611
+ //second
612
+ var secondStr = ("0" + second);
613
+ v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2));
614
+ v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2));
615
+
616
+ //weekDay
617
+ v = v.replace(/E/g, weekDayString);
618
+ return v;
619
+ },
620
+
621
+
622
+ /**
623
+ * @method
624
+ * @param {String} str 需要转换的字符串
625
+ * @desc 首字母转小写。
626
+ */
627
+ initialsToUpperCase(str) {
628
+ if (typeof str === 'undefined') {
629
+ return str;
630
+ }
631
+ let char = str.charAt(0);
632
+ let charUpper = char.toLowerCase();
633
+ str = charUpper + str.slice(1);
634
+ return str;
635
+ },
636
+
637
+ /**
638
+ * @method
639
+ * @param {Number} value 需要转换的字符串
640
+ * @param {Number} num 小数点位数
641
+ * @param {Number} oldValue 不是小数时 替换成这个数
642
+ * @desc 字符串转数字(保留num位小数)。
643
+ */
644
+ numFloat(value, dc, oldValue){
645
+ //value = value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
646
+ //value = value.replace(/^\./g, ""); //验证第一个字符是数字而不是.
647
+ //value = value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的.
648
+ //value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");//只允许输入一个小数点
649
+ //value = value.replace(/^(\-)*(\d+)\.(\d{0,${num}}).*$/, '$1$2.$3'); //只能输入n个小数 正则无法用变量
650
+ //if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
651
+ // value = Math.floor(value * Math.pow(10, num)) / Math.pow(10, num);
652
+ //}
653
+ // var reg = /^[0-9]+$|^[0-9]+\.[0-9]*$|^[0-9]{1,3}([,'][0-9]{3})+$|^[0-9]{1,3}([,'][0-9]{3})+\.[0-9]*$/;
654
+ var reg = '';
655
+ if (dc == undefined || dc == "" || dc === "0") {
656
+ reg = /^(\-)?\d*$/;
657
+ }
658
+ else{
659
+ if(dc===-1)dc=12;
660
+ reg = new RegExp("^(\\-)?\\d*[.]{0,1}(\\d{1," + dc + "})?$");
661
+ }
662
+ if (value === '' || reg.test(value)) {
663
+ // if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
664
+ // value = oldValue;
665
+ // }
666
+ }
667
+ else {
668
+ value = oldValue;
669
+ }
670
+
671
+ return value.toString();
672
+ },
673
+
674
+ /**
675
+ * @method
676
+ * @param {Number} value 需要转换的字符串
677
+ * @param {Number} num 小数点位数
678
+ * @desc 字符串转数字(保留num位小数)。
679
+ */
680
+ numToFloat(value, num){
681
+ if (value && num && num > 0) {
682
+ value =parseFloat(value).toFixed(num);
683
+ }
684
+ return value.toString();
685
+ },
686
+
687
+
688
+ /**
689
+ * @method
690
+ * @param {String} ext 后缀
691
+ * @desc 判断是否是图片格式。
692
+ */
693
+ isAssetTypeAnImage(ext) {
694
+ return [
695
+ 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
696
+ indexOf(ext.toLowerCase()) !== -1;
697
+ },
698
+
699
+ /**
700
+ * @method
701
+ * @param {String} obj 对象
702
+ * @desc 对象转url参数字符串。
703
+ */
704
+ objectToQueryStr(obj) {
705
+ if (!obj) {
706
+ return '';
707
+ }
708
+ let query = '?';
709
+ for (let i in obj) {
710
+ query = query + i + '=' + obj[i] + '&'
711
+ }
712
+ query = query.substr(0, query.length - 1);
713
+ return query
714
+ },
715
+ /**
716
+ * @method
717
+ * @param {String} str url字符串
718
+ * @desc url参数字符串转对象。
719
+ */
720
+ queryStrToObject(str) {
721
+ if (!str) {
722
+ return {};
723
+ }
724
+ var obj = {};
725
+ var arr = str.split("&");
726
+ for (var i = 0; i < arr.length; i++) {
727
+ var res = arr[i].split("=");
728
+ obj[res[0]] = res[1];
729
+ }
730
+ return obj;
731
+ }
732
+ };
733
+
734
+ if (typeof window !== 'undefined' && window.Vue) {
735
+ window.Vue.use(common);
736
+ }
737
+
738
+ export default common;