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.
369 lines
9.4 KiB
369 lines
9.4 KiB
<template> |
|
<view |
|
id="container" |
|
class="uni-flex uni-column container" |
|
:style="'height:' + containerH + 'px'" |
|
> |
|
<view class="bg"> |
|
<view class="flex-item item-logo" /> |
|
<view class="uni-padding-wrap uni-common-mt flex-item item-form"> |
|
<form @submit="submit"> |
|
<view class="uni-form-item uni-row"> |
|
<view class="flex-item iconfont icon-user icon-bold" /> |
|
<view class="flex-item" style="width: 100%"> |
|
<uni-combox |
|
:candidates="candidates" |
|
placeholder="请输入账号" |
|
@input="comBoxFun" |
|
v-model="username" |
|
style="padding-left: 20rpx" |
|
></uni-combox> |
|
</view> |
|
</view> |
|
<view class="line" /> |
|
<view class="uni-form-item uni-row"> |
|
<view class="iconfont icon-pwd icon-bold" /> |
|
<view class="flex-item" |
|
><input |
|
name="loginPwd" |
|
placeholder="请输入密码" |
|
class="login-input" |
|
v-model="password" |
|
type="text" |
|
password="true" |
|
/></view> |
|
</view> |
|
<view class="line" /> |
|
<view class="uni-flex uni-row item"> |
|
<view class="flex-item"> |
|
<checkbox-group @change="checkboxChange"> |
|
<label> |
|
<checkbox |
|
value="cb" |
|
style="transform: scale(0.8)" |
|
:checked="ckRemeber" |
|
/> |
|
记住密码 |
|
</label> |
|
</checkbox-group> |
|
</view> |
|
<view class="flex-item" @click="serverConfig">服务器配置</view> |
|
</view> |
|
<view class="uni-btn-v" |
|
><button type="primary" :loading="loading" form-type="submit"> |
|
登录 |
|
</button> |
|
</view> |
|
<view class="company"> |
|
<text> |
|
当前版本: |
|
<span style="color: #007aff">{{ version }}</span> |
|
</text> |
|
</view> |
|
</form> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
import sm2 from "@/utils/sm2.js"; |
|
import { publicKey } from "@/common/setting"; |
|
import tTrVue from "../../../PDA/components/t-table/t-tr.vue"; |
|
var graceChecker = require("@/common/graceChecker.js"); |
|
export default { |
|
data() { |
|
return { |
|
tenantId: "000000", |
|
username: "", |
|
password: "", |
|
disabled: false, |
|
redirect: "", |
|
containerH: "400", |
|
candidates: [], |
|
ckRemeber: false, |
|
loading: false, |
|
}; |
|
}, |
|
onLoad(option) { |
|
const { redirect } = option; |
|
if (redirect) this.redirect = redirect; |
|
}, |
|
onShow() { |
|
// this.loadConfig(); |
|
this.updateApp(); |
|
this.candidates = []; |
|
let acc = uni.getStorageSync("accountMessList"); |
|
if (acc) { |
|
let accList = JSON.parse(acc); |
|
accList.forEach((item) => { |
|
this.candidates.push(item.username); |
|
}); |
|
} |
|
const login_acc = uni.getStorageSync("cur-login-acc"); |
|
if (login_acc) { |
|
this.username = login_acc["username"]; |
|
this.password = login_acc["password"]; |
|
this.ckRemeber = true; |
|
} |
|
}, |
|
onResize() { |
|
this.resizeContainer(); |
|
}, |
|
mounted() { |
|
this.resizeContainer(); |
|
const login_acc = uni.getStorageSync("cur-login-acc"); |
|
if (login_acc) { |
|
this.username = login_acc["username"]; |
|
this.password = login_acc["password"]; |
|
this.ckRemeber = true; |
|
} |
|
// this.loadConfig(); |
|
}, |
|
methods: { |
|
updateApp() { |
|
uni.getSystemInfo({ |
|
success: (res) => { |
|
//检测当前平台,如果是安卓则启动安卓更新 |
|
if (res.platform == "android") { |
|
// 判断版本问题 |
|
plus.runtime.getProperty(plus.runtime.appid, (info) => { |
|
// info.version 当前版本 |
|
this.version = info.version; |
|
uni.setStorageSync("version", info.version); |
|
// 更新 |
|
// if (!uni.getStorageSync('server-config').rootUrl) return; |
|
// this.$ajax.request({ |
|
// method: 'POST', |
|
// url: 'pdaAndroid/checkUpdate', |
|
// data: { |
|
// version: info.version |
|
// }, |
|
// success: data => { |
|
// if (data) { |
|
// uni.showModal({ |
|
// title: '', |
|
// content: '发现新版本,是否要更新', |
|
// confirmText: '更新', |
|
// confirmColor: '#EE8F57', |
|
// success: function(res) { |
|
// if (res.confirm) { |
|
// uni.navigateTo({ |
|
// url: '/pages/downloadApp/downloadApp' |
|
// }); |
|
// } |
|
// } |
|
// }); |
|
// } |
|
// } |
|
// }); |
|
}); |
|
} |
|
}, |
|
}); |
|
}, |
|
serverConfig() { |
|
uni.navigateTo({ |
|
url: "./serverConfig", |
|
}); |
|
}, |
|
checkboxChange(e) { |
|
if (e.detail.value.length > 0) { |
|
this.ckRemeber = true; |
|
} else { |
|
this.ckRemeber = false; |
|
} |
|
}, |
|
comBoxFun(str) { |
|
this.password = ""; |
|
let acc = uni.getStorageSync("accountMessList"); |
|
if (acc) { |
|
let accList = JSON.parse(acc); |
|
accList.forEach((item) => { |
|
if (item.username == str) { |
|
this.password = item.password; |
|
} |
|
}); |
|
} |
|
}, |
|
resizeContainer() { |
|
const info = uni.getSystemInfoSync(); |
|
this.containerH = info.windowHeight - 2; |
|
}, |
|
// 保存账号信息方便下次登录 |
|
setAccountMess(obj) { |
|
let acc = uni.getStorageSync("accountMessList"); |
|
let accList = []; |
|
if (acc) { |
|
accList = JSON.parse(acc); |
|
} |
|
if (!this.ckRemeber) { |
|
obj.password = ""; |
|
} |
|
accList.unshift(obj); |
|
let list = this.removedup(accList, "loginName"); |
|
uni.setStorageSync("accountMessList", JSON.stringify(list)); |
|
}, |
|
// 数组去重 |
|
removedup(arr, batch) { |
|
if (!Array.isArray(arr)) { |
|
return arr; |
|
} |
|
if (arr.length == 0) { |
|
return []; |
|
} |
|
const obj = {}; |
|
const uniqueArr = arr.reduce(function (total, item) { |
|
obj[item[batch]] ? "" : (obj[item[batch]] = true && total.push(item)); |
|
return total; |
|
}, []); |
|
return uniqueArr; |
|
}, |
|
submit(e) { |
|
var rule = [ |
|
{ |
|
name: "loginPwd", |
|
checkType: "string", |
|
checkRule: "1,20", |
|
errorMsg: "密码应为1-20个字符", |
|
}, |
|
]; |
|
if (this.username.length > 20 || this.username.length < 1) { |
|
return uni.showToast({ |
|
icon: "none", |
|
title: "账号应为1-20个字符", |
|
}); |
|
} |
|
var formData = e.detail.value; |
|
var checkRes = graceChecker.check(formData, rule); |
|
|
|
let login_acc = { |
|
tenantId: this.tenantId, |
|
username: this.username, |
|
password: this.password, |
|
}; |
|
if (checkRes) { |
|
this.loading = true; |
|
this.$u.api |
|
.token( |
|
this.tenantId, |
|
this.username, |
|
sm2.doEncrypt(this.password, publicKey, 0) |
|
) |
|
.then((data) => { |
|
this.loading = false; |
|
this.$u.func.login(data, true); |
|
this.setAccountMess(login_acc, this.ckRemeber); |
|
if (this.ckRemeber) { |
|
uni.setStorageSync("cur-login-acc", login_acc); |
|
} else { |
|
uni.setStorageSync("cur-login-acc", null); |
|
} |
|
}) |
|
.catch((err) => { |
|
// console.log(err); |
|
this.loading = false; |
|
this.$u.func.showToast({ title: "用户名或密码错误" }); |
|
}); |
|
} |
|
}, |
|
handleInputCheck() { |
|
this.disabled = false; |
|
}, |
|
}, |
|
}; |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.uni-form-item .title { |
|
padding: 20rpx 0; |
|
} |
|
|
|
.item { |
|
margin-top: 30px; |
|
color: #434343; |
|
justify-content: space-between; |
|
} |
|
|
|
.container { |
|
background-color: #e5f8fd; |
|
background-repeat: no-repeat; |
|
background-size: 100% 100%; |
|
-moz-background-size: 100% 100%; |
|
} |
|
|
|
.bg { |
|
width: 100%; |
|
height: 100%; |
|
} |
|
|
|
.label { |
|
color: #eeeeee; |
|
} |
|
|
|
.item-logo { |
|
height: 58px; |
|
margin: 50px 0; |
|
margin-left: 16%; |
|
background-image: url(../../static/images/logo.png); |
|
background-size: 187px; |
|
background-repeat: no-repeat; |
|
} |
|
|
|
.item-config { |
|
margin-left: 25px; |
|
background-size: 187px; |
|
background-repeat: no-repeat; |
|
font-size: 12px; |
|
font-weight: 500; |
|
} |
|
|
|
.item-center { |
|
display: flex; |
|
justify-content: center; |
|
margin-top: 10px; |
|
} |
|
|
|
.item-center div { |
|
height: 200px; |
|
width: 200px; |
|
background-image: url(../../static/images/login_center.png); |
|
background-size: 200px; |
|
margin-top: 0px; |
|
background-repeat: no-repeat; |
|
} |
|
|
|
.item-form { |
|
height: 200px; |
|
} |
|
|
|
.line { |
|
line-height: 0rpx; |
|
height: 3rpx; |
|
border: 0px; |
|
background-color: #999999; |
|
} |
|
|
|
.login-input { |
|
height: 50px; |
|
margin-left: 10px; |
|
} |
|
|
|
.icon-bold { |
|
font-size: 20px; |
|
font-weight: 800; |
|
margin-top: 5px; |
|
} |
|
|
|
.item-row { |
|
margin-top: 40rpx; |
|
} |
|
|
|
.company { |
|
height: 10%; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
font-size: 34rpx; |
|
} |
|
</style>
|
|
|