中航光电PDA端
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.

370 lines
9.4 KiB

3 months ago
<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);
3 months ago
this.loading = false;
this.$u.func.showToast({ title: "用户名或密码错误" });
3 months ago
});
}
},
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>