星油云站
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

699 lines
18 KiB

<!-- pos机账号登录入口 -->
<template>
<view class="page-content my-bg">
<cu-custom class="main-topbar bg-main-oil" bgColor="bg-main-oil" :isBack="true">
<block slot="content">星油云站</block>
</cu-custom>
<view class="bg-img margin flex padding-lg radius align-center text-center"
:style="'background-image: url('+mainURL+'login-bg.png)'">
<view class="padding-lg margin text-center text-lg text-white w100">
<text class>油站工作人员绑定油站</text>
</view>
</view>
<view class="pannel">
<view class="bg-white margin padding radius shadow-warp">
<view class="cu-form-group">
<view class="title mini-label text-black">手机号</view>
<input type="number" v-model="auth.phone" placeholder="请输入手机号" name="input" @blur="bulrInput" />
</view>
<view class="cu-form-group padding-top-sm" v-if="showRandom">
<view class="title text-black mini-label">验证码</view>
<input type="number" :maxlength="6" v-model="auth.captcha" placeholder="六位数字验证码" name="input" />
<text :class="frozen?'text-gray':'oil-main-color'" @tap="sendMsg">{{tips}}</text>
</view>
<view class=" cu-form-group padding-top-sm" v-else>
<view class="title mini-label text-black">密码</view>
<input type="password" v-model="auth.password" placeholder="请输入登入密码" name="input" />
</view>
</view>
<view class="margin-right padding-right-lg text-right" @tap="showRandom=true" v-if="!showRandom">
<text class="text-sm text-red padding-right">短信验证码登录</text>
</view>
<view class="margin-right padding-right-lg text-right" @tap="showRandom=false" v-else>
<text class="text-sm text-red padding-right">密码登录</text>
</view>
</view>
<view class="margin-lg padding-lg bottom-bg">
<button class="bg-main-oil round" v-if="showRandom" @tap="checkOli(0)">登录</button>
<button class="bg-main-oil round" v-else @tap="checkOli(1)">登录</button>
<view class="text-center margin-top text-gray text-sm padding-right" @tap="showTips">
<text class="cuIcon-question padding-right-xs"></text>突然登不上了
</view>
</view>
<view class="bottom-part">
<service-hotline ref="serviceHotline" :checked='checked' @onCheck="checkAgree" />
</view>
<view class="cu-modal" :class="modalName">
<view class="cu-dialog">
<view class="cu-bar bg-red light justify-end">
<view class="content ">
{{'温馨提示'}}
</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<view class="text-left padding-xl padding-bottom padding-top bg-white">
<view class="padding-bottom-sm">
由于微信平台规则变更,现用户要关注 “星油云站” 公众号,才能登陆
</view>
<view class="padding-bottom-sm ">
之前已经关注过的小部分用户,可能需要重新关注才能登陆,即取消关注,再关注
</view>
<official-account @binderror="bindload" @bindload="binderror"></official-account>
<view class="text-center" @longpress="navToQr" @tap="toQr">
<view class=" img-view">
<image height="200"
src="https://xingka51.oss-cn-hangzhou.aliyuncs.com/applets/cloudSite/yunzhan.jpg"
mode="widthFix"></image>
星油云站公众号
</view>
</view>
<view class="text-center padding-top padding-bottom">
<button class="cu-btn bg-red light round" open-type='contact'
@tap="hideModal">未解决,联系在线客服</button>
</view>
</view>
</view>
</view>
<view class="cu-modal" :class="checkList">
<view class="cu-dialog">
<view class="cu-bar bg-red justify-end">
<view class="content ">
{{ titleText }}
</view>
<view class="action" @tap="hidecheckList">
<text class="cuIcon-close text-white"></text>
</view>
</view>
<view class="text-left padding-xl padding-bottom padding-top bg-white">
<view class="flex align-center justify-between margin-bottom-sm " v-for="(list,i) in oliList"
:key='list' v-if="checkUser">
<view class=""> {{list.otherSiteName}}</view>
<view class="">
<view class=" bg-red cu-btn text-white text-center btn-radius-10 text-sm"
@tap="checkLists(list.channelId)">
进入
</view>
</view>
</view>
<view class="flex align-center justify-between textshowCheck margin-bottom-sm" v-else>
<view class="text-df text-red">
{{errMsg}}
</view>
</view>
</view>
</view>
</view>
<uni-popup ref='popup'>
<view class="protocol_body">
<view class="protocol_header">
使用协议及隐私保护
</view>
<view class="protocol_content">
为了更好地保障您的合法权益,请您阅读并同意 <text style=" color: black; font-weight: 600;"
@click="$refs.serviceHotline.toAgree('xoilCloudUserAgree')">《用户协议》</text> 与 <text
style=" color: black; font-weight: 600;"
@click="$refs.serviceHotline.toAgree('xoilCloudPrivacyAgreement')">《隐私政策》</text>。
</view>
<view class="protocol_footer">
<button @click="$refs.popup.close()" class="protocol_footer_close">取消</button>
<button @click="checked=true;$refs.popup.close();" class="protocol_footer_confirm">确定</button>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import cloudSiteApi from '@/api/cloud-site.js'
import loginApi from '@/api/login.js'
import oliUserApi from '@/api/oli-user.js'
import oilIdentityApi from '@/api/oil-identity.js'
import md5 from 'js-md5'
export default {
data() {
return {
titleText: "",
errMsg: '',
checkUser: false,
checkType: 0,
checkList: '',
modalName: '',
baseURL: this.global.baseURL,
mainURL: this.global.mainURL,
forcedLogin: true,
oilSiteNo: '',
showRandom: true,
auth: {},
tips: '发送验证码',
frozen: false, // 二维码冷却时间
oliList: [{
}],
checked: false
}
},
created() {
uni.showShareMenu()
},
methods: {
checkAgree(val) {
this.checked = val
},
bulrInput() {
if (!this.auth.phone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
})
console.log('-------------')
return
} else {
console.log(this.auth.phone)
console.log('+++++++++++++')
oliUserApi.getByPhone(this.auth.phone).then((res) => {
if (res.code == 20000) {
uni.setStorageSync('oliList', res.data)
this.oliList = res.data
this.checkUser = true
// this.checkList = 'show'
this.titleText = '油站时间'
} else {
let _that = this
_that.auth.phone = ''
//console.log(this.auth.phone)
this.errMsg = res.msg
this.checkUser = false
this.checkList = 'show'
this.titleText = '提示'
}
})
}
//console.log('input失焦')
},
checkLists(id) {
uni.setStorage({
key: 'channelId',
data: id,
success: () => {
//console.log('channelId成功', id)
}
})
if (this.checkType == 0) {
} else {
}
},
checkOli(n) {
if (!this.auth.phone) {
uni.showToast({
title: '请输入手机号',
icon: "none"
})
return
}
this.checkType = n
if (n == 0) {
if (!this.checked) {
this.$refs.popup.open('center')
return
}
this.loginRandom()
} else {
if (!this.auth.password) {
uni.showToast({
title: '请输入密码',
icon: "none"
})
return
}
if (!this.checked) {
this.$refs.popup.open('center')
return
}
this.loginPwd()
}
},
hidecheckList() {
this.checkList = ''
},
toQr() {
uni.navigateTo({
url: '/pages/test/test'
})
},
// 根据用户手机查询油站
getByPhone() {
},
navToQr() {
uni.setClipboardData({
data: 'https://xingka51.oss-cn-hangzhou.aliyuncs.com/applets/cloudSite/yunzhan.jpg',
success: () => {
uni.showToast({
title: '二维码链接已复制',
icon: 'none'
})
}
})
},
hideModal() {
this.modalName = ''
},
showTips() {
this.modalName = 'show'
},
bindload() {
//console.log('组件夹杂')
},
binderror() {
//console.log('组件夹杂失败')
},
loginPwd(channelId) {
uni.login({
provider: 'weixin',
success: loginRes => {
//console.log(loginRes)
const code = loginRes.code
oilIdentityApi.sendCode(code).then((res) => {
//console.log('这里是登录返回值')
//console.log(res.data.unionId)
//console.log(res.data.openId)
const data3 = {
username: this.auth.phone,
password: md5(this.auth.password),
channelId: channelId,
code: code,
unionId: res.data.unionId,
openId: res.data.openId
}
uni.setStorage({
key: 'device',
data: res.data.openId,
success: () => {
//console.log('deviceopenid', res.data.openId)
}
})
uni.setStorageSync('checkFirst', true)
uni.setStorage({
key: 'unionId',
data: res.data.unionId,
success: () => {
//console.log('deviceunionId', res.data.unionId)
}
})
//console.log('这里是请求发送内容',data3)
oilIdentityApi.loginByPhonePwd(data3).then(res => {
//console.log('res', res)
uni.showToast({
title: res.msg,
icon: 'none'
})
//console.log('oilSiteCode', this.oilSiteNo)
if (res.code === 20000) {
uni.reLaunch({
url: '/pages/index/index',
fail: (err) => {
//console.log(err)
}
})
uni.showToast({
title: res.msg,
icon: 'success',
duration: 3000
})
uni.setStorage({
key: 'Authorization',
data: res.data.authTokenDTO.accessToken,
success: () => {
//console.log('Authorization成功', res.data.authTokenDTO.accessToken)
}
})
uni.setStorageSync('userMenu', res.data.authTokenDTO
.loginUser.roleMenus)
//console.log( '这里是获取userMenu处',res.data.authTokenDTO.loginUser.roleMenus)
uni.setStorageSync('loginUser', {
id: res.data.authTokenDTO.loginUser.id,
name: res.data.authTokenDTO.loginUser.name,
userPhone: res.data.authTokenDTO.loginUser
.userPhone
})
}
})
})
},
fail: err => {
//console.log(err)
}
});
},
loginWeixin() {
uni.login({
provider: 'weixin',
success: loginRes => {
const code = loginRes.code
//console.log(code)
oilIdentityApi.sendCode(code).then((res) => {
oilIdentityApi.loginPersonal().then(res => {
if (res.code === 20000) {
uni.reLaunch({
url: '/pages/index/index',
fail: (err) => {
//console.log(err)
}
})
uni.showToast({
title: res.msg,
icon: 'success',
duration: 3000
})
uni.setStorage({
key: 'Authorization',
data: res.data.authTokenDTO.accessToken,
success: () => {
//console.log('Authorization成功', res.data.authTokenDTO.accessToken)
}
})
uni.setStorage({
key: 'device',
data: res.data.openid,
success: () => {
//console.log('deviceopenid', res.data.openid)
}
})
uni.setStorageSync('userMenu', res.data.authTokenDTO
.loginUser.roleMenus)
uni.setStorageSync('loginUser', {
id: res.data.authTokenDTO.loginUser.id,
name: res.data.authTokenDTO.loginUser.name,
userPhone: res.data.authTokenDTO.loginUser
.userPhone
})
uni.setStorage({
key: 'unionId',
data: res.data.unionId,
success: () => {
//console.log('deviceunionId', res.data.unionId)
}
})
} else {
//console.log('res', res.code)
uni.showToast({
title: '未绑定微信',
icon: 'none',
duration: 1500
})
}
})
})
},
fail: err => {
//console.log(err)
}
});
},
sendMsg() {
if (!this.checkUser) {
return
}
if (!this.frozen) {
if (this.auth.phone) {
const data2 = {
username: this.auth.phone
}
oilIdentityApi.getVerifyCode(data2).then(res => {
this.auth.verifyCodeToken = res.data.verifyCodeToken
uni.showToast({
title: res.msg,
icon: 'none'
})
if (res.code === 20000) {
this.frozen = true
setTimeout(() => {
this.frozen = false
clearInterval(timer)
this.tips = `发送验证码`
}, 1000 * 60);
let second = 60
const timer = setInterval(() => {
second--
if (second) {
this.tips = `${second}秒后重发`
} else {
this.tips = `发送验证码`
this.disabled = false
this.btnColor = '#FE0505'
}
}, 1000)
}
})
} else {
uni.showToast({
title: '请输入您的账号',
icon: 'none'
})
}
}
},
loginRandom(channelId) {
uni.login({
provider: 'weixin',
success: loginRes => {
const code = loginRes.code
//console.log(code)
// const data2 = {
// phone: this.auth.phone,
// username: this.auth.phone, //类型:String 必有字段 备注:手机号
// verifyCode: this.auth.captcha, //类型:String 必有字段 备注:验证码
// code: code //类型:String 必有字段 备注:微信code
// }
// sendCode 在传值时在接口文件里添加了一个appid与code一起传到后台
oilIdentityApi.sendCode(code).then((res) => {
const userData = {
username: this.auth.phone, //类型:String 必有字段 备注:手机号
verifyCode: this.auth.captcha, //类型:String 必有字段 备注:验证码
// code: code //类型:String 必有字段 备注:微信code
unionId: res.data.unionId, //根据code接收后台返回的值
channelId: channelId, //所选油站channelId
verifyCodeToken: this.auth.verifyCodeToken, //验证码
openId: res.data.openId
}
uni.setStorage({
key: 'unionId',
data: res.data.unionId,
success: () => {
//console.log('deviceunionId', res.data.unionId)
}
})
uni.setStorage({
key: 'device',
data: res.data.openId,
success: () => {
//console.log('deviceopenid', res.data.openId)
}
})
uni.setStorageSync('checkFirst', true)
oilIdentityApi.verifyCodeLogin(userData).then(res => {
uni.showToast({
title: res.msg,
icon: 'none'
})
if (res.code === 20000) {
uni.reLaunch({
url: '/pages/index/index',
fail: (err) => {
//console.log(err)
}
})
uni.showToast({
title: res.msg,
icon: 'success',
duration: 3000
})
uni.setStorage({
key: 'Authorization',
data: res.data.authTokenDTO.accessToken,
success: () => {
//console.log('Authorization成功', res.data.authTokenDTO.accessToken)
}
})
uni.setStorageSync('userMenu', res.data.authTokenDTO
.loginUser.roleMenus)
uni.setStorageSync('loginUser', {
id: res.data.authTokenDTO.loginUser.id,
name: res.data.authTokenDTO.loginUser.name,
userPhone: res.data.authTokenDTO.loginUser
.userPhone
})
}
})
})
},
fail: err => {
//console.log(err)
}
});
},
getMsg() {
uni.requestSubscribeMessage({
tmplIds: ['W5XD3NQVa6knC5jXHeWT8GS7q5CHrDUMY_sF79kLkKk'],
success: (res) => {
//console.log(res)
}
})
},
getUserInfo({
detail
}) {
//console.log('三方登录只演示登录api能力,暂未关联云端数据');
//console.log('detail', detail)
if (detail.userInfo) {
this.loginLocal(detail.userInfo.nickName);
} else {
uni.showToast({
icon: 'none',
title: '登陆失败'
});
}
},
loginLocal(nickName) {
uni.setStorageSync('login_type', 'local')
uni.setStorageSync('username', nickName)
this.toMain(nickName);
},
toMain(userName) {
// this.login(userName)
//console.log(userName)
/**
* 强制登录时使用reLaunch方式跳转过来
* 返回首页也使用reLaunch方式
*/
if (this.forcedLogin) {
uni.reLaunch({
url: '/pages/index/index',
success: () => {
//console.log('success')
},
fail: err => {
//console.log(err)
}
});
} else {
uni.navigateBack();
}
}
}
};
</script>
<style scoped>
.protocol_footer_close {
width: 185rpx;
border-radius: 94rpx 94rpx 94rpx 94rpx;
opacity: 1;
border: 1px solid #000000;
font-size: 26rpx;
}
.protocol_footer_confirm {
width: 185rpx;
background: #FD0505;
border-radius: 56rpx 56rpx 56rpx 56rpx;
opacity: 1;
font-size: 26rpx;
color: #FFFFFF;
}
.protocol_footer {
display: flex;
justify-content: space-between;
color: #FFFFFF;
}
.protocol_content {
font-size: 32rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 400;
color: #666666;
line-height: 46rpx;
margin: 60rpx 0;
}
.protocol_header {
width: 330rpx;
height: 32rpx;
font-size: 36rpx;
color: #000000;
width: 100%;
text-align: center;
}
.protocol_body {
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
opacity: 1;
padding: 70rpx 50rpx;
max-width: 634rpx;
box-sizing: border-box;
}
.textshowCheck {
flex-direction: column;
}
.page-content {
min-height: 100%;
position: relative;
}
.logo {
min-width: 100%;
text-align: center;
}
.logo img {
width: 200upx;
height: 200rpx;
background-size: contain;
margin: auto;
}
.bottom-bg {
position: sticky;
bottom: 50upx;
}
.img-view {
max-width: 300upx;
width: 100%;
display: inline-block;
}
.qrimg-yunzhan {
width: 200upx;
height: 200rpx;
}
.btn-radius-10 {
border-radius: 20upx;
}
</style>