Fly %!s(int64=2) %!d(string=hai) anos
achega
e9de2f9f8a
Modificáronse 58 ficheiros con 1506 adicións e 0 borrados
  1. 2 0
      .gitignore
  2. 20 0
      App.vue
  3. 18 0
      api/index.js
  4. 20 0
      index.html
  5. 22 0
      main.js
  6. 72 0
      manifest.json
  7. 24 0
      pages.json
  8. 590 0
      pages/index.vue
  9. 362 0
      pages/register.vue
  10. BIN=BIN
      static/img/3-16.png
  11. BIN=BIN
      static/img/3-8.png
  12. BIN=BIN
      static/img/icon_r716c85p0t8.zip
  13. BIN=BIN
      static/img/im.png
  14. BIN=BIN
      static/img/img_01.png
  15. BIN=BIN
      static/img/img_02.png
  16. BIN=BIN
      static/img/img_03.png
  17. BIN=BIN
      static/img/img_04.png
  18. BIN=BIN
      static/img/img_05.png
  19. BIN=BIN
      static/img/img_06.png
  20. BIN=BIN
      static/img/img_07.png
  21. BIN=BIN
      static/img/img_08.png
  22. BIN=BIN
      static/img/img_09.png
  23. BIN=BIN
      static/img/img_10.png
  24. BIN=BIN
      static/img/img_11.png
  25. BIN=BIN
      static/img/img_12.png
  26. BIN=BIN
      static/img/img_13.png
  27. BIN=BIN
      static/img/img_14.png
  28. BIN=BIN
      static/img/img_15.png
  29. BIN=BIN
      static/img/img_16.png
  30. BIN=BIN
      static/img/img_17.png
  31. BIN=BIN
      static/img/img_18.png
  32. BIN=BIN
      static/img/img_19.png
  33. BIN=BIN
      static/img/img_20.png
  34. BIN=BIN
      static/img/img_21.png
  35. BIN=BIN
      static/img/img_22.png
  36. BIN=BIN
      static/img/img_23.png
  37. BIN=BIN
      static/img/img_24.png
  38. BIN=BIN
      static/img/img_25.png
  39. BIN=BIN
      static/img/img_26.png
  40. BIN=BIN
      static/img/img_27.png
  41. BIN=BIN
      static/img/img_28.png
  42. BIN=BIN
      static/img/滚动组 1.png
  43. BIN=BIN
      static/img/滚动组 2.png
  44. BIN=BIN
      static/img/组 1_1.png
  45. BIN=BIN
      static/img/组 1_2.png
  46. BIN=BIN
      static/img/组 24739.png
  47. BIN=BIN
      static/img/组 24739_1.png
  48. BIN=BIN
      static/img/组 24740.png
  49. BIN=BIN
      static/img/组 24748.png
  50. BIN=BIN
      static/img/组 24749.png
  51. BIN=BIN
      static/img/组 24764.png
  52. BIN=BIN
      static/img/组 24776.png
  53. BIN=BIN
      static/logo.png
  54. 10 0
      uni.promisify.adaptor.js
  55. 76 0
      uni.scss
  56. 133 0
      utils/request.js
  57. 135 0
      utils/validate.js
  58. 22 0
      vue.config.js

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+node_modules
+unpackage

+ 20 - 0
App.vue

@@ -0,0 +1,20 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+	*{
+		box-sizing: border-box;
+	}
+</style>

+ 18 - 0
api/index.js

@@ -0,0 +1,18 @@
+import {
+	axios
+} from '@/utils/request.js'
+
+// 提交注册
+export function Api_setRegister() {
+	return axios.get(`/api/user/register`)
+}
+
+// 发送邮箱验证码
+export function Api_getEmailCode(data) {
+	return axios.post(`/api/sms_mail`, data)
+}
+
+//  发送手机验证码
+export function Api_getSmsSend(data) {
+	return axios.post(`/api/sms_send`, data)
+}

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 22 - 0
main.js

@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+  ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 72 - 0
manifest.json

@@ -0,0 +1,72 @@
+{
+    "name" : "BiKing_H5",
+    "appid" : "__UNI__A136296",
+    "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" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2"
+}

+ 24 - 0
pages.json

@@ -0,0 +1,24 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/index",
+			"style": {
+				"navigationBarTitleText": "biking"
+			}
+		},
+		{
+			"path": "pages/register",
+			"style": {
+				"navigationBarTitleText": "biking注册"
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationStyle": "custom",
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "biking",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},
+	"uniIdRouter": {}
+}

+ 590 - 0
pages/index.vue

