From d89c495a7da517d653e9ea42b8e6405eef823ef6 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期一, 29 七月 2024 16:23:24 +0800 Subject: [PATCH] update 还有售后需要测试一下 --- pages/login/supplier-login.vue | 893 ++++++++++++++++++++++++++++++----------------------------- 1 files changed, 450 insertions(+), 443 deletions(-) diff --git a/pages/login/supplier-login.vue b/pages/login/supplier-login.vue index 96c7a4a..aa583d7 100644 --- a/pages/login/supplier-login.vue +++ b/pages/login/supplier-login.vue @@ -1,498 +1,505 @@ <template> - <view class="main-container login-container img100 relative" style="margin-top: 0rpx;"> - <!-- background-image:url('@/static/images/supplier/login/bg.png') --> + <view class="main-container login-container img100 relative" style="margin-top: 0rpx;"> + <!-- background-image:url('@/static/images/supplier/login/bg.png') --> - <image class="component-bg" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png" - mode="scaleToFill"/> - <view class="t-login top-bg"> - <view class="nav-title">登录</view> - <view class="login"> - <form class="cl"> - <view class="t-a titles-top"> - <view class="title-1">HELLO</view> - <view class="title-2">欢迎登录<span class="title-3">花满芫</span> - <!-- #ifdef PUB_SUPPLIER --> - <span>供应商管理平台</span> - <!-- #endif --> - <!-- #ifdef PUB_PARTNER --> - <span>合伙人管理平台</span> - <!-- #endif --> - </view> - </view> - <view class="t-a input form-input" v-if="loginType=='pwd'"> - <!-- <input type="text" name="userName" placeholder="请输入账号" v-model="userName" /> --> - <u-input placeholder="请输入账号" :border="false" v-model="userName"></u-input> + <image class="component-bg" + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png" + mode="scaleToFill" /> + <view class="t-login top-bg"> + <view class="nav-title">登录</view> + <view class="login"> + <form class="cl"> + <view class="t-a titles-top"> + <view class="title-1">HELLO</view> + <view class="title-2">欢迎登录<span class="title-3">花满芫</span> + <!-- #ifdef PUB_SUPPLIER --> + <span>供应商管理平台</span> + <!-- #endif --> + <!-- #ifdef PUB_PARTNER --> + <span>合伙人管理平台</span> + <!-- #endif --> + </view> + </view> + <view class="t-a input form-input" v-if="loginType=='pwd'"> + <!-- <input type="text" name="userName" placeholder="请输入账号" v-model="userName" /> --> + <u-input placeholder="请输入账号" :border="false" v-model="userName"></u-input> - </view> - <view class="t-a input form-input" v-if="loginType=='pwd'"> - <!-- <input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" /> --> - <u-input :password="true" :border="false" placeholder="请输入密码" v-model="password"></u-input> - </view> - <view class="t-a input form-input" v-if="loginType=='code'"> + </view> + <view class="t-a input form-input" v-if="loginType=='pwd'"> + <u-input :password="true" :border="false" placeholder="请输入密码" v-model="password"></u-input> + </view> + <view class="t-a input form-input" v-if="loginType=='code'"> - <!-- <input type="text" name="userName" placeholder="请输入手机号" v-model="phoneNumber" /> - <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()"> - {{getCodeText}} - </view> --> - <u-input placeholder="请输入手机号" :border="false" v-model="phoneNumber"> - <template slot="suffix"> - <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()"> - {{ getCodeText }} - </view> - </template> - </u-input> - </view> + <u-input placeholder="请输入手机号" :border="false" v-model="phoneNumber"> + <template slot="suffix"> + <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()"> + {{ getCodeText }} + </view> + </template> + </u-input> + </view> - <view class="t-a form-input" v-if="loginType=='code'"> - <!-- <input type="text" name="userName" placeholder="请输入手机验证码" v-model="smsCode" /> --> - <u-input placeholder="请输入手机验证码" :border="false" v-model="smsCode"></u-input> + <view class="t-a form-input" v-if="loginType=='code'"> + <u-input placeholder="请输入手机验证码" :border="false" v-model="smsCode"></u-input> - </view> + </view> - <button @tap="login()" class="bottom-button">登 录</button> - <view class="flex"> - <view class="topic-font" v-if="loginType=='pwd'" @click="loginType='code'">手机验证码登录</view> - <view class="topic-font" v-if="loginType=='code'" @click="loginType='pwd'">账号密码登录</view> + <button @tap="login()" class="bottom-button">登 录</button> - <view class="topic-font m-l-a m-r-0" @click="toReg">前往注册</view> + <view class="flex"> + <view class="topic-font" v-if="loginType=='pwd'&&apitype!=='loginAdmin'" @click="loginType='code'">手机验证码登录</view> + <view class="topic-font" v-if="loginType=='code'&&apitype!=='loginAdmin'" @click="loginType='pwd'">账号密码登录</view> - <!-- #ifdef PUB_CUSTOMER --> - <view class="topic-font m-l-a m-r-0" @click="toHome">返回首页</view> - <!-- #endif --> - </view> + <view class="topic-font m-l-a m-r-0" v-if="apitype!=='loginAdmin'" @click="toReg">前往注册</view> - </form> - </view> - </view> - </view> + <!-- #ifdef PUB_CUSTOMER --> + <view class="topic-font m-l-a m-r-0" @click="toHome">返回首页</view> + <!-- #endif --> + <!-- #ifdef PUB_PARTNER --> + <view class="topic-font m-l-a m-r-0" @click="()=>{ + if(apitype==='loginPartner'){ + apitype = 'loginAdmin' + loginType = 'pwd' + }else{ + apitype = 'loginPartner' + } + }"> + 切换为{{apitype!=='loginPartner'?'合伙人':'质检人员'}}登录 + </view> + <!-- #endif --> + </view> + + </form> + </view> + </view> + </view> </template> <script> -// import util from '@/utils/util.js' -// import gzmzApi from '@/api/gzmzApi.js' -// import myCache from '@/utils/myCache.js' -export default { - // props: { - // // apitype: 'loginSupplier', - // apitype: { - // type: String, - // default () { - // // #ifdef PUB_SUPPLIER - // return 'loginSupplier' - // // #endif - // // #ifdef PUB_PARTNER - // return 'loginPartner' - // // #endif - // // #ifdef PUB_CUSTOMER - // return 'loginCustomer' - // // #endif - // // return 'loginPartner' - // } - // }, - // }, - data() { - return { - openId: '-1', - userName: '', - password: '', - // userName: '', - // password: '', + // import util from '@/utils/util.js' + // import gzmzApi from '@/api/gzmzApi.js' + // import myCache from '@/utils/myCache.js' + export default { + // props: { + // // apitype: 'loginSupplier', + // apitype: { + // type: String, + // default () { + // // #ifdef PUB_SUPPLIER + // return 'loginSupplier' + // // #endif + // // #ifdef PUB_PARTNER + // return 'loginPartner' + // // #endif + // // #ifdef PUB_CUSTOMER + // return 'loginCustomer' + // // #endif + // // return 'loginPartner' + // } + // }, + // }, + data() { + return { + openId: '-1', + userName: '', + password: '', + // userName: '', + // password: '', - phoneNumber: '', - smsCode: '', + phoneNumber: '', + smsCode: '', - checked: false, - loginType: 'pwd', //pwd和code,密码和验证码登录 - pcfvalue: undefined, - getCodeText: '获取验证码', - getCodeBtnColor: "#20613D", - getCodeisWaiting: false, - Timer: undefined, - // #ifdef PUB_SUPPLIER - apitype: 'loginSupplier', - // #endif - // #ifdef PUB_PARTNER - apitype: 'loginPartner', - // #endif - // #ifdef PUB_CUSTOMER - apitype: 'loginCustomer', - // #endif - // return 'loginPartner' - }; - }, - methods: { - async getCode() { - console.log('getCode') - uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。 - if (this.getCodeisWaiting) { - return; - } - if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误 - this.$message.showToast('请填写正确手机号码') - return false; - } - this.getCodeText = "发送中..." //发送验证码 - this.getCodeisWaiting = true; - this.getCodeBtnColor = "#000" //追加样式,修改颜色 - //示例用定时器模拟请求效果 - //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式 - const { - code - } = await this.$http.request('post', '/api/sms/send/code', { - data: { - tel: this.phoneNumber, - userType: this.apitype.replace("login", "").toLowerCase() - } - }) - if (code == 0) { - uni.showToast({ - title: '验证码已发送', - icon: "none" - }); - this.setTimer(); //调用定时器方法 - } else { - this.getCodeText = "获取验证码" //发送验证码 - this.getCodeisWaiting = false; - this.getCodeBtnColor = "#20613D"; - } - // setTimeout(() => { - // uni.showToast({ - // title: '验证码已发送', - // icon: "none" - // }); //弹出提示框 - // //示例默认1234,生产中请删除这一句。 - // // this.code = '1234'; //发送验证码,进行填入 - // this.setTimer(); //调用定时器方法 - // }, 1000) - }, - //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数 - setTimer() { - let holdTime = 60; //定义变量并赋值 - this.getCodeText = "重新获取(60)" - //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。 - //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。 - this.Timer = setInterval(() => { - if (holdTime <= 0) { - this.getCodeisWaiting = false; - this.getCodeBtnColor = "#20613D"; - this.getCodeText = "获取验证码" - clearInterval(this.Timer); //清除该函数 - return; //返回前面 - } - this.getCodeText = "重新获取(" + holdTime + ")" - holdTime--; - }, 1000) - }, - toHome(){ - uni.redirectTo({ - url: '/pages/home/home' - }) - }, - toReg() { - // uni.switchTab({ - // url: '/pages/index/index' - // }) - var addstr = '' - // #ifdef PUB_PARTNER - addstr = '?source=step' - uni.navigateTo({ - url: '/sub_pages/partner/partner-info/partner-info' + addstr - }) - // #endif - // #ifdef PUB_SUPPLIER - uni.redirectTo({ - url: '/pages/login/supplier-reg' - }) - // #endif - // #ifdef PUB_CUSTOMER - addstr = '?source=step' - uni.navigateTo({ - url: '/sub_pages/customer/customer-info/customer-info' + addstr - }) - // #endif - }, - changeAll(e) { - this.pcfvalue = e.detail.value[0] - }, - async login() { - uni.showLoading({ - title: '登陆中' - }); - var that = this; - if (this.loginType == 'pwd') { - if (!that.userName) { - uni.showToast({ - title: '请输入用户名', - icon: 'none' - }); - return; - } - if (!that.password) { - uni.showToast({ - title: '请输入密码', - icon: 'none' - }); - return; - } - } - if (this.loginType == 'code') { - if (!that.phoneNumber) { - uni.showToast({ - title: '请输入手机号', - icon: 'none' - }); - return; - } - if (!that.smsCode) { - uni.showToast({ - title: '请输入手机验证码', - icon: 'none' - }); - return; - } - } - // if (this.pcfvalue == undefined) { - // util.showMyToast('必须勾选《用户服务协议》及《隐私政策》'); - // return; - // } - let post = { - username: this.userName, - password: this.password, - tel: this.phoneNumber, - smsCode: this.smsCode - // openId: '123456789' - } - // const { - // code - // } = await this.$http.request('get', '/api/login/admin') - const resp = await this.$store.dispatch(this.apitype, post); - // uni.hideLoading() + checked: false, + loginType: 'pwd', //pwd和code,密码和验证码登录 + pcfvalue: undefined, + getCodeText: '获取验证码', + getCodeBtnColor: "#20613D", + getCodeisWaiting: false, + Timer: undefined, + // #ifdef PUB_SUPPLIER + apitype: 'loginSupplier', + // #endif + // #ifdef PUB_PARTNER + apitype: 'loginPartner', + // #endif + // #ifdef PUB_CUSTOMER + apitype: 'loginCustomer', + // #endif + // return 'loginPartner' + }; + }, + methods: { + async getCode() { + console.log('getCode') + uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。 + if (this.getCodeisWaiting) { + return; + } + if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误 + this.$message.showToast('请填写正确手机号码') + return false; + } + this.getCodeText = "发送中..." //发送验证码 + this.getCodeisWaiting = true; + this.getCodeBtnColor = "#000" //追加样式,修改颜色 + //示例用定时器模拟请求效果 + //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式 + const { + code + } = await this.$http.request('post', '/api/sms/send/code', { + data: { + tel: this.phoneNumber, + userType: this.apitype.replace("login", "").toLowerCase() + } + }) + if (code == 0) { + uni.showToast({ + title: '验证码已发送', + icon: "none" + }); + this.setTimer(); //调用定时器方法 + } else { + this.getCodeText = "获取验证码" //发送验证码 + this.getCodeisWaiting = false; + this.getCodeBtnColor = "#20613D"; + } + // setTimeout(() => { + // uni.showToast({ + // title: '验证码已发送', + // icon: "none" + // }); //弹出提示框 + // //示例默认1234,生产中请删除这一句。 + // // this.code = '1234'; //发送验证码,进行填入 + // this.setTimer(); //调用定时器方法 + // }, 1000) + }, + //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数 + setTimer() { + let holdTime = 60; //定义变量并赋值 + this.getCodeText = "重新获取(60)" + //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。 + //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。 + this.Timer = setInterval(() => { + if (holdTime <= 0) { + this.getCodeisWaiting = false; + this.getCodeBtnColor = "#20613D"; + this.getCodeText = "获取验证码" + clearInterval(this.Timer); //清除该函数 + return; //返回前面 + } + this.getCodeText = "重新获取(" + holdTime + ")" + holdTime--; + }, 1000) + }, + toHome() { + uni.redirectTo({ + url: '/pages/home/home' + }) + }, + toReg() { + // uni.switchTab({ + // url: '/pages/index/index' + // }) + var addstr = '' + // #ifdef PUB_PARTNER + addstr = '?source=step' + uni.navigateTo({ + url: '/sub_pages/partner/partner-info/partner-info' + addstr + }) + // #endif + // #ifdef PUB_SUPPLIER + uni.redirectTo({ + url: '/pages/login/supplier-reg' + }) + // #endif + // #ifdef PUB_CUSTOMER + addstr = '?source=step' + uni.navigateTo({ + url: '/sub_pages/customer/customer-info/customer-info' + addstr + }) + // #endif + }, + changeAll(e) { + this.pcfvalue = e.detail.value[0] + }, + async login() { + uni.showLoading({ + title: '登陆中' + }); + var that = this; + if (this.loginType == 'pwd') { + if (!that.userName) { + uni.showToast({ + title: '请输入用户名', + icon: 'none' + }); + return; + } + if (!that.password) { + uni.showToast({ + title: '请输入密码', + icon: 'none' + }); + return; + } + } + if (this.loginType == 'code') { + if (!that.phoneNumber) { + uni.showToast({ + title: '请输入手机号', + icon: 'none' + }); + return; + } + if (!that.smsCode) { + uni.showToast({ + title: '请输入手机验证码', + icon: 'none' + }); + return; + } + } + // if (this.pcfvalue == undefined) { + // util.showMyToast('必须勾选《用户服务协议》及《隐私政策》'); + // return; + // } + let post = { + username: this.userName, + password: this.password, + tel: this.phoneNumber, + smsCode: this.smsCode + // openId: '123456789' + } + // const { + // code + // } = await this.$http.request('get', '/api/login/admin') + const resp = await this.$store.dispatch(this.apitype, post); + // uni.hideLoading() - if (resp.code === 0) { + if (resp.code === 0) { - // myCache.cache("userToken", res.data.accessToken) - // let userRes = await gzmzApi.getMemberInfo(); - // if (userRes.status) { - // myCache.cache("userInfo", JSON.stringify(userRes.data)) - // } - // setTimeout(() => { - // uni.navigateBack(); - // }, 1000); + // myCache.cache("userToken", res.data.accessToken) + // let userRes = await gzmzApi.getMemberInfo(); + // if (userRes.status) { + // myCache.cache("userInfo", JSON.stringify(userRes.data)) + // } + // setTimeout(() => { + // uni.navigateBack(); + // }, 1000); - } else { - // uni.showToast({ - // title: '登录失败!', - // icon: 'none' - // }); - return; - } + } else { + // uni.showToast({ + // title: '登录失败!', + // icon: 'none' + // }); + return; + } - }, - tc1(id) { - uni.navigateTo({ - url: '/pages/users/xieyi?id=' + id, - }); - } - } -}; + }, + tc1(id) { + uni.navigateTo({ + url: '/pages/users/xieyi?id=' + id, + }); + } + } + }; </script> <style lang="scss" scoped> -.form-input { - background-color: #f8f7fc; - border-radius: 50rpx; - margin-bottom: 50rpx; - border: 1px solid #e9e9e9; + .form-input { + background-color: #f8f7fc; + border-radius: 50rpx; + margin-bottom: 50rpx; + border: 1px solid #e9e9e9; - /deep/ .u-input { - padding-left: 60rpx !important; - padding-right: 40rpx !important; - } + /deep/ .u-input { + padding-left: 60rpx !important; + padding-right: 40rpx !important; + } - /deep/ input { - height: 70rpx; - line-height: 70rpx; + /deep/ input { + height: 70rpx; + line-height: 70rpx; - } + } -} + } </style> <style lang="scss" scoped> -@import './login.scss'; + @import './login.scss'; -.main-container { - margin: 20px 0; -} + .main-container { + margin: 20px 0; + } -.img-a { - position: absolute; - width: 100%; - top: -150rpx; - right: 0; -} + .img-a { + position: absolute; + width: 100%; + top: -150rpx; + right: 0; + } -.img-b { - position: absolute; - width: 50%; - bottom: 0; - left: -120rpx; -} + .img-b { + position: absolute; + width: 50%; + bottom: 0; + left: -120rpx; + } -.to-home { - margin-top: 30rpx; - font-size: 30rpx; - color: #5af; - display: flex; - flex-direction: row-reverse; -} + .to-home { + margin-top: 30rpx; + font-size: 30rpx; + color: #5af; + display: flex; + flex-direction: row-reverse; + } -.t-login { - width: 100%; - margin: 0 auto; - font-size: 28rpx; - color: #000; -} + .t-login { + width: 100%; + margin: 0 auto; + font-size: 28rpx; + color: #000; + } -.t-login .bg { - width: 100%; - position: relative; -} + .t-login .bg { + width: 100%; + position: relative; + } -.t-login .login { - width: 650rpx; - margin: 60rpx auto; - margin-top: 0rpx; - font-size: 28rpx; - color: #000; -} + .t-login .login { + width: 650rpx; + margin: 60rpx auto; + margin-top: 0rpx; + font-size: 28rpx; + color: #000; + } -.t-login button { - font-size: 28rpx; - background: #5677fc; - color: #fff; - height: 90rpx; - line-height: 90rpx; - border-radius: 50rpx; - box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2); -} + .t-login button { + font-size: 28rpx; + background: #5677fc; + color: #fff; + height: 90rpx; + line-height: 90rpx; + border-radius: 50rpx; + box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2); + } -.t-login input { - padding: 0 20rpx 0 60rpx; - height: 90rpx; - line-height: 90rpx; - margin-bottom: 50rpx; - background: #f8f7fc; - border: 1px solid #e9e9e9; - font-size: 28rpx; - border-radius: 50rpx; -} + .t-login input { + padding: 0 20rpx 0 60rpx; + height: 90rpx; + line-height: 90rpx; + margin-bottom: 50rpx; + background: #f8f7fc; + border: 1px solid #e9e9e9; + font-size: 28rpx; + border-radius: 50rpx; + } -.t-login .t-a { - position: relative; + .t-login .t-a { + position: relative; - .get-code { - // position: absolute; - // right: 40rpx; - // top: 25rpx; - } -} + .get-code { + // position: absolute; + // right: 40rpx; + // top: 25rpx; + } + } -.t-login .t-a .icon { - width: 40rpx; - height: 40rpx; - position: absolute; - left: 24rpx; - top: 14rpx; - margin-right: 20rpx; -} + .t-login .t-a .icon { + width: 40rpx; + height: 40rpx; + position: absolute; + left: 24rpx; + top: 14rpx; + margin-right: 20rpx; + } -.t-login .t-a .line { - width: 2rpx; - height: 40rpx; - background-color: #dedede; - position: absolute; - top: 28rpx; - left: 98rpx; -} + .t-login .t-a .line { + width: 2rpx; + height: 40rpx; + background-color: #dedede; + position: absolute; + top: 28rpx; + left: 98rpx; + } -.t-login .t-b { - text-align: left; - font-size: 46rpx; - color: #000; - padding: 300rpx 0 30rpx 0; - font-weight: bold; -} + .t-login .t-b { + text-align: left; + font-size: 46rpx; + color: #000; + padding: 300rpx 0 30rpx 0; + font-weight: bold; + } -.t-login .t-b2 { - text-align: left; - font-size: 32rpx; - color: #aaaaaa; - padding: 0rpx 0 120rpx 0; -} + .t-login .t-b2 { + text-align: left; + font-size: 32rpx; + color: #aaaaaa; + padding: 0rpx 0 120rpx 0; + } -.t-login .t-c { - position: absolute; - right: 22rpx; - top: 22rpx; - background: #5677fc; - color: #fff; - font-size: 24rpx; - border-radius: 50rpx; - height: 50rpx; - line-height: 50rpx; - padding: 0 25rpx; - z-index: 999; -} + .t-login .t-c { + position: absolute; + right: 22rpx; + top: 22rpx; + background: #5677fc; + color: #fff; + font-size: 24rpx; + border-radius: 50rpx; + height: 50rpx; + line-height: 50rpx; + padding: 0 25rpx; + z-index: 999; + } -.t-login .t-d { - text-align: center; - color: #999; - margin: 80rpx 0; -} + .t-login .t-d { + text-align: center; + color: #999; + margin: 80rpx 0; + } -.t-login .t-e { - text-align: center; - width: 250rpx; - margin: 80rpx auto 0; -} + .t-login .t-e { + text-align: center; + width: 250rpx; + margin: 80rpx auto 0; + } -.t-login .t-g { - float: left; - width: 50%; -} + .t-login .t-g { + float: left; + width: 50%; + } -.t-login .t-e image { - width: 50rpx; - height: 50rpx; -} + .t-login .t-e image { + width: 50rpx; + height: 50rpx; + } -.t-login .t-f { - text-align: center; - margin: 200rpx 0 0 0; - color: #666; -} + .t-login .t-f { + text-align: center; + margin: 200rpx 0 0 0; + color: #666; + } -.t-login .t-f text { - margin-left: 20rpx; - color: #aaaaaa; - font-size: 27rpx; -} + .t-login .t-f text { + margin-left: 20rpx; + color: #aaaaaa; + font-size: 27rpx; + } -// .t-login .uni-input-placeholder { -// color: #000; -// } + // .t-login .uni-input-placeholder { + // color: #000; + // } -.cl { - zoom: 1; -} + .cl { + zoom: 1; + } -.cl:after { - clear: both; - display: block; - visibility: hidden; - height: 0; - content: '\20'; -} + .cl:after { + clear: both; + display: block; + visibility: hidden; + height: 0; + content: '\20'; + } </style> \ No newline at end of file -- Gitblit v1.9.3