优化首页
This commit is contained in:
2
App.vue
2
App.vue
@@ -8,10 +8,12 @@
|
||||
data: {
|
||||
// 基础配置
|
||||
// 数据接口请求地址
|
||||
// request_url: 'http://192.168.1.43:7777/',
|
||||
// request_url: env == 'development' ? '/api/' : 'https://store.sxczgkj.com/',
|
||||
request_url: 'https://store.sxczgkj.com/',
|
||||
|
||||
// 静态资源地址(如系统根目录不在public目录下面请在静态地址后面加public目录、如:https://d1.shopxo.vip/public/)
|
||||
// static_url: 'http://192.168.1.43:7777/',
|
||||
// static_url: env == 'development' ? '/api/' : 'https://store.sxczgkj.com/',
|
||||
static_url: 'https://store.sxczgkj.com/',
|
||||
|
||||
|
||||
@@ -301,8 +301,10 @@
|
||||
cancelText: self.$t('common.not_yet'),
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
console.log('1111111111111111');
|
||||
self.pay_handle_event(order_id, payment_id);
|
||||
} else {
|
||||
console.log('22222222222222');
|
||||
self.order_item_pay_fail_handle(null, order_id, self.$t('paytips.paytips.6mpsl7'));
|
||||
}
|
||||
},
|
||||
@@ -317,6 +319,8 @@
|
||||
|
||||
// 支付处理
|
||||
pay_handle_event(order_id, payment_id = 0) {
|
||||
console.log('pay_handle_event===', order_id);
|
||||
|
||||
// 没有指定支付方式则不匹配支付标识
|
||||
var payment = null;
|
||||
if ((payment_id || 0) != 0) {
|
||||
@@ -338,128 +342,138 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 请求数据
|
||||
var post_data = {
|
||||
[this.propPayDataKey]: order_id,
|
||||
payment_id: payment_id || this.payment_id,
|
||||
};
|
||||
// h5自定义重定向地址
|
||||
// #ifdef H5
|
||||
var redirect_url = app.globalData.page_url_protocol(this.propToAppointPage || app.globalData.get_page_url(false));
|
||||
post_data['redirect_url'] = encodeURIComponent(base64.encode(redirect_url));
|
||||
// 存在支付标识、指定支付方式使用respond_url返回地址、移除重定向地址
|
||||
if (payment != null) {
|
||||
var respond_arr = ['PayPal', 'UniPayment'];
|
||||
if (respond_arr.indexOf(payment.payment) != -1) {
|
||||
post_data['respond_url'] = post_data['redirect_url'];
|
||||
delete post_data['redirect_url'];
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
// 请求支付接口
|
||||
uni.showLoading({
|
||||
title: this.$t('payment.payment.e1f54e'),
|
||||
mask: true,
|
||||
});
|
||||
if (this.propPayUrl) {
|
||||
uni.request({
|
||||
url: this.propPayUrl,
|
||||
method: 'POST',
|
||||
data: {
|
||||
...post_data,
|
||||
wechat_open_id: localStorage.getItem('web_openid'),
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
uni.hideLoading();
|
||||
var data = res.data.data;
|
||||
this.setData({
|
||||
pay_response_data: data || {},
|
||||
});
|
||||
if (res.data.code == 0) {
|
||||
// 是否直接支付成功
|
||||
if ((data.is_success || 0) == 1) {
|
||||
// 数据设置
|
||||
this.order_item_pay_success_handle(data, order_id, false);
|
||||
app.globalData.showToast(this.$t('paytips.paytips.679rxu'), 'success');
|
||||
setTimeout(() => {
|
||||
this.to_success_page_event();
|
||||
}, 2000);
|
||||
} else {
|
||||
// 支付方式类型
|
||||
let payment_type = Number(data.is_payment_type || 0);
|
||||
switch (payment_type) {
|
||||
// 正常线上支付
|
||||
case 0:
|
||||
// #ifdef APP
|
||||
this.app_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-TOUTIAO
|
||||
// 头条是否非普通版本支持
|
||||
if (parseInt(data.data.pay_type || 0) == 1) {
|
||||
this.toutiao_transaction_pay_handle(this, data, order_id);
|
||||
} else {
|
||||
this.mp_pay_handle(this, data, order_id);
|
||||
}
|
||||
// #endif
|
||||
// #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU
|
||||
this.mp_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-KUAISHOU
|
||||
this.kuaishou_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-QQ
|
||||
this.qq_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
this.h5_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
break;
|
||||
// 线下支付
|
||||
case 1:
|
||||
// 现金支付
|
||||
let self = this;
|
||||
uni.showModal({
|
||||
content: res.data.msg,
|
||||
showCancel: false,
|
||||
confirmText: self.$t('common.confirm'),
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
self.to_other(order_id);
|
||||
} else {
|
||||
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6mpsl7'));
|
||||
}
|
||||
},
|
||||
});
|
||||
break;
|
||||
// 钱包支付
|
||||
case 2:
|
||||
this.order_item_pay_success_handle(data, order_id);
|
||||
break;
|
||||
// 默认
|
||||
default:
|
||||
app.globalData.showToast(this.$t('payment.payment.vhx5dv'));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 是否返回html代码展示、则提示错误
|
||||
if (res.data.code == -6666 && (data || null) != null) {
|
||||
this.setData({
|
||||
popup_view_pay_data: data,
|
||||
popup_view_pay_html_is_show: true,
|
||||
});
|
||||
} else {
|
||||
this.order_item_pay_fail_handle(data, order_id, res.data.msg);
|
||||
}
|
||||
}
|
||||
},
|
||||
fail: (res) => {
|
||||
uni.hideLoading();
|
||||
app.globalData.showToast(this.$t('common.internet_error_tips'));
|
||||
},
|
||||
// 从一开始就判断支付方式,如果是无忧支付直接进入支付状态判断页面
|
||||
console.log('payment===', payment);
|
||||
if (payment.payment == 'IEPayPoli') {
|
||||
console.log('直接进入无忧支付,开始跳转');
|
||||
uni.setStorageSync('wuyouPay', '');
|
||||
uni.redirectTo({
|
||||
url: `/pages/buy/wu_you_status?payment_id=${payment.id}&order_id=${order_id}`,
|
||||
});
|
||||
} else {
|
||||
app.globalData.showToast(this.$t('payment.payment.597s8b'));
|
||||
// 请求数据
|
||||
var post_data = {
|
||||
[this.propPayDataKey]: order_id,
|
||||
payment_id: payment_id || this.payment_id,
|
||||
};
|
||||
// h5自定义重定向地址
|
||||
// #ifdef H5
|
||||
var redirect_url = app.globalData.page_url_protocol(this.propToAppointPage || app.globalData.get_page_url(false));
|
||||
post_data['redirect_url'] = encodeURIComponent(base64.encode(redirect_url));
|
||||
// 存在支付标识、指定支付方式使用respond_url返回地址、移除重定向地址
|
||||
if (payment != null) {
|
||||
var respond_arr = ['PayPal', 'UniPayment'];
|
||||
if (respond_arr.indexOf(payment.payment) != -1) {
|
||||
post_data['respond_url'] = post_data['redirect_url'];
|
||||
delete post_data['redirect_url'];
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
// 请求支付接口
|
||||
uni.showLoading({
|
||||
title: this.$t('payment.payment.e1f54e'),
|
||||
mask: true,
|
||||
});
|
||||
if (this.propPayUrl) {
|
||||
uni.request({
|
||||
url: this.propPayUrl,
|
||||
method: 'POST',
|
||||
data: {
|
||||
...post_data,
|
||||
wechat_open_id: localStorage.getItem('web_openid') || '',
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
uni.hideLoading();
|
||||
var data = res.data.data;
|
||||
this.setData({
|
||||
pay_response_data: data || {},
|
||||
});
|
||||
if (res.data.code == 0) {
|
||||
// 是否直接支付成功
|
||||
if ((data.is_success || 0) == 1) {
|
||||
// 数据设置
|
||||
this.order_item_pay_success_handle(data, order_id, false);
|
||||
app.globalData.showToast(this.$t('paytips.paytips.679rxu'), 'success');
|
||||
setTimeout(() => {
|
||||
this.to_success_page_event();
|
||||
}, 2000);
|
||||
} else {
|
||||
// 支付方式类型
|
||||
let payment_type = Number(data.is_payment_type || 0);
|
||||
switch (payment_type) {
|
||||
// 正常线上支付
|
||||
case 0:
|
||||
// #ifdef APP
|
||||
this.app_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-TOUTIAO
|
||||
// 头条是否非普通版本支持
|
||||
if (parseInt(data.data.pay_type || 0) == 1) {
|
||||
this.toutiao_transaction_pay_handle(this, data, order_id);
|
||||
} else {
|
||||
this.mp_pay_handle(this, data, order_id);
|
||||
}
|
||||
// #endif
|
||||
// #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU
|
||||
this.mp_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-KUAISHOU
|
||||
this.kuaishou_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef MP-QQ
|
||||
this.qq_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
this.h5_pay_handle(this, data, order_id);
|
||||
// #endif
|
||||
break;
|
||||
// 线下支付
|
||||
case 1:
|
||||
// 现金支付
|
||||
let self = this;
|
||||
uni.showModal({
|
||||
content: res.data.msg,
|
||||
showCancel: false,
|
||||
confirmText: self.$t('common.confirm'),
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
self.to_other(order_id);
|
||||
} else {
|
||||
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6mpsl7'));
|
||||
}
|
||||
},
|
||||
});
|
||||
break;
|
||||
// 钱包支付
|
||||
case 2:
|
||||
this.order_item_pay_success_handle(data, order_id);
|
||||
break;
|
||||
// 默认
|
||||
default:
|
||||
app.globalData.showToast(this.$t('payment.payment.vhx5dv'));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 是否返回html代码展示、则提示错误
|
||||
if (res.data.code == -6666 && (data || null) != null) {
|
||||
this.setData({
|
||||
popup_view_pay_data: data,
|
||||
popup_view_pay_html_is_show: true,
|
||||
});
|
||||
} else {
|
||||
this.order_item_pay_fail_handle(data, order_id, res.data.msg);
|
||||
}
|
||||
}
|
||||
},
|
||||
fail: (res) => {
|
||||
uni.hideLoading();
|
||||
app.globalData.showToast(this.$t('common.internet_error_tips'));
|
||||
},
|
||||
});
|
||||
} else {
|
||||
app.globalData.showToast(this.$t('payment.payment.597s8b'));
|
||||
}
|
||||
}
|
||||
},
|
||||
// APP支付
|
||||
@@ -668,6 +682,7 @@
|
||||
},
|
||||
// h5支付处理
|
||||
h5_pay_handle(self, data, order_id) {
|
||||
console.log('h5_pay_handle===', order_id);
|
||||
// 字符串则为跳转地址直接进入
|
||||
if (typeof data.data == 'string') {
|
||||
window.location.href = data.data;
|
||||
@@ -729,6 +744,18 @@
|
||||
// onBridgeReady();
|
||||
// }
|
||||
}
|
||||
|
||||
// 无忧支付
|
||||
if (data.payment.payment == 'IEPayPoli') {
|
||||
console.log('无忧支付order_id===', order_id);
|
||||
console.log('无忧支付===', data);
|
||||
uni.setStorageSync('wuyouPay', '');
|
||||
uni.redirectTo({
|
||||
url: `/pages/buy/wu_you_status?payment_id=${data.payment.id}&order_id=${order_id}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 二维码展示
|
||||
if ((data.data.qrcode_url || null) != null && (data.data.name || null) != null && (data.data.order_no || null) != null) {
|
||||
status = true;
|
||||
|
||||
10
main.js
10
main.js
@@ -11,9 +11,15 @@ import i18n from './locale/index'
|
||||
// 全局icon组件
|
||||
import iconfont from './components/iconfont/iconfont.vue'
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
// #ifdef H5
|
||||
// 在组件或JS文件中使用
|
||||
import Vconsole from 'vconsole';
|
||||
new Vconsole()
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
console.log('当前是开发环境');
|
||||
} else {
|
||||
console.log('当前是生产环境');
|
||||
// new Vconsole()
|
||||
}
|
||||
// #endif
|
||||
|
||||
|
||||
|
||||
545
manifest.json
545
manifest.json
@@ -1,279 +1,278 @@
|
||||
{
|
||||
"name" : "ShopXO",
|
||||
"appid" : "__UNI__F095115",
|
||||
"description" : "ShopXO开源商城、MIT协议、可商用、可二次开发、满足99%电商运营需求",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : 100,
|
||||
"transformPx" : false,
|
||||
"app-plus" : {
|
||||
"usingComponents" : true,
|
||||
"nvueCompiler" : "uni-app",
|
||||
"compilerVersion" : 3,
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"autoclose" : true,
|
||||
"delay" : 0
|
||||
},
|
||||
"modules" : {
|
||||
"Payment" : {},
|
||||
"Barcode" : {},
|
||||
"OAuth" : {},
|
||||
"Maps" : {},
|
||||
"Geolocation" : {},
|
||||
"Share" : {},
|
||||
"VideoPlayer" : {},
|
||||
"Camera" : {}
|
||||
},
|
||||
"distribute" : {
|
||||
"android" : {
|
||||
"permissions" : [
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"targetSdkVersion" : 30,
|
||||
"minSdkVersion" : 23
|
||||
},
|
||||
"ios" : {
|
||||
"dSYMs" : false,
|
||||
"privacyDescription" : {
|
||||
"NSPhotoLibraryUsageDescription" : "获取用户手机相册用于提供相册图片素材",
|
||||
"NSPhotoLibraryAddUsageDescription" : "将图片保存至手机相册",
|
||||
"NSCameraUsageDescription" : "获取用户手机相册用于快捷拍照功能",
|
||||
"NSLocationWhenInUseUsageDescription" : "该应用需要您的地理位置,以便为你提供当前位置信息",
|
||||
"NSLocationAlwaysUsageDescription" : "该应用需要您的地理位置,以便为你提供当前位置信息",
|
||||
"NSLocationAlwaysAndWhenInUseUsageDescription" : "该应用需要持续获取用户地理位置,以便为您提供实时的位置信息"
|
||||
}
|
||||
},
|
||||
"sdkConfigs" : {
|
||||
"payment" : {
|
||||
"alipay" : {
|
||||
"__platform__" : [ "ios", "android" ]
|
||||
},
|
||||
"weixin" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appid" : "wx3bac19ff90c0a976",
|
||||
"UniversalLinks" : "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"paypal" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"returnURL_ios" : "com.shopxo.mm://paypal",
|
||||
"returnURL_android" : "com.shopxo.mm://paypal"
|
||||
}
|
||||
},
|
||||
"ad" : {},
|
||||
"oauth" : {
|
||||
"univerify" : {},
|
||||
"apple" : {},
|
||||
"weixin" : {
|
||||
"appid" : "wx3bac19ff90c0a976",
|
||||
"appsecret" : "91f132b39c5c575fe61b04993c57c734",
|
||||
"UniversalLinks" : "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"qq" : {
|
||||
"appid" : "102076195",
|
||||
"UniversalLinks" : "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"google" : {
|
||||
"clientid" : "510187709509-fq3t5grcfh81t4ub491tiadrtfjbaes1.apps.googleusercontent.com"
|
||||
}
|
||||
},
|
||||
"maps" : {
|
||||
"amap" : {
|
||||
"name" : "amapu9VF72Gg",
|
||||
"appkey_ios" : "f55e9099897821681f5c74051e4527bd",
|
||||
"appkey_android" : "ebe9f1d84f8ceb8b3c4ba6ead2bfa78b"
|
||||
}
|
||||
},
|
||||
"geolocation" : {
|
||||
"system" : {
|
||||
"__platform__" : [ "ios", "android" ]
|
||||
}
|
||||
},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx3bac19ff90c0a976",
|
||||
"UniversalLinks" : "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"qq" : {
|
||||
"appid" : "102076195",
|
||||
"UniversalLinks" : "https://d1.shopxo.vip/.well-known/"
|
||||
}
|
||||
},
|
||||
"push" : {}
|
||||
},
|
||||
"icons" : {
|
||||
"android" : {
|
||||
"hdpi" : "unpackage/res/icons/72x72.png",
|
||||
"xhdpi" : "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi" : "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi" : "unpackage/res/icons/192x192.png"
|
||||
},
|
||||
"ios" : {
|
||||
"appstore" : "unpackage/res/icons/1024x1024.png",
|
||||
"ipad" : {
|
||||
"app" : "unpackage/res/icons/76x76.png",
|
||||
"app@2x" : "unpackage/res/icons/152x152.png",
|
||||
"notification" : "unpackage/res/icons/20x20.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x" : "unpackage/res/icons/167x167.png",
|
||||
"settings" : "unpackage/res/icons/29x29.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"spotlight" : "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png"
|
||||
},
|
||||
"iphone" : {
|
||||
"app@2x" : "unpackage/res/icons/120x120.png",
|
||||
"app@3x" : "unpackage/res/icons/180x180.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"notification@3x" : "unpackage/res/icons/60x60.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"settings@3x" : "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x" : "unpackage/res/icons/120x120.png"
|
||||
}
|
||||
}
|
||||
},
|
||||
"splashscreen" : {
|
||||
"useOriginalMsgbox" : true
|
||||
}
|
||||
}
|
||||
},
|
||||
"quickapp" : {},
|
||||
"mp-weixin" : {
|
||||
"requiredPrivateInfos" : [
|
||||
"chooseLocation",
|
||||
"getLocation",
|
||||
"chooseAddress",
|
||||
"onLocationChange",
|
||||
"startLocationUpdate",
|
||||
"startLocationUpdateBackground"
|
||||
],
|
||||
"appid" : "wxda7779770f53e901",
|
||||
"setting" : {
|
||||
"urlCheck" : false,
|
||||
"es6" : true,
|
||||
"minified" : true,
|
||||
"ignoreDevUnusedFiles" : false,
|
||||
"ignoreUploadUnusedFiles" : false
|
||||
},
|
||||
"usingComponents" : true,
|
||||
"permission" : {
|
||||
"scope.userLocation" : {
|
||||
"desc" : "你的位置将用于小程序中相应业务位置服务使用"
|
||||
}
|
||||
},
|
||||
"__usePrivacyCheck__" : true,
|
||||
"plugins" : {}
|
||||
},
|
||||
// 腾讯地图路线规划插件(需要到小程序后台设置->第三方设置->插件管理里面添加【腾讯位置服务路线规划】插件,教程 https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx50b5593e81dd937a)
|
||||
// "routePlan" : {
|
||||
// "version" : "1.0.19",
|
||||
// "provider" : "wx50b5593e81dd937a"
|
||||
// },
|
||||
// 直播(需要到小程序后台设置->第三方设置->插件管理里面添加【小程序直播组件】插件,教程 https://mp.weixin.qq.com/wxopen/pluginbasicprofile?action=intro&appid=wx2b03c6e691cd7370)
|
||||
// "live-player-plugin" : {
|
||||
// "version" : "1.3.5",
|
||||
// "provider" : "wx2b03c6e691cd7370"
|
||||
// }
|
||||
"mp-alipay" : {
|
||||
"usingComponents" : true,
|
||||
"appid" : "2021001173639600"
|
||||
},
|
||||
"mp-baidu" : {
|
||||
"usingComponents" : true,
|
||||
"appid" : "",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
}
|
||||
},
|
||||
"mp-toutiao" : {
|
||||
"usingComponents" : true,
|
||||
"appid" : "ttfb628ddf6458b04f",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
}
|
||||
},
|
||||
"networkTimeout" : {
|
||||
"request" : 10000,
|
||||
"downloadFile" : 10000
|
||||
},
|
||||
"mp-qq" : {
|
||||
"appid" : "1110736292",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
},
|
||||
"permission" : {
|
||||
"scope.userLocation" : {
|
||||
"desc" : "你的位置将用于小程序中相应业务位置服务使用"
|
||||
}
|
||||
}
|
||||
},
|
||||
"mp-kuaishou" : {
|
||||
"appid" : "ks669910446353970565"
|
||||
},
|
||||
"h5" : {
|
||||
"sdkConfigs" : {
|
||||
"maps" : {
|
||||
"qqmap" : {
|
||||
"key" : "56SBZ-PCC3G-US2QM-IXYFE-4DE5H-GRBDK"
|
||||
}
|
||||
}
|
||||
},
|
||||
"devServer" : {
|
||||
"https" : false,
|
||||
"port" : 8082
|
||||
// "proxy" : {
|
||||
// "/api" : {
|
||||
// // "target": "http://192.168.1.43:7777/",
|
||||
// "target" : "https://store.sxczgkj.com/",
|
||||
// "changeOrigin" : "true",
|
||||
// "pathRewrite" : {
|
||||
// "^/api" : ""
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
},
|
||||
"router" : {
|
||||
"mode" : "history",
|
||||
"base" : "/h5_store/"
|
||||
},
|
||||
"title" : "czg_shop",
|
||||
"template" : "template.h5.html"
|
||||
},
|
||||
"app" : {
|
||||
"router" : {
|
||||
"mode" : "history"
|
||||
}
|
||||
},
|
||||
"vueVersion" : "2",
|
||||
"locale" : "auto"
|
||||
"name": "ShopXO",
|
||||
"appid": "__UNI__F095115",
|
||||
"description": "ShopXO开源商城、MIT协议、可商用、可二次开发、满足99%电商运营需求",
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": 100,
|
||||
"transformPx": false,
|
||||
"app-plus": {
|
||||
"usingComponents": true,
|
||||
"nvueCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"autoclose": true,
|
||||
"delay": 0
|
||||
},
|
||||
"modules": {
|
||||
"Payment": {},
|
||||
"Barcode": {},
|
||||
"OAuth": {},
|
||||
"Maps": {},
|
||||
"Geolocation": {},
|
||||
"Share": {},
|
||||
"VideoPlayer": {},
|
||||
"Camera": {}
|
||||
},
|
||||
"distribute": {
|
||||
"android": {
|
||||
"permissions": [
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"targetSdkVersion": 30,
|
||||
"minSdkVersion": 23
|
||||
},
|
||||
"ios": {
|
||||
"dSYMs": false,
|
||||
"privacyDescription": {
|
||||
"NSPhotoLibraryUsageDescription": "获取用户手机相册用于提供相册图片素材",
|
||||
"NSPhotoLibraryAddUsageDescription": "将图片保存至手机相册",
|
||||
"NSCameraUsageDescription": "获取用户手机相册用于快捷拍照功能",
|
||||
"NSLocationWhenInUseUsageDescription": "该应用需要您的地理位置,以便为你提供当前位置信息",
|
||||
"NSLocationAlwaysUsageDescription": "该应用需要您的地理位置,以便为你提供当前位置信息",
|
||||
"NSLocationAlwaysAndWhenInUseUsageDescription": "该应用需要持续获取用户地理位置,以便为您提供实时的位置信息"
|
||||
}
|
||||
},
|
||||
"sdkConfigs": {
|
||||
"payment": {
|
||||
"alipay": {
|
||||
"__platform__": ["ios", "android"]
|
||||
},
|
||||
"weixin": {
|
||||
"__platform__": ["ios", "android"],
|
||||
"appid": "wx3bac19ff90c0a976",
|
||||
"UniversalLinks": "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"paypal": {
|
||||
"__platform__": ["ios", "android"],
|
||||
"returnURL_ios": "com.shopxo.mm://paypal",
|
||||
"returnURL_android": "com.shopxo.mm://paypal"
|
||||
}
|
||||
},
|
||||
"ad": {},
|
||||
"oauth": {
|
||||
"univerify": {},
|
||||
"apple": {},
|
||||
"weixin": {
|
||||
"appid": "wx3bac19ff90c0a976",
|
||||
"appsecret": "91f132b39c5c575fe61b04993c57c734",
|
||||
"UniversalLinks": "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"qq": {
|
||||
"appid": "102076195",
|
||||
"UniversalLinks": "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"google": {
|
||||
"clientid": "510187709509-fq3t5grcfh81t4ub491tiadrtfjbaes1.apps.googleusercontent.com"
|
||||
}
|
||||
},
|
||||
"maps": {
|
||||
"amap": {
|
||||
"name": "amapu9VF72Gg",
|
||||
"appkey_ios": "f55e9099897821681f5c74051e4527bd",
|
||||
"appkey_android": "ebe9f1d84f8ceb8b3c4ba6ead2bfa78b"
|
||||
}
|
||||
},
|
||||
"geolocation": {
|
||||
"system": {
|
||||
"__platform__": ["ios", "android"]
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"weixin": {
|
||||
"appid": "wx3bac19ff90c0a976",
|
||||
"UniversalLinks": "https://d1.shopxo.vip/.well-known/"
|
||||
},
|
||||
"qq": {
|
||||
"appid": "102076195",
|
||||
"UniversalLinks": "https://d1.shopxo.vip/.well-known/"
|
||||
}
|
||||
},
|
||||
"push": {}
|
||||
},
|
||||
"icons": {
|
||||
"android": {
|
||||
"hdpi": "unpackage/res/icons/72x72.png",
|
||||
"xhdpi": "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi": "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi": "unpackage/res/icons/192x192.png"
|
||||
},
|
||||
"ios": {
|
||||
"appstore": "unpackage/res/icons/1024x1024.png",
|
||||
"ipad": {
|
||||
"app": "unpackage/res/icons/76x76.png",
|
||||
"app@2x": "unpackage/res/icons/152x152.png",
|
||||
"notification": "unpackage/res/icons/20x20.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x": "unpackage/res/icons/167x167.png",
|
||||
"settings": "unpackage/res/icons/29x29.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"spotlight": "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png"
|
||||
},
|
||||
"iphone": {
|
||||
"app@2x": "unpackage/res/icons/120x120.png",
|
||||
"app@3x": "unpackage/res/icons/180x180.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"notification@3x": "unpackage/res/icons/60x60.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"settings@3x": "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x": "unpackage/res/icons/120x120.png"
|
||||
}
|
||||
}
|
||||
},
|
||||
"splashscreen": {
|
||||
"useOriginalMsgbox": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"quickapp": {},
|
||||
"mp-weixin": {
|
||||
"requiredPrivateInfos": [
|
||||
"chooseLocation",
|
||||
"getLocation",
|
||||
"chooseAddress",
|
||||
"onLocationChange",
|
||||
"startLocationUpdate",
|
||||
"startLocationUpdateBackground"
|
||||
],
|
||||
"appid": "wxda7779770f53e901",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
"minified": true,
|
||||
"ignoreDevUnusedFiles": false,
|
||||
"ignoreUploadUnusedFiles": false
|
||||
},
|
||||
"usingComponents": true,
|
||||
"permission": {
|
||||
"scope.userLocation": {
|
||||
"desc": "你的位置将用于小程序中相应业务位置服务使用"
|
||||
}
|
||||
},
|
||||
"__usePrivacyCheck__": true,
|
||||
"plugins": {}
|
||||
},
|
||||
// 腾讯地图路线规划插件(需要到小程序后台设置->第三方设置->插件管理里面添加【腾讯位置服务路线规划】插件,教程 https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx50b5593e81dd937a)
|
||||
// "routePlan" : {
|
||||
// "version" : "1.0.19",
|
||||
// "provider" : "wx50b5593e81dd937a"
|
||||
// },
|
||||
// 直播(需要到小程序后台设置->第三方设置->插件管理里面添加【小程序直播组件】插件,教程 https://mp.weixin.qq.com/wxopen/pluginbasicprofile?action=intro&appid=wx2b03c6e691cd7370)
|
||||
// "live-player-plugin" : {
|
||||
// "version" : "1.3.5",
|
||||
// "provider" : "wx2b03c6e691cd7370"
|
||||
// }
|
||||
"mp-alipay": {
|
||||
"usingComponents": true,
|
||||
"appid": "2021001173639600"
|
||||
},
|
||||
"mp-baidu": {
|
||||
"usingComponents": true,
|
||||
"appid": "",
|
||||
"setting": {
|
||||
"urlCheck": false
|
||||
}
|
||||
},
|
||||
"mp-toutiao": {
|
||||
"usingComponents": true,
|
||||
"appid": "ttfb628ddf6458b04f",
|
||||
"setting": {
|
||||
"urlCheck": false
|
||||
}
|
||||
},
|
||||
"networkTimeout": {
|
||||
"request": 10000,
|
||||
"downloadFile": 10000
|
||||
},
|
||||
"mp-qq": {
|
||||
"appid": "1110736292",
|
||||
"setting": {
|
||||
"urlCheck": false
|
||||
},
|
||||
"permission": {
|
||||
"scope.userLocation": {
|
||||
"desc": "你的位置将用于小程序中相应业务位置服务使用"
|
||||
}
|
||||
}
|
||||
},
|
||||
"mp-kuaishou": {
|
||||
"appid": "ks669910446353970565"
|
||||
},
|
||||
"h5": {
|
||||
"sdkConfigs": {
|
||||
"maps": {
|
||||
"qqmap": {
|
||||
"key": "56SBZ-PCC3G-US2QM-IXYFE-4DE5H-GRBDK"
|
||||
}
|
||||
}
|
||||
},
|
||||
"devServer": {
|
||||
"https": false,
|
||||
"port": 8082
|
||||
},
|
||||
// "proxy": {
|
||||
// "/api": {
|
||||
// "target": "http://192.168.1.43:7777/",
|
||||
// // "target": "https://store.sxczgkj.com/",
|
||||
// "changeOrigin": "true",
|
||||
// "pathRewrite": {
|
||||
// "^/api": ""
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
"router": {
|
||||
"mode": "history",
|
||||
"base": "/h5/"
|
||||
},
|
||||
"title": "czg_shop",
|
||||
"template": "template.h5.html"
|
||||
},
|
||||
"app": {
|
||||
"router": {
|
||||
"mode": "history"
|
||||
}
|
||||
},
|
||||
"vueVersion": "2",
|
||||
"locale": "auto"
|
||||
}
|
||||
// 匹配以 /api 开头的请求
|
||||
// target: 'https://test.invoice.sxczgkj.cn/', // 替换为你的后端 API 域名
|
||||
//192.168.1.43:7777/', // 替换为你的后端 API 域名
|
||||
// 允许跨域
|
||||
// 重写路径,去掉 /api 前缀
|
||||
|
||||
// 重写路径,去掉 /api 前缀
|
||||
17
pages.json
17
pages.json
@@ -125,12 +125,19 @@
|
||||
{
|
||||
"root": "pages/buy",
|
||||
"pages": [{
|
||||
"path": "buy",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": ""
|
||||
"path": "buy",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "wu_you_status",
|
||||
"style": {
|
||||
"navigationBarTitleText": "支付中..."
|
||||
}
|
||||
}
|
||||
}]
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/goods-search",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
*/
|
||||
.payment-list .item-content {
|
||||
padding: 20rpx 0;
|
||||
display: flex;
|
||||
}
|
||||
.payment-list .item-content .icon {
|
||||
width: 40rpx;
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
<view v-if="common_order_is_booking != 1 && payment_list.length > 0" :class="plugins_coin_is_valid ? 'br-t-f9' : ''">
|
||||
<view v-for="(item, index) in payment_list" :key="index">
|
||||
<view class="item flex-row jc-sb align-c" :data-value="item.id" :data-index="index" @tap="payment_event">
|
||||
<view class="item-content pr flex-1 flex-width">
|
||||
<view class="item-content flex pr flex-1 flex-width">
|
||||
<image v-if="(item.logo || null) != null" class="icon margin-right-sm va-m radius" :src="item.logo" mode="widthFix"></image>
|
||||
<text class="va-m">{{ item.name }}</text>
|
||||
<text v-if="(item.tips || null) !== null" class="pay-tips">{{ item.tips }}</text>
|
||||
@@ -508,7 +508,7 @@
|
||||
is_realstore_model: (params.realstore_id || null) != null,
|
||||
plugins_points_status: app.globalData.get_config('plugins_base.points.data.is_default_use_points', null) == 1,
|
||||
// pay_url: app.globalData.get_request_url('pay', 'order'),
|
||||
pay_url: app.globalData.get_request_url('getpayment', 'xo'),
|
||||
// pay_url: app.globalData.get_request_url('getpayment', 'xo'),
|
||||
qrcode_url: app.globalData.get_request_url('paycheck', 'order'),
|
||||
});
|
||||
|
||||
@@ -625,44 +625,54 @@
|
||||
},
|
||||
// 发起支付请求
|
||||
async onPay(order_id, payment_id = 0, payment_list) {
|
||||
console.log('发起支付请求', `${order_id}+${payment_id}+${JSON.stringify(payment_list)}`);
|
||||
let payment = payment_list.find((item) => item.id == payment_id).payment;
|
||||
if (payment == 'Weixin') {
|
||||
let web_openid = localStorage.getItem('web_openid');
|
||||
this.pay_url = app.globalData.get_request_url('getpayment', 'xo');
|
||||
if (!web_openid) {
|
||||
// 获取code换取web_openid
|
||||
const code = this.getCodeFromUrl();
|
||||
console.log('code===', code);
|
||||
if (!code) {
|
||||
this.handleAuthLogin();
|
||||
return;
|
||||
}
|
||||
uni.request({
|
||||
url: app.globalData.get_request_url('getwechatuserinfo', 'xo'),
|
||||
method: 'GET',
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
console.log('获取微信web_openid===', res.data);
|
||||
if (res.data.code == 0) {
|
||||
let data = res.data.data;
|
||||
localStorage.setItem('web_openid', data.openid);
|
||||
|
||||
let web_openid = localStorage.getItem('web_openid');
|
||||
console.log('onPay.web_openid===', web_openid);
|
||||
if (!web_openid) {
|
||||
// 获取code换取web_openid
|
||||
const code = this.getCodeFromUrl();
|
||||
console.log('code===', code);
|
||||
if (!code) {
|
||||
this.handleAuthLogin();
|
||||
return;
|
||||
this.$refs.payment.pay_handle(order_id, payment_id, payment_list);
|
||||
} else {
|
||||
this.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_list_loding_msg: res.data.msg,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// 直接走支付流程
|
||||
console.log('直接走支付流程');
|
||||
this.$refs.payment.pay_handle(order_id, payment_id, payment_list);
|
||||
}
|
||||
uni.request({
|
||||
url: app.globalData.get_request_url('getwechatuserinfo', 'xo'),
|
||||
method: 'GET',
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
console.log('获取微信web_openid===', res.data);
|
||||
if (res.data.code == 0) {
|
||||
let data = res.data.data;
|
||||
localStorage.setItem('web_openid', data.openid);
|
||||
}
|
||||
|
||||
this.$refs.payment.pay_handle(order_id, payment_id, payment_list);
|
||||
} else {
|
||||
this.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_list_loding_msg: res.data.msg,
|
||||
});
|
||||
}
|
||||
},
|
||||
if (payment == 'IEPayPoli') {
|
||||
console.log('开始无忧支付===', order_id);
|
||||
|
||||
this.pay_url = app.globalData.get_request_url('wuYouPay', 'xo');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.payment.pay_handle(order_id, payment_id, payment_list);
|
||||
});
|
||||
} else {
|
||||
// 直接走支付流程
|
||||
console.log('直接走支付流程');
|
||||
this.$refs.payment.pay_handle(order_id, payment_id, payment_list);
|
||||
}
|
||||
},
|
||||
// 初始化配置
|
||||
|
||||
352
pages/buy/wu_you_status.vue
Normal file
352
pages/buy/wu_you_status.vue
Normal file
@@ -0,0 +1,352 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<view class="loading">
|
||||
<image class="icon" src="/static/icon_paying.svg" mode="aspectFit"></image>
|
||||
<view class="t">
|
||||
{{ status }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import base64 from '../../common/js/lib/base64';
|
||||
|
||||
const app = getApp();
|
||||
export default {
|
||||
props: {
|
||||
// 支付id
|
||||
payment_id: 0,
|
||||
// 订单下标 ---- 用于处理支付成功后前端修改成功状态
|
||||
propTempPayIndex: {
|
||||
type: [Number, String],
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
status: '支付中...',
|
||||
pay_url: '',
|
||||
checkOrderTimer: null, // 存储定时器ID
|
||||
isChecking: false, // 请求状态标记
|
||||
checkTries: 0, // 当前尝试次数
|
||||
};
|
||||
},
|
||||
onLoad(e) {
|
||||
window.addEventListener('popstate', this.onPageBack);
|
||||
console.log('wu_you_status.onLoad===', e);
|
||||
this.pay_url = e;
|
||||
let wuyou = uni.getStorageSync('wuyouPay');
|
||||
if (this.pay_url.order_id && !wuyou.order_id) {
|
||||
uni.setStorageSync('wuyouPay', {
|
||||
order_id: this.pay_url.order_id,
|
||||
check: false,
|
||||
});
|
||||
this.payHandle();
|
||||
}
|
||||
},
|
||||
onHide() {
|
||||
console.log('页面关闭');
|
||||
if (this.checkOrderTimer) {
|
||||
console.log('清除未完成的订单查询定时器');
|
||||
clearTimeout(this.checkOrderTimer);
|
||||
}
|
||||
this.isChecking = false;
|
||||
this.checkTries = 0;
|
||||
},
|
||||
onShow() {
|
||||
let wuyou = uni.getStorageSync('wuyouPay');
|
||||
if (wuyou && wuyou.check) {
|
||||
this.checkOrderStatus();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onPageBack() {
|
||||
console.log('页面关闭');
|
||||
if (this.checkOrderTimer) {
|
||||
console.log('清除未完成的订单查询定时器');
|
||||
clearTimeout(this.checkOrderTimer);
|
||||
}
|
||||
this.isChecking = false;
|
||||
this.checkTries = 0;
|
||||
},
|
||||
// 开始支付
|
||||
payHandle() {
|
||||
console.log('开始支付00000');
|
||||
uni.request({
|
||||
url: app.globalData.get_request_url('wuYouPay', 'xo'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
ids: this.pay_url.order_id,
|
||||
payment_id: this.pay_url.payment_id,
|
||||
redirect_url: this.encodeAlipayCallbackUrl(window.location.href),
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
console.log('开始支付===', res);
|
||||
var data = res.data;
|
||||
console.log(data);
|
||||
if (data.code == 0) {
|
||||
console.log(data.data.data.h5_url);
|
||||
let wuyou2 = uni.getStorageSync('wuyouPay');
|
||||
wuyou2.check = true;
|
||||
uni.setStorageSync('wuyouPay', wuyou2);
|
||||
window.location.href = data.data.data.h5_url;
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: msg.msg,
|
||||
icon: 'none',
|
||||
mask: true,
|
||||
});
|
||||
// setTimeout(() => {
|
||||
// uni.redirectTo({
|
||||
// url: '/pages/user-order/user-order',
|
||||
// });
|
||||
// }, 1500);
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log(err);
|
||||
},
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 处理支付宝回调 URL 编码
|
||||
* @param {string} url - 原始回调 URL
|
||||
* @returns {string} - 经过 URL 编码和 Base64 编码后的字符串
|
||||
*/
|
||||
encodeAlipayCallbackUrl(url) {
|
||||
try {
|
||||
// 解析URL并移除查询参数
|
||||
const urlObj = new URL(url);
|
||||
const cleanUrl = new URL(urlObj.origin + urlObj.pathname);
|
||||
|
||||
// 1. Base64 编码(仅编码路径部分,不含参数)
|
||||
let base64Encoded;
|
||||
|
||||
if (typeof window !== 'undefined' && window.btoa) {
|
||||
base64Encoded = window.btoa(cleanUrl.href);
|
||||
} else if (typeof Buffer !== 'undefined') {
|
||||
base64Encoded = Buffer.from(cleanUrl.href, 'utf8').toString('base64');
|
||||
} else {
|
||||
throw new Error('无法进行 Base64 编码');
|
||||
}
|
||||
|
||||
// 2. URL 安全处理
|
||||
const safeBase64 = base64Encoded
|
||||
.replace(/\+/g, '-') // 替换 + 为 -
|
||||
.replace(/\//g, '_') // 替换 / 为 _
|
||||
.replace(/=+$/, ''); // 移除末尾的 =
|
||||
|
||||
// 3. 最终 URL 编码
|
||||
return encodeURIComponent(safeBase64);
|
||||
} catch (error) {
|
||||
console.error('URL编码失败:', error);
|
||||
throw new Error('无效的URL格式');
|
||||
}
|
||||
},
|
||||
// 检测是否支付成功
|
||||
checkOrderStatus() {
|
||||
let wuyou = uni.getStorageSync('wuyouPay');
|
||||
|
||||
// 已达到最大尝试次数或正在请求中,则返回
|
||||
if (this.checkTries >= 10 || this.isChecking) {
|
||||
if (this.checkTries >= 10) {
|
||||
console.log('checkOrderStatus.已达到最大查询次数');
|
||||
this.payFail();
|
||||
}
|
||||
return;
|
||||
}
|
||||
this.status = `查询中,请勿操作(${this.checkTries + 1}/10)...`;
|
||||
|
||||
this.checkTries++;
|
||||
this.isChecking = true;
|
||||
console.log(`checkOrderStatus.第${this.checkTries}次查询订单状态`);
|
||||
|
||||
uni.request({
|
||||
url: app.globalData.get_request_url('queryOrder', 'xo'),
|
||||
method: 'get',
|
||||
data: {
|
||||
id: wuyou.order_id,
|
||||
},
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
let data = res.data;
|
||||
console.log(`checkOrderStatus.第${this.checkTries}次查询结果`, res.data);
|
||||
|
||||
if (data.code == 0) {
|
||||
const status = data.data.status;
|
||||
|
||||
switch (status) {
|
||||
case 0: // 支付中,2秒后继续查询
|
||||
console.log(`checkOrderStatus.订单状态:支付中,继续查询(${this.checkTries}/10)`);
|
||||
this.checkOrderTimer = setTimeout(() => {
|
||||
this.checkOrderStatus();
|
||||
}, 2000);
|
||||
break;
|
||||
|
||||
case 1: // 支付成功,跳转到订单详情
|
||||
console.log('checkOrderStatus.订单状态:支付成功');
|
||||
uni.showToast({
|
||||
title: '支付成功,即将跳转订单详情',
|
||||
icon: 'none',
|
||||
mask: true,
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: `/pages/user-order-detail/user-order-detail?id=${wuyou.order_id}`,
|
||||
});
|
||||
}, 1000);
|
||||
break;
|
||||
|
||||
default: // 其他状态(如-1支付失败),终止查询
|
||||
console.log(`checkOrderStatus.订单状态异常:${status}`);
|
||||
this.payFail();
|
||||
}
|
||||
} else {
|
||||
// 请求成功但业务错误,终止查询
|
||||
console.error('checkOrderStatus.业务错误:', data.message);
|
||||
this.payFail();
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error(`checkOrderStatus.第${this.checkTries}次查询失败`, err);
|
||||
|
||||
// 请求失败,2秒后继续尝试(但不增加尝试次数)
|
||||
this.checkTries--; // 失败不计数
|
||||
this.checkOrderTimer = setTimeout(() => {
|
||||
this.checkOrderStatus();
|
||||
}, 2000);
|
||||
},
|
||||
complete: () => {
|
||||
// 请求完成,无论结果如何都重置状态
|
||||
this.isChecking = false;
|
||||
},
|
||||
});
|
||||
},
|
||||
payFail() {
|
||||
uni.showToast({
|
||||
title: '支付失败',
|
||||
icon: 'none',
|
||||
mask: true,
|
||||
});
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/user-order/user-order',
|
||||
});
|
||||
}, 1500);
|
||||
},
|
||||
// 支付失败数据设置 data:后台返回的参数, order_id: 订单id, msg: 错误提示信息
|
||||
order_item_pay_fail_handle(data, order_id, msg) {
|
||||
let back_data = {
|
||||
data: data,
|
||||
order_id: order_id,
|
||||
temp_pay_index: this.propTempPayIndex,
|
||||
payment_id: this.payment_id,
|
||||
};
|
||||
this.$emit('pay-fail', back_data);
|
||||
this.to_fail_page_event(msg);
|
||||
},
|
||||
// 失败跳转
|
||||
to_fail_page_event(msg) {
|
||||
let to_fail_page = this.propToFailPage || null;
|
||||
if (to_fail_page != null) {
|
||||
let join = to_fail_page.indexOf('?') == -1 ? '?' : '&';
|
||||
to_fail_page += join + 'msg=' + msg;
|
||||
if (this.propIsFailAlert) {
|
||||
// 现金支付
|
||||
uni.showModal({
|
||||
content: msg,
|
||||
showCancel: false,
|
||||
confirmText: this.$t('common.confirm'),
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
// 跳转支付页面
|
||||
app.globalData.url_open(to_fail_page, true);
|
||||
}
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// 跳转支付页面
|
||||
app.globalData.url_open(to_fail_page, true);
|
||||
}
|
||||
} else {
|
||||
if (msg) {
|
||||
app.globalData.showToast(msg);
|
||||
}
|
||||
}
|
||||
},
|
||||
// 支付成功数据设置 data:后台返回的参数, order_id: 订单id,is_to_page,是否需要跳转页面的参数控制
|
||||
order_item_pay_success_handle(data, order_id, is_to_page = true) {
|
||||
let back_data = {
|
||||
data: data,
|
||||
order_id: order_id,
|
||||
temp_pay_index: this.propTempPayIndex,
|
||||
payment_id: this.payment_id,
|
||||
is_to_page: is_to_page,
|
||||
};
|
||||
this.$emit('pay-success', back_data);
|
||||
if (is_to_page) {
|
||||
this.to_success_page_event();
|
||||
}
|
||||
},
|
||||
// 支付成功数据设置 data:后台返回的参数, order_id: 订单id,is_to_page,是否需要跳转页面的参数控制
|
||||
order_item_pay_success_handle(data, order_id, is_to_page = true) {
|
||||
let back_data = {
|
||||
data: data,
|
||||
order_id: order_id,
|
||||
temp_pay_index: this.propTempPayIndex,
|
||||
payment_id: this.payment_id,
|
||||
is_to_page: is_to_page,
|
||||
};
|
||||
this.$emit('pay-success', back_data);
|
||||
if (is_to_page) {
|
||||
this.to_success_page_event();
|
||||
}
|
||||
},
|
||||
// 成功跳转
|
||||
to_success_page_event() {
|
||||
if (this.propToPage) {
|
||||
// 跳转支付页面
|
||||
app.globalData.url_open(this.propToPage, true);
|
||||
} else {
|
||||
let url_data = {
|
||||
code: '9000',
|
||||
};
|
||||
url_data = Object.assign({}, url_data, this.propToPageBack);
|
||||
// 跳转支付页面
|
||||
app.globalData.url_open('/pages/paytips/paytips?params=' + encodeURIComponent(base64.encode(JSON.stringify(url_data))), this.propIsRedirectTo);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
padding-bottom: 40%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
.loading {
|
||||
display: flex;
|
||||
gap: 20upx;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.icon {
|
||||
$size: 300upx;
|
||||
width: $size;
|
||||
height: $size;
|
||||
}
|
||||
.t {
|
||||
font-size: 36upx;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
665
pages/index/index3.vue
Normal file
665
pages/index/index3.vue
Normal file
@@ -0,0 +1,665 @@
|
||||
<template>
|
||||
<view :class="theme_view">
|
||||
<view :class="(plugins_mourning_data_is_app ? ' grayscale' : '') + (is_single_page == 1 ? ' single-page-top' : '')">
|
||||
<!-- diy模式 -->
|
||||
<block v-if="data_mode == 3">
|
||||
<block v-if="(data_list || null) != null && (data_list.config || null) != null">
|
||||
<componentDiy :propValue="data_list.config" :propDataId="data_list.id" :propKey="random_value" @onLocationBack="user_back_choice_location">
|
||||
<!-- 底部内容 -->
|
||||
<template slot="diy-bottom-content">
|
||||
<!-- 结尾 -->
|
||||
<component-bottom-line :propStatus="data_bottom_line_status"></component-bottom-line>
|
||||
<!-- 版权信息 -->
|
||||
<component-copyright></component-copyright>
|
||||
</template>
|
||||
<!-- 底部公共 -->
|
||||
<template slot="diy-bottom-common">
|
||||
<component-common ref="common" :propIsGrayscale="plugins_mourning_data_is_app"></component-common>
|
||||
</template>
|
||||
</componentDiy>
|
||||
</block>
|
||||
<block v-else>
|
||||
<component-no-data propStatus="0" propPage="home"></component-no-data>
|
||||
</block>
|
||||
</block>
|
||||
<!-- 自动和手动模式 -->
|
||||
<block v-else>
|
||||
<!-- 顶部内容、如果没有轮播和导航则使用矮的浮动导航背景样式,则使用高的背景样式 -->
|
||||
<view v-if="load_status == 1" class="home-top-nav-content pr" :style="(banner_list.length > 0 || navigation.length > 0 ? top_content_bg_color : top_content_search_bg_color) + top_content_style">
|
||||
<!-- 顶部背景图片 -->
|
||||
<view class="pa top-0 left-0 right-0">
|
||||
<image class="bg-img wh-auto" mode="widthFix" :src="static_url + 'nav-top.png'"></image>
|
||||
</view>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<view v-if="common_app_is_header_nav_fixed == 1" :class="'search-fixed-seat ' + (common_app_is_enable_search == 1 ? 'nav-enable-search' : '')"></view>
|
||||
<view :class="'pr ' + (common_app_is_header_nav_fixed == 1 ? 'search-content-fixed' : '')" :style="common_app_is_header_nav_fixed == 1 ? top_content_search_bg_color : ''">
|
||||
<view :class="'search-content-fixed-content ' + (common_app_is_enable_search == 1 ? 'nav-enable-search' : '')" :style="(common_app_is_header_nav_fixed == 1 ? top_content_style : '') + (common_app_is_header_nav_fixed == 1 ? top_content_search_content_style : '')">
|
||||
<view class="home-top-nav margin-bottom-sm pr padding-right-main">
|
||||
<!-- 定位 -->
|
||||
<view v-if="is_home_location_choice == 1" class="home-top-nav-location dis-inline-block va-m single-text cr-white pr bs-bb padding-left-main padding-right-lg">
|
||||
<component-choice-location @onBack="user_back_choice_location"></component-choice-location>
|
||||
</view>
|
||||
<block v-else>
|
||||
<!-- logo/标题 -->
|
||||
<view class="home-top-nav-logo dis-inline-block va-m padding-left-main">
|
||||
<block v-if="is_home_logo_use_text == 0 && (application_logo || null) != null">
|
||||
<image :src="application_logo" mode="heightFix" class="home-top-nav-logo-image"></image>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view v-if="(application_title || null) != null" class="home-top-nav-logo-title cr-white single-text">{{ application_title }}</view>
|
||||
</block>
|
||||
</view>
|
||||
</block>
|
||||
<!-- #ifdef H5 || APP -->
|
||||
<!-- 右上角icon列表 -->
|
||||
<view v-if="(right_icon_list || null) != null && right_icon_list.length > 0" class="nav-top-right-icon fr">
|
||||
<block v-for="(item, index) in right_icon_list">
|
||||
<view class="item dis-inline-block cp pr" :data-value="item.url || ''" @tap="url_event">
|
||||
<iconfont :name="item.icon" size="38rpx" color="#fff"></iconfont>
|
||||
<view v-if="(item.badge || null) != null" class="badge-icon pa">
|
||||
<component-badge :propNumber="item.badge"></component-badge>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
<view v-if="common_app_is_enable_search == 1" class="search-content-input padding-horizontal-main">
|
||||
<!-- 是否开启搜索框前面icon扫一扫 -->
|
||||
<block v-if="is_home_search_scan == 1">
|
||||
<component-search :propIsBtn="true" propSize="sm" :propPlaceholder="$t('customview.customview.726k7y')" propPlaceholderClass="cr-grey-c" propIconColor="#999" propBgColor="#fff"
|
||||
<!-- #ifndef H5 -->
|
||||
@onicon="search_icon_event" propIcon="icon-scan" :propIsIconOnEvent="true"
|
||||
<!-- #endif -->
|
||||
></component-search>
|
||||
</block>
|
||||
<block v-else>
|
||||
<component-search :propIsBtn="true" propSize="sm" :propPlaceholder="$t('customview.customview.726k7y')" propPlaceholderClass="cr-grey-c" propIconColor="#999" propBgColor="#fff"></component-search>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 轮播 -->
|
||||
<view class="banner-content padding-horizontal-main margin-top-xs" v-if="banner_list.length > 0">
|
||||
<component-banner :propData="banner_list" @changeBanner="change_banner"></component-banner>
|
||||
</view>
|
||||
<!-- 导航 -->
|
||||
<view v-if="navigation.length > 0" class="spacing-mt" :class="load_status == 1 && (common_shop_notice || null) != null ? '' : ' spacing-mb'">
|
||||
<view class="padding-horizontal-main">
|
||||
<view class="bg-white border-radius-main">
|
||||
<component-icon-nav :propData="{ ...{ data: navigation }, ...{ random: random_value } }"></component-icon-nav>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 内容 -->
|
||||
<view class="content padding-horizontal-main pr">
|
||||
<!-- 商城公告 -->
|
||||
<view v-if="load_status == 1 && (common_shop_notice || null) != null" class="notice">
|
||||
<uni-notice-bar show-icon scrollable :text="common_shop_notice" background-color="transparent" color="#666" />
|
||||
</view>
|
||||
<!-- 推荐文章 -->
|
||||
<view v-if="article_list.length > 0" class="article-list padding-main border-radius-main oh bg-white spacing-mb">
|
||||
<view mode="aspectFit" class="new-icon va-m fl cp pr divider-r" data-value="/pages/article-category/article-category" @tap="url_event">
|
||||
<text>{{ $t('index.index.t8bll8') }}</text
|
||||
><text class="cr-red">{{ $t('index.index.t8bll9') }}</text>
|
||||
</view>
|
||||
<view class="right-content fr va-m">
|
||||
<swiper :vertical="true" :autoplay="true" :circular="true" display-multiple-items="1" interval="3000">
|
||||
<block v-for="(item, index) in article_list" :key="index">
|
||||
<swiper-item class="single-text">
|
||||
<text class="cr-base text-size-sm cp" :data-value="item.category_url" @tap="url_event">[{{ item.article_category_name }}]</text>
|
||||
<text class="cr-base text-size-sm margin-left-xs cp" :style="(item.title_color || null) != null ? 'color:' + item.title_color + ' !important;' : ''" :data-value="item.url" @tap="url_event">{{ item.title }}</text>
|
||||
</swiper-item>
|
||||
</block>
|
||||
</swiper>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 按照插件顺序渲染插件数据 -->
|
||||
<block v-if="plugins_sort_list.length > 0">
|
||||
<block v-for="(pv, pi) in plugins_sort_list" :key="pi">
|
||||
<!-- 首页中间广告 - 插件 -->
|
||||
<view v-if="pv.plugins == 'homemiddleadv' && (plugins_homemiddleadv_data || null) != null && plugins_homemiddleadv_data.length > 0" class="plugins-homemiddleadv oh spacing-mb">
|
||||
<view v-for="(item, index) in plugins_homemiddleadv_data" :key="index" class="item border-radius-main oh cp" :data-value="item.url || ''" @tap="url_event">
|
||||
<image class="dis-block wh-auto border-radius-main" :src="item.images" mode="widthFix"> </image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 限时秒杀 - 插件 -->
|
||||
<view v-if="pv.plugins == 'seckill' && (plugins_seckill_data || null) != null && (plugins_seckill_data.data || null) != null && (plugins_seckill_data.data.goods || null) != null && plugins_seckill_data.data.goods.length > 0" class="plugins-seckill-data border-radius-main spacing-mb bg-white" :style="'background-image: url(' + seckill_static_url + 'seckill-bg.png);'">
|
||||
<view class="flex-row jc-sb align-c padding-top-main padding-horizontal-main">
|
||||
<view class="flex-1">
|
||||
<image class="dis-inline-block va-m icon" :src="plugins_seckill_data.data.home_title_icon" mode="widthFix"></image>
|
||||
<view class="dis-inline-block va-m margin-left-sm">
|
||||
<component-countdown :propHour="plugins_seckill_data.data.time.hours" :propMinute="plugins_seckill_data.data.time.minutes" :propSecond="plugins_seckill_data.data.time.seconds"></component-countdown>
|
||||
</view>
|
||||
</view>
|
||||
<text data-value="/pages/plugins/seckill/index/index" @tap="url_event" class="arrow-right padding-right cr-grey text-size-xs cp">{{ $t('common.more') }}</text>
|
||||
</view>
|
||||
<component-goods-list :propData="{ style_type: 2, goods_list: plugins_seckill_data.data.goods }" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol" :propIsCartParaCurve="true" propSource="index" :propOpenCart="false"></component-goods-list>
|
||||
</view>
|
||||
|
||||
<!-- 活动配置-楼层顶部 - 插件 -->
|
||||
<view v-if="pv.plugins == 'activity' && (plugins_activity_data || null) != null">
|
||||
<component-activity-list :propConfig="plugins_activity_data.base" :propData="plugins_activity_data.data" propLocation="0" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol" :propIsCartParaCurve="true" propSource="index"></component-activity-list>
|
||||
</view>
|
||||
|
||||
<!-- 门店 - 插件 -->
|
||||
<view v-if="pv.plugins == 'realstore' && (plugins_realstore_data || null) != null">
|
||||
<view v-if="(plugins_realstore_data.base.home_data_list_title || null) != null" class="spacing-nav-title flex-row align-c jc-sb text-size-xs">
|
||||
<text class="text-wrapper title-left-border single-text flex-1 flex-width padding-right-main">{{ plugins_realstore_data.base.home_data_list_title }}</text>
|
||||
<text data-value="/pages/plugins/realstore/search/search" @tap="url_event" class="arrow-right padding-right cr-grey cp">{{ $t('common.more') }}</text>
|
||||
</view>
|
||||
<component-realstore-list :propData="{ ...{ data: plugins_realstore_data.data }, ...{ random: random_value } }"></component-realstore-list>
|
||||
</view>
|
||||
|
||||
<!-- 多商户 - 插件 -->
|
||||
<view v-if="pv.plugins == 'shop' && (plugins_shop_data || null) != null">
|
||||
<view v-if="(plugins_shop_data.base.home_data_list_title || null) != null" class="spacing-nav-title flex-row align-c jc-sb text-size-xs">
|
||||
<text class="text-wrapper title-left-border single-text flex-1 flex-width padding-right-main">{{ plugins_shop_data.base.home_data_list_title }}</text>
|
||||
<text data-value="/pages/plugins/shop/index/index" @tap="url_event" class="arrow-right padding-right cr-grey cp">{{ $t('common.more') }}</text>
|
||||
</view>
|
||||
<component-shop-list :propConfig="plugins_shop_data.base" :propData="{ ...{ data: plugins_shop_data.data }, ...{ random: random_value } }"></component-shop-list>
|
||||
</view>
|
||||
|
||||
<!-- 组合搭配 - 插件 -->
|
||||
<view v-if="pv.plugins == 'binding' && (plugins_binding_data || null) != null">
|
||||
<view v-if="(plugins_binding_data.base.home_data_list_title || null) != null" class="spacing-nav-title flex-row align-c jc-sb text-size-xs">
|
||||
<text class="text-wrapper title-left-border single-text flex-1 flex-width padding-right-main">{{ plugins_binding_data.base.home_data_list_title }}</text>
|
||||
<text data-value="/pages/plugins/binding/index/index" @tap="url_event" class="arrow-right padding-right cr-grey cp">{{ $t('common.more') }}</text>
|
||||
</view>
|
||||
<component-binding-list :propConfig="plugins_binding_data.base" :propData="{ ...{ data: plugins_binding_data.data }, ...{ random: random_value } }" :propCurrencySymbol="currency_symbol"></component-binding-list>
|
||||
</view>
|
||||
|
||||
<!-- 博客-楼层顶部 - 插件 -->
|
||||
<view v-if="pv.plugins == 'blog' && (plugins_blog_data || null) != null">
|
||||
<component-blog-list :propConfig="plugins_blog_data.base" :propData="plugins_blog_data.data" propLocation="0"></component-blog-list>
|
||||
</view>
|
||||
|
||||
<!-- 魔方 - 插件 -->
|
||||
<view v-if="pv.plugins == 'magic' && (plugins_magic_data || null) != null">
|
||||
<component-magic-list :propData="{ ...plugins_magic_data, ...{ random: random_value } }" :propCurrencySymbol="currency_symbol" :propLabel="plugins_label_data"></component-magic-list>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
|
||||
<!-- 楼层数据 -->
|
||||
<block v-if="(data_list || null) != null && data_list.length > 0">
|
||||
<!-- 数据模式0,1自动+手动、2拖拽 -->
|
||||
<block v-if="data_mode == 2">
|
||||
<!-- 引入拖拽数据模块 -->
|
||||
<component-layout :propData="data_list"></component-layout>
|
||||
</block>
|
||||
<block v-else>
|
||||
<!-- 自动+手动 -->
|
||||
<view v-for="(floor, index) in data_list" :key="index" class="floor">
|
||||
<view class="spacing-nav-title flex-row align-c jc-sb text-size-xs">
|
||||
<view class="title-left">
|
||||
<text class="text-wrapper title-left-border" :style="'color:' + (floor.bg_color || '#333') + ';'">{{ floor.name }}</text>
|
||||
<text v-if="(floor.describe || null) != null" class="vice-name margin-left-lg cr-grey">{{ floor.describe }}</text>
|
||||
</view>
|
||||
<text :data-value="'/pages/goods-search/goods-search?category_id=' + floor.id" @tap="url_event" class="arrow-right padding-right cr-grey cp">{{ $t('common.more') }}</text>
|
||||
</view>
|
||||
<view class="floor-list wh-auto oh pr">
|
||||
<block v-if="(floor.goods || null) != null && floor.goods.length > 0">
|
||||
<component-goods-list :propData="{ style_type: 1, goods_list: floor.goods }" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol" :propIsCartParaCurve="true" propSource="index"></component-goods-list>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
|
||||
<!-- 按照插件顺序渲染插件数据 -->
|
||||
<block v-if="plugins_sort_list.length > 0">
|
||||
<block v-for="(pv, pi) in plugins_sort_list" :key="pi">
|
||||
<!-- 活动配置-楼层底部 - 插件 -->
|
||||
<view v-if="pv.plugins == 'activity' && (plugins_activity_data || null) != null">
|
||||
<component-activity-list :propConfig="plugins_activity_data.base" :propData="plugins_activity_data.data" propLocation="1" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol" propSource="index" :propOpenCart="false"></component-activity-list>
|
||||
</view>
|
||||
|
||||
<!-- 博客-楼层底部 - 插件 -->
|
||||
<view v-if="pv.plugins == 'blog' && (plugins_blog_data || null) != null">
|
||||
<component-blog-list :propConfig="plugins_blog_data.base" :propData="plugins_blog_data.data" propLocation="1"></component-blog-list>
|
||||
</view>
|
||||
|
||||
<!--- 底部购买记录 - 插件 -->
|
||||
<view v-if="pv.plugins == 'salerecords' && (plugins_salerecords_data || null) != null && (plugins_salerecords_data.data || null) != null && plugins_salerecords_data.data.length > 0" class="plugins-salerecords bg-white border-radius-main padding-main spacing-mb">
|
||||
<view class="spacing-nav-title flex-row align-c jc-sb text-size-xs">
|
||||
<view class="title-left">
|
||||
<text class="text-wrapper">{{ plugins_salerecords_data.base.home_bottom_title || $t('index.index.s5r784') }}</text>
|
||||
<text v-if="(plugins_salerecords_data.base || null) != null && (plugins_salerecords_data.base.home_bottom_desc || null) != null" class="vice-name margin-left-sm cr-grey-9">{{ plugins_salerecords_data.base.home_bottom_desc }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="oh">
|
||||
<swiper :vertical="true" :autoplay="true" :circular="true" :display-multiple-items="plugins_salerecords_data.data.length < 6 ? plugins_salerecords_data.data.length : 6" interval="3000" :style="plugins_salerecords_data.data.length < 6 ? 'height:' + plugins_salerecords_data.data.length * 84.33 + 'rpx;' : ''">
|
||||
<block v-for="(item, index) in plugins_salerecords_data.data" :key="index">
|
||||
<swiper-item>
|
||||
<view class="item oh padding-vertical-main">
|
||||
<view class="item-content single-text fl">
|
||||
<image mode="widthFix" :src="item.user.avatar" class="va-m br"> </image>
|
||||
<text class="margin-left-sm">{{ item.user.user_name_view }}</text>
|
||||
<text v-if="(item.user.province || null) != null"><text class="padding-left-xs padding-right-xs">-</text>{{ item.user.province }}</text>
|
||||
</view>
|
||||
<view class="item-content fl">
|
||||
<view :data-value="item.goods_url" @tap="url_event" class="cp single-text">
|
||||
<image mode="widthFix" :src="item.images" class="va-m br"> </image>
|
||||
<text class="margin-left-sm single-text">{{ item.title }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-content single-text fr tr cr-grey padding-top-xs">
|
||||
{{ item.add_time }}
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</block>
|
||||
</swiper>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<!-- 提示信息 -->
|
||||
<block v-if="load_status == 0">
|
||||
<component-no-data :propStatus="data_list_loding_status" :propMsg="data_list_loding_msg" propPage="home" :propIsHeader="true"></component-no-data>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<!-- 页面已加载、模式 -->
|
||||
<block v-if="load_status == 1 && data_mode != 3">
|
||||
<!-- 结尾 -->
|
||||
<component-bottom-line :propStatus="data_bottom_line_status"></component-bottom-line>
|
||||
|
||||
<!-- 版权信息 -->
|
||||
<component-copyright></component-copyright>
|
||||
|
||||
<!-- 在线客服 -->
|
||||
<component-online-service :propIsNav="true" :propIsBar="true" :propIsGrayscale="plugins_mourning_data_is_app"></component-online-service>
|
||||
|
||||
<!-- 快捷导航 -->
|
||||
<component-quick-nav :propIsNav="true" :propIsBar="true" :propIsGrayscale="plugins_mourning_data_is_app"></component-quick-nav>
|
||||
|
||||
<!-- 公共 -->
|
||||
<component-common ref="common" :propIsGrayscale="plugins_mourning_data_is_app"></component-common>
|
||||
</block>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
const app = getApp();
|
||||
import componentCommon from '@/components/common/common';
|
||||
import componentSearch from '@/components/search/search';
|
||||
import componentQuickNav from '@/components/quick-nav/quick-nav';
|
||||
import componentIconNav from '@/components/icon-nav/icon-nav';
|
||||
import componentBanner from '@/components/slider/slider';
|
||||
import componentCountdown from '@/components/countdown/countdown';
|
||||
import componentLayout from '@/components/layout/layout';
|
||||
import componentBadge from '@/components/badge/badge';
|
||||
import componentNoData from '@/components/no-data/no-data';
|
||||
import componentBottomLine from '@/components/bottom-line/bottom-line';
|
||||
import componentCopyright from '@/components/copyright/copyright';
|
||||
import componentOnlineService from '@/components/online-service/online-service';
|
||||
import componentActivityList from '@/components/activity-list/activity-list';
|
||||
import componentBlogList from '@/components/blog-list/blog-list';
|
||||
import componentRealstoreList from '@/components/realstore-list/realstore-list';
|
||||
import componentShopList from '@/components/shop-list/shop-list';
|
||||
import componentGoodsList from '@/components/goods-list/goods-list';
|
||||
import componentBindingList from '@/components/binding-list/binding-list';
|
||||
import componentMagicList from '@/components/magic-list/magic-list';
|
||||
import componentDiy from '@/components/diy/diy';
|
||||
import componentChoiceLocation from '@/components/choice-location/choice-location';
|
||||
|
||||
// 状态栏高度
|
||||
var bar_height = parseInt(app.globalData.get_system_info('statusBarHeight', 0, true));
|
||||
// #ifdef MP-TOUTIAO
|
||||
bar_height = 0;
|
||||
// #endif
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
theme_view: '',
|
||||
theme_color: '',
|
||||
common_static_url: '',
|
||||
seckill_static_url: '',
|
||||
static_url: '',
|
||||
data_list_loding_status: 1,
|
||||
data_list_loding_msg: '',
|
||||
data_bottom_line_status: false,
|
||||
load_status: 0,
|
||||
currency_symbol: app.globalData.currency_symbol(),
|
||||
is_home_search_scan: app.globalData.data.is_home_search_scan,
|
||||
data_list: [],
|
||||
banner_list: [],
|
||||
navigation: [],
|
||||
article_list: [],
|
||||
cart_total: 0,
|
||||
message_total: 0,
|
||||
right_icon_list: [],
|
||||
// 首页数据模式
|
||||
data_mode: 0,
|
||||
// 增加随机数,避免无法监听数据列表内部数据更新
|
||||
random_value: 0,
|
||||
// 基础配置
|
||||
common_shop_notice: null,
|
||||
common_app_is_enable_search: 0,
|
||||
common_app_is_header_nav_fixed: 0,
|
||||
common_app_is_online_service: 0,
|
||||
// 顶部导航、名称、logo、定位
|
||||
application_title: app.globalData.data.application_title,
|
||||
application_logo: app.globalData.data.application_logo,
|
||||
is_home_logo_use_text: app.globalData.data.is_home_logo_use_text,
|
||||
is_home_location_choice: app.globalData.data.is_home_location_choice,
|
||||
// 顶部+搜索样式配置
|
||||
top_content_bg_color: '',
|
||||
top_content_search_bg_color: '',
|
||||
top_content_search_content_style: '',
|
||||
// #ifdef MP
|
||||
top_content_style: 'padding-top:' + (bar_height + 10) + 'px;',
|
||||
// #endif
|
||||
// #ifdef H5 || MP-TOUTIAO
|
||||
top_content_style: 'padding-top:' + (bar_height + 14) + 'px;',
|
||||
// #endif
|
||||
// #ifdef APP
|
||||
top_content_style: 'padding-top:' + bar_height + 'px;',
|
||||
// #endif
|
||||
// 是否单页预览
|
||||
is_single_page: app.globalData.is_current_single_page() || 0,
|
||||
// 轮播滚动时,背景色替换
|
||||
slider_bg: null,
|
||||
// 插件顺序列表
|
||||
plugins_sort_list: [],
|
||||
// 限时秒杀插件
|
||||
plugins_seckill_data: null,
|
||||
// 购买记录插件
|
||||
plugins_salerecords_data: null,
|
||||
// 活动配置插件
|
||||
plugins_activity_data: null,
|
||||
// 标签插件
|
||||
plugins_label_data: null,
|
||||
// 首页中间广告插件
|
||||
plugins_homemiddleadv_data: null,
|
||||
// 哀悼灰度插件
|
||||
plugins_mourning_data_is_app: app.globalData.is_app_mourning(),
|
||||
// 标签插件
|
||||
plugins_blog_data: null,
|
||||
// 门店插件
|
||||
plugins_realstore_data: null,
|
||||
// 多商户插件
|
||||
plugins_shop_data: null,
|
||||
// 组合搭配插件
|
||||
plugins_binding_data: null,
|
||||
// 魔方插件
|
||||
plugins_magic_data: null,
|
||||
};
|
||||
},
|
||||
|
||||
components: {
|
||||
componentCommon,
|
||||
componentSearch,
|
||||
componentQuickNav,
|
||||
componentIconNav,
|
||||
componentBanner,
|
||||
componentCountdown,
|
||||
componentLayout,
|
||||
componentBadge,
|
||||
componentNoData,
|
||||
componentBottomLine,
|
||||
componentCopyright,
|
||||
componentOnlineService,
|
||||
componentActivityList,
|
||||
componentBlogList,
|
||||
componentRealstoreList,
|
||||
componentShopList,
|
||||
componentGoodsList,
|
||||
componentBindingList,
|
||||
componentMagicList,
|
||||
componentDiy,
|
||||
componentChoiceLocation,
|
||||
},
|
||||
|
||||
onLoad(params) {
|
||||
// 调用公共事件方法
|
||||
app.globalData.page_event_onload_handle(params);
|
||||
},
|
||||
|
||||
onShow() {
|
||||
// 调用公共事件方法
|
||||
app.globalData.page_event_onshow_handle();
|
||||
|
||||
// 数据加载
|
||||
this.init();
|
||||
|
||||
// 初始化配置
|
||||
this.init_config();
|
||||
|
||||
// 公共onshow事件
|
||||
if ((this.$refs.common || null) != null) {
|
||||
this.$refs.common.on_show({object: this, method: 'init'});
|
||||
}
|
||||
|
||||
// 设置顶部导航的默认颜色
|
||||
this.set_navigation_bar_color();
|
||||
},
|
||||
|
||||
// 下拉刷新
|
||||
onPullDownRefresh() {
|
||||
if (this.data_list_loding_status === 1) {
|
||||
uni.stopPullDownRefresh();
|
||||
} else {
|
||||
this.init();
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 初始化配置
|
||||
init_config(status) {
|
||||
if ((status || false) == true) {
|
||||
this.setData({
|
||||
currency_symbol: app.globalData.get_config('currency_symbol'),
|
||||
common_shop_notice: app.globalData.get_config('config.common_shop_notice'),
|
||||
common_app_is_enable_search: app.globalData.get_config('config.common_app_is_enable_search'),
|
||||
common_app_is_header_nav_fixed: app.globalData.get_config('config.common_app_is_header_nav_fixed'),
|
||||
common_app_is_online_service: app.globalData.get_config('config.common_app_is_online_service'),
|
||||
application_title: app.globalData.get_application_title(),
|
||||
application_logo: app.globalData.get_application_logo(),
|
||||
});
|
||||
} else {
|
||||
app.globalData.is_config(this, 'init_config');
|
||||
}
|
||||
},
|
||||
|
||||
// 获取数据
|
||||
init(params = {}) {
|
||||
// 还没有数据则读取缓存
|
||||
var cache_key = app.globalData.data.cache_index_data_key;
|
||||
if (this.load_status == 0) {
|
||||
// 本地缓存数据
|
||||
var upd_data = uni.getStorageSync(cache_key) || null;
|
||||
if (upd_data != null) {
|
||||
// 先使用缓存数据展示
|
||||
this.setData(upd_data);
|
||||
|
||||
// 初始化返回公共处理
|
||||
this.init_result_common_handle();
|
||||
|
||||
// 已有本地缓存则直接取远程有效数据(默认首次取的是远程缓存数据)
|
||||
params['is_cache'] = 0;
|
||||
|
||||
// 设置顶部导航的默认颜色
|
||||
this.set_navigation_bar_color();
|
||||
}
|
||||
} else {
|
||||
// 已有本地缓存则直接取远程有效数据(默认首次取的是远程缓存数据)
|
||||
params['is_cache'] = 0;
|
||||
}
|
||||
|
||||
// 网络检查
|
||||
if ((params || null) == null || (params.loading || 0) == 0) {
|
||||
app.globalData.network_type_handle(this, 'init', params);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 没有缓存数据则开启加载层
|
||||
if (upd_data == null) {
|
||||
this.setData({
|
||||
data_list_loding_status: 1,
|
||||
});
|
||||
}
|
||||
// 请求远程数据
|
||||
uni.request({
|
||||
url: app.globalData.get_request_url('index', 'index'),
|
||||
method: 'POST',
|
||||
data: params,
|
||||
dataType: 'json',
|
||||
success: (res) => {
|
||||
uni.stopPullDownRefresh();
|
||||
// 数据处理
|
||||
var data = res.data.data;
|
||||
if (res.data.code == 0) {
|
||||
var data_list = data.data_list || null;
|
||||
var upd_data = {
|
||||
random_value: Math.random(),
|
||||
data_bottom_line_status: true,
|
||||
banner_list: data.banner_list || [],
|
||||
navigation: data.navigation || [],
|
||||
article_list: data.article_list || [],
|
||||
data_mode: data.data_mode || 0,
|
||||
data_list: data_list,
|
||||
cart_total: data.cart_total.buy_number || 0,
|
||||
message_total: parseInt(data.message_total || 0),
|
||||
right_icon_list: data.right_icon_list || [],
|
||||
data_list_loding_status: data_list == null || data_list.length == 0 ? 0 : 3,
|
||||
plugins_sort_list: data.plugins_sort_list || [],
|
||||
plugins_seckill_data: data.plugins_seckill_data || null,
|
||||
plugins_salerecords_data: (data.plugins_salerecords_data || null) == null || data.plugins_salerecords_data.length <= 0 ? null : data.plugins_salerecords_data,
|
||||
plugins_activity_data: (data.plugins_activity_data || null) == null || data.plugins_activity_data.length <= 0 ? null : data.plugins_activity_data,
|
||||
plugins_label_data: (data.plugins_label_data || null) == null || (data.plugins_label_data.base || null) == null || (data.plugins_label_data.data || null) == null || data.plugins_label_data.data.length <= 0 ? null : data.plugins_label_data,
|
||||
plugins_homemiddleadv_data: (data.plugins_homemiddleadv_data || null) == null || data.plugins_homemiddleadv_data.length <= 0 ? null : data.plugins_homemiddleadv_data,
|
||||
plugins_mourning_data_is_app: parseInt(data.plugins_mourning_data || 0) == 1,
|
||||
plugins_blog_data: data.plugins_blog_data || null,
|
||||
plugins_realstore_data: data.plugins_realstore_data || null,
|
||||
plugins_shop_data: data.plugins_shop_data || null,
|
||||
plugins_binding_data: data.plugins_binding_data || null,
|
||||
plugins_magic_data: data.plugins_magic_data || null,
|
||||
};
|
||||
// 如果开启了哀悼灰色则不固定导航
|
||||
if (upd_data.plugins_mourning_data_is_app == 1) {
|
||||
upd_data['common_app_is_header_nav_fixed'] = 0;
|
||||
}
|
||||
this.setData(upd_data);
|
||||
|
||||
// 存储缓存
|
||||
uni.setStorageSync(cache_key, upd_data);
|
||||
|
||||
// 设置顶部导航的默认颜色
|
||||
this.set_navigation_bar_color();
|
||||
|
||||
// 是否需要重新加载数据
|
||||
if (parseInt(data.is_result_data_cache || 0) == 1) {
|
||||
this.init({ is_cache: 0 });
|
||||
} else {
|
||||
// 购物车导航角标
|
||||
app.globalData.set_tab_bar_badge('cart', this.cart_total);
|
||||
}
|
||||
} else {
|
||||
this.setData({
|
||||
data_list_loding_status: 0,
|
||||
data_list_loding_msg: res.data.msg,
|
||||
data_bottom_line_status: true,
|
||||
});
|
||||
}
|
||||
|
||||
// 初始化返回公共处理
|
||||
this.init_result_common_handle();
|
||||
},
|
||||
fail: () => {
|
||||
// 轮播数据处理
|
||||
if (this.load_status == 0 || (this.top_content_search_bg_color || null) == null) {
|
||||
this.change_banner(app.globalData.get_theme_color());
|
||||
}
|
||||
|
||||
uni.stopPullDownRefresh();
|
||||
this.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_list_loding_msg: this.$t('common.internet_error_tips'),
|
||||
data_bottom_line_status: true,
|
||||
load_status: 1,
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// 设置顶部导航的默认颜色
|
||||
set_navigation_bar_color() {
|
||||
if(this.data_mode == 3) {
|
||||
app.globalData.set_navigation_bar_color(parseInt(app.globalData.get_key_data(this.data_list, 'config.header.com_data.style.function_buttons_type', 0)) == 1);
|
||||
}
|
||||
},
|
||||
|
||||
// 初始化返回公共处理
|
||||
init_result_common_handle() {
|
||||
var theme_view = app.globalData.get_theme_value_view();
|
||||
var theme_color = app.globalData.get_theme_color();
|
||||
var common_static_url = app.globalData.get_static_url('common');
|
||||
var seckill_static_url = app.globalData.get_static_url('seckill', true) + 'app/';
|
||||
var static_url = app.globalData.get_static_url('home');
|
||||
|
||||
// 轮播数据处理
|
||||
if (this.load_status == 0 || (this.top_content_search_bg_color || null) == null) {
|
||||
var color = this.banner_list && this.banner_list.length > 0 && (this.banner_list[0]['bg_color'] || null) != null ? this.banner_list[0]['bg_color'] : theme_color;
|
||||
this.change_banner(color);
|
||||
}
|
||||
|
||||
// 公共数据
|
||||
this.setData({
|
||||
top_content_search_content_style: 'background-image: url("' + static_url + 'nav-top.png");',
|
||||
theme_view: theme_view,
|
||||
theme_color: theme_color,
|
||||
common_static_url: common_static_url,
|
||||
seckill_static_url: seckill_static_url,
|
||||
static_url: static_url,
|
||||
load_status: 1,
|
||||
});
|
||||
|
||||
// 分享菜单处理、延时执行,确保基础数据已加载完成
|
||||
setTimeout(function () {
|
||||
app.globalData.page_share_handle();
|
||||
}, 3000);
|
||||
},
|
||||
|
||||
// 选择用户地理位置回调
|
||||
user_back_choice_location(e) {
|
||||
// 重新刷新数据
|
||||
this.init();
|
||||
},
|
||||
|
||||
// url事件
|
||||
url_event(e) {
|
||||
app.globalData.url_event(e);
|
||||
},
|
||||
|
||||
// 轮播改变、背景色处理
|
||||
change_banner(color) {
|
||||
if ((color || null) == null) {
|
||||
color = this.theme_color;
|
||||
}
|
||||
this.setData({
|
||||
top_content_bg_color: 'background: linear-gradient(180deg, ' + color + ' 0%, #f5f5f5 80%);',
|
||||
top_content_search_bg_color: 'background: linear-gradient(180deg, ' + color + ' 0%, #f5f5f5 300%);',
|
||||
});
|
||||
},
|
||||
|
||||
// 搜索icon扫码事件
|
||||
search_icon_event(e) {
|
||||
app.globalData.scan_handle();
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
@import './index.css';
|
||||
</style>
|
||||
1
static/icon_paying.svg
Normal file
1
static/icon_paying.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747193795742" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17131" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M520.2 520m-450 0a450 450 0 1 0 900 0 450 450 0 1 0-900 0Z" fill="#72E798" opacity=".6" p-id="17132"></path><path d="M572.6 367.8l-7.7-23c-7.2-21.2-30.1-32.7-51.4-25.5l-144.7 48.6h203.8z m0 0" fill="#13D48D" p-id="17133"></path><path d="M654.4 376.1l-7.8-23.2c-7.2-21.3-30.3-32.9-51.7-25.7L449.4 376h205z m0 0" fill="#13D48D" p-id="17134"></path><path d="M700.7 722.8H339.6c-24.1 0-43.7-19.6-43.7-43.7V399.5c0-24.1 19.6-43.7 43.7-43.7h361.2c24.1 0 43.7 19.6 43.7 43.7v279.6c-0.1 24.2-19.6 43.7-43.8 43.7z m0 0" fill="#13D48D" p-id="17135"></path><path d="M626 580.3c-22.4 0-40.5-18.1-40.5-40.5s18.1-40.5 40.5-40.5l118.6-0.9v81.1l-118.6 0.8z m0 0" fill="#FFFFFF" p-id="17136"></path><path d="M662.1 540.3c0 7.3 3.9 14 10.2 17.6 6.3 3.6 14 3.6 20.3 0 6.3-3.6 10.2-10.3 10.2-17.6 0-7.3-3.9-14-10.2-17.6-6.3-3.6-14-3.6-20.3 0a20.25 20.25 0 0 0-10.2 17.6z m0 0" fill="#13D48D" p-id="17137"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user