feat: 首页改版
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
{
|
||||
"customPlaygroundType" : "local",
|
||||
"packageName" : "com.trustbridge.mm",
|
||||
"playground" : "standard",
|
||||
"playground" : "custom",
|
||||
"type" : "uni-app:app-android"
|
||||
},
|
||||
{
|
||||
|
||||
+2
-2
@@ -655,7 +655,7 @@
|
||||
.sort_comm_warp {
|
||||
background: #ffffff;
|
||||
padding: 20rpx;
|
||||
height: 170rpx;
|
||||
// height: 170rpx;
|
||||
border-radius: 20rpx;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
@@ -666,7 +666,7 @@
|
||||
.sort_item_comm {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
margin-bottom: 20rpx;
|
||||
// margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.sort_item_title_comm {
|
||||
|
||||
@@ -162,11 +162,6 @@ export default {
|
||||
// #endif
|
||||
},
|
||||
beforeUnmount() {
|
||||
if (this.panelVisible) {
|
||||
try {
|
||||
uni.showTabBar({ animation: false });
|
||||
} catch (e) {}
|
||||
}
|
||||
uni.$off("qiaobao-visibility-change", this.handleVisibilityChange);
|
||||
// #ifdef H5
|
||||
window.removeEventListener("mousemove", this.handleMouseDragMove);
|
||||
@@ -382,17 +377,11 @@ export default {
|
||||
this.showBubble = false;
|
||||
this.panelVisible = true;
|
||||
this.action = "blink";
|
||||
try {
|
||||
uni.hideTabBar({ animation: false });
|
||||
} catch (e) {}
|
||||
this.$emit("open", this.currentPageKey);
|
||||
},
|
||||
closeHelp() {
|
||||
this.panelVisible = false;
|
||||
this.action = "idle";
|
||||
try {
|
||||
uni.showTabBar({ animation: false });
|
||||
} catch (e) {}
|
||||
this.$emit("close", this.currentPageKey);
|
||||
},
|
||||
openHideMenu() {
|
||||
@@ -417,11 +406,6 @@ export default {
|
||||
collapseToEdge(edge = getQiaobaoDockEdge()) {
|
||||
this.collapsedEdge = edge === "left" ? "left" : "right";
|
||||
this.collapsed = true;
|
||||
if (this.panelVisible) {
|
||||
try {
|
||||
uni.showTabBar({ animation: false });
|
||||
} catch (e) {}
|
||||
}
|
||||
this.panelVisible = false;
|
||||
this.showBubble = false;
|
||||
this.action = "idle";
|
||||
|
||||
+216
-212
@@ -1,212 +1,216 @@
|
||||
{
|
||||
"name": "信任桥",
|
||||
"appid": "__UNI__4910728",
|
||||
"description": "信任桥优品是一款集线上商城、线下联盟商家的DAO聚合商城;通过“有趣”“有利”“有希望”的卖货玩法,吸引消费者、推广者、商家、投资人参与生态,共同打造共创共享的全球产业生态。",
|
||||
"versionName": "1.0.3",
|
||||
"versionCode": 170,
|
||||
"transformPx": false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus": {
|
||||
"name": "哈希优品",
|
||||
"usingComponents": true,
|
||||
"nvueStyleCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"ios": {
|
||||
"deploymentTarget": "13.0"
|
||||
},
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"delay": 0,
|
||||
"duration": 0,
|
||||
"autoclose": false
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules": {
|
||||
"Payment": {},
|
||||
"Camera": {},
|
||||
"OAuth": {},
|
||||
"Share": {}
|
||||
},
|
||||
/* 应用发布信息 */
|
||||
"distribute": {
|
||||
/* android打包配置 */
|
||||
"android": {
|
||||
"schemes": ["trustbridgeapp"],
|
||||
"permissions": [
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters": ["armeabi-v7a", "arm64-v8a"],
|
||||
"targetSdkVersion": 30,
|
||||
"minSdkVersion": 21
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios": {
|
||||
"dSYMs": false,
|
||||
"idfa": false,
|
||||
"urltypes": [{
|
||||
"urlidentifier": "com.trustbridgeapp.mm",
|
||||
"urlschemes": ["trustbridgeapp"]
|
||||
}],
|
||||
"associatedDomains": ["applinks:ulink.trustbridgeapp.com"],
|
||||
"capabilities": {
|
||||
"entitlements": {
|
||||
"com.apple.developer.associated-domains": ["applinks:app.tbmall.xin"]
|
||||
}
|
||||
},
|
||||
"privacyDescription": {
|
||||
"NSPhotoLibraryUsageDescription": "App需要您的同意才能访问相册,以便您选择本地图片上传头像或发布商品评价。例如:当您修改个人头像或发布带图评价时,需要从相册选择图片。",
|
||||
"NSPhotoLibraryAddUsageDescription": "App需要您的同意才能添加图片到相册,以便您保存商品海报或图片到本地。例如:当您点击保存商品分享海报时,需要写入相册权限。",
|
||||
"NSCameraUsageDescription": "App需要您的同意才能访问相机,以便您拍摄图片上传头像或发布商品评价。例如:当您修改个人头像或发布带图评价时,需要使用相机拍摄照片。"
|
||||
}
|
||||
},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs": {
|
||||
"payment": {
|
||||
"alipay": {
|
||||
"__platform__": ["ios", "android"]
|
||||
},
|
||||
"weixin": {
|
||||
"__platform__": ["ios", "android"],
|
||||
"appid": "wx7a5902cd556d9396",
|
||||
"UniversalLinks": "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"weixin": {
|
||||
"appid": "wx7a5902cd556d9396",
|
||||
"UniversalLinks": "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
},
|
||||
"apple": {}
|
||||
},
|
||||
"share": {
|
||||
"weixin": {
|
||||
"appid": "wx7a5902cd556d9396",
|
||||
"UniversalLinks": "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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,
|
||||
"iosStyle": "common",
|
||||
"androidStyle": "common"
|
||||
}
|
||||
},
|
||||
/*忽略版本提示*/
|
||||
"compatible": {
|
||||
"ignoreVersion": true
|
||||
},
|
||||
"nativePlugins": {
|
||||
"Hyy-Alipay": {
|
||||
"__plugin_info__": {
|
||||
"name": "【免费开源】支付宝,授权,授权登录",
|
||||
"description": "用过支付宝原生sdk,原生授权登录,更安全,有问题请联系作者",
|
||||
"platforms": "Android",
|
||||
"url": "https://ext.dcloud.net.cn/plugin?id=11931",
|
||||
"android_package_name": "",
|
||||
"ios_bundle_id": "",
|
||||
"isCloud": true,
|
||||
"bought": 1,
|
||||
"pid": "11931",
|
||||
"parameters": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp": {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin": {
|
||||
"appid": "wx376a16a88befe265",
|
||||
"lazyCodeLoading": "requiredComponents",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"minified": true,
|
||||
"uglifyFileName": true,
|
||||
"es6": true,
|
||||
"postcss": true,
|
||||
"sourcemap": false
|
||||
},
|
||||
"usingComponents": true,
|
||||
"optimization": {
|
||||
"subPackages": true
|
||||
}
|
||||
},
|
||||
"mp-alipay": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-baidu": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-toutiao": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"uniStatistics": {
|
||||
"enable": false
|
||||
},
|
||||
"vueVersion": "3",
|
||||
"_spaceID": "mp-16f2830d-655c-4ed2-9763-d0258ba65ad9",
|
||||
"h5": {
|
||||
"router": {
|
||||
"mode": "hash",
|
||||
"base": ""
|
||||
},
|
||||
"devServer": {
|
||||
"port": 5173,
|
||||
"proxy": {
|
||||
"/proxy-api": {
|
||||
"target": "https://api.o.tbmall.xin",
|
||||
"changeOrigin": true,
|
||||
"pathRewrite": {
|
||||
"^/proxy-api": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"name" : "信任桥",
|
||||
"appid" : "__UNI__4910728",
|
||||
"description" : "信任桥优品是一款集线上商城、线下联盟商家的DAO聚合商城;通过“有趣”“有利”“有希望”的卖货玩法,吸引消费者、推广者、商家、投资人参与生态,共同打造共创共享的全球产业生态。",
|
||||
"versionName" : "1.0.3",
|
||||
"versionCode" : 170,
|
||||
"transformPx" : false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
"name" : "哈希优品",
|
||||
"usingComponents" : true,
|
||||
"nvueStyleCompiler" : "uni-app",
|
||||
"compilerVersion" : 3,
|
||||
"ios" : {
|
||||
"deploymentTarget" : "13.0"
|
||||
},
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"delay" : 0,
|
||||
"duration" : 0,
|
||||
"autoclose" : false
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules" : {
|
||||
"Payment" : {},
|
||||
"Camera" : {},
|
||||
"OAuth" : {},
|
||||
"Share" : {},
|
||||
"Audio" : {},
|
||||
"Record" : {}
|
||||
},
|
||||
/* 应用发布信息 */
|
||||
"distribute" : {
|
||||
/* android打包配置 */
|
||||
"android" : {
|
||||
"schemes" : [ "trustbridgeapp" ],
|
||||
"permissions" : [
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
|
||||
"targetSdkVersion" : 30,
|
||||
"minSdkVersion" : 21
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios" : {
|
||||
"dSYMs" : false,
|
||||
"idfa" : false,
|
||||
"urltypes" : [
|
||||
{
|
||||
"urlidentifier" : "com.trustbridgeapp.mm",
|
||||
"urlschemes" : [ "trustbridgeapp" ]
|
||||
}
|
||||
],
|
||||
"associatedDomains" : [ "applinks:ulink.trustbridgeapp.com" ],
|
||||
"capabilities" : {
|
||||
"entitlements" : {
|
||||
"com.apple.developer.associated-domains" : [ "applinks:app.tbmall.xin" ]
|
||||
}
|
||||
},
|
||||
"privacyDescription" : {
|
||||
"NSPhotoLibraryUsageDescription" : "App需要您的同意才能访问相册,以便您选择本地图片上传头像或发布商品评价。例如:当您修改个人头像或发布带图评价时,需要从相册选择图片。",
|
||||
"NSPhotoLibraryAddUsageDescription" : "App需要您的同意才能添加图片到相册,以便您保存商品海报或图片到本地。例如:当您点击保存商品分享海报时,需要写入相册权限。",
|
||||
"NSCameraUsageDescription" : "App需要您的同意才能访问相机,以便您拍摄图片上传头像或发布商品评价。例如:当您修改个人头像或发布带图评价时,需要使用相机拍摄照片。"
|
||||
}
|
||||
},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs" : {
|
||||
"payment" : {
|
||||
"alipay" : {
|
||||
"__platform__" : [ "ios", "android" ]
|
||||
},
|
||||
"weixin" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appid" : "wx7a5902cd556d9396",
|
||||
"UniversalLinks" : "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
}
|
||||
},
|
||||
"oauth" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx7a5902cd556d9396",
|
||||
"UniversalLinks" : "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
},
|
||||
"apple" : {}
|
||||
},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx7a5902cd556d9396",
|
||||
"UniversalLinks" : "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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,
|
||||
"iosStyle" : "common",
|
||||
"androidStyle" : "common"
|
||||
}
|
||||
},
|
||||
/*忽略版本提示*/
|
||||
"compatible" : {
|
||||
"ignoreVersion" : true
|
||||
},
|
||||
"nativePlugins" : {
|
||||
"Hyy-Alipay" : {
|
||||
"__plugin_info__" : {
|
||||
"name" : "【免费开源】支付宝,授权,授权登录",
|
||||
"description" : "用过支付宝原生sdk,原生授权登录,更安全,有问题请联系作者",
|
||||
"platforms" : "Android",
|
||||
"url" : "https://ext.dcloud.net.cn/plugin?id=11931",
|
||||
"android_package_name" : "",
|
||||
"ios_bundle_id" : "",
|
||||
"isCloud" : true,
|
||||
"bought" : 1,
|
||||
"pid" : "11931",
|
||||
"parameters" : {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp" : {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin" : {
|
||||
"appid" : "wx376a16a88befe265",
|
||||
"lazyCodeLoading" : "requiredComponents",
|
||||
"setting" : {
|
||||
"urlCheck" : false,
|
||||
"minified" : true,
|
||||
"uglifyFileName" : true,
|
||||
"es6" : true,
|
||||
"postcss" : true,
|
||||
"sourcemap" : false
|
||||
},
|
||||
"usingComponents" : true,
|
||||
"optimization" : {
|
||||
"subPackages" : true
|
||||
}
|
||||
},
|
||||
"mp-alipay" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-baidu" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-toutiao" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"uniStatistics" : {
|
||||
"enable" : false
|
||||
},
|
||||
"vueVersion" : "3",
|
||||
"_spaceID" : "mp-16f2830d-655c-4ed2-9763-d0258ba65ad9",
|
||||
"h5" : {
|
||||
"router" : {
|
||||
"mode" : "hash",
|
||||
"base" : ""
|
||||
},
|
||||
"devServer" : {
|
||||
"port" : 5173,
|
||||
"proxy" : {
|
||||
"/proxy-api" : {
|
||||
"target" : "https://api.o.tbmall.xin",
|
||||
"changeOrigin" : true,
|
||||
"pathRewrite" : {
|
||||
"^/proxy-api" : ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+277
-132
@@ -1,78 +1,86 @@
|
||||
<template>
|
||||
<view class="home_warp" :class="platformType ? '' : 'iosplatformType'">
|
||||
<!-- 带背景的头部 -->
|
||||
<view class="home_content_z_warp">
|
||||
<view class="home_header_warp" :style="mpHeaderWarpStyle">
|
||||
<view class="header_title_warp" :style="mpHeaderStyle">
|
||||
<view class="language_warp" style="flex: 1; justify-content: flex-start;" @click="jumpSearch">
|
||||
<view :style="isMP ? 'display: flex; align-items: center;margin-top: 10rpx;' : 'margin-top: 10rpx;'">
|
||||
<up-image src="https://static.tbmall.xin/static/home/search_b.png" width="20" height="20"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
</view>
|
||||
<text class="search_msg_warp" :style="isMP ? 'line-height: 1;' : ''">搜索</text>
|
||||
</view>
|
||||
<view class="message-entry" @click.stop="jumpNewSearch('list')">
|
||||
<image src="https://static.tbmall.xin/static/chart.png" class="chart_img"></image>
|
||||
<text v-if="kefuUnreadCount > 0" class="message-entry-badge">{{ formatKefuBadge(kefuUnreadCount) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="logo_banner">
|
||||
<view style="padding: 20rpx 0 0 20rpx">
|
||||
<up-image src="https://static.tbmall.xin/static/home/logo_banner.png" width="108" height="16"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
<view class="logo_banner_title">TB聚合商城</view>
|
||||
<view class="logo_banner_msg">全民共创共享的电商平台</view>
|
||||
</view>
|
||||
<up-image src="https://static.tbmall.xin/static/logo_banner2.png" width="140" height="98"
|
||||
<view class="home_warp" :class="platformType ? '' : 'iosplatformType'" @scroll="onScroll">
|
||||
<!-- 变色搜索栏 -->
|
||||
<view class="header_title_warp" :class="{ 'is-scrolled': isScrolled }" :style="mpHeaderStyle">
|
||||
<view class="language_warp" style="flex: 1; justify-content: flex-start;" @click.stop="jumpSearch">
|
||||
<view :style="isMP ? 'display: flex; align-items: center;margin-top: 0;' : 'margin-top: 0;'">
|
||||
<up-image src="https://static.tbmall.xin/static/home/search_b.png" width="20" height="20"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
</view>
|
||||
<text class="search_msg_warp" :style="isMP ? 'line-height: 1;' : ''">搜索</text>
|
||||
</view>
|
||||
<view class="message-entry" @click.stop="jumpNewSearch('list')">
|
||||
<image src="https://static.tbmall.xin/static/chart.png" class="chart_img"></image>
|
||||
<text v-if="kefuUnreadCount > 0" class="message-entry-badge">{{ formatKefuBadge(kefuUnreadCount) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 分类 -->
|
||||
<view class="home_sort_warp">
|
||||
<view class="sort_comm_warp" v-if="sortList && sortList.length !== 0 && isBlockedDate">
|
||||
<view v-for="item in sortList" :key="item.id" class="sort_item_comm" @click="jumpSort(item)">
|
||||
<up-image :src="item.icon" width="50" height="36" bgColor="#f1f6ff00"></up-image>
|
||||
<view class="sort_item_title_comm">{{ item.name }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="not_order_warp">
|
||||
<up-image src="https://static.tbmall.xin/static/not_order.png" width="80" height="80"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
<view class="not_order_msg_warp">暂无分类</view>
|
||||
<!-- 页面内容容器 -->
|
||||
<view class="home_content_z_warp">
|
||||
<!-- 轮播 Banner 区域 (整个紫色区域包含文案背景均为 Banner 图,延伸至头部安全区) -->
|
||||
<view class="home_header_warp">
|
||||
<view class="banner_swiper_container" v-if="swiperList && swiperList.length > 0">
|
||||
<up-swiper :list="swiperList" height="480rpx" radius="0" @change="e => currentNum = e.current"
|
||||
bgColor="#ffffff00" @click="onSwiper">
|
||||
<template #indicator>
|
||||
<view class="indicator-dots" v-if="swiperList.length > 1">
|
||||
<view v-for="(item, index) in swiperList.length" :key="index" class="indicator-dot"
|
||||
:class="{ active: currentNum === index }"></view>
|
||||
</view>
|
||||
</template>
|
||||
</up-swiper>
|
||||
</view>
|
||||
<view v-else class="banner_placeholder">
|
||||
<up-swiper :list="['https://static.tbmall.xin/static/logo_banner2.png']" height="230" radius="0"
|
||||
bgColor="#ffffff00"></up-swiper>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 分类(覆盖在Banner上) -->
|
||||
<view class="home_sort_warp">
|
||||
<view class="sort_comm_warp" v-if="sortList && sortList.length !== 0 && isBlockedDate">
|
||||
<view v-for="item in sortList" :key="item.id" class="sort_item_comm" @click.stop="jumpSort(item)">
|
||||
<up-image :src="item.icon" width="100rpx" height="72rpx" bgColor="#f1f6ff00"></up-image>
|
||||
<view class="sort_item_title_comm">{{ item.name }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="not_order_warp">
|
||||
<up-image src="https://static.tbmall.xin/static/not_order.png" width="80" height="80"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
<view class="not_order_msg_warp">暂无分类</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 爆款专区-->
|
||||
<view class="home_content_warp Hot_Picks_Zone" v-if="faddishProduct && faddishProduct.length !== 0"
|
||||
@click="onJumpYou">
|
||||
<view class="product_comm_yp">
|
||||
<view class="yp_title">
|
||||
<view class="yp_title_left">
|
||||
<text class="yp_title_main">信任桥优品</text>
|
||||
<up-image src="https://static.tbmall.xin/static/home/youxuan.png" width="14" height="14"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
<text class="yp_title_sub" style="margin-left: 8rpx">品牌五折秒杀福利</text>
|
||||
</view>
|
||||
<view class="yp_title_right">
|
||||
<text>立即抢购</text>
|
||||
<view class="yp_arrow_circle">
|
||||
<view class="yp_arrow_chevron"></view>
|
||||
</view>
|
||||
<!-- 爆款专区-->
|
||||
<view class="home_content_warp Hot_Picks_Zone" v-if="faddishProduct && faddishProduct.length !== 0"
|
||||
@click="onJumpYou">
|
||||
<view class="product_comm_yp">
|
||||
<view class="yp_title">
|
||||
<view class="yp_title_left">
|
||||
<text class="yp_title_main">信任桥优品</text>
|
||||
<up-image src="https://static.tbmall.xin/static/home/youxuan.png" width="14" height="14"
|
||||
bgColor="#f1f6ff00"></up-image>
|
||||
<text class="yp_title_sub" style="margin-left: 8rpx">品牌五折秒杀福利</text>
|
||||
</view>
|
||||
<view class="yp_title_right">
|
||||
<text>立即抢购</text>
|
||||
<view class="yp_arrow_circle">
|
||||
<view class="yp_arrow_chevron"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="yp_content">
|
||||
<!-- <up-loading-icon :show="productLoading"></up-loading-icon> -->
|
||||
<view class="yp_item" v-for="item in faddishProduct" :key="item.id" @click.stop="jumpInfo(item)">
|
||||
<view class="yp_item_image_wrapper">
|
||||
<image :src="item.url" mode="aspectFill" lazy-load class="yp_item_image" shape="square" radius="15">
|
||||
</image>
|
||||
<!-- <up-image :src="item.url" width="100%" height="88" bgColor="#f1f6ff00" shape="square"
|
||||
</view>
|
||||
<view class="yp_content">
|
||||
<!-- <up-loading-icon :show="productLoading"></up-loading-icon> -->
|
||||
<view class="yp_item" v-for="item in faddishProduct" :key="item.id" @click.stop="jumpInfo(item)">
|
||||
<view class="yp_item_image_wrapper">
|
||||
<image :src="item.url" mode="aspectFill" lazy-load class="yp_item_image" shape="square" radius="15">
|
||||
</image>
|
||||
<!-- <up-image :src="item.url" width="100%" height="88" bgColor="#f1f6ff00" shape="square"
|
||||
radius="15"></up-image> -->
|
||||
</view>
|
||||
<view class="yp_item_info">
|
||||
<view class="yp_item_name">{{ item.title }}</view>
|
||||
<view class="yp_item_price_tag">优选价{{ item.price }}元</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="yp_item_info">
|
||||
<view class="yp_item_name">{{ item.title }}</view>
|
||||
<view class="yp_item_price_tag">优选价{{ item.price }}元</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -226,8 +234,8 @@ import {
|
||||
getSeckillGoodsList,
|
||||
getGoodsTags,
|
||||
} from "@/api/product.js";
|
||||
import { checkAppVersion } from "@/api/common.js";
|
||||
import { SEARCH_TYPE, SORT_TYPE } from "@/utils/enumUtils.js";
|
||||
import { checkAppVersion, getCarouselImage } from "@/api/common.js";
|
||||
import { SEARCH_TYPE, SORT_TYPE, APP_PAGE_TYPE } from "@/utils/enumUtils.js";
|
||||
import CustomTabBar from "@/components/custom-tab-bar.vue"; // 引入自定义组件路径可能需要根据项目结构调整
|
||||
import dayjs from "dayjs";
|
||||
import useTabber from "tabber-component";
|
||||
@@ -252,6 +260,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
swiperList: [],
|
||||
currentNum: 0,
|
||||
sortList: [],
|
||||
faddishProduct: [], // 爆款专区
|
||||
@@ -297,8 +306,15 @@ export default {
|
||||
mpLanguageStyle: {},
|
||||
kefuUnreadCount: 0,
|
||||
kefuUnreadRefreshTimer: null,
|
||||
isScrolled: false,
|
||||
scrollTop: 0,
|
||||
};
|
||||
},
|
||||
onPageScroll(e) {
|
||||
const top = e ? (e.scrollTop || 0) : 0;
|
||||
this.scrollTop = top;
|
||||
this.isScrolled = top > 10;
|
||||
},
|
||||
onShow() {
|
||||
this.refreshKefuUnread();
|
||||
startKefuRealtime();
|
||||
@@ -324,6 +340,8 @@ export default {
|
||||
this.getSortList();
|
||||
this.querySearchList(SEARCH_TYPE.EXPLOSIVE); // 爆单专区
|
||||
this.onNews(); // 获取公告
|
||||
this.getCarouselImage();
|
||||
|
||||
|
||||
// 秒杀
|
||||
this.onGetSeckillCurrent();
|
||||
@@ -363,6 +381,34 @@ export default {
|
||||
},
|
||||
mounted() { },
|
||||
methods: {
|
||||
onScroll(e) {
|
||||
const top = e.detail ? e.detail.scrollTop : (e.target ? e.target.scrollTop : 0);
|
||||
this.scrollTop = top;
|
||||
this.isScrolled = top > 10;
|
||||
},
|
||||
// 查询轮播图
|
||||
async getCarouselImage() {
|
||||
const params = {
|
||||
pageUi: APP_PAGE_TYPE.HOME,
|
||||
};
|
||||
const resp = await getCarouselImage(params);
|
||||
if (resp && resp.bizcode === 100) {
|
||||
const data = resp.data || [];
|
||||
this.swiperDataList = data;
|
||||
this.swiperList =
|
||||
data.length !== 0 ? data.map((obj) => obj.carouselImage) : [];
|
||||
}
|
||||
},
|
||||
|
||||
onSwiper(index) {
|
||||
console.log("--1---", this.swiperDataList[index])
|
||||
const id = this.swiperDataList[index]?.goodsUrl;
|
||||
if (!id) return;
|
||||
uni.navigateTo({
|
||||
url: `/pages/other_package/productInfo/productInfo?id=${id}`,
|
||||
});
|
||||
|
||||
},
|
||||
formatKefuBadge(value) {
|
||||
return Number(value) > 99 ? "99+" : String(Number(value) || 0);
|
||||
},
|
||||
@@ -806,50 +852,65 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.home_warp {
|
||||
background: #f4f4f4;
|
||||
height: calc(100vh - env(safe-area-inset-bottom)); // 是底部的导航栏高度
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
background: #fff;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
|
||||
&.iosplatformType {
|
||||
height: 100vh;
|
||||
min-height: 100vh;
|
||||
}
|
||||
}
|
||||
|
||||
.home_header_warp {
|
||||
background: linear-gradient(270deg, #af39c4 0%, #7732ff 100%);
|
||||
height: auto;
|
||||
padding: calc(var(--status-bar-height) + 80rpx) 30rpx 30rpx;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
overflow: hidden;
|
||||
|
||||
.banner_swiper_container,
|
||||
.banner_placeholder {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.home_content_z_warp {
|
||||
position: absolute;
|
||||
/* 顶部固定/变色搜索栏 */
|
||||
.header_title_warp {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
right: 0;
|
||||
z-index: 999;
|
||||
background: transparent;
|
||||
padding: calc(var(--status-bar-height) + 12rpx) 24rpx 16rpx;
|
||||
box-sizing: border-box;
|
||||
transition: background-color 0.3s ease, box-shadow 0.3s ease;
|
||||
|
||||
.header_title_warp {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 999;
|
||||
background: linear-gradient(270deg, #af39c4 0%, #7732ff 100%);
|
||||
padding: calc(var(--status-bar-height) + 20rpx) 30rpx 20rpx;
|
||||
box-sizing: border-box;
|
||||
&.is-scrolled {
|
||||
background: #ffffff !important;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -2px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 4px;
|
||||
//background: linear-gradient(270deg, #af39c4 0%, #7732ff 100%);
|
||||
pointer-events: none;
|
||||
.language_warp {
|
||||
background: #f4f5f8;
|
||||
border: 1rpx solid #e8e8e8;
|
||||
|
||||
.search_msg_warp {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
::v-deep .up-image,
|
||||
.up-image {
|
||||
filter: brightness(0.3);
|
||||
}
|
||||
}
|
||||
|
||||
.chart_img {
|
||||
filter: brightness(0.2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -860,20 +921,24 @@ export default {
|
||||
}
|
||||
|
||||
.language_warp {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
width: 100rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
background: #ffffff30;
|
||||
border-radius: 24rpx;
|
||||
// background: linear-gradient(270deg, #ae39c5, #7932fe);
|
||||
height: 68rpx;
|
||||
padding: 0 24rpx;
|
||||
background: rgba(255, 255, 255, 0.35);
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.4);
|
||||
border-radius: 34rpx;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.chart_img {
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
display: block;
|
||||
transition: filter 0.3s ease;
|
||||
}
|
||||
|
||||
.message-entry {
|
||||
@@ -893,8 +958,8 @@ export default {
|
||||
right: -8rpx;
|
||||
min-width: 30rpx;
|
||||
height: 30rpx;
|
||||
padding: 0 7rpx;
|
||||
border: 3rpx solid #8f3be9;
|
||||
// padding: 0 7rpx;
|
||||
// border: 3rpx solid #8f3be9;
|
||||
border-radius: 18rpx;
|
||||
background: #f04438;
|
||||
color: #fff;
|
||||
@@ -909,52 +974,131 @@ export default {
|
||||
margin-left: 12rpx;
|
||||
font-weight: 500;
|
||||
font-size: 28rpx;
|
||||
color: #ffffffb3;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
}
|
||||
|
||||
.home_content_z_warp {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.logo_banner {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
// padding: 0 30rpx;
|
||||
align-items: center;
|
||||
color: #ffffff;
|
||||
margin-top: 50rpx;
|
||||
margin-top: 20rpx;
|
||||
padding: 0 10rpx;
|
||||
|
||||
.logo_banner_left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.logo_banner_title {
|
||||
font-weight: bold;
|
||||
font-size: 38rpx;
|
||||
line-height: 36rpx;
|
||||
margin: 20rpx 0;
|
||||
font-size: 40rpx;
|
||||
line-height: 46rpx;
|
||||
margin: 16rpx 0 10rpx;
|
||||
color: #ffffff;
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
.logo_banner_msg {
|
||||
font-size: 22rpx;
|
||||
font-size: 24rpx;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
letter-spacing: 0.5rpx;
|
||||
}
|
||||
|
||||
.logo_banner_right {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .u-swiper__indicator {
|
||||
position: absolute;
|
||||
bottom: 105rpx !important;
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
width: 100% !important;
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
z-index: 15;
|
||||
}
|
||||
|
||||
.indicator-dots,
|
||||
.indicator-dots-static {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
|
||||
.indicator-dot {
|
||||
width: 16rpx;
|
||||
height: 8rpx;
|
||||
border-radius: 4rpx;
|
||||
background: rgba(255, 255, 255, 0.45);
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&.active {
|
||||
width: 28rpx;
|
||||
height: 8rpx;
|
||||
border-radius: 4rpx;
|
||||
background: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.home_sort_warp {
|
||||
// position: absolute;
|
||||
top: 460rpx;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
margin: -60rpx 30rpx 0;
|
||||
|
||||
.sort_warp {
|
||||
.sort_comm_warp {
|
||||
background: #ffffff;
|
||||
padding: 20rpx;
|
||||
border-radius: 20rpx;
|
||||
padding: 30rpx 16rpx 24rpx;
|
||||
border-radius: 28rpx;
|
||||
box-shadow: 0 8rpx 24rpx rgba(118, 50, 255, 0.08);
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
|
||||
.sort_item {
|
||||
width: 18%;
|
||||
text-align: center;
|
||||
margin-bottom: 20rpx;
|
||||
.sort_item_comm {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 0;
|
||||
|
||||
.sort_item_title_comm {
|
||||
font-weight: 500;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-top: 10rpx;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sort_item_title {
|
||||
font-weight: 500;
|
||||
font-size: 22rpx;
|
||||
color: #333333;
|
||||
.not_order_warp {
|
||||
background: #ffffff;
|
||||
padding: 30rpx;
|
||||
border-radius: 28rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
box-shadow: 0 8rpx 24rpx rgba(118, 50, 255, 0.08);
|
||||
|
||||
.not_order_msg_warp {
|
||||
font-size: 24rpx;
|
||||
color: #999999;
|
||||
margin-top: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -963,10 +1107,11 @@ export default {
|
||||
padding-bottom: 100rpx;
|
||||
|
||||
&.Hot_Picks_Zone {
|
||||
width: 100%;
|
||||
width: calc(100% - 60rpx);
|
||||
margin: 0 30rpx 100rpx;
|
||||
box-sizing: border-box;
|
||||
height: auto;
|
||||
background: linear-gradient(344deg, #ffffff 0%, #ede3ff 100%);
|
||||
background: #fff;
|
||||
border-radius: 28rpx;
|
||||
border: 1rpx solid #dfdfdf;
|
||||
padding: 24rpx 20rpx 20rpx;
|
||||
|
||||
@@ -571,11 +571,20 @@ export default {
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
|
||||
this.$refs.uToastRef.show({
|
||||
type: "error",
|
||||
message: "Apple登录授权失败",
|
||||
});
|
||||
this.loading = false;
|
||||
console.log("Apple登录授权失败 err:", JSON.stringify(err), err);
|
||||
// 判断是否为用户取消授权(Apple 登录取消错误码通常为 1001 或 code 1001)
|
||||
if (err && (err.code === 1001 || err.errCode === 1001 || (err.errMsg && err.errMsg.includes("1001")))) {
|
||||
this.$refs.uToastRef.show({
|
||||
type: "error",
|
||||
message: "已取消Apple登录",
|
||||
});
|
||||
} else {
|
||||
this.$refs.uToastRef.show({
|
||||
type: "error",
|
||||
message: (err && (err.errMsg || err.msg)) ? `Apple登录失败: ${err.errMsg || err.msg}` : "Apple登录授权失败",
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
<view class="form-label">
|
||||
<text class="label-text">物流说明</text>
|
||||
</view>
|
||||
<input class="form-input" type="text" v-model="expressRemark" placeholder="这里展示后台设置的退货地址"
|
||||
<input class="form-input" type="text" v-model="expressRemark" placeholder="请填写物流说明(选填)"
|
||||
placeholder-style="color: #CCCCCC; font-size: 28rpx;" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -99,12 +99,12 @@
|
||||
<view>共{{ item.buyNum }}件,合计¥{{ item.sumAmount }}</view>
|
||||
</view> -->
|
||||
<view class="collect_msg" v-if="item.buyDeductionValue">共{{ item.buyNum }}件,合计数字积分{{ item.buyDeductionValue
|
||||
}}
|
||||
}}
|
||||
+¥{{ item.sumAmount }}</view>
|
||||
<view class="collect_msg" v-if="!item.buyDeductionValue">运费:¥{{ item.postage }},商品总价:¥{{ item.sumAmount }}
|
||||
</view>
|
||||
<view class="collect_msg" v-if="!item.buyDeductionValue">共{{ item.buyNum }}件,合计¥{{ item.sumAmount +
|
||||
item.postage }}</view>
|
||||
<view class="collect_msg" v-if="!item.buyDeductionValue">共{{ item.buyNum }}件,合计¥{{ item.sumAmount -
|
||||
item.buyDeduction }}</view>
|
||||
<view class="collect_operate">
|
||||
<!-- <view class="operate_comm operate_but_1" v-if="item.status === ORDER_TYPE.UNSHIPPED" @click="checkCancel(true)">取消订单</view> -->
|
||||
<view class="operate_comm operate_but_2" v-if="
|
||||
@@ -792,25 +792,16 @@ export default {
|
||||
}
|
||||
const data = await getOrderList(params);
|
||||
if (data && data.bizcode === 100) {
|
||||
for (let i = 0; i < data.data.entitys.length; i++) {
|
||||
for (let j = 0; j < data.data.entitys[i].items.length; j++) {
|
||||
if (data.data.entitys[i].items[j].expressNo) {
|
||||
data.data.entitys[i].items[j].expressData =
|
||||
await this.getOrderLogistics(
|
||||
data.data.entitys[i].items[j].expressNo
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// data.data.entitys.forEach(item=>{
|
||||
// if(item.items.length){
|
||||
// item.items.forEach(async (Iitem)=>{
|
||||
// if(Iitem.expressNo){
|
||||
// Iitem.expressData = await this.getOrderLogistics(Iitem.expressNo);
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// for (let i = 0; i < data.data.entitys.length; i++) {
|
||||
// for (let j = 0; j < data.data.entitys[i].items.length; j++) {
|
||||
// if (data.data.entitys[i].items[j].expressNo) {
|
||||
// data.data.entitys[i].items[j].expressData =
|
||||
// await this.getOrderLogistics(
|
||||
// data.data.entitys[i].items[j].expressNo
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
return data.data;
|
||||
} else {
|
||||
|
||||
@@ -53,7 +53,10 @@
|
||||
<view class="address_info_name">{{ orderInfo.name }}</view>
|
||||
<view class="address_info_mobile">{{ orderInfo.phone }}</view>
|
||||
</view>
|
||||
<view class="address_but" :class="{ 'is-rejected': orderInfo.modifyShippingAddressStatus === 3 || getValue(LOGISTICS_STATUS_UPDATE, orderInfo.modifyShippingAddressStatus) === '审核驳回' }">{{ getValue(LOGISTICS_STATUS_UPDATE, orderInfo.modifyShippingAddressStatus) }}</view>
|
||||
|
||||
<view class="address_but" v-if="orderInfo.modifyShippingAddressStatus != 0"
|
||||
:class="{ 'is-rejected': orderInfo.modifyShippingAddressStatus === 3 || getValue(LOGISTICS_STATUS_UPDATE, orderInfo.modifyShippingAddressStatus) === '审核驳回' }">
|
||||
{{ getValue(LOGISTICS_STATUS_UPDATE, orderInfo.modifyShippingAddressStatus) }}</view>
|
||||
</view>
|
||||
<view class="address_content">
|
||||
{{ assembleAddress(orderInfo).names }} {{ orderInfo.address }}
|
||||
@@ -116,9 +119,10 @@
|
||||
<view class="item_value">¥{{ orderInfo.postage }}</view>
|
||||
</view>
|
||||
<view class="data_item">
|
||||
<view class="item_title">平台优惠<text class="copy_order_coupon" v-if="orderInfo.coupon">优惠券</text>
|
||||
<view class="item_title">平台优惠<text class="copy_order_coupon"
|
||||
v-if="orderInfo.buyDeduction">优惠券</text>
|
||||
</view>
|
||||
<view class="item_value">-¥0.00</view>
|
||||
<view class="item_value">-¥{{ orderInfo.buyDeduction }}</view>
|
||||
</view>
|
||||
<view class="data_item">
|
||||
<view class="item_title">应付款</view>
|
||||
@@ -223,8 +227,8 @@
|
||||
</up-popup>
|
||||
<up-toast ref="uToastRef"></up-toast>
|
||||
<QrcodePreview ref="qrcodePreviewRef" :qrcodeVal="qrcodeVal" />
|
||||
<qiaobao-assistant page-key="pages/mine_package/mine_order_info/mine_order_info" title="订单详情" />
|
||||
</view>
|
||||
<qiaobao-assistant page-key="pages/mine_package/mine_order_info/mine_order_info" title="订单详情" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
@@ -1,208 +1,209 @@
|
||||
<template>
|
||||
<view class="privacy_agreement_warp">
|
||||
<Header :leftTitle="$t('mine.privacy.agreement.title')" leftPathType="navigateTo" :leftPath="leftPath" />
|
||||
<view class="privacy_agreement_content_warp">
|
||||
本App名称:信任桥<br />
|
||||
开发者:信任桥(深圳)网络科技有限公司<br />
|
||||
运营者:信任桥(深圳)网络科技有限公司<br />
|
||||
更新日期:2026年02月04日<br />
|
||||
生效日期:2025年01月20日<br />
|
||||
<br />
|
||||
"信任桥"应用深知个人信息安全重要性,并会尽全力保护您的个人信息安全可靠。
|
||||
我们致力于维持您对我们的信任,恪守原则,保护您的个人信息。 同时,我们承诺,我们将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。<br />
|
||||
请在使用我们的产品或服务前,仔细阅读并了解本《信任桥隐私政策》。<br />
|
||||
我们如何收集和使用您的信息<br />
|
||||
本隐私政策规定了信任桥如何收集,使用,披露,处理和保护您在使用我们的产品和服务时,通过信任桥提供给我们的信息。
|
||||
若我们要求您提供某些信息,以便在使用信任桥时验证您的身份,我们将严格遵守本隐私政策和/或我们的用户条款与条件来使用这些信息。 本隐私政策在制定时充分考虑到您的需求;
|
||||
您全面了解我们的个人资料收集和使用管理,而且确信自己最终能控制提供给信任桥的所有个人信息,这一点至关重要。<br />
|
||||
在这项隐私政策中。
|
||||
"个人信息"指所有通过有关特定个人的信息,或者与信任桥能够访问的其他关于该人的信息结合后,能够直接或间接识别该人的所有数据。 此类个人信息包括但不限于您提供或上传的信息和设备信息。<br />
|
||||
通过使用信任桥或其他符合适用法律的操作,即表示您已阅读并接受本隐私政策中所述之所有条款,包括我们定期作出的任何变更。
|
||||
为遵守适用法律,包括本地数据保护法律,我们将会对于特定类别的个人数据的处理(如自动个体决策)征求您的明确同意。 另外,我们承诺遵照适用法律(包括您所在地的数据保护法律)来保护您的个人信息的隐私,机密,和安全。
|
||||
同时我们承诺确保我们的全体员工和代理商履行这些义务。<br />
|
||||
最后,我们所希望的就是为我们的用户带来最好的体验。<br />
|
||||
APP安装及运行所需权限列表及用途<br />
|
||||
1: INTERNET:允许应用访问网络,用于与服务器进行数据交互,确保应用内容的更新及核心业务功能的正常运行。<br />
|
||||
2: CAMERA:相机权限。用于在您使用扫码、拍摄照片上传头像或反馈建议等功能时获取影像信息。例如:当您点击“更换头像”时,我们需要调用相机拍摄新照片;当您发布商品评价时,您可以使用相机拍摄商品实物图上传。<br />
|
||||
3: READ_PHONE_STATE:读取电话状态。用于获取设备唯一标识符,以保障账号安全、进行反作弊校验及统计分析。<br />
|
||||
4: ACCESS_NETWORK_STATE / ACCESS_WIFI_STATE:获取网络状态/Wi-Fi状态。用于检测当前网络环境,提示流量消耗或进行网络连接优化。<br />
|
||||
5: WRITE_EXTERNAL_STORAGE / READ_EXTERNAL_STORAGE / 相册权限:读写外部存储及相册。用于缓存应用数据、保存图片至本地或读取上传所需的图片/文件。例如:当您发布评价或更换头像时,需要访问相册选择图片;当您分享商品海报时,需要将海报保存到您的手机相册。<br />
|
||||
6: VIBRATE:允许手机震动。用于在接收到重要通知或特定交互时提供震动反馈。<br />
|
||||
7: WAKE_LOCK:唤醒锁定。用于在执行重要后台任务(如文件下载、数据同步)时防止手机进入休眠状态。<br />
|
||||
哪些信息会被收集以及我们如何使用这些信息?<br />
|
||||
收集的信息类别<br />
|
||||
为了向您提供我们的服务,我们会要求您提供服务所必需的个人信息。
|
||||
如果您不提供个人信息,我们可能无法向您提供我们的产品 or 服务。<br />
|
||||
我们只会为了详细说明过的、明确的、合法的目的收集必要的信息,并保证不会以和上述目的不符的方式处理这些信息。
|
||||
我们可能会收集以下各类信息(无论其是否为个人信息):<br />
|
||||
游客模式说明:我们支持您在未登录状态下(“暂不登录”)浏览我们的产品和服务。在此模式下,我们不会收集您的手机号码、姓名等个人身份信息,仅会收集保障应用运行所必需的设备信息(如设备型号、操作系统版本)。如您需要使用下单、收藏等个性化服务,则需要您登录账号并授权相关信息。<br />
|
||||
您提供给我们或上传的信息(包括您的联系信息):我们可能收集您提供给我们的个人信息,例如手机号、信任桥账号信息(例如您的姓名、年龄、性别、服务使用记录)。<br />
|
||||
我们指定与您相关的信息:我们可能收集并使用诸如您的信任桥账号等信息。<br />
|
||||
位置信息(仅适用于特定服务/功能):与您的位置相关的各类信息,例如区域和国家代码、城市代码、移动网络代码、移动设备国家代码、社区识别码、地区名称、经纬度信息、时区设定和语言设定。
|
||||
登录信息:与您使用某些功能、移动应用程序和网站相关的信息,例如cookie和其他匿名识别字科技、IP地址、网络请求信息、临时消息历史、标准系统日志和系统崩溃信息等。<br />
|
||||
设备信息:在您阅读并同意本隐私政策后,为识别您的设备唯一性、预防恶意程序及反作弊、提高服务安全性、保障运营质量及效率,我们会收集您的设备信息(包括OAID、Android ID、设备序列号、MEID、IMSI、GUID、MAC地址)。在Android 10以下系统版本中,我们可能通过系统标准接口获取IMEI以作为设备唯一标识;在Android 10及以上版本中,因系统限制无法获取IMEI,我们将优先使用OAID作为替代方案。<br />
|
||||
其他信息:环境特征值(ECV)(由信任桥账号位置信息产生的数值)<br />
|
||||
账户凭证:有关您账户凭证的信息,例如手机号等。<br />
|
||||
后台/静默收集说明:当您将应用切换至后台或关闭应用但未注销登录时,为保证消息推送的及时性及设备状态同步的准确性,我们可能会在后台状态下收集您的设备标识符(OAID/Android ID)及服务使用记录(如设备在线状态)。后台收集频率不超过每5分钟一次,您可在系统设置中关闭“后台刷新”或“后台运行”权限以停止此类收集,但这可能导致您无法及时接收重要通知。<br />
|
||||
敏感个人信息声明<br />
|
||||
我们收集的敏感个人信息包括:位置信息(精确经纬度)。我们仅在您明确开启位置权限后收集此类信息,并会采取严格保护措施。对于实名认证信息(姓名、身份证号),如您使用相关服务,我们将单独征得您的同意。<br />
|
||||
使用权限:在使用应用的过程中,您可能需要授予应用访问相机的权限,以便进行扫码使用硬件设备。
|
||||
我们仅在您授权的范围内使用相机权限,且不会将相机权限用于其他目的。<br />
|
||||
法律要求:在法律法规要求的情况下我们可能会根据适用的法律法规、法律程序或政府要求,披露您的个人信息。<br />
|
||||
自启动和关联启动说明<br />
|
||||
为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的信息、完成订单状态同步等必要业务功能,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现核心功能及服务所必要的。
|
||||
此类行为仅在实现特定业务场景(如:消息提醒、支付状态回调)时发生,我们承诺不会利用此类能力进行任何与业务无关的后台活动。
|
||||
当您打开内容类推送消息,在征得您的明确同意后,会跳转打开相关内容。 在未征得您同意的情况下,则不会有自启动或关联启动。<br />
|
||||
当您打开本App内部下载的文件后,不会关联启动第三方App。<br />
|
||||
个人信息共享说明<br />
|
||||
(一) 共享<br />
|
||||
我们不会与信任桥以外的公司、组织和个人共享您的个人信息,但以下情形除外:
|
||||
1. 法定情形:根据法律法规规定、诉讼争议解决需要,或按行政、司法机关依法提出的要求;
|
||||
2. 您的同意:经您事先明确同意或授权;
|
||||
3. 关联公司共享:为便于我们基于信任桥账号向您提供产品和服务,您的个人信息可能会与我们的关联公司共享。我们只会共享必要的个人信息(如设备标识符),且受本政策所述目的的约束;
|
||||
4. 授权合作伙伴:我们可能会向合作伙伴共享您的某些个人信息,以保障为您提供的服务顺利完成。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。<br />
|
||||
目前我们共享个人信息的第三方包括:
|
||||
- 微信支付、支付宝(支付服务)
|
||||
- DCloud(应用框架服务)<br />
|
||||
我们可能会将个人信息用于下列目的:<br />
|
||||
提供、处理、维护、改善、开发我们的商品和/或给您的服务,以及通过设备或信任桥提供的服务。
|
||||
与您就您的设备、服务或任何普通查询(例如更新、设备固件/软件升级、客户咨询支持、相关信息、通知)等进行交流。<br />
|
||||
开展市场营销相关活动,例如提供营销和推广相关的资料和更新。<br />
|
||||
分析和开发与我们产品及服务的使用相关的统计信息,以更好地改进我们的产品和服务。<br />
|
||||
储存并维护与您相关的信息,用于我们运营业务或履行法律义务。 无需与我们的服务器通信,提供本地服务。<br />
|
||||
关于我们如何使用您的信息(其中可能包含个人信息),下面提供了更多详细信息:<br />
|
||||
创建您的信任桥账号。 在通过移动设备创建账号时收集的个人信息用于建立用户的个人账户和资料页。<br />
|
||||
提供基于位置的服务。 在使用信任桥时,我们可能会使用位置信息判断设备时区,以保证在设备中准确显示时间、登录服务地区。
|
||||
以及根据您的选择为您提前开启相应设备等体验。 您可以随时进入设备设定或停止使用这一应用程序来关闭这一功能。<br />
|
||||
设备接入。 设备通过App进行操作,无需验证其设备的真实性。<br />
|
||||
设备状态显示。 可以允许您远程查看设备状态,以便您时刻查看设备运行情况。<br />
|
||||
收集用户反馈。 您选择提供的反馈对帮助信任桥改进我们的服务而言极为珍贵。
|
||||
为了跟踪您选择提供的反馈,信任桥可能会使用您所提供的个人信息与您联系,并保留记录。<br />
|
||||
发送通知。 我们可能会不时使用您的个人信息来发送重要通知,例如有关设备异常运行状态的通知、您定制的设备推送通知<br />
|
||||
(具体需要根据您购买添加设备的情况而定)、我们的条款、条件和政策变更。<br />
|
||||
信任桥的安全措施<br />
|
||||
我们承诺保证您的个人信息安全。
|
||||
为了防止未经授权的访问、披露或其他类似风险,我们落实了合理的物理、电子和管理措施流程,保护我们从您对信任桥的使用收集的信息。 我们将采取所有合理的措施保护您的个人信息。<br />
|
||||
您的个人信息全都被储存在安全的服务器上,并在受控设施中受到保护。
|
||||
我们依据重要性和敏感性对您的数据进行分类,并且保证您的个人信息具有最高的安全等级。
|
||||
我们保证通过访问 these 信息来帮助向您提供产品和服务的员工和第三方服务供应商具有严格的契约保密义务,如果未能履行这些义务,其将会受到纪律处分或被终止合作。 同样,我们对以信任桥为基础的数据存储设有专门的存取控制措施。
|
||||
总而言之,我们定期审查信息收集、储存和处理实践,包括物理安全措施,以防止任何未经授权的访问和使用。<br />
|
||||
我们将采取所有可行的步骤保护您的个人信息。
|
||||
但是,您应当意识到互联网的使用并不总是安全的,因此,我们不能保证在通过互联网双向传输时任何个人信息的安全性或完整性。<br />
|
||||
我们将对个人数据泄露行为采取相应措施,如将泄露现象通报相关监管机构,或在某些情况下依照适用法律(包括您当地的数据保护法律)向数据主体通报个人数据泄露行为。<br />
|
||||
您能做什么<br />
|
||||
您可以在保护您的个人信息方面发挥自己的作用,不要向任何人透露您的账户信息,除非此人获得您的正式授权。
|
||||
无论您何时作为信任桥账号用户登录信任桥,尤其是在他人的手机上登录时,在结束使用时您总应注销登出。<br />
|
||||
信任桥不对因您未能保持个人信息的私密性而导致第三方访问您的个人信息进而造成的安全疏漏承担责任。
|
||||
尽管有上述规定,如果发生互联网其他任何用户未经授权使用您账户的情况或其他任何安全性漏洞,您必须立即通知我们。<br />
|
||||
您的协助将有助于我们保护您个人信息的私密性。<br />
|
||||
保留政策与数据存储地点<br />
|
||||
原则上,我们在中华人民共和国境内收集和产生的个人信息将存储在境内。如因业务需要确需向境外提供个人信息,我们将事先征得您的单独同意,并按照网信部门的规定进行安全评估和审批。
|
||||
我们将仅在为您提供产品和/或服务所必需的最短期限内保留您的个人信息。
|
||||
1. 账号信息:在您使用期间持续保留,注销账号后,我们将在15个工作日内完成身份核验并对相关个人信息进行删除或匿名化处理(法律法规另有要求的除外)。
|
||||
2. 业务日志及记录:根据《网络安全法》等法律要求,至少保留六个月。
|
||||
3. 备份数据:为了系统安全,可能会在离线备份中保留更长时间,但会采取加密及物理隔离措施。
|
||||
如果有合理的理由认为保留个人信息不能实现收集个人信息的目的,我们将不再保留个人信息,或删除个人信息与特定个人相关联的方式。<br />
|
||||
您可以控制您的个人信息<br />
|
||||
联系我们<br />
|
||||
信任桥承认每个人对隐私权的关注各不相同。
|
||||
因此,我们提供了一些示例,说明信任桥提供的各种方式,供您选择,以限制收集、使用、披露或处理您的个人信息,并控制您的隐私权设定:<br />
|
||||
打开或者关闭用户体验计划和位置访问功能;<br />
|
||||
登录或登出信任桥账户;<br />
|
||||
访问、更新、更正、消除或限制处理您的个人信息<br />
|
||||
您有权要求访问和/或更正我们持有的与您有关的任何个人信息。 当您更新个人信息时,在我们处理您的请求前,会要求验证您的身份。
|
||||
一旦我们获得充分信息,可处理您的请求以访问或更正您的个人信息时,我们将在适用数据保护法规定的时间内对您的请求做出回应。 根据您的要求. 我们可以将收集和处理的您的个人数据副本免费提供给您。
|
||||
对于同一信息的任何额外请求,我们可能会根据适用法律根据实际管理支出收取合理的费用。<br />
|
||||
与您信任桥账户中的个人信息相关的更多详细信息,您可以通过您的设备登录账户来访问和更改。<br />
|
||||
注销账号<br />
|
||||
您可以通过APP-个人中心-注销申请注销您的账号。
|
||||
为确保是相应用户或者该用户授权的主体申请注销账号,信任桥尽最大努力保护用户的权益。 信任桥严格遵守法律法规有关个人信息保护的规定,以上信息仅用于本次账号注销。<br />
|
||||
信任桥特别提示,您注销账号的行为是不可逆的。
|
||||
我们将在收到您的注销申请并核实身份后,在15个工作日内完成处理。除法律法规另有规定外,在您注销账号后,我们将删除或匿名化有关您的个人信息,若删除个人信息从技术上难以实现的,我们会停止除存储 and 采取必要的安全保护措施之外的处理。<br />
|
||||
儿童及未成年人个人信息保护<br />
|
||||
我们非常重视对未成年人个人信息的保护。若您是14周岁以下的儿童,在使用我们的产品和/或服务前,应事先取得您家长或法定监护人的同意。
|
||||
如果我们发现自己在未事先获得可证实的父母同意的情况下收集了儿童的个人信息,则会设法尽快删除相关数据。
|
||||
对于经父母或法定监护人同意而收集未成年人个人信息的情况,我们只会在受到法律允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用或公开披露此信息。<br />
|
||||
第三方 SDK 收集使用信息说明<br />
|
||||
为保障 App 的稳定运行或实现相关功能,我们可能会接入由第三方提供的软件开发包(SDK)。我们会对第三方 SDK 进行严格的安全检测,并与第三方约定严格的数据保护措施。
|
||||
目前我们接入的第三方 SDK 如下:<br />
|
||||
1. SDK名称:微信OpenSDK Android 开发者:深圳市腾讯计算机系统有限公司 收集信息范围:设备识别信息(如IMEI、Android ID、OAID等)、网络状态、Wi-Fi信息 目的:用于微信分享、登录、支付等功能 SDK隐私政策链接:https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8<br />
|
||||
2. SDK名称:APP支付客户端SDK 开发者:支付宝(杭州)信息技术有限公司 收集信息范围:可变更设备唯一标识(如OAID/Android ID等)、基本设备信息、软件安装列表、网络信息 目的:保障账户和资金安全、支付服务安全稳定运行、履行反洗钱等法定义务 SDK隐私政策链接:https://opendocs.alipay.com/open/54/01g6qm#%E6%94%AF%E4%BB%98%E5%AE%9D%20App%20%E6%94%AF%E4%BB%98%E5%AE%A2%E6%88%B7%E7%AB%AF%20SDK%20%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96<br />
|
||||
3. SDK名称:移动智能终端补充设备标识体系统一调用SDK 开发者:中国信息通信研究院 收集信息范围:设备制造商、设备型号、设备品牌、设备网络运营商名称、App包名及签名信息、OAID、VAID、AAID 目的:获取设备标识符(OAID/VAID/AAID),用于反作弊校验及统计分析 SDK隐私政策链接:https://www.msa-alliance.cn/col.jsp?id=122<br />
|
||||
4. SDK名称:DCloud SDK 开发者:数字天堂(北京)网络技术有限公司 收集信息范围:设备品牌、型号、操作系统版本、设备标识符(IMEI/Android ID/DEVICE_ID/IDFA、OAID、VAID、AAID、IMSI、MEID)、网络信息 目的:提供 App 运行环境、设备兼容性适配 SDK隐私政策链接:https://ask.dcloud.net.cn/protocol.html<br />
|
||||
5. uView-plus:UI 组件库,用于页面布局展示。不收集个人隐私信息。<br />
|
||||
6. ECharts / uCharts:用于数据可视化图表展示。不收集个人隐私信息。<br />
|
||||
撤销同意及操作指引<br />
|
||||
您可以通过以下方式撤销您已同意的授权或关闭特定功能:
|
||||
1. 系统权限:您可以在手机操作系统的“设置-应用管理-信任桥-权限”中,手动关闭相机、存储、位置等权限。
|
||||
2. 隐私协议撤回:您可以在 App 内通过“个人中心-设置-隐私管理-撤回隐私协议同意”来撤销您的授权。您撤回同意后,我们将立即停止收集新的个人信息,并在15个工作日内删除或匿名化处理已收集的个人信息(法律法规另有要求的除外)。撤销授权可能导致您无法继续使用 App 的核心功能。<br />
|
||||
请注意,您撤销同意会导致某些法律后果。
|
||||
根据您撤销同意让我们处理您的个人信息的范围,这可能表示您不能享受信任桥的产品和服务。<br />
|
||||
其他规定<br />
|
||||
优先级<br />
|
||||
如果您同意了适用的用户协议,并且此类用户协议和本隐私政策之间存在不一致,将以此类用户协议为准。<br />
|
||||
本隐私政策的更新<br />
|
||||
我们会对隐私政策进行定期审核,为反映我们信息惯例的变更,我们可能会更新本隐私政策。
|
||||
如果我们对本隐私政策进行重大变更,我们将通过(向您账户指定的邮箱地址发送)电子邮件或在信任桥公布或通过移动设备通知您,这样您可以了解我们收集的信息以及我们如何使用这些信息。 此类隐私政策变化将从通知或网站规定的生效日期开始适用。
|
||||
我们建议您定期查阅,获取我们隐私权实践的最新信息。 您继续使用信任桥上的服务,将被视为接受更新的隐私政策。 在我们向您收集更多的个人信息或我们希望因为新的目的使用或披露您的个人信息时,我们会再次征得您的同意。<br />
|
||||
我是否必须同意任何第三方条款与条件?<br />
|
||||
我们的隐私政策不适用于第三方提供的产品和服务。 信任桥可能包括第三方的产品和服务,以及第三方网站的链接。
|
||||
当您使用这些产品或服务时,也可能收集您的信息。 因此,我们强烈建议您花时间阅读该第三方的隐私政策,就像阅读我们的政策一样。 我们不对第三方如何使用他们向您收集的个人信息负责,也不能控制其使用。
|
||||
我们的隐私政策不适用通过我们的服务链接的其他网站。<br />
|
||||
当您使用信任桥平台上这些特定产品的扩展程序服务时,适用第三方条款和隐私政策,您将同意各扩展程序的条款。<br />
|
||||
关于我们系统管理您个人信息的方式<br />
|
||||
联系我们<br />
|
||||
如果您对本隐私政策有任何意见、问题或投诉,或者您对信任桥收集、使用或披露您的个人信息有任何疑问,请通过以下方式联系我们:<br />
|
||||
开发者名称:信任桥(深圳)网络科技有限公司<br />
|
||||
联系地址:广东省深圳市龙华区民治街道北站社区汇德大厦1号楼4101G<br />
|
||||
联系邮箱:gala@alpha-cex.com<br />
|
||||
客服通道:您可以通过 App 内的“在线客服”或“问题反馈”通道联系我们。<br />
|
||||
一般情况下,我们将在收到您的问题、意见或建议并核实您的用户身份后 15 个工作日内回复。<br />
|
||||
开发者:信任桥(深圳)网络科技有限公司<br />
|
||||
</view>
|
||||
|
||||
<template>
|
||||
<view class="privacy_agreement_warp">
|
||||
<Header :leftTitle="$t('mine.privacy.agreement.title')" leftPathType="navigateTo" :leftPath="leftPath" />
|
||||
<view class="privacy_agreement_content_warp">
|
||||
本App名称:信任桥<br />
|
||||
开发者:信任桥(深圳)网络科技有限公司<br />
|
||||
运营者:信任桥(深圳)网络科技有限公司<br />
|
||||
更新日期:2026年02月04日<br />
|
||||
生效日期:2025年01月20日<br />
|
||||
<br />
|
||||
"信任桥"应用深知个人信息安全重要性,并会尽全力保护您的个人信息安全可靠。
|
||||
我们致力于维持您对我们的信任,恪守原则,保护您的个人信息。 同时,我们承诺,我们将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。<br />
|
||||
请在使用我们的产品或服务前,仔细阅读并了解本《信任桥隐私政策》。<br />
|
||||
我们如何收集和使用您的信息<br />
|
||||
本隐私政策规定了信任桥如何收集,使用,披露,处理和保护您在使用我们的产品和服务时,通过信任桥提供给我们的信息。
|
||||
若我们要求您提供某些信息,以便在使用信任桥时验证您的身份,我们将严格遵守本隐私政策和/或我们的用户条款与条件来使用这些信息。 本隐私政策在制定时充分考虑到您的需求;
|
||||
您全面了解我们的个人资料收集和使用管理,而且确信自己最终能控制提供给信任桥的所有个人信息,这一点至关重要。<br />
|
||||
在这项隐私政策中。
|
||||
"个人信息"指所有通过有关特定个人的信息,或者与信任桥能够访问的其他关于该人的信息结合后,能够直接或间接识别该人的所有数据。 此类个人信息包括但不限于您提供或上传的信息和设备信息。<br />
|
||||
通过使用信任桥或其他符合适用法律的操作,即表示您已阅读并接受本隐私政策中所述之所有条款,包括我们定期作出的任何变更。
|
||||
为遵守适用法律,包括本地数据保护法律,我们将会对于特定类别的个人数据的处理(如自动个体决策)征求您的明确同意。 另外,我们承诺遵照适用法律(包括您所在地的数据保护法律)来保护您的个人信息的隐私,机密,和安全。
|
||||
同时我们承诺确保我们的全体员工和代理商履行这些义务。<br />
|
||||
最后,我们所希望的就是为我们的用户带来最好的体验。<br />
|
||||
APP安装及运行所需权限列表及用途<br />
|
||||
1: INTERNET:允许应用访问网络,用于与服务器进行数据交互,确保应用内容的更新及核心业务功能的正常运行。<br />
|
||||
2: CAMERA:相机权限。用于在您使用扫码、拍摄照片上传头像或反馈建议等功能时获取影像信息。例如:当您点击“更换头像”时,我们需要调用相机拍摄新照片;当您发布商品评价时,您可以使用相机拍摄商品实物图上传。<br />
|
||||
3: READ_PHONE_STATE:读取电话状态。用于获取设备唯一标识符,以保障账号安全、进行反作弊校验及统计分析。<br />
|
||||
4: ACCESS_NETWORK_STATE / ACCESS_WIFI_STATE:获取网络状态/Wi-Fi状态。用于检测当前网络环境,提示流量消耗或进行网络连接优化。<br />
|
||||
5: WRITE_EXTERNAL_STORAGE / READ_EXTERNAL_STORAGE / 相册权限:读写外部存储及相册。用于缓存应用数据、保存图片至本地或读取上传所需的图片/文件。例如:当您发布评价或更换头像时,需要访问相册选择图片;当您分享商品海报时,需要将海报保存到您的手机相册。<br />
|
||||
6: VIBRATE:允许手机震动。用于在接收到重要通知或特定交互时提供震动反馈。<br />
|
||||
7: WAKE_LOCK:唤醒锁定。用于在执行重要后台任务(如文件下载、数据同步)时防止手机进入休眠状态。<br />
|
||||
8: RECORD_AUDIO / 麦克风(录音)权限:允许应用访问麦克风进行音频录制。用于在您使用在线客服发送语音消息、语音搜索或按键语音开单等功能时录制您的声音信息。例如:当您在全媒体智能客服页面按住“按住说话”按钮发送语音消息时,我们需要调用麦克风权限采集音频。<br />
|
||||
哪些信息会被收集以及我们如何使用这些信息?<br />
|
||||
收集的信息类别<br />
|
||||
为了向您提供我们的服务,我们会要求您提供服务所必需的个人信息。
|
||||
如果您不提供个人信息,我们可能无法向您提供我们的产品 or 服务。<br />
|
||||
我们只会为了详细说明过的、明确的、合法的目的收集必要的信息,并保证不会以和上述目的不符的方式处理这些信息。
|
||||
我们可能会收集以下各类信息(无论其是否为个人信息):<br />
|
||||
游客模式说明:我们支持您在未登录状态下(“暂不登录”)浏览我们的产品和服务。在此模式下,我们不会收集您的手机号码、姓名等个人身份信息,仅会收集保障应用运行所必需的设备信息(如设备型号、操作系统版本)。如您需要使用下单、收藏等个性化服务,则需要您登录账号并授权相关信息。<br />
|
||||
您提供给我们或上传的信息(包括您的联系信息):我们可能收集您提供给我们的个人信息,例如手机号、信任桥账号信息(例如您的姓名、年龄、性别、服务使用记录)。<br />
|
||||
我们指定与您相关的信息:我们可能收集并使用诸如您的信任桥账号等信息。<br />
|
||||
位置信息(仅适用于特定服务/功能):与您的位置相关的各类信息,例如区域和国家代码、城市代码、移动网络代码、移动设备国家代码、社区识别码、地区名称、经纬度信息、时区设定和语言设定。
|
||||
登录信息:与您使用某些功能、移动应用程序和网站相关的信息,例如cookie和其他匿名识别字科技、IP地址、网络请求信息、临时消息历史、标准系统日志和系统崩溃信息等。<br />
|
||||
设备信息:在您阅读并同意本隐私政策后,为识别您的设备唯一性、预防恶意程序及反作弊、提高服务安全性、保障运营质量及效率,我们会收集您的设备信息(包括OAID、Android ID、设备序列号、MEID、IMSI、GUID、MAC地址)。在Android 10以下系统版本中,我们可能通过系统标准接口获取IMEI以作为设备唯一标识;在Android 10及以上版本中,因系统限制无法获取IMEI,我们将优先使用OAID作为替代方案。<br />
|
||||
其他信息:环境特征值(ECV)(由信任桥账号位置信息产生的数值)<br />
|
||||
账户凭证:有关您账户凭证的信息,例如手机号等。<br />
|
||||
后台/静默收集说明:当您将应用切换至后台或关闭应用但未注销登录时,为保证消息推送的及时性及设备状态同步的准确性,我们可能会在后台状态下收集您的设备标识符(OAID/Android ID)及服务使用记录(如设备在线状态)。后台收集频率不超过每5分钟一次,您可在系统设置中关闭“后台刷新”或“后台运行”权限以停止此类收集,但这可能导致您无法及时接收重要通知。<br />
|
||||
敏感个人信息声明<br />
|
||||
我们收集的敏感个人信息包括:位置信息(精确经纬度)。我们仅在您明确开启位置权限后收集此类信息,并会采取严格保护措施。对于实名认证信息(姓名、身份证号),如您使用相关服务,我们将单独征得您的同意。<br />
|
||||
使用权限:在使用应用的过程中,您可能需要授予应用访问相机、相册或麦克风的权限,以便进行扫码、上传图片或发送语音消息。
|
||||
我们仅在您授权的范围内使用相关权限,且不会将相关权限用于其他目的。<br />
|
||||
法律要求:在法律法规要求的情况下我们可能会根据适用的法律法规、法律程序或政府要求,披露您的个人信息。<br />
|
||||
自启动和关联启动说明<br />
|
||||
为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的信息、完成订单状态同步等必要业务功能,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现核心功能及服务所必要的。
|
||||
此类行为仅在实现特定业务场景(如:消息提醒、支付状态回调)时发生,我们承诺不会利用此类能力进行任何与业务无关的后台活动。
|
||||
当您打开内容类推送消息,在征得您的明确同意后,会跳转打开相关内容。 在未征得您同意的情况下,则不会有自启动或关联启动。<br />
|
||||
当您打开本App内部下载的文件后,不会关联启动第三方App。<br />
|
||||
个人信息共享说明<br />
|
||||
(一) 共享<br />
|
||||
我们不会与信任桥以外的公司、组织和个人共享您的个人信息,但以下情形除外:
|
||||
1. 法定情形:根据法律法规规定、诉讼争议解决需要,或按行政、司法机关依法提出的要求;
|
||||
2. 您的同意:经您事先明确同意或授权;
|
||||
3. 关联公司共享:为便于我们基于信任桥账号向您提供产品和服务,您的个人信息可能会与我们的关联公司共享。我们只会共享必要的个人信息(如设备标识符),且受本政策所述目的的约束;
|
||||
4. 授权合作伙伴:我们可能会向合作伙伴共享您的某些个人信息,以保障为您提供的服务顺利完成。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。<br />
|
||||
目前我们共享个人信息的第三方包括:
|
||||
- 微信支付、支付宝(支付服务)
|
||||
- DCloud(应用框架服务)<br />
|
||||
我们可能会将个人信息用于下列目的:<br />
|
||||
提供、处理、维护、改善、开发我们的商品和/或给您的服务,以及通过设备或信任桥提供的服务。
|
||||
与您就您的设备、服务或任何普通查询(例如更新、设备固件/软件升级、客户咨询支持、相关信息、通知)等进行交流。<br />
|
||||
开展市场营销相关活动,例如提供营销和推广相关的资料和更新。<br />
|
||||
分析和开发与我们产品及服务的使用相关的统计信息,以更好地改进我们的产品和服务。<br />
|
||||
储存并维护与您相关的信息,用于我们运营业务或履行法律义务。 无需与我们的服务器通信,提供本地服务。<br />
|
||||
关于我们如何使用您的信息(其中可能包含个人信息),下面提供了更多详细信息:<br />
|
||||
创建您的信任桥账号。 在通过移动设备创建账号时收集的个人信息用于建立用户的个人账户和资料页。<br />
|
||||
提供基于位置的服务。 在使用信任桥时,我们可能会使用位置信息判断设备时区,以保证在设备中准确显示时间、登录服务地区。
|
||||
以及根据您的选择为您提前开启相应设备等体验。 您可以随时进入设备设定或停止使用这一应用程序来关闭这一功能。<br />
|
||||
设备接入。 设备通过App进行操作,无需验证其设备的真实性。<br />
|
||||
设备状态显示。 可以允许您远程查看设备状态,以便您时刻查看设备运行情况。<br />
|
||||
收集用户反馈。 您选择提供的反馈对帮助信任桥改进我们的服务而言极为珍贵。
|
||||
为了跟踪您选择提供的反馈,信任桥可能会使用您所提供的个人信息与您联系,并保留记录。<br />
|
||||
发送通知。 我们可能会不时使用您的个人信息来发送重要通知,例如有关设备异常运行状态的通知、您定制的设备推送通知<br />
|
||||
(具体需要根据您购买添加设备的情况而定)、我们的条款、条件和政策变更。<br />
|
||||
信任桥的安全措施<br />
|
||||
我们承诺保证您的个人信息安全。
|
||||
为了防止未经授权的访问、披露或其他类似风险,我们落实了合理的物理、电子和管理措施流程,保护我们从您对信任桥的使用收集的信息。 我们将采取所有合理的措施保护您的个人信息。<br />
|
||||
您的个人信息全都被储存在安全的服务器上,并在受控设施中受到保护。
|
||||
我们依据重要性和敏感性对您的数据进行分类,并且保证您的个人信息具有最高的安全等级。
|
||||
我们保证通过访问 these 信息来帮助向您提供产品和服务的员工和第三方服务供应商具有严格的契约保密义务,如果未能履行这些义务,其将会受到纪律处分或被终止合作。 同样,我们对以信任桥为基础的数据存储设有专门的存取控制措施。
|
||||
总而言之,我们定期审查信息收集、储存和处理实践,包括物理安全措施,以防止任何未经授权的访问和使用。<br />
|
||||
我们将采取所有可行的步骤保护您的个人信息。
|
||||
但是,您应当意识到互联网的使用并不总是安全的,因此,我们不能保证在通过互联网双向传输时任何个人信息的安全性或完整性。<br />
|
||||
我们将对个人数据泄露行为采取相应措施,如将泄露现象通报相关监管机构,或在某些情况下依照适用法律(包括您当地的数据保护法律)向数据主体通报个人数据泄露行为。<br />
|
||||
您能做什么<br />
|
||||
您可以在保护您的个人信息方面发挥自己的作用,不要向任何人透露您的账户信息,除非此人获得您的正式授权。
|
||||
无论您何时作为信任桥账号用户登录信任桥,尤其是在他人的手机上登录时,在结束使用时您总应注销登出。<br />
|
||||
信任桥不对因您未能保持个人信息的私密性而导致第三方访问您的个人信息进而造成的安全疏漏承担责任。
|
||||
尽管有上述规定,如果发生互联网其他任何用户未经授权使用您账户的情况或其他任何安全性漏洞,您必须立即通知我们。<br />
|
||||
您的协助将有助于我们保护您个人信息的私密性。<br />
|
||||
保留政策与数据存储地点<br />
|
||||
原则上,我们在中华人民共和国境内收集和产生的个人信息将存储在境内。如因业务需要确需向境外提供个人信息,我们将事先征得您的单独同意,并按照网信部门的规定进行安全评估和审批。
|
||||
我们将仅在为您提供产品和/或服务所必需的最短期限内保留您的个人信息。
|
||||
1. 账号信息:在您使用期间持续保留,注销账号后,我们将在15个工作日内完成身份核验并对相关个人信息进行删除或匿名化处理(法律法规另有要求的除外)。
|
||||
2. 业务日志及记录:根据《网络安全法》等法律要求,至少保留六个月。
|
||||
3. 备份数据:为了系统安全,可能会在离线备份中保留更长时间,但会采取加密及物理隔离措施。
|
||||
如果有合理的理由认为保留个人信息不能实现收集个人信息的目的,我们将不再保留个人信息,或删除个人信息与特定个人相关联的方式。<br />
|
||||
您可以控制您的个人信息<br />
|
||||
联系我们<br />
|
||||
信任桥承认每个人对隐私权的关注各不相同。
|
||||
因此,我们提供了一些示例,说明信任桥提供的各种方式,供您选择,以限制收集、使用、披露或处理您的个人信息,并控制您的隐私权设定:<br />
|
||||
打开或者关闭用户体验计划和位置访问功能;<br />
|
||||
登录或登出信任桥账户;<br />
|
||||
访问、更新、更正、消除或限制处理您的个人信息<br />
|
||||
您有权要求访问和/或更正我们持有的与您有关的任何个人信息。 当您更新个人信息时,在我们处理您的请求前,会要求验证您的身份。
|
||||
一旦我们获得充分信息,可处理您的请求以访问或更正您的个人信息时,我们将在适用数据保护法规定的时间内对您的请求做出回应。 根据您的要求. 我们可以将收集和处理的您的个人数据副本免费提供给您。
|
||||
对于同一信息的任何额外请求,我们可能会根据适用法律根据实际管理支出收取合理的费用。<br />
|
||||
与您信任桥账户中的个人信息相关的更多详细信息,您可以通过您的设备登录账户来访问和更改。<br />
|
||||
注销账号<br />
|
||||
您可以通过APP-个人中心-注销申请注销您的账号。
|
||||
为确保是相应用户或者该用户授权的主体申请注销账号,信任桥尽最大努力保护用户的权益。 信任桥严格遵守法律法规有关个人信息保护的规定,以上信息仅用于本次账号注销。<br />
|
||||
信任桥特别提示,您注销账号的行为是不可逆的。
|
||||
我们将在收到您的注销申请并核实身份后,在15个工作日内完成处理。除法律法规另有规定外,在您注销账号后,我们将删除或匿名化有关您的个人信息,若删除个人信息从技术上难以实现的,我们会停止除存储 and 采取必要的安全保护措施之外的处理。<br />
|
||||
儿童及未成年人个人信息保护<br />
|
||||
我们非常重视对未成年人个人信息的保护。若您是14周岁以下的儿童,在使用我们的产品和/或服务前,应事先取得您家长或法定监护人的同意。
|
||||
如果我们发现自己在未事先获得可证实的父母同意的情况下收集了儿童的个人信息,则会设法尽快删除相关数据。
|
||||
对于经父母或法定监护人同意而收集未成年人个人信息的情况,我们只会在受到法律允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用或公开披露此信息。<br />
|
||||
第三方 SDK 收集使用信息说明<br />
|
||||
为保障 App 的稳定运行或实现相关功能,我们可能会接入由第三方提供的软件开发包(SDK)。我们会对第三方 SDK 进行严格的安全检测,并与第三方约定严格的数据保护措施。
|
||||
目前我们接入的第三方 SDK 如下:<br />
|
||||
1. SDK名称:微信OpenSDK Android 开发者:深圳市腾讯计算机系统有限公司 收集信息范围:设备识别信息(如IMEI、Android ID、OAID等)、网络状态、Wi-Fi信息 目的:用于微信分享、登录、支付等功能 SDK隐私政策链接:https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8<br />
|
||||
2. SDK名称:APP支付客户端SDK 开发者:支付宝(杭州)信息技术有限公司 收集信息范围:可变更设备唯一标识(如OAID/Android ID等)、基本设备信息、软件安装列表、网络信息 目的:保障账户和资金安全、支付服务安全稳定运行、履行反洗钱等法定义务 SDK隐私政策链接:https://opendocs.alipay.com/open/54/01g6qm#%E6%94%AF%E4%BB%98%E5%AE%9D%20App%20%E6%94%AF%E4%BB%98%E5%AE%A2%E6%88%B7%E7%AB%AF%20SDK%20%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96<br />
|
||||
3. SDK名称:移动智能终端补充设备标识体系统一调用SDK 开发者:中国信息通信研究院 收集信息范围:设备制造商、设备型号、设备品牌、设备网络运营商名称、App包名及签名信息、OAID、VAID、AAID 目的:获取设备标识符(OAID/VAID/AAID),用于反作弊校验及统计分析 SDK隐私政策链接:https://www.msa-alliance.cn/col.jsp?id=122<br />
|
||||
4. SDK名称:DCloud SDK 开发者:数字天堂(北京)网络技术有限公司 收集信息范围:设备品牌、型号、操作系统版本、设备标识符(IMEI/Android ID/DEVICE_ID/IDFA、OAID、VAID、AAID、IMSI、MEID)、网络信息 目的:提供 App 运行环境、设备兼容性适配 SDK隐私政策链接:https://ask.dcloud.net.cn/protocol.html<br />
|
||||
5. uView-plus:UI 组件库,用于页面布局展示。不收集个人隐私信息。<br />
|
||||
6. ECharts / uCharts:用于数据可视化图表展示。不收集个人隐私信息。<br />
|
||||
撤销同意及操作指引<br />
|
||||
您可以通过以下方式撤销您已同意的授权或关闭特定功能:
|
||||
1. 系统权限:您可以在手机操作系统的“设置-应用管理-信任桥-权限”中,手动关闭相机、存储、位置等权限。
|
||||
2. 隐私协议撤回:您可以在 App 内通过“个人中心-设置-隐私管理-撤回隐私协议同意”来撤销您的授权。您撤回同意后,我们将立即停止收集新的个人信息,并在15个工作日内删除或匿名化处理已收集的个人信息(法律法规另有要求的除外)。撤销授权可能导致您无法继续使用 App 的核心功能。<br />
|
||||
请注意,您撤销同意会导致某些法律后果。
|
||||
根据您撤销同意让我们处理您的个人信息的范围,这可能表示您不能享受信任桥的产品和服务。<br />
|
||||
其他规定<br />
|
||||
优先级<br />
|
||||
如果您同意了适用的用户协议,并且此类用户协议和本隐私政策之间存在不一致,将以此类用户协议为准。<br />
|
||||
本隐私政策的更新<br />
|
||||
我们会对隐私政策进行定期审核,为反映我们信息惯例的变更,我们可能会更新本隐私政策。
|
||||
如果我们对本隐私政策进行重大变更,我们将通过(向您账户指定的邮箱地址发送)电子邮件或在信任桥公布或通过移动设备通知您,这样您可以了解我们收集的信息以及我们如何使用这些信息。 此类隐私政策变化将从通知或网站规定的生效日期开始适用。
|
||||
我们建议您定期查阅,获取我们隐私权实践的最新信息。 您继续使用信任桥上的服务,将被视为接受更新的隐私政策。 在我们向您收集更多的个人信息或我们希望因为新的目的使用或披露您的个人信息时,我们会再次征得您的同意。<br />
|
||||
我是否必须同意任何第三方条款与条件?<br />
|
||||
我们的隐私政策不适用于第三方提供的产品和服务。 信任桥可能包括第三方的产品和服务,以及第三方网站的链接。
|
||||
当您使用这些产品或服务时,也可能收集您的信息。 因此,我们强烈建议您花时间阅读该第三方的隐私政策,就像阅读我们的政策一样。 我们不对第三方如何使用他们向您收集的个人信息负责,也不能控制其使用。
|
||||
我们的隐私政策不适用通过我们的服务链接的其他网站。<br />
|
||||
当您使用信任桥平台上这些特定产品的扩展程序服务时,适用第三方条款和隐私政策,您将同意各扩展程序的条款。<br />
|
||||
关于我们系统管理您个人信息的方式<br />
|
||||
联系我们<br />
|
||||
如果您对本隐私政策有任何意见、问题或投诉,或者您对信任桥收集、使用或披露您的个人信息有任何疑问,请通过以下方式联系我们:<br />
|
||||
开发者名称:信任桥(深圳)网络科技有限公司<br />
|
||||
联系地址:广东省深圳市龙华区民治街道北站社区汇德大厦1号楼4101G<br />
|
||||
联系邮箱:gala@alpha-cex.com<br />
|
||||
客服通道:您可以通过 App 内的“在线客服”或“问题反馈”通道联系我们。<br />
|
||||
一般情况下,我们将在收到您的问题、意见或建议并核实您的用户身份后 15 个工作日内回复。<br />
|
||||
开发者:信任桥(深圳)网络科技有限公司<br />
|
||||
</view>
|
||||
|
||||
<qiaobao-assistant page-key="pages/mine_package/mine_privacy_agreement/mine_privacy_agreement" title="协议与规则" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Header from '@/components/header.vue';
|
||||
export default {
|
||||
components: { Header },
|
||||
data() {
|
||||
return {
|
||||
leftPath: '/pages/mine_package/mine_settings/mine_settings',
|
||||
};
|
||||
},
|
||||
onLoad(option) {
|
||||
const backPath = option.backPath;
|
||||
if (backPath && backPath === "login") {
|
||||
this.leftPath = '/pages/login_package/login/login';
|
||||
}
|
||||
if (backPath && backPath === "register") {
|
||||
this.leftPath = '/pages/login_package/register/register';
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.privacy_agreement_warp {
|
||||
background-color: $app-bj;
|
||||
overflow: hidden;
|
||||
|
||||
.privacy_agreement_content_warp {
|
||||
padding: 40rpx;
|
||||
height: calc(100vh - 242rpx);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.interval {
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.interval2 {
|
||||
margin-left: 40rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Header from '@/components/header.vue';
|
||||
export default {
|
||||
components: { Header },
|
||||
data() {
|
||||
return {
|
||||
leftPath: '/pages/mine_package/mine_settings/mine_settings',
|
||||
};
|
||||
},
|
||||
onLoad(option) {
|
||||
const backPath = option.backPath;
|
||||
if (backPath && backPath === "login") {
|
||||
this.leftPath = '/pages/login_package/login/login';
|
||||
}
|
||||
if (backPath && backPath === "register") {
|
||||
this.leftPath = '/pages/login_package/register/register';
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.privacy_agreement_warp {
|
||||
background-color: $app-bj;
|
||||
overflow: hidden;
|
||||
|
||||
.privacy_agreement_content_warp {
|
||||
padding: 40rpx;
|
||||
height: calc(100vh - 242rpx);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.interval {
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.interval2 {
|
||||
margin-left: 40rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -78,13 +78,13 @@
|
||||
6.2.一旦您在信任桥平台的账户被终止,您使用信任桥平台服务的权利即告终止。信任桥不因终止本协议对您承担任何责任,包括终止您的用户账户和删除您的用户内容;信任桥也没有义务向您或第三方提供您使用信任桥平台服务所形成的信息资料。<br />
|
||||
七、知识产权声明<br />
|
||||
7.1【知识产权保护】信任桥是本软件的知识产权权利人。本软件的一切著作权、商标权、专利权、商业秘密等知识产权,以及与本软件相关的所有信息内容(包括但不限于文字、图片、音频、视频、图表、界面设计、版面框架、有关数据或电子文档等)均受您所在当地法律法规和相应的国际条约保护,信任桥享有上述知识产权。您使用信任桥帐号及信任桥平台服务的行为应符合相关协议关于知识产权的约定。<br />
|
||||
7.2【知识产权许可】您在使用信任桥平台服务时利用信任桥帐号发表上传的文字、图片等原创信息的知识产权归您所有但是您确认您对该等信息的发表、上传行为视同为对信任桥非独占地、永久地、不可撤销地授予该等信息相关全部知识产权的使用、复制等权利,并且您同意信任桥可转授权上述权利。<br />
|
||||
7.2【知识产权许可】您对利用本平台发表、上传的文字、图片等原创信息依法享有知识产权。为运营本平台并向您提供服务之目的,您授予信任桥一项附条件、可撤销的、非独占的使用权,以复制、使用、展示您所发布的内容。本授权在您主动删除相关内容或注销账号后自动终止。信任桥如需将您的内容用于平台运营之外的其他商业目的,或进行转授权,应另行获得您的书面同意。<br />
|
||||
7.3【知识产权归属】除非经过信任桥的在先书面同意,您未获得权利使用信任桥的任何知识产权。您保证、陈述并承诺您尊重信任桥的知识产权。您不会以自己名义或促使第三方,也不会同意或放任任何第三方,为了其任何营销、广告、促销或其他目的,在任何法域、以任何方式申请与信任桥或信任桥关联公司商标相似的商标、域名、无线网站、互联网搜索词或任何商号、服务标志。如出现上述情况,您须将所有相关权利转让给信任桥,费用由您承担。您保证、陈述并承诺,不会使用以下名称(包括但不限于“信任桥”)、上述品牌的附属标志及图案(包括但不限于等)作为企业、商户、服务或产品名称的一部分,亦不会使用与信任桥商标或近似商标的知识产权。如因您违反本条款约定而给信任桥造成损失的,该损失全部由您承担。<br />
|
||||
7.4【侵权处理】您在信任桥发布的信息不得侵犯任何第三人的知识产权,未经具有相关所有权人之事先书面同意,您不得以任何方式上传、发布、修改、传播或复制任何受著作权保护的材料、商标或属于其他人的专有信息。如您认为信任桥平台上的商品或其他信息侵犯了您的知识产权,请按照信任桥平台上公布的知识产权保护规则及流程处理。<br />
|
||||
八、通知<br />
|
||||
您在注册成为信任桥用户,并接受信任桥平台服务时,您应该向信任桥提供真实有效的联系方式(包括联系电话等),对于联系方式发生变更的,您有义务及时更新有关信息,并保持可被联系的状态。信任桥向您浏览界面推送的弹窗等通知形式,也作为向您发出的有效通知。信任桥将向您的上述联系方式的其中之一或其中若干向您送达各类通知,而此类通知的内容可能对您的权利义务产生重大的有利或不利影响,请您务必及时关注。您应当保证所提供的联系方式是准确、有效的,并进行实时更新。如果因提供的联系方式不确切,或不及时告知变更后的联系方式,使通知无法送达或未及时送达,由您自行承担由此可能产生的法律后果。<br />
|
||||
九、适用法律及争议解决<br />
|
||||
9.1本协议应适用中华人民共和国法律。您因使用信任桥平台服务所产生及与信任桥平台服务有关的争议,由信任桥与您协商解决。协商不成时,任何一方均可向上海市青浦区有管辖权的人民法院提起诉讼。<br />
|
||||
9.1本协议应适用中华人民共和国法律。您因使用信任桥平台服务所产生及与信任桥平台服务有关的争议,由信任桥与您协商解决。协商不成时,任何一方均可向被告住所地有管辖权的人民法院提起诉讼。<br />
|
||||
9.2本协议中的某些条款因故无法适用,则本协议的其他条款继续适用且无法适用的条款将会被修改,以便其能够依法适用。<br />
|
||||
9.3未明示授权的其他权利仍由信任桥保留,您在行使这些权利时须另外取得信任桥的书面许可。信任桥如果未行使前述任何权利,并不构成对该权利的放弃。<br />
|
||||
十、其他<br />
|
||||
@@ -94,7 +94,7 @@
|
||||
10.4.本协议条款无论因何种原因部分无效或不可执行,其余条款仍有效,对双方具有约束力。<br />
|
||||
开发者:信任桥<br />
|
||||
</view>
|
||||
<qiaobao-assistant page-key="pages/mine_package/mine_user_agreement/mine_user_agreement" title="协议与规则" />
|
||||
<qiaobao-assistant page-key="pages/mine_package/mine_user_agreement/mine_user_agreement" title="协议与规则" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<!-- 优惠券列表及分页加载区域 -->
|
||||
<mescroll-uni
|
||||
ref="mescrollRef"
|
||||
top="176rpx"
|
||||
:top="mescrollTop"
|
||||
@down="downCallback"
|
||||
@up="upCallback"
|
||||
:up="upOption"
|
||||
@@ -120,6 +120,17 @@ import { getMyCouponPage } from '@/api/coupon.js';
|
||||
export default {
|
||||
mixins: [MescrollMixin],
|
||||
components: { Header, TopSafe, MescrollUni },
|
||||
computed: {
|
||||
mescrollTop() {
|
||||
// #ifdef H5
|
||||
return '176rpx';
|
||||
// #endif
|
||||
// #ifndef H5
|
||||
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0;
|
||||
return (statusBarHeight * 2 + 176) + 'rpx';
|
||||
// #endif
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentTab: 0,
|
||||
|
||||
+7
-9
@@ -125,12 +125,10 @@
|
||||
<view class="product_info_box">
|
||||
<view class="product_title">{{ item.name || item.title }}</view>
|
||||
|
||||
<view class="product_tags_row" v-if="item.sellingPoint && getSellingPointTags(item.sellingPoint).length > 0">
|
||||
<text
|
||||
class="tag_item tag_green"
|
||||
v-for="(tag, tIndex) in getSellingPointTags(item.sellingPoint)"
|
||||
:key="tIndex"
|
||||
>{{ tag }}</text>
|
||||
<view class="product_tags_row"
|
||||
v-if="item.sellingPoint && getSellingPointTags(item.sellingPoint).length > 0">
|
||||
<text class="tag_item tag_green" v-for="(tag, tIndex) in getSellingPointTags(item.sellingPoint)"
|
||||
:key="tIndex">{{ tag }}</text>
|
||||
</view>
|
||||
|
||||
<view class="product_price_row">
|
||||
@@ -692,7 +690,7 @@ page {
|
||||
|
||||
/* 左侧边栏 */
|
||||
.left_sidebar_scroll {
|
||||
width: 180rpx;
|
||||
width: 160rpx;
|
||||
height: 100%;
|
||||
flex-shrink: 0;
|
||||
background-color: #f7f7f7;
|
||||
@@ -838,7 +836,6 @@ page {
|
||||
|
||||
.product_title {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #1a1a1a;
|
||||
line-height: 38rpx;
|
||||
max-height: 76rpx;
|
||||
@@ -891,7 +888,8 @@ page {
|
||||
}
|
||||
|
||||
.price_val {
|
||||
font-size: 38rpx;
|
||||
font-size: 36rpx;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+185
-2
@@ -918,6 +918,187 @@ export default {
|
||||
await this.pickAndUploadImage()
|
||||
},
|
||||
|
||||
checkMicrophoneAuthorized() {
|
||||
// #ifdef H5
|
||||
return true
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
return new Promise((resolve) => {
|
||||
uni.getSetting({
|
||||
success: (res) => {
|
||||
resolve(res.authSetting['scope.record'] === true)
|
||||
},
|
||||
fail: () => resolve(false)
|
||||
})
|
||||
})
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
return new Promise((resolve) => {
|
||||
const platform = uni.getSystemInfoSync().platform
|
||||
if (platform === 'android') {
|
||||
try {
|
||||
const main = plus.android.runtimeMainActivity()
|
||||
const PackageManager = plus.android.importClass('android.content.pm.PackageManager')
|
||||
const permission = main.checkSelfPermission('android.permission.RECORD_AUDIO')
|
||||
resolve(permission === PackageManager.PERMISSION_GRANTED)
|
||||
} catch (e) {
|
||||
resolve(false)
|
||||
}
|
||||
} else if (platform === 'ios') {
|
||||
try {
|
||||
const avSession = plus.ios.importClass('AVAudioSession')
|
||||
const audioSession = avSession.sharedInstance()
|
||||
const permissionStatus = audioSession.recordPermission()
|
||||
resolve(permissionStatus === 1970168948)
|
||||
} catch (e) {
|
||||
resolve(false)
|
||||
}
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
// #endif
|
||||
},
|
||||
|
||||
async requestMicrophonePermission() {
|
||||
// #ifdef H5
|
||||
if (typeof navigator !== 'undefined' && navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') {
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
||||
stream.getTracks().forEach(track => track.stop())
|
||||
return true
|
||||
} catch (e) {
|
||||
uni.showModal({
|
||||
title: '麦克风权限提示',
|
||||
content: '请允许浏览器访问麦克风以使用语音录制功能。',
|
||||
showCancel: false
|
||||
})
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
return new Promise((resolve) => {
|
||||
uni.getSetting({
|
||||
success: (res) => {
|
||||
const recordAuth = res.authSetting['scope.record']
|
||||
if (recordAuth === true) {
|
||||
resolve(true)
|
||||
} else if (recordAuth === false) {
|
||||
uni.showModal({
|
||||
title: '麦克风权限未开启',
|
||||
content: '需要访问您的麦克风发送语音消息,请前往设置开启权限。',
|
||||
confirmText: '去设置',
|
||||
success: (modalRes) => {
|
||||
if (modalRes.confirm) {
|
||||
uni.openSetting()
|
||||
}
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
uni.authorize({
|
||||
scope: 'scope.record',
|
||||
success: () => resolve(true),
|
||||
fail: () => {
|
||||
uni.showModal({
|
||||
title: '授权提示',
|
||||
content: '麦克风授权失败,无法使用语音功能。',
|
||||
showCancel: false
|
||||
})
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
fail: () => resolve(true)
|
||||
})
|
||||
})
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
return new Promise((resolve) => {
|
||||
const platform = uni.getSystemInfoSync().platform
|
||||
if (platform === 'android') {
|
||||
try {
|
||||
plus.android.requestPermissions(
|
||||
['android.permission.RECORD_AUDIO'],
|
||||
(result) => {
|
||||
if (result.granted && result.granted.length > 0) {
|
||||
resolve(true)
|
||||
} else {
|
||||
uni.showModal({
|
||||
title: '麦克风权限未开启',
|
||||
content: 'App 需要您的同意才能访问麦克风以发送语音消息。',
|
||||
confirmText: '去设置',
|
||||
success: (modalRes) => {
|
||||
if (modalRes.confirm) {
|
||||
const Intent = plus.android.importClass('android.content.Intent')
|
||||
const Settings = plus.android.importClass('android.provider.Settings')
|
||||
const Uri = plus.android.importClass('android.net.Uri')
|
||||
const main = plus.android.runtimeMainActivity()
|
||||
const intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
const uri = Uri.fromParts('package', main.getPackageName(), null)
|
||||
intent.setData(uri)
|
||||
main.startActivity(intent)
|
||||
}
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
console.error('requestPermissions error:', error)
|
||||
resolve(true)
|
||||
}
|
||||
)
|
||||
} catch (e) {
|
||||
resolve(true)
|
||||
}
|
||||
} else if (platform === 'ios') {
|
||||
try {
|
||||
const avSession = plus.ios.importClass('AVAudioSession')
|
||||
const audioSession = avSession.sharedInstance()
|
||||
const permissionStatus = audioSession.recordPermission()
|
||||
if (permissionStatus === 1970168948) { // AVAudioSessionRecordPermissionGranted
|
||||
resolve(true)
|
||||
} else if (permissionStatus === 1970168947) { // AVAudioSessionRecordPermissionDenied
|
||||
uni.showModal({
|
||||
title: '麦克风权限未开启',
|
||||
content: 'App 需要您的同意才能访问麦克风,请前往设置开启麦克风权限。',
|
||||
confirmText: '去设置',
|
||||
success: (modalRes) => {
|
||||
if (modalRes.confirm) {
|
||||
const UIApplication = plus.ios.importClass('UIApplication')
|
||||
const NSURL = plus.ios.importClass('NSURL')
|
||||
const app = UIApplication.sharedApplication()
|
||||
const settingsUrl = NSURL.URLWithString('app-settings:')
|
||||
if (app.canOpenURL(settingsUrl)) {
|
||||
app.openURL(settingsUrl)
|
||||
}
|
||||
}
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
} else { // Undetermined
|
||||
audioSession.requestRecordPermission((granted) => {
|
||||
resolve(granted)
|
||||
})
|
||||
}
|
||||
} catch (e) {
|
||||
resolve(true)
|
||||
}
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
// #endif
|
||||
},
|
||||
|
||||
toggleVoiceMode() {
|
||||
if (this.uploadingAttachment) return
|
||||
if (this.recording) this.cancelVoiceRecording()
|
||||
@@ -939,8 +1120,10 @@ export default {
|
||||
this.voiceGestureActive = true
|
||||
this.recordingCancelled = false
|
||||
this.voiceStartY = this.voiceEventY(event)
|
||||
await this.startVoiceRecording()
|
||||
if (!this.voiceGestureActive && this.recording) this.cancelVoiceRecording()
|
||||
const ok = await this.startVoiceRecording()
|
||||
if (!ok || (!this.voiceGestureActive && this.recording)) {
|
||||
this.cancelVoiceRecording()
|
||||
}
|
||||
},
|
||||
|
||||
handleVoicePressMove(event) {
|
||||
|
||||
+66
-26
@@ -28,13 +28,15 @@
|
||||
/>
|
||||
<view v-else-if="normalizedType === contentType.AUDIO" class="audio-block">
|
||||
<button class="audio-message" @click.stop="toggleAudio">
|
||||
<u-icon :name="audioPlaying ? 'pause-circle' : 'play-circle'" size="24" color="#7934f6" />
|
||||
<text>{{ audioPlaying ? '正在播放' : '语音消息' }}</text>
|
||||
<view class="audio-message__left">
|
||||
<u-icon :name="audioPlaying ? 'pause-circle' : 'play-circle'" size="26" color="#7934f6" />
|
||||
<text class="audio-message__title">{{ audioPlaying ? '正在播放' : '语音消息' }}</text>
|
||||
</view>
|
||||
<text class="audio-duration">{{ attachment.duration ? `${attachment.duration}″` : '' }}</text>
|
||||
</button>
|
||||
<text v-if="attachment.transcript" class="audio-transcript" selectable>{{ attachment.transcript }}</text>
|
||||
<button v-else class="transcribe-button" :disabled="transcribing" @click.stop="$emit('transcribe', message)">
|
||||
{{ transcribing ? '识别中…' : '转文字' }}
|
||||
<text>{{ transcribing ? '识别中…' : '转文字' }}</text>
|
||||
</button>
|
||||
</view>
|
||||
<button v-else-if="normalizedType === contentType.FILE" class="file-message" @click.stop="openFile">
|
||||
@@ -513,44 +515,82 @@ export default {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.audio-duration {
|
||||
margin-left: auto;
|
||||
color: #777983;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
|
||||
.audio-block {
|
||||
display: flex;
|
||||
min-width: 240rpx;
|
||||
flex-direction: column;
|
||||
min-width: 260rpx;
|
||||
padding: 20rpx 26rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.audio-message {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16rpx;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
color: #1f1f23;
|
||||
text-align: left;
|
||||
line-height: 1;
|
||||
|
||||
&::after {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.audio-message__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.audio-transcript {
|
||||
padding-top: 10rpx;
|
||||
border-top: 1rpx solid rgba(121, 52, 246, 0.14);
|
||||
color: #35343b;
|
||||
.audio-message__title {
|
||||
font-size: 27rpx;
|
||||
font-weight: 500;
|
||||
color: #1f1f23;
|
||||
}
|
||||
|
||||
.audio-duration {
|
||||
margin-left: auto;
|
||||
color: #7934f6;
|
||||
font-size: 25rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.audio-transcript {
|
||||
margin-top: 14rpx;
|
||||
padding-top: 12rpx;
|
||||
border-top: 1rpx solid rgba(121, 52, 246, 0.15);
|
||||
color: #27272c;
|
||||
font-size: 26rpx;
|
||||
line-height: 1.55;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.transcribe-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
align-self: flex-start;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
color: #6730d7;
|
||||
font-size: 23rpx;
|
||||
line-height: 34rpx;
|
||||
}
|
||||
margin-top: 12rpx;
|
||||
padding: 6rpx 16rpx;
|
||||
border-radius: 12rpx;
|
||||
background: rgba(121, 52, 246, 0.08);
|
||||
color: #7934f6;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
line-height: 1.4;
|
||||
|
||||
.transcribe-button::after {
|
||||
border: 0;
|
||||
}
|
||||
&::after {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.transcribe-button[disabled] {
|
||||
color: #8e8f96;
|
||||
&[disabled] {
|
||||
color: #8e8f96;
|
||||
background: rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
}
|
||||
|
||||
.file-message {
|
||||
|
||||
Reference in New Issue
Block a user