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.
- package/.editorconfig +14 -0
- package/README.md +447 -0
- package/index.js +3 -0
- package/package.json +104 -0
- package/postcss.config.js +22 -0
- package/settings.js.tpl +68 -0
- package/src/XdAppClass.1.0.js +257 -0
- package/src/XdAppClass.js +150 -0
- package/src/components/XdAddress/XdAddress.vue +579 -0
- package/src/components/XdAddressSelect/XdAddressSelect.vue +243 -0
- package/src/components/XdBaiduMap/XdBaiduMap.vue +204 -0
- package/src/components/XdBaiduOverlay/XdBaiduOverlay.vue +345 -0
- package/src/components/XdBaiduSearch/XdBaiduSearch.vue +354 -0
- package/src/components/XdBar/XdBar.vue +339 -0
- package/src/components/XdButton/XdButton.vue +288 -0
- package/src/components/XdCartList/XdCartList.vue +791 -0
- package/src/components/XdCartNoStoreList/XdCartNoStoreList.vue +747 -0
- package/src/components/XdCity/XdCity.vue +620 -0
- package/src/components/XdCity/city.js +93 -0
- package/src/components/XdCity/testData.js +124 -0
- package/src/components/XdCityLocation/XdCityLocation.vue +314 -0
- package/src/components/XdCityLocation/jweixin.js +72 -0
- package/src/components/XdCityShow/XdCityShow.vue +354 -0
- package/src/components/XdClipImage/XdClipImage.vue +879 -0
- package/src/components/XdCoins/XdCoins.vue +66 -0
- package/src/components/XdConfirm/XdConfirm.vue +240 -0
- package/src/components/XdContentXss/XdContentXss.vue +71 -0
- package/src/components/XdDailog/XdDailog.vue +258 -0
- package/src/components/XdDate/XdDataItemOne.vue +236 -0
- package/src/components/XdDate/XdDate.vue +1081 -0
- package/src/components/XdDate/XdDateItem.vue +316 -0
- package/src/components/XdDate/XdDateTime.vue +929 -0
- package/src/components/XdDate/i18n/en.json +19 -0
- package/src/components/XdDate/i18n/index.js +8 -0
- package/src/components/XdDate/i18n/zh-Hans.json +19 -0
- package/src/components/XdDate/i18n/zh-Hant.json +19 -0
- package/src/components/XdDate/keypress.js +45 -0
- package/src/components/XdDate/util.js +418 -0
- package/src/components/XdDownDrawer/XdDownDrawer.vue +176 -0
- package/src/components/XdEditPwd/XdEditPwd.vue +305 -0
- package/src/components/XdEnterOrderList/XdEnterOrderList.vue +413 -0
- package/src/components/XdExpressTimeLine/XdExpressTimeLine.vue +280 -0
- package/src/components/XdFilter/XdFilter.vue +541 -0
- package/src/components/XdFontIcon/XdFontIcon.vue +165 -0
- package/src/components/XdFontIcon/css/icon.less +498 -0
- package/src/components/XdFooterBar/XdFooterBar.vue +291 -0
- package/src/components/XdFooterTabbar/XdFooterTabbar.vue +284 -0
- package/src/components/XdForm/XdForm.vue +481 -0
- package/src/components/XdForm/validate.js +486 -0
- package/src/components/XdFormCheckbox/XdFormCheckbox.vue +858 -0
- package/src/components/XdFormDate.vue +187 -0
- package/src/components/XdFormInput/XdFormInput.vue +535 -0
- package/src/components/XdFormInput/common.js +56 -0
- package/src/components/XdFormItem/XdFormItem.vue +583 -0
- package/src/components/XdFormSelect/XdFormSelect.vue +119 -0
- package/src/components/XdImage/XdImage.vue +113 -0
- package/src/components/XdItemCardUser/XdItemCardUser.vue +232 -0
- package/src/components/XdItemFilmImage/XdItemFilmImage.vue +146 -0
- package/src/components/XdItemFilmText/XdItemFilmText.vue +83 -0
- package/src/components/XdItemPhysical/XdItemPhysical.vue +410 -0
- package/src/components/XdItemPhysicalPack/XdItemPhysicalPack.vue +240 -0
- package/src/components/XdItemStore/XdItemStore.vue +236 -0
- package/src/components/XdItemUserInfo/XdItemUserInfo.vue +175 -0
- package/src/components/XdJson/XdJson.vue +398 -0
- package/src/components/XdKeyValue/XdKeyValue.vue +150 -0
- package/src/components/XdLabelNew/XdLabelNew.vue +193 -0
- package/src/components/XdLayout/XdLayout.vue +634 -0
- package/src/components/XdLoading/XdLoading.vue +165 -0
- package/src/components/XdMore/XdMore.vue +66 -0
- package/src/components/XdMpHtml/XdMpHtml.vue +458 -0
- package/src/components/XdMpHtml/node/node.vue +536 -0
- package/src/components/XdMpHtml/parser.js +1260 -0
- package/src/components/XdMpHtml/static/js/handler.js +1 -0
- package/src/components/XdMpHtml/static/js/uni.webview.min.js +1 -0
- package/src/components/XdMpHtml/static/local.html +1 -0
- package/src/components/XdMy/XdMy.vue +294 -0
- package/src/components/XdMySuccess/XdMySuccess.vue +603 -0
- package/src/components/XdNavTab/XdNavTab.vue +147 -0
- package/src/components/XdNoData/XdNoData.vue +87 -0
- package/src/components/XdNoticeBar/XdNoticeBar.vue +501 -0
- package/src/components/XdNumber/XdNumber.vue +210 -0
- package/src/components/XdNumberUni/XdNumberUni.vue +270 -0
- package/src/components/XdNumberUni/readme.md +42 -0
- package/src/components/XdOnlineConfirm/XdOnlineConfirm.vue +385 -0
- package/src/components/XdOnlineDetail/XdOnlineDetail.vue +332 -0
- package/src/components/XdOnlinePay/XdOnlinePay.vue +349 -0
- package/src/components/XdOnlineSchedule/XdOnlineSchedule.vue +453 -0
- package/src/components/XdOnlineSeat/XdOnlineSeat.vue +796 -0
- package/src/components/XdOnlineSeatMove/XdOnlineSeatMove.vue +1012 -0
- package/src/components/XdPayCombo/XdPayCombo.vue +118 -0
- package/src/components/XdPreviewImage/XdPreviewImage.vue +372 -0
- package/src/components/XdPwPay/XdPwPay.vue +214 -0
- package/src/components/XdRadio/XdRadio.vue +151 -0
- package/src/components/XdRangeSlider/XdRangeSlider.vue +355 -0
- package/src/components/XdRedName/XdRedName.vue +35 -0
- package/src/components/XdSearchBar/XdSearchBar.vue +286 -0
- package/src/components/XdSelect/XdSelect.vue +382 -0
- package/src/components/XdSelectCity/XdSelectCity.vue +270 -0
- package/src/components/XdSelectTime/XdSelectTime.vue +342 -0
- package/src/components/XdStar/XdStar.vue +261 -0
- package/src/components/XdStoreCashier/XdStoreCashier.vue +526 -0
- package/src/components/XdStoreItem/XdStoreItem.vue +400 -0
- package/src/components/XdStoreOrderDetail/XdStoreOrderDetail.vue +1571 -0
- package/src/components/XdStoreOrderList/XdStoreOrderList.vue +450 -0
- package/src/components/XdStoreProductInfo/XdStoreProductInfo.vue +940 -0
- package/src/components/XdStoreProductType/XdStoreProductType.vue +307 -0
- package/src/components/XdSuccess/XdSuccess.vue +527 -0
- package/src/components/XdSwipeSelect/XdSwipeSelect.vue +99 -0
- package/src/components/XdSwiper/XdSwiper.vue +124 -0
- package/src/components/XdSwitch/XdSwitch.vue +204 -0
- package/src/components/XdTab/XdTab.vue +220 -0
- package/src/components/XdTabScroll/XdTabScroll.vue +212 -0
- package/src/components/XdTag/XdTag.vue +423 -0
- package/src/components/XdTimeLine/XdTimeLine.vue +121 -0
- package/src/components/XdTips/XdTips.vue +212 -0
- package/src/components/XdTipsBlock/XdTipsBlock.vue +141 -0
- package/src/components/XdTitleSection/XdTitleSection.vue +152 -0
- package/src/components/XdTitleTab/XdTitleTab.vue +227 -0
- package/src/components/XdUnit/XdUnit.vue +206 -0
- package/src/components/XdUpload/XdUpload.vue +197 -0
- package/src/components/XdUploadImage/XdUploadImage.vue +145 -0
- package/src/components/Xdlogs/XdLogs.vue +144 -0
- package/src/components/autoload.js +211 -0
- package/src/components/swipeAction/UniSwipeAction.vue +43 -0
- package/src/components/swipeActionItem/UniSwipeActionItem.vue +386 -0
- package/src/components/swipeActionItem/bindingx.js +298 -0
- package/src/components/swipeActionItem/index.wxs +321 -0
- package/src/components/swipeActionItem/isPC.js +18 -0
- package/src/components/swipeActionItem/mpalipay.js +210 -0
- package/src/components/swipeActionItem/mpother.js +252 -0
- package/src/components/swipeActionItem/mpwxs.js +140 -0
- package/src/dome/dome/address.vue +415 -0
- package/src/dome/dome/auth/login.vue +166 -0
- package/src/dome/dome/baidu_show.vue +20 -0
- package/src/dome/dome/cake.vue +186 -0
- package/src/dome/dome/cart.vue +205 -0
- package/src/dome/dome/cart_store.vue +149 -0
- package/src/dome/dome/cashier/cashier.vue +73 -0
- package/src/dome/dome/cashier/check_cashier.vue +469 -0
- package/src/dome/dome/cashier/success.vue +127 -0
- package/src/dome/dome/city.vue +148 -0
- package/src/dome/dome/cityData.js +9 -0
- package/src/dome/dome/clip.vue +82 -0
- package/src/dome/dome/date/date.vue +273 -0
- package/src/dome/dome/date/selected.js +315 -0
- package/src/dome/dome/dcom/app1.vue +13 -0
- package/src/dome/dome/dcom/app2.vue +13 -0
- package/src/dome/dome/dcom/app3.vue +13 -0
- package/src/dome/dome/dcom/app4.vue +13 -0
- package/src/dome/dome/dcom/app5.vue +13 -0
- package/src/dome/dome/dcom/index.vue +1 -0
- package/src/dome/dome/debug/debug.vue +95 -0
- package/src/dome/dome/docache/docache.vue +88 -0
- package/src/dome/dome/express.vue +269 -0
- package/src/dome/dome/form.vue +312 -0
- package/src/dome/dome/icon.js +125 -0
- package/src/dome/dome/icon.vue +93 -0
- package/src/dome/dome/index.vue +725 -0
- package/src/dome/dome/item.vue +236 -0
- package/src/dome/dome/json/json.vue +88 -0
- package/src/dome/dome/layout.vue +105 -0
- package/src/dome/dome/line.vue +113 -0
- package/src/dome/dome/map/search.vue +70 -0
- package/src/dome/dome/my.vue +171 -0
- package/src/dome/dome/notice.vue +93 -0
- package/src/dome/dome/online/confirm.vue +92 -0
- package/src/dome/dome/online/detail.vue +80 -0
- package/src/dome/dome/online/pay.vue +78 -0
- package/src/dome/dome/online/schedule.vue +73 -0
- package/src/dome/dome/online/seat.vue +98 -0
- package/src/dome/dome/order/detail.vue +166 -0
- package/src/dome/dome/order/enter_order.vue +294 -0
- package/src/dome/dome/order/list.vue +219 -0
- package/src/dome/dome/order/order.js +18 -0
- package/src/dome/dome/order/success.vue +68 -0
- package/src/dome/dome/product.vue +179 -0
- package/src/dome/dome/store_cashier.vue +67 -0
- package/src/dome/dome/swiper.vue +32 -0
- package/src/dome/dome/webview.vue +61 -0
- package/src/install.js +183 -0
- package/src/main/address/address.vue +251 -0
- package/src/main/cart/cart.vue +149 -0
- package/src/main/cashier/cashier.vue +72 -0
- package/src/main/cashier/check_cashier.vue +483 -0
- package/src/main/city/city.vue +149 -0
- package/src/main/date/date.vue +260 -0
- package/src/main/order/order.js +19 -0
- package/src/main/order/order.vue +222 -0
- package/src/main/product/detail.vue +121 -0
- package/src/main/product/type.vue +108 -0
- package/src/main/search/search.vue +501 -0
- package/src/pages.json +337 -0
- package/src/plugins/CreatedComponentsPlugin.js +19 -0
- package/src/plugins/JsonRename.js +72 -0
- package/src/plugins/SetAppParams.js +171 -0
- package/src/project.js +18 -0
- package/src/utils/Cookie.js +68 -0
- package/src/utils/Runtime.js +105 -0
- package/src/utils/Storage.js +104 -0
- package/src/utils/XdNetwork.js +133 -0
- package/src/utils/helper.js +1321 -0
- package/src/utils/nourl.js +95 -0
- package/src/utils/project.js +17 -0
- package/src/utils/xd.auth.js +61 -0
- package/src/utils/xd.base.js +474 -0
- package/src/utils/xd.common.js +240 -0
- package/src/utils/xd.event.js +99 -0
- package/src/utils/xd.frame.js +96 -0
- package/src/utils/xd.path.js +96 -0
- package/src/utils/xdAppLog.js +170 -0
- package/src/utils/xdWxLog.js +302 -0
- package/src/utils/xdh5log.js +307 -0
- package/src/websetting.js +64 -0
- package/tsconfig.json +9 -0
- package/xd.less +180 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import request from '@/common/request';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
compilePath,
|
|
7
|
+
returnData
|
|
8
|
+
} from '@/utils/xd.path';
|
|
9
|
+
|
|
10
|
+
const {isOpenNoResultKey} = require('./../../settings');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
import store from "@/store";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @description 检查变量类型
|
|
17
|
+
* @param obj
|
|
18
|
+
* @returns {*}
|
|
19
|
+
*/
|
|
20
|
+
function checkVarType(obj) {
|
|
21
|
+
let toString = Object.prototype.toString;
|
|
22
|
+
let map = {
|
|
23
|
+
'[object Boolean]': 'boolean',
|
|
24
|
+
'[object Number]': 'number',
|
|
25
|
+
'[object String]': 'string',
|
|
26
|
+
'[object Array]': 'array',
|
|
27
|
+
'[object Null]': 'null',
|
|
28
|
+
'[object Object]': 'object',
|
|
29
|
+
'[object Promise]': 'promise',
|
|
30
|
+
};
|
|
31
|
+
return map[toString.call(obj)];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @description 获取选项卡和自定义模糊搜索功能
|
|
37
|
+
* @param params { Object }
|
|
38
|
+
* @param params.url { String } 引用模块名称 (必选)
|
|
39
|
+
* @param params.params {Object} 当为自定义模糊搜索功能 必选参数:{page_size: 10}
|
|
40
|
+
* @param params.data {Object} 当为自定义模糊搜索功能 必选参数:{page_size: 10}
|
|
41
|
+
* @returns { Promise | * }
|
|
42
|
+
*/
|
|
43
|
+
function handleNoUrl(params) {
|
|
44
|
+
if(!params.url){
|
|
45
|
+
throw new Error(`【url】参数不能为空,\n params=>${JSON.stringify(params, null, 2)}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//请求api
|
|
49
|
+
let path = params.url, obj = {}, data = params.params;
|
|
50
|
+
delete params.url;
|
|
51
|
+
|
|
52
|
+
//设置请求方法
|
|
53
|
+
let method = 'get';
|
|
54
|
+
if(params.data){
|
|
55
|
+
data = params.data;
|
|
56
|
+
method = 'post';
|
|
57
|
+
}
|
|
58
|
+
obj['method'] = method;
|
|
59
|
+
|
|
60
|
+
//获取公共参数
|
|
61
|
+
let commonParams = store.state['commonParams'] || {};
|
|
62
|
+
data = {...data, ...commonParams};
|
|
63
|
+
|
|
64
|
+
//设置页码参数
|
|
65
|
+
data['page_size'] = data['page_size'] || 10;
|
|
66
|
+
|
|
67
|
+
//设置参数
|
|
68
|
+
let {url, result} = compilePath(path, data);
|
|
69
|
+
obj['url'] = url;
|
|
70
|
+
if(method === 'get') obj['params'] = result;
|
|
71
|
+
else obj['data'] = result;
|
|
72
|
+
return request(obj)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @description 获取选项卡列表
|
|
78
|
+
* @param params
|
|
79
|
+
*/
|
|
80
|
+
export function getNoUrl(params){
|
|
81
|
+
if(checkVarType(params) === 'object') params = [params];
|
|
82
|
+
let arr = params.map(item => {
|
|
83
|
+
if (checkVarType(item) === 'promise') return item;
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
handleNoUrl(item)
|
|
86
|
+
.then(res => {
|
|
87
|
+
resolve(returnData(res, isOpenNoResultKey));
|
|
88
|
+
})
|
|
89
|
+
.catch(error => {
|
|
90
|
+
reject(error)
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
return Promise.all(arr);
|
|
95
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description 平台参数配置
|
|
5
|
+
* @type {{EVENT_PARAM_NAM: *}}
|
|
6
|
+
*/
|
|
7
|
+
export const PLATFORM_PARAM_SETTING = {
|
|
8
|
+
EVENT_PARAM_NAME: 'event', //地址栏活动参数名
|
|
9
|
+
EVENT_PARAM_SAVE_KEY: 'XD_EVENT_KEY', //保存本地键名
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/***
|
|
13
|
+
* @description 项目入口页面
|
|
14
|
+
* @type {string}
|
|
15
|
+
*/
|
|
16
|
+
export const ROOT_ENTRY = 'pages/loading/loading';
|
|
17
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
//#ifdef H5
|
|
4
|
+
import cookie from "@/common/cookie";
|
|
5
|
+
//#endif
|
|
6
|
+
import storage from "@/common/storage";
|
|
7
|
+
const setting = require('./../../settings');
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
methods: {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @description 获取token信息
|
|
14
|
+
* @param type
|
|
15
|
+
* @param site_id
|
|
16
|
+
* @return {null|String}
|
|
17
|
+
*/
|
|
18
|
+
getCrsfToken(type, site_id){
|
|
19
|
+
let obj = {
|
|
20
|
+
card: 'cardCrsfToken',
|
|
21
|
+
user: 'crsfToken'
|
|
22
|
+
};
|
|
23
|
+
let tokenKey = `${setting[obj[type]]}${site_id}`;
|
|
24
|
+
let token = storage.get(tokenKey);
|
|
25
|
+
//#ifdef H5
|
|
26
|
+
token = cookie.get(tokenKey);
|
|
27
|
+
//#endif
|
|
28
|
+
return token
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @description 用户是否已登录卡信息
|
|
33
|
+
*/
|
|
34
|
+
jfbCheckCardLogin(site_id){
|
|
35
|
+
if(setting.isCardAuth) return true;
|
|
36
|
+
if (!this.getCrsfToken('card', site_id)) {
|
|
37
|
+
this.$xdUniHelper.redirectTo({
|
|
38
|
+
url: '/pages/card/card',
|
|
39
|
+
});
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @description 用户已登录信息
|
|
47
|
+
*/
|
|
48
|
+
jfbCheckUserLogin(site_id) {
|
|
49
|
+
if (setting.isUserAuth) return true;
|
|
50
|
+
if (!this.getCrsfToken('user', site_id)) {
|
|
51
|
+
this.$xdUniHelper.redirectTo({
|
|
52
|
+
url: '/pages/login/login',
|
|
53
|
+
});
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const settings = require('./../../settings');
|
|
4
|
+
export const baseEnvTypeReg = /^(localhost)|(192\.168\.).*$/;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description 设置vuex缓存
|
|
8
|
+
* @param state
|
|
9
|
+
* @param attr
|
|
10
|
+
* @returns {*}
|
|
11
|
+
*/
|
|
12
|
+
export function setVuexCache(state, attr) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
if (state[attr] !== null) {
|
|
15
|
+
resolve(state[attr])
|
|
16
|
+
} else {
|
|
17
|
+
let time = setInterval(() => {
|
|
18
|
+
if (state[attr] !== null) {
|
|
19
|
+
resolve(state[attr]);
|
|
20
|
+
clearInterval(time);
|
|
21
|
+
}
|
|
22
|
+
}, 100)
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @description 获取host
|
|
29
|
+
*/
|
|
30
|
+
export function baseGetHost(){
|
|
31
|
+
//#ifdef H5
|
|
32
|
+
if (settings.platform === 'h5') {
|
|
33
|
+
let host = window.location.host;
|
|
34
|
+
|
|
35
|
+
//设置开发环境
|
|
36
|
+
if (baseEnvTypeReg.test(host)) {
|
|
37
|
+
host = settings.devBaseHost;
|
|
38
|
+
}
|
|
39
|
+
return host;
|
|
40
|
+
}
|
|
41
|
+
//#endif
|
|
42
|
+
|
|
43
|
+
//#ifdef MP-WEIXIN
|
|
44
|
+
if (settings.platform === 'mp-weixin') {
|
|
45
|
+
return settings.host;
|
|
46
|
+
}
|
|
47
|
+
//#endif
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @description 返回配置信息
|
|
52
|
+
* @param key {String|null} 查询关键字
|
|
53
|
+
* @returns {{apiWhiteList, defaultCity, uploadApi, needLoginKey, index, noPrevPageToIndex, payUrl, title, getBrandBaseUrl, version, isTimeLog, isCloseEslint, isDebug, chatWss, apiPlaceholder, tokenKey, system, isTestData, port, pageWhiteList, devBaseHost}|*}
|
|
54
|
+
*/
|
|
55
|
+
export function getSetting(key=null){
|
|
56
|
+
if(!key) return settings;
|
|
57
|
+
return settings[key] || null
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @description 检查变量类型
|
|
63
|
+
* @param obj
|
|
64
|
+
* @returns {*}
|
|
65
|
+
*/
|
|
66
|
+
export function baseCheckVarType(obj) {
|
|
67
|
+
let toString = Object.prototype.toString;
|
|
68
|
+
let map = {
|
|
69
|
+
'[object Boolean]': 'boolean',
|
|
70
|
+
'[object Number]': 'number',
|
|
71
|
+
'[object String]': 'string',
|
|
72
|
+
'[object Function]': 'function',
|
|
73
|
+
'[object Array]': 'array',
|
|
74
|
+
'[object Date]': 'date',
|
|
75
|
+
'[object RegExp]': 'regExp',
|
|
76
|
+
'[object Undefined]': 'undefined',
|
|
77
|
+
'[object Null]': 'null',
|
|
78
|
+
'[object Object]': 'object',
|
|
79
|
+
'[object Error]': 'error'
|
|
80
|
+
};
|
|
81
|
+
return map[toString.call(obj)];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @description 初始化请求对象
|
|
86
|
+
* @param obj
|
|
87
|
+
* @returns {*|URLSearchParams}
|
|
88
|
+
*/
|
|
89
|
+
export function baseFormDataSendParam(obj) {
|
|
90
|
+
let params = new URLSearchParams();
|
|
91
|
+
if (baseCheckVarType(obj) === 'object') {
|
|
92
|
+
Object.keys(obj).map((key) => {
|
|
93
|
+
if (baseCheckVarType(obj[key]) === 'object'
|
|
94
|
+
|| baseCheckVarType(obj[key]) === 'array'
|
|
95
|
+
) {
|
|
96
|
+
params.append(key, JSON.stringify(obj[key]));
|
|
97
|
+
} else {
|
|
98
|
+
params.append(key, obj[key]);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return params;
|
|
103
|
+
}
|
|
104
|
+
return obj;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @description 简单深拷贝
|
|
110
|
+
* @param json
|
|
111
|
+
* @returns {any}
|
|
112
|
+
*/
|
|
113
|
+
export function baseCloneDeep(json) {
|
|
114
|
+
if (baseCheckVarType(json) === 'object'
|
|
115
|
+
|| baseCheckVarType(json) === 'array'
|
|
116
|
+
) {
|
|
117
|
+
return JSON.parse(JSON.stringify(json));
|
|
118
|
+
}
|
|
119
|
+
return json;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @description 检查对象或者数组是否为空
|
|
124
|
+
* @param obj
|
|
125
|
+
* @return boolean
|
|
126
|
+
*/
|
|
127
|
+
export function baseIsEmpty(obj) {
|
|
128
|
+
if (baseCheckVarType(obj) === 'array' ||
|
|
129
|
+
baseCheckVarType(obj) === 'object'
|
|
130
|
+
) {
|
|
131
|
+
let str = JSON.stringify(obj);
|
|
132
|
+
return str === '{}' || str === '[]';
|
|
133
|
+
} else {
|
|
134
|
+
console.log('isEmpty.error', obj);
|
|
135
|
+
throw new Error('只支持数组与JSON对象格式');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @description 时间戳转年月日
|
|
141
|
+
* @param time {String|Number} 时间戳 (秒)
|
|
142
|
+
*/
|
|
143
|
+
export function baseJsDateToTime(time) {
|
|
144
|
+
let date = new Date(Number(time) * 1000);
|
|
145
|
+
let y = date.getFullYear();
|
|
146
|
+
let m = date.getMonth() + 1;
|
|
147
|
+
m = m < 10 ? ('0' + m) : m;
|
|
148
|
+
let d = date.getDate();
|
|
149
|
+
d = d < 10 ? ('0' + d) : d;
|
|
150
|
+
let h = date.getHours();
|
|
151
|
+
h = h < 10 ? ('0' + h) : h;
|
|
152
|
+
let minute = date.getMinutes();
|
|
153
|
+
let second = date.getSeconds();
|
|
154
|
+
minute = minute < 10 ? ('0' + minute) : minute;
|
|
155
|
+
second = second < 10 ? ('0' + second) : second;
|
|
156
|
+
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @description 检测查找数组是否在原数组中
|
|
162
|
+
* @param sourceArray 原数组
|
|
163
|
+
* @param findArray 查找数组
|
|
164
|
+
* @returns {boolean}
|
|
165
|
+
*/
|
|
166
|
+
export function baseInArray(sourceArray = [], findArray = []) {
|
|
167
|
+
if (baseCheckVarType(sourceArray) === 'array'
|
|
168
|
+
&& baseCheckVarType(findArray) === 'array') {
|
|
169
|
+
let sourceArraylen = sourceArray.length;
|
|
170
|
+
let find = JSON.parse(JSON.stringify(findArray));
|
|
171
|
+
let temp = [];
|
|
172
|
+
for (let i = 0; i < sourceArraylen; i++) {
|
|
173
|
+
let sourceVal = sourceArray[i];
|
|
174
|
+
for (let k = 0; k < find.length; k++) {
|
|
175
|
+
if (find[k] === sourceVal) {
|
|
176
|
+
temp.push(true);
|
|
177
|
+
find.splice(k, 1);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return findArray.length === temp.length;
|
|
183
|
+
} else {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* @description 中间键公共处理
|
|
190
|
+
* @param xdApp {XdAppClass}
|
|
191
|
+
* @param PLATFORM_PARAM_SETTING
|
|
192
|
+
*/
|
|
193
|
+
export function baseMiddleware(xdApp, PLATFORM_PARAM_SETTING) {
|
|
194
|
+
xdApp.use('all', 'eventID', (app, next) => {
|
|
195
|
+
/**有活动ID=**/
|
|
196
|
+
if (app.$page['params'][PLATFORM_PARAM_SETTING.EVENT_PARAM_NAME]) {
|
|
197
|
+
app.$storage.set(PLATFORM_PARAM_SETTING.EVENT_PARAM_SAVE_KEY, app.$page['params'][PLATFORM_PARAM_SETTING.EVENT_PARAM_NAME]);
|
|
198
|
+
}
|
|
199
|
+
/**有活动ID=**/
|
|
200
|
+
else {
|
|
201
|
+
app.$storage.remove(PLATFORM_PARAM_SETTING.EVENT_PARAM_SAVE_KEY);
|
|
202
|
+
}
|
|
203
|
+
next();
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @description 把特定数组键值对中的值转化为真实值
|
|
209
|
+
* @example [{key: 'key1', value: '2341', value_type: 'number'},{key: 'key1', value: 'true', value_type: 'boolean'}]
|
|
210
|
+
* @param items {Array}
|
|
211
|
+
* @return {Array}
|
|
212
|
+
*/
|
|
213
|
+
export function AttrToTargetValues(items){
|
|
214
|
+
return items.map(item => {
|
|
215
|
+
return AttrToTargetValue(item);
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @description 把特定键值对中的值转化为真实值
|
|
222
|
+
* @example {key: 'key1', value: '2341', value_type: 'number'} =》{key: 'key1', value_type: 2341, value_type: 'number'}
|
|
223
|
+
* @param item {Object}
|
|
224
|
+
* @param item.key {String} 键值
|
|
225
|
+
* @param item.value {String} 值
|
|
226
|
+
* @param item.value_type {String} 值类型,其值:number|object|array|string|null|boolean
|
|
227
|
+
* @return {Object}
|
|
228
|
+
*/
|
|
229
|
+
export function AttrToTargetValue(item) {
|
|
230
|
+
const toHandle = (data, type) => {
|
|
231
|
+
let typeStr = '数组';
|
|
232
|
+
if (type === 'object') typeStr = '对象';
|
|
233
|
+
try {
|
|
234
|
+
let json = JSON.parse(data.value);
|
|
235
|
+
if (baseCheckVarType(json) === type) {
|
|
236
|
+
return json;
|
|
237
|
+
} else throw new Error(`数据类型不是${typeStr},你给的数据是:${data.value},期望的数据为:${typeStr}`);
|
|
238
|
+
} catch (e) {
|
|
239
|
+
throw new Error(`数据类型不是${typeStr},你给的数据是:${data.value},期望的数据为:${typeStr}`);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
let temp = {key: item.key, value_type: item.value_type,};
|
|
243
|
+
switch (item.value_type) {
|
|
244
|
+
case 'number':
|
|
245
|
+
if (isNaN(Number(item.value))) throw new Error(`数据类型不是number,你给的数据是:${item.value},期望的数据为:'number'`);
|
|
246
|
+
else temp['value'] = Number(item.value);
|
|
247
|
+
break;
|
|
248
|
+
case 'object':
|
|
249
|
+
temp['value'] = toHandle(item, 'object');
|
|
250
|
+
break;
|
|
251
|
+
case 'array':
|
|
252
|
+
temp['value'] = toHandle(item, 'array');
|
|
253
|
+
break;
|
|
254
|
+
case 'null':
|
|
255
|
+
if (/^(null)$/.test(item.value)) temp['value'] = null;
|
|
256
|
+
else throw new Error(`数据类型不是null,你给的数据是:${item.value},期望的数据为:'null'`);
|
|
257
|
+
break;
|
|
258
|
+
case 'boolean':
|
|
259
|
+
if (/^(true|false)$/.test(item.value)) temp['value'] = item.value === 'true';
|
|
260
|
+
else throw new Error(`数据类型不是boolean,你给的数据是:${item.value},期望的数据为:'true|false'`);
|
|
261
|
+
break;
|
|
262
|
+
case 'string':
|
|
263
|
+
temp['value'] = item['value'];
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
temp['value'] = item['value'];
|
|
267
|
+
}
|
|
268
|
+
return temp
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* @description 获取特定数组键值队的真实值
|
|
273
|
+
* @example items = [{key: 'key1', value: '2341', value_type: 'number'}, {key: 'key2', value: 'true', value_type: 'booleab'}]
|
|
274
|
+
* @param items {Array}
|
|
275
|
+
* @param key
|
|
276
|
+
* @return {Object|null}
|
|
277
|
+
*/
|
|
278
|
+
export function getAttrKeyForValue (items, key) {
|
|
279
|
+
let data = AttrToTargetValue(items);
|
|
280
|
+
let select =data.filter(item=>{
|
|
281
|
+
return item.key === key;
|
|
282
|
+
})
|
|
283
|
+
if(select.length > 0) return select[0];
|
|
284
|
+
else return null
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* @description 把特定键值对中的值转化为字符串
|
|
290
|
+
* @example {key: 'key1', value: 234, value_type: 'number'} =》{key: 'key1', value_type: '234', value_type: 'number'}
|
|
291
|
+
* @param item {Object}
|
|
292
|
+
* @param item.key {String} 键值
|
|
293
|
+
* @param item.value {String} 值
|
|
294
|
+
* @param item.value_type {String} 值
|
|
295
|
+
* @return {Object}
|
|
296
|
+
*/
|
|
297
|
+
export function setAttrToValue(item) {
|
|
298
|
+
switch (item.value_type) {
|
|
299
|
+
case 'number':
|
|
300
|
+
if (baseCheckVarType(item.value) !== 'number') throw new Error(`数据类型不是number,你给的数据是:${item.value},期望的数据为:'number'`);
|
|
301
|
+
else item['value'] = String(item.value);
|
|
302
|
+
break;
|
|
303
|
+
case 'object':
|
|
304
|
+
if (baseCheckVarType(item.value) === 'object') item['value'] = JSON.stringify(item['value']);
|
|
305
|
+
else throw new Error(`数据类型不是object,你给的数据是:${item.value},期望的数据为:object`);
|
|
306
|
+
break;
|
|
307
|
+
case 'array':
|
|
308
|
+
if (baseCheckVarType(item.value) === 'array') item['value'] = JSON.stringify(item['value']);
|
|
309
|
+
else throw new Error(`数据类型不是array,你给的数据是:${item.value},期望的数据为:array`);
|
|
310
|
+
break;
|
|
311
|
+
case 'null':
|
|
312
|
+
if (item['value'] === null) item['value'] = 'null';
|
|
313
|
+
else throw new Error(`数据类型不是null,你给的数据是:${item.value},期望的数据为:null`);
|
|
314
|
+
break;
|
|
315
|
+
case 'boolean':
|
|
316
|
+
if (baseCheckVarType(item.value) === 'boolean') item['value'] = item['value']? 'true': 'false';
|
|
317
|
+
else throw new Error(`数据类型不是boolean,你给的数据是:${item.value},期望的数据为:boolean`);
|
|
318
|
+
break;
|
|
319
|
+
case 'string':
|
|
320
|
+
if (baseCheckVarType(item.value) !== 'string') {
|
|
321
|
+
throw new Error(`数据类型不是string,你给的数据是:${item.value},期望的数据为:string`)
|
|
322
|
+
}
|
|
323
|
+
break;
|
|
324
|
+
default:
|
|
325
|
+
}
|
|
326
|
+
return item
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* @description 转换数据格式
|
|
331
|
+
* @param containers {Object} 当前也能已经使用的业务组件
|
|
332
|
+
* @return {Array|Object}
|
|
333
|
+
*/
|
|
334
|
+
export function parseContainers (containers) {
|
|
335
|
+
//数据类型
|
|
336
|
+
let isArray = true;
|
|
337
|
+
if(baseCheckVarType(containers) === 'object') {
|
|
338
|
+
isArray = false;
|
|
339
|
+
containers = [containers];
|
|
340
|
+
}
|
|
341
|
+
const handle = (str) => {
|
|
342
|
+
if(baseCheckVarType(str) === 'object') return str;
|
|
343
|
+
try {
|
|
344
|
+
return JSON.parse(str)
|
|
345
|
+
} catch (e) {
|
|
346
|
+
return {}
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
let temp = [];
|
|
350
|
+
containers.map(item => {
|
|
351
|
+
item['component']['attrs'] = AttrToTargetValues(item['component']['attrs']);
|
|
352
|
+
item['component']['props'] = {
|
|
353
|
+
advanced: handle(item['component']['props']['advanced']),
|
|
354
|
+
style: handle(item['component']['props']['style']),
|
|
355
|
+
content: handle(item['component']['props']['content']),
|
|
356
|
+
};
|
|
357
|
+
temp.push(item);
|
|
358
|
+
});
|
|
359
|
+
if(isArray) return temp;
|
|
360
|
+
else return temp[0];
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* @description 获取属性中的值
|
|
365
|
+
* @param container {Object} 当前也能已经使用的业务组件
|
|
366
|
+
* @param keys {String|Array}
|
|
367
|
+
* 获取Props数据键值为字符串String,其格式:xxxx.yyyy或者xxxx(默认:content)
|
|
368
|
+
* 例如: style.color, content.height,advanced.height
|
|
369
|
+
*
|
|
370
|
+
* 获取Props数据键值为字符串Array,其格式:['content',['color','height']] 或者 ['color','height']
|
|
371
|
+
* 例如: ['content',['color','height']], ['content'.'height'],
|
|
372
|
+
*
|
|
373
|
+
* @param defaultValue {*} 设置默认值
|
|
374
|
+
* @return {*}
|
|
375
|
+
*/
|
|
376
|
+
export function getContainerPropsValue(container , keys, defaultValue = null) {
|
|
377
|
+
container = parseContainers(container);
|
|
378
|
+
let props = container['component']['props'];
|
|
379
|
+
|
|
380
|
+
//String
|
|
381
|
+
if(baseCheckVarType(keys) === 'string') {
|
|
382
|
+
let key = keys;
|
|
383
|
+
let type = 'content';
|
|
384
|
+
if (/^.+(\.).+$/.test(keys)) {
|
|
385
|
+
let temparr = keys.split('.');
|
|
386
|
+
key = temparr[1];
|
|
387
|
+
type = temparr[0]
|
|
388
|
+
}
|
|
389
|
+
if (props[type][key]) return props[type][key];
|
|
390
|
+
else return defaultValue;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
//Array, 忽略defaultValue
|
|
394
|
+
if (baseCheckVarType(keys) === 'array') {
|
|
395
|
+
let type = 'content';
|
|
396
|
+
let kys = keys;
|
|
397
|
+
if(keys.length === 2 && baseCheckVarType(keys[1]) === 'array') {
|
|
398
|
+
type = keys[0];
|
|
399
|
+
kys = keys[1];
|
|
400
|
+
}
|
|
401
|
+
let propsData = props[type];
|
|
402
|
+
let temp = {};
|
|
403
|
+
kys.map(item=>{
|
|
404
|
+
temp[item] = propsData[item];
|
|
405
|
+
});
|
|
406
|
+
return temp;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* @description 获取业务插件对象属性值
|
|
413
|
+
* @param attr {Array} 对象属性数组
|
|
414
|
+
* @param key {String} 键值名称
|
|
415
|
+
* @returns {null|*}
|
|
416
|
+
*/
|
|
417
|
+
export function getComponentAttr(attr = [], key) {
|
|
418
|
+
if(baseCheckVarType(attr) !== 'array') return null;
|
|
419
|
+
if(attr.length === 0) return null;
|
|
420
|
+
let temp = attr.filter(item=>{
|
|
421
|
+
return item['key'] === key;
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
if(temp.length === 0) return null;
|
|
425
|
+
else return temp[0].value;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* @description 根据键值获取业务插件中的风格值
|
|
430
|
+
* @param parent {*} 对象属性数组
|
|
431
|
+
* @param key {String} 键值名称
|
|
432
|
+
* @returns {Promise}
|
|
433
|
+
*/
|
|
434
|
+
export function getParentsStyle(parent, key) {
|
|
435
|
+
let handle = (resolve, parent)=>{
|
|
436
|
+
if (!parent) resolve(null);
|
|
437
|
+
else if (parent.getParentThemes && typeof parent.getParentThemes === 'function') {
|
|
438
|
+
let theme = parent.getParentThemes();
|
|
439
|
+
resolve(theme[key])
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
handle(resolve, parent.$parent)
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
return new Promise((resolve)=>{
|
|
447
|
+
handle(resolve, parent)
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* @description 获取业务插件中的风格列表
|
|
453
|
+
* @param parent {*} 对象属性数组
|
|
454
|
+
* @returns {Promise}
|
|
455
|
+
*/
|
|
456
|
+
export function getParentsStyles(parent) {
|
|
457
|
+
let handle = (resolve, parent) => {
|
|
458
|
+
if (!parent) resolve(null);
|
|
459
|
+
else if (parent.getParentThemes && typeof parent.getParentThemes === 'function') {
|
|
460
|
+
resolve(parent.getParentThemes())
|
|
461
|
+
} else {
|
|
462
|
+
handle(resolve, parent.$parent)
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
return new Promise((resolve) => {
|
|
467
|
+
handle(resolve, parent)
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|