app登录页

master
mhsnet 2 months ago
parent 610e551f37
commit d456b584e7

@ -1,5 +1,65 @@
<template> <template>
<view class="logo-v"> <view class="viewport">
<image
src="/static/images/bg1@2x.png"
class="hd"
mode="'aspectFit'"
></image>
<image src="/static/images/logorhd.png" class="rhd" mode="scaleToFill" />
<view class="md">
<view class="form-title">
<view class="title"> 用户登录 </view>
<view class="desc"> USER LOGIN </view>
</view>
<u-form :rules="rules" :model="formData" ref="dataForm" label-width="90px">
<u-form-item prop="account" class="form-item" label="员工工号:">
<input
class="input"
placeholder="请填写员工工号"
v-model="formData.account"
/>
</u-form-item>
<u-form-item prop="password" class="form-item" label="登录密码:">
<input
class="input"
type="password"
placeholder="请填写登录密码"
:maxlength="11"
v-model="formData.password"
/>
</u-form-item>
</u-form>
<u-button
:style="{
margin: '35px',
background: 'linear-gradient(45deg, #6f89dd, #2a4bb4)',
}"
@click="login"
type="primary"
:loading="loading"
>{{ loading ? "登录中..." : "登录" }}
</u-button>
</view>
<view class="foot">
<view class="desc"> 请联系管理员获取工号和密码 </view>
<view class="copy-right"
>Copyright ©上海长江云息数字科技有限公司,All Rights Reserved.
专注工业信息化-供应链解决方案</view
>
<!-- <u-button
:style="{
height: '64px',
radius: '0px',
background: 'linear-gradient(45deg, #6f89dd, #2a4bb4)',
}"
@click="login"
type="primary"
:loading="loading"
>{{ loading ? "登录中..." : "登录" }}
</u-button> -->
</view>
</view>
<!-- <view class="logo-v">
<view class="login-bg"> <view class="login-bg">
<image src="https://app.cdn.jnpfsoft.com/image/login-bg.png" mode="widthFix"></image> <image src="https://app.cdn.jnpfsoft.com/image/login-bg.png" mode="widthFix"></image>
<view class="logoImg"> <view class="logoImg">
@ -45,26 +105,18 @@
<u-divider margin-top='40' margin-bottom='40' half-width='100%'>其他登录方式</u-divider> <u-divider margin-top='40' margin-bottom='40' half-width='100%'>其他登录方式</u-divider>
<view class="other-list"> <view class="other-list">
<block v-for="(item,i) in socialsList" :key="i"> <block v-for="(item,i) in socialsList" :key="i">
<!--#ifdef MP-WEIXIN -->
<view class="other-item" v-if="item.enname==='wechat_open'" :title="item.name" <view class="other-item" v-if="item.enname==='wechat_open'" :title="item.name"
@click="wechatLogin()"><i :class="item.icon" /> @click="wechatLogin()"><i :class="item.icon" />
</view> </view>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<!--#ifdef APP-PLUS-->
<view class="other-item" v-if="item.enname==='qq'" :title="item.name" <view class="other-item" v-if="item.enname==='qq'" :title="item.name"
@click="qqOtherlogin()"><i :class="item.icon" /> @click="qqOtherlogin()"><i :class="item.icon" />
</view> </view>
<!-- #endif -->
<!-- #ifdef H5 || MP-WEIXIN -->
<view class="other-item" v-if="item.enname==='qq'" :title="item.name" <view class="other-item" v-if="item.enname==='qq'" :title="item.name"
@click="otherslogin(item.enname,item.renderUrl)"><i :class="item.icon" /> @click="otherslogin(item.enname,item.renderUrl)"><i :class="item.icon" />
</view> </view>
<!-- #endif -->
<view class="other-item" v-else :title="item.name" <view class="other-item" v-else :title="item.name"
@click="otherslogin(item.enname,item.renderUrl)"><i :class="item.icon" /> @click="otherslogin(item.enname,item.renderUrl)"><i :class="item.icon" />
</view> </view>
<!-- #endif -->
</block> </block>
</view> </view>
</template> </template>
@ -105,11 +157,11 @@
</view> </view>
</view> </view>
</u-popup> </u-popup>
</view> </view> -->
</template> </template>
<script> <script>
import { import {
login, login,
getCodeConfig, getCodeConfig,
getCallback, getCallback,
@ -117,81 +169,88 @@
getLoginConfig, getLoginConfig,
getSocialsUserList, getSocialsUserList,
socialsLogin, socialsLogin,
getTicket getTicket,
} from '@/api/common.js' } from "@/api/common.js";
import md5Libs from "uview-ui/libs/function/md5"; import md5Libs from "uview-ui/libs/function/md5";
import resources from '@/libs/resources' import resources from "@/libs/resources";
export default { export default {
data() { data() {
return { return {
imgUrl: '', imgUrl: "",
loading: false, loading: false,
formData: { formData: {
account: "", account: "",
password: "", password: "",
code: "", code: "",
origin: 'password' origin: "password",
}, },
needCode: false, needCode: false,
codeLength: 4, codeLength: 4,
isCode: false, isCode: false,
rules: { rules: {
account: [{ account: [
{
required: true, required: true,
message: '请输入账号', message: "请输入账号",
trigger: 'blur', trigger: "blur",
}], },
password: [{ ],
password: [
{
required: true, required: true,
message: '请输入密码', message: "请输入密码",
trigger: 'blur', trigger: "blur",
}], },
],
}, },
sysConfigInfo: {}, sysConfigInfo: {},
appIcon: '', appIcon: "",
sysName: '', sysName: "",
copyright: '', copyright: "",
isCopyright: true, isCopyright: true,
socialsList: [], socialsList: [],
show: false, show: false,
tenantUserInfo: [], tenantUserInfo: [],
ssoLoading: true, ssoLoading: true,
isSso: false, isSso: false,
ssoTicket: '', ssoTicket: "",
ssoUrl: '', ssoUrl: "",
preUrl: '', preUrl: "",
ticketParams: "", ticketParams: "",
loginCode: '', loginCode: "",
} };
}, },
computed: { computed: {
baseURL() { baseURL() {
return this.define.baseURL return this.define.baseURL;
}, },
cid() { cid() {
return this.$store.getters.cid return this.$store.getters.cid;
} },
}, },
onReady() { onReady() {
this.$refs.dataForm.setRules(this.rules); this.$refs.dataForm.setRules(this.rules);
}, },
onLoad(options) { onLoad(options) {
this.ssoTicket = uni.getStorageSync('ssoTicket') this.ssoTicket = uni.getStorageSync("ssoTicket");
this.sysConfigInfo = uni.getStorageSync('sysConfigInfo') this.sysConfigInfo = uni.getStorageSync("sysConfigInfo");
this.appIcon = !!this.sysConfigInfo.appIcon ? this.baseURL + this.sysConfigInfo.appIcon : this.appIcon = !!this.sysConfigInfo.appIcon
'/static/logo.png' ? this.baseURL + this.sysConfigInfo.appIcon
this.sysName = !!this.sysConfigInfo.companyName ? this.sysConfigInfo.sysName : : "/static/logo.png";
'JNPF快速开发平台' this.sysName = !!this.sysConfigInfo.companyName
this.copyright = !!this.sysConfigInfo.copyright ? this.sysConfigInfo.copyright : ? this.sysConfigInfo.sysName
this.define.copyright : "JNPF快速开发平台";
let needCode = uni.getStorageSync('app_loginNeedCode') this.copyright = !!this.sysConfigInfo.copyright
this.isCode = needCode ? this.sysConfigInfo.copyright
this.changeCode() : this.define.copyright;
this.getLoginConfig() let needCode = uni.getStorageSync("app_loginNeedCode");
this.formData.password = ''; this.isCode = needCode;
this.changeCode();
this.getLoginConfig();
this.formData.password = "";
if (options.data) { if (options.data) {
this.tenantUserInfo = JSON.parse(options.data) this.tenantUserInfo = JSON.parse(options.data);
if (this.tenantUserInfo) this.show = true if (this.tenantUserInfo) this.show = true;
} }
}, },
methods: { methods: {
@ -200,65 +259,71 @@
// //
if (res.data.status == 1) { if (res.data.status == 1) {
uni.showLoading({ uni.showLoading({
title: '登录中' title: "登录中",
})
this.$store.commit('user/SET_TOKEN', res.data.value)
uni.setStorageSync('token', res.data.value)
this.$store.dispatch('user/getCurrentUser').then((res) => {
uni.hideLoading()
uni.reLaunch({
url: '/pages/index/portal'
}); });
}).catch(() => { this.$store.commit("user/SET_TOKEN", res.data.value);
uni.hideLoading() uni.setStorageSync("token", res.data.value);
this.$store
.dispatch("user/getCurrentUser")
.then((res) => {
uni.hideLoading();
uni.reLaunch({ uni.reLaunch({
url: '/pages/login/index' url: "/pages/index/portal",
}); });
}) })
.catch(() => {
uni.hideLoading();
uni.reLaunch({
url: "/pages/login/index",
});
});
} else if (res.data.status == 6) { } else if (res.data.status == 6) {
this.tenantUserInfo = JSON.parse(res.data.value) this.tenantUserInfo = JSON.parse(res.data.value);
if (this.tenantUserInfo.length == 1) { if (this.tenantUserInfo.length == 1) {
uni.showLoading({ uni.showLoading({
title: '登录中' title: "登录中",
})
this.$store.commit('user/SET_TOKEN', res.data.value)
uni.setStorageSync('token', res.data.value)
this.$store.dispatch('user/getCurrentUser').then((res) => {
uni.hideLoading()
uni.reLaunch({
url: '/pages/index/portal'
}); });
}).catch(() => { this.$store.commit("user/SET_TOKEN", res.data.value);
uni.hideLoading() uni.setStorageSync("token", res.data.value);
this.$store
.dispatch("user/getCurrentUser")
.then((res) => {
uni.hideLoading();
uni.reLaunch({ uni.reLaunch({
url: '/pages/login/index' url: "/pages/index/portal",
}) });
}) })
.catch(() => {
uni.hideLoading();
uni.reLaunch({
url: "/pages/login/index",
});
});
} else { } else {
this.show = true this.show = true;
} }
} else { } else {
this.show = false this.show = false;
this.ssoUrl = '' this.ssoUrl = "";
uni.showToast({ uni.showToast({
title: res.data.value || '操作超时,请重新点击登录', title: res.data.value || "操作超时,请重新点击登录",
icon: 'none' icon: "none",
}) });
} }
} }
}, },
wechatLogin() { wechatLogin() {
// #ifdef MP-WEIXIN // #ifdef MP-WEIXIN
getTicket().then(res => { getTicket().then((res) => {
this.ssoTicket = res.data this.ssoTicket = res.data;
uni.login({ uni.login({
provider: 'weixin', provider: "weixin",
success: (loginRes) => { success: (loginRes) => {
this.loginCode = loginRes.code this.loginCode = loginRes.code;
} },
}) });
uni.getUserProfile({ uni.getUserProfile({
desc: '获取你的昵称、头像、地区及性别', desc: "获取你的昵称、头像、地区及性别",
success: (info) => { success: (info) => {
let qurey = { let qurey = {
encryptedData: info.encryptedData, encryptedData: info.encryptedData,
@ -267,218 +332,334 @@
code: this.loginCode, code: this.loginCode,
jnpf_ticket: this.ssoTicket, jnpf_ticket: this.ssoTicket,
socialName: info.userInfo.nickName, socialName: info.userInfo.nickName,
source: 'wechat_applets' source: "wechat_applets",
} };
socialsLogin(qurey).then(res => { socialsLogin(qurey).then((res) => {
this.loginToken(res) this.loginToken(res);
}) });
} },
}) });
}) });
// #endif // #endif
// #ifdef APP-PLUS // #ifdef APP-PLUS
getTicket().then(res => { getTicket().then((res) => {
this.ssoTicket = res.data this.ssoTicket = res.data;
uni.login({ uni.login({
provider: 'weixin', provider: "weixin",
success: (loginRes) => { success: (loginRes) => {
// //
uni.getUserProfile({ uni.getUserProfile({
provider: 'weixin', provider: "weixin",
success: (info) => { success: (info) => {
let data = { let data = {
source: 'wechat_open', source: "wechat_open",
uuid: info.userInfo.unionId, uuid: info.userInfo.unionId,
socialName: info.userInfo.nickName, socialName: info.userInfo.nickName,
jnpf_ticket: this.ssoTicket jnpf_ticket: this.ssoTicket,
}; };
socialsLogin(data).then(res => { socialsLogin(data).then((res) => {
this.loginToken(res) this.loginToken(res);
}) });
}, },
fail: function(err) { fail: function (err) {
// //
// err.code // err.code
}
})
}, },
fail: function(err) { });
},
fail: function (err) {
// //
// err.code // err.code
} },
});
}); });
})
// #endif // #endif
}, },
qqOtherlogin() { qqOtherlogin() {
getTicket().then(res => { getTicket().then((res) => {
this.ssoTicket = res.data this.ssoTicket = res.data;
uni.login({ uni.login({
provider: 'qq', provider: "qq",
success: (loginRes) => { success: (loginRes) => {
// //
uni.getUserInfo({ uni.getUserInfo({
provider: 'qq', provider: "qq",
success: (info) => { success: (info) => {
let data = { let data = {
source: 'qq', source: "qq",
jnpf_ticket: this.ssoTicket, jnpf_ticket: this.ssoTicket,
socialName: info.userInfo.nickName, socialName: info.userInfo.nickName,
uuid: info.userInfonickName.unionid, uuid: info.userInfonickName.unionid,
}; };
socialsLogin(data).then(res => { socialsLogin(data)
this.loginToken(res) .then((res) => {
}).catch((err) => {}) this.loginToken(res);
// , info.authResult
}
}) })
.catch((err) => {});
// , info.authResult
},
});
}, },
fail: function(err) { fail: function (err) {
// //
// err.code // err.code
} },
});
}); });
})
}, },
socailsLogin(item) { socailsLogin(item) {
item.tenantLogin = true item.tenantLogin = true;
socialsLogin(item).then(res => { socialsLogin(item)
.then((res) => {
if (res.code == 200) { if (res.code == 200) {
uni.showLoading({ uni.showLoading({
title: '登录中' title: "登录中",
})
this.$store.commit('user/SET_TOKEN', res.data.token)
uni.setStorageSync('token', res.data.token)
this.$store.dispatch('user/getCurrentUser').then((res) => {
uni.hideLoading()
uni.switchTab({
url: '/pages/index/portal'
}); });
this.show = false this.$store.commit("user/SET_TOKEN", res.data.token);
}).catch(() => { uni.setStorageSync("token", res.data.token);
uni.hideLoading() this.$store
.dispatch("user/getCurrentUser")
.then((res) => {
uni.hideLoading();
uni.switchTab({ uni.switchTab({
url: '/pages/login/index' url: "/pages/index/portal",
}); });
this.show = false;
}) })
} .catch(() => {
}).catch(() => { uni.hideLoading();
uni.hideLoading()
uni.switchTab({ uni.switchTab({
url: '/pages/login/index' url: "/pages/login/index",
}); });
});
}
}) })
.catch(() => {
uni.hideLoading();
uni.switchTab({
url: "/pages/login/index",
});
});
}, },
otherslogin(key, url) { otherslogin(key, url) {
if (key === 'wechat_open') { if (key === "wechat_open") {
this.wechatLogin(); this.wechatLogin();
} else { } else {
getTicket().then(res => { getTicket()
this.ssoTicket = res.data .then((res) => {
url = url.replace('JNPF_TICKET', this.ssoTicket) this.ssoTicket = res.data;
uni.setStorageSync('ssoUrl', url) url = url.replace("JNPF_TICKET", this.ssoTicket);
uni.setStorageSync("ssoUrl", url);
uni.navigateTo({ uni.navigateTo({
url: `/pages/login/otherLogin?ssoTicket=` + this.ssoTicket url: `/pages/login/otherLogin?ssoTicket=` + this.ssoTicket,
});
}) })
}).catch(() => {}) .catch(() => {});
} }
}, },
onFocus(e) { onFocus(e) {
this.getCodeConfig(e) this.getCodeConfig(e);
}, },
onBlur(e) { onBlur(e) {
this.getCodeConfig(e) this.getCodeConfig(e);
}, },
// //
getLoginConfig() { getLoginConfig() {
getLoginConfig().then(res => { getLoginConfig()
this.isSso = res.data.redirect .then((res) => {
this.preUrl = res.data.url this.isSso = res.data.redirect;
this.ticketParams = res.data.ticketParams this.preUrl = res.data.url;
let socialsList = res.data.socialsList || [] this.ticketParams = res.data.ticketParams;
this.socialsList = socialsList.filter(o => o.latest && o.enname != let socialsList = res.data.socialsList || [];
'github' && o this.socialsList = socialsList.filter(
.enname != (o) =>
'wechat_enterprise') o.latest &&
this.ssoLoading = false o.enname != "github" &&
}).catch(() => { o.enname != "wechat_enterprise"
this.isSso = false );
this.ssoLoading = false this.ssoLoading = false;
}) })
.catch(() => {
this.isSso = false;
this.ssoLoading = false;
});
}, },
getCodeConfig(val) { getCodeConfig(val) {
if (!val) return if (!val) return;
getCodeConfig(val).then(res => { getCodeConfig(val).then((res) => {
this.needCode = !!res.data.enableVerificationCode this.needCode = !!res.data.enableVerificationCode;
if (this.needCode) { if (this.needCode) {
this.codeLength = res.data.verificationCodeNumber || 4 this.codeLength = res.data.verificationCodeNumber || 4;
this.changeCode() this.changeCode();
} }
}) });
}, },
changeCode() { changeCode() {
let timestamp = Math.random() let timestamp = Math.random();
this.timestamp = timestamp this.timestamp = timestamp;
this.imgUrl = `/api/oauth/ImageCode/${this.codeLength || 4}/${timestamp}` this.imgUrl = `/api/oauth/ImageCode/${this.codeLength || 4}/${timestamp}`;
}, },
login() { login() {
this.$refs.dataForm.validate(valid => { this.$refs.dataForm.validate((valid) => {
if (valid) { if (valid) {
this.loading = true this.loading = true;
let query = { let query = {
account: this.formData.account, account: this.formData.account,
password: md5Libs.md5(this.formData.password), password: md5Libs.md5(this.formData.password),
timestamp: this.timestamp, timestamp: this.timestamp,
code: this.formData.code, code: this.formData.code,
origin: this.formData.origin, origin: this.formData.origin,
jnpf_ticket: this.ssoTicket jnpf_ticket: this.ssoTicket,
} };
// #ifdef APP-PLUS // #ifdef APP-PLUS
const clientId = plus.push.getClientInfo().clientid; const clientId = plus.push.getClientInfo().clientid;
query.clientId = clientId query.clientId = clientId;
/* unipush2.0 */ /* unipush2.0 */
// query.Client_Id = this.cid // query.Client_Id = this.cid
// #endif // #endif
login(query).then(res => { login(query)
let token = res.data.token .then((res) => {
this.$store.commit('user/SET_TOKEN', token) let token = res.data.token;
uni.setStorageSync('token', token) this.$store.commit("user/SET_TOKEN", token);
this.$store.dispatch('user/getCurrentUser').then((res) => { uni.setStorageSync("token", token);
this.loading = false this.$store
.dispatch("user/getCurrentUser")
.then((res) => {
this.loading = false;
uni.switchTab({ uni.switchTab({
url: '/pages/index/portal' url: "/pages/index/portal",
}); });
}).catch(() => {
this.loading = false
}) })
}).catch((err) => { .catch(() => {
this.loading = false this.loading = false;
});
}) })
.catch((err) => {
this.loading = false;
});
} }
}); });
}, },
ssoLogin() { ssoLogin() {
getTicket().then(res => { getTicket().then((res) => {
this.ssoTicket = res.data this.ssoTicket = res.data;
this.ssoUrl = this.preUrl + '?' + this.ticketParams + '=' + this.ssoTicket this.ssoUrl =
uni.setStorageSync('ssoUrl', this.ssoUrl) this.preUrl + "?" + this.ticketParams + "=" + this.ssoTicket;
uni.setStorageSync("ssoUrl", this.ssoUrl);
uni.navigateTo({ uni.navigateTo({
url: `/pages/login/otherLogin?ssoTicket=${this.ssoTicket}` url: `/pages/login/otherLogin?ssoTicket=${this.ssoTicket}`,
}) });
}) });
},
},
};
</script>
<style lang="scss">
page {
height: 100%;
}
.viewport {
display: flex;
flex-direction: column;
height: 100%;
justify-content: space-between;
.hd {
width: 100%;
height: 300rpx;
position: relative;
} }
.rhd {
width: 200rpx;
height: 200rpx;
position: absolute;
right: -10px;
top: 190rpx;
} }
.md {
flex: 1;
padding: 80rpx 60rpx;
.form-title {
.title {
font-size: 48rpx;
} }
</script>
<style lang="scss"> .desc {
page { font-size: 28rpx;
color: #888888;
}
}
.u-form {
color: #888888;
margin: 80rpx 0 20rpx;
.form-item {
margin: 40rpx 0;
}
.label {
font-size: 32rpx;
}
.input {
background: #f5f7fa;
color: #595959;
font-size: 28rpx;
height: 80rpx;
line-height: 80rpx;
display: flex;
align-items: center;
padding: 0 20rpx;
margin-top: 20rpx;
border-radius: 8rpx;
}
.forget {
color: #356899;
font-size: 28rpx;
}
}
}
.foot {
.desc {
color: #888888;
text-align: center;
font-size: 32rpx;
margin: 20rpx 0;
}
.copy-right {
text-align: center;
color: #b3bec9;
font-size: 20rpx;
margin: 30rpx auto;
width: 600rpx;
}
.login {
font-size: 36rpx;
font-weight: 600;
background: linear-gradient(45deg, rgb(111, 137, 221), rgb(42, 75, 180));
height: 120rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
}
}
/*
page {
width: 100%; width: 100%;
min-height: 100vh; min-height: 100vh;
} }
.logo-v { .logo-v {
height: 100vh; height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -489,7 +670,7 @@
top: 0px; top: 0px;
width: 120rpx; width: 120rpx;
height: 120rpx; height: 120rpx;
background: url('../../static/image/login_version.png') no-repeat center; background: url("../../static/image/login_version.png") no-repeat center;
background-size: 100%; background-size: 100%;
.login-version-text { .login-version-text {
@ -517,12 +698,8 @@
height: 160rpx; height: 160rpx;
margin: 0 auto; margin: 0 auto;
position: absolute; position: absolute;
/* #ifdef APP-PLUS */
bottom: -90rpx; bottom: -90rpx;
/* #endif */
/* #ifndef APP-PLUS */
bottom: 0; bottom: 0;
/* #endif */
left: 0; left: 0;
right: 0; right: 0;
@ -593,31 +770,27 @@
width: 50%; width: 50%;
height: 80upx; height: 80upx;
text-align: center; text-align: center;
color: #AEAFB5; color: #aeafb5;
font-size: 32upx; font-size: 32upx;
&.active { &.active {
color: #3281ff; color: #3281ff;
} }
} }
} }
.loginInputBox { .loginInputBox {
width: 100%; width: 100%;
/* #ifdef APP-PLUS */
margin-top: 120rpx; margin-top: 120rpx;
/* #endif */
/* #ifndef APP-PLUS */
margin-top: 80rpx; margin-top: 80rpx;
/* #endif */
padding: 0 64rpx; padding: 0 64rpx;
.code-box { .code-box {
width: 100%; width: 100%;
} }
.loginBtnBox {} .loginBtnBox {
}
} }
} }
} }
@ -628,23 +801,19 @@
left: 0; left: 0;
right: 0; right: 0;
text-align: center; text-align: center;
color: #9A9A9A; color: #9a9a9a;
font-size: 24rpx; font-size: 24rpx;
} }
.sso-login-btn { .sso-login-btn {
width: 100%; width: 100%;
padding: 0 64rpx; padding: 0 64rpx;
/* #ifdef APP-PLUS */
margin-top: 404rpx; margin-top: 404rpx;
/* #endif */
/* #ifndef APP-PLUS */
margin-top: 364rpx; margin-top: 364rpx;
/* #endif */
}
} }
}
.other-list { .other-list {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-around; justify-content: space-around;
@ -670,38 +839,38 @@
// } // }
// } // }
} }
} }
.mian { .mian {
background: url('/static/image/tenancy.png'); background: url("/static/image/tenancy.png");
height: 100%; height: 100%;
} }
.img { .img {
margin-top: 20rpx; margin-top: 20rpx;
margin-left: 30%; margin-left: 30%;
} }
.title { .title {
margin-top: -55rpx; margin-top: -55rpx;
margin-left: 260rpx; margin-left: 260rpx;
font-size: 32rpx; font-size: 32rpx;
} }
.info { .info {
margin: auto auto; margin: auto auto;
width: 96%; width: 96%;
height: 300rpx; height: 300rpx;
background-color: #fff; background-color: #fff;
margin-bottom: 20rpx; margin-bottom: 20rpx;
border-radius: 10rpx; border-radius: 10rpx;
border-left: 10rpx solid #9DC8FA; border-left: 10rpx solid #9dc8fa;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.user-name { .user-name {
font-weight: bold; font-weight: bold;
font-size: 32rpx; font-size: 32rpx;
margin-left: 20rpx; margin-left: 20rpx;
@ -712,9 +881,9 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.user-tenancy { .user-tenancy {
font-size: 28rpx; font-size: 28rpx;
margin-left: 20rpx; margin-left: 20rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
@ -722,5 +891,6 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
*/
</style> </style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Loading…
Cancel
Save