Commit 6f160b2d by 朱建香

#21特殊字符判断

#22用户添加跳转到用户详情页面修改
#19用户默认名称更改
parent 88e2d434
......@@ -75,6 +75,7 @@
"register": "快速注册",
"forgetPassword": "忘记密码",
"failure": "登陆失败",
"defaultUser": "user{0}",
"error": {
"telNull": "请输入手机号",
"passWordNull": "请输入密码"
......@@ -255,6 +256,7 @@
"name": "昵称:",
"inviteBind": "邀请绑定",
"bindUnlockInfo": "关联开锁信息",
"editUsername": "编辑用户昵称",
"opendoorRecord": "历史开门记录",
"unbindDialogTip": "<span></span>解绑后,该用户不能对门锁下的信息进行查看",
"deleteUserDialogTip": "删除后,用户对应的开锁id取消关联,同时失去信息查看权限。",
......@@ -332,7 +334,8 @@
"logoutDialogTip": "确定要退出系统吗?"
},
"editNickname": {
"nickNameInputTip": "请输入昵称"
"nickNameInputTip": "请输入昵称",
"nickNameTypeTip": "请输入中文、字母和数字"
},
"editPassword": {
"newPasswordInputTip": "请输入新密码",
......
......@@ -49,6 +49,6 @@ export default {
"ringBell_timeout": 300,
"intervalTime": 3,
"getHistoryTime": 10,
"audioUrl": "../../resources/audio/tipSound.mp3"
"audioUrl": "../../resources/audio/tipSound.mp3",
// "audioUrl": "_www/resources/audio/tipSound.mp3"
}
\ No newline at end of file
......@@ -91,6 +91,16 @@ uPublic.checkResponseData = function (data) {
}
};
// 检查输入文字是否含有特殊字符
uPublic.checkString = function (text){
var pattern = new RegExp("[~!@#$%^&*()_+=|\?/{}<>:;'`]+");
if(!pattern.test(text)){
return false
}else{
return true;
}
}
uPublic.openWindow = function (params){
console.log("innnnn");
var wv = plus.webview.create(params.url, params.id, {styles: params.styles || {} }, { IOTData: params.extras });
......
......@@ -83,9 +83,13 @@ function initComponentsConfig() {
}
function nameChange(self,text){
self.setTextName(text);
self.setTextErrorTip('');
console.log('nameChange: ' + self.textName);
if(uPublic.checkString(text)){
self.setTextErrorTip(Vue.t('editNickname.nickNameTypeTip'));
}else{
self.setTextName(text);
self.setTextErrorTip('');
console.log('nameChange: ' + self.textName);
}
}
//tap <
......
......@@ -92,9 +92,13 @@ function backTap(){
}
function nameChange(self,text){
self.textName = text;
self.setTextErrorTip(null);
console.log('nameChange: ' + self.textName);
if(uPublic.checkString(text)){
self.setTextErrorTip(Vue.t('editNickname.nickNameTypeTip'));
}else{
self.textName = text;
self.setTextErrorTip(null);
console.log('nameChange: ' + self.textName);
}
}
//tap 确定
......
......@@ -42,7 +42,6 @@ function init() {
getUserInfo(self);
});
getUserInfo(this);
checkFirstAddUser(this);
},
methods:{
getBindShowFlag(){
......@@ -109,12 +108,9 @@ function init() {
onBackTap(){
backTap();
},
onEditNameTap(){
editNameTap(this);
},
//tap 邀请绑定
onBindTap(){
bindTap(this);
onBindButtonTap(){
bindButtonTap(this);
},
//tap 解绑
onUnbindButtonTap(){
......@@ -124,6 +120,10 @@ function init() {
onBindUnlockInfoTap(){
bindUnlockInfoTap(this);
},
//tap 编辑用户昵称
onEditNameTap(){
editNameTap(this);
},
//tap 历史开门记录
onOpendoorRecordTap(){
opendoorRecordTap(this);
......@@ -150,6 +150,27 @@ function init() {
//配置组件参数
function initComponentsConfig() {
return {
//绑定 button 参数
bindButton: {
initParam: {
class: 'custom-unbind-button',
text: Vue.t('doorlockUser.inviteBind')
}
},
//解绑 button 参数
unbindButton: {
initParam: {
class: 'custom-unbind-button',
text: Vue.t('btn.unbind')
}
},
//解绑 button 参数
unbindButton: {
initParam: {
class: 'custom-unbind-button',
text: Vue.t('btn.unbind')
}
},
//解绑 button 参数
unbindButton: {
initParam: {
......@@ -209,21 +230,30 @@ function checkFirstAddUser(self){
//显示动画
async function showGuide(self){
self.setGuideShowFlag(true);
try{
let time =await sleep(1000);
self.setGuideStep1ShowFlag(true);
time = await sleep(1000);
self.setGuideStep2ShowFlag(true);
// time = await sleep(1000);
// self.setGuideStep3ShowFlag(true),
//
// time = await sleep(1000);
// self.setGuideStep4ShowFlag(true);
}
catch (err){
console.log(err);
let time = null
console.log(self.userInfo.role);
if(self.userInfo.role == 0){
try{
time = await sleep(1000);
self.setGuideStep3ShowFlag(true),
time = await sleep(1000);
self.setGuideStep4ShowFlag(true);
}
catch (err){
console.log(err);
}
}else{
try{
time =await sleep(1000);
self.setGuideStep1ShowFlag(true);
time = await sleep(1000);
self.setGuideStep2ShowFlag(true);
}
catch (err){
console.log(err);
}
}
}
......@@ -261,6 +291,7 @@ function getUserInfo(self){
if(data){
self.setInfo(data);
setUserInfo(self, data);
checkFirstAddUser(self);
}else{}
},
......@@ -310,9 +341,9 @@ function backTap(){
iot.navigator.aback();
}
//修改用户名
//tap 编辑用户昵
function editNameTap(self){
if(!self.role){
if(!self.role && self.getUnbindShowFlag()){
iot.navigator.openWindow({
url: './editName.html',
id: 'editName',
......@@ -327,7 +358,7 @@ function editNameTap(self){
}
//tap 邀请绑定
function bindTap(self){
function bindButtonTap(self){
iot.navigator.openWindow({
url: './inviteBind.html',
id: 'inviteBind',
......@@ -428,14 +459,16 @@ function bindUnlockInfoTap(self){
//tap 历史开门记录
function opendoorRecordTap(self){
iot.navigator.openWindow({
url: '../device/opendoorRecord.html',
id: 'opendoorRecord',
extras: {
relId: self.extras.id,
deviceId: self.getInfo().device_id
}
});
if(self.getUnbindShowFlag()){
iot.navigator.openWindow({
url: '../device/opendoorRecord.html',
id: 'opendoorRecord',
extras: {
relId: self.extras.id,
deviceId: self.getInfo().device_id
}
});
}
}
//tap 删除该用户
......
......@@ -149,7 +149,11 @@ function saveTap(self){
}
function nameChange(self,text){
self.textName = text;
self.setTextErrorTip(null);
console.log('nameChange: ' + self.textName);
if(uPublic.checkString(text)){
self.setTextErrorTip(Vue.t('editNickname.nickNameTypeTip'));
}else{
self.textName = text;
self.setTextErrorTip(null);
console.log('nameChange: ' + self.textName);
}
}
\ No newline at end of file
......@@ -223,7 +223,7 @@ function onTapUserList(self, listIndex) {
extras: {
id: self.getUserListData()[listIndex].id,
uuid: self.extras.uuid,
account: self.getUserListData()[listIndex].account,
// account: self.getUserListData()[listIndex].account,
lockId: self.extras.lockId,
role: self.extras.role
}
......
......@@ -178,6 +178,27 @@ function cloudsLogin(self, id){
var data = uPublic.checkResponseData(response.data);
var infoArray = [];
if(data){
//判断是否有昵称
if(data.nickname == '' || data.nickname.trim() == ''){
iot.business.user.setInfo({
data: {
nickname: Vue.t('login.defaultUser',[data.username.substr(10,3)]),
head: ''
},
success: (response) => {
if(response.data = 'success'){
iot.navigator.aback();
}
},
error: (error) => {
console.log(error);
uPublic.openRequestErrorAlert(self);
},
complete: () => {
uComponents.hideLoading(self);
}
});
}
infoArray.push(['utoken', data.utoken]);
infoArray.push(['userinfo', data]);
iot.business.websql.setMaps(infoArray, () =>{
......
......@@ -119,6 +119,10 @@ function backTap(){
}
function nicknameChange(self, text){
self.textNickName = text;
self.textErrorTip = '';
if(uPublic.checkString(text)){
self.textErrorTip = Vue.t('editNickname.nickNameTypeTip');
}else{
self.textNickName = text;
self.textErrorTip = '';
}
}
......@@ -71,15 +71,14 @@
.userInfo-title{
font-size: @USERINFOLINK-TITLE-FONTSIZE;
.text_oneRow_ellipsis();
margin-bottom: 5px;
position: relative;
padding-right: 65px;
padding-right: 104px;
// > icon
&:after{
content: '\e6a7';
.transformV_center(right,35px);
.iconfont(@USERINFOLINK-ICON-FONTSIZE);
}
// &:after{
// content: '\e6a7';
// .transformV_center(right,35px);
// .iconfont(@USERINFOLINK-ICON-FONTSIZE);
// }
}
.userInfo-subtitle{
position: relative;
......@@ -104,26 +103,16 @@
display: inline-block;
color: @USERINFOLINK-INVITEBIND-COLOR;
font-size: @USERINFOLINK-INVITEBIND-FONTSIZE;
.transform(scale(0.7));
padding: 0 22px 2px;
margin-left: -15px;
&:after{
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;/*no*/
.blue_gradient_border();
}
}
//解绑
.custom-unbind-button{
position: absolute;
top: -4px;
margin-left: 6px;
position: absolute;
top: 50%;
bottom: auto;
right: 35px;
.button(72px);
.transform(scale(0.7));
.transform(translateY(-50%) scale(0.7));
padding: 5px 0;
display: inline-block;
}
......@@ -138,6 +127,10 @@
}
}
}
.disabled{
color: #ccc;
}
}
//邀请绑定
......@@ -219,51 +212,62 @@
left: 0;
width: 100%;
.guideStep1Cont{
padding: 13px 0 13px 42px;
padding: 25px 0 25px 42px;
position: relative;
p{
&:nth-child(1){
font-size: @USERINFOLINK-TITLE-FONTSIZE;
.text_oneRow_ellipsis();
margin-bottom: 5px;
position: relative;
padding-right: 65px;
// > icon
&:after{
content: '\e6a7';
.transformV_center(right,35px);
.iconfont(@USERINFOLINK-ICON-FONTSIZE);
}
}
&:nth-child(2){
position: relative;
}
//绑定/未绑定 头像
img{
width: 20px;
height: 20px;
margin-right: 13px;
}
//邀请绑定
span{
position: absolute;
bottom: 0;
display: inline-block;
color: @USERINFOLINK-INVITEBIND-COLOR;
font-size: @USERINFOLINK-INVITEBIND-FONTSIZE;
.transform(scale(0.7));
padding: 0 22px 2px;
margin-left: -15px;
&:after{
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;/*no*/
.blue_gradient_border();
}
}
.userInfo-title{
font-size: @USERINFOLINK-TITLE-FONTSIZE;
.text_oneRow_ellipsis();
position: relative;
padding-right: 104px;
}
//管理员头像
.userInfo-image{
width: 27px;
height: 27px;
margin-right: 14px;
}
//绑定/未绑定 头像
.userInfo-subimage{
width: 20px;
height: 20px;
margin-right: 9px;
}
.userInfo-subtitle{
position: relative;
}
//绑定/未绑定 头像
.userInfo-subimage{
width: 20px;
height: 20px;
margin-right: 9px;
}
//昵称
.userInfo-name{
display: inline-block;
vertical-align: middle;
max-width: 145px;
.text_oneRow_ellipsis();
}
//邀请绑定
.userInfo-toBind{
position: absolute;
bottom: 0;
display: inline-block;
color: @USERINFOLINK-INVITEBIND-COLOR;
font-size: @USERINFOLINK-INVITEBIND-FONTSIZE;
margin-left: -15px;
}
//解绑
.custom-unbind-button{
position: absolute;
top: 50%;
bottom: auto;
right: 35px;
.button(72px);
.transform(translateY(-50%) scale(0.7));
padding: 5px 0;
display: inline-block;
}
//虚线框
&:after{
......
......@@ -705,22 +705,8 @@ p {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-bottom: 0.133rem;
position: relative;
padding-right: 1.733rem;
}
.userInfoLink li.userInfo .userInfo-title:after {
content: '\e6a7';
position: absolute;
top: 50%;
right: 0.933rem;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
font-family: iconfont;
font-size: 0.667rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
padding-right: 2.773rem;
}
.userInfoLink li.userInfo .userInfo-subtitle {
......@@ -748,35 +734,22 @@ p {
display: inline-block;
color: #00ffff;
font-size: 0.427rem;
-webkit-transform: scale(0.7);
transform: scale(0.7);
padding: 0 0.587rem 0.053rem;
margin-left: -0.4rem;
}
.userInfoLink li.userInfo .userInfo-toBind:after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: -webkit-linear-gradient(left, #242635, #00ffff, #242635);
background: linear-gradient(to right, #242635, #00ffff, #242635);
}
.userInfoLink li.userInfo .custom-unbind-button {
position: absolute;
top: -0.107rem;
margin-left: 0.16rem;
top: 50%;
bottom: auto;
right: 0.933rem;
width: 1.92rem;
border-radius: 0.133rem;
background-color: transparent;
border: 1px solid;
color: #00ffff;
font-size: 0.427rem;
-webkit-transform: scale(0.7);
transform: scale(0.7);
-webkit-transform: translateY(-50%) scale(0.7);
transform: translateY(-50%) scale(0.7);
padding: 0.133rem 0;
display: inline-block;
}
......@@ -800,6 +773,10 @@ p {
background-color: #50515d;
}
.userInfoLink .disabled {
color: #ccc;
}
.inviteBind {
margin: 1.093rem 1.12rem 0;
}
......@@ -940,64 +917,83 @@ p {
}
.guide-dialog .guideStep1 .guideStep1Cont {
padding: 0.347rem 0 0.347rem 1.12rem;
padding: 0.667rem 0 0.667rem 1.12rem;
position: relative;
}
.guide-dialog .guideStep1 .guideStep1Cont p:nth-child(1) {
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-title {
font-size: 0.427rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-bottom: 0.133rem;
position: relative;
padding-right: 1.733rem;
padding-right: 2.773rem;
}
.guide-dialog .guideStep1 .guideStep1Cont p:nth-child(1):after {
content: '\e6a7';
position: absolute;
top: 50%;
right: 0.933rem;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
font-family: iconfont;
font-size: 0.667rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-image {
width: 0.72rem;
height: 0.72rem;
margin-right: 0.373rem;
}
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-subimage {
width: 0.533rem;
height: 0.533rem;
margin-right: 0.24rem;
}
.guide-dialog .guideStep1 .guideStep1Cont p:nth-child(2) {
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-subtitle {
position: relative;
}
.guide-dialog .guideStep1 .guideStep1Cont p img {
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-subimage {
width: 0.533rem;
height: 0.533rem;
margin-right: 0.347rem;
margin-right: 0.24rem;
}
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-name {
display: inline-block;
vertical-align: middle;
max-width: 3.867rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.guide-dialog .guideStep1 .guideStep1Cont p span {
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-toBind {
position: absolute;
bottom: 0;
display: inline-block;
color: #00ffff;
font-size: 0.427rem;
-webkit-transform: scale(0.7);
transform: scale(0.7);
padding: 0 0.587rem 0.053rem;
margin-left: -0.4rem;
}
.guide-dialog .guideStep1 .guideStep1Cont p span:after {
content: '';
.guide-dialog .guideStep1 .guideStep1Cont .custom-unbind-button {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: -webkit-linear-gradient(left, #242635, #00ffff, #242635);
background: linear-gradient(to right, #242635, #00ffff, #242635);
top: 50%;
bottom: auto;
right: 0.933rem;
width: 1.92rem;
border-radius: 0.133rem;
background-color: transparent;
border: 1px solid;
color: #00ffff;
font-size: 0.427rem;
-webkit-transform: translateY(-50%) scale(0.7);
transform: translateY(-50%) scale(0.7);
padding: 0.133rem 0;
display: inline-block;
}
.guide-dialog .guideStep1 .guideStep1Cont .custom-unbind-button:active {
background-color: #153D4C;
}
.guide-dialog .guideStep1 .guideStep1Cont .custom-unbind-button.disabled {
background-color: transparent;
color: #999;
}
.guide-dialog .guideStep1 .guideStep1Cont:after {
......
......@@ -29,20 +29,16 @@
<ul class="userInfoLink">
<li class="userInfo" >
<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image">
<div>
<v-touch tag="p" class="userInfo-title" v-bind:class="{'userInfo-title-disabled': role}" v-on:tap="onEditNameTap">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</v-touch>
<p class="userInfo-subtitle">
<img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">
<!--<span class="userInfo-name" v-if="userInfo.subtitle">{{ userInfo.subtitle }}</span>-->
<v-touch tag="span" class="userInfo-toBind" v-show="bindShowFlag && !role" v-on:tap="onBindTap">{{ $t('doorlockUser.inviteBind') }}</v-touch>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
</p>
</div>
<img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
<u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
</li>
<v-touch tag="li" v-on:tap="onBindUnlockInfoTap">{{ $t('doorlockUser.bindUnlockInfo') }}</v-touch>
<v-touch tag="li" v-on:tap="onOpendoorRecordTap">{{ $t('doorlockUser.opendoorRecord') }}</v-touch>
<v-touch tag="li" v-bind:class="[{disabled: bindShowFlag}]" v-on:tap="onEditNameTap">{{ $t('doorlockUser.editUsername') }}</v-touch>
<v-touch tag="li" v-bind:class="[{disabled: bindShowFlag}]" v-on:tap="onOpendoorRecordTap">{{ $t('doorlockUser.opendoorRecord') }}</v-touch>
</ul>
<u-button :init-param="componentsConfig.deleteUserButton.initParam" v-on:u-button-tap="onDeleteUserButtonTap" v-show="!role && userInfo.role != 0"></u-button>
<u-button :disabled="bindShowFlag" :init-param="componentsConfig.deleteUserButton.initParam" v-on:u-button-tap="onDeleteUserButtonTap" v-show="!role && userInfo.role != 0"></u-button>
</div>
<transition name="fade">
<v-touch tag="div" class="unbindState-dialog" v-show="stateShowFlag" v-on:tap="onUnbindStateDialogTap">
......@@ -56,8 +52,11 @@
<transition name="fade">
<div class="guideStep1" v-show="guideStep1ShowFlag">
<div class="guideStep1Cont">
<p>我是个用户</p>
<p><img src="../../resources/image/gray_unbindHead_icon.png">{{ $t('doorlockUser.name') }}<span>{{ $t('doorlockUser.inviteBind') }}</span></p>
<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image">
<img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
<u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
</div>
<div class="guideStep1Tip">
<p>{{ $t('doorlockUser.guideStep1Tip1') }}</p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment