centaline-data-driven 1.1.55 → 1.1.59

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 (202) 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/.vs/Centaline.Front_End.DataDriven/DesignTimeBuild/.dtbcache +0 -0
  6. package/.vs/Centaline.Front_End.DataDriven/v16/Server/sqlite3/db.lock +0 -0
  7. package/.vs/Centaline.Front_End.DataDriven/v16/Server/sqlite3/storage.ide +0 -0
  8. package/Centaline.Front_End.DataDriven.csproj +37 -37
  9. package/Centaline.Front_End.DataDriven.sln +25 -25
  10. package/Properties/launchSettings.json +26 -26
  11. package/README.md +140 -140
  12. package/build/build.js +41 -41
  13. package/build/centaline/centaline.path.js +59 -59
  14. package/build/centaline/webpack.centaline.conf.js +106 -106
  15. package/build/check-versions.js +54 -54
  16. package/build/utils.js +102 -102
  17. package/build/vue-loader.conf.js +22 -22
  18. package/build/webpack.base.conf.js +82 -82
  19. package/build/webpack.dev.conf.js +111 -111
  20. package/build/webpack.prod.conf.js +145 -145
  21. package/config/dev.env.js +12 -12
  22. package/config/index.js +73 -73
  23. package/config/prod.env.js +4 -4
  24. package/index.html +14 -14
  25. package/obj/Centaline.Front_End.DataDriven.csproj.nuget.dgspec.json +73 -0
  26. package/obj/Centaline.Front_End.DataDriven.csproj.nuget.g.props +29 -0
  27. package/obj/Centaline.Front_End.DataDriven.csproj.nuget.g.targets +15 -0
  28. package/obj/Debug/netcoreapp2.1/Centaline.Front_End.DataDriven.AssemblyInfo.cs +23 -0
  29. package/obj/Debug/netcoreapp2.1/Centaline.Front_End.DataDriven.RazorAssemblyInfo.cs +20 -0
  30. package/obj/project.assets.json +11907 -0
  31. package/package.json +75 -75
  32. package/src/App.vue +10 -10
  33. package/src/Detail.vue +29 -26
  34. package/src/Edit.vue +32 -32
  35. package/src/Form.vue +45 -29
  36. package/src/SearchList.vue +41 -40
  37. package/src/SearchTree.vue +51 -51
  38. package/src/Tabs.vue +19 -19
  39. package/src/centaline/api/index.js +249 -249
  40. package/src/centaline/comfirm/index.js +11 -11
  41. package/src/centaline/comfirm/src/comfirm.vue +44 -44
  42. package/src/centaline/common/index.js +738 -738
  43. package/src/centaline/css/common.css +752 -748
  44. package/src/centaline/css/max.css +208 -208
  45. package/src/centaline/dialogList/index.js +11 -11
  46. package/src/centaline/dialogList/src/dialog.vue +210 -210
  47. package/src/centaline/dialogList/src/dialogList.vue +65 -65
  48. package/src/centaline/dialogList/src/dialogNew.vue +78 -78
  49. package/src/centaline/dialogList/src/drag.js +77 -77
  50. package/src/centaline/directives/index.js +23 -23
  51. package/src/centaline/dynamicBtn/index.js +11 -11
  52. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +100 -100
  53. package/src/centaline/dynamicCb/index.js +11 -11
  54. package/src/centaline/dynamicCb/src/dynamicCb.vue +72 -72
  55. package/src/centaline/dynamicCheckbox/index.js +11 -11
  56. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +128 -128
  57. package/src/centaline/dynamicComboBoxWithTextBox/index.js +11 -11
  58. package/src/centaline/dynamicComboBoxWithTextBox/src/dynamicComboBoxWithTextBox.vue +240 -240
  59. package/src/centaline/dynamicD/index.js +11 -11
  60. package/src/centaline/dynamicD/src/dynamicD.vue +92 -92
  61. package/src/centaline/dynamicDetail/index.js +10 -10
  62. package/src/centaline/dynamicDetail/src/dynamicDetail.vue +40 -40
  63. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1280 -1280
  64. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1346 -1293
  65. package/src/centaline/dynamicDrop/index.js +11 -11
  66. package/src/centaline/dynamicDrop/src/dynamicDrop.vue +54 -54
  67. package/src/centaline/dynamicDtd/index.js +11 -11
  68. package/src/centaline/dynamicDtd/src/dynamicDtd.vue +125 -125
  69. package/src/centaline/dynamicDtd/src/dynamicDtdOld.vue +93 -93
  70. package/src/centaline/dynamicFile/index.js +11 -11
  71. package/src/centaline/dynamicFile/src/dynamicFile.vue +289 -288
  72. package/src/centaline/dynamicForm/index.js +24 -24
  73. package/src/centaline/dynamicForm/src/dynamicForm.vue +564 -564
  74. package/src/centaline/dynamicForm/src/dynamicFormList.vue +209 -209
  75. package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +376 -376
  76. package/src/centaline/dynamicGp/index.js +11 -11
  77. package/src/centaline/dynamicGp/src/dynamicGp.vue +27 -27
  78. package/src/centaline/dynamicHyperLink/index.js +10 -10
  79. package/src/centaline/dynamicHyperLink/src/dynamicHyperLink.vue +54 -54
  80. package/src/centaline/dynamicInput/index.js +35 -35
  81. package/src/centaline/dynamicInput/src/dynamicInput.vue +35 -35
  82. package/src/centaline/dynamicInputNumber/index.js +11 -11
  83. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +157 -157
  84. package/src/centaline/dynamicIti/index.js +11 -11
  85. package/src/centaline/dynamicIti/src/dynamicIti.vue +148 -148
  86. package/src/centaline/dynamicL/index.js +11 -11
  87. package/src/centaline/dynamicL/src/dynamicL.vue +37 -37
  88. package/src/centaline/dynamicLabel/index.js +11 -11
  89. package/src/centaline/dynamicLabel/src/dynamicLabel.vue +73 -73
  90. package/src/centaline/dynamicLs/index.js +22 -22
  91. package/src/centaline/dynamicLs/src/dynamicLs.vue +233 -233
  92. package/src/centaline/dynamicMo/index.js +13 -13
  93. package/src/centaline/dynamicMo/src/dynamicMo.vue +421 -421
  94. package/src/centaline/dynamicMt/index.js +11 -11
  95. package/src/centaline/dynamicMt/src/dynamicMt.vue +44 -44
  96. package/src/centaline/dynamicPlaceHolder/index.js +10 -10
  97. package/src/centaline/dynamicPlaceHolder/src/dynamicPlaceHolder.vue +29 -29
  98. package/src/centaline/dynamicPopupSearchList/index.js +11 -11
  99. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchList.vue +157 -157
  100. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchListTable.vue +239 -239
  101. package/src/centaline/dynamicRichText/index.js +11 -11
  102. package/src/centaline/dynamicRichText/src/dynamicRichText.vue +33 -33
  103. package/src/centaline/dynamicSearchList/index.js +11 -11
  104. package/src/centaline/dynamicSearchList/src/dynamicSearchCategory.vue +121 -121
  105. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +135 -135
  106. package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +206 -206
  107. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1082 -1069
  108. package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +30 -30
  109. package/src/centaline/dynamicSearchList/src/dynamicTableTip.vue +46 -46
  110. package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +61 -61
  111. package/src/centaline/dynamicSeg/index.js +11 -11
  112. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +100 -100
  113. package/src/centaline/dynamicSensitiveEye/index.js +11 -11
  114. package/src/centaline/dynamicSensitiveEye/src/dynamicSensitiveEye.vue +74 -74
  115. package/src/centaline/dynamicSo/index.js +14 -14
  116. package/src/centaline/dynamicSo/src/dynamicSo.vue +329 -328
  117. package/src/centaline/dynamicSo/src/dynamicSo/345/211/257/346/234/254.vue +69 -69
  118. package/src/centaline/dynamicSos/index.js +14 -14
  119. package/src/centaline/dynamicSos/src/dynamicSos - /345/244/215/345/210/266.vue" +223 -223
  120. package/src/centaline/dynamicSos/src/dynamicSos.vue +261 -260
  121. package/src/centaline/dynamicSw/index.js +11 -11
  122. package/src/centaline/dynamicSw/src/dynamicSw.vue +74 -74
  123. package/src/centaline/dynamicT/index.js +11 -11
  124. package/src/centaline/dynamicT/src/dynamicT.vue +79 -79
  125. package/src/centaline/dynamicTab/index.js +11 -11
  126. package/src/centaline/dynamicTab/src/dynamicTab.vue +49 -49
  127. package/src/centaline/dynamicTabs/index.js +11 -11
  128. package/src/centaline/dynamicTabs/src/dynamicTabs.vue +69 -69
  129. package/src/centaline/dynamicTags/index.js +13 -13
  130. package/src/centaline/dynamicTags/src/dynamicTags - /345/244/215/345/210/266.vue" +391 -391
  131. package/src/centaline/dynamicTags/src/dynamicTags.vue +427 -427
  132. package/src/centaline/dynamicTimeSelect/index.js +11 -11
  133. package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +141 -141
  134. package/src/centaline/dynamicTree/index.js +11 -11
  135. package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -66
  136. package/src/centaline/dynamicTree/src/dynamicTree.vue +233 -233
  137. package/src/centaline/dynamicTree/src/dynamicTreeList.vue +74 -74
  138. package/src/centaline/formData/index.js +290 -290
  139. package/src/centaline/imgPreview/index.js +42 -42
  140. package/src/centaline/imgPreview/src/imgPreview.vue +26 -26
  141. package/src/centaline/index.js +51 -51
  142. package/src/centaline/loader/index.js +157 -157
  143. package/src/centaline/loader/src/ctl/Base.js +270 -261
  144. package/src/centaline/loader/src/ctl/Button.js +44 -44
  145. package/src/centaline/loader/src/ctl/Cb.js +27 -27
  146. package/src/centaline/loader/src/ctl/Checkbox.js +107 -107
  147. package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +162 -162
  148. package/src/centaline/loader/src/ctl/D.js +31 -31
  149. package/src/centaline/loader/src/ctl/Detail.js +228 -175
  150. package/src/centaline/loader/src/ctl/Dtd.js +115 -115
  151. package/src/centaline/loader/src/ctl/DtdOld.js +129 -129
  152. package/src/centaline/loader/src/ctl/File.js +292 -292
  153. package/src/centaline/loader/src/ctl/Form.js +380 -380
  154. package/src/centaline/loader/src/ctl/FormList.js +428 -428
  155. package/src/centaline/loader/src/ctl/GM.js +20 -20
  156. package/src/centaline/loader/src/ctl/Gp.js +9 -9
  157. package/src/centaline/loader/src/ctl/Hd.js +13 -13
  158. package/src/centaline/loader/src/ctl/HyperLink.js +24 -24
  159. package/src/centaline/loader/src/ctl/InputNumber.js +51 -51
  160. package/src/centaline/loader/src/ctl/Iti.js +108 -108
  161. package/src/centaline/loader/src/ctl/L.js +18 -18
  162. package/src/centaline/loader/src/ctl/Mo.js +183 -183
  163. package/src/centaline/loader/src/ctl/Mt.js +20 -20
  164. package/src/centaline/loader/src/ctl/PlaceHolder.js +15 -15
  165. package/src/centaline/loader/src/ctl/Router.js +273 -273
  166. package/src/centaline/loader/src/ctl/SearchCategory.js +54 -54
  167. package/src/centaline/loader/src/ctl/SearchScreen.js +236 -236
  168. package/src/centaline/loader/src/ctl/SearchTable.js +787 -772
  169. package/src/centaline/loader/src/ctl/Seg.js +37 -37
  170. package/src/centaline/loader/src/ctl/SensitiveEye.js +65 -65
  171. package/src/centaline/loader/src/ctl/So.js +117 -117
  172. package/src/centaline/loader/src/ctl/Sos.js +128 -128
  173. package/src/centaline/loader/src/ctl/Sw.js +27 -27
  174. package/src/centaline/loader/src/ctl/T.js +65 -65
  175. package/src/centaline/loader/src/ctl/Tabs.js +57 -57
  176. package/src/centaline/loader/src/ctl/Tags.js +191 -191
  177. package/src/centaline/loader/src/ctl/TimeSelect.js +87 -87
  178. package/src/centaline/loader/src/ctl/Tree.js +151 -151
  179. package/src/centaline/loader/src/ctl/Ttts.js +78 -78
  180. package/src/centaline/loader/src/ctl/lib/Enum.js +580 -563
  181. package/src/centaline/loader/src/ctl/lib/LibFunction.js +364 -364
  182. package/src/centaline/loader/src/ctl.js +36 -36
  183. package/src/centaline/mixins/dynamicElement.js +151 -151
  184. package/src/centaline/mixins/dynamicSelect.js +84 -84
  185. package/src/centaline/mixins/emitter.js +33 -33
  186. package/src/centaline/progress/index.js +11 -11
  187. package/src/centaline/progress/src/progress.vue +70 -70
  188. package/src/centaline/quickInput/src/quickInput.vue +64 -64
  189. package/src/centaline/selectOption/src/selectOption.vue +61 -61
  190. package/src/centaline/selectOption/src/selectOptionVertical.vue +80 -80
  191. package/src/centaline/templateControls/index.js +17 -17
  192. package/src/centaline/templateControls/src/dynamicTableA.vue +20 -20
  193. package/src/centaline/templateControls/src/dynamicTableCurrency.vue +62 -62
  194. package/src/centaline/templateControls/src/dynamicTableImg.vue +25 -25
  195. package/src/centaline/templates/index.js +34 -34
  196. package/src/centaline/templates/src/ContractSearch.js +67 -67
  197. package/src/centaline/templates/src/test.js +44 -44
  198. package/src/centaline/validate/index.js +332 -332
  199. package/src/main.js +55 -46
  200. package/src/router/index.js +44 -44
  201. package/wwwroot/static/centaline/centaline-data-driven.js +1 -1
  202. 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;