提交 60c2ced4 编写于 作者: DCloud_JSON's avatar DCloud_JSON

- 优化登陆体验,账号密码登陆错误超过2次,再显示图形验证码进行人机校验。

上级 ded9c842
## 1.2.2(2022-05-19)
- 优化登陆体验,账号密码登陆错误超过2次,再显示图形验证码进行人机校验。
## 1.2.1(2022-05-18) ## 1.2.1(2022-05-18)
- 修复在某些情况下,微信小程序端验证码显示错误的问题 - 修复在某些情况下,微信小程序端验证码显示错误的问题
## 1.2.0(2022-05-16) ## 1.2.0(2022-05-16)
......
{ {
"name" : "uni-starter-old", "name": "",
"appid" : "__UNI__EC87F46", "appid": "请点击重新获取",
"description" : "云端一体应用快速开发模版", "description": "云端一体应用快速开发模版",
"versionName" : "1.0.0", "versionName": "1.0.0",
"versionCode" : "100", "versionCode": "100",
"transformPx" : false, "transformPx": false,
"app-plus" : { "app-plus": {
"locales" : { "locales": {
"en" : { "en": {
"name" : "uni-starter", "name": "uni-starter",
"android" : { "android": {
"strings" : { "strings": {
"CustomKey" : "CustomValue" "CustomKey": "CustomValue"
} }
}, },
"ios" : { "ios": {
"privacyDescription" : { "privacyDescription": {
"NSPhotoLibraryUsageDescription" : "access to the user’s photo library(read)" "NSPhotoLibraryUsageDescription": "access to the user’s photo library(read)"
}, },
"infoPlist" : { "infoPlist": {
"CustomKey" : "CustomValue" "CustomKey": "CustomValue"
} }
} }
}, },
"zh" : { "zh": {
"name" : "统一应用基本项目" "name": "统一应用基本项目"
} }
}, },
"privacy" : { "privacy": {
"prompt" : "template", "prompt": "template",
"template" : { "template": {
"title" : "服务协议和隐私政策", "title": "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。", "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意", "buttonAccept": "同意",
"buttonRefuse" : "暂不同意" "buttonRefuse": "暂不同意"
} }
}, },
"compatible" : { "compatible": {
"ignoreVersion" : true "ignoreVersion": true
}, },
"usingComponents" : true, "usingComponents": true,
"nvueStyleCompiler" : "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion" : 3, "compilerVersion": 3,
"splashscreen" : { "splashscreen": {
"alwaysShowBeforeRender" : false, "alwaysShowBeforeRender": false,
"waiting" : true, "waiting": true,
"autoclose" : true, "autoclose": true,
"delay" : 0 "delay": 0
}, },
"modules" : { "modules": {
"Fingerprint" : {}, "Fingerprint": {
"Share" : {}, },
"OAuth" : {}, "Share": {
"FaceID" : {}, },
"Geolocation" : {}, "OAuth": {
"Bluetooth" : {}, },
"Push" : {}, "FaceID": {
"Maps" : {} },
}, "Geolocation": {
"distribute" : { },
"android" : { "Bluetooth": {
"permissions" : [ },
"Push": {
},
"Maps": {
}
},
"distribute": {
"android": {
"permissions": [
"<uses-feature android:name=\"android.hardware.camera\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
...@@ -78,136 +86,156 @@ ...@@ -78,136 +86,156 @@
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
], ],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ] "abiFilters": [
"armeabi-v7a",
"arm64-v8a",
"x86"
]
}, },
"ios" : { "ios": {
"capabilities" : { "capabilities": {
"entitlements" : { "entitlements": {
"com.apple.developer.associated-domains" : [ "applinks:static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com" ] "com.apple.developer.associated-domains": [
"applinks:static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com"
]
} }
} }
}, },
"sdkConfigs" : { "sdkConfigs": {
"oauth" : { "oauth": {
"apple" : {}, "apple": {
"weixin" : {
"appid" : "",
"appsecret" : "",
"UniversalLinks" : ""
}, },
"univerify" : {} "weixin": {
"appid": "",
"appsecret": "",
"UniversalLinks": ""
}, },
"ad" : {}, "univerify": {
"share" : {
"weixin" : {
"appid" : "",
"UniversalLinks" : ""
} }
}, },
"geolocation" : { "ad": {
"baidu" : { },
"__platform__" : [ "ios", "android" ], "share": {
"appkey_ios" : "请填写地图的key", "weixin": {
"appkey_android" : "请填写地图的key" "appid": "",
"UniversalLinks": ""
}
},
"geolocation": {
"baidu": {
"__platform__": [
"ios",
"android"
],
"appkey_ios": "请填写地图的key",
"appkey_android": "请填写地图的key"
} }
}, },
"push" : { "push": {
"unipush" : { "unipush": {
"version" : "2", "version": "2",
"offline" : true, "offline": true,
"meizu" : {}, "meizu": {
"mi" : {}, },
"vivo" : {}, "mi": {
"oppo" : {}, },
"hms" : {} "vivo": {
},
"oppo": {
},
"hms": {
} }
}
},
"payment": {
}, },
"payment" : {}, "maps": {
"maps" : {} }
}, },
"icons" : { "icons": {
"android" : { "android": {
"hdpi" : "", "hdpi": "",
"xhdpi" : "", "xhdpi": "",
"xxhdpi" : "", "xxhdpi": "",
"xxxhdpi" : "" "xxxhdpi": ""
}, },
"ios" : { "ios": {
"appstore" : "", "appstore": "",
"ipad" : { "ipad": {
"app" : "", "app": "",
"app@2x" : "", "app@2x": "",
"notification" : "", "notification": "",
"notification@2x" : "", "notification@2x": "",
"proapp@2x" : "", "proapp@2x": "",
"settings" : "", "settings": "",
"settings@2x" : "", "settings@2x": "",
"spotlight" : "", "spotlight": "",
"spotlight@2x" : "" "spotlight@2x": ""
}, },
"iphone" : { "iphone": {
"app@2x" : "", "app@2x": "",
"app@3x" : "", "app@3x": "",
"notification@2x" : "", "notification@2x": "",
"notification@3x" : "", "notification@3x": "",
"settings@2x" : "", "settings@2x": "",
"settings@3x" : "", "settings@3x": "",
"spotlight@2x" : "", "spotlight@2x": "",
"spotlight@3x" : "" "spotlight@3x": ""
} }
} }
}, },
"splashscreen" : { "splashscreen": {
"iosStyle" : "common", "iosStyle": "common",
"androidStyle" : "common", "androidStyle": "common",
"useOriginalMsgbox" : true "useOriginalMsgbox": true
} }
}, },
"nvueLaunchMode" : "" "nvueLaunchMode": ""
},
"quickapp": {
}, },
"quickapp" : {}, "mp-weixin": {
"mp-weixin" : { "appid": "",
"appid" : "", "setting": {
"setting" : { "urlCheck": false,
"urlCheck" : false, "es6": false
"es6" : false
}, },
"usingComponents" : true, "usingComponents": true,
"betterScopedSlots" : true, "betterScopedSlots": true,
"permission" : { "permission": {
"scope.userLocation" : { "scope.userLocation": {
"desc" : "演示在onShow生命周期获取地理位置" "desc": "演示在onShow生命周期获取地理位置"
} }
} }
}, },
"mp-alipay" : { "mp-alipay": {
"usingComponents" : true "usingComponents": true
}, },
"mp-baidu" : { "mp-baidu": {
"usingComponents" : true "usingComponents": true
}, },
"mp-toutiao" : { "mp-toutiao": {
"usingComponents" : true "usingComponents": true
}, },
"uniStatistics" : { "uniStatistics": {
"enable" : false "enable": false
}, },
"h5" : { "h5": {
"template" : "", "template": "",
"sdkConfigs" : { "sdkConfigs": {
"maps" : { "maps": {
"qqmap" : { "qqmap": {
"key" : "" "key": ""
} }
} }
}, },
"router" : { "router": {
"base" : "" "base": ""
}, },
"uniStatistics" : { "uniStatistics": {
"enable" : true "enable": true
} }
}, },
"_spaceID" : "", "_spaceID": "",
"vueVersion" : "2" "vueVersion": "2"
} }
\ No newline at end of file
{ {
"id": "uni-starter", "id": "uni-starter",
"displayName": "uni-starter", "displayName": "uni-starter",
"version": "1.2.1", "version": "1.2.2",
"description": "云端一体应用快速开发基本项目模版", "description": "云端一体应用快速开发基本项目模版",
"keywords": [ "keywords": [
"login", "login",
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<input type="number" class="input-box" :inputBorder="false" v-model="phone" maxlength="11" <input type="number" class="input-box" :inputBorder="false" v-model="phone" maxlength="11"
:placeholder="$t('common.phonePlaceholder')" /> :placeholder="$t('common.phonePlaceholder')" />
<uni-agreements @setAgree="agree = $event"></uni-agreements> <uni-agreements @setAgree="agree = $event"></uni-agreements>
<button class="get-code" :disabled="!isPhone" :type="isPhone?'primary':'default'" <button class="get-code" :disabled="!isPhone || !agree" :type="isPhone&&agree?'primary':'default'"
@click="sendShortMsg">{{$t('login.getVerifyCode')}}</button> @click="sendShortMsg">{{$t('login.getVerifyCode')}}</button>
<text class="tip">{{$t('login.phoneLoginTip')}}</text> <text class="tip">{{$t('login.phoneLoginTip')}}</text>
</template> </template>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<text class="title">{{$t('pwdLogin.pwdLogin')}}</text> <text class="title">{{$t('pwdLogin.pwdLogin')}}</text>
<input class="input-box" :inputBorder="false" v-model="username" :placeholder="$t('pwdLogin.placeholder')"/> <input class="input-box" :inputBorder="false" v-model="username" :placeholder="$t('pwdLogin.placeholder')"/>
<input type="password" class="input-box" :inputBorder="false" v-model="password" :placeholder="$t('pwdLogin.passwordPlaceholder')"/> <input type="password" class="input-box" :inputBorder="false" v-model="password" :placeholder="$t('pwdLogin.passwordPlaceholder')"/>
<uni-captcha scene="login" v-model="captcha"></uni-captcha> <uni-captcha v-if="needCaptcha" scene="login" v-model="captcha"></uni-captcha>
<uni-agreements class="agreement" @setAgree="agree = $event"></uni-agreements> <uni-agreements class="agreement" @setAgree="agree = $event"></uni-agreements>
<button class="send-btn" :disabled="!canLogin" :type="canLogin?'primary':'default'" <button class="send-btn" :disabled="!canLogin" :type="canLogin?'primary':'default'"
@click="pwdLogin">{{$t('pwdLogin.login')}}</button> @click="pwdLogin">{{$t('pwdLogin.login')}}</button>
...@@ -26,12 +26,13 @@ ...@@ -26,12 +26,13 @@
"password": "", "password": "",
"username": "", "username": "",
"agree": false, "agree": false,
"captcha":false "captcha":'',
"needCaptcha":false
} }
}, },
computed: { computed: {
canLogin() { canLogin() {
return this.username.length && this.isPwd; return this.username.length && this.isPwd && this.agree;
}, },
isPwd() { isPwd() {
return /^.{6,20}$/.test(this.password); return /^.{6,20}$/.test(this.password);
...@@ -79,7 +80,8 @@ ...@@ -79,7 +80,8 @@
title: result.msg||'完成', title: result.msg||'完成',
icon: 'none' icon: 'none'
}); });
this.createCaptcha() this.needCaptcha = true
// this.createCaptcha()
}else{ }else{
uni.showModal({ uni.showModal({
title: this.$t('common').error, title: this.$t('common').error,
......
## 0.5.2(2022-05-19)
- 修复在Vue3的兼容问题
## 0.5.1(2022-05-18) ## 0.5.1(2022-05-18)
- 修复在某些情况下微信小程序端验证码显示错误的问题 - 修复在某些情况下微信小程序端验证码显示错误的问题
## 0.5.0(2022-05-17) ## 0.5.0(2022-05-17)
......
...@@ -6,26 +6,15 @@ ...@@ -6,26 +6,15 @@
mode="widthFix"></image> mode="widthFix"></image>
</view> </view>
<input @blur="focusCaptchaInput = false" :focus="focusCaptchaInput" type="text" class="captcha" <input @blur="focusCaptchaInput = false" :focus="focusCaptchaInput" type="text" class="captcha"
:inputBorder="false" maxlength="4" v-model="modelValue" placeholder="请输入验证码"> :inputBorder="false" maxlength="4" v-model="val" placeholder="请输入验证码">
</view> </view>
</template> </template>
<script> <script>
export default { export default {
data() {
return {
focusCaptchaInput: false,
modelValue: "",
captchaBase64: "",
loging: false
};
},
model: {
prop: 'modelValue',
event: 'update:modelValue'
},
props: { props: {
event: 'update:modelValue', modelValue:String,
value:String,
scene: { scene: {
type: String, type: String,
default () { default () {
...@@ -39,13 +28,33 @@ ...@@ -39,13 +28,33 @@
} }
} }
}, },
watch: { computed:{
modelValue(value) { val:{
get(){
return this.value||this.modelValue
},
set(value){
// console.log(value);
// TODO 兼容 vue2 // TODO 兼容 vue2
// #ifdef VUE2
this.$emit('input', value); this.$emit('input', value);
// #endif
// TODO 兼容 vue3 // TODO 兼容 vue3
// #ifdef VUE3
this.$emit('update:modelValue', value) this.$emit('update:modelValue', value)
// #endif
}
}
},
data() {
return {
focusCaptchaInput: false,
captchaBase64: "",
loging: false
};
}, },
watch: {
scene: { scene: {
handler(scene) { handler(scene) {
if (scene) { if (scene) {
...@@ -63,8 +72,8 @@ ...@@ -63,8 +72,8 @@
methods: { methods: {
getImageCaptcha(focus = true) { getImageCaptcha(focus = true) {
this.loging = true this.loging = true
this.modelValue = ''
if (focus) { if (focus) {
this.val = ''
this.focusCaptchaInput = true this.focusCaptchaInput = true
} }
const uniIdCo = uniCloud.importObject("uni-captcha-co", { const uniIdCo = uniCloud.importObject("uni-captcha-co", {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<view class="popup-captcha"> <view class="popup-captcha">
<view class="content"> <view class="content">
<text class="title">{{title}}</text> <text class="title">{{title}}</text>
<uni-captcha :scene="scene" v-model="modelValue"></uni-captcha> <uni-captcha :scene="scene" v-model="val"></uni-captcha>
</view> </view>
<view class="button-box"> <view class="button-box">
<view @click="close" class="btn">取消</view> <view @click="close" class="btn">取消</view>
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
<script> <script>
export default { export default {
data() {
return {
modelValue: "",
};
},
model: {
prop: 'modelValue',
event: 'update:modelValue'
},
props: { props: {
event: 'update:modelValue', modelValue:String,
value:String,
scene: { scene: {
type: String, type: String,
default () { default () {
...@@ -39,12 +31,23 @@ ...@@ -39,12 +31,23 @@
} }
}, },
}, },
watch: { computed:{
modelValue(value) { val:{
get(){
return this.value||this.modelValue
},
set(value){
// console.log(value);
// TODO 兼容 vue2 // TODO 兼容 vue2
// #ifdef VUE2
this.$emit('input', value); this.$emit('input', value);
// #endif
// TODO 兼容 vue3 // TODO 兼容 vue3
// #ifdef VUE3
this.$emit('update:modelValue', value) this.$emit('update:modelValue', value)
// #endif
}
} }
}, },
methods: { methods: {
...@@ -55,7 +58,7 @@ ...@@ -55,7 +58,7 @@
this.$refs.popup.close() this.$refs.popup.close()
}, },
confirm() { confirm() {
if(this.modelValue.length < 4){ if(this.val.length < 4){
return uni.showToast({ return uni.showToast({
title: '请填写验证码', title: '请填写验证码',
icon: 'none' icon: 'none'
......
{ {
"id": "uni-captcha", "id": "uni-captcha",
"displayName": "uni-captcha", "displayName": "uni-captcha",
"version": "0.5.1", "version": "0.5.2",
"description": "云端一体图形验证码组件", "description": "云端一体图形验证码组件",
"keywords": [ "keywords": [
"uniCloud", "uniCloud",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册