Browse Source

add login page

dev
刘嘉炜 3 weeks ago
parent
commit
ecd7fe59b5
  1. 3
      src/api/index.js
  2. 32
      src/api/server.js
  3. 11
      src/pages.json
  4. 7
      src/subpackage/authorize/api/index.js
  5. 131
      src/subpackage/authorize/pages/index.vue
  6. BIN
      src/subpackage/authorize/static/images/authorize.png
  7. 10
      src/utils/polish.js

3
src/api/index.js

@ -1,6 +1,9 @@
import server from './server';
// 公共
export const douyinMiniAppLoginAndSync = params => server.post({ url: '/user/douyinMiniAppLoginAndSync', ...params }); // 抖音小程序授权
export const login = params => server.post({ url: '/Admino/AdminUser/login', ...params }); // 登录
export const stadiumFind = params => server.post({ url: '/stadium/find', ...params }); // 登录
export const stadiumBookList = params => server.post({ url: '/stadium/book/list', ...params }); // 订场列表

32
src/api/server.js

@ -35,26 +35,26 @@ server.interceptors.response.use(
loading.hide(response.config.loading);
if(response?.data?.code === 0)return formatResponse(response);
console.error(`get ${response?.config?.url} err -> `, response)
// return errorHandle({
// Catch: response?.config?.catch || false,
// content: response?.data?.smsg ?? '请求失败',
// data: response,
// success: () => {
// // 登录超时
// if(response?.data?.error === '201')loginHandle();
// if(response?.data?.error === '704'&&response?.data?.smsg === 'ustoken不能为空')loginHandle();
// }
// })
return errorHandle({
Catch: response?.config?.catch || false,
content: response?.data?.message ?? '请求失败',
data: response,
success: () => {
// 登录超时
// if(response?.data?.error === '201')loginHandle();
// if(response?.data?.error === '704'&&response?.data?.smsg === 'ustoken不能为空')loginHandle();
}
})
},
error => {
loading.hide(error.config.loading);
console.error('server.interceptors.response error -> ', error);
// return errorHandle({
// Catch: error?.config?.catch || false,
// // 404 拦截 data 会存在错误信息
// content: error?.data ?? error?.errMsg ?? '请求失败',
// data: error,
// })
return errorHandle({
Catch: error?.config?.catch || false,
// 404 拦截 data 会存在错误信息
content: error?.data ?? error?.errMsg ?? '请求失败',
data: error,
})
}
)

11
src/pages.json

@ -15,6 +15,17 @@
],
"subpackages": [
{
"root": "subpackage/authorize",
"pages": [
{
"path": "pages/index",
"style": {
"navigationBarTitleText": "登录"
}
}
]
},
{
"root": "subpackage/order",
"pages": [
{

7
src/subpackage/authorize/api/index.js

@ -0,0 +1,7 @@
import server from '@/api/server';
// 公共
export const douyinMiniAppBaseAuth = params => server.post({ url: '/user/douyinMiniAppBaseAuth', ...params }); // 抖音小程序code登录

131
src/subpackage/authorize/pages/index.vue

@ -0,0 +1,131 @@
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { reactive, ref } from 'vue';
import { showLoad, hideLoad, showModal } from "@/utils/polish";
import { douyinMiniAppBaseAuth } from "../api";
let loginRes = ref(null);
let dyPhoneAuthorize = ref(false);
const APPID = tt.getEnvInfoSync()?.microapp?.appId ?? '';
onLoad(() => {
dysilentLogin();
});
// code code
let dyGetLoginCode = async function(){
try{
showLoad();
let _loginRes = await uni.login();
hideLoad();
if(!_loginRes.code){
return showModal({
content: '获取登陆凭证失败!请稍后重试',
// success: _=> this.routeOperate(),
})
}
return loginRes.value = _loginRes;
}catch(err){
hideLoad();
return showModal({
content: '获取登陆凭证失败!请稍后重试',
// success: _=> this.routeOperate(),
})
}
}
//
//
const dysilentLogin = async function(){
try{
let _loginRes = await dyGetLoginCode();
let _bData = await douyinMiniAppBaseAuth({ data: { code: _loginRes.code, appid: APPID } });
console.log(_bData);
// await this.dyCheckPhoneStatus(_bData, true);
}catch(err){
hideLoad();
console.warn('silentLogin err --->', err);
}
}
//
let dyCheckPhoneStatus = async function(_bData, isSilent = false){
if(_bData.data.code == 0){
let _data = _bData.data.data;
if(_data?.user?.extension?.is_auth_mobile === false){ //
let _codeInfo = await dyGetLoginCode();
if(_codeInfo&&_codeInfo.code){
dyPhoneAuthorize.value = true;
!isSilent&&showNone('未绑定手机,请用手机号登陆!');
}
return;
}
//
if(_data?.token&&!isSilent)return this.successOperate(_bData);
}else if(_bData.data.code == 11005){ //
let _codeInfo = await dyGetLoginCode();
if(_codeInfo&&_codeInfo.code){
dyPhoneAuthorize.value = true;
!isSilent&&showNone('未授权,请用手机号登陆!');
}
}else{
!isSilent&&showNone(_bData.data.message || '登陆失败!');
}
}
</script>
<template>
<view class="authorize-index">
<view class="ac-tit">您还未登录</view>
<view class="ac-tip">请先登录再进行操作</view>
<image class="ac-img" mode="aspectFit" src="@/subpackage/authorize/static/images/authorize.png"></image>
<view class="ac-btns">
<button v-if="false" plain class="ab-btn" open-type="getPhoneNumber">抖音手机号授权快捷登录</button>
<button v-else plain class="ab-btn" >抖音用户信息授权登录</button>
<button plain class="ab-btn" hover-class="hover-active" @click="cancel">暂不登录</button>
</view>
</view>
</template>
<style lang="scss" scoped>
.authorize-index{
padding-top: 124upx;
.ac-tit{
text-align: center;
@include flcw(32upx, 44upx, #333, 500);
}
.ac-tip{
margin-top: 20upx;
text-align: center;
@include flcw(28upx, 40upx, #9A9A9D);
}
.ac-img{
display: block;
margin: 2upx auto 0;
width: 578upx;
height: 578upx;
}
.ac-btns{
margin-top: 62upx;
width: 100%;
padding: 0 20upx;
.ab-btn{
@include clearBtn;
margin-top: 24upx;
text-align: center;
border: 2upx solid $mColor;
border-radius: 44upx;
background-color: $mColor;
@include flcw(28up, 84upx, #fff);
&+.ab-btn{
border-color: #C9C9CB;
color: #9a9a9d;
background-color: transparent;
}
}
}
}
</style>

BIN
src/subpackage/authorize/static/images/authorize.png

After

Width: 578  |  Height: 578  |  Size: 26 KiB

10
src/utils/polish.js

@ -89,6 +89,16 @@ export function jsonPar(json){
return JSON.parse(decodeURIComponent(decodeURIComponent(json)))
}
export function showLoad(title='加载中', mask=true){
uni.showLoading({
mask,
title,
})
}
export function hideLoad(){
uni.hideLoading()
}
export default {
routeTo,

Loading…
Cancel
Save