Fly 2 years ago
parent
commit
88ad6c20de
45 changed files with 2080 additions and 369 deletions
  1. 0 8
      App.vue
  2. 4 0
      api/index.js
  3. 8 7
      components/carousels/carousels.vue
  4. 95 0
      components/confirm-popup/confirm-popup.vue
  5. 5 4
      components/iframe-page/iframe-page.vue
  6. 107 42
      components/marketplace/marketplace.vue
  7. 3 3
      components/rollMessage/rollMessage.vue
  8. 2 1
      components/slider-verify/slider-verify.vue
  9. 104 99
      manifest.json
  10. 37 0
      pages.json
  11. 15 5
      pages/content/address.vue
  12. 300 0
      pages/content/bind.vue
  13. 186 0
      pages/content/diagnose.vue
  14. 122 0
      pages/content/h5-list.vue
  15. 83 0
      pages/content/language.vue
  16. 13 16
      pages/content/mine.vue
  17. 287 0
      pages/content/money-password.vue
  18. 54 18
      pages/content/safety-set.vue
  19. 3 0
      pages/content/select-currency.vue
  20. 19 5
      pages/content/setting.vue
  21. 290 0
      pages/content/shortcut-buy.vue
  22. 2 2
      pages/contract/index.vue
  23. 1 0
      pages/exchange/index.vue
  24. 34 17
      pages/index/index.vue
  25. 49 16
      pages/index/modules/market.vue
  26. 41 14
      pages/index/modules/shortcut.vue
  27. 24 6
      pages/login/area-code.vue
  28. 1 3
      pages/login/modules/phone.vue
  29. 7 1
      pages/login/register.vue
  30. 2 6
      pages/login/reset-pswd.vue
  31. 45 14
      pages/login/safety-verification.vue
  32. 14 10
      pages/login/submit-register.vue
  33. 63 34
      pages/property/bill.vue
  34. 1 7
      pages/property/index.vue
  35. 1 1
      pages/property/modules/Bibi/index.vue
  36. 9 7
      pages/property/modules/GiftMoney/index.vue
  37. 1 1
      pages/property/modules/contract/index.vue
  38. 1 1
      pages/property/modules/legalTender/index.vue
  39. 8 8
      static/css/index.scss
  40. 2 0
      store/getters.js
  41. 1 3
      store/modules/app.config.js
  42. 4 1
      uni.scss
  43. 29 8
      utils/common.js
  44. 2 1
      utils/initialize.js
  45. 1 0
      utils/request.js

+ 0 - 8
App.vue

@@ -5,14 +5,6 @@
 			const app = uni.getWindowInfo()
 			this.$store.commit('app/SET_statusBarHeight', app.statusBarHeight || 30)
 			this.$store.commit('app/SET_windowInfo', app)
