gxd-uni-library-editx 1.0.0

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 (215) hide show
  1. package/.editorconfig +14 -0
  2. package/README.md +447 -0
  3. package/index.js +3 -0
  4. package/package.json +104 -0
  5. package/postcss.config.js +22 -0
  6. package/settings.js.tpl +68 -0
  7. package/src/XdAppClass.1.0.js +257 -0
  8. package/src/XdAppClass.js +150 -0
  9. package/src/components/XdAddress/XdAddress.vue +579 -0
  10. package/src/components/XdAddressSelect/XdAddressSelect.vue +243 -0
  11. package/src/components/XdBaiduMap/XdBaiduMap.vue +204 -0
  12. package/src/components/XdBaiduOverlay/XdBaiduOverlay.vue +345 -0
  13. package/src/components/XdBaiduSearch/XdBaiduSearch.vue +354 -0
  14. package/src/components/XdBar/XdBar.vue +339 -0
  15. package/src/components/XdButton/XdButton.vue +288 -0
  16. package/src/components/XdCartList/XdCartList.vue +791 -0
  17. package/src/components/XdCartNoStoreList/XdCartNoStoreList.vue +747 -0
  18. package/src/components/XdCity/XdCity.vue +620 -0
  19. package/src/components/XdCity/city.js +93 -0
  20. package/src/components/XdCity/testData.js +124 -0
  21. package/src/components/XdCityLocation/XdCityLocation.vue +314 -0
  22. package/src/components/XdCityLocation/jweixin.js +72 -0
  23. package/src/components/XdCityShow/XdCityShow.vue +354 -0
  24. package/src/components/XdClipImage/XdClipImage.vue +879 -0
  25. package/src/components/XdCoins/XdCoins.vue +66 -0
  26. package/src/components/XdConfirm/XdConfirm.vue +240 -0
  27. package/src/components/XdContentXss/XdContentXss.vue +71 -0
  28. package/src/components/XdDailog/XdDailog.vue +258 -0
  29. package/src/components/XdDate/XdDataItemOne.vue +236 -0
  30. package/src/components/XdDate/XdDate.vue +1081 -0
  31. package/src/components/XdDate/XdDateItem.vue +316 -0
  32. package/src/components/XdDate/XdDateTime.vue +929 -0
  33. package/src/components/XdDate/i18n/en.json +19 -0
  34. package/src/components/XdDate/i18n/index.js +8 -0
  35. package/src/components/XdDate/i18n/zh-Hans.json +19 -0
  36. package/src/components/XdDate/i18n/zh-Hant.json +19 -0
  37. package/src/components/XdDate/keypress.js +45 -0
  38. package/src/components/XdDate/util.js +418 -0
  39. package/src/components/XdDownDrawer/XdDownDrawer.vue +176 -0
  40. package/src/components/XdEditPwd/XdEditPwd.vue +305 -0
  41. package/src/components/XdEnterOrderList/XdEnterOrderList.vue +413 -0
  42. package/src/components/XdExpressTimeLine/XdExpressTimeLine.vue +280 -0
  43. package/src/components/XdFilter/XdFilter.vue +541 -0
  44. package/src/components/XdFontIcon/XdFontIcon.vue +165 -0
  45. package/src/components/XdFontIcon/css/icon.less +498 -0
  46. package/src/components/XdFooterBar/XdFooterBar.vue +291 -0
  47. package/src/components/XdFooterTabbar/XdFooterTabbar.vue +284 -0
  48. package/src/components/XdForm/XdForm.vue +481 -0
  49. package/src/components/XdForm/validate.js +486 -0
  50. package/src/components/XdFormCheckbox/XdFormCheckbox.vue +858 -0
  51. package/src/components/XdFormDate.vue +187 -0
  52. package/src/components/XdFormInput/XdFormInput.vue +535 -0
  53. package/src/components/XdFormInput/common.js +56 -0
  54. package/src/components/XdFormItem/XdFormItem.vue +583 -0
  55. package/src/components/XdFormSelect/XdFormSelect.vue +119 -0
  56. package/src/components/XdImage/XdImage.vue +113 -0
  57. package/src/components/XdItemCardUser/XdItemCardUser.vue +232 -0
  58. package/src/components/XdItemFilmImage/XdItemFilmImage.vue +146 -0
  59. package/src/components/XdItemFilmText/XdItemFilmText.vue +83 -0
  60. package/src/components/XdItemPhysical/XdItemPhysical.vue +410 -0
  61. package/src/components/XdItemPhysicalPack/XdItemPhysicalPack.vue +240 -0
  62. package/src/components/XdItemStore/XdItemStore.vue +236 -0
  63. package/src/components/XdItemUserInfo/XdItemUserInfo.vue +175 -0
  64. package/src/components/XdJson/XdJson.vue +398 -0
  65. package/src/components/XdKeyValue/XdKeyValue.vue +150 -0
  66. package/src/components/XdLabelNew/XdLabelNew.vue +193 -0
  67. package/src/components/XdLayout/XdLayout.vue +634 -0
  68. package/src/components/XdLoading/XdLoading.vue +165 -0
  69. package/src/components/XdMore/XdMore.vue +66 -0
  70. package/src/components/XdMpHtml/XdMpHtml.vue +458 -0
  71. package/src/components/XdMpHtml/node/node.vue +536 -0
  72. package/src/components/XdMpHtml/parser.js +1260 -0
  73. package/src/components/XdMpHtml/static/js/handler.js +1 -0
  74. package/src/components/XdMpHtml/static/js/uni.webview.min.js +1 -0
  75. package/src/components/XdMpHtml/static/local.html +1 -0
  76. package/src/components/XdMy/XdMy.vue +294 -0
  77. package/src/components/XdMySuccess/XdMySuccess.vue +603 -0
  78. package/src/components/XdNavTab/XdNavTab.vue +147 -0
  79. package/src/components/XdNoData/XdNoData.vue +87 -0
  80. package/src/components/XdNoticeBar/XdNoticeBar.vue +501 -0
  81. package/src/components/XdNumber/XdNumber.vue +210 -0
  82. package/src/components/XdNumberUni/XdNumberUni.vue +270 -0
  83. package/src/components/XdNumberUni/readme.md +42 -0
  84. package/src/components/XdOnlineConfirm/XdOnlineConfirm.vue +385 -0
  85. package/src/components/XdOnlineDetail/XdOnlineDetail.vue +332 -0
  86. package/src/components/XdOnlinePay/XdOnlinePay.vue +349 -0
  87. package/src/components/XdOnlineSchedule/XdOnlineSchedule.vue +453 -0
  88. package/src/components/XdOnlineSeat/XdOnlineSeat.vue +796 -0
  89. package/src/components/XdOnlineSeatMove/XdOnlineSeatMove.vue +1012 -0
  90. package/src/components/XdPayCombo/XdPayCombo.vue +118 -0
  91. package/src/components/XdPreviewImage/XdPreviewImage.vue +372 -0
  92. package/src/components/XdPwPay/XdPwPay.vue +214 -0
  93. package/src/components/XdRadio/XdRadio.vue +151 -0
  94. package/src/components/XdRangeSlider/XdRangeSlider.vue +355 -0
  95. package/src/components/XdRedName/XdRedName.vue +35 -0
  96. package/src/components/XdSearchBar/XdSearchBar.vue +286 -0
  97. package/src/components/XdSelect/XdSelect.vue +382 -0
  98. package/src/components/XdSelectCity/XdSelectCity.vue +270 -0
  99. package/src/components/XdSelectTime/XdSelectTime.vue +342 -0
  100. package/src/components/XdStar/XdStar.vue +261 -0
  101. package/src/components/XdStoreCashier/XdStoreCashier.vue +526 -0
  102. package/src/components/XdStoreItem/XdStoreItem.vue +400 -0
  103. package/src/components/XdStoreOrderDetail/XdStoreOrderDetail.vue +1571 -0
  104. package/src/components/XdStoreOrderList/XdStoreOrderList.vue +450 -0
  105. package/src/components/XdStoreProductInfo/XdStoreProductInfo.vue +940 -0
  106. package/src/components/XdStoreProductType/XdStoreProductType.vue +307 -0
  107. package/src/components/XdSuccess/XdSuccess.vue +527 -0
  108. package/src/components/XdSwipeSelect/XdSwipeSelect.vue +99 -0
  109. package/src/components/XdSwiper/XdSwiper.vue +124 -0
  110. package/src/components/XdSwitch/XdSwitch.vue +204 -0
  111. package/src/components/XdTab/XdTab.vue +220 -0
  112. package/src/components/XdTabScroll/XdTabScroll.vue +212 -0
  113. package/src/components/XdTag/XdTag.vue +423 -0
  114. package/src/components/XdTimeLine/XdTimeLine.vue +121 -0
  115. package/src/components/XdTips/XdTips.vue +212 -0
  116. package/src/components/XdTipsBlock/XdTipsBlock.vue +141 -0
  117. package/src/components/XdTitleSection/XdTitleSection.vue +152 -0
  118. package/src/components/XdTitleTab/XdTitleTab.vue +227 -0
  119. package/src/components/XdUnit/XdUnit.vue +206 -0
  120. package/src/components/XdUpload/XdUpload.vue +197 -0
  121. package/src/components/XdUploadImage/XdUploadImage.vue +145 -0
  122. package/src/components/Xdlogs/XdLogs.vue +144 -0
  123. package/src/components/autoload.js +211 -0
  124. package/src/components/swipeAction/UniSwipeAction.vue +43 -0
  125. package/src/components/swipeActionItem/UniSwipeActionItem.vue +386 -0
  126. package/src/components/swipeActionItem/bindingx.js +298 -0
  127. package/src/components/swipeActionItem/index.wxs +321 -0
  128. package/src/components/swipeActionItem/isPC.js +18 -0
  129. package/src/components/swipeActionItem/mpalipay.js +210 -0
  130. package/src/components/swipeActionItem/mpother.js +252 -0
  131. package/src/components/swipeActionItem/mpwxs.js +140 -0
  132. package/src/dome/dome/address.vue +415 -0
  133. package/src/dome/dome/auth/login.vue +166 -0
  134. package/src/dome/dome/baidu_show.vue +20 -0
  135. package/src/dome/dome/cake.vue +186 -0
  136. package/src/dome/dome/cart.vue +205 -0
  137. package/src/dome/dome/cart_store.vue +149 -0
  138. package/src/dome/dome/cashier/cashier.vue +73 -0
  139. package/src/dome/dome/cashier/check_cashier.vue +469 -0
  140. package/src/dome/dome/cashier/success.vue +127 -0
  141. package/src/dome/dome/city.vue +148 -0
  142. package/src/dome/dome/cityData.js +9 -0
  143. package/src/dome/dome/clip.vue +82 -0
  144. package/src/dome/dome/date/date.vue +273 -0
  145. package/src/dome/dome/date/selected.js +315 -0
  146. package/src/dome/dome/dcom/app1.vue +13 -0
  147. package/src/dome/dome/dcom/app2.vue +13 -0
  148. package/src/dome/dome/dcom/app3.vue +13 -0
  149. package/src/dome/dome/dcom/app4.vue +13 -0
  150. package/src/dome/dome/dcom/app5.vue +13 -0
  151. package/src/dome/dome/dcom/index.vue +1 -0
  152. package/src/dome/dome/debug/debug.vue +95 -0
  153. package/src/dome/dome/docache/docache.vue +88 -0
  154. package/src/dome/dome/express.vue +269 -0
  155. package/src/dome/dome/form.vue +312 -0
  156. package/src/dome/dome/icon.js +125 -0
  157. package/src/dome/dome/icon.vue +93 -0
  158. package/src/dome/dome/index.vue +725 -0
  159. package/src/dome/dome/item.vue +236 -0
  160. package/src/dome/dome/json/json.vue +88 -0
  161. package/src/dome/dome/layout.vue +105 -0
  162. package/src/dome/dome/line.vue +113 -0
  163. package/src/dome/dome/map/search.vue +70 -0
  164. package/src/dome/dome/my.vue +171 -0
  165. package/src/dome/dome/notice.vue +93 -0
  166. package/src/dome/dome/online/confirm.vue +92 -0
  167. package/src/dome/dome/online/detail.vue +80 -0
  168. package/src/dome/dome/online/pay.vue +78 -0
  169. package/src/dome/dome/online/schedule.vue +73 -0
  170. package/src/dome/dome/online/seat.vue +98 -0
  171. package/src/dome/dome/order/detail.vue +166 -0
  172. package/src/dome/dome/order/enter_order.vue +294 -0
  173. package/src/dome/dome/order/list.vue +219 -0
  174. package/src/dome/dome/order/order.js +18 -0
  175. package/src/dome/dome/order/success.vue +68 -0
  176. package/src/dome/dome/product.vue +179 -0
  177. package/src/dome/dome/store_cashier.vue +67 -0
  178. package/src/dome/dome/swiper.vue +32 -0
  179. package/src/dome/dome/webview.vue +61 -0
  180. package/src/install.js +183 -0
  181. package/src/main/address/address.vue +251 -0
  182. package/src/main/cart/cart.vue +149 -0
  183. package/src/main/cashier/cashier.vue +72 -0
  184. package/src/main/cashier/check_cashier.vue +483 -0
  185. package/src/main/city/city.vue +149 -0
  186. package/src/main/date/date.vue +260 -0
  187. package/src/main/order/order.js +19 -0
  188. package/src/main/order/order.vue +222 -0
  189. package/src/main/product/detail.vue +121 -0
  190. package/src/main/product/type.vue +108 -0
  191. package/src/main/search/search.vue +501 -0
  192. package/src/pages.json +337 -0
  193. package/src/plugins/CreatedComponentsPlugin.js +19 -0
  194. package/src/plugins/JsonRename.js +72 -0
  195. package/src/plugins/SetAppParams.js +171 -0
  196. package/src/project.js +18 -0
  197. package/src/utils/Cookie.js +68 -0
  198. package/src/utils/Runtime.js +105 -0
  199. package/src/utils/Storage.js +104 -0
  200. package/src/utils/XdNetwork.js +133 -0
  201. package/src/utils/helper.js +1321 -0
  202. package/src/utils/nourl.js +95 -0
  203. package/src/utils/project.js +17 -0
  204. package/src/utils/xd.auth.js +61 -0
  205. package/src/utils/xd.base.js +474 -0
  206. package/src/utils/xd.common.js +240 -0
  207. package/src/utils/xd.event.js +99 -0
  208. package/src/utils/xd.frame.js +96 -0
  209. package/src/utils/xd.path.js +96 -0
  210. package/src/utils/xdAppLog.js +170 -0
  211. package/src/utils/xdWxLog.js +302 -0
  212. package/src/utils/xdh5log.js +307 -0
  213. package/src/websetting.js +64 -0
  214. package/tsconfig.json +9 -0
  215. package/xd.less +180 -0
