dever 4 years ago
parent
commit
612bb6fc6b

+ 69 - 20
lib/dever/index.js

@@ -530,7 +530,7 @@ var upload = {
 }
 
 var dever = {
-	login : 'login/login?refer=-1',
+	login : 'user/login',
 	web_view : '/lib/dever/pages/web_view',
 	source : 'h5',
 	host : '',
@@ -579,22 +579,30 @@ var dever = {
 		}
 
 		if (state) {
-			
-			if (url) {
-				self.post(url, {noloading:1}, function(t) {
-					self.config = t;
-					self.config.update_time = self.curTime();
-					self.data('dever_config', self.config);
-					vue.prototype.$config = self.config;
-				});
-			} else {
-				self.config = value;
-				vue.prototype.$config = self.config;
-				self.data('dever_config', self.config);
-			}
+			this.setConfig(url, value);
 		}
 		
 		return this;
+	},
+	//设置全局变量
+	setConfig : function(url, config, key, value) {
+		var self = this;
+		if (url) {
+			self.post(url, {noloading:1}, function(t) {
+				self.config = t;
+				self.config.update_time = self.curTime();
+				self.data('dever_config', self.config);
+				vue.prototype.$config = self.config;
+			});
+		} else {
+			if (!config && key && value) {
+				config = self.data('dever_config');
+				config[key] = value;
+			}
+			self.config = config;
+			vue.prototype.$config = self.config;
+			self.data('dever_config', self.config);
+		}
 	},
 	//加载通用的方法
 	common : function(func) {
@@ -669,6 +677,35 @@ var dever = {
 		}
 		var route = page.route;
 		return route;
+	},
+	//获取当前param
+	param : function() {
+		var page = this.getPage();
+		if (!page) {
+			return '';
+		}
+		var options = page.options;
+		return options;
+	},
+	//获取当前url
+	url : function() {
+		var page = this.getPage();
+		if (!page) {
+			return '';
+		}
+		var route = page.route;
+		var options = page.options;
+		
+		// 拼接参数
+		let param = ''
+		if (options && options.length > 0) {
+			for (let key in options) {
+			    param += '&' + key + '=' + curParam[key]
+			}
+			param = '?' + param;
+		}
+
+		return '/' + route + param;
 	},
 	//获取当前page
 	getPage : function() {
@@ -858,10 +895,13 @@ var dever = {
 				}
 			}
 		} else {
-			this.debug('navigateTo:' + go + ':' + path);
+			this.debug('navigateTo:' + go + ':' + path);
+			if (path.indexOf('/pages/') == -1) {
+				path = '/pages/' + path;
+			}
 			if (this.switchTab.indexOf(path) != -1) {
 				uni.switchTab({
-					url: '/pages/' + path,
+					url: path,
 					success: function(e) {
 						if (self.source != 'app' && self.switchTabCall[path]) {
 							var call = self.switchTabCall[path];
@@ -871,11 +911,11 @@ var dever = {
 				})
 			} else if (go) {
 				uni.redirectTo({
-					url: '/pages/' + path
+					url: path
 				})
 			} else {
 				uni.navigateTo({
-					url: '/pages/' + path
+					url: path
 				})
 			}
 		}
@@ -966,15 +1006,24 @@ var dever = {
 	},
 	
 	//验证登录
-	checkLogin : function() {
+	checkLogin : function(refer) {
 		if (!this.getToken()) {
+			this.data('login_refer', this.getRefer(refer));
 			//this.hideLoading();
 			if (this.source == 'h5') {
-				this.location(this.login);
+				this.location(this.login, 'go');
 			} else {
 				this.location(this.login, 'go');
 			}
 		}
+	},
+	
+	//获取refer
+	getRefer : function(refer) {
+		if (!refer) {
+			refer = this.url();
+		}
+		return refer;
 	},
 	
 	//数据存储

+ 1 - 1
lib/our-loading/loaders/shrink-rect.vue

@@ -19,7 +19,7 @@ export default {
   props: {
     color: String,
     size: Number
-  }
+  },
 }
 </script>
 

File diff suppressed because it is too large
+ 36 - 0
lib/watch-login/css/icon.css


+ 86 - 0
lib/watch-login/css/main.css

@@ -0,0 +1,86 @@
+.content {
+	display: flex;
+	flex-direction: column;
+	justify-content:center;
+	/* margin-top: 128rpx; */
+}
+
+/* 头部 logo */
+.header {
+	width:161rpx;
+	height:161rpx;
+	box-shadow:0rpx 0rpx 60rpx 0rpx rgba(0,0,0,0.1);
+	border-radius:50%;
+	margin-top: 128rpx;
+	margin-bottom: 72rpx;
+	margin-left: auto;
+	margin-right: auto;
+}
+.header image{
+	width:161rpx;
+	height:161rpx;
+	border-radius:50%;
+}
+
+/* 主体 */
+.main {
+	display: flex;
+	flex-direction: column;
+	padding-left: 70rpx;
+	padding-right: 70rpx;
+}
+.tips {
+	color: #999999;
+	font-size: 28rpx;
+	margin-top: 64rpx;
+	margin-left: 48rpx;
+}
+
+/* 登录按钮 */
+.wbutton{
+	margin-top: 96rpx;
+}
+
+/* 其他登录方式 */
+.other_login{
+	display: flex;
+	flex-direction: row;
+	justify-content: center;
+	align-items: center;
+	margin-top: 256rpx;
+	text-align: center;
+}
+.login_icon{
+	border: none;
+	font-size: 64rpx;
+	margin: 0 64rpx 0 64rpx;
+	color: rgba(0,0,0,0.7)
+}
+.wechat_color{
+	color: #83DC42;
+}
+.weibo_color{
+	color: #F9221D;
+}
+.github_color{
+	color: #24292E;
+}
+
+/* 底部 */
+.footer{
+	display: flex;
+	flex-direction: row;
+	justify-content: center;
+	align-items: center;
+	font-size: 28rpx;
+	margin-top: 64rpx;
+	color: rgba(0,0,0,0.7);
+	text-align: center;
+	height: 40rpx;
+	line-height: 40rpx;
+}
+.footer text{
+	font-size: 24rpx;
+	margin-left: 15rpx;
+	margin-right: 15rpx;
+}

+ 124 - 0
lib/watch-login/watch-button.vue

@@ -0,0 +1,124 @@
+<template>
+	<view>
+		<!-- 按钮 -->
+		<button 
+			:class="['buttonBorder',!_rotate?'dlbutton':'dlbutton_loading']" 
+			:style="{'background':bgColor, 'color': fontColor}"
+            
+			@click="$emit('click', $event)"
+			@contact="$emit('contact', $event)"
+			@error="$emit('error', $event)"
+			@getphonenumber="$emit('getphonenumber', $event)"
+			@getuserinfo="$emit('getuserinfo', $event)"
+			@launchapp="$emit('launchapp', $event)"
+			@longtap="$emit('longtap', $event)"
+			@opensetting="$emit('opensetting', $event)"
+			@touchcancel="$emit('touchcancel', $event)"
+			@touchend="$emit('touchend', $event)"
+			@touchmove="$emit('touchmove', $event)"
+			@touchstart="$emit('touchstart', $event)"
+		>
+			<view :class="_rotate?'rotate_loop':''">
+				<text v-if="_rotate" class="cuIcon cuIcon-loading1 "></text>
+				<view v-if="!_rotate"><slot name="text">{{ text }}</slot></view>
+			</view>
+		</button>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			text: String, //显示文本
+			rotate:{
+				//是否启动加载
+				type: [Boolean,String],
+				default: false,
+			}, 
+			bgColor:{
+				//按钮背景颜色
+				type: String,
+				default: "linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.6))",
+			},
+			fontColor:{
+				//按钮字体颜色
+				type: String,
+				default: "#FFFFFF",
+			},
+		},
+		computed:{
+			_rotate() {
+				//处理值
+				return String(this.rotate) !== 'false'
+			},
+		}
+	}
+</script>
+
+<style>
+	@import url("./css/icon.css");
+	
+	.dlbutton {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		color: #FFFFFF;
+		font-size: 30rpx;
+		white-space:nowrap;
+		overflow: hidden;
+		width:601rpx;
+		height:100rpx;
+		background:linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.6));
+		box-shadow:0rpx 0rpx 13rpx 0rpx rgba(164,217,228,0.4);
+		border-radius:2.5rem;
+		margin-top: 0rpx;
+	}
+	.dlbutton_loading {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		color: #FFFFFF;
+		font-size: 30rpx;
+		width:100rpx;
+		height:100rpx;
+		background:linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.6));
+		box-shadow:0rpx 0rpx 13rpx 0rpx rgba(164,217,228,0.4);
+		border-radius:2.5rem;
+		margin-top: 0rpx;
+	}
+	.buttonBorder{
+	    border: none ;
+	    border-radius: 2.5rem ;
+	    -webkit-box-shadow: 0 0 60rpx 0 rgba(0,0,0,.2) ;
+	    box-shadow: 0 0 60rpx 0 rgba(0,0,0,.2) ;
+	    -webkit-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
+	    -moz-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
+	    -ms-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
+	    -o-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
+	    transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
+	}
+	
+	/* 旋转动画 */
+	.rotate_loop{
+		-webkit-transition-property: -webkit-transform;
+	    -webkit-transition-duration: 1s;
+	    -moz-transition-property: -moz-transform;
+	    -moz-transition-duration: 1s;
+	    -webkit-animation: rotate 1s linear infinite;
+	    -moz-animation: rotate 1s linear infinite;
+	    -o-animation: rotate 1s linear infinite;
+	    animation: rotate 1s linear infinite;
+	}
+	@-webkit-keyframes rotate{from{-webkit-transform: rotate(0deg)}
+	    to{-webkit-transform: rotate(360deg)}
+	}
+	@-moz-keyframes rotate{from{-moz-transform: rotate(0deg)}
+	    to{-moz-transform: rotate(359deg)}
+	}
+	@-o-keyframes rotate{from{-o-transform: rotate(0deg)}
+	    to{-o-transform: rotate(359deg)}
+	}
+	@keyframes rotate{from{transform: rotate(0deg)}
+	    to{transform: rotate(359deg)}
+	}
+</style>