-
-			const aa = uni.getDeviceInfo()
-			uni.getSystemInfo({
-				success: res => {
-					console.log('设备信息 1 , ', res)
-				}
-			})
-
 		},
 		onShow: function() {
 			console.log('App Show')

+ 4 - 0
api/index.js

@@ -112,6 +112,10 @@ export function Api_delAddress(data) {
 	return axios.post(`/api/wallet/deladdress` , data)
 }
 
+// 划转记录
+export function Api_getWalletHzhistory() {
+	return axios.get(`api/wallet/hzhistory`)
+}
 
 
 

+ 8 - 7
components/carousels/carousels.vue

@@ -52,8 +52,10 @@
 </script>
 
 <style lang="scss" scoped>
-	.swiper-content {
-		background-color: $modules-box-bg;
+	.swiper-box{
+			height: 280rpx;
+	}
+	.swiper-content { 
 		padding: 0 $pages-padding;
 	}
 
@@ -62,7 +64,6 @@
 		.swiper-item {
 			width: 100%;
 			height: 280rpx;
-
 			image {
 				width: 100%;
 				height: 100%;
@@ -75,7 +76,7 @@
 	.custom-indicator {
 
 		width: 100%;
-		padding-top: 15rpx;
+		padding-top: 20rpx;
 		display: flex;
 		justify-content: center;
 		align-items: center;
@@ -83,14 +84,14 @@
 		// gap: 20rpx 20rpx;
 
 		.indicator {
-			width: 10rpx;
-			height: 10rpx;
+			width: 8rpx;
+			height: 8rpx;
 			background-color: #d9d9d9;
 			transform: rotate(45deg);
 		}
 
 		.indicator+.indicator {
-			margin-left: 20rpx;
+			margin-left: 16rpx;
 		}
 
 		.active-indicator {

+ 95 - 0
components/confirm-popup/confirm-popup.vue

@@ -0,0 +1,95 @@
+<template>
+	<uni-popup ref="popupRef">
+
+		<view class="unopen-box">
+			<view class="content">
+				{{ content }}
+			</view>
+			<!-- @click.stop="" -->
+			<view class="unopen-btns">
+				<view class="unopen-btn" @click.stop="close()">
+					取消
+				</view>
+				<view class="unopen-btn" @click.stop="confirm()">
+					确认
+				</view>
+			</view>
+		</view>
+	</uni-popup>
+</template>
+
+<script>
+	export default {
+		name: "confirm-popup",
+		props: {
+			content: {
+				type: String,
+				default: '是否确认?'
+			}
+		},
+		data() {
+			return {
+
+			};
+		},
+		mounted() {
+			// this.$refs.popupRef.open()
+			// this.open()
+		},
+		methods: {
+			open() {
+				this.$nextTick(() => {
+					this.$refs.popupRef.open();
+				})
+			},
+			close(){
+				this.$refs.popupRef.close()
+			},
+			confirm(){
+				this.close()
+				this.$emit('confirm')
+			}
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.unopen-box {
+		width: 600rpx;
+		min-height: 320rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		overflow: hidden;
+		padding: 50rpx 60rpx 40rpx;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+
+		.content {
+			text-align: center;
+			font-size: 36rpx;
+		}
+		.unopen-btns{
+			width: 100%;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.unopen-btn{
+				width: 220rpx;
+				height: 80rpx;
+				border-radius: 6rpx;
+				text-align: center;
+				line-height: 78rpx;
+				color: #fff;
+				font-size: 30rpx;
+				border: 1rpx solid $Theme-Color;
+				color: $Theme-Color;
+			}
+			.unopen-btn + .unopen-btn{
+				color: #fff;
+				background-color: $Theme-Color;
+			}
+		}
+	}
+</style>

+ 5 - 4
components/iframe-page/iframe-page.vue

@@ -3,7 +3,7 @@
 		<headContent statusBarBg="#191A2E" bgColor="#191A2E">
 
 			<template #left>
-				<reverse-back iconColor="#fff"/>
+				<reverse-back iconColor="#fff" />
 			</template>
 			<template #content>
 				<view class="haed-title">
@@ -11,12 +11,12 @@
 				</view>
 			</template>
 			<template #right>
-				<closeIocn iconColor="#fff"/>
+				<closeIocn iconColor="#fff" />
 			</template>
 		</headContent>
 		<view class="iframe-box">
 			<iframe
-				src="https://app.chatra.live/index/index/home?visiter_id=&visiter_name=&avatar=&groupid=0&business_id=12"
+				src="https://app.chatra.live/index/index/home?visiter_id=&visiter_name=&avatar=&groupid=0&business_id=13"
 				frameborder="0"></iframe>
 		</view>
 	</view>
@@ -34,9 +34,10 @@
 </script>
 
 <style lang="scss" scoped>
-	.haed-title{
+	.haed-title {
 		color: #fff !important;
 	}
+
 	.iframe-content {
 		width: 100%;
 		height: 100vh;

+ 107 - 42
components/marketplace/marketplace.vue

@@ -8,12 +8,12 @@
 				</view>
 			</uni-th>
 			<uni-th>
-				<view class="table-th table-th-title" @click.stop="alterRankRule(`rankRule`)">
+				<view class="table-th table-th-title" @click.stop="alterRankRule('newPrice')">
 					<text>最新价</text>
 					<view class="title-arrows">
-						<image class="arrows-icon" :src="rankRule === 1 ? activeRankRuleIcon : rankRuleIcon"
+						<image class="arrows-icon" :src="rankRuleNum === 1 ? activeRankRuleIcon : rankRuleIcon"
 							mode="aspectFit"></image>
-						<image class="arrows-icon" :src="rankRule === 2 ? activeRankRuleIcon : rankRuleIcon"
+						<image class="arrows-icon" :src="rankRuleNum === 2 ? activeRankRuleIcon : rankRuleIcon"
 							mode="aspectFit"></image>
 					</view>
 				</view>
@@ -22,46 +22,46 @@
 				<view class="table-th table-th-title" @click.stop="alterRankRule(`rankRule`)">
 					<text>日涨跌</text>
 					<view class="title-arrows">
-						<image class="arrows-icon" :src="rankRule === 1 ? activeRankRuleIcon : rankRuleIcon"
+						<image class="arrows-icon" :src="rankRuleNum === 3 ? activeRankRuleIcon : rankRuleIcon"
 							mode="aspectFit"></image>
-						<image class="arrows-icon" :src="rankRule === 2 ? activeRankRuleIcon : rankRuleIcon"
+						<image class="arrows-icon" :src="rankRuleNum === 4 ? activeRankRuleIcon : rankRuleIcon"
 							mode="aspectFit"></image>
 					</view>
 				</view>
 			</uni-th>
 		</uni-tr>
 		<!-- 表格数据行 -->
-		<view class="" v-for="item in marketplaceList">
-			<uni-tr v-for="val in item.quotation" :rise-fall="stocksColor">
-				<uni-td>
-					<view class="table-title">
-						<view class="title">
-							<text>{{ val.currency_name }}</text>
-							<text class="title-sub">{{ item.legal_name ? `/${item.legal_name}` : '' }}</text>
-						</view>
-						<view class="title-num">
-							24H额:476.62m
-						</view>
-					</view>
-				</uni-td>
-				<uni-td>
+		<!-- 	<view class="" v-for="item in marketplaceList">
+			
+		</view> -->
+		<uni-tr v-for="val in listArr" :rise-fall="stocksColor">
+			<uni-td>
+				<view class="table-title">
 					<view class="title">
-						<view class="">
-							{{ val.now_price }}
-						</view>
-						<view class="title-num">
-							¥{{ val.volume }}
-						</view>
+						<text>{{ val.currency_name }}</text>
+						<text class="title-sub">{{ val.legal_name ? `/${val.legal_name}` : '' }}</text>
 					</view>
-				</uni-td>
-				<uni-td :class="['table-right' , $setColor(val.change)]">
-					<view class="table-btn bgcolor">
-						{{ val.change }}%
+					<view class="title-num">
+						24H额:{{ val.volume }}m
 					</view>
-				</uni-td>
-			</uni-tr>
-		</view>
-
+				</view>
+			</uni-td>
+			<uni-td>
+				<view class="title">
+					<view class="">
+						{{ val.now_price }}
+					</view>
+					<view class="title-num">
+						<text class="iconfont">&#xe615;</text> {{ val.volume }}
+					</view>
+				</view>
+			</uni-td>
+			<uni-td :class="['table-right' , $setColor(val.change)]">
+				<view class="table-btn bgcolor">
+					{{ val.change }}%
+				</view>
+			</uni-td>
+		</uni-tr>
 	</uni-table>
 </template>
 
@@ -79,7 +79,9 @@
 		},
 		data() {
 			return {
-				rankRule: 0,
+				manageArr:[],
+				listArr: [],
+				rankRuleNum: 0,
 				rankRuleIcon: require("@/static/images/jiantou.png"),
 				activeRankRuleIcon: require("@/static/images/jiantou_01.png")
 			};
@@ -89,19 +91,77 @@
 				'stocksColor'
 			]),
 		},
+		watch: {
+			marketplaceList: {
+				handler(newArr , oldArr) {
+					this.manageArr = JSON.parse(JSON.stringify(newArr))
+					this.alterRankRule()
+				},
+				deep: true
+			}
+		},
 		methods: {
 			alterRankRule(rankRule) {
-				console.log('alterRankRule', rankRule)
-				switch (this['rankRule']) {
-					case 0:
-						this['rankRule'] = 1;
-						break;
+				if (rankRule) {
+					// newPrice , rankRule
+					if (rankRule === 'newPrice') {
+						switch (this.rankRuleNum) {
+							case 0:
+							case 3:
+							case 4:
+								this.rankRuleNum = 1;
+								break;
+							case 1:
+								this.rankRuleNum = 2;
+								break;
+							default:
+								this.rankRuleNum = 0
+						}
+					}
+					if (rankRule === 'rankRule') {
+						switch (this.rankRuleNum) {
+							case 0:
+							case 1:
+							case 2:
+								this.rankRuleNum = 3;
+								break;
+							case 3:
+								this.rankRuleNum = 4;
+								break;
+							default:
+								this.rankRuleNum = 0
+						}
+					}
+				};
+				this.setRankList();
+
+			},
+			setRankList() {
+				switch (this.rankRuleNum) {
 					case 1:
-						this['rankRule'] = 2;
+						this.manageArr.sort((x, y) => {
+							return (x.now_price - y.now_price)
+						});
+						break;
+					case 2:
+						this.manageArr.sort((x, y) => {
+							return (y.now_price - x.now_price)
+						});
+						break;
+					case 3:
+						this.manageArr.sort((x, y) => {
+							return (x.change - y.change)
+						});
+						break;
+					case 4:
+						this.manageArr.sort((x, y) => {
+							return (y.change - x.change)
+						});
 						break;
 					default:
-						this['rankRule'] = 0
-				}
+						this.manageArr = JSON.parse(JSON.stringify(this.marketplaceList))
+				};
+				this.listArr = JSON.parse(JSON.stringify(this.manageArr))
 			}
 		}
 	}
@@ -203,6 +263,11 @@
 				.title-num {
 					padding-top: 18rpx;
 					font-size: 24rpx;
+					color: #9f9c9c;
+
+					.iconfont {
+						font-size: 22rpx;
+					}
 				}
 
 				// <view class="table-title">

+ 3 - 3
components/rollMessage/rollMessage.vue

@@ -53,13 +53,13 @@
 <style lang="scss" scoped>
 	.roll-box {
 		width: 100%;
-		height: 76rpx;
+		height: 70rpx;
 		background-color: $modules-box-bg;
 		padding: 0 $pages-padding;
 		display: flex;
 		justify-content: space-between;
 		align-items: center;
-
+		border-bottom: 1rpx solid $border-color2;
 		.roll-icon,
 		.roll-more {
 			width: 30rpx;
@@ -91,7 +91,7 @@
 				padding-right: 0;
 
 				.u-notice__swiper__item__text {
-					font-size: 26rpx !important;
+					font-size: 24rpx !important;
 					font-family: PingFang SC, PingFang SC-Regular !important;
 					font-weight: 400 !important;
 

+ 2 - 1
components/slider-verify/slider-verify.vue

@@ -77,7 +77,6 @@
 		methods: {
 			
 			open() {
-				this.sliderErrText = ''
 				this.refreshVerify();
 				this.$nextTick(() => {
 					this.$refs.popupRef.open();
@@ -85,6 +84,8 @@
 			},
 			//刷新验证
 			refreshVerify() {
+				this.moveSuccess = false;
+				this.sliderErrText = '';
 				this.clearMoveTime()
 				var gl = Math.random().toFixed(2);
 				const leftNum = uni.upx2px(560) * gl > uni.upx2px(280) ? uni.upx2px(280) : uni.upx2px(560) * gl + uni.upx2px(

+ 104 - 99
manifest.json

@@ -1,100 +1,105 @@
 {
-    "name" : "币王",
-    "appid" : "__UNI__053A230",
-    "description" : "",
-    "versionName" : "1.0.0",
-    "versionCode" : "100",
-    "transformPx" : false,
-    /* 5+App特有相关 */
-    "app-plus" : {
-        "usingComponents" : true,
-        "nvueStyleCompiler" : "uni-app",
-        "compilerVersion" : 3,
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
-            "autoclose" : true,
-            "delay" : 0
-        },
-        /* 模块配置 */
-        "modules" : {},
-        /* 应用发布信息 */
-        "distribute" : {
-            /* android打包配置 */
-            "android" : {
-                "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.GET_ACCOUNTS\"/>",
-                    "<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\"/>"
-                ]
-            },
-            /* ios打包配置 */
-            "ios" : {},
-            /* SDK配置 */
-            "sdkConfigs" : {
-                "share" : {
-                    "weixin" : {
-                        "appid" : "",
-                        "UniversalLinks" : ""
-                    },
-                    "qq" : {
-                        "appid" : "",
-                        "UniversalLinks" : ""
-                    }
-                }
-            }
-        }
-    },
-    /* 快应用特有相关 */
-    "quickapp" : {},
-    /* 小程序特有相关 */
-    "mp-weixin" : {
-        "appid" : "",
-        "setting" : {
-            "urlCheck" : false
-        },
-        "usingComponents" : true
-    },
-    "mp-alipay" : {
-        "usingComponents" : true
-    },
-    "mp-baidu" : {
-        "usingComponents" : true
-    },
-    "mp-toutiao" : {
-        "usingComponents" : true
-    },
-    // "h5": {
-    // 	"devServer": {
-    // 		// "port" : 8080, //浏览器运行端口
-    // 		"https": false,
-    // 		"proxy": {
-    // 			"/baseUrlTest": {
-    // 				"target": "https://doc.okenx.com",
-    // 				"changeOrigin": true,
-    // 				"secure": false,
-    // 				"pathRewrite": {
-    // 					"^": ""
-    // 				}
-    // 			}
-    // 		},
-    // 		"disableHostCheck":true
-    // 	}
-    // },
-    "uniStatistics" : {
-        "enable" : false
-    },
-    "vueVersion" : "2"
-}
+	"name": "币王",
+	"appid": "__UNI__053A230",
+	"description": "",
+	"versionName": "2.4.8",
+	"versionCode": 200,
+	"transformPx": false,
+	/* 5+App特有相关 */
+	"app-plus": {
+		"safearea": {
+			"bottom": {
+				"offset": "none"
+			}
+		},
+		"usingComponents": true,
+		"nvueStyleCompiler": "uni-app",
+		"compilerVersion": 3,
+		"splashscreen": {
+			"alwaysShowBeforeRender": true,
+			"waiting": true,
+			"autoclose": true,
+			"delay": 0
+		},
+		/* 模块配置 */
+		"modules": {},
+		/* 应用发布信息 */
+		"distribute": {
+			/* android打包配置 */
+			"android": {
+				"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.GET_ACCOUNTS\"/>",
+					"<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\"/>"
+				]
+			},
+			/* ios打包配置 */
+			"ios": {},
+			/* SDK配置 */
+			"sdkConfigs": {
+				"share": {
+					"weixin": {
+						"appid": "",
+						"UniversalLinks": ""
+					},
+					"qq": {
+						"appid": "",
+						"UniversalLinks": ""
+					}
+				}
+			}
+		}
+	},
+	/* 快应用特有相关 */
+	"quickapp": {},
+	/* 小程序特有相关 */
+	"mp-weixin": {
+		"appid": "",
+		"setting": {
+			"urlCheck": false
+		},
+		"usingComponents": true
+	},
+	"mp-alipay": {
+		"usingComponents": true
+	},
+	"mp-baidu": {
+		"usingComponents": true
+	},
+	"mp-toutiao": {
+		"usingComponents": true
+	},
+	// "h5": {
+	// 	"devServer": {
+	// 		// "port" : 8080, //浏览器运行端口
+	// 		"https": false,
+	// 		"proxy": {
+	// 			"/baseUrlTest": {
+	// 				"target": "https://doc.okenx.com",
+	// 				"changeOrigin": true,
+	// 				"secure": false,
+	// 				"pathRewrite": {
+	// 					"^": ""
+	// 				}
+	// 			}
+	// 		},
+	// 		"disableHostCheck":true
+	// 	}
+	// },
+	"uniStatistics": {
+		"enable": false
+	},
+	"vueVersion": "2"
+}

+ 37 - 0
pages.json

@@ -187,11 +187,48 @@
                     "style" : {
                         "navigationBarTitleText" : "添加地址"
                     }
+                },
+                {
+                    "path" : "diagnose",
+                    "style" : {
+                        "navigationBarTitleText" : "用户辅助诊断页面..."
+                    }
+                },
+                {
+                    "path" : "language",
+                    "style" : {
+                        "navigationBarTitleText" : "语言切换"
+                    }
+                },
+                {
+                    "path" : "shortcut-buy",
+                    "style" : {
+                        "navigationBarTitleText" : "快捷买币"
+                    }
+                },
+                {
+                    "path" : "bind",
+                    "style" : {
+                        "navigationBarTitleText" : "绑定"
+                    }
+                },
+                {
+                    "path" : "money-password",
+                    "style" : {
+                        "navigationBarTitleText" : "设置资金密码"
+                    }
+                },
+                {
+                    "path" : "h5-list",
+                    "style" : {
+                        "navigationBarTitleText" : "列表"
+                    }
                 }
             ]
         }
     ],
     "tabBar" : {
+		"height":"50px",
         "color" : "#666666",
         "selectedColor" : "#0ED47F",
         // "borderStyle": "#E7E7E7",

+ 15 - 5
pages/content/address.vue

@@ -42,6 +42,7 @@
 				</view>
 			</view>
 		</view>
+		<confirm-popup ref="confirmPopupRef" content="确定删除?" @confirm="confirmDel" />
 	</view>
 </template>
 <script>
@@ -64,6 +65,7 @@
 				currencyInfo: null,
 				addressList: [],
 				getBiStatus: false,
+				delItem: {},
 			};
 		},
 		computed: {
@@ -93,7 +95,9 @@
 								this.currencyInfo = res[0];
 								this.getBiStatus = false
 							}
-						}).catch(err => {})
+						}).catch(err => {
+							this.currencyInfo = []
+						})
 					}
 				},
 				deep: true,