@@ -0,0 +1,240 @@
1
+ 'use strict';
2
+
3
+ import {Base64} from "js-base64";
4
+ import {
5
+ baseCheckVarType,
6
+ baseFormDataSendParam,
7
+ baseGetHost,
8
+ baseCloneDeep,
9
+ getSetting,
10
+ baseIsEmpty
11
+ } from "@/utils/xd.base";
12
+
13
+
14
+ import storage from "@/common/storage";
15
+ import {PLATFORM_PARAM_SETTING, ROOT_ENTRY} from "@/project";
16
+
17
+ //#ifdef H5
18
+ import xdLog from "@/utils/xdh5log";
19
+ import cookie from "@/common/cookie";
20
+ //#endif
21
+
22
+
23
+ /**
24
+ * @description 检查是否需要开始上报日志与添加token参数
25
+ * @param config {object}
26
+ * @returns {boolean} true=>不开启 false=>开启
27
+ */
28
+ export function checkNotLogs(config){
29
+ let temp = false;
30
+ getSetting('apiWhiteList').map(item => {
31
+ let reg = new RegExp(item);
32
+ if (reg.test(config.url)) temp = true
33
+ });
34
+ return temp;
35
+ }
36
+
37
+
38
+
39
+ /**
40
+ * @description 检查变量类型
41
+ * @param obj
42
+ * @returns {*}
43
+ */
44
+ export function xdCheckVarType(obj) {
45
+ return baseCheckVarType(obj)
46
+ }
47
+
48
+ /**
49
+ * @description 初始化请求对象
50
+ * @param obj
51
+ * @returns {*|URLSearchParams}
52
+ */
53
+ export function xdFormDataSendParam(obj) {
54
+ return baseFormDataSendParam(obj)
55
+ }
56
+
57
+
58
+ /**
59
+ * @description 获取用户请求参数相关数据
60
+ * @param request {Request}
61
+ * @param response
62
+ */
63
+ export function xdGetPesponseParams(request, response) {
64
+ let useTime = new Date().getTime() - request.start;
65
+
66
+ //原始数据
67
+ let sourceEespons = response;
68
+ if (xdCheckVarType(response) === 'object'
69
+ || xdCheckVarType(response) === 'array'
70
+ ) {
71
+ sourceEespons = JSON.stringify(sourceEespons);
72
+ }
73
+
74
+ //返回数据为数组或者对象进行序列化
75
+ let responsData = response.data;
76
+ if (xdCheckVarType(responsData) === 'object'
77
+ || xdCheckVarType(responsData) === 'array'
78
+ ) {
79
+ responsData = JSON.stringify(responsData);
80
+ }
81
+
82
+ return {
83
+ url: request.url,
84
+ useTime: `${useTime} ms`,
85
+ status: 'ajax.error',
86
+ params: baseCloneDeep(request.request['data']),
87
+ respons: Base64.encodeURI(responsData),
88
+ sourceEespons: Base64.encodeURI(sourceEespons),
89
+ code: `ajax.${response['statusCode']}`
90
+ };
91
+
92
+ }
93
+
94
+ /**
95
+ * @description 异步请求统一处理
96
+ * @param request {Request}
97
+ * @param response
98
+ * @param resolve
99
+ * @param reject
100
+ * @param clog
101
+ * @param callback
102
+ * @param errorCallback
103
+ */
104
+ export function handlePesponse(
105
+ request,
106
+ response,
107
+ resolve,
108
+ reject,
109
+ clog,
110
+ callback,
111
+ errorCallback
112
+ ) {
113
+
114
+ let $vm = (getApp().globalData && getApp().globalData.$vm) || null;
115
+ let useTime = new Date().getTime() - request.start;
116
+ let requestInfo = xdGetPesponseParams(request, response);
117
+
118
+ //长连接(耗时连接)
119
+ if (getApp().globalData
120
+ && getApp().globalData.$store
121
+ && typeof getApp().saveLogs === 'function'
122
+ && !checkNotLogs(request.options)
123
+ && useTime > getSetting('apiDelay')
124
+ ) {
125
+ requestInfo['status'] = 'ajax.delay';
126
+ clog(`Slow Link:${request.url} ${useTime}ms`, 'red');
127
+ getApp().saveLogs(requestInfo, 'info', 'ajax');
128
+ } else {
129
+ clog(`Fast Link:${request.url} ${useTime}ms`, 'green');
130
+ }
131
+
132
+ //200
133
+ if (response['statusCode'] === 200) {
134
+ resolve(response.data);
135
+ return;
136
+ }
137
+
138
+ //400
139
+ else if (response['statusCode'] === 400) {
140
+ if (!$vm) {
141
+ reject(response);
142
+ throw new Error(response.data.message);
143
+ } else {
144
+ $vm.$xdHideLoading();
145
+ $vm.$xdAlert({
146
+ content: response.data.message,
147
+ time: 1500,
148
+ isClose: false,
149
+ zIndex: 5000,
150
+ type: 'error'
151
+ });
152
+ reject(response);
153
+ }
154
+
155
+ //记录错误日志
156
+ if (typeof getApp().saveLogs === 'function'
157
+ && !checkNotLogs(request.options)
158
+ ) {
159
+ getApp().saveLogs(requestInfo, 'info', 'ajax');
160
+ }
161
+ }
162
+
163
+ //401
164
+ else if (response['statusCode'] === 401) {
165
+ if (!$vm) {
166
+ reject(response);
167
+ throw new Error(response.data.message);
168
+ }
169
+ else {
170
+ reject(response);
171
+ $vm.$xdHideLoading();
172
+ }
173
+ }
174
+
175
+ //500
176
+ else if (response['statusCode'] === 500) {
177
+ if (!$vm) {
178
+ reject(response);
179
+ throw new Error('服务器错误');
180
+ } else {
181
+ $vm.$xdHideLoading();
182
+ reject(response);
183
+ }
184
+
185
+ //记录错误日志
186
+ if (typeof getApp().saveLogs === 'function'
187
+ && !checkNotLogs(request.options)
188
+ ) {
189
+ getApp().saveLogs(requestInfo, 'alert', 'ajax');
190
+ }
191
+ }
192
+
193
+ //404
194
+ else if (response['statusCode'] === 404) {
195
+ if (!$vm) {
196
+ reject(response);
197
+ throw new Error('接口不存在');
198
+ } else {
199
+ $vm.$xdHideLoading();
200
+ reject(response);
201
+ }
202
+
203
+ //记录错误日志
204
+ if (typeof getApp().saveLogs === 'function'
205
+ && !checkNotLogs(request.options)
206
+ ) {
207
+ getApp().saveLogs(requestInfo, 'info', 'ajax');
208
+ }
209
+ }
210
+
211
+ //default
212
+ else {
213
+ let message = '未知错误';
214
+ if (response && response.data && response.data.message) {
215
+ message = response.data.message;
216
+ }
217
+
218
+ //statusCode !== undefined
219
+ if (response['statusCode'] !== undefined) {
220
+ storage.set(`xd.log.${new Date().getTime()}`, {
221
+ logs: {
222
+ ...requestInfo,
223
+ type: 'handle.ajax.default',
224
+ dates: new Date().getTime()
225
+ },
226
+ level: 'alert'
227
+ });
228
+ }
229
+
230
+ if (!$vm) {
231
+ reject(response);
232
+ throw new Error(message);
233
+ } else {
234
+ $vm.$xdHideLoading();
235
+ reject(response);
236
+ }
237
+ }
238
+ }
239
+
240
+
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @description 解析测试数据
5
+ * @param data
6
+ * @returns {*}
7
+ */
8
+ function parseTestData(data){
9
+ if(data === undefined || data === '') return null;
10
+ let testData = null;
11
+ try{
12
+ testData = JSON.parse(data);
13
+ }catch (e) {
14
+ console.error(e);
15
+ testData = null
16
+ }
17
+ return testData;
18
+ }
19
+
20
+ /**
21
+ * @description 检查并调用父级插件中的方法
22
+ * @param fnName {String} 父级中的API方法名
23
+ * @param params {Object}
24
+ * @param params.vm {Vue} vue实例方法
25
+ * @param params.data {Object} 传输参数
26
+ */
27
+ export function jfbRootExec(fnName, params) {
28
+
29
+ //不能为业务插件开发环境
30
+ if (params.vm.settings && params.vm.settings.isBussDev !== true) {
31
+ //判断是否有测试数据
32
+ let testData = parseTestData(params.vm.container['component']['test_data']);
33
+ if (testData !== null) {
34
+ return new Promise((resolve) => {
35
+ resolve(testData);
36
+ });
37
+ }
38
+ }
39
+
40
+ if(params.vm.$root[fnName] &&
41
+ typeof params.vm.$root[fnName] === 'function'
42
+ ) {
43
+ return params.vm.$root[fnName](params.data);
44
+ }
45
+ else {
46
+ throw new Error(JSON.stringify({
47
+ message: '访问的方法不存在',
48
+ fnName,
49
+ data: params.data
50
+ }))
51
+ }
52
+ };
53
+
54
+
55
+
56
+ /**
57
+ * @description 父传子的事件传处理类
58
+ */
59
+ export class JfbEvent {
60
+ constructor(eventName, {vm, data}) {
61
+ this.eventName = eventName;
62
+ this.vm = vm;
63
+ this.refs = vm.refs;
64
+ this.data = data;
65
+ this.init();
66
+ }
67
+
68
+ init() {
69
+ this.refs.map(ref => {
70
+ this.setTime(ref)
71
+ })
72
+ }
73
+
74
+ getRefs(ref){
75
+ if(!this.vm.$refs[ref]) return undefined;
76
+ else {
77
+ if(this.vm.$xdUniHelper.checkVarType(this.vm.$refs[ref]) === 'array') return this.vm.$refs[ref][0];
78
+ else return this.vm.$refs[ref];
79
+ }
80
+ }
81
+
82
+ setTime(ref) {
83
+ let handle = () => {
84
+ setTimeout(() => {
85
+ let refsObj = this.getRefs(ref);
86
+ if (refsObj && typeof refsObj['onCheck'] === 'function') {
87
+ if (typeof refsObj[this.eventName] === 'function') {
88
+ refsObj[this.eventName](this.data);
89
+ }
90
+ } else {
91
+ handle()
92
+ }
93
+ }, 10)
94
+ };
95
+ handle();
96
+ }
97
+ }
98
+
99
+
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ import Vue from 'vue';
4
+
5
+ let __iframe = null;
6
+
7
+ class xdFrame {
8
+ constructor(){
9
+ this.setDoMain();
10
+ this.bus = new Vue();
11
+ }
12
+
13
+ setDoMain(){
14
+ let reg = /^(.*)\.(.*)\.(com|cn|org)$/;
15
+ let host = '' || window.location.host;
16
+ if(reg.test(host)) {
17
+ let temp = host.split('.');
18
+ temp = temp.splice(-2);
19
+ document.domain = temp.join('.');
20
+ }
21
+ }
22
+
23
+ /**
24
+ * @description 获取父窗口window对象
25
+ * @returns {any | Window}
26
+ */
27
+ getParent(){
28
+ return parent.window
29
+ }
30
+
31
+ /**
32
+ * @description 获取子窗口window对象
33
+ * @param iframeId
34
+ * @returns {WindowProxy}
35
+ */
36
+ getChildren(iframeId){
37
+ return document.getElementById(iframeId).contentWindow;
38
+ }
39
+
40
+ /**
41
+ * @description 发送数据方法
42
+ * @param event {String} 事件名称
43
+ * @param data {Object} 数据对象
44
+ * @param isParent {Boolean} 发送给子或者父窗口 默认:true true=>子传父 false=> 父传子
45
+ * @param iframeID {String} 当是获取子窗口时候,需要iframeID
46
+ */
47
+ send(event, data , isParent=true, iframeID = ''){
48
+ let win = null;
49
+ if(isParent) win = this.getParent(); //获取父窗口window对象
50
+ else win = this.getChildren(iframeID); //获取子窗口window对象
51
+ win.XdBus.message(event, data); //调用子或者父窗口中的预设方法message方法进行数据透传
52
+ this.message(event, data) //通知本地进行数据透传
53
+ }
54
+
55
+ /**
56
+ * @description 接受数据方法(把接受到的数据发送给总线bus)
57
+ * @param event {String} 事件名称
58
+ * @param data {Object} 数据
59
+ */
60
+ message(event, data){
61
+ this.bus.$emit(event, data);
62
+ }
63
+
64
+ /**
65
+ * @description 注册事件
66
+ * @param event {String} 事件名称
67
+ * @param callback {Function} 事件处理方法
68
+ */
69
+ addEvent(event, callback){
70
+ this.bus.$on(event, callback);
71
+ }
72
+
73
+ /**
74
+ * @description 获取父级窗口中的全局方法引用
75
+ * @param fnName {String} 方法名字
76
+ */
77
+ getParentApi(fnName) {
78
+ return this.getParent()['$boardApi'][fnName];
79
+ }
80
+
81
+ /**
82
+ * @description 获取父级窗口中的全局属性值
83
+ * @param attr {String} 属性名字
84
+ */
85
+ getParentData(attr) {
86
+ return this.getParent()['$boardData'][attr];
87
+ }
88
+ }
89
+
90
+ export default function () {
91
+ if(__iframe === null) {
92
+ window['XdBus'] = __iframe = new xdFrame();
93
+ }
94
+ return __iframe;
95
+ };
96
+
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ //https://www.jianshu.com/p/9b8f2cdfcbe1
4
+ //https://segmentfault.com/a/1190000014161454
5
+
6
+ const {pathToRegexp, match, parse, compile} = require("path-to-regexp");
7
+
8
+ /**
9
+ * @description 检查变量类型
10
+ * @param obj
11
+ * @returns {*}
12
+ */
13
+ export function check(obj) {
14
+ let toString = Object.prototype.toString;
15
+ let map = {
16
+ '[object Boolean]': 'boolean',
17
+ '[object Number]': 'number',
18
+ '[object String]': 'string',
19
+ '[object Function]': 'function',
20
+ '[object Array]': 'array',
21
+ '[object Date]': 'date',
22
+ '[object RegExp]': 'regExp',
23
+ '[object Undefined]': 'undefined',
24
+ '[object Null]': 'null',
25
+ '[object Object]': 'object',
26
+ '[object Error]': 'error'
27
+ };
28
+ return map[toString.call(obj)];
29
+ }
30
+
31
+ /**
32
+ * @description 是否有特殊字符
33
+ * @param path
34
+ * @returns {boolean}
35
+ */
36
+ export function hasSpecialPlaceholder(path) {
37
+ return /(:[a-zA-z0-9_]+)/g.test(path)
38
+ }
39
+
40
+
41
+ /**
42
+ * @description 解析字符操作带有 ":xxx"并且不带"?" 的参数,并返回数组
43
+ * @param path {String} Api地址
44
+ * @param isAllParams {boolean} 是否返回所有带有":xxx" false => :xxx true=>:xxx or :xxx?
45
+ * @returns {[]}
46
+ */
47
+ export function parsePathToParams(path, isAllParams = true){
48
+ return parse(path).filter(item=>{
49
+ if(isAllParams) return check(item) === 'object' && item.name;
50
+ else return check(item) === 'object' && item.name && item.modifier !== '?';
51
+
52
+ }).map(item=>{
53
+ return item.name
54
+ })
55
+ }
56
+
57
+ /**
58
+ * @description 返回替换后带参数的api地址,并删除替换的参数
59
+ * @param path {String} Api地址
60
+ * @param params 参数对象
61
+ * @returns {{params: *, url: *}} 返回参数的api地址API
62
+ */
63
+ export function compilePath(path,params) {
64
+ let data = JSON.parse(JSON.stringify(params));
65
+ let paramskey = parsePathToParams(path, false);
66
+ let compileObj = compile(path);
67
+ let paramLen = paramskey.filter(key=>{
68
+ return params[key];
69
+ });
70
+
71
+ //传入需要替换参数小于需要替换参数个数报错
72
+ if(paramLen.length < paramskey.length) {
73
+ throw new Error(JSON.stringify({message: '参数个数错误',source: params, target: paramskey, path: path}))
74
+ }
75
+
76
+ let url = compileObj(data);
77
+ if(parsePathToParams(path).length >0) {
78
+ parsePathToParams(path).map(item=>{
79
+ if(data[item]) delete data[item];
80
+ })
81
+ }
82
+ return {url, result: data};
83
+ }
84
+
85
+
86
+ /**
87
+ * @description 返回值统一处理
88
+ * @param res {Object}
89
+ * @param isOpenNoResultKey {Boolean}
90
+ */
91
+ export function returnData(res, isOpenNoResultKey) {
92
+ res = (res.result && (res.code || res.msg)) ? res.result : res;
93
+ res = (res.data && (res.code || res.msg)) ? res.data : res;
94
+ if (isOpenNoResultKey) res = {data: res};
95
+ return res;
96
+ }
@@ -0,0 +1,170 @@
1
+ 'use strict';
2
+ import {Base64} from 'js-base64';
3
+ import {runtime} from "@/common/runtime";
4
+
5
+ const settings = require('./../../settings');
6
+ const md5 = require('md5');
7
+ import Vue from 'vue';
8
+ import store from "@/store";
9
+ import {
10
+ baseIsEmpty,
11
+ baseJsDateToTime,
12
+ baseGetHost
13
+ } from "@/utils/xd.base";
14
+
15
+
16
+ let logInstance = null;
17
+
18
+
19
+ class Logs {
20
+ constructor() {
21
+ this.saveUploadedLog = [];
22
+ this.onUpdateKeyword = [
23
+ '$vm', //跟uniApp uni.createSelectorQuery() 有关
24
+ "e.x", //跟uniApp滚动组件有关
25
+ 'null is not an object (evaluating', //跟uniApp滚动组件有关
26
+ "Cannot read property 'x' of ",// 跟uniApp滚动组件有关
27
+ ];
28
+ }
29
+
30
+
31
+ getSystemInfo() {
32
+ let userInfo = {};
33
+ if (getApp().globalData
34
+ && getApp().globalData.$xd
35
+ && getApp().globalData.$xd.userInfo
36
+ ) {
37
+ userInfo = Base64.encodeURI(JSON.stringify(getApp().globalData.$xd.userInfo));
38
+ }
39
+
40
+ const {
41
+ SDKVersion,
42
+ model,
43
+ system,
44
+ version,
45
+ deviceOrientation
46
+ } = uni.getSystemInfoSync();
47
+
48
+ return {
49
+ platform: 'weixin',
50
+ project: settings.system,
51
+ SDKVersion,
52
+ model,
53
+ system,
54
+ version,
55
+ deviceOrientation,
56
+ userInfo,
57
+ }
58
+ }
59
+
60
+
61
+ /**
62
+ * @description 上报日志
63
+ * @param log {Object} 上报日志内容
64
+ * @param type {String} 上报日志内容类型
65
+ * type = global(全局错误)
66
+ * type = onerror(系统捕获全局错误信息)
67
+ * type = promise(异步请求全局捕获错误)
68
+ * type = info(普通日志上报错误)
69
+ * type = debug(上报调试日志)
70
+ * type = ajax(返回异步请求字符串错误)
71
+ * type = unkown(返回异步请求字符串错误)
72
+ * tyoe = setting.error (项目配置错误)
73
+ * type = entry.index (记录访问首页入口来源)
74
+ * type = ajax.default {记录异步请求不知道的code的值}
75
+ * @param level {String} 上报级别 alert|info|debug
76
+ */
77
+ push(log, level = 'alert', type = "info") {
78
+ if (level === 'debug') {
79
+ if (settings.isDebug) {
80
+ level = 'info';
81
+ type = 'debug';
82
+ } else return;
83
+ }
84
+ type = `handle.${type}`;
85
+ this.updateLog(log, type, level);
86
+ }
87
+
88
+ ajaxLogs(data) {
89
+ store['dispatch']('saveLogs', data)
90
+ .then(res => {
91
+ })
92
+ .catch(res => {
93
+ })
94
+ }
95
+
96
+ /**
97
+ * @description 上报日志
98
+ * @param log
99
+ * @param type
100
+ * @param level
101
+ */
102
+ updateLog(log, type, level) {
103
+ console.log(log, type, level);
104
+ let system = this.getSystemInfo();
105
+ if (level === 'info') system = {}
106
+ let logs = {...system, type, ...log};
107
+ let key = 'xd.log.' + md5(JSON.stringify(logs));
108
+ if (!this.saveUploadedLog.includes(key)) {
109
+ this.ajaxLogs({
110
+ baseApi: getApp().globalData.$xd.brandInfo['api_host'],
111
+ level: level,
112
+ content: JSON.stringify({
113
+ date: baseJsDateToTime(new Date().getTime() / 1000),
114
+ ...logs
115
+ }),
116
+ });
117
+ this.saveUploadedLog.push(key);
118
+ }
119
+ }
120
+
121
+ checkMessage(error) {
122
+ let errorStr = error;
123
+ if (Object.prototype.toString.call(error) === '[object Error]') {
124
+ errorStr = JSON.stringify(runtime().getErrorInfo(error));
125
+ }
126
+ if (Object.prototype.toString.call(error) === '[object String]') {
127
+ errorStr = error;
128
+ }
129
+ if (Object.prototype.toString.call(error) === '[object Object]') {
130
+ errorStr = JSON.stringify(error);
131
+ }
132
+
133
+ let isUpdate = true;
134
+ this.onUpdateKeyword.map((keyword) => {
135
+ if (errorStr.indexOf(keyword) !== -1) {
136
+ isUpdate = false
137
+ }
138
+ });
139
+ return isUpdate === false ? isUpdate : Base64.encodeURI(errorStr);
140
+ }
141
+
142
+ /**
143
+ * @description 统一Promise catch处理
144
+ * @param error {Error|String} 错误对象(new Error())|字符串当为字符串时候,全局捕获不会处理
145
+ * @param callback 回调事件
146
+ */
147
+ catch(error, callback = null) {
148
+ let messageStr = logInstance.checkMessage(error);
149
+ if (messageStr !== false) {
150
+ logInstance.push(
151
+ {error: messageStr},
152
+ 'alert',
153
+ 'catch'
154
+ );
155
+ }
156
+ if (typeof callback === 'function') callback()
157
+ }
158
+ }
159
+
160
+ function xdWxlog() {
161
+ if (logInstance === null) {
162
+ logInstance = new Logs();
163
+ }
164
+ return logInstance;
165
+ }
166
+
167
+
168
+ export default xdWxlog();
169
+
170
+