修复app下验证码卡死问题

This commit is contained in:
xiangheng
2024-06-04 15:37:18 +08:00
parent 334064d975
commit facd51c147
6 changed files with 1143 additions and 1082 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -9,9 +9,9 @@
<view class="verify-refresh" @click="refresh" v-show="showRefresh">
<text class="iconfont icon-refresh"></text>
</view>
<transition name="tips">
<!-- <transition name="tips"> -->
<text class="verify-tips" v-if="tipWords" :class="passFalg ? 'suc-bg':'err-bg'">{{tipWords}}</text>
</transition>
<!-- </transition> -->
</view>
</view>
@@ -104,8 +104,8 @@
backImgBase: '', //验证码背景图片
blockBackImgBase: '', //验证滑块的背景图片
backToken: "", //后端返回的唯一token值
startMoveTime: "", //移动开始的时间
endMovetime: '', //移动结束的时间
startMoveTime: 0, //移动开始的时间
endMovetime: 0, //移动结束的时间
tipsBackColor: '', //提示词的北京颜色
tipWords: '',
text: '',
@@ -227,7 +227,7 @@
//鼠标松开
end: function() {
this.endMovetime = new Date().getTime();
var _this = this;
// 判断是否重合
if (this.status && this.isEnd == false) {
if (this.type !== '1') { //图片滑动
@@ -261,20 +261,15 @@
this.showRefresh = true
this.isEnd = true;
setTimeout(() => {
if (this.mode == 'pop') {
this.$parent.clickShow = false;
}
this.refresh();
}, 1500)
}, 1000)
this.passFalg = true
this.tipWords =
`${((this.endMovetime-this.startMoveTime)/1000).toFixed(2)}s验证成功`
this.tipWords =`${((this.endMovetime-this.startMoveTime)/1000).toFixed(2)}s验证成功`
setTimeout(() => {
this.tipWords = ""
this.$emit('success', {
...data
})
// this.$parent.$emit('success', {captchaVerification})
}, 500)
} else {
this.moveBlockBackgroundColor = '#d9534f'
@@ -285,7 +280,7 @@
setTimeout(() => {
this.refresh();
}, 1000);
this.$parent.$emit('error', this)
this.$emit('error')
this.tipWords = "验证失败"
setTimeout(() => {
this.tipWords = ""
@@ -359,15 +354,15 @@
})
},
},
watch: {
// type变化则全面刷新
type: {
handler() {
console.log('type change', this.type);
// this.init()
}
}
},
// watch: {
// // type变化则全面刷新
// type: {
// handler() {
// console.log('type change', this.type);
// // this.init()
// }
// }
// },
mounted() {
this.init()
},

View File

