mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-12-24 08:12:55 +08:00
修复app下验证码卡死问题
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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()
|
||||
},
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: "",
|
||||
|
||||
Reference in New Issue
Block a user