@@ -110,13 +114,12 @@
 
 		},
 		methods: {
-			// 删除
-			delAddress(item) {
+			confirmDel() {
 				uni.showLoading({
 					title: ''
 				})
 				Api_delAddress({
-					address_id: item.id
+					address_id: this.delItem?.id
 				}).then(res => {
 					this.getAddress()
 				}).catch(err => {
@@ -124,7 +127,14 @@
 				}).finally(() => {
 					setTimeout(() => {
 						uni.hideLoading()
-					},200)
+					}, 200)
+				})
+			},
+			// 删除
+			delAddress(item) {
+				this.delItem = item
+				this.$nextTick(() => {
+					this.$refs.confirmPopupRef.open();
 				})
 			},
 			selectCurrency() {

+ 300 - 0
pages/content/bind.vue

@@ -0,0 +1,300 @@
+<template>
+	<view>
+		<headContent borderBottom>
+			<template #left>
+				<reverse-back />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					{{ title }}
+				</view>
+			</template>
+		</headContent>
+		<view class="bangding-box">
+			<view class="bangding-item" v-show="type == 1">
+				<view class="item-lable">
+					手机
+				</view>
+				<view class="item-area" @click.stop="selectAreaCode">
+					<template v-if="account.area_code">
+						<text style="color: #000;">+{{ account.area_code }}</text>
+					</template>
+					<template v-else>
+						<text>国家和地区</text>
+						<text class="iconfont">&#xe60e;</text>
+					</template>
+				</view>
+				<text class="item-link"></text>
+				<input class="item-input" v-model="account.user_string" type="text"
+					placeholder-class="placeholder-class" placeholder="手机号">
+			</view>
+			<view class="bangding-item" v-show="type == 2">
+				<view class="item-lable">
+					邮箱
+				</view>
+				<input class="item-input" v-model="account.user_string" type="text"
+					placeholder-class="placeholder-class" placeholder="邮箱号">
+			</view>
+			<view class="err-hint">
+				{{ errText[errIndex || 0] }}
+			</view>
+			<view class="bangding-item code-item">
+				<view class="item-lable">
+					验证码
+				</view>
+				<input class="item-input" type="text" v-model="account.code" placeholder-class="placeholder-class"
+					placeholder="请输入手机验证码">
+				<view class="item-code" @click.stop="getCode()">
+					{{ codeText }}
+				</view>
+			</view>
+			<view :class="['bangding-btn' , next ? 'active-btn': '' ] " @click.stop="next ? submitBindAccount() : ''">
+				绑定
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		Api_getEmailCode,
+		Api_getSmsSend
+	} from "@/api/index.js";
+	export default {
+		name: 'bind-phone',
+		data() {
+			return {
+				title: '',
+				Api_: '',
+				type: null,
+				codeText: '获取验证码',
+				errIndex: '',
+				next: false,
+				account: {
+					user_string: '',
+					area_code: '',
+					code: ''
+				},
+				errText: [
+					'',
+					'请选择国家地区',
+					'请输入正确的手机号',
+					'请输入正确的邮箱号',
+				]
+
+			};
+		},
+		onLoad(opt) {
+			this.type = opt?.type || 1;
+			if (this.type == 1) {
+				// 手机号
+				this.Api_ = Api_getSmsSend
+				this.title = '绑定手机'
+			}
+			if (this.type == 2) {
+				// 邮箱
+				this.Api_ = Api_getEmailCode;
+				this.title = '绑定邮箱'
+			}
+		},
+		mounted() {
+
+		},
+		watch: {
+			account: {
+				handler(newContent) {
+					if (newContent.user_string && newContent.code && (this.type == 1 ? newContent.area_code : true)) {
+						this.next = true
+					} else {
+						this.next = false
+					}
+				},
+				immediate: true,
+				deep: true
+			},
+			'account.area_code': {
+				handler(newCode) {
+					if (newCode && this.errIndex === 1) {
+						this.errIndex = 0
+					}
+				},
+				immediate: true
+			},
+			'account.user_string': {
+				handler(newCode) {
+					if (newCode && [2, 3].includes(this.errIndex)) {
+						this.errIndex = 0
+					}
+				},
+				immediate: true
+			}
+		},
+		methods: {
+			selectAreaCode() {
+				uni.navigateTo({
+					url: '/pages/login/area-code'
+				})
+			},
+			setAreaCode(e) {
+				if (e) {
+					this.account.area_code = e.area_code;
+				}
+			},
+
+			// 校验
+			jiaoyan() {
+				if ([1, '1'].includes(this.type)) {
+					if (!this.account.area_code) {
+						this.errIndex = 1
+						return false
+					};
+					if (!this.account.user_string) {
+						this.errIndex = 2
+						return false
+					};
+				} else if ([2, '2'].includes(this.type)) {
+					if (!this.account.user_string) {
+						this.errIndex = 3
+						return false
+					};
+				} else {
+					return false
+				}
+				return true
+			},
+
+			getCode() {
+				if (this.codeText !== '获取验证码') {
+					return false
+				}
+
+
+				const errStatus = this.jiaoyan()
+
+				if (!errStatus) {
+					return false
+				}
+
+				let obj = {
+					user_string: this.account.user_string
+				};
+				if (this.account.area_code) {
+					obj.area_code = this.account.area_code
+				}
+				if (this.Api_) {
+					this.Api_(obj).then(res => {
+
+					}).catch(err => {
+
+					})
+					let num = 60
+					this.timeInterval = setInterval(() => {
+						num--;
+						if (num <= 0) {
+							clearInterval(this.timeInterval);
+							this.codeText = '获取验证码';
+							return false
+						};
+						this.codeText = `${num}秒后重新发送`;
+					}, 1000)
+				}
+			},
+			submitBindAccount(){
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.bangding-box {
+		width: 100%;
+		padding: 0 $pages-padding;
+
+		.bangding-item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			height: 100rpx;
+			border-bottom: 1rpx solid $border-color2;
+			font-size: 28rpx;
+			padding-top: 20rpx;
+
+			.item-lable {
+				flex-shrink: 0;
+				width: 120rpx;
+			}
+
+			.item-area {
+				flex-shrink: 0;
+				width: 196rpx;
+				color: $SizeColor1;
+				font-weight: bold;
+				display: flex;
+				align-items: center;
+
+				.iconfont {
+					margin-left: 3px;
+					color: #5b5b5b;
+					font-size: 20rpx;
+				}
+
+				// border-right: 1rpx solid $border-color6;
+
+			}
+
+			.item-link {
+				display: inline-block;
+				margin-right: 30rpx;
+				width: 3rpx;
+				height: 24rpx;
+				background-color: $border-color4;
+			}
+
+			.item-input {
+				flex: 1;
+				font-size: 28rpx;
+			}
+
+			.placeholder-class {
+				font-size: 28rpx;
+				color: $SizeColor1;
+				font-weight: bold;
+			}
+
+			.item-code {
+				color: $Theme-Color;
+			}
+		}
+
+		.code-item {
+			padding-top: 0;
+			height: 80rpx;
+		}
+
+		.err-hint {
+			width: 100%;
+			height: 70rpx;
+			font-size: 28rpx;
+			padding-top: 20rpx;
+			color: red;
+		}
+
+	}
+
+	.bangding-btn {
+		width: 100%;
+		margin-top: 80rpx;
+		height: 90rpx;
+		border-radius: 10rpx;
+		font-size: 30rpx;
+		text-align: center;
+		line-height: 90rpx;
+		color: #fff;
+		background-color: $btnBgColor;
+	}
+
+	.active-btn {
+		background-color: $Theme-Color;
+	}
+</style>

+ 186 - 0
pages/content/diagnose.vue

@@ -0,0 +1,186 @@
+<template>
+	<view>
+		<headContent statusBarBg="#191A2E" bgColor="#191A2E">
+
+			<template #left>
+				<reverse-back iconColor="#fff" />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					用户辅助诊断页面...
+				</view>
+			</template>
+		</headContent>
+		<view class="page-info" style="background-color: #191A2E;">
+			<image class="info-logo" src="@/static/images/logo.png" mode="aspectFit"></image>
+			<view class="info-name">
+				App检测工具
+			</view>
+			<view class="info-text">
+				*此页面仅用于定位您的浏览器和网络信息,不涉及您的隐私信息,请放心使用
+			</view>
+		</view>
+		<view class="system-info">
+			<view class="system-title">
+				基础信息检测
+			</view>
+			<view class="system-item">
+				<text class="item-lable">设备信息</text>
+				<text class="item-val">{{ SystemInfo.ua }}</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">操作系统</text>
+				<text class="item-val">{{ SystemInfo.system }}</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">当前语言</text>
+				<text class="item-val">{{ SystemInfo.osLanguage || SystemInfo.language }}</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">使用浏览器</text>
+				<text class="item-val">{{ SystemInfo.browserName }} 浏览器宽:{{ SystemInfo.windowWidth  * SystemInfo.devicePixelRatio }} 浏览器高:{{ SystemInfo.windowHeight * SystemInfo.devicePixelRatio }}</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">手机信息</text>
+				<text class="item-val">手机型号:{{ SystemInfo.deviceBrand }} {{ SystemInfo.deviceModel }}</text>
+				<text class="item-val">App版本号:{{ SystemInfo.appWgtVersion }}</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">用户ip</text>
+				<text class="item-val">0.0.0.0</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">用户所在地</text>
+				<text class="item-val">unknown</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">网络运营商</text>
+				<text class="item-val">unknown</text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">App API响应速度</text>
+				<text class="item-val">app_t<text class="val"> 229ms·状态:(成功)·</text></text>
+				<text class="item-val">app_a<text class="val"> 351ms·状态:(成功)·</text></text>
+				<text class="item-val">app_c<text class="val"> 363ms·状态:(成功)·</text></text>
+			</view>
+			<view class="system-item">
+				<text class="item-lable">App域名切换链路</text>
+				<text class="item-val waring">如果当前链路访问速度较慢,可尝试手动切换链路</text>
+				<view class="switch-btn">
+					当前访问:链路2
+				</view>
+			</view>
+		</view>
+		
+
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'diagnose',
+		data() {
+			return {
+				SystemInfo:{}
+			};
+		},
+		mounted() {
+			uni.getSystemInfo({
+				success: res => {
+					this.SystemInfo = res
+					console.log('设备信息 1 , ', res)
+				}
+			});
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	$padding-lr: 40rpx;
+
+	.haed-title {
+		color: #fff !important;
+	}
+
+	.page-info {
+		width: 100%;
+		padding: 60rpx $padding-lr;
+
+		.info-logo {
+			height: 87rpx;
+			width: 85rpx;
+		}
+
+		.info-name {
+			width: 200rpx;
+			height: 60rpx;
+			line-height: 60rpx;
+			text-align: center;
+			font-size: 24rpx;
+			color: #fff;
+			border-radius: 0 30rpx 0 30rpx;
+			background-color: rgba(255, 255, 255, 0.2);
+			margin: 30rpx 0 60rpx;
+		}
+
+		.info-text {
+			color: rgba(255, 255, 255, 0.6);
+			font-size: 22rpx;
+		}
+	}
+
+
+	// <view class="system-info">
+	// 	<view class="system-title">
+	// 		基础信息检测
+	// 	</view>
+	// </view>
+	.system-info {
+		width: 100%;
+		padding: 60rpx $padding-lr;
+
+		.system-title {
+			font-size: 38rpx;
+			font-weight: bold;
+			line-height: 1.3;
+			padding-left: 7px;
+			border-left: 3px solid $Theme-Color;
+		}
+		.system-item{
+			padding-top: 60rpx;
+			.item-lable{
+				display: block;
+				font-size: 26rpx;
+				padding-bottom:20rpx;
+			}
+			.item-val{ 
+				display: block;
+				font-size: 20rpx;
+				color: #939191;
+			}
+			.val{
+				color: $Theme-Color;
+			}
+			.waring{
+				color: red;
+			}
+			.switch-btn{
+				margin-top: 28rpx;
+				display: inline-block;
+				padding: 30rpx 20rpx;
+				font-size: 28rpx;
+				color: #fff;
+				border-radius: 8rpx;
+				background-color: $Theme-Color;
+			}
+		}
+		// <view class="system-item">
+		// 	<text class="item-lable">设备信息</text>
+		// 	<text class="item-val">zh</text>
+		// </view>
+		
+		
+		
+	}
+</style>

+ 122 - 0
pages/content/h5-list.vue

@@ -0,0 +1,122 @@
+<template>
+	<view>
+		<headContent statusBarBg="#191A2E" bgColor="#191A2E">
+
+			<template #left>
+				<reverse-back iconColor="#fff" />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					{{ title }}
+				</view>
+			</template>
+			<template #right>
+				<closeIocn iconColor="#fff" />
+			</template>
+		</headContent>
+		<view class="new-content">
+			<template v-for="(item , index) in ContentList">
+				<view class="content-item" @click.syop="readArticle(item.id)">
+					<text class="item-lable hide_1">{{ item.title }}</text>
+					<text class="item-icon iconfont">&#xe88e;</text>
+				</view>
+			</template>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		Api_getNewDetail,
+		Api_getNewsList
+	} from "@/api/index.js"
+	export default {
+		name: 'article-details',
+		data() {
+			return {
+				cids: [
+					0,
+					19,
+					102
+				],
+				title: '',
+				cidIndex: 0,
+				ContentList: [],
+			};
+		},
+		onLoad(opt) {
+			this.cidIndex = opt?.id;
+			switch (this.cidIndex) {
+				case '1':
+				case 1:
+					this.title = "关于我们";
+					break;
+				case '2':
+				case 2:
+					this.title = "活动中心";
+					break;
+				default:
+					this.title = "";
+			}
+			this.getNewDetail()
+		},
+		mounted() {
+
+		},
+		methods: {
+			getNewDetail() {
+				if (this.cidIndex) {
+					Api_getNewsList({
+						c_id: this.cids[this.cidIndex],
+						limit: 1000
+					}).then(res => {
+						this.ContentList = res.list || [];
+
+					})
+				}
+			},
+			readArticle(id) {
+				uni.navigateTo({
+					url: `/pages/content/article-details?id=${id}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.haed-title {
+		color: #fff !important;
+	}
+
+	.new-content {
+		.content-item {
+			width: 100%;
+			height: 100rpx;
+			padding: 0 40rpx;
+			border-bottom: 1rpx solid $border-color;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.item-lable {
+				width: 1px;
+				flex: 1;
+				font-size: 34rpx;
+				font-weight: 600;
+			}
+
+			.item-icon {
+				flex-shrink: 0;
+				font-size: 40rpx;
+				color: $btnBgColor;
+				font-weight: bold;
+			}
+
+			// <view class="content-item">
+			// 	<text class="item-lable">{{ item.title }}</text>
+			// 	<text class="item-icon iconfont">&#xe88e;</text>
+			// </view>
+		}
+	}
+</style>

+ 83 - 0
pages/content/language.vue

@@ -0,0 +1,83 @@
+<template>
+	<view>
+		<!-- 头部 -->
+		<headContent>
+			<template #left>
+				<reverse-back />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					语言切换
+				</view>
+			</template>
+		</headContent>
+
+		<gap />
+		<view class="set-list">
+			<view class="set-item">
+				<text>简体中文</text>
+				<view class="set-moer iconfont">&#xe6c5;</view>
+			</view>
+			<view class="set-item">
+				<text>English</text>
+				<view class="set-moer">
+
+				</view>
+			</view>
+			<view class="set-item">
+				<text>한국어</text>
+				<view class="set-moer">
+
+				</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'language',
+
+
+
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.set-list {
+		width: 100%;
+		padding: 0 $pages-padding;
+
+		.set-item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			height: 90rpx;
+			width: 100%;
+			border-bottom: 1rpx solid $border-color;
+			font-size: 24rpx;
+			color: #0f0f0f;
+
+			text {
+				flex-shrink: 0;
+			}
+
+			.set-moer {
+				flex-shrink: 0;
+				display: flex;
+				align-items: center;
+				color: $Theme-Color;
+
+			}
+		}
+	}
+</style>

+ 13 - 16
pages/content/mine.vue

@@ -68,7 +68,7 @@
 					<text class="more-icon iconfont">&#xe88e;</text>
 				</view>
 			</view>
-			<view v-show="showMuen" class="mine-muen-item">
+			<view v-show="showMuen" class="mine-muen-item" @click.stop="openActivityCenter()">
 				<view class="muen-content">
 					<image class="muen-icon" src="@/static/logo.png" mode="aspectFit" />
 					<text class="muen-text">活动中心</text>
@@ -124,15 +124,6 @@
 		</view>
 		<gap />
 		<view class="mine-muen">
-			<!-- <view class="mine-muen-item">
-				<view class="muen-content">
-					<image class="muen-icon" src="../../static/logo.png" mode="aspectFit" />
-					<text class="muen-text">消息中心</text>
-				</view>
-				<view class="muen-more">
-					<text class="more-icon iconfont">&#xe88e;</text>
-				</view>
-			</view> -->
 			<view class="mine-muen-item" @click.stop="getService()">
 				<view class="muen-content">
 					<image class="muen-icon" src="../../static/logo.png" mode="aspectFit" />
@@ -159,8 +150,6 @@
 		
 		<!-- 邀请 -->
 		<sharePage ref="sharePageRef" :tabBar="false"/>
-		<!--  -->
-		
 	</view>
 </template>
 
@@ -245,9 +234,7 @@
 			},
 			// 关于我们
 			getAboutUs(){
-				uni.navigateTo({
-					url: `/pages/content/article-details?id=187`
-				})
+				this.getSinglePage(1)
 			},
 			// 安全退出
 			retreatFromLogin(){
@@ -258,8 +245,18 @@
 				uni.navigateTo({
 					url:'/pages/content/address'
 				})
-			}
+			},
+			// getAboutUs
+			openActivityCenter(){
+				this.getSinglePage(2)
+			},
 			
+			getSinglePage(id){
+			
+				uni.navigateTo({
+					url: `/pages/content/h5-list?id=${id}`
+				})
+			}
 			
 		}
 	}

+ 287 - 0
pages/content/money-password.vue

@@ -0,0 +1,287 @@
+<template>
+	<view>
+		<headContent borderBottom>
+			<template #left>
+				<reverse-back />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					设置资金密码
+				</view>
+			</template>
+		</headContent>
+
+
+
+		<view class="form-box">
+			<form class="form-content">
+				<view class="form-item ">
+					<view class="form-item-lable">新密码</view>
+					<input class="form-item-input" v-model="formData.newPassword" :maxlength="maxlength"
+						placeholder-class="form-item-place" :type="showNewPsd ? 'text' : 'password'"
+						placeholder="请输入新密码">
+					<view class="form-item-icon" @click.stop="showNewPsd = !showNewPsd">
+						<text v-show="showNewPsd" class="iconfont">&#xe663;</text>
+						<text v-show="!showNewPsd" class="iconfont">&#xe664;</text>
+					</view>
+				</view>
+				<view class="err-hint">{{ formError.newPsdErr }}</view>
+				<view class="form-item ">
+					<view class="form-item-lable">确认密码</view>
+					<input class="form-item-input" v-model="formData.confirmPassword" :maxlength="maxlength"
+						placeholder-class="form-item-place" :type="showConfirmPsd ? 'text' : 'password'"
+						placeholder="请再次输入新密码">
+					<view class="form-item-icon" @click.stop="showConfirmPsd = !showConfirmPsd">
+						<text v-show="showConfirmPsd" class="iconfont">&#xe663;</text>
+						<text v-show="!showConfirmPsd" class="iconfont">&#xe664;</text>
+					</view>
+				</view>
+				<view class="err-hint">{{ formError.confirmPsdErr }}</view>
+			</form>
+			<view class="reminder">
+				资金密码将用于转账、法币交易、红包、质押借币等功能,请妥善保管,避免泄露!
+			</view>
+			<view :class="['form-btn' , deblockingSubmitBtn() ? 'active-form-btn' : '' ]"
+				@click.stop="SubmitPassWord()">
+				确定
+			</view>
+		</view>
+
+		<!-- <unopen ref="unopenRef" :content="changeHint" /> -->
+	</view>
+</template>
+
+<script>
+	import {
+		validPassword
+	} from "@/utils/validate.js"
+	import {
+		Api_setPassword
+	} from "@/api/index.js"
+	import {
+		Way_getUserInfo
+	} from "@/utils/common-request.js"
+	export default {
+		name: 'money-password',
+		data() {
+			return {
+				account: null,
+				maxlength: 20,
+				showPwd: false,
+				showNewPsd: false,
+				showConfirmPsd: false,
+				formData: {
+
+					newPassword: '',
+					confirmPassword: ''
+				},
+				formError: {
+
+					newPsdErr: '',
+					confirmPsdErr: ''
+				}
+			};
+		},
+		watch: {
+
+			'formData.newPassword'(newPsd, oldPsd) {
+				this.validateField('newPassword')
+			},
+			'formData.confirmPassword'(newPsd, oldPsd) {
+				this.validateField('confirmPassword')
+			}
+		},
+		onShow() {
+			// this.getUserInfo();
+			// this.$refs.unopenRef.open();
+		},
+		methods: {
+			getUserInfo() {
+				Way_getUserInfo().then(res => {
+					this.account = res;
+				})
+			},
+			validateField(key) {
+				let validateStatus = false
+				switch (key) {
+
+					case 'newPassword':
+						if (!this.formData[key].trim()) {
+							this.formError.newPsdErr = '请输入新密码'
+							validateStatus = false;
+						} else if (!validPassword(this.formData[key])) {
+							this.formError.newPsdErr = '密码长度为8-20位字符,必须同时包含大写字母、小写字母和数字';
+							validateStatus = false;
+						} else {
+							this.formError.newPsdErr = '';
+							validateStatus = true;
+						};
+						break;
+					case 'confirmPassword':
+						if (!this.formData[key].trim()) {
+							this.formError.confirmPsdErr = '请再次输入新密码';
+							validateStatus = false;
+						} else if (this.formData[key] !== this.formData.newPassword) {
+							this.formError.confirmPsdErr = '确认密码和新密码输入不一致';
+							validateStatus = false;
+						} else {
+							this.formError.confirmPsdErr = '';
+							validateStatus = true;
+						}
+						break;
+					default:
+						validateStatus = false
+
+				};
+				return validateStatus;
+			},
+			confirmValidateField() {
+				return new Promise((resolve, reject) => {
+					let validateStatus = true;
+					for (let key in this.formData) {
+						console.log('SubmitPassWord', key)
+						if (validateStatus) {
+							validateStatus = this.validateField(key)
+						} else {
+							this.validateField(key)
+						}
+					}
+
+
+					if (validateStatus) {
+						resolve()
+					} else {
+						reject()
+					};
+				})
+
+			},
+
+			deblockingSubmitBtn() {
+				for (let key in this.formData) {
+					if (this.formData[key] === '') {
+						return false
+						break;
+					}
+				};
+				return true
+			},
+			SubmitPassWord() {
+
+				this.confirmValidateField().then(res => {
+					uni.showLoading({
+						title: '修改中',
+						mask: true
+					})
+					const obj = {
+						account: this.account?.account_number,
+						password: this.formData.newPassword,
+						repassword: this.formData.newPassword
+					}
+
+					// Api_setPassword(obj).then(res => {
+					// 	setTimeout(() => {
+							// uni.navigateBack({
+							// 	delta: 1
+							// })
+					// 	}, 501)
+					// }).catch(err => {}).finally(() => {
+					// 	setTimeout(() => {
+					// 		uni.hideLoading()
+					// 	}, 500)
+					// })
+
+
+				})
+
+
+			}
+
+
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.reminder {
+		font-size: 26rpx;
+		display: flex;
+		align-items: center;
+		color: $Theme-Color;
+		padding: 20rpx 0;
+	}
+
+	.form-box {
+		width: 100%;
+		padding: 0 $pages-padding;
+
+		.form-content {
+			width: 100%;
+
+			.form-item {
+				width: 100%;
+				height: 80rpx;
+				display: flex;
+				align-items: center;
+				font-size: 28rpx;
+				border-bottom: 1rpx solid $border-color;
+
+				.form-item-lable {
+					width: 180rpx;
+					font-weight: bold;
+				}
+
+				.form-item-input {
+					font-size: 28rpx;
+					flex: 1;
+					height: 100%;
+					border: none;
+				}
+
+				.form-item-place {
+					font-size: 28rpx;
+					color: #ccc;
+				}
+
+				.form-item-icon {
+					width: 50rpx;
+					height: 100%;
+					display: flex;
+					justify-content: flex-end;
+					align-items: center;
+
+					.iconfont {
+						font-size: 26rpx;
+					}
+				}
+			}
+
+			.err-hint {
+				width: 100%;
+				min-height: 50rpx;
+				font-size: 26rpx;
+				color: red;
+				line-height: 1.2;
+				padding-top: 10rpx;
+			}
+		}
+
+		.form-btn {
+			width: 100%;
+			background-color: #ccc;
+			height: 90rpx;
+			margin-top: 20rpx;
+			border-radius: 10rpx;
+			text-align: center;
+			line-height: 90rpx;
+			color: #fff;
+			letter-spacing: 1px;
+			font-size: 28rpx;
+		}
+
+		.active-form-btn {
+			background-color: $Theme-Color ;
+		}
+	}
+</style>

+ 54 - 18
pages/content/safety-set.vue

@@ -25,19 +25,28 @@
 					<text class="more-icon iconfont">&#xe88e;</text>
 				</view>
 			</view>
-			<view class="safety-set-item">
-				<text class="safety-set-lable">邮箱</text>
+			<view class="safety-set-item" @click.stop="bindContactAccount(2)">
+				<text class="safety-set-lable">邮箱 {{ userInfo.email }}</text>
 				<view class="safety-set-more">
-					<text class="more-lable active-more-lable">已绑定</text>
-					<text v-if="true" class="more-icon iconfont">&#xe88e;</text>
-					<text v-else class="more-icon iconfont"></text>
+					<template v-if="userInfo && userInfo.email">
+						<text class="more-lable active-more-lable">已绑定</text>
+					</template>
+					<template v-else>
+						<text class="more-lable">绑定</text>
+						<text  class="more-icon iconfont">&#xe88e;</text>
+					</template>
 				</view>
 			</view>
-			<view class="safety-set-item">
+			<view class="safety-set-item" @click.stop="bindContactAccount(1)">
 				<text class="safety-set-lable">手机</text>
 				<view class="safety-set-more">
-					<text class="more-lable">绑定</text>
-					<text class="more-icon iconfont">&#xe88e;</text>
+					<template v-if="userInfo && userInfo.phone">
+						<text class="more-lable active-more-lable">已绑定</text>
+					</template>
+					<template v-else>
+						<text class="more-lable">绑定</text>
+						<text  class="more-icon iconfont">&#xe88e;</text>
+					</template>
 				</view>
 			</view>
 		</view>
@@ -51,7 +60,7 @@
 					<text class="more-icon iconfont">&#xe88e;</text>
 				</view>
 			</view>
-			<view class="safety-set-item ">
+			<view class="safety-set-item " @click.stop="setMoneyPassword()">
 				<text class="safety-set-lable">资金密码{法币、转账}</text>
 				<view class="safety-set-more">
 					<text class="more-lable">去设置</text>
@@ -63,17 +72,39 @@
 </template>
 
 <script>
+	import {
+		Way_getUserInfo
+	} from "@/utils/common-request.js"
 	export default {
 		name: 'safety-set',
 		data() {
 			return {
-
+				userInfo:{}
 			};
 		},
-		methods:{
-			changePassword(){
+		onShow() {
+			this.getUserInfo()
+		},
+		methods: {
+			getUserInfo() {
+				Way_getUserInfo().then(res => {
+					this.userInfo = res
+				})
+			},
+			changePassword() {
+				uni.navigateTo({
+					url: '/pages/content/change-password'
+				})
+			},
+			bindContactAccount(type) {
+				uni.navigateTo({
+					url: `/pages/content/bind?type=${type}`
+				})
+			},
+			
+			setMoneyPassword(){
 				uni.navigateTo({
-					url:'/pages/content/change-password'
+					url:'/pages/content/money-password'
 				})
 			}
 		}
@@ -99,23 +130,28 @@
 			}
 
 			border-top: 1rpx solid $border-color;
-			.safety-set-more{
+
+			.safety-set-more {
 				flex-shrink: 0;
 				display: flex;
 				align-items: center;
-				.more-lable{
-					color:$Theme-Color;
+
+				.more-lable {
+					color: $Theme-Color;
 				}
-				.active-more-lable{
+
+				.active-more-lable {
 					color: #ccc;
 				}
-				.more-icon{
+
+				.more-icon {
 					width: 32rpx;
 					height: 32rpx;
 					color: #ccc;
 					font-size: 32rpx;
 				}
 			}
+
 			// <view class="safety-set-item">
 			// 	<text class="safety-set-lable">邮箱</text>
 			// 	<view class="safety-set-more">

+ 3 - 0
pages/content/select-currency.vue

@@ -72,6 +72,9 @@
 					case 'recharge':
 						path = 'pages/content/top-up';
 						break;
+					case 'withdraw':
+						path = 'pages/content/top-up';
+						break;
 
 
 

+ 19 - 5
pages/content/setting.vue

@@ -14,14 +14,14 @@
 
 		<gap />
 		<view class="set-list">
-			<view class="set-item">
+			<view class="set-item" @click.stop="setLanguage()">
 				<text>语言切换</text>
 				<view class="set-moer">
 					<text class="set-moer-text">简体中文</text>
 					<text class="set-moer-icon iconfont">&#xe88e;</text>
 				</view>
 			</view>
-			<view class="set-item">
+			<view class="set-item" @click.stop="setDiagnose()">
 				<text>网络检查</text>
 				<view class="set-moer">
 					<text class="set-moer-icon iconfont">&#xe88e;</text>
@@ -36,7 +36,7 @@
 			</view>
 		</view>
 
-		<setting-color ref="settingColorRef"/>
+		<setting-color ref="settingColorRef" />
 	</view>
 </template>
 
@@ -61,12 +61,26 @@
 				stocksColorObj: this.$stocksColorObj,
 			};
 		},
-		methods:{
+		methods: {
 			// 修改股票颜色
-			selectStocksColor(){
+			selectStocksColor() {
 				this.$nextTick(() => {
 					this.$refs.settingColorRef.open();
 				})
+			},
+
+			// 网络检测
+			setDiagnose() {
+				uni.navigateTo({
+					url: '/pages/content/diagnose'
+				})
+			},
+			
+			// 语言切换
+			setLanguage() {
+				uni.navigateTo({
+					url: '/pages/content/language'
+				})
 			}
 		}
 	}

+ 290 - 0
pages/content/shortcut-buy.vue

@@ -0,0 +1,290 @@
+<template>
+	<view>
+		<!-- 头部 -->
+		<headContent borderBottom>
+			<template #left>
+				<reverse-back />
+			</template>
+			<template #content>
+				<view class="haed-title">
+					法币交易
+				</view>
+			</template>
+		</headContent>
+
+		<view class="lable-title">
+			<text @click.stop="type = 1" :class="['title-item' , type === 1 ? 'active-title-item' : '']">我要购买</text>
+			<text @click.stop="type = 2" :class="['title-item' , type === 2 ? 'active-title-item' : '']">我要出售</text>
+		</view>
+
+		<view class="content-box">
+			<view class="currency-type">
+				<image class="currency-icon" src="@/static/logo.png" mode="aspectFit"></image>
+				<text class="currency-text">USDT</text>
+			</view>
+			<template v-if="type === 1">
+				<view class="type-lable">
+					<view class="type-lable-name">购买{{ buy.text }}</view>
+				</view>
+				<view class="type-input-box">
+					<input class="type-input" v-model="buy.nums" />
+					<text class="type-units">{{ buy.units }}</text>
+				</view>
+				<view class="switch-type">
+					<view class="switch-refer">
+						参考单价:<text>--</text>CNY/USDT
+					</view>
+					<view class="switch-btn" @click.stop="buy.buyType == 1 ? buy.buyType = 2 : buy.buyType = 1">
+						<text class="iconfont">&#xe607;</text>
+						<!-- {{ setText(buy.buyType) }} -->
+						<text class="switch-btn-text">按{{ buy.text }}出售</text>
+					</view>
+				</view>
+
+				<view :class="['submit-btn' , buy.nums ? 'active-submit-btn' : '']">
+					立即购买
+				</view>
+ 
+			</template>
+			<template v-if="type === 2">
+				<view class="type-lable">
+					<view class="type-lable-name">出售{{ sell.text }}</view>
+					<view class="type-lable-nums">
+						<text class="lable-nums-text">可出售{{ sell.text }}:</text>
+						<text class="lable-nums">{{ sell.usable }} USDT</text>
+					</view>
+				</view>
+				<view class="type-input-box">
+					<input class="type-input" v-model="sell.nums" />
+					<text class="type-units">{{ sell.units }}</text>
+				</view>
+				<view class="switch-type">
+					<view class="switch-refer">
+						参考单价:<text>--</text>CNY/USDT
+					</view>
+					<view class="switch-btn"  @click.stop="sell.sellType == 1 ? sell.sellType = 2 : sell.sellType = 1">
+						<text class="iconfont">&#xe607;</text>
+						<text class="switch-btn-text">按{{ sell.text }}出售</text>
+					</view>
+				</view>
+			
+				<view class="submit-btn">
+					立即出售
+				</view>
+			
+				<view class="hint-text">
+					温馨提示:由于时间、行情等因素,可能无法为您匹配到最优的出售订单,请知悉。
+				</view>
+			</template>
+		</view>
+
+
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'shortcut-buy',
+		data() {
+			return {
+				type: 1,
+				buy: {
+					buyType: 1,
+					text:'数量',
+					units: 'CNY',
+					nums: ''
+				},
+				sell: {
+					usable: '0.0000',
+					sellType: 1,
+					text:'数量',
+					units: 'CNY',
+					nums: ''
+				},
+			};
+		},
+		watch:{
+			'buy.buyType'(newType){
+				if(newType === 1){
+					this.buy.text = '数量';
+					this.buy.units = 'CNY';
+				}
+				if(newType === 2){
+					this.buy.text = '金额';
+					this.buy.units = 'USDT';
+				}
+			},
+			'sell.sellType'(newType){
+				if(newType === 1){
+					this.sell.text = '数量';
+					this.sell.units = 'CNY';
+				}
+				if(newType === 2){
+					this.sell.text = '金额';
+					this.sell.units = 'USDT';
+				}
+			}
+		},
+		computed:{
+			// setText(){
+			// 	return function(type){
+			// 		console.log('buy.units' , this.buy.units)
+			// 		return  type == 1 ? '数量' : '金额'
+			// 	}
+			// }
+		},
+		mounted() {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.lable-title {
+		width: 100%;
+		display: flex;
+		align-items: stretch;
+		padding: 0 100rpx;
+		height: 100rpx;
+		justify-content: space-between;
+		border-bottom: 1rpx solid $border-color2;
+
+		.title-item {
+			line-height: 100rpx;
+			font-size: 28rpx;
+		}
+
+		.active-title-item {
+			color: $Theme-Color;
+			position: relative;
+
+			&::before {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				width: 42rpx;
+				height: 8rpx;
+				border-radius: 8rpx;
+				background-color: $Theme-Color;
+				transform: translateX(-50%);
+			}
+		}
+	}
+
+	.content-box {
+		padding: 0 $pages-padding;
+
+		.currency-type {
+			width: 100%;
+			padding: 30rpx 0 50rpx;
+			display: flex;
+			align-items: center;
+
+			.currency-icon {
+				width: 36rpx;
+				height: 36rpx;
+				border-radius: 50%;
+			}
+
+			.currency-text {
+				padding-left: 7px;
+				font-size: 26rpx;
+				font-weight: bold;
+			}
+		}
+
+		.type-lable {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			font-size: 26rpx;
+
+			.type-lable-name {
+				font-weight: bold;
+			}
+
+			.type-lable-nums {
+				color: $SizeColor;
+
+				.lable-nums-text {
+					border-bottom: 1rpx dashed $SizeColor;
+				}
+
+				.lable-nums {
+					color: $Theme-Color;
+				}
+			}
+		}
+
+		.type-input-box {
+			padding-top: 50rpx;
+			width: 100%;
+			display: flex;
+			align-items: stretch;
+			border-bottom: 1rpx solid $border-color4;
+			font-weight: bold;
+
+			.type-input {
+				flex: 1;
+				font-size: 24rpx;
+			}
+
+			.type-units {
+				flex-shrink: 0;
+				font-size: 26rpx;
+			}
+		}
+ 
+		.switch-type {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			font-size: 24rpx;
+			color: $SizeColor;
+			padding-top: 40rpx;
+
+			.switch-refer {
+				text {
+					color: $Theme-Color;
+				}
+			}
+
+			.switch-btn {
+				display: flex;
+				align-items: center;
+				color: $Theme-Color;
+
+				.iconfont {
+					font-size: 24rpx;
+					transform: rotateY(180deg);
+					margin-right: 3rpx;
+				}
+			}
+		}
+
+		.submit-btn {
+			width: 100%;
+			height: 90rpx;
+			line-height: 90rpx;
+			background-color: $btnBgColor;
+			width: 100%;
+			text-align: center;
+			color: #fff;
+			font-size: 28rpx;
+			border-radius: 10rpx;
+			margin-top: 80rpx;
+			font-weight: bold;
+		}
+		.active-submit-btn{
+			background-color: $Theme-Color;
+		}
+		.hint-text{
+			width: 100%;
+			font-size: 24rpx;
+			color: $SizeColor;
+			padding-top: 20rpx;
+		}
+
+	}
+</style>

+ 2 - 2
pages/contract/index.vue

@@ -34,7 +34,7 @@
 		components:{notarize , sustainability , grants},
 		data() {
 			return {
-				contractIndex:2,
+				contractIndex:0,
 				contractArr:[
 					'永续合约',
 					'快捷合约',
@@ -50,7 +50,7 @@
 	.navigation-box {
 		width: 100%;
 		height: 100%;
-		padding-bottom: 11rpx;
+		padding:0 $pages-padding 11rpx;
 		display: flex;
 		align-items: flex-end;
 

+ 1 - 0
pages/exchange/index.vue

@@ -170,6 +170,7 @@
 			},
 			// 提交预览
 			submitPreview(){
+				return false
 				const obj = {
 					l_currency_id: this.active.left.id,
 					r_currency_id: this.active.right.id,

+ 34 - 17
pages/index/index.vue

@@ -27,17 +27,14 @@
 		<usdt :usdtList="usdtList"></usdt>
 
 		<view style="width: 100%;height: 8rpx;"></view>
-
+		<gap />
 		<!-- 快捷买币 -->
 		<shortcut></shortcut>
 
-		<view style="width: 100%;height: 8rpx;"></view>
+		<gap />
 		<!-- 快捷菜单 -->
 		<navMuen></navMuen>
 
-
-		<view style="width: 100%;height: 8rpx;"></view>
-
 		<!-- 自选 / 市场 -->
 		<market :market="quotationNew"></market>
 
@@ -79,7 +76,8 @@
 				title: 'Hello',
 				BannerList: [],
 				Announcement: [],
-				quotationNew: []
+				quotationNew: [],
+				refreshStatus: false,
 			}
 		},
 		computed: {
@@ -91,15 +89,9 @@
 			quotationNew: {
 				handler(newArr) {
 					this.usdtList = [];
-					if (newArr && newArr[0].quotation.length > 0) {
-						for (let i = 0; i < newArr[0].quotation.length; i++) {
-							if (i < 3) {
-								this.usdtList.push(newArr[0].quotation[i])
-							} else {
-								break;
-							}
-						};
-						console.log('this.usdtList=', this.usdtList)
+					if (newArr && newArr.length > 0) {
+						const nums = newArr.length > 3 ? 3 : newArr.length;
+						this.usdtList = newArr.slice(0, nums);
 					} else {
 						this.usdtList = []
 					}
@@ -110,7 +102,14 @@
 		onLoad() {
 			this.getBanner();
 			this.getAnnouncement();
-			this.getQuotationNew()
+		},
+		onShow() {
+			this.refreshStatus = true;
+			this.getQuotationNew();
+		},
+		onHide() {
+			this.refreshStatus = false;
+			console.log('00000' , this.refreshStatus)
 		},
 		methods: {
 			openShare() {
@@ -140,10 +139,28 @@
 			// 获取行情 / 首页推荐
 			getQuotationNew() {
 				Api_getQuotationNew().then(res => {
-					this.quotationNew = res || [];
+					if (res && res.length > 0) {
+						this.quotationNew = res.find((item) => item.name == 'USDT').quotation || [];
+					} else {
+						this.quotationNew = []
+					}
 				}).catch(err => {
 					this.quotationNew = [];
+				}).finally(() => {
+					setTimeout(() => {
+						if (this.refreshStatus) {
+							this.getQuotationNew()
+						}
+					}, 3000)
 				})
+			},
+			clearInt() {
+				try {
+					clearInterval(this.timeInterval);
+				} catch (e) {
+					//TODO handle the exception
+				}
+				this.timeInterval = null;
 			}
 		}
 	}

+ 49 - 16
pages/index/modules/market.vue

@@ -1,5 +1,7 @@
 <template>
 	<view class="market-box">
+
+		<gap height="10rpx" />
 		<view class="market-tab">
 			<view v-for="(item , index) in marketTab"
 				:class="['market-tab-item' , index === marketTabIndex ? 'active-tab-item' : '' ]"
@@ -7,48 +9,80 @@
 				{{ item }}
 			</view>
 		</view>
-		<swiper :duration="150" class="market-content" :current="marketTabIndex">
+		<swiper :duration="150" class="market-content" :style="{'height': scrollHeight + 'px' }" :current="marketTabIndex">
 			<swiper-item>
-				<scroll-view class="market-scroll" scroll-y>
-					<add-optional ref="addOptionalRef" />
+				<scroll-view :style="{'height': scrollHeight + 'px' }" class="market-scroll" scroll-y>
+					<!-- <add-optional ref="addOptionalRef" /> -->
+					<marketplace ref="optionalRef" :marketplaceList="optional" />
 				</scroll-view>
 			</swiper-item>
 			<swiper-item>
-				<scroll-view class="market-scroll" scroll-y>
-					<marketplace ref="marketplaceRef" :marketplaceList="market"/>
+				<scroll-view :style="{'height': scrollHeight + 'px' }" class="market-scroll" scroll-y>
+					<marketplace ref="marketplaceRef" :marketplaceList="market" />
 				</scroll-view>
 			</swiper-item>
 		</swiper>
 
 	</view>
 </template>
-
+<!-- array.sort(function (x,y) {
+      return x-y;
+    }); -->
 <script>
+	import {
+		mapGetters
+	} from 'vuex'
 	export default {
 		name: "marketModules",
-		props:{
-			market:{
-				type:Array,
-				default:() => []
+		props: {
+			market: {
+				type: Array,
+				default: () => []
 			}
 		},
+
+		computed: {
+			...mapGetters([
+				'PageContentHeight',
+				'tabBarHeight'
+			]),
+		},
 		data() {
 			return {
+				scrollHeight: 0,
 				marketTabIndex: 1,
 				marketTab: [
 					'自选',
 					'市场'
-				]
+				],
+				optional:[]
 			};
-		}
+		},
+
+		watch: {
+			market:{
+				handler(newArr){
+					if(newArr && newArr.length > 0){
+						this.optional = newArr.slice(0,6)
+					}
+				},
+				immediate:true,
+				deep:true
+			},
+			PageContentHeight: {
+				handler(newH) {
+					this.scrollHeight = newH - uni.upx2px(114) - uni.upx2px(10) - this.tabBarHeight;
+					
+				},
+				immediate: true
+			}
+		},
 	}
 </script>
 
 <style lang="scss" scoped>
 	.market-box {
 		width: 100%;
-		height: 90vh;
-		background-color: $modules-box-bg;
 
 		.market-tab {
 			padding: 0 $pages-padding ;
@@ -92,11 +126,10 @@
 
 		.market-content {
 			width: 100%;
-			height: calc(100% - 104rpx);
+
 
 			.market-scroll {
 				width: 100%;
-				height: 100%;
 			}
 		}
 	}

+ 41 - 14
pages/index/modules/shortcut.vue

@@ -1,12 +1,14 @@
 <template>
-	<view class="shortcut-box">
+	<view class="shortcut-box" @click.stop="goShortcutBuy()">
 		<image class="shortcut-icon" src="../../../static/logo.png" mode=""></image>
 		<view class="shortcut-content">
 			<text class="shortcut-content-title">快捷买币</text>
 			<text class="shortcut-content-hint">支持一键快速购买USDT</text>
 		</view>
 		<view class="shortcut-more">
-			
+			<view class="shortcut-more-icon iconfont">
+				&#xe604;
+			</view>
 		</view>
 	</view>
 </template>
@@ -18,6 +20,13 @@
 			return {
 
 			};
+		},
+		methods:{
+			goShortcutBuy(){
+				uni.navigateTo({
+					url:'/pages/content/shortcut-buy'
+				})
+			}
 		}
 	}
 </script>
@@ -27,41 +36,59 @@
 		width: 100%;
 		min-height: 120rpx;
 		background-color: $modules-box-bg;
-		padding: 18rpx $pages-padding ;
+		padding: 14rpx 60rpx 14rpx $pages-padding ;
 		display: flex;
 		align-items: center;
-		
-		.shortcut-icon{
+
+		.shortcut-icon {
 			width: 63rpx;
 			height: 83rpx;
 			flex-shrink: 0;
 		}
-		.shortcut-more{
+
+		.shortcut-more {
 			width: 81rpx;
 			height: 81rpx;
 			flex-shrink: 0;
-			background: linear-gradient(90deg,#ffffff 23%, #d4f1e5);
+			background: linear-gradient(90deg, #ffffff 23%, #d4f1e5);
 			border-radius: 50%;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			.shortcut-more-icon {
+				width: 40rpx;
+				height: 40rpx;
+				border-radius: 50%;
+				background-color: $Theme-Color;
+				font-size: 26rpx;
+				line-height: 40rpx;
+				color: #ffffff;
+				transform: rotate(180deg);
+				text-align: right;
+			}
 		}
-		.shortcut-content{
+
+		.shortcut-content {
 			width: calc(100% - 63rpx - 81rpx);
 			padding-left: 35rpx;
 			display: flex;
 			flex-direction: column;
-			.shortcut-content-title{
-		 
+
+			.shortcut-content-title {
+
 				font-size: 30rpx;
 				font-family: PingFang SC, PingFang SC-Bold;
-				font-weight: 700; 
+				font-weight: 700;
 				color: #1a1a1a;
 				line-height: 38rpx;
 				letter-spacing: 0.6rpx;
 			}
-			.shortcut-content-hint{
-	 
+
+			.shortcut-content-hint {
+
 				font-size: 24rpx;
 				font-family: PingFang SC, PingFang SC-Regular;
-				font-weight: 400; 
+				font-weight: 400;
 				color: #808080;
 				line-height: 38rpx;
 				letter-spacing: 0.48rpx;

+ 24 - 6
pages/login/area-code.vue

@@ -12,15 +12,25 @@
 		</headContent>
 		<!-- :style="{'top': searchHeight + 'px'}" -->
 		<view class="search-box">
-
+ 
 		</view>
 		<view class="scroll-box" :style="{'height':scrollViewHeight + 'px'}">
 			<scroll-view scroll-y="true" class="scroll-Y" scroll-with-animation :scroll-into-view="scrollIntoView">
+				<view v-if="Areahot && Areahot.length > 0">
+					<text class="search-letter">热门国家</text>
+					<view class="area-list">
+						<view class="area-item" v-for="(item , index) in Areahot" :key="`hot_${index}`"
+							@click.stop="activeArea(item)">
+							<text>{{item.name}}</text>
+							<text>+{{item.area_code}}</text>
+						</view>
+					</view>
+				</view>
 				<block v-for="(val , key , index) in AreaList">
 					<view :id="key" v-if="val && val.length > 0">
 						<text class="search-letter">{{ key }}</text>
 						<view class="area-list">
-							<view class="area-item" v-for="item in val" :key="`area_${index}`"
+							<view class="area-item" v-for="(item , i) in val" :key="`area_${index}_${i}`"
 								@click.stop="activeArea(item)">
 								<text>{{item.name}}</text>
 								<text>+{{item.area_code}}</text>
@@ -58,7 +68,8 @@
 			return {
 				scrollIntoView: 'A',
 				scrollViewHeight: 0,
-				AreaList: []
+				AreaList: [],
+				Areahot:[]
 			};
 		},
 		computed: {
@@ -102,6 +113,7 @@
 				})
 			},
 			areaRank(areaList = []) {
+				const hot = []
 				const letters = {
 					'A': [],
 					'B': [],
@@ -133,16 +145,22 @@
 				}
 				if (areaList && areaList.length > 0) {
 					areaList.forEach(el => {
-						if (el.name) {
-							let initialLetter = el.name.slice(0, 1)
-							letters[initialLetter].push(el)
+				 
+						
+						if (el.groupby) {
+							// let initialLetter = el.name.slice(0, 1)
+							letters[el.groupby].push(el)
 						} else {
 							letters['#'].push(el)
 						}
+						if(el.order === 1){
+							hot.push(el)
+						}
 
 					})
 				};
 				this.AreaList = letters
+				this.Areahot = hot
 			}
 
 		}

+ 1 - 3
pages/login/modules/phone.vue

@@ -28,9 +28,7 @@
 	import {
 		reverseBack
 	} from "@/utils/common.js"
-	import {
-		Api_userLogin
-	} from "@/api/index.js"
+
 
 	export default {
 		props: {

+ 7 - 1
pages/login/register.vue

@@ -20,7 +20,7 @@
 					<text class="confirm-icon iconfont" v-show="readAgreement">&#xe6c5;</text>
 				</view>
 				<text>我已阅读并同意</text>
-				<text class="agreement-name">《用户协议》</text>
+				<text class="agreement-name" @click.stop="readAgreementText">《用户协议》</text>
 			</view>
 			<view class="form-btn" @click.stop="formSubmit">
 				下一步
@@ -64,6 +64,12 @@
 			};
 		},
 		methods: {
+			// 阅读协议
+			readAgreementText(){
+				uni.navigateTo({
+					url:'/pages/content/article-details?id=8'
+				})
+			},
 			setAreaCode(e) {
 				if (e) {
 					this.accounts.areaCode = e.area_code;

+ 2 - 6
pages/login/reset-pswd.vue

@@ -60,16 +60,12 @@
 					repassword: e.confirmPassword
 				}
 				Api_setPassword(obj).then(res => {
-					setTimeout(() => {
 						uni.showToast({
 							title: '重置成功',
 							icon: 'none'
 						})
-						setTimeout(() => {
-							uni.redirectTo({
-								url: '/pages/login/index'
-							});
-						}, 300)
+					setTimeout(() => {
+						reverseBack('pages/login/index')
 					}, 200)
 				}).catch(err => {}).finally(() => {
 					uni.hideLoading()

+ 45 - 14
pages/login/safety-verification.vue

@@ -13,23 +13,16 @@
 			<text class="login-title">{{ title }}验证</text>
 			<text class="login-content">验证码已发送至{{account}}</text>
 			<view class="form-item">
-				<input class="form-input" v-model="code" placeholder-class="form-input-place"
-					:placeholder="`请输入您的${title}`" />
+				<view v-if="this.title === '手机号'" class="form-lable" @click.stop="selectAreaCode()">
+					<text>+{{ areaCode }}</text><text class="form-lable-icon iconfont">&#xe601;</text>
+				</view>
+				<input class="form-input" v-model="code" placeholder-class="form-input-place" :placeholder="`请输入验证码`" />
 				<view class="form-code" @click.stop="getCode()">{{ codeText }}</view>
 			</view>
-			<view :class="['form-btn' , code ? '' : 'invalid-form-btn']" style="margin-top: 28rpx;"
+			<view :class="['form-btn' , getInfo() ? '' : 'invalid-form-btn']" style="margin-top: 28rpx;"
 				@click.stop="formSubmit">
 				下一步
 			</view>
-			<!-- 	<form class="login-form">
-				<view class="form-item">
-					<input class="form-input" placeholder-class="form-input-place" placeholder="请输入您的邮箱地址" />
-				</view>
-				<view class="form-btn" style="margin-top: 28rpx;" @click.stop="formSubmit">
-					下一步
-				</view>
-			</form> -->
-
 		</view>
 
 
@@ -53,6 +46,7 @@
 				type: 0,
 				account: '',
 				code: '',
+				areaCode: '',
 				codeText: '获取验证码',
 				timeInterval: null
 			};
@@ -64,7 +58,7 @@
 		watch: {
 			account: {
 				handler(newAccount) {
-					if (['@'].includes(newAccount)) {
+					if (newAccount.indexOf('@') >= 0 ) {
 						// 邮箱
 						this.title = '邮箱';
 					} else {
@@ -75,12 +69,41 @@
 				}
 			}
 		},
+
+		computed: {
+			getInfo() {
+				return () => {
+					let status = false
+					switch (this.title) {
+						case '邮箱':
+							status = this.code ? true : false;
+							break;
+						case '手机号':
+							status = this.code && this.areaCode ? true : false;
+							break;
+					}
+
+					return status
+				}
+			},
+
+		},
 		methods: {
+			selectAreaCode() {
+				uni.navigateTo({
+					url: '/pages/login/area-code'
+				})
+			},
+			setAreaCode(e) {
+				if (e) {
+					this.areaCode = e.area_code;
+				}
+			},
 			reversBackBtn() {
 				reverseBack()
 			},
 			getCode() {
-				if(this.codeText !=='获取验证码' ){
+				if (this.codeText !== '获取验证码') {
 					return false
 				}
 				let Api_ = '',
@@ -92,6 +115,7 @@
 				}
 				if (this.title === '手机号') {
 					Api_ = Api_getSmsSend;
+					obj.area_code = this.areaCode
 				}
 				if (Api_) {
 					Api_(obj).then(res => {
@@ -149,6 +173,13 @@
 		padding-bottom: 0 !important;
 	}
 
+	.form-lable {
+		min-width: 100rpx;
+		text-align: center;
+		padding:0 20rpx;
+		flex-shrink: 0;
+	}
+
 	.form-item {
 		width: 100%;
 		min-height: 100rpx;

+ 14 - 10
pages/login/submit-register.vue

@@ -63,21 +63,25 @@
 				const obj = {
 					type: this.type == 1 ? 'email' : 'mogile',
 					user_string: this.account,
-					invitationCode: this.invitationCode,
+					code: this.accountCode,
 					password: e.newPassword,
 					re_password: e.confirmPassword
 				}
+				if (this.invitationCode) {
+					obj.extension_code = this.invitationCode
+				}
 				Api_submitRegister(obj).then(res => {
+					uni.showToast({
+						title: '注册成功',
+						icon: 'none'
+					})
 					setTimeout(() => {
-						uni.showToast({
-							title: '注册成功',
-							icon: 'none'
-						})
-						setTimeout(() => {
-							uni.redirectTo({
-								url: '/pages/login/index'
-							});
-						}, 300)
+						reverseBack('pages/login/index')
+						// setTimeout(() => {
+						// 	uni.redirectTo({
+						// 		url: ''
+						// 	});
+						// }, 300)
 					}, 200)
 				}).catch(err => {}).finally(() => {
 					uni.hideLoading()

+ 63 - 34
pages/property/bill.vue

@@ -1,7 +1,7 @@
 <template>
-	<view class="pages-content">
+	<view class="pages-content" :rise-fall="stocksColor">
 		<!-- 头部 -->
-		<headContent>
+		<headContent borderBottom>
 			<template #left>
 				<reverse-back />
 			</template>
@@ -20,17 +20,17 @@
 				<uni-th class="table-title" align="right">{{ tableTh[pageType][2].lable }}</uni-th>
 			</uni-tr>
 			<!-- 表格数据行 -->
-			<uni-tr class="sss" v-for="item in tableData">
+			<uni-tr :class="['sss', $setColor(item.change)]" v-for="(item , index) in tableData" :key="`tb_${index}`">
 				<uni-td>
 					<view class="table-text-01">USDT</view>
-					<view class="table-text-02">2023-04-0108:00:13</view>
+					<view class="table-text-02">{{ $getData_(item.create_time) }}</view>
 				</uni-td>
 				<uni-td style="text-align: right;">
-					<view class="table-text-03">16.2761</view>
-					<view class="table-text-04">结算资金费率</view>
+					<view class="table-text-03 color">{{ item.change }}</view>
+					<view class="table-text-04">{{ item.memo }}</view>
 				</uni-td>
 				<uni-td style="text-align: right;">
-					<view class="table-text-05">29997.9123</view>
+					<view class="table-text-05">{{ item.after }}</view>
 
 				</uni-td>
 			</uni-tr>
@@ -41,14 +41,19 @@
 		<uni-load-more :status="moreStatus" v-show="tableData.length > 0 || moreStatus === 'loading' " />
 
 		<!-- 暂无数据 -->
-		<no-data v-show="tableData.length === 0 && moreStatus !== 'loading' " />
+		<no-data v-show="tableData.length === 0 && moreStatus === 'noMore' " />
 	</view>
 </template>
 
 <script>
 	import reverseBack from "@/components/headModules/reverse-back.vue"
 	import noData from "./modules/no-data.vue"
-	import { Api_getUserBill } from "@/api/index.js"
+	import {
+		Api_getUserBill
+	} from "@/api/index.js"
+	import {
+		mapGetters
+	} from 'vuex'
 	export default {
 		components: {
 			reverseBack,
@@ -57,7 +62,7 @@
 		data() {
 			return {
 				pageType: undefined,
-				moreStatus: 'more-loading', // 上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
+				moreStatus: '', // 上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
 				tableTh: [
 					//合约账户
 					[{
@@ -83,7 +88,7 @@
 							val: 'key'
 						},
 						{
-							lable: '状态',
+							lable: '余额',
 							val: 'key'
 						}
 					],
@@ -118,23 +123,36 @@
 				],
 
 
-				tableData: []
+				tableData: [],
+				page: 1,
 			};
 		},
 		onLoad(opt) {
 			this.pageType = opt?.type || undefined
-			console.log('opt = ', this.pageType)
 			// navigationArr: [
 			// 	'合约账户',
 			// 	'币币账户',
 			// 	'法币账户',
 			// 	'赠金账户'
 			// ]
-			this.getUserBill()
-		},
+			if (this.pageType) {
+				this.getUserBill()
+			} else {
+				this.moreStatus = 'noMore'
+			}
 
+		},
+		computed: {
+			...mapGetters([
+				'stocksColor'
+			]),
+		},
 		onReachBottom() {
 			console.log('页面触底')
+			if (!['noMore', 'loading'].includes(this.moreStatus)) {
+				this.page++;
+				this.getUserBill();
+			}
 		},
 		methods: {
 			getTitle(type) {
@@ -153,29 +171,36 @@
 						title = '用户账单';
 						break;
 					default:
-					title = '';
+						title = '';
 				}
 				return title
 			},
 			// 获取用户账单
-			getUserBill(){
+			getUserBill() {
 				// moreStatus: 'more-loading', // 上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
 				this.moreStatus = 'loading';
 				Api_getUserBill({
-					page:1,
-					limit:15,
-					currency:3,
-					type:this.pageType - 0 + 1,
+					page: this.page,
+					limit: 15,
+					currency: 3,
+					type: this.pageType - 0 + 1,
+					status: 4
+
 				}).then(res => {
-					this.tableData = res.list;
-					if(this.tableData.length >= res.count ){
-						this.moreStatus = 'more-loading';
-					}else{
-						this.moreStatus = 'loading';
+					this.tableData = this.tableData.concat(res.list);
+					if (this.tableData.length >= res.count) {
+						this.moreStatus = 'noMore';
+					} else {
+						this.moreStatus = 'more';
 					};
-					console.log('Api_getUserBill = ' , this.res)
 				}).catch(err => {
-					
+					if (this.page > 1) {
+						this.page = 1;
+						this.moreStatus = 'more';
+					} else {
+						this.tableData = [];
+						this.moreStatus = 'noMore';
+					}
 				})
 			}
 		}
@@ -197,7 +222,6 @@
 		}
 
 		.sss {
-
 			padding: 0 $pages-padding ;
 		}
 
@@ -230,7 +254,7 @@
 				padding: 25rpx 20rpx;
 				word-break: break-all;
 				white-space: pre-wrap;
-				border-bottom: 1rpx solid #f5f5f5;
+				border-bottom: 1rpx solid $border-color4;
 
 				&:last-child,
 				&:first-child {
@@ -240,7 +264,7 @@
 			}
 
 			.uni-table-th {
-				border-bottom: 2rpx solid #e6e6e6;
+				border-bottom: 2rpx solid $border-color4;
 
 				&:last-child {
 					padding-right: $pages-padding;
@@ -259,9 +283,14 @@
 			color: #1a1a1a;
 		}
 
+		.table-text-02,
+		.table-text-04 {
+			padding-top: 10rpx;
+		}
+
 		.table-text-01 {
 
-			font-size: 28rpx;
+			font-size: 26rpx;
 			font-family: PingFang SC, PingFang SC-Bold;
 			font-weight: 700;
 			color: #1a1a1a;
@@ -275,7 +304,7 @@
 		}
 
 		.table-text-03 {
-			font-size: 28rpx;
+			font-size: 24rpx;
 			font-family: PingFang SC, PingFang SC-Bold;
 			font-weight: 700;
 			color: #0abd76;
@@ -289,7 +318,7 @@
 		}
 
 		.table-text-05 {
-			font-size: 28rpx;
+			font-size: 24rpx;
 			font-family: PingFang SC, PingFang SC-Bold;
 			font-weight: 700;
 			color: #1a1a1a;

+ 1 - 7
pages/property/index.vue

@@ -57,7 +57,7 @@
 		},
 		data() {
 			return {
-				navigationIndex: 0,
+				navigationIndex: 3,
 				navigationArr: [
 					'合约账户',
 					'币币账户',
@@ -118,12 +118,6 @@
 </script>
 
 <style lang="scss" scoped>
-	.navigation-page {
-		background-color: #fff;
-		min-height: 100vh;
-
-		.content {}
-	}
 
 	.navigation-box {
 		padding: 0 $pages-padding;

+ 1 - 1
pages/property/modules/Bibi/index.vue

@@ -5,7 +5,7 @@
 				{{ bibiAccount.usdt_totle || '--'}}
 			</template>
 			<template #cardnums>
-				{{ bibiAccount.CNY || '--'}}
+				{{ bibiAccount.totle || '--'}}
 			</template>
 			<template #cardmuen>
 				<block v-for="(item , index ) in cardMuen">

+ 9 - 7
pages/property/modules/GiftMoney/index.vue

@@ -2,10 +2,12 @@
 	<view class="">
 		<card @updateShowMoneyStatus="(e) => showMoney = e">
 			<template #cardnum>
-				{{ GiftMoneyAccount.usdt_totle || '--'}}
+				0.0000
+				<!-- {{ GiftMoneyAccount.usdt_totle || '--'}} -->
 			</template>
 			<template #cardnums>
-				{{ GiftMoneyAccount.CNY || '--'}}
+				0.00
+				<!-- {{ GiftMoneyAccount.CNY || '--'}} -->
 			</template>
 			<template #cardmuen>
 				<block v-for="(item , index ) in cardMuen">
@@ -28,15 +30,15 @@
 				</uni-tr>
 				<!-- 表格数据行 -->
 				<uni-tr>
-					<uni-td>124.8028 USDT</uni-td>
-					<uni-td style="text-align: center;">100.0000 USDT</uni-td>
-					<uni-td style="text-align: right;">29997.9123</uni-td>
+					<uni-td>0.0000 USDT</uni-td>
+					<uni-td style="text-align: center;">0.0000 USDT</uni-td>
+					<uni-td style="text-align: right;">0.0000</uni-td>
 				</uni-tr>
 
 			</uni-table>
 			<view class="account-money">
 				<view class="money-item">
-					赠金账户 124.8028 USDT
+					赠金账户 0.0000 USDT
 				</view>
 				<view class="money-item">
 					盈利账户 0.0000 USDT
@@ -52,7 +54,7 @@
 					浮动盈亏
 				</view>
 				<view class="Profit-loss-value">
-					-1.8767 USDT
+					0.0000 USDT
 				</view>
 			</view>
 		</view>

+ 1 - 1
pages/property/modules/contract/index.vue

@@ -5,7 +5,7 @@
 				{{ contractAccount.usdt_totle || '--'}}
 			</template>
 			<template #cardnums>
-				{{ contractAccount.CNY || '--'}}
+				{{ contractAccount.totle || '--'}}
 			</template>
 			<template #cardmuen>
 				<block v-for="(item , index ) in cardMuen">

+ 1 - 1
pages/property/modules/legalTender/index.vue

@@ -5,7 +5,7 @@
 				{{ legalAccount.usdt_totle || '--'}}
 			</template>
 			<template #cardnums>
-				{{ legalAccount.CNY || '--'}}
+				{{ legalAccount.totle || '--'}}
 			</template>
 			<template #cardmuen>
 				<block v-for="(item , index ) in cardMuen">

+ 8 - 8
static/css/index.scss

@@ -5,19 +5,19 @@
 	.zhang{
 		// 绿涨
 		.color{
-			color:#06c174
+			color:#06c174 !important;
 		}
 		.bgcolor{
-			background-color: #06c174;
+			background-color: #06c174 !important;
 		}
 	}
 	.die{
 		// 红跌
 		.color{
-			color:red;
+			color:red !important;
 		}
 		.bgcolor{
-			background-color: red;
+			background-color: red !important;
 		}
 	}
 	
@@ -38,19 +38,19 @@
 	.zhang{
 		// 红涨
 		.color{
-			color:red;
+			color:red !important;
 		}
 		.bgcolor{
-			background-color: red;
+			background-color: red !important;
 		}
 	}
 	.die{
 		// 红跌
 		.color{
-			color:#06c174;
+			color:#06c174 !important;
 		}
 		.bgcolor{
-			background-color: #06c174;
+			background-color: #06c174 !important;
 		}
 	}
 }

+ 2 - 0
store/getters.js

@@ -5,6 +5,8 @@ const getters = {
 	statusBarHeight: state => state.app.statusBarHeight,
 	windowInfo: state => state.app.windowInfo,
 	PageContentHeight: state => state.app.PageContentHeight,
+	tabBarHeight: state => state.app.tabBarHeight,
+	
 	// 资产
 	contractAccount: state => state.possession.contractAccount,
 	bibiAccount: state => state.possession.bibiAccount,

+ 1 - 3
store/modules/app.config.js

@@ -8,6 +8,7 @@
  	statusBarHeight: 0,
 	windowInfo:{},
 	PageContentHeight:0,
+	tabBarHeight:50,  // 50 是tabbar 的高度,在pages里面设置 
  	// 涨跌颜色
  	stocksColor: 'green_rise', // green_rise:绿涨红跌 , red_rise:绿跌红涨 
  }
@@ -21,9 +22,6 @@
 		const headH = state.headHeight.split('rpx')[0];
 		const contentHeight = info.windowHeight - state.statusBarHeight - uni.upx2px(headH);
  		state.PageContentHeight = contentHeight;
-		console.log('PageContentHeight ' , contentHeight)
-		
-		
  	},
  	SET_STOCKS_COLOR: (state, code) => {
  		state.stocksColor = code

+ 4 - 1
uni.scss

@@ -20,9 +20,12 @@ $Theme-Color: #05C175;
 $border-color: rgba(204, 204, 204, 0.2);
 $border-color6: rgba(204, 204, 204, 0.6);
 $border-color4: rgba(204, 204, 204, 0.4);
+$border-color2: rgba(204, 204, 204, 0.2);
 $headFixedZIndex:50;
 $headTitleHeight: 100rpx;
-
+$SizeColor:  rgba(132,132,132,0.9);
+$SizeColor1:  rgba(203,203,203,0.9);
+$btnBgColor:#dedcdc;
 /* 颜色变量 */
 
 /* 行为相关颜色 */

+ 29 - 8
utils/common.js

@@ -51,8 +51,7 @@ export const removeStorageSync = (key) => {
 }
 
 export const refreshAccount = () => {
-	// removeStorageSync(config.tokenKey);
-	store.commit('app/SET_TOKEN' , '')
+	store.commit('app/SET_TOKEN', '')
 	uni.reLaunch({
 		url: '/pages/index/index'
 	});
@@ -76,7 +75,7 @@ export const ifLogin_ = () => {
 
 
 export const reverseBack = (path = undefined) => {
-	const pages = getCurrentPages()
+	const pages = getCurrentPages();
 	if (pages.length <= 1) {
 		uni.reLaunch({
 			url: '/pages/index/index'
@@ -84,18 +83,20 @@ export const reverseBack = (path = undefined) => {
 	} else {
 		let deltaNum = 1;
 		if (path) {
+			if (path.indexOf('/') === 0) {
+				path = path.substring(1);
+			};
 			const pageLength = pages.length
 			let num = pageLength;
-			for (let i = 1; i < pageLength; i++) {
+			for (let i = 1; i <= pageLength; i++) {
 				num -= 1;
 				if (pages[num].route === path) {
 					deltaNum = i;
+					break;
 				}
 			}
-			
+
 		};
-		console.log('pages = ' , pages)
-		console.log('deltaNum = ' , deltaNum)
 		uni.navigateBack({
 			delta: deltaNum,
 			fail: err => {}
@@ -135,5 +136,25 @@ export const decimalNum = {
 
 // 涨跌颜色
 export const setColor = (nums) => {
-	  return nums > 0 ? 'zhang' : 'die'
+	return nums >= 0 ? 'zhang' : 'die'
+}
+
+
+const doubleDigit = (t) => {
+	if (t <= 9) {
+		return `0${t}`
+	}
+	return t
+
+}
+export const getData_ = (time = '') => {
+	const now = new Date()
+	const year = now.getFullYear();
+	const month = doubleDigit(now.getMonth() + 1);
+	const day = doubleDigit(now.getDate());
+	const hour = doubleDigit(now.getHours());
+	const min = doubleDigit(now.getMinutes());
+	const seon = doubleDigit(now.getSeconds());
+	return `${year}-${month}-${day} ${hour}:${min}:${seon}`
+
 }

+ 2 - 1
utils/initialize.js

@@ -1,6 +1,6 @@
 
 import config from "./config.js"
-import { decimalNum , setStorageSync , getStorageSync , setColor } from "./common.js"
+import { decimalNum , setStorageSync , getStorageSync , setColor , getData_ } from "./common.js"
 
 
 // import share from "@/components/headModules/share.vue"
@@ -14,6 +14,7 @@ export default {
 		Vue.prototype.$decimalNum = decimalNum; // 计算精度
 		Vue.prototype.$setStorageSync = setStorageSync;  
 		Vue.prototype.$getStorageSync = getStorageSync;  
+		Vue.prototype.$getData_ = getData_;  
 
 		Vue.prototype.$setColor = setColor; // 计算精度
 		// Vue.component('share', share)

+ 1 - 0
utils/request.js

@@ -97,6 +97,7 @@ export const request = async (opt = {}) => {
 			},
 			fail: (e) => {
 				// console.log('fail = ', e)
+				reject()
 			}
 		}))
 		if (pending[key]) {