@@ -1,135 +1,159 @@
<template>
<view class="form">
<uv-form ref="form" labelWidth="60" labelAlign="right" :model="model" :rules="rules">
<uv-form-item :customStyle="hide">
<uv-input v-model="model.username" placeholder="请输入账号"
:rules="[{ required: true, message: '请填写账号' }]" />
</uv-form-item>
<uv-form-item :customStyle="hide">
<uv-input type="password" v-model="model.password" placeholder="请输入密码"
:rules="[{ required: true, message: '请填写密码' }]" />
</uv-form-item>
<uv-form-item label="账号" name="username" prop="username">
<uv-input v-model="model.username" placeholder="请输入账号"
:rules="[{ required: true, message: '请填写账号' }]" />
</uv-form-item>
<uv-form-item label="密码" name="password" prop="password">
<uv-input type="password" v-model="model.password" placeholder="请输入密码"
:rules="[{ required: true, message: '请填写密码' }]" />
</uv-form-item>
<view class="form">
<uv-form
ref="form"
<Verify :mode="'pop'" :captchaType="'blockPuzzle'" ref="verifyRef"
:imgSize="{ width: '310px', height: '155px' }" @success="VerifySuccess"></Verify>
labelAlign="right"
:model="model"
:rules="rules"
>
<uv-form-item :customStyle="hide">
<uv-input
v-model="model.username"
placeholder="请输入账号"
:rules="[{ required: true, message: '请填写账号' }]"
/>
</uv-form-item>
<uv-form-item :customStyle="hide">
<uv-input
type="password"
v-model="model.password"
placeholder="请输入密码"
:rules="[{ required: true, message: '请填写密码' }]"
/>
</uv-form-item>
<uv-form-item label="账号" name="username" prop="username">
<uv-input
v-model="model.username"
placeholder="请输入账号"
:rules="[{ required: true, message: '请填写账号' }]"
/>
</uv-form-item>
<uv-form-item label="密码" name="password" prop="password">
<uv-input
type="password"
v-model="model.password"
placeholder="请输入密码"
:rules="[{ required: true, message: '请填写密码' }]"
/>
</uv-form-item>
<view class="footer">
<uv-button type="primary" text="登录" @click="VerifyShow"></uv-button>
</view>
</uv-form>
</view>
<Verify
:mode="'pop'"
:captchaType="'blockPuzzle'"
ref="verifyRef"
:imgSize="{ width: '310px', height: '155px' }"
@success="VerifySuccess"
></Verify>
<view class="footer">
<uv-button type="primary" text="登录" @click="VerifyShow"></uv-button>
</view>
</uv-form>
</view>
</template>
<script lang="ts" setup>
import { ref, reactive } from "vue";
import { ref, reactive } from "vue";
import Verify from "@/components/verify/verify.vue";
import Verify from "@/components/verify/verify.vue";
import { login } from "@/api/user.js";
import { setLocalStorage } from "@/utils/storage.js";
import { alert } from "@/utils/utils.js";
// import appicon from "@/static/appicon.png";
import { login } from "@/api/user.js";
import { setLocalStorage } from "@/utils/storage.js";
import { alert } from "@/utils/utils.js";
// import appicon from "@/static/appicon.png";
import { useUserStore } from "@/stores/user";
const hide = {
overflow: "hidden",
// visibility: 'hidden',
height:0,
padding:0,
border:0,
}
const userStore = useUserStore();
import { useUserStore } from "@/stores/user";
const hide = {
overflow: "hidden",
// visibility: 'hidden',
height: 0,
padding: 0,
border: 0,
};
const userStore = useUserStore();
const model = reactive({
username: "",
password: "",
});
const rules = {
username: [
{
required: true,
message: "请填写账号",
trigger: ["blur", "change"],
},
],
password: [
{
required: true,
message: "请填写密码",
trigger: ["blur", "change"],
},
],
};
const form = ref();
const verifyRef = ref();
function VerifyShow(e) {
const model = reactive({
username: "",
password: "",
});
const rules = {
username: [
{
required: true,
message: "请填写账号",
trigger: ["blur", "change"],
},
],
password: [
{
required: true,
message: "请填写密码",
trigger: ["blur", "change"],
},
],
};
const form = ref();
const verifyRef = ref();
function VerifyShow(e) {
form.value
.validate()
.then((res) => {
verifyRef.value.show();
}
function VerifySuccess(e) {
console.log("VerifySuccess", e);
})
.catch((err) => {
// alert(err.message);
});
}
function VerifySuccess(e) {
console.log("VerifySuccess", e);
handleSubmit(e);
}
function handleSubmit(verify) {
let data = {
username: model.username,
password: model.password,
handleSubmit(e);
}
function handleSubmit(verify) {
form.value
.validate()
.then((res) => {
let data = {
username: model.username,
password: model.password,
...verify,
};
...verify,
};
// userStore.getUser();
// userStore.getUser();
login(data)
.then((res) => {
if (res.code === 200) {
setLocalStorage("token", res.data.token);
login(data)
.then((res) => {
if (res.code === 200) {
setLocalStorage("token", res.data.token);
userStore.getInfo().then((res) => {
uni.switchTab({
url: "/pages/index/index",
});
});
} else {
alert(res.message);
}
})
.catch((err) => {
alert(err.message);
});
})
.catch((err) => {
alert(err.message);
});
}
userStore.getInfo().then((res) => {
uni.switchTab({
url: "/pages/index/index",
});
});
} else {
alert(res.message);
}
})
.catch((err) => {
alert(err.message);
});
}
</script>
<style lang="scss" scoped>
.form {
margin: 200rpx 20rpx;
.form {
margin: 200rpx 20rpx;
.captchaImage {
padding: 0 10rpx;
}
.captchaImage {
padding: 0 10rpx;
}
.footer {
padding: 60rpx 20rpx 200rpx;
.footer {
padding: 60rpx 20rpx 200rpx;
.btn {
background-color: #00b294;
}
}
}
</style>
.btn {
background-color: #00b294;
}
}
}
</style>

View File

@@ -15,7 +15,7 @@
<uv-input v-model="form.projectName" border="surround"></uv-input>
</uv-form-item>
<uv-form-item label="项目类型" prop="projectType" borderBottom>
<x-picker v-model="form.projectType" valueKey="value" labelKey="name" :columns="dictData.project_type"></x-picker>
<!-- <x-picker v-model="form.projectType" valueKey="value" labelKey="name" :columns="dictData.project_type"></x-picker> -->
</uv-form-item>
<uv-button

View File

@@ -7,12 +7,13 @@
<uv-form-item label="项目名称" prop="projectName" borderBottom>
<uv-input v-model="form.projectName"> </uv-input>
</uv-form-item>
<uv-form-item
label="项目类型"
prop="projectType"
borderBottom
>
<x-picker v-model="form.projectType" valueKey="value" labelKey="name" :columns="dictData.project_type"></x-picker>
<uv-form-item label="项目类型" prop="projectType" borderBottom>
<!-- <x-picker
v-model="form.projectType"
valueKey="value"
labelKey="name"
:columns="dictData.project_type"
></x-picker> -->
</uv-form-item>
<uv-form-item label="创建时间" prop="createTime" borderBottom>
<xDateRange
@@ -42,8 +43,8 @@ import { onLoad } from "@dcloudio/uni-app";
import { reactive, ref, computed } from "vue";
import { toPath, toast, clearObjEmpty } from "@/utils/utils";
import { useDictData } from "@/hooks/useDictOptions";
import xDateRange from "@/components/x-date-range/x-date-range.vue"
const { dictData } = useDictData(['project_type'])
import xDateRange from "@/components/x-date-range/x-date-range.vue";
const { dictData } = useDictData(["project_type"]);
let formRef = ref();
let form = ref({
projectKey: "",