+ 208 - 0
lib/watch-login/watch-input.vue

@@ -0,0 +1,208 @@
+<template>
+	<view class="main-list oBorder">
+		<!-- 文本框 -->
+		<input 
+			class="main-input" 
+			:value="value" 
+			:type="_type" 
+			:maxlength="maxlength" 
+			:placeholder="placeholder" 
+			:password="type==='password'&&!showPassword" 
+			
+			@input="$emit('input', $event.target.value)"
+			@blur="$emit('blur', $event)"
+			@focus="$emit('focus', $event)"
+			@longpress="$emit('longpress', $event)"
+			@confirm="$emit('confirm', $event)"
+			@click="$emit('click', $event)"
+			@longtap="$emit('longtap', $event)"
+			@touchcancel="$emit('touchcancel', $event)"
+			@touchend="$emit('touchend', $event)"
+			@touchmove="$emit('touchmove', $event)"
+			@touchstart="$emit('touchstart', $event)"
+		/>
+		<!-- 是否可见密码 -->
+		<image 
+			v-if="_isShowPass&&type==='password'&&!_isShowCode"
+			class="img cuIcon" 
+			:class="showPassword?'cuIcon-attention':'cuIcon-attentionforbid'" 
+			@tap="showPass"
+		></image>
+		<!-- 倒计时 -->
+		<view 
+			v-if="_isShowCode&&!_isShowPass"
+			:class="['vercode',{'vercode-run': second>0}]" 
+			@click="setCode"
+		>{{ getVerCodeSecond }}</view>
+		
+	</view>
+</template>
+
+<script>
+	var _this, countDown;
+	export default{
+		data(){
+			return{
+				showPassword: false, //是否显示明文
+				second: 0, //倒计时
+				isRunCode: false, //是否开始倒计时
+			}
+		},
+		props:{
+			type: String, //类型
+			value: String, //值
+			placeholder: String, //框内提示
+			maxlength: {
+				//最大长度
+				type: [Number,String],
+				default: 20,
+			},
+			isShowPass:{
+				//是否显示密码图标(二选一)
+				type: [Boolean,String],
+				default: false,
+			},
+			isShowCode:{
+				//是否显示获取验证码(二选一)
+				type: [Boolean,String],
+				default: false,
+			},
+			codeText:{
+				type: String,
+				default: "获取验证码",
+			},
+			setTime:{
+				//倒计时时间设置
+				type: [Number,String],
+				default: 60,
+			}
+		},
+		model: {
+			prop: 'value',
+			event: 'input'
+		},
+		mounted() {
+			_this=this
+			//准备触发
+			this.$on('runCode',(val)=>{
+                this.runCode(val);
+            });
+			clearInterval(countDown);//先清理一次循环,避免缓存
+		},
+		methods:{
+			showPass(){
+				//是否显示密码
+				this.showPassword = !this.showPassword
+			},
+			setCode(){
+				//设置获取验证码的事件
+				if(this.isRunCode){
+					//判断是否开始倒计时,避免重复点击
+					return false;
+				}
+				this.$emit('setCode')
+			},
+			runCode(val){
+				//开始倒计时
+				if(String(val)=="0"){
+					
+					//判断是否需要终止循环
+					this.second = 0; //初始倒计时
+					clearInterval(countDown);//清理循环
+					this.isRunCode= false; //关闭循环状态
+					return false;
+				}
+				if(this.isRunCode){
+					//判断是否开始倒计时,避免重复点击
+					return false;
+				}
+				this.isRunCode= true
+				this.second = this._setTime //倒数秒数
+				
+				let _this=this;
+				countDown = setInterval(function(){
+					_this.second--
+					if(_this.second==0){
+						_this.isRunCode= false
+						clearInterval(countDown)
+					}
+				},1000)
+			}
+		},
+		computed:{
+			_type(){
+				//处理值
+				const type = this.type
+				return type == 'password' ? 'text' : type
+			},
+			_isShowPass() {
+				//处理值
+				return String(this.isShowPass) !== 'false'
+			},
+			_isShowCode() {
+				//处理值
+				return String(this.isShowCode) !== 'false'
+			},
+			_setTime() {
+				//处理值
+				const setTime = Number(this.setTime)
+				return setTime>0 ? setTime : 60
+			},
+			getVerCodeSecond(){
+				//验证码倒计时计算
+				if(this.second<=0){
+					return this.codeText;
+				}else{
+					if(this.second<10){
+						return '0'+this.second;
+					}else{
+						return this.second;
+					}
+				}
+				
+			}
+		}
+	}
+</script>
+
+<style>
+	@import url("./css/icon.css");
+	
+	.main-list{
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+		/* height: 36rpx; */   /* Input 高度 */
+		color: #333333;
+		padding: 40rpx 32rpx;
+		margin:32rpx 0;
+	}
+	.img{
+		width: 32rpx;
+		height: 32rpx;
+		font-size: 32rpx;
+	}
+	.main-input{
+		flex: 1;
+		text-align: left;
+		font-size: 28rpx;
+		/* line-height: 100rpx; */
+		padding-right: 10rpx;
+		margin-left: 20rpx;
+	}
+	.vercode {
+		color: rgba(0,0,0,0.7);
+		font-size: 24rpx;
+		/* line-height: 100rpx; */
+	}
+	.vercode-run {
+		color: rgba(0,0,0,0.4) !important;
+	}
+	.oBorder{
+	    border: none;
+	    border-radius: 2.5rem ;
+	    -webkit-box-shadow: 0 0 60rpx 0 rgba(43,86,112,.1) ;
+	    box-shadow: 0 0 60rpx 0 rgba(43,86,112,.1) ;
+	}
+</style>

