添加登录代码
This commit is contained in:
parent
8e3beb44d9
commit
9cb8aa0bac
@ -32,7 +32,7 @@ const request={
|
|||||||
avatarUrl:params.avatarUrl
|
avatarUrl:params.avatarUrl
|
||||||
}
|
}
|
||||||
return net.request({
|
return net.request({
|
||||||
api:'/api/token',
|
api:'/api/v1/token',
|
||||||
data,
|
data,
|
||||||
header:{
|
header:{
|
||||||
'content-type': 'application/x-www-form-urlencoded'
|
'content-type': 'application/x-www-form-urlencoded'
|
||||||
@ -58,6 +58,12 @@ const request={
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
bindingWX:function(data:any) {
|
||||||
|
return net.request({
|
||||||
|
api:'/api/user/binding/wechat',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
getWineList:function(data:any) {
|
getWineList:function(data:any) {
|
||||||
return net.request({
|
return net.request({
|
||||||
api:'/api/v1/wine',
|
api:'/api/v1/wine',
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// var baseUrl = "https://dfhd.guwengkj.com";
|
// var baseUrl = "https://wine.api.echol.cn";
|
||||||
var baseUrl = "http://192.168.1.40:8083";
|
var baseUrl = "http://192.168.1.40:8083";
|
||||||
// const APPID = "wx3d38ce1103a82225";
|
// const APPID = "wx29f3e0dc2f7f2c54";
|
||||||
// const SECRET = '3c41ca428b4d0f43cfaef6f567a1cc06';
|
// const SECRET = '95a893451cf25b696612a7d1735a04b8';
|
||||||
const service = {
|
const service = {
|
||||||
request:(options:any) => {
|
request:(options:any) => {
|
||||||
let {api,data={},method="POST",header='',callback} = options
|
let {api,data={},method="POST",header='',callback} = options
|
||||||
@ -18,6 +18,7 @@ const service = {
|
|||||||
'content-type': 'application/json'
|
'content-type': 'application/json'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// let auth = base64encode("admin:admin")
|
||||||
header["Authorization"]=token || 'Basic ZGV2OmRldjEyMw== '
|
header["Authorization"]=token || 'Basic ZGV2OmRldjEyMw== '
|
||||||
return new Promise((resolve,reject)=>{
|
return new Promise((resolve,reject)=>{
|
||||||
wx.request({
|
wx.request({
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
"pages/logs/logs",
|
"pages/logs/logs",
|
||||||
"pages/star/star",
|
"pages/star/star",
|
||||||
"pages/search/search",
|
"pages/search/search",
|
||||||
"pages/detail/detail"
|
"pages/detail/detail",
|
||||||
|
"pages/login/login"
|
||||||
],
|
],
|
||||||
"window": {
|
"window": {
|
||||||
"backgroundTextStyle": "light",
|
"backgroundTextStyle": "light",
|
||||||
@ -20,13 +21,13 @@
|
|||||||
{
|
{
|
||||||
"pagePath": "pages/home/home",
|
"pagePath": "pages/home/home",
|
||||||
"text": "酒单",
|
"text": "酒单",
|
||||||
"iconPath":"./images/menu.png",
|
"iconPath": "./images/menu.png",
|
||||||
"selectedIconPath": "./images/menu.png"
|
"selectedIconPath": "./images/menu.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "pages/index/index",
|
"pagePath": "pages/index/index",
|
||||||
"text": "我的",
|
"text": "我的",
|
||||||
"iconPath":"./images/home.png",
|
"iconPath": "./images/home.png",
|
||||||
"selectedIconPath": "./images/home.png"
|
"selectedIconPath": "./images/home.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -58,4 +58,9 @@
|
|||||||
height: 1px;
|
height: 1px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tip{
|
||||||
|
font-size: 12px;
|
||||||
|
color: gray;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,16 +1,22 @@
|
|||||||
// app.ts
|
// app.ts
|
||||||
|
let api = require("./api/index")
|
||||||
App<IAppOption>({
|
App<IAppOption>({
|
||||||
globalData: {},
|
globalData: {
|
||||||
onLaunch() {
|
userInfo: undefined,
|
||||||
|
isLogin: false,
|
||||||
|
code:null
|
||||||
|
},
|
||||||
|
async onLaunch() {
|
||||||
// 展示本地存储能力
|
// 展示本地存储能力
|
||||||
const logs = wx.getStorageSync('logs') || []
|
// const logs = wx.getStorageSync('logs') || []
|
||||||
logs.unshift(Date.now())
|
// logs.unshift(Date.now())
|
||||||
wx.setStorageSync('logs', logs)
|
// wx.setStorageSync('logs', logs)
|
||||||
|
|
||||||
// 登录
|
// 登录
|
||||||
wx.login({
|
wx.login({
|
||||||
success: res => {
|
success: res => {
|
||||||
console.log(res.code)
|
console.log(res.code)
|
||||||
|
this.globalData.code = res.code
|
||||||
// 发送 res.code 到后台换取 openId, sessionKey, unionId
|
// 发送 res.code 到后台换取 openId, sessionKey, unionId
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -21,5 +27,9 @@ App<IAppOption>({
|
|||||||
console.log(res);
|
console.log(res);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
// 检查是否登录
|
||||||
|
const login_res = await api.checkLogin()
|
||||||
|
console.log(login_res)
|
||||||
|
this.globalData.isLogin = login_res
|
||||||
|
}
|
||||||
})
|
})
|
BIN
miniprogram/assets/avatar.png
Normal file
BIN
miniprogram/assets/avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.0 KiB |
@ -1,5 +1,6 @@
|
|||||||
// pages/home/home.ts
|
// pages/home/home.ts
|
||||||
const api = require("../../api/index")
|
const api = require("../../api/index")
|
||||||
|
const app = getApp<IAppOption>()
|
||||||
Page({
|
Page({
|
||||||
/**
|
/**
|
||||||
* 页面的初始数据
|
* 页面的初始数据
|
||||||
@ -97,6 +98,8 @@ Page({
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
async getList() {//获取列表
|
async getList() {//获取列表
|
||||||
|
app.globalData.isLogin = api.checkLogin(1)
|
||||||
|
// app.globalData.isLogin = login_state
|
||||||
const res = await api.getWineList({
|
const res = await api.getWineList({
|
||||||
current:1,
|
current:1,
|
||||||
size:10
|
size:10
|
||||||
|
4
miniprogram/pages/login/login.json
Normal file
4
miniprogram/pages/login/login.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"usingComponents": {},
|
||||||
|
"navigationBarTitleText": "登录"
|
||||||
|
}
|
42
miniprogram/pages/login/login.scss
Normal file
42
miniprogram/pages/login/login.scss
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* pages/login/login.wxss */
|
||||||
|
page{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.container{
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.title{
|
||||||
|
font-weight: bolder;
|
||||||
|
font-size: 40rpx;
|
||||||
|
}
|
||||||
|
.more-info{
|
||||||
|
color: gray;
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
.buy-btn{
|
||||||
|
margin-top:1rem;
|
||||||
|
background-color: #000;
|
||||||
|
color: white;
|
||||||
|
border-radius: 50rpx;
|
||||||
|
font-weight: 200;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
.title-part{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.avatar-wrapper{
|
||||||
|
width: 80rpx !important;
|
||||||
|
height: 80rpx;
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0 auto;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
.avatar{
|
||||||
|
width: 80rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
}
|
||||||
|
.weui-input{
|
||||||
|
|
||||||
|
}
|
154
miniprogram/pages/login/login.ts
Normal file
154
miniprogram/pages/login/login.ts
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
// pages/login/login.ts
|
||||||
|
const defaultAvatarUrl = '../../assets/avatar.png'
|
||||||
|
const api = require("../../api/index")
|
||||||
|
const app = getApp<IAppOption>()
|
||||||
|
Page({
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面的初始数据
|
||||||
|
*/
|
||||||
|
data: {
|
||||||
|
avatarUrl:defaultAvatarUrl ,
|
||||||
|
nickName:''
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期函数--监听页面加载
|
||||||
|
*/
|
||||||
|
onLoad() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期函数--监听页面初次渲染完成
|
||||||
|
*/
|
||||||
|
onReady() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期函数--监听页面显示
|
||||||
|
*/
|
||||||
|
onShow() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期函数--监听页面隐藏
|
||||||
|
*/
|
||||||
|
onHide() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期函数--监听页面卸载
|
||||||
|
*/
|
||||||
|
onUnload() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面相关事件处理函数--监听用户下拉动作
|
||||||
|
*/
|
||||||
|
onPullDownRefresh() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面上拉触底事件的处理函数
|
||||||
|
*/
|
||||||
|
onReachBottom() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户点击右上角分享
|
||||||
|
*/
|
||||||
|
onShareAppMessage() {
|
||||||
|
|
||||||
|
},
|
||||||
|
onChooseAvatar(e:any) {
|
||||||
|
console.log(e);
|
||||||
|
const { avatarUrl } = e.detail
|
||||||
|
this.setData({
|
||||||
|
avatarUrl,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async toWXLogin() {
|
||||||
|
console.log(app.globalData.code)
|
||||||
|
wx.showLoading({
|
||||||
|
title: '加载中',
|
||||||
|
})
|
||||||
|
if(!this.data.nickName) {
|
||||||
|
wx.showToast({
|
||||||
|
title:'请填写昵称',
|
||||||
|
icon: 'error',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const token_res = await api.getAccess_token({code:app.globalData.code,nickName:this.data.nickName,avatarUrl:this.data.avatarUrl});
|
||||||
|
if(token_res.code == 200){
|
||||||
|
// 设置缓存
|
||||||
|
wx.setStorageSync('token', token_res.data.access_token);//token
|
||||||
|
wx.setStorageSync('userId', token_res.data.userId);//userId
|
||||||
|
wx.setStorageSync('nickName', this.data.nickName);//nickName
|
||||||
|
wx.setStorageSync('avatarUrl', this.data.avatarUrl);//avatarUrl
|
||||||
|
//绑定微信
|
||||||
|
const login_res =await api.bindingWX({code:app.globalData.code});
|
||||||
|
if(login_res.code == 200){
|
||||||
|
wx.hideLoading()
|
||||||
|
wx.navigateBack({
|
||||||
|
delta: -1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
wx.hideLoading()
|
||||||
|
wx.showToast({
|
||||||
|
title:token_res.message,
|
||||||
|
icon: 'error',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getPhoneNumber (e:any) {//获取手机号
|
||||||
|
// var _this=this;
|
||||||
|
console.log(e)
|
||||||
|
wx.showLoading({
|
||||||
|
title: '加载中',
|
||||||
|
})
|
||||||
|
if(!this.data.nickName) {
|
||||||
|
wx.showToast({
|
||||||
|
title:'请填写昵称',
|
||||||
|
icon: 'error',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const token_res = await api.getAccess_token({code:e.detail.code,nickName:this.data.nickName,avatarUrl:this.data.avatarUrl});
|
||||||
|
if(token_res.code == 200){
|
||||||
|
// 设置缓存
|
||||||
|
wx.setStorageSync('token', token_res.data.access_token);//token
|
||||||
|
wx.setStorageSync('userId', token_res.data.userId);//userId
|
||||||
|
wx.setStorageSync('nickName', this.data.nickName);//nickName
|
||||||
|
wx.setStorageSync('avatarUrl', this.data.avatarUrl);//avatarUrl
|
||||||
|
//绑定微信
|
||||||
|
const login_res =await api.toLogin();
|
||||||
|
if(login_res.code == 200){
|
||||||
|
wx.hideLoading()
|
||||||
|
wx.navigateBack({
|
||||||
|
delta: -1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
wx.hideLoading()
|
||||||
|
wx.showToast({
|
||||||
|
title:token_res.message,
|
||||||
|
icon: 'error',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
24
miniprogram/pages/login/login.wxml
Normal file
24
miniprogram/pages/login/login.wxml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<!--pages/login/login.wxml-->
|
||||||
|
<view class="page-box" style="margin-top: 50%;">
|
||||||
|
<!-- <view class="img-part card-part" style="text-align:center">
|
||||||
|
<image mode="aspectFit" style="width: 250rpx;height: 250rpx;" src="../../assets/ico.jpg"></image>
|
||||||
|
</view>
|
||||||
|
<view class="title-part card-part">
|
||||||
|
<view class="title">东方蝴蝶</view>
|
||||||
|
<view class="more-info">使用当前微信登录</view>
|
||||||
|
</view> -->
|
||||||
|
<view class="img-part card-part" style="text-align:center">
|
||||||
|
<!-- <image mode="aspectFit" style="width: 250rpx;height: 250rpx;" src="../../assets/ico.jpg"></image> -->
|
||||||
|
<view class="tip">
|
||||||
|
点击下方头像位置获取微信头像
|
||||||
|
</view>
|
||||||
|
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar" style="border-radius: 50%;">
|
||||||
|
<image class="avatar" mode="aspectFill" src="{{avatarUrl}}"></image>
|
||||||
|
</button>
|
||||||
|
<input type="nickname" class="weui-input" placeholder="点击获取微信昵称" model:value="{{nickName}}" />
|
||||||
|
</view>
|
||||||
|
<view class="btn-part">
|
||||||
|
<!-- <button class="buy-btn" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">立即登录</button> -->
|
||||||
|
<button class="buy-btn" bindtap="toWXLogin">立即登录</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
@ -1,5 +1,6 @@
|
|||||||
// pages/star/star.ts
|
// pages/star/star.ts
|
||||||
const api = require("../../api/index")
|
const api = require("../../api/index")
|
||||||
|
const app = getApp<IAppOption>()
|
||||||
Page({
|
Page({
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,6 +79,8 @@ Page({
|
|||||||
|
|
||||||
},
|
},
|
||||||
async getList() {
|
async getList() {
|
||||||
|
console.log(app.globalData.isLogin)
|
||||||
|
if(app.globalData.isLogin) {
|
||||||
const res = await api.getMyWineList({
|
const res = await api.getMyWineList({
|
||||||
current:1,
|
current:1,
|
||||||
size:10
|
size:10
|
||||||
@ -86,4 +89,11 @@ Page({
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{ // 跳转登录页
|
||||||
|
wx.navigateTo({
|
||||||
|
url:'../login/login'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
})
|
})
|
@ -1,5 +1,5 @@
|
|||||||
<view class="container" style="padding: 10px;">
|
<view class="container" style="padding: 10px;">
|
||||||
<view class="list-part c-part">
|
<view class="list-part c-part" wx:if="isLogin">
|
||||||
<view class="lp-card" wx:for="{{list}}" wx:for-item="item" wx:key="id">
|
<view class="lp-card" wx:for="{{list}}" wx:for-item="item" wx:key="id">
|
||||||
<view class="lpc-name-box">
|
<view class="lpc-name-box">
|
||||||
<view class="lpc-name text-ellipsis-1" style="margin-bottom: 5px;"> {{item.name}}</view>
|
<view class="lpc-name text-ellipsis-1" style="margin-bottom: 5px;"> {{item.name}}</view>
|
||||||
|
47
miniprogram/utils/custom.ts
Normal file
47
miniprogram/utils/custom.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
const custom = {
|
||||||
|
encode (input:any) {
|
||||||
|
let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||||
|
let output = "";
|
||||||
|
let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
||||||
|
let i = 0;
|
||||||
|
input = this.utf8_encode(input);
|
||||||
|
while (i < input.length) {
|
||||||
|
chr1 = input.charCodeAt(i++);
|
||||||
|
chr2 = input.charCodeAt(i++);
|
||||||
|
chr3 = input.charCodeAt(i++);
|
||||||
|
enc1 = chr1 >> 2;
|
||||||
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||||
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||||
|
enc4 = chr3 & 63;
|
||||||
|
if (isNaN(chr2)) {
|
||||||
|
enc3 = enc4 = 64;
|
||||||
|
} else if (isNaN(chr3)) {
|
||||||
|
enc4 = 64;
|
||||||
|
}
|
||||||
|
output = output +
|
||||||
|
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
|
||||||
|
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
},
|
||||||
|
utf8_encode(input) {
|
||||||
|
input = input.replace(/\r\n/g,"\n");
|
||||||
|
let utftext = "";
|
||||||
|
for (let n = 0; n < input.length; n++) {
|
||||||
|
let c = input.charCodeAt(n);
|
||||||
|
if (c < 128) {
|
||||||
|
utftext += String.fromCharCode(c);
|
||||||
|
} else if((c > 127) && (c < 2048)) {
|
||||||
|
utftext += String.fromCharCode((c >> 6) | 192);
|
||||||
|
utftext += String.fromCharCode((c & 63) | 128);
|
||||||
|
} else {
|
||||||
|
utftext += String.fromCharCode((c >> 12) | 224);
|
||||||
|
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||||
|
utftext += String.fromCharCode((c & 63) | 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return utftext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports = custom
|
@ -22,7 +22,7 @@
|
|||||||
"simulatorPluginLibVersion": {},
|
"simulatorPluginLibVersion": {},
|
||||||
"condition": {},
|
"condition": {},
|
||||||
"srcMiniprogramRoot": "miniprogram/",
|
"srcMiniprogramRoot": "miniprogram/",
|
||||||
"appid": "wx3d38ce1103a82225",
|
"appid": "wx29f3e0dc2f7f2c54",
|
||||||
"libVersion": "2.31.0",
|
"libVersion": "2.31.0",
|
||||||
"editorSetting": {
|
"editorSetting": {
|
||||||
"tabIndent": "insertSpaces",
|
"tabIndent": "insertSpaces",
|
||||||
|
2
typings/index.d.ts
vendored
2
typings/index.d.ts
vendored
@ -3,6 +3,8 @@
|
|||||||
interface IAppOption {
|
interface IAppOption {
|
||||||
globalData: {
|
globalData: {
|
||||||
userInfo?: WechatMiniprogram.UserInfo,
|
userInfo?: WechatMiniprogram.UserInfo,
|
||||||
|
isLogin:boolean,
|
||||||
|
code:any
|
||||||
}
|
}
|
||||||
userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback,
|
userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback,
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user