浏览器嵌入,国旗文件

This commit is contained in:
Caiyanpeng committed 2021-04-09 09:19:04 +08:00
1 parent e7a3214cb5
commit 07feba912c
552 files changed
+39279 -8128

No files matched your search

+12 -4
View File
@@ -74,8 +74,7 @@ namespace Assets.Scripts.Apis
//}
}
protected async Task<byte[]> GetAsync(string url)
{
AddLanguage();
@@ -115,7 +114,12 @@ namespace Assets.Scripts.Apis
var response = await httpClient.GetAsync(ConfigHelper.Host + url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
return await ParseJsonAsync<T>(response);
}
protected async Task<T> GetThirdPartAsync<T>(string url)
{
AddLanguage();
var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
return await ParseJsonAsync<T>(response);
}
private async Task<T> ParseJsonAsync<T>(HttpResponseMessage response)
{
var result = await response.Content.ReadAsStringAsync();
@@ -455,7 +459,6 @@ namespace Assets.Scripts.Apis
public T Get<T>(string url)
{
var res = Get(url);
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(res);
}
@@ -512,6 +515,11 @@ namespace Assets.Scripts.Apis
return data;
}
}
public static void SetCookie(string cookie)
{
httpClientHandler.CookieContainer.Add(new Uri(ConfigHelper.Host), new Cookie("PowerFun.AUTH", cookie, "/"));
}
}
}
+20
View File
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class UserModel
{
public string NickName { get; set; }
public int Ftp { get; set; }
public double Weight { get; set; }
public double BicycleWeight { get; set; }
public string Carlories { get; set; }
public string Avatar { get; set; }
public double Distance { get; set; }
public string Climb { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 359b7bb30d2d48245821f1b6a86d4811
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -56,5 +56,7 @@ namespace Assets.Scripts.Apis.Models
/// 已连接到Strava
/// </summary>
public bool ConnectedToStrava { get; set; }
//cookie
public string cookie { get; set; }
}
}
+21
View File
@@ -0,0 +1,21 @@
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis
{
public class ThirdPartApi : ApiBase
{
public async Task<JObject> GetWxAccessToken(string code)
{
return await GetThirdPartAsync<JObject>($"https://api.weixin.qq.com/sns/oauth2/access_token?appid={App.WxAppId}&secret={App.WxAppSecret}&code={code}&grant_type=authorization_code");
}
public async Task<JObject> GetWxUserInfo(string accessToken, string openId)
{
return await GetThirdPartAsync<JObject>($"https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId);
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f575a1019121c7a47bcd23795da6bc8f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+45 -1
View File
@@ -1,4 +1,5 @@
using Assets.Scripts.Apis.Models;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -67,7 +68,7 @@ namespace Assets.Scripts.Apis
//todo: check local database, insert new user
//PubCommData.CurrentUser = user;
user.cookie = cookies[0].Value;
return new JsonResult<UserResultModel>() { result = true, data = user };
}
else
@@ -93,5 +94,48 @@ namespace Assets.Scripts.Apis
return DateTime.Parse(result);
}
public async Task<JsonResult<UserResultModel>> Register(string Phone, string Pwd, string Captcha)
{
var param = new
{
Phone,
Pwd,
Captcha
};
JsonResult<UserResultModel> ret = null;
try
{
ret = await PostAsync<JsonResult<UserResultModel>>("NoAuth/v1/Register", param);
}
catch (Exception ex)
{
return new JsonResult<UserResultModel> { result = false, errMsg = ex.Message };
}
return ret;
}
public async Task<JsonResult<object>> GetCaptcha(string phone)
{
return await PostAsync<JsonResult<object>>("NoAuth/v1/GetCaptcha",new {phone });
}
public async Task<JsonResult<object>> UpdateUserInfo(UserResultModel user)
{
return await PostAsync<JsonResult<object>>("User/UpdateUserSetting", user);
}
public JsonResult<JObject> GetUserInfo()
{
return Get<JsonResult<JObject>>("User/GetCurrentUser");
}
public async Task<JsonResult<object>> OnWebWxLoginCheckUnionId(string unionId, string openId)
{
return await PostAsync<JsonResult<object>>("NoAuth/OnWebWxLoginCheckUnionId", new {unionId,openId});
}
public async Task<JsonResult<UserResultModel>> OnWebWxLogin(string Phone, string Captcha
, string UnionId, string WxWebOpenId, string WxHeadImg, string NickName, int? Sex, string Password)
{
return await PostAsync<JsonResult<UserResultModel>>("NoAuth/OnWebWxLogin",
new { Phone, Captcha, UnionId, WxWebOpenId, WxHeadImg, NickName, Sex, Password });
}
}
}
+6 -2
View File
@@ -1,12 +1,16 @@
using System.Collections;
using Assets.Scripts.Apis.Models;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class App
{
public static string Host = "http://192.168.0.97:5082/";
public static string Host = "http://192.168.0.101:5087/";
public static string AppVersion = "1.0.0";
public static int RouteIdParam = 0;
public static UserModel CurrentUser { get; set; }
public static string WxAppId = "wx9e8ca734e024f084";
public static string WxAppSecret = "906abafb2a18bc7a66ccfa5550f859b6";
}
+2 -2
View File
@@ -14,11 +14,11 @@ namespace Assets.Scripts
public static string Host = App.Host;
public static string AppVersion = App.AppVersion;
public static UserResultModel CurrentUser { get; set; }
public static UserApi userApi = new UserApi();
public static MapApi mapApi = new MapApi();
public static MapInterruptRecordApi mapInterruptRecordApi = new MapInterruptRecordApi();
public static ThirdPartApi thirdPartApi = new ThirdPartApi();
public static IPEndPoint UdpAddress ;
public static IPEndPoint TcpAddress ;
+518 -40
View File
@@ -1,4 +1,7 @@
using Assets.Scripts;
using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models;
using Assets.Scripts.UI.Prefab.Login;
using DG.Tweening;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -7,16 +10,39 @@ using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Timers;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using ZenFulcrum.EmbeddedBrowser;
//记录:小f 是-457和-681
public class LoginForm
public class QUserInfo
{
public InputField phone;
public InputField pwd;
public long Id { get; set; }
public string NickName { get; set; }
public string Avatar { get; set; }
public string Cookie { get; set; }
}
public class SignForm
{
//页面1
public InputField email { get; set; }
public InputField captcha { get; set; }
public InputField password { get; set; }
public InputField cpassword { get; set; }
//页面2
public Dropdown years { get; set; }
public Dropdown months { get; set; }
public Dropdown days { get; set; }
public Dropdown genders { get; set; }
public InputField weight { get; set; }
public InputField height { get; set; }
public Dropdown countrys { get; set; }
public Dropdown units { get; set; }
}
public class LoginController : MonoBehaviour
{
@@ -25,12 +51,16 @@ public class LoginController : MonoBehaviour
[SerializeField] Button loginNewAccount;
[SerializeField] Button loginReturn2;
[SerializeField] Button returnQuick;
[SerializeField] Button regNext;
[SerializeField] Button regPrev;
[SerializeField] Button sign;
[SerializeField] Button remember;
[SerializeField] Button wechatLogin;
[SerializeField] GameObject loginScrollView;
[SerializeField] GameObject signScrollView;
private Transform signPage1;
private Transform signPage2;
private Transform signScrollBar;
private SignForm signForm;
private LoginRegOptions regOptions;
[SerializeField] GameObject avatarScrollView;
[SerializeField] RawImage loading;
[SerializeField] Button exit;
@@ -38,13 +68,33 @@ public class LoginController : MonoBehaviour
private ScrollRect scrollSign;
private ScrollRect scrollAvatar;
private Transform imagexf;
private Transform mainContent;
//注册主页面
private Transform signContainer;
private UserResultModel userResult;
/*微信相关*/
private Browser wxBrowser;
private string wxState;
private Transform wxLogin1;
private Transform wxLogin2;
private Transform wxLogin3;
private JObject wxInfoJson;
private bool wxLock;
/*微信相关*/
private List<QUserInfo> userInfos;
// Start is called before the first frame update
void Start()
{
var userInfosJson = PlayerPrefs.GetString("UserInfos");
userInfos = JsonConvert.DeserializeObject<List<QUserInfo>>(userInfosJson);
if (userInfos == null) userInfos = new List<QUserInfo>();
//userInfos.RemoveAt(0);
//PlayerPrefs.SetString("UserInfos", "");
//transform.Find("RawImage").DOMove(new Vector3(0.5f,0.5f,0),1);
if (loginForm.Length == 2 && loginForm[0]!=null && loginForm[1]!=null)
if (loginForm.Length == 2 && loginForm[0] != null && loginForm[1] != null)
{
foreach (var ipt in loginForm)
foreach (var ipt in loginForm)
{
UIManager.AddEvent(ipt.gameObject, EventTriggerType.PointerClick, new UnityAction<BaseEventData>
((BaseEventData arg0) => { OnLoginInputSelect(arg0, ipt.gameObject); }));
@@ -67,61 +117,369 @@ public class LoginController : MonoBehaviour
if (loginScrollView != null)
{
scrollPanel = loginScrollView.GetComponent<ScrollRect>();
mainContent = loginScrollView.transform.Find("Viewport").Find("Content");
}
if (signScrollView != null)
{
scrollSign = signScrollView.GetComponent<ScrollRect>();
var content = signScrollView.transform.Find("Viewport").Find("Content");
signPage1 = content.Find("FirstPage");
signPage1.Find("next").GetComponent<Button>().onClick.AddListener(()=> { goRegNext(); });
signPage1.Find("Captcha").Find("BtnGet").GetComponent<Button>().onClick.AddListener(GetCaptcha);
var email = signPage1.Find("Email").GetComponent<InputField>();
var captcha = signPage1.Find("Captcha").GetComponent<InputField>();
var password = signPage1.Find("Password").GetComponent<InputField>();
var cpassword = signPage1.Find("CPassword").GetComponent<InputField>();
//第三方登录要用的按钮
signPage1.Find("previousThird").GetComponent<Button>().onClick.AddListener(goThirdPrev);
signPage1.Find("signThird").GetComponent<Button>().onClick.AddListener(() => { goRegNext(1); });
signPage2 = content.Find("NextPage");
signPage2.Find("previous").GetComponent<Button>().onClick.AddListener(goRegPrev);
signPage2.Find("sign").GetComponent<Button>().onClick.AddListener(goRegEnd);
//注册2 字段
regOptions = new LoginRegOptions();
var years = signPage2.Find("Year").GetComponent<Dropdown>();
var months = signPage2.Find("Month").GetComponent<Dropdown>();
var days = signPage2.Find("Day").GetComponent<Dropdown>();
var genders = signPage2.Find("Gender").GetComponent<Dropdown>();
var countrys = signPage2.Find("Country").GetComponent<Dropdown>();
var units = signPage2.Find("Unit").GetComponent<Dropdown>();
years.options = regOptions.years;
months.options = regOptions.months;
days.options = regOptions.days;
years.captionText.text = "Year";
months.captionText.text = "Month";
days.captionText.text = "Day";
years.onValueChanged.AddListener((int index) =>
{
if (index != -1 && months.value!=-1)
{
days.options = regOptions.GetDayOptions(int.Parse(years.captionText.text), int.Parse(months.captionText.text));
days.value = 0;
}
});
months.onValueChanged.AddListener((int index) =>
{
if (index != -1 && years.value != -1)
{
days.options = regOptions.GetDayOptions(int.Parse(years.captionText.text), int.Parse(months.captionText.text));
days.value = 0;
}
});
genders.options = regOptions.genders;
genders.captionText.text = "Gender";
countrys.options = regOptions.countrys;
countrys.value = regOptions.countryDefaultValue;
countrys.onValueChanged.AddListener((int index) =>
{
countrys.transform.Find("RawImage").GetComponent<RawImage>().texture = regOptions.GetCountryImage(index);
});
units.options = regOptions.units;
units.captionText.text = "Display Units";
signForm = new SignForm()
{
email = email,
captcha = captcha,
password = password,
cpassword = cpassword,
weight = signPage2.Find("Weight").GetComponent<InputField>(),
height = signPage2.Find("Height").GetComponent<InputField>(),
years = years,
months = months,
days = days,
genders = genders,
countrys = countrys,
units = units,
};
signScrollBar = signScrollView.transform.Find("Image").Find("Image");
}
if (avatarScrollView != null)
if (avatarScrollView != null)
{
scrollAvatar = avatarScrollView.GetComponent<ScrollRect>();
scrollAvatar = avatarScrollView.GetComponent<ScrollRect>();
var content = scrollAvatar.transform.Find("Viewport").Find("Content");
foreach (var user in userInfos)
{
var info = Instantiate(Resources.Load<GameObject>("UI/Prefab/Login/QuickUserInfo")).transform;
info.GetComponent<QuickLoginUser>().Initial(user);
info.parent = content;
info.localScale = new Vector3(1, 1, 1);
}
content.Find("empty1").transform.SetSiblingIndex(0);
content.Find("empty2").transform.SetSiblingIndex(content.childCount-1);
scrollAvatar.GetComponent<QuickLoginScroll>().Initial();
}
if (loginNewAccount != null)
{
loginNewAccount.onClick.AddListener(goLogin);
}
if (returnQuick != null)
if (returnQuick != null)
{
returnQuick.onClick.AddListener(ReturnQuick);
}
if (sign != null)
if (sign != null)
{
sign.onClick.AddListener(goSign);
sign.onClick.AddListener(()=>goSign());
}
if (loginReturn2 != null)
if (loginReturn2 != null)
{
loginReturn2.onClick.AddListener(goLoginReturn2);
}
if (regNext != null)
{
regNext.onClick.AddListener(goRegNext);
}
if (regPrev != null)
{
regPrev.onClick.AddListener(goRegPrev);
}
if (exit != null)
if (exit != null)
{
exit.onClick.AddListener(() => Application.Quit());
}
if (remember != null)
signContainer = mainContent.Find("FormContainer-Sign");
if (remember != null)
{
remember.onClick.AddListener(() =>
remember.onClick.AddListener(() =>
{
var gou = remember.transform.Find("Gou");
if (gou.gameObject.activeSelf)
{
gou.gameObject.SetActive(false);
}
else
else
{
gou.gameObject.SetActive(true);
}
});
}
if (wechatLogin != null)
{
wechatLogin.onClick.AddListener(() =>
{
if (wxLock) return;
wxLock = true;
wxState = (DateTime.Now.ToUniversalTime().Ticks / 10000 * new System.Random().Next(1,5)).ToString();
wxBrowser.Url = $"https://open.weixin.qq.com/connect/qrconnect?appid={App.WxAppId}&redirect_uri=https%3A%2F%2Fwx.powerfun.com.cn%2FNoAuth%2Fv1%2FWxWebLogin&response_type=code&scope=snsapi_login&state={wxState}#wechat_redirect";
AdjustWxQrCode();
var wx1 = mainContent.Find("FormContainer-Login").Find("FormContainer-wx1");
wx1.gameObject.SetActive(true);
Debug.Log(178+ "已经开启"+ wx1.gameObject.activeSelf);
wx1.DOLocalMoveY(0, 0.3f).onComplete = ()=> { wxLock = false; };
});
}
wxLogin1 = mainContent.Find("FormContainer-Login").Find("FormContainer-wx1");
if (wxLogin1 != null)
{
wxLogin1.Find("Image").GetComponent<Button>().onClick.AddListener(() =>
{
wxLock = true;
wxLogin1.DOMoveY(-573, 0.8f).onComplete = () =>
{
wxLock = false;
wxLogin1.gameObject.SetActive(false);
};
});
wxBrowser = wxLogin1.Find("Browser (GUI)").GetComponent<Browser>();
if (wxBrowser != null)
{
// wxBrowser.EvalJS(@"Object.defineProperties(Navigator.prototype, {
// language: {
// value: 'zh-CN',
// configurable: false,
// enumerable: true,
// writable: false
// },
// languages: {
// value: ['zh-CN','en','zh'],
// configurable: false,
// enumerable: true,
// writable: false
// }
//});");
wxBrowser.onTextureUpdated += OnUserScan;
//browser.Zoom = 0.5f;
//browser.
}
}
wxLogin2 = mainContent.Find("FormContainer-wx2");
if (wxLogin2!=null)
{
wxLogin2.Find("return").GetComponent<Button>().onClick.AddListener(() => {
wxLogin2.gameObject.SetActive(false);
wxLogin3.gameObject.SetActive(false);
pageNums = 3;
Canvas.ForceUpdateCanvases();
StartScrollPanel(1);
});
wxLogin2.Find("Next").GetComponent<Button>().onClick.AddListener(()=>
{
this.goSign(false);
});
}
wxLogin3 = mainContent.Find("FormContainer-wx3");
if (wxLogin3 != null)
{
wxLogin3.Find("return").GetComponent<Button>().onClick.AddListener(() => {
if (signContainer.gameObject.activeSelf)
{
StartScrollPanel(3);
}
else
{
signContainer.gameObject.SetActive(true);
wxLogin3.gameObject.SetActive(false);
StartScrollPanel(1);
}
});
wxLogin3.Find("rememberButton").GetComponent<Button>().onClick.AddListener(()=>
{
var gou = wxLogin3.Find("rememberButton").Find("Gou").gameObject;
gou.SetActive(!gou.activeSelf);
});
wxLogin3.Find("Next").GetComponent<Button>().onClick.AddListener(() =>
{
goMain(wxLogin3.Find("rememberButton").Find("Gou"));
//goMain
});
}
imagexf = transform.Find("Panel").Find("LoginContainer").Find("Imagexf");
}
private void AdjustWxQrCode()
{
wxBrowser.EvalJS(@"
document.getElementsByClassName('qrcode')[0].style.marginTop = 0;
document.getElementsByClassName('title')[0].style.display = 'none';
document.body.style.background = '#272732';
document.body.style.overflow = 'hidden';
document.body.style.transformOrigin = 'top left';
document.body.style.transform = 'scale(0.85106382978)';
document.body.style.padding = '0';
");
}
//浏览器加载回调
private async void OnUserScan()
{
if (wxBrowser.Url.Contains("qrconnect"))
{
AdjustWxQrCode();
}
Debug.Log(wxBrowser.Url);
var rgx = Regex.Match(wxBrowser.Url, @"https\:\/\/wx.powerfun.com.cn/NoAuth/v1/WxWebLogin\?code=(.*?)&state=(.*?)$");
var groups = rgx.Groups;
if (groups.Count == 3)
{
wxLogin1.gameObject.SetActive(false);
var state = groups[2].Value;
if (state == wxState)
{
var acjson = await ConfigHelper.thirdPartApi.GetWxAccessToken(groups[1].Value);
var infojson = await ConfigHelper.thirdPartApi.GetWxUserInfo(
acjson.Value<string>("access_token"), acjson.Value<string>("openid"));
wxInfoJson = infojson;
string unionId = wxInfoJson.Value<string>("unionid"),
openId = wxInfoJson.Value<string>("openid");
var r = await ConfigHelper.userApi.OnWebWxLoginCheckUnionId(unionId, openId);
if (r.result)
{
JObject data = JObject.FromObject(r.data);
if (data.Value<string>("success")!=null && data.Value<string>("success") == "False")
{
wxLogin2.gameObject.SetActive(true);
Utils.DisplayImage(StartCoroutine,
wxLogin2.Find("Avatar").GetComponent<RawImage>(),
wxInfoJson.Value<string>("headimgurl"));
wxLogin2.Find("NickName").GetComponent<Text>().text = wxInfoJson.Value<string>("nickname");
wxLogin3.gameObject.SetActive(true);
Utils.DisplayImage(StartCoroutine,
wxLogin3.Find("Avatar").GetComponent<RawImage>(),
wxInfoJson.Value<string>("headimgurl"));
wxLogin3.Find("NickName").GetComponent<Text>().text = wxInfoJson.Value<string>("nickname");
pageNums = 5;
//this.goSign();
StartScrollPanel(2);
}
else
{
userResult = data.ToObject<UserResultModel>();
wxLogin3.gameObject.SetActive(true);
Utils.DisplayImage(StartCoroutine,
wxLogin3.Find("Avatar").GetComponent<RawImage>(),
wxInfoJson.Value<string>("headimgurl"));
wxLogin3.Find("NickName").GetComponent<Text>().text = wxInfoJson.Value<string>("nickname");
signContainer.gameObject.SetActive(false);
pageNums = 3;
//this.goSign();
StartScrollPanel(2);
}
}
else
{
Utils.showToast(gameObject, r.errMsg);
}
}
}
}
private void goThirdNext()
{
this.StartScrollPanel(4);
}
private void goThirdPrev()
{
this.StartScrollPanel(2);
}
private void OnDestroy()
{
}
//用于倒计时获取验证码
int time = 0;
float timer = 0f;
bool startCaptcha = false;
async void GetCaptcha()
{
var btn = signPage1.Find("Captcha").Find("BtnGet");
var btnText = signPage1.Find("Captcha").Find("BtnGet").Find("Text").GetComponent<Text>();
var Email = signForm.email;
var r = await ConfigHelper.userApi.GetCaptcha(Email.text);
//Timer t = new Ti
if (r.result)
{
time = 60;
btnText.text = $"Again({time})";
System.Timers.Timer timer = new System.Timers.Timer();
btn.GetComponent<Button>().enabled = false;
startCaptcha = true;
//timer.Interval = 1000;
//timer.AutoReset = true;
//timer.Elapsed += new ElapsedEventHandler(CaptchaTimerTick);
//timer.Enabled = true;
//btnGet.
}
else
{
Utils.showToast(gameObject, r.errMsg);
}
}
void CaptchaTimerTick()
{
timer -= Time.deltaTime;
if (timer <= 0)
{
var btn = signPage1.Find("Captcha").Find("BtnGet");
var btnText = signPage1.Find("Captcha").Find("BtnGet").Find("Text").GetComponent<Text>();
btnText.text = $"Again({time--})";
if (time < 0)
{
btnText.text = "Get";
btn.GetComponent<Button>().enabled = true;
startCaptcha = false;
//timer.Stop();
}
timer = 1.0f;
}
}
private void OnLoginInputDeSelect(BaseEventData arg0, GameObject game)
{
var image = game.transform.GetComponent<Image>();
@@ -142,14 +500,55 @@ public class LoginController : MonoBehaviour
{
StartScrollSign(0);
}
private void goRegNext()
//0-普通 1-微信
private async void goRegNext(int signType = 0)
{
StartScrollSign(1);
var Email = signForm.email;
var Captcha = signForm.captcha;
var Password = signForm.password;
var CPassword = signForm.cpassword;
//JsonConvert
JsonResult<UserResultModel> r = null;
if (signType == 0)
{
r = await ConfigHelper.userApi.Register(Email.text, Password.text, Captcha.text);
}
else if (signType == 1)
{
r = await ConfigHelper.userApi.OnWebWxLogin(Email.text,
Captcha.text,
wxInfoJson.Value<string>("unionid"),
wxInfoJson.Value<string>("openid"),
wxInfoJson.Value<string>("headimgurl"),
wxInfoJson.Value<string>("nickname"),
wxInfoJson.Value<int>("sex"),
Password.text);
}
if (r!=null && r.result)
{
StartScrollSign(1);
}
else
{
StartScrollSign(1);
//Utils.showToast(gameObject, r.errMsg, 1);
}
}
private void goRegEnd()
{
if (pageNums == 5)
{
this.StartScrollPanel(4);
}
//throw new NotImplementedException();
}
private void goLoginReturn2()
{
if (wxLogin2.gameObject.activeSelf) wxLogin2.gameObject.SetActive(false);
if (wxLogin3.gameObject.activeSelf) wxLogin3.gameObject.SetActive(false);
pageNums = 3;
Canvas.ForceUpdateCanvases();
this.StartScrollPanel(1);
}
@@ -169,10 +568,59 @@ public class LoginController : MonoBehaviour
}
this.StartScrollPanel(1);
}
void goSign()
void goSign(bool isAccount = true)
{
this.StartScrollPanel(2);
this.StartScrollSign(0);
if (!isAccount)
{
pageNums = 5;
//wxLogin2.gameObject.SetActive(false);
signPage1.Find("next").gameObject.SetActive(false);
signPage1.Find("previousThird").gameObject.SetActive(true);
signPage1.Find("signThird").gameObject.SetActive(true);
this.StartScrollPanel(3);
this.StartScrollSign(0);
}
else
{
pageNums = 3;
wxLogin2.gameObject.SetActive(false);
signPage1.Find("next").gameObject.SetActive(true);
signPage1.Find("previousThird").gameObject.SetActive(false);
signPage1.Find("signThird").gameObject.SetActive(false);
this.StartScrollPanel(2);
this.StartScrollSign(0);
}
}
void goMain(Transform gou)
{
var data = userResult;
if (data == null) return;
//ConfigHelper.CurrentUser = res.data;
if (gou != null && gou.gameObject.activeSelf && !userInfos.Exists(x => x.Id == data.Id))
{
userInfos.Add(new QUserInfo
{
Id = data.Id,
NickName = data.Nickname,
Avatar = data.WxHeadImg,
Cookie = data.cookie
});
PlayerPrefs.SetString("UserInfos", JsonConvert.SerializeObject(userInfos));
}
App.CurrentUser = new UserModel
{
NickName = data.Nickname,
Ftp = data.FTP,
Weight = data.Weight,
BicycleWeight = data.BicycleWeight,
Carlories = "",
Avatar = data.WxHeadImg,
Distance = 0,
Climb = "",
};
SceneManager.LoadScene("MainScene");
}
async void Submit()
{
@@ -181,19 +629,19 @@ public class LoginController : MonoBehaviour
Utils.showToast(gameObject, "未绑定", 1);
return;
}
//if (string.IsNullOrEmpty(phone.text) || string.IsNullOrEmpty(pwd.text))
//{
// Utils.showToast(gameObject, "请输入信息", 1);
// return;
//}
if (string.IsNullOrEmpty(loginForm[0].text) || string.IsNullOrEmpty(loginForm[1].text))
{
Utils.showToast(gameObject, "请输入信息", 1);
return;
}
//var res = await Global.userApi.Login(phone.text, pwd.text, "");
//测试用
var res = await ConfigHelper.userApi.Login("15651831367", "123456", "");
var res = await ConfigHelper.userApi.Login(loginForm[0].text, loginForm[1].text, "");
//var res = await NoAuthApi.Login(phone.text, pwd.text);
if (res.result)
{
ConfigHelper.CurrentUser = res.data;
SceneManager.LoadScene("MainScene");
userResult = res.data;
goMain(remember.transform.Find("Gou"));
}
else
{
@@ -208,6 +656,10 @@ public class LoginController : MonoBehaviour
{
loginForm[1].ActivateInputField();
}
if (startCaptcha)
{
CaptchaTimerTick();
}
goScrollPanel();
goScrollSign();
//if (Input.GetKeyDown(KeyCode.Return) && )
@@ -233,10 +685,11 @@ public class LoginController : MonoBehaviour
scrollPanelIndex = index;
startScrollPanel = true;
}
private int pageNums = 3;
private void goScrollPanel()
{
var index = scrollPanelIndex;
var scrollValue = 1f/(3 - 1);
var scrollValue = 1f/(pageNums - 1);
var value = index * scrollValue;
if (scrollPanel != null && startScrollPanel)
{
@@ -278,11 +731,35 @@ public class LoginController : MonoBehaviour
#region 注册页面滑动逻辑
private bool startScrollSign = false;
private int scrollSignIndex = 0;
private void StartScrollSign(int index)
{
if (startScrollSign) return;
scrollSignIndex = index;
startScrollSign = true;
Debug.Log($"{index},{index * 160}");
if (index == 1)
{
if (signForm.years.value!=-1) signForm.years.value = 0;
if (signForm.months.value != -1) signForm.months.value = 0;
if (signForm.days.value != -1) signForm.days.value = 0;
if (signForm.countrys.value != -1) signForm.countrys.value = regOptions.countryDefaultValue;
if (signForm.genders.value != -1) signForm.genders.value = 0;
if (signForm.units.value != -1) signForm.units.value = 0;
if (pageNums == 5 && wxInfoJson != null)
{
var sex = wxInfoJson.Value<int>("sex");
if (sex > 0)
{
signForm.genders.value = sex - 1;
}
var country = wxInfoJson.Value<string>("country");
signForm.countrys.value = regOptions.GetCountryIndexByCode(country);
}
signForm.weight.text = "";
signForm.height.text = "";
}
signScrollBar.DOLocalMoveX((index-1) *160, 0.2f);
}
private void goScrollSign()
{
@@ -296,6 +773,7 @@ public class LoginController : MonoBehaviour
{
scrollSign.horizontalNormalizedPosition = 0;
startScrollSign = false;
}
}
else if (scrollSignIndex == 1)
+7 -3
View File
@@ -1,4 +1,5 @@
using System.Collections;
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
@@ -7,14 +8,17 @@ public class ButtonHoverScript : MonoBehaviour, IPointerExitHandler, IPointerEnt
{
public void OnPointerEnter(PointerEventData eventData)
{
//transform.DOMove
Debug.Log("鼠标悬浮");
gameObject.transform.localScale = new Vector3(1.01f, 1.01f, 1f);
//gameObject.transform.localScale = new Vector3(1.01f, 1.01f, 1f);
transform.DOScale(new Vector3(1.01f, 1.01f, 1f),0.2f);
}
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("鼠标松开");
gameObject.transform.localScale = new Vector3(1f, 1f, 1f);
transform.DOScale(new Vector3(1f, 1f, 1f), 0.2f);
//gameObject.transform.localScale = new Vector3(1f, 1f, 1f);
}
// Start is called before the first frame update
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: eec3152daffe9ff4895d210abfb2ebc5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,97 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Assets.Scripts.UI.Prefab.Login
{
public static class DayOptions
{
private static List<Dropdown.OptionData> SetOptions(int day)
{
var op = new Dropdown.OptionDataList();
for (int m = 1; m <= day; m++)
{
op.options.Add(new Dropdown.OptionData(m.ToString()));
}
return op.options;
}
public static List<Dropdown.OptionData> dayOption28 = SetOptions(28);
public static List<Dropdown.OptionData> dayOption29 = SetOptions(29);
public static List<Dropdown.OptionData> dayOption30 = SetOptions(30);
public static List<Dropdown.OptionData> dayOption31 = SetOptions(31);
}
public class CountryModel
{
public string country { get;set; }
public string abbreviation { get; set; }
public string source { get; set; }
}
public class LoginRegOptions
{
public List<Dropdown.OptionData> years;
public List<Dropdown.OptionData> months;
public List<Dropdown.OptionData> days;
public List<Dropdown.OptionData> genders;
public List<Dropdown.OptionData> countrys;
public List<Dropdown.OptionData> units;
public int countryDefaultValue;
private List<CountryModel> countryList;
public LoginRegOptions()
{
years = new List<Dropdown.OptionData>();
for (int y = 1970; y <= 2021; y++)
{
years.Add(new Dropdown.OptionData(y.ToString()));
}
months = new List<Dropdown.OptionData>();
for (int m = 1; m <= 12; m++)
{
months.Add(new Dropdown.OptionData(m.ToString()));
}
days = new List<Dropdown.OptionData>();
genders = new List<Dropdown.OptionData>() {new Dropdown.OptionData("Male"), new Dropdown.OptionData("FeMale") };
var countryJson = Resources.Load<TextAsset>("UI/flags-mini").text;
countryList = JsonConvert.DeserializeObject<List<CountryModel>>(countryJson);
countrys = countryList.Select(x => new Dropdown.OptionData(x.country)).ToList();
countryDefaultValue = countryList.FindIndex(x => x.country == "中国");
units = new List<Dropdown.OptionData>() { new Dropdown.OptionData("Metric"), new Dropdown.OptionData("Imperial") };
}
public Texture GetCountryImage(int index)
{
var c = countryList[index];
if (c == null) return null;
return Resources.Load<Texture>(c.source);
}
public int GetCountryIndexByCode(string code)
{
var c = countryList.FindIndex(x => x.abbreviation.ToLower() == code.ToLower());
if (c == -1) return countryDefaultValue;
return c;
}
public List<Dropdown.OptionData> GetDayOptions(int year,int month)
{
if (new int[] { 1, 3, 5, 7, 8, 10, 12 }.Contains(month))
{
return DayOptions.dayOption31;
}
else if (new int[] { 4, 6, 9, 11 }.Contains(month))
{
return DayOptions.dayOption30;
}
else if (month == 2)
{
return DateTime.IsLeapYear(year) ? DayOptions.dayOption29 : DayOptions.dayOption28;
}
else
{
return days;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ca65c2211952c474ebd054dbec009223
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,101 @@
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
public class QuickLoginScroll : MonoBehaviour
{
// Start is called before the first frame update
private ScrollRect scroll;
private Transform content;
private float contentSize;
private int count;
[SerializeField] Button L, R;
void Start()
{
scroll = gameObject.GetComponent<ScrollRect>();
content = gameObject.transform.Find("Viewport").Find("Content");
//Initial();
if (L != null)
{
L.onClick.AddListener(goLeft);
}
if (R != null)
{
R.onClick.AddListener(goRight);
}
}
public void Initial()
{
count = content.childCount;
if (content.childCount - 2 > 0)
{
contentSize = 1f / (content.childCount - 2);
}
else
{
contentSize = 0;
}
//scroll.horizontalNormalizedPosition = 0;
Canvas.ForceUpdateCanvases();
scroll.horizontalNormalizedPosition = contentSize/2;
SetColor();
}
void goLeft()
{
if (scroll.horizontalNormalizedPosition <= contentSize) return;
if (!start) startPosition = scroll.horizontalNormalizedPosition;
start = true;
scrollValue = -1 * contentSize / 30;
}
void goRight()
{
if ((scroll.horizontalNormalizedPosition + contentSize) >= 1) return;
if (!start) startPosition = scroll.horizontalNormalizedPosition;
start = true;
scrollValue = contentSize / 30;
}
private bool start = false, _lock = false;
private float scrollValue = 0, totalScrollValue = 0, startPosition = 0;
void SetColor()
{
int index = (int)System.Math.Round(
(scroll.horizontalNormalizedPosition + (contentSize / 2)) / contentSize,
0);
for (int i = 1; i < content.childCount-1; i++)
{
string c;
if (i == index)
{
content.GetChild(i).GetComponent<QuickLoginUser>().setActive();
}
else
{
content.GetChild(i).GetComponent<QuickLoginUser>().setNoActive();
}
}
}
// Update is called once per frame
void Update()
{
if (start)
{
totalScrollValue += scrollValue;
if (System.Math.Abs(totalScrollValue) >= contentSize)
{
scrollValue = 0;
start = false;
scroll.horizontalNormalizedPosition = startPosition + totalScrollValue;
//Debug.Log();
SetColor();
totalScrollValue = 0;
}
else
{
scroll.horizontalNormalizedPosition += scrollValue;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a77e784c857a15f4593d004821ce2757
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,106 @@
using Assets.Scripts;
using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models;
using DG.Tweening;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class QuickLoginUser : MonoBehaviour
{
QUserInfo user;
// Start is called before the first frame update
void Start()
{
}
public void Initial(QUserInfo user)
{
if (user ==null) return;
transform.GetComponent<Button>().onClick.AddListener(() =>
{
ApiBase.SetCookie(user.Cookie);
var r = ConfigHelper.userApi.GetUserInfo();
if (r.result)
{
//ConfigHelper.CurrentUser = r.data.Value<UserResultModel>("user");
//ConfigHelper.CurrentUser = re;
var usermodel = r.data.Value<JObject>("user");
App.CurrentUser = new UserModel
{
NickName = usermodel.Value<string>("NickName"),
Ftp = usermodel.Value<int>("FTP"),
Weight = usermodel.Value<double>("Weight"),
BicycleWeight = usermodel.Value<double>("BicycleWeight"),
Carlories = "",
Avatar = usermodel.Value<string>("WxHeadImg"),
Distance = 0,
Climb = "",
};
SceneManager.LoadScene("MainScene");
}
else
{
Utils.showToast(gameObject, r.errMsg);
}
});
this.user = user;
Utils.DisplayImage(StartCoroutine, transform.Find("Avatar").GetComponent<RawImage>(),user.Avatar);
transform.Find("NickNameText").GetComponent<Text>().text = user.NickName;
transform.Find("BtnDelete").GetComponent<Button>().onClick.AddListener(DestroySelf);
}
// Update is called once per frame
void Update()
{
}
private void OnDestroy()
{
}
void DestroySelf()
{
var content = transform.parent;
var index = transform.GetSiblingIndex() - 1;
DestroyImmediate(gameObject);
//if (content.childCount == 2)
//{
// var info = Instantiate(Resources.Load<GameObject>("UI/Prefab/Login/QuickUserInfo")).transform;
// info.GetComponent<QuickLoginUser>().Initial(null);
// info.parent = content;
// info.localScale = new Vector3(1, 1, 1);
// content.Find("empty1").transform.SetSiblingIndex(0);
// content.Find("empty2").transform.SetSiblingIndex(content.childCount - 1);
//}
content.parent.parent.GetComponent<QuickLoginScroll>().Initial();
DeleteList(index);
}
private void DeleteList(int index)
{
var userInfosJson = PlayerPrefs.GetString("UserInfos");
var userInfos = JsonConvert.DeserializeObject<List<QUserInfo>>(userInfosJson);
userInfos.RemoveAt(index);
PlayerPrefs.SetString("UserInfos", JsonConvert.SerializeObject(userInfos));
}
public void setActive()
{
//ColorUtility.TryParseHtmlString("#ffffffff", out Color color);
//transform.Find("Avatar").GetComponent<RawImage>().color = color;
transform.Find("Avatar").GetComponent<RawImage>().DOFade(1f, 0.3f);
transform.GetComponent<Button>().enabled = true;
transform.Find("NickNameText").GetComponent<Text>().enabled = true;
}
public void setNoActive()
{
//ColorUtility.TryParseHtmlString("#ffffff80", out Color color);
//transform.Find("Avatar").GetComponent<RawImage>().color = color;
transform.Find("Avatar").GetComponent<RawImage>().DOFade(0.5f, 0.3f);
transform.GetComponent<Button>().enabled = false;
transform.Find("NickNameText").GetComponent<Text>().enabled = false;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 26e36fe24c739ed4eb5fc882dc2a1340
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,89 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(ScrollRect))]
public class ScrollRectAutoScroll : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public float scrollSpeed = 10f;
private bool mouseOver = false;
private List<Selectable> m_Selectables = new List<Selectable>();
private ScrollRect m_ScrollRect;
private Vector2 m_NextScrollPosition = Vector2.up;
void OnEnable()
{
if (m_ScrollRect)
{
m_ScrollRect.content.GetComponentsInChildren(m_Selectables);
}
}
void Awake()
{
m_ScrollRect = GetComponent<ScrollRect>();
}
void Start()
{
if (m_ScrollRect)
{
m_ScrollRect.content.GetComponentsInChildren(m_Selectables);
}
ScrollToSelected(true);
}
void Update()
{
// Scroll via input.
InputScroll();
if (!mouseOver)
{
// Lerp scrolling code.
m_ScrollRect.normalizedPosition = Vector2.Lerp(m_ScrollRect.normalizedPosition, m_NextScrollPosition, scrollSpeed * Time.deltaTime);
}
else
{
m_NextScrollPosition = m_ScrollRect.normalizedPosition;
}
}
void InputScroll()
{
if (m_Selectables.Count > 0)
{
if (Input.GetButtonDown("Horizontal") || Input.GetButtonDown("Vertical") || Input.GetButton("Horizontal") || Input.GetButton("Vertical"))
{
ScrollToSelected(false);
}
}
}
void ScrollToSelected(bool quickScroll)
{
int selectedIndex = -1;
Selectable selectedElement = EventSystem.current.currentSelectedGameObject ? EventSystem.current.currentSelectedGameObject.GetComponent<Selectable>() : null;
if (selectedElement)
{
selectedIndex = m_Selectables.IndexOf(selectedElement);
}
if (selectedIndex > -1)
{
if (quickScroll)
{
m_ScrollRect.normalizedPosition = new Vector2(0, 1 - (selectedIndex / ((float)m_Selectables.Count - 1)));
m_NextScrollPosition = m_ScrollRect.normalizedPosition;
}
else
{
m_NextScrollPosition = new Vector2(0, 1 - (selectedIndex / ((float)m_Selectables.Count - 1)));
}
}
}
public void OnPointerEnter(PointerEventData eventData)
{
mouseOver = true;
}
public void OnPointerExit(PointerEventData eventData)
{
mouseOver = false;
ScrollToSelected(false);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a6af95c5bd558984fb9ce789f2f13d0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -10,17 +10,17 @@ using UnityEngine.UI;
public class HomeController : PFUIPanel
{
[SerializeField] Text Ftp;
[SerializeField] RawImage Avatar;
[SerializeField] Text Weight;
[SerializeField] Text WKG;
[SerializeField] Text Calories;
[SerializeField] Text KM;
[SerializeField] Text Climb;
[SerializeField] Text NickName;
[SerializeField] Button More;
//[SerializeField] Text Ftp;
//[SerializeField] RawImage Avatar;
//[SerializeField] Text Weight;
//[SerializeField] Text WKG;
//[SerializeField] Text Calories;
//[SerializeField] Text KM;
//[SerializeField] Text Climb;
//[SerializeField] Text NickName;
//[SerializeField] Button More;
[SerializeField] Button BtnRide;
[SerializeField] Transform userInfo;
// Start is called before the first frame update
protected override void Start()
{
@@ -33,11 +33,10 @@ public class HomeController : PFUIPanel
// toast.GetComponent<RectTransform>().position = new Vector3(Screen.width / 2, Screen.height / 2, 0);
// toast.transform.parent = parent;
//}
//if (ConfigHelper.CurrentUser != null)
//{
// SetCurrentUser();
// GetSummary();
//}
if (App.CurrentUser != null)
{
GetSummary();
}
//if (More != null)
//{
// More.onClick.AddListener(MoreFunc);
@@ -50,7 +49,7 @@ public class HomeController : PFUIPanel
UIManager.ShowDevicePanel();
});
var avatar = this.transform.Find("UserInfo").Find("Image");
var avatar = userInfo.Find("Avatar");
UIManager.AddEvent(avatar.gameObject, EventTriggerType.PointerClick, x =>
{
UIManager.ShowUserInfoPanel();
@@ -70,21 +69,31 @@ public class HomeController : PFUIPanel
void SetCurrentUser()
{
var user = ConfigHelper.CurrentUser;
Ftp.text = user.FTP.ToString();
Weight.text = user.Weight.ToString();
WKG.text = $"{user.Weight}KG/{user.BicycleWeight}KG";
NickName.text = user.Nickname;
Utils.DisplayImage(StartCoroutine, Avatar, user.WxHeadImg);
userInfo.Find("NickName").GetComponent<Text>().text = App.CurrentUser.NickName;
userInfo.Find("GroupTop").Find("FtpContainer").Find("FtpValue").GetComponent<Text>().text = App.CurrentUser.Ftp.ToString();
userInfo.Find("GroupTop").Find("WeightContainer").Find("WeightValue").GetComponent<Text>().text = App.CurrentUser.Weight.ToString();
userInfo.Find("GroupTop").Find("WKGContainer").Find("WKGValue").GetComponent<Text>().text = $"{App.CurrentUser.Weight}kg/{App.CurrentUser.BicycleWeight}kg";
userInfo.Find("CaloriesContainer").Find("CaloriesValue").GetComponent<Text>().text = App.CurrentUser.Carlories;
userInfo.Find("KMContainer").Find("KMValue").GetComponent<Text>().text = App.CurrentUser.Distance.ToString("#0.00");
userInfo.Find("ClimbContainer").Find("ClimbValue").GetComponent<Text>().text = App.CurrentUser.Climb;
//var user = ConfigHelper.CurrentUser;
//Ftp.text = user.FTP.ToString();
//Weight.text = user.Weight.ToString();
//WKG.text = $"{user.Weight}KG/{user.BicycleWeight}KG";
//NickName.text = user.Nickname;
Utils.DisplayImage(StartCoroutine, userInfo.Find("Avatar").GetComponent<RawImage>(), App.CurrentUser.Avatar);
}
void GetSummary()
{
var res = ConfigHelper.userApi.GetSummary();
if (res.result)
{
KM.text = $"{res.data.TotalDistance.ToString("#0.00")}KM";
Climb.text = $"{res.data.TotalClimb.ToString()}M";
Calories.text = $"{res.data.Kcal.ToString()}KCAL";
App.CurrentUser.Distance = res.data.TotalDistance;
App.CurrentUser.Climb = res.data.TotalClimb;
App.CurrentUser.Carlories = res.data.Kcal;
SetCurrentUser();
//Climb.text = $"{res.data.TotalClimb.ToString()}M";
//Calories.text = $"{res.data.Kcal.ToString()}KCAL";
//Calories.text = res.data.
}
else