@@ -0,0 +1,590 @@
+<template>
+	<view class="content">
+		<view class="content-01">
+			<image class="logo-img" src="@/static/img/img_02.png" mode="aspectFit"></image>
+			<view class="content-01-title">
+				<text>全球安全领先的数字</text>
+				<text>资产交易平台</text>
+			</view>
+			<view class="content-01-lable">
+				<text></text>
+				<text></text>
+				<text></text>
+				<image src="@/static/img/img_03.png" mode="aspectFit"></image>
+				<text></text>
+				<text></text>
+				<text></text>
+			</view>
+			<view class="content-01-text">
+				<text>独创的闪电交易技术</text>
+				<text>从新加坡BiKing开始</text>
+				<text>风靡全球</text>
+			</view>
+			<view class="phone-box">
+				<image class="content-01-phone" src="@/static/img/img_04.png" mode="aspectFit"></image>
+				<!-- 	<view class="content-01-phone">
+					
+				</view> -->
+			</view>
+
+		</view>
+		<view class="content-03">
+			<view class="stage stage-01">
+				<text class="stage-time">2017-12-08</text>
+				<text class="stage-money">$19891</text>
+			</view>
+			<view class="stage stage-02">
+				<text class="stage-time">2021-04-14</text>
+				<text class="stage-money">$64829</text>
+			</view>
+			<view class="stage stage-03">
+				<text class="stage-time">2021-11-10</text>
+				<text class="stage-money">$68958</text>
+			</view>
+			<image class="stage-image" src="@/static/img/im.png" mode="aspectFit"></image>
+		</view>
+		<view class="content-04">
+			<text class="content-04-title">交易特色</text>
+			<image class="content-04-title-logo" src="@/static/img/img_08.png" mode="aspectFit"></image>
+			<view class="stage-val">
+				<image class="stage-image" src="@/static/img/img_09.png" mode="aspectFit"></image>
+				<text></text>
+				<text></text>
+				<text class="stage-dot"></text>
+				<image class="stage-image" src="@/static/img/img_10.png" mode="aspectFit"></image>
+				<text></text>
+				<text></text>
+				<text class="stage-dot"></text>
+				<image class="stage-image" src="@/static/img/img_11.png" mode="aspectFit"></image>
+			</view>
+			<view class="feature-way">
+				<text class="way-lable">社区跟单</text>
+				<text class="way-val">同步顶级交易员专业操作,一键跟单</text>
+				<image class="way-img" src="@/static/img/img_12.png" mode="aspectFit"></image>
+				<text class="way-lable">赠金模式</text>
+				<text class="way-val">与实盘合约一致,赠金模式下的收益,</text>
+				<text class="way-val">并划转至合约钱包</text>
+				<image class="way-img" src="@/static/img/img_12.png" mode="aspectFit"></image>
+				<text class="way-lable">持仓功能</text>
+				<text class="way-val">止盈止损修改、部分平仓、</text>
+				<text class="way-val">反向开仓、一键平仓</text>
+			</view>
+		</view>
+		<view class="content-05 safe-box">
+			<view class="safe-img-box">
+				<image class="safe-logo" src="@/static/img/img_13.png" mode="aspectFit"></image>
+				<image class="safe-kine" src="@/static/img/img_14.png" mode="aspectFit"></image>
+			</view>
+			<view class="safe-clause ">
+				<!-- father -->
+				<view class="clause-item">
+					<view class="clause-lable">安全高效</view>
+					<view class="clause-val">140万单/秒的核心撮合技术</view>
+				</view>
+				<view class="clause-item">
+					<view class="clause-lable"><text>Simple,but Powerful</text>
+						<image class="lable-icon" src="@/static/img/img_15.png" mode="aspectFit"></image>
+						<text>For Begginers And Pros</text>
+					</view>
+					<view class="clause-val">24/7全球多语言在线服务支持</view>
+				</view>
+				<view class="clause-item">
+					<view class="clause-lable">资金防护</view>
+					<view class="clause-val">整体资金流动均采用多重离线签名技术,银行级安全风控,资金零风险</view>
+				</view>
+			</view>
+			<image class="safe-img" src="@/static/img/img_16.png" mode="aspectFit"></image>
+
+			<view class="safely-content">
+				<view class="safely-left">
+					<text class="safely-left-lable">Exchange Crypto Safely</text>
+					<text class="safely-left-val">币王将持续为用户交易增加安全保障</text>
+				</view>
+				<image class="safely-right" src="@/static/img/img_14.png" mode=""></image>
+			</view>
+		</view>
+
+		<view class="content-06">
+			<image class="ikino-name" src="@/static/img/img_17.png" mode="aspectFit"></image>
+			<image class="ikino-world" src="@/static/img/img_18.png" mode="aspectFit"></image>
+			<view class="ikino-stage">
+				<image class="stage-icon" src="@/static/img/img_19.png" mode="aspectFit"></image>
+				<text class="stage-name">3年</text>
+				<text class="stage-val">数字资产服务经验</text>
+				<image class="stage-jiantou" src="@/static/img/img_12.png" mode="aspectFit"></image>
+				<image class="stage-icon" src="@/static/img/img_20.png" mode="aspectFit"></image>
+				<text class="stage-name">26个</text>
+				<text class="stage-val">国家</text>
+				<image class="stage-jiantou" src="@/static/img/img_12.png" mode="aspectFit"></image>
+				<image class="stage-icon" src="@/static/img/img_21.png" mode="aspectFit"></image>
+				<text class="stage-name">120万</text>
+				<text class="stage-val">用户的共同选择</text>
+			</view>
+		</view>
+		<view class="content-07">
+			<image class="name" src="@/static/img/img_02.png" mode="aspectFit"></image>
+			<view class="text">
+				安全为基 技术立本 金融筑梦 服务树人
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				title: 'Hello'
+			}
+		},
+		onLoad() {
+
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		.content-01 {
+			width: 100%;
+			min-height: 1503rpx;
+			background: url("@/static/img/img_01.png") no-repeat top center;
+			background-size: 100% 1503rpx;
+			padding: 130rpx 30rpx 0;
+
+			.logo-img {
+				// margin-top: 130rpx;
+				width: 221rpx;
+				height: 85rpx;
+			}
+
+			.content-01-title {
+				padding: 45rpx 0 50rpx;
+				font-size: 70rpx;
+				font-family: PingFang SC, PingFang SC-Light;
+				font-weight: 300;
+				text-align: center;
+				color: #ffffff;
+				line-height: 1.5;
+				letter-spacing: 1.4px;
+			}
+
+			.content-01-lable {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				text {
+					width: 10rpx;
+					height: 10rpx;
+					background: #14fded;
+					border-radius: 50%;
+					margin: 0 5rpx;
+				}
+
+				image {
+					width: 68rpx;
+					height: 68rpx;
+					margin: 0 20rpx;
+				}
+			}
+
+			.content-01-text {
+				display: flex;
+				flex-direction: column;
+				font-size: 40rpx;
+				font-family: PingFang SC, PingFang SC-Regular;
+				font-weight: 400;
+				text-align: center;
+				color: #ffffff;
+				letter-spacing: 0.8px;
+
+				text {
+					padding-top: 40rpx;
+				}
+			}
+
+			.phone-box {
+
+				margin: 75rpx auto 0;
+				position: relative;
+				width: 353rpx;
+			}
+
+			.content-01-phone {
+				// z-index: 1;
+				position: absolute;
+				left: 0;
+				top: 0;
+				width: 353rpx;
+				height: 715rpx;
+
+
+			}
+		}
+
+		.content-03 {
+			width: 100%;
+			height: 866rpx;
+			background: url("@/static/img/img_06.png") no-repeat center center;
+			background-size: 100% 100%;
+			position: relative;
+
+			.stage {
+
+				position: absolute;
+				display: flex;
+				flex-direction: column;
+
+				.stage-time {
+
+					font-size: 18rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					text-align: left;
+					color: #ffffff;
+					line-height: 1.1;
+				}
+
+				.stage-money {
+					font-size: 30rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					text-align: left;
+					color: #ffffff;
+					line-height: 1.1;
+				}
+			}
+
+			.stage-01 {
+				left: 77rpx;
+				top: 280rpx;
+			}
+
+			.stage-02 {
+				right: 180rpx;
+				top: 105rpx;
+			}
+
+			.stage-03 {
+				right: 79rpx;
+				top: 28rpx;
+			}
+
+			.stage-image {
+				width: 397rpx;
+				height: 805rpx;
+				position: absolute;
+				top: 326rpx;
+				left: 177rpx;
+				z-index: 1;
+			}
+		}
+
+		.content-04 {
+			width: 100%;
+			min-height: 1513rpx;
+			background: url("@/static/img/img_07.png") no-repeat center center;
+			background-size: 100% 100%;
+			padding-top: 318rpx;
+			text-align: center;
+
+			.content-04-title {
+
+				font-size: 74rpx;
+				font-family: PingFang SC, PingFang SC-Bold;
+				font-weight: 700;
+				color: #ffffff;
+			}
+
+			.content-04-title-logo {
+				width: 588rpx;
+				height: 157rpx;
+				margin: 17rpx auto;
+			}
+
+			.stage-val {
+				width: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+
+				.stage-image {
+					width: 48rpx;
+					height: 48rpx;
+				}
+
+				text {
+					width: 6rpx;
+					height: 6rpx;
+					background: #03bf72;
+					border-radius: 50%;
+					margin-left: 10rpx;
+				}
+
+				.stage-dot {
+					margin-right: 10rpx;
+				}
+			}
+
+			// <view class="feature-way">
+			// 	<text class="way-lable">社区跟单</text>
+			// 	<text class="way-val">同步顶级交易员专业操作,一键跟单</text>
+			// 				<image class="way-img" src="@/static/img/img_12.png" mode="aspectFit"></image>
+			// 	<text class="way-lable">赠金模式</text>
+			// 	<text class="way-val">与实盘合约一致,赠金模式下的收益,</text>
+			// 	<text class="way-val">并划转至合约钱包</text>
+			// 				<image class="way-img" src="@/static/img/img_12.png" mode="aspectFit"></image>
+			// 	<text class="way-lable">持仓功能</text>
+			// 	<text class="way-val">止盈止损修改、部分平仓、</text>
+			// 	<text class="way-val">反向开仓、一键平仓</text>
+			// </view>
+
+			.feature-way {
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				padding-top: 11rpx;
+
+				.way-lable {
+					font-size: 40rpx;
+					font-family: PingFang SC, PingFang SC-Bold;
+					font-weight: 700;
+					text-align: center;
+					color: #ffffff;
+					line-height: 1.2x;
+					padding: 40rpx 0 30rpx;
+				}
+
+				.way-val {
+
+					opacity: 0.86;
+					font-size: 30rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					text-align: center;
+					color: #ffffff;
+					line-height: 1.2;
+					padding-bottom: 20rpx;
+				}
+
+				.way-img {
+					width: 22rpx;
+					height: 13rpx;
+					margin-top: 40rpx;
+
+				}
+			}
+
+		}
+
+		.content-05 {
+			width: 100%;
+			padding: 0 60rpx;
+
+			.safe-img-box {
+				width: 100%;
+				position: relative;
+			}
+
+			.safe-logo {
+				width: 463rpx;
+				height: 249rpx;
+				position: absolute;
+				left: 0;
+				top: 53rpx;
+				z-index: -1;
+			}
+
+			.safe-kine {
+				position: absolute;
+				right: -94rpx;
+				top: 173rpx;
+				z-index: 2;
+				width: 382rpx;
+				height: 528rpx;
+				z-index: -1;
+			}
+
+			.safe-clause {
+				// position: absolute;
+				// top: 462rpx;
+				// left: 50%;
+				// transform: translateX(-50%);
+
+				// height: 1000rpx;
+				width: 100%;
+				padding-top: 462rpx;
+
+				.clause-item {
+					width: 100%;
+					height: 305rpx;
+					background-color: #fff;
+					border-radius: 20rpx;
+					box-shadow: 0px 0px 21px 2px #c5c2c2;
+					margin-bottom: 25rpx;
+					padding: 57rpx 46rpx 0;
+
+					.clause-lable {
+
+						font-size: 44rpx;
+						font-family: PingFang SC, PingFang SC-Bold;
+						font-weight: 700;
+						text-align: left;
+						color: #0c1533;
+						line-height: 1.3;
+
+
+						.lable-icon {
+							width: 46rpx;
+							height: 52rpx;
+						}
+					}
+
+					.clause-val {
+						font-size: 32rpx;
+						font-family: PingFang SC, PingFang SC-Regular;
+						font-weight: 400;
+						text-align: left;
+						color: #0c1533;
+						line-height: 1.7;
+					}
+				}
+			}
+
+			.safe-img {
+				width: 556rpx;
+				height: 376rpx;
+				margin-top: 55rpx;
+			}
+
+			.safely-content {
+				width: 100%;
+				padding: 123rpx 0 136rpx;
+				display: flex;
+				justify-content: space-between;
+
+				.safely-left {
+					width: 434rpx;
+					display: flex;
+					flex-direction: column;
+
+					.safely-left-lable {
+						font-size: 44rpx;
+						font-family: PingFang SC, PingFang SC-Bold;
+						font-weight: 700;
+						text-align: left;
+						color: #0c1533;
+						line-height: 1.4;
+					}
+
+					.safely-left-val {
+						font-size: 32rpx;
+						font-family: PingFang SC, PingFang SC-Regular;
+						font-weight: 400;
+						text-align: left;
+						color: #0c1533;
+						line-height: 1.7;
+					}
+				}
+
+				.safely-right {
+					width: 271rpx;
+					height: 271rpx;
+					right: -75rpx;
+				}
+			}
+		}
+
+		.content-06 {
+
+			width: 100%;
+			background-color: #0D0E13;
+
+			.ikino-name {
+				width: 630rpx;
+				height: 243rpx;
+				margin: 60rpx 60rpx 0;
+			}
+
+			.ikino-world {
+				width: 100%;
+				height: 427rpx;
+				top: -60rpx;
+			}
+
+			.ikino-stage {
+				transform: translateY(-120rpx);
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+				padding-bottom: 60rpx;
+
+				.stage-icon {
+					width: 91rpx;
+					height: 91rpx;
+				}
+
+				.stage-name {
+					padding-top: 10rpx;
+					font-size: 40rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					color: #04c174;
+					line-height: 65rpx;
+				}
+
+				.stage-val {
+
+					font-size: 30rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					text-align: left;
+					color: #cccccc;
+					line-height: 65rpx;
+				}
+
+				.stage-jiantou {
+					width: 15rpx;
+					height: 11rpx;
+					margin: 31rpx 0 35rpx;
+				}
+			}
+		}
+
+		// <view class="content-07">
+		// 	<image class="name" src="@/static/img/img_02.png" mode="aspectFit"></image>
+		// 	<view class="text">
+		// 		安全为基 技术立本 金融筑梦 服务树人
+		// 	</view>
+		// </view>
+
+		.content-07 {
+			width: 100%;
+			text-align: center;
+			padding: 48rpx 0 520rpx;
+
+			.name {
+				width: 221rpx;
+				height: 85rpx;
+			}
+
+			.text {
+				padding-top: 18rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC, PingFang SC-Regular;
+				font-weight: 400;
+				text-align: center;
+				color: #23283f;
+				line-height: 65rpx;
+			}
+		}
+
+	}
+</style>