+ 4 - 4
main.js

@@ -25,15 +25,15 @@ Vue.prototype.Dever = Dever;
 
 // 载入全局配置 默认配置,防止第一次载入报错的,系统会自动从后台更新最新的配置
 var defaultConfig = {
-	'system_name' : '幻境合集',
-	'system_info' : '互联网赚钱创新模式',
-	'system_phone' : '18611795659',
+	'system_name' : '云店',
+	'system_info' : '云店',
+	'system_logo' : 'static/yd_logo.png',
 	//自动更新时间间隔
 	'set_update' : 86400,
 	//本次更新时间
 	'update_time' : false,
 };
-Vue.prototype.Dever.init('', Vue, defaultConfig);
+Vue.prototype.Dever.init('main/?l=api.config', Vue, defaultConfig);
 
 //自定义get的loading效果,设置全屏loading
 Vue.prototype.Dever.setGetLoading(function(self) {

+ 10 - 0
pages.json

@@ -60,6 +60,16 @@
 		    		"navigationStyle": "custom"
 		    	}
 		    }
+		},
+		{
+		    "path" : "pages/user/login",
+		    "style": {
+		    	"app-plus": {
+		    		"titleNView": false,
+		    		"bounce": "none",
+		    		"navigationStyle": "custom"
+		    	}
+		    }
 		}
     ],
 	"globalStyle": {

+ 2 - 1
pages/dream/index.vue

@@ -63,7 +63,8 @@ export default{
 		}
 	},
 	onLoad(option) {
-		this.id = option.id;
+		this.id = option.id;
+		this.Dever.checkLogin();
 		this.getData();
 	},
 	// 重新加载

+ 6 - 6
pages/dream/view.vue

@@ -5,7 +5,7 @@
 			<view v-if="fetch.items.length > 0">
 				<drawerPage :show="drawer.show ? 'left' : ''">
 					<view class="container_main" slot="links" @click="closeDrawer()">
-						<block v-if="login">
+						<block v-if="show">
 							<swiper class="swiper" @change="change" :circular="swiper.circular" :current="fetch.index">
 								<swiper-item v-for="(v, k) in fetch.items"  v-if="v.data" :key="k" >
 									<scroll-view scroll-y="true" scroll-x="true" class="scroll-height" @scrolltolower="bottomCall">
@@ -14,7 +14,7 @@
 								</swiper-item>
 							</swiper>
 						</block>
-						<block v-if="!login">
+						<block v-if="!show">
 							<dream ref="dream" @showDrawer="showDrawer" :index="fetch.index" :item="fetch.items[fetch.index]" :control="control" :bottom="bottom" class="item"></dream>
 						</block>
 					</view>
@@ -49,8 +49,8 @@
 					</view>
 				</drawerWindow>
 				
-				<y-Fab v-if="!drawer.show && fetch.user.avatar && login" :bottom="20" :right="20" :btnList="drawer.button" @click="clickDrawerButton" :text="`P`+(swiper.index+1)" :icon_o="fetch.user.avatar"></y-Fab>
-				<y-Fab v-if="!login" :bottom="20" :right="20" @click="goHome" :text="`首页`"></y-Fab>
+				<y-Fab v-if="!drawer.show && fetch.user.avatar && show" :bottom="20" :right="20" :btnList="drawer.button" @click="clickDrawerButton" :text="`P`+(swiper.index+1)" :icon_o="fetch.user.avatar"></y-Fab>
+				<y-Fab v-if="!show" :bottom="20" :right="20" @click="goHome" :text="`首页`"></y-Fab>
 			</view>
 		</view>
 	</gracePage>
@@ -70,7 +70,7 @@ export default{
 		return {
 			content_id : 0,
 			type : -1,
-			login : false,
+			show : false,
 			swiper : {
 				index : 0,
 				circular : false,
@@ -130,7 +130,6 @@ export default{
 		}
 	},
 	onLoad(option) {
-		this.login = true;
 		if (option && option.name) {
 			uni.setNavigationBarTitle({
 				title:option.name
@@ -212,6 +211,7 @@ export default{
 			var self = this;
 			self.drawer.item = {};
 			this.Dever.get(this, 'app/collection/?l=api.getContent', {code:this.Dever.config.code}, function(t) {
+				self.show = t.show;
 				uni.setNavigationBarTitle({
 					title:t.info.name
 				});

+ 162 - 0
pages/user/login.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="register">
+	
+		<view class="content">
+			<!-- 头部logo -->
+			<view class="header">
+				<image :src="Dever.config.system_logo" @click="Dever.viewPic([Dever.config.system_logo], Dever.config.system_logo)"></image>
+			</view>
+			<!-- 主体 -->
+			<view class="main">
+				<wInput
+					v-model="phoneData"
+					type="text"
+					maxlength="11"
+					placeholder="手机号"
+				></wInput>
+				<wInput
+					v-model="passData"
+					type="password"
+					maxlength="11"
+					placeholder="登录密码"
+					isShowPass
+					style="display: none;"
+				></wInput>
+				<wInput
+					v-model="verCode"
+					type="number"
+					maxlength="6"
+					placeholder="验证码"
+					
+					isShowCode
+					ref="runCode"
+					@setCode="getVerCode()"
+				></wInput>
+					
+			</view>
+				
+			<wButton 
+				class="wbutton"
+				text="登 录"
+				:rotate="isRotate" 
+				@click.native="startLogin()"
+			></wButton>
+			
+			<view class="other_agree">
+				<text
+					@tap="isShowAgree" 
+					class="cuIcon"
+					:class="showAgree?'cuIcon-radiobox':'cuIcon-round'"
+				> 同意</text>
+				<!-- 协议地址 -->
+				<navigator url="" open-type="navigate">《{{Dever.config.system_name}}入境协议》</navigator>
+			</view>
+			
+			<!-- 其他登录 -->
+			<view class="other_login cuIcon">
+				<view class="login_icon">
+					<view class="cuIcon-weixin" @tap="login_weixin"></view>
+				</view>
+			</view>
+			
+			<!-- 底部信息 -->
+			<view class="footer" style="display: none;">
+				<navigator url="forget" open-type="navigate">找回密码</navigator>
+				<text>|</text>
+				<navigator url="register" open-type="navigate">注册账号</navigator>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	var self;
+	import wInput from '@/lib/watch-login/watch-input.vue' //input
+	import wButton from '@/lib/watch-login/watch-button.vue' //button
+	
+	export default {
+		data() {
+			return {
+				phoneData:'', // 用户/电话
+				passData:'', //密码
+				verCode:"", //验证码
+				showAgree:true, //协议是否选择
+				isRotate: false, //是否加载旋转
+			}
+		},
+		components:{
+			wInput,
+			wButton,
+		},
+		mounted() {
+			self = this;
+		},
+		methods: {
+			isShowAgree(){
+				//是否选择协议
+				self.showAgree = !self.showAgree;
+			},
+			getVerCode(){
+				//获取验证码
+				if (self.phoneData.length != 11) {
+					self.Dever.alert('手机号不正确');
+				    return false;
+				}
+				self.$refs.runCode.$emit('runCode');
+				self.Dever.post('package/passport/?l=reg.getMCode', {noloading:1, mobile: self.phoneData}, function(t) {
+					self.Dever.alert(t);
+				});
+			},
+		    startLogin() {
+				if(self.isRotate){
+					//判断是否加载中,避免重复点击请求
+					return false;
+				}
+				if (self.showAgree == false) {
+					self.Dever.alert('请先同意《协议》');
+				    return false;
+				}
+				if (self.phoneData.length !=11) {
+					self.Dever.alert('手机号不正确');
+				    return false;
+				}
+				/*
+		        if (self.passData.length < 6) {
+					self.Dever.alert('密码不正确');
+		            return false;
+		        }
+				*/
+				if (self.verCode.length != 6) {
+					self.Dever.alert('验证码不正确');
+				    return false;
+				}
+				
+				self.isRotate = true;
+				self.Dever.post('package/passport/?l=app.login', {noloading:1, mobile: self.phoneData, mcode: self.verCode, source_type: self.Dever.source, system:1}, function(t) {
+					self.isRotate = false;
+					self.Dever.setToken(t.signature);
+					self.Dever.jump();
+				}, function(t) {
+					self.Dever.alert(t.msg);
+					self.isRotate = false;
+				});
+		    }
+		}
+	}
+</script>
+
+<style>
+	@import url("@/lib/watch-login/css/icon.css");
+	@import url("@/lib/watch-login/css/main.css");
+	.other_agree {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		margin-top: 50rpx;
+		text-align: center;
+	}
+	.other_login {
+		margin-top: 130rpx;
+	}
+</style>

BIN
static/yd_logo.png


Some files were not shown because too many files changed in this diff