* [xcxLogin.js](http://www.hmoore.net/wangking/uniapp/1899323#xcxLoginjs_1)
* [main.js 中注冊該方法](http://www.hmoore.net/wangking/uniapp/1899323#mainjs__157)
* [客戶端調用](http://www.hmoore.net/wangking/uniapp/1899323#_177)
## xcxLogin.js
> 存放路徑 /common/xcxLogin.js
> 參考 《[一個5年的web前端開源的uni-app快速開發模板](https://ext.dcloud.net.cn/plugin?id=2009)》
~~~
import store from '@/config/store';
import $http from '@/config/requestConfig'
import base from '@/config/baseUrl';
// #ifdef H5
import { h5Login } from '@/config/html5Utils';
// #endif
let code = "";
let loginStart = true;
let userInfo = {
token: ""
};
let lastPageUrl = "";
// 微信小程序登錄
function onLogin(type = "judge",callback) {
//判斷登錄狀態
if (loginStart) {
lastPageUrl = "";
loginStart = false;
const _this = this;
let platform;
// #ifdef MP-WEIXIN
platform = 'weixin';
// #endif
// #ifdef MP-ALIPAY
platform = 'alipay';
// #endif
// #ifdef MP-BAIDU
platform = 'baidu';
// #endif
uni.login({
provider: platform,
success: function(loginRes) {
if (loginRes.errMsg == 'login:ok') {
code = loginRes.code;
// 獲取用戶信息
uni.getUserInfo({
provider: platform,
success: function(infoRes) {
getUserInfo(infoRes, "", callback);
},
fail() {
if(type != "try"){
store.commit('setLoginPopupShow', true);
Object.defineProperty(userInfo, "token", {
get: function(val) {
return {};
},
set: function(newVal) {
callback && callback();
}
});
setTimeout(() => {
loginStart = true;
}, 2000);
}else{
loginStart = true;
}
}
});
}
}
});
}
}
//微信小程序獲取用戶信息
function getUserInfo(info, type, callback) {
let httpData = {
wxSmallCode: code, //小程序code
iv: info.iv, //小程序加密算法的初始向量
encryptedData: info.encryptedData //包括敏感數據在內的完整用戶信息的加密數據
};
// store.state.chatScenesInfo里面是小程序二維碼附帶的信息
if(store.state.chatScenesInfo.recommendCode){
// 推薦碼
httpData.recommendUid = store.state.chatScenesInfo.recommendCode;
}
$http.post('api/open/v1/login', httpData).then(res => {
loginStart = true;
store.commit('setUserInfo', res);
if (type == "authorized") {
userInfo.token = res.token;
store.commit('setLoginPopupShow', false);
}else{
callback && callback();
}
uni.showToast({
title: "登錄成功"
});
}, err => {
loginStart = true;
});
}
//判斷是否登錄(所有端)
function judgeLogin(callback, type = "judge"){
let storeUserInfo = store.state.userInfo;
if(!storeUserInfo.token){ // nvue頁面讀取不到vuex里面數據,將取緩存
storeUserInfo = uni.getStorageSync("userInfo");
}
if (type != "force" && storeUserInfo.token) {
callback();
} else if (storeUserInfo.token && !storeUserInfo.phone) {
if (type == "force") {
uni.navigateTo({
url: '/pages/user/bindPhone'
});
} else {
uni.showModal({
title: "提示",
content: "您還未綁定手機號,請先綁定~",
confirmText: "去綁定",
cancelText: "再逛會",
success: (res) => {
if (res.confirm) {
uni.navigateTo({
url: '/pages/user/bindPhone'
});
}
}
});
}
} else {
// #ifdef MP
onLogin(type, callback);
// #endif
// #ifdef APP-PLUS
uni.showModal({
title: "登錄提示",
content: "此時此刻需要您登錄喔~",
confirmText: "去登錄",
cancelText: "再逛會",
success: (res) => {
if (res.confirm) {
uni.navigateTo({
url: "/pages/user/login"
});
}
}
});
// #endif
// #ifdef H5
h5Login(type, () => {
callback();
});
// #endif
}
}
export {
onLogin,
getUserInfo,
judgeLogin
}
~~~
## main.js 中注冊該方法
> 路徑 /main.js
~~~
import Vue from 'vue'
import App from './App'
import xcxLogin from './common/xcxLogin.js'
Vue.config.productionTip = false
Vue.prototype.$xcxLogin = xcxLogin
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
~~~
## 客戶端調用
> 參考 《[一個5年的web前端開源的uni-app快速開發模板](https://ext.dcloud.net.cn/plugin?id=2009)》
~~~
// 暫無
~~~
- 基礎知識
- UNI核心介紹
- flex布局
- 生命周期
- 全局方法
- 組件定義
- 自定義組件
- 全局組件
- 組件之間的數據傳輸
- 條件編譯
- 自定義頭部
- 節點信息 (SelectorQuery)
- vuejs基礎語法
- 頁面跳轉以及參數傳遞
- 事件的監聽注冊以及觸發
- css3動畫
- block的妙用
- mixin (混入)
- uniapp快捷鍵
- vuex狀態管理
- 實用功能
- 獲取服務提供商
- 啟動頁 / 啟動界面
- 引導頁
- tabbar配置
- 頭部導航欄基礎設置
- 上拉下拉(刷新/加載)
- 第三方登錄
- 第三方分享
- 推送通知 之 unipush
- scroll-view雙聯動
- 配置iOS通用鏈接(Universal Links)
- 本地緩存操作
- 升級/更新方案
- 熱更新
- 圖片上傳
- 搜索頁實現
- canvas繪圖助手
- 地圖定位
- 第三方支付————todo
- 分類輪播
- 清除應用緩存
- uniapp與webview的實時通訊
- 視頻-----todo
- 聊天----todo
- 長列表swiper左右切換
- 第三方插件
- uview
- mescroll
- uCharts (圖表)
- 無名 (更新插件)
- 第三方模版
- 自定義基座
- 打包發行
- 要封裝的方法
- 緩存 cache.js
- 請求接口 request.js
- 工具類 util.js
- 小程序登錄 xcxLogin.js
- 版本更新 update.js
- 優質插件
- 更新插件----todo
- 語音
- 語音識別 (含上傳)
- 百度語音合成播報接口
- 官方常用組建
- input 輸入框
- image 圖片
- audio 音頻
- picker 選擇器
- video 視頻
- scroll-view 滾動視圖
- uni-app 地圖全解析+事件監聽