+ 362 - 0
pages/register.vue

@@ -0,0 +1,362 @@
+<template>
+	<view class="register-box">
+		<view class="register-logo">
+			<image class="logo-icon" src="../static/img/img_22.png" mode=""></image>
+			<image class="logo-name" src="../static/img/img_23.png" mode=""></image>
+		</view>
+		<view class="register-from">
+			<view class="from-lable">
+				<text @click.stop="setRegisterType(1)"
+					:class="['lable-title' , registerType === 1 ? 'active-lable-title' : '']">手机注册</text>
+				<text @click.stop="setRegisterType(2)"
+					:class="['lable-title' , registerType === 2 ? 'active-lable-title' : '']">邮箱注册</text>
+			</view>
+			<view class="from-val">
+				<view class="from-item" v-show="registerType === 1">
+					<view class="area">
+						<text class="area-val">{{ from.areaCode ? `+${from.areaCode}` : '国家地区'}}</text>
+						<image class="select-area" src="../static/img/img_26.png" mode="aspectFit"></image>
+					</view>
+					<input v-model="from.user_string" class="item-input" type="text"
+						placeholder-class="placeholder-class" placeholder="请输入手机号">
+				</view>
+				<view class="from-item" v-show="registerType === 2">
+					<input v-model="from.user_string" class="item-input" type="text"
+						placeholder-class="placeholder-class" placeholder="请输入邮箱号">
+				</view>
+				<view class="from-item">
+					<input class="item-input" v-model="from.password.code" type="text"
+						placeholder-class="placeholder-class" placeholder="验证码">
+					<text class="item-code" @click.stop="getCode()">{{ CodeText }}</text>
+				</view>
+				<view class="from-item">
+					<input class="item-input" v-model="from.password" :type="showPass ? 'number' : 'password'"
+						placeholder-class="placeholder-class" placeholder="请输入密码">
+					<view class="pass-icon-box" @click.stop="showPass = !showPass">
+						<image v-show="!showPass" class="pass-icon" src="../static/img/img_25.png" mode="aspectFit">
+						</image>
+						<image v-show="showPass" class="pass-icon" src="../static/img/img_24.png" mode="aspectFit">
+						</image>
+					</view>
+				</view>
+				<view class="from-item">
+					<input class="item-input" v-model="from.extension_code" type="number"
+						placeholder-class="placeholder-class" placeholder="邀请码">
+				</view>
+
+				<view class="from-agreement" @click.stop="readAgreement = !readAgreement">
+					<view class="agreement-status">
+						<image v-show="readAgreement" class="read-agreement" src="../static/img/img_28.png"
+							mode="aspectFit">
+						</image>
+					</view>
+					我已阅读并同意<text class="agreement-name">《服务与隐私条款》</text>
+				</view>
+
+
+				<view class="from-submit" @click.stop="submitRegister">注册</view>
+			</view>
+		</view>
+	</view>
+	</view>
+</template>
+
+<script>
+	import {
+		Api_setRegister,
+		Api_getEmailCode,
+		Api_getSmsSend
+	} from "@/api/index.js"
+	export default {
+		name: 'register',
+		data() {
+			return {
+				showPass: false,
+				readAgreement: false,
+				registerType: 1, //  1: 手机注册  2 : 邮箱注册
+				CodeText: '获取验证码',
+				from: {
+					user_string: '',
+					password: '',
+					areaCode: 86,
+					code: '',
+					extension_code: ''
+				}
+			};
+		},
+		onLoad(opt) {
+			this.from.extension_code = opt?.extension_code || ''
+		},
+		methods: {
+			setRegisterType(type) {
+				this.from.user_string = '';
+				this.registerType = type;
+			},
+			getCode() {
+				if (this.CodeText !== '获取验证码') {
+					return false
+				}
+				let Api_ = '',
+					obj = {};
+				obj.user_string = this.from.user_string;
+				switch (this.registerType) {
+					case 1:
+						// 手机号 - 获取验证码
+						Api_ = Api_getSmsSend;
+						obj.area_code = this.areaCode;
+						break;
+					case 2:
+						// 邮箱 - 获取验证码
+						Api_ = Api_getEmailCode;
+						break;
+					default:
+						break;
+				}
+				if (Api_) {
+					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}秒后重新发送`;
+						123456
+					}, 1000)
+				}
+
+
+			},
+			submitRegister() {
+				if (this.readAgreement) {
+					const obj = {
+						user_string: this.from.user_string,
+						password: this.from.password,
+						extension_code: this.from.extension_code,
+						code: this.from.code,
+						type: this.registerType === 1 ? 'mogile' : '	email'
+					};
+					uni.showLoading()
+					Api_setRegister(obj).then(res => {
+						uni.showToast({
+							title: '注册成功',
+							icon: 'none'
+						})
+					}).catch(err => {
+
+					}).finally(() => {
+						uni.hideLoading()
+					})
+				} else {
+					uni.showToast({
+						title: '请先阅读协议',
+						icon: 'none'
+					})
+				}
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.register-box {
+		width: 100%;
+		min-height: 100vh;
+		background-color: #0D9780;
+		padding: 126rpx 37rpx 165rpx;
+
+		.register-logo {
+			width: 100%;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			.logo-icon {
+				width: 87rpx;
+				height: 85rpx;
+			}
+
+			.logo-name {
+				margin-left: 8rpx;
+				width: 127rpx;
+				height: 50rpx;
+			}
+		}
+
+		.register-from {
+			width: 100%;
+			background-color: #fff;
+			border-radius: 20rpx;
+			padding-bottom: 63rpx;
+
+			// <view class="from-lable">
+			// 	<text class="lable-title">手机注册</text>
+			// 	<text class="lable-title">邮箱注册</text>
+			// </view>
+			.from-lable {
+				width: 100%;
+				display: flex;
+				align-items: stretch;
+
+				.lable-title {
+					flex: 1;
+					flex-shrink: 0;
+					height: 114rpx;
+					line-height: 114rpx;
+					text-align: center;
+					font-size: 34rpx;
+					font-family: PingFang SC, PingFang SC-Bold;
+					font-weight: 700;
+					color: #1a1a1a;
+					letter-spacing: 0.68rpx;
+					border-bottom: 1rpx solid #e6e6e6;
+				}
+
+				.active-lable-title {
+					color: #20b482;
+					border-bottom: 2rpx solid #20b482;
+				}
+			}
+
+			.from-val {
+				width: 100%;
+				padding: 0 43rpx;
+
+				.from-item {
+					width: 100%;
+					height: 115rpx;
+					border-bottom: 1rpx solid #e6e6e6;
+					padding-top: 25rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+
+					// <view class="area">
+					// 	<text class="area-val">国家地区</text>
+					// 	<image class="select-area" src="../static/img/img_26.png" mode="aspectFit"></image>
+					// </view>
+					.area {
+						min-width: 160rpx;
+
+						.area-val {
+							font-size: 28rpx;
+							font-family: PingFang SC, PingFang SC-Regular;
+							font-weight: 400;
+							color: #b3b3b3;
+							letter-spacing: 0.56rpx;
+						}
+
+						.select-area {
+							width: 20rpx;
+							height: 20rpx;
+						}
+					}
+
+					.item-input {
+						flex-shrink: 0;
+						font-size: 28rpx;
+						flex: 1;
+						height: 100%;
+						border: none;
+						font-family: PingFang SC, PingFang SC-Regular;
+						font-weight: 400;
+						color: #666666;
+						letter-spacing: 0.56rpx;
+					}
+
+					.placeholder-class {
+
+						font-size: 28rpx;
+						font-family: PingFang SC, PingFang SC-Regular;
+						font-weight: 400;
+						color: #b3b3b3;
+						letter-spacing: 0.56rpx;
+					}
+
+					.item-code {
+
+						font-size: 28rpx;
+						font-family: PingFang SC, PingFang SC-Regular;
+						font-weight: 400;
+						color: #1cac7b;
+						line-height: 38rpx;
+						letter-spacing: 0.56rpx;
+					}
+
+					.pass-icon-box {
+						width: 88rpx;
+						height: 88rpx;
+						display: flex;
+						justify-content: flex-end;
+						align-items: center;
+
+						.pass-icon {
+							width: 42rpx;
+							height: 42rpx;
+						}
+					}
+
+				}
+
+				// .<view class="from-agreement">
+				// 	<view class="agreement-status">
+
+				// 	</view>
+				// 	我已阅读并同意<text class="agreement-name">《服务与隐私条款》</text>
+				// </view>\
+				.from-agreement {
+					width: 100%;
+					padding: 52rpx 0;
+					display: flex;
+					align-items: center;
+
+					font-size: 24rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					color: #666666;
+
+					.agreement-status {
+						width: 29rpx;
+						height: 29rpx;
+						border: 1px solid #3b6afd;
+						margin-right: 15rpx;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+
+						.read-agreement {
+							width: 19rpx;
+							height: 14rpx;
+						}
+					}
+
+					.agreement-name {
+						color: #3b6afd;
+					}
+				}
+
+				.from-submit {
+					width: 100%;
+					height: 90rpx;
+					text-align: center;
+					line-height: 90rpx;
+					background: #00b99a;
+					border-radius: 10rpx;
+
+					font-size: 32rpx;
+					font-family: PingFang SC, PingFang SC-Regular;
+					font-weight: 400;
+					color: #ffffff;
+					letter-spacing: 0.64rpx;
+				}
+			}
+		}
+	}
+</style>

BIN=BIN
static/img/3-16.png


BIN=BIN
static/img/3-8.png


BIN=BIN
static/img/icon_r716c85p0t8.zip


BIN=BIN
static/img/im.png


BIN=BIN
static/img/img_01.png


BIN=BIN
static/img/img_02.png


BIN=BIN
static/img/img_03.png


BIN=BIN
static/img/img_04.png


BIN=BIN
static/img/img_05.png


BIN=BIN
static/img/img_06.png


BIN=BIN
static/img/img_07.png


BIN=BIN
static/img/img_08.png


BIN=BIN
static/img/img_09.png


BIN=BIN
static/img/img_10.png


BIN=BIN
static/img/img_11.png


BIN=BIN
static/img/img_12.png


BIN=BIN
static/img/img_13.png


BIN=BIN
static/img/img_14.png


BIN=BIN
static/img/img_15.png


BIN=BIN
static/img/img_16.png


BIN=BIN
static/img/img_17.png


BIN=BIN
static/img/img_18.png


BIN=BIN
static/img/img_19.png


BIN=BIN
static/img/img_20.png


BIN=BIN
static/img/img_21.png


BIN=BIN
static/img/img_22.png


BIN=BIN
static/img/img_23.png


BIN=BIN
static/img/img_24.png


BIN=BIN
static/img/img_25.png


BIN=BIN
static/img/img_26.png


BIN=BIN
static/img/img_27.png


BIN=BIN
static/img/img_28.png


BIN=BIN
static/img/滚动组 1.png


BIN=BIN
static/img/滚动组 2.png


BIN=BIN
static/img/组 1_1.png


BIN=BIN
static/img/组 1_2.png


BIN=BIN
static/img/组 24739.png


BIN=BIN
static/img/组 24739_1.png


BIN=BIN
static/img/组 24740.png


BIN=BIN
static/img/组 24748.png


BIN=BIN
static/img/组 24749.png


BIN=BIN
static/img/组 24764.png


BIN=BIN
static/img/组 24776.png


BIN=BIN
static/logo.png


+ 10 - 0
uni.promisify.adaptor.js

@@ -0,0 +1,10 @@
+uni.addInterceptor({
+  returnValue (res) {
+    if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+      return res;
+    }
+    return new Promise((resolve, reject) => {
+      res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
+    });
+  },
+});

+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;

+ 133 - 0
utils/request.js

@@ -0,0 +1,133 @@
+// 封装请求
+ 
+
+// 请求域名
+const baseUrl = process.env.NODE_ENV === 'development' ? 'Api' : 'https://doc.okenx.com/'
+ 
+
+let LoginFailure = false
+// 存储请求信息,当接口正在请求中,不会进行下一次接口请求
+const pending = {}
+
+// 处理请求成功
+const isHttpSuccess = (stauts) => {
+	return stauts >= 200 && stauts < 300
+}
+
+// 处理请求错误
+const errorHandle = (res) => {
+	// 日志处理  全局错误提示
+	if (res && res.statusCode !== 200) {
+		// 浏览器错误
+		uni.showToast({
+			title: '系统错误,请联系管理员',
+			icon: 'none',
+			duration: 2000
+		})
+	} else {
+		// console.log('errorHandle1', res)
+		// 服务器错误
+		uni.showToast({
+			title: res.data.msg || '系统错误,请联系管理员',
+			icon: 'none',
+			duration: 2000
+		})
+	}
+
+}
+
+export const request = async (opt = {}) => {
+	// 考虑与uniapp的接口进行兼容 
+
+	let headers = {
+		"Content-Type": "application/x-www-form-urlencoded"
+	}
+ 
+	
+	const {
+		data,
+		success,
+		fail
+	} = opt
+
+	// pending 中的键名
+	const key = opt.url + '&' + (opt.method || 'GET')
+
+	// 处理请求地址
+	opt.url = baseUrl + opt.url
+
+	// 处理公共参数
+
+	opt.data = data
+
+	opt.timeout = 5000 // 请求超时时间
+
+	opt.header = headers
+	 
+	const result = new Promise((resolve, reject) => {
+		const handler = uni.request(Object.assign({}, opt, {
+			success: (res) => {
+				const data = res.data;
+				delete pending[key]
+				if (data.type === 'ok') {
+					resolve(data.message)
+				}else if (data.type === '999') {
+					 
+					
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: data.message || '系统错误'
+					})
+					reject(data)
+				}
+
+			},
+			fail: (e) => {
+				// console.log('fail = ', e)
+				reject()
+			},
+			complete: () => {
+				uni.hideLoading()
+			}
+		}))
+		if (pending[key]) {
+			// 中断请求
+			pending[key].abort()
+		}
+		// setTimeout 让pending[key].abort()执行完成后在存值
+		setTimeout(() => {
+			pending[key] = handler
+		}, 0)
+	})
+	return result
+}
+
+
+export const axios = {
+	get(url, data, options = {}) {
+		return request({
+			url,
+			data,
+			method: 'GET',
+			...options
+		})
+	},
+	post(url, data, options = {}) {
+		return request({
+			url,
+			data,
+			method: 'POST',
+			...options
+		})
+	},
+	getDow(url, data, options = {}) {
+		// console.log('getDow' , options)
+		return request({
+			url,
+			data,
+			method: 'GET',
+			...options
+		})
+	},
+}

+ 135 - 0
utils/validate.js

@@ -0,0 +1,135 @@
+export function validPassword (str) {
+  // const reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8}$/;
+  // 必须同时包含数字,大小写字母
+  /**
+   *(?=.{12})表示要大等于12位。
+   *(?=.*?[a-z])表示要有小写字母。
+   *(?=.*?[A-Z])表示要有大写字母。 
+   */
+  const reg = /^(?=.{8})(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d).*$/;
+  return reg.test(str);
+}
+
+
+//  ------------------------------------------------------------------------
+/**
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isExternal (path) {
+  return /^(https?:|mailto:|tel:)/.test(path);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUsername (str) {
+  const valid_map = ["admin", "editor"];
+  return valid_map.indexOf(str.trim()) >= 0;
+}
+
+/**
+ * @param {string} url
+ * @returns {Boolean}
+ */
+export function validURL (url) {
+  const reg =
+    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
+  return reg.test(url);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validLowerCase (str) {
+  const reg = /^[a-z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUpperCase (str) {
+  const reg = /^[A-Z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validAlphabets (str) {
+  const reg = /^[A-Za-z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} email
+ * @returns {Boolean}
+ */
+export function validEmail (email) {
+  const reg =
+    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+  return reg.test(email);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function isString (str) {
+  if (typeof str === "string" || str instanceof String) {
+    return true;
+  }
+  return false;
+}
+
+/**
+ * @param {Array} arg
+ * @returns {Boolean}
+ */
+export function isArray (arg) {
+  if (typeof Array.isArray === "undefined") {
+    return Object.prototype.toString.call(arg) === "[object Array]";
+  }
+  return Array.isArray(arg);
+}
+
+
+
+// 填写内容必须是纯数字 / 正整数
+export function validPositiveInteger (str) {
+  const reg = /(^[1-9]\d*$)/;
+  return reg.test(str);
+}
+// 大于等于0,保留两位小数
+export function validTwoMinNum (str) {
+  const reg = /^([0-9]{1}|^[1-9]{1}\d{1,15})(\.\d{1,2})?$/;
+  return reg.test(str);
+}
+
+// 填写内容必须是纯数字 / 整数
+export function validPositiveIntegerZero (str) {
+  const reg = /(^[0-9]\d*$)/;
+  return reg.test(str);
+}
+
+export const validateNum = (rule, value, callback) => {
+  // console.log('value = ' , value , '---', 1 + value , rule)
+  if (value === "" || value === undefined) {
+    if (rule.required) {
+      callback(new Error(rule.msg));
+    } else {
+      callback();
+    }
+  } else {
+    if (rule.valids.regular(value)) {
+      callback();
+    } else {
+      callback(new Error(rule.valids.msg));
+    }
+  }
+};

+ 22 - 0
vue.config.js

@@ -0,0 +1,22 @@
+ module.exports = {
+ 	devServer: {
+ 		port: '8080',
+ 		disableHostCheck: true,
+ 		proxy: {
+ 			// 'https://doc.okenx.com': {
+ 			// 	target: 'https://doc.okenx.com',
+ 			// 	changeOrigin: true,
+ 			// 	pathRewrite: {
+ 			// 		["^" + 'https://doc.okenx.com']: ''
+ 			// 	}
+ 			// },
+ 			'/Apis': {
+ 				target: 'https://doc.okenx.com',
+ 				changeOrigin: true,
+ 				pathRewrite: {
+ 					"^/Apis": ''
+ 				}
+ 			}
+ 		}
+ 	}
+ }