bug修改
This commit is contained in:
parent
f817dc2005
commit
01f5b4673b
|
|
@ -62,18 +62,6 @@ export function getPhoneCode(payload) {
|
|||
})
|
||||
}
|
||||
|
||||
// 注册方法
|
||||
export function register(data) {
|
||||
return request({
|
||||
url: '/auth/register',
|
||||
headers: {
|
||||
isToken: false
|
||||
},
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 刷新方法
|
||||
export function refreshToken() {
|
||||
return request({
|
||||
|
|
|
|||
|
|
@ -219,25 +219,49 @@ export default {
|
|||
isWord(file) {
|
||||
return /\.(doc|docx)$/i.test(file.name)
|
||||
},
|
||||
isValidFileUrl(rawUrl) {
|
||||
if (!rawUrl || typeof rawUrl !== 'string') return false
|
||||
|
||||
try {
|
||||
const url = new URL(rawUrl, window.location.origin)
|
||||
|
||||
// 1️⃣ 协议校验
|
||||
if (!['http:', 'https:'].includes(url.protocol)) {
|
||||
return false
|
||||
}
|
||||
|
||||
// 2️⃣ 文件后缀校验
|
||||
const pathname = url.pathname.toLowerCase()
|
||||
|
||||
return /\.(jpg|jpeg|png|gif|webp|pdf|doc|docx)$/.test(pathname)
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
},
|
||||
// 预览
|
||||
handlePictureCardPreview(file) {
|
||||
console.log('🚀 ~ file:', file)
|
||||
const url = file.url || file.response?.data?.url
|
||||
const rawUrl = file.url || file.response?.data?.url
|
||||
// 🚨 新增:文件类型校验
|
||||
if (!this.isValidFileUrl(rawUrl)) {
|
||||
this.$modal.msgError('非法文件地址')
|
||||
return
|
||||
}
|
||||
|
||||
const safeUrl = new URL(rawUrl, window.location.origin).toString()
|
||||
console.log('🚀 ~ safeUrl:', safeUrl)
|
||||
|
||||
if (this.isPDF(file)) {
|
||||
// PDF 新窗口打开
|
||||
window.open(url, '_blank')
|
||||
window.open(safeUrl, '_blank')
|
||||
return
|
||||
}
|
||||
|
||||
if (this.isWord(file)) {
|
||||
// Word:直接跳转浏览器下载
|
||||
window.location.href = url
|
||||
window.location.href = safeUrl
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.isImage(file)) {
|
||||
window.open(url, '_blank')
|
||||
window.open(safeUrl, '_blank')
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { isRelogin } from "@/utils/request";
|
|||
|
||||
NProgress.configure({ showSpinner: false });
|
||||
|
||||
const whiteList = ["/login", "/register", "/qrCode/qrCodePage","/screen/cityScreen"];
|
||||
const whiteList = ["/login", "/qrCode/qrCodePage","/screen/cityScreen"];
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start();
|
||||
|
|
|
|||
|
|
@ -46,11 +46,6 @@ export const constantRoutes = [
|
|||
component: () => import('@/views/login1'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/register',
|
||||
component: () => import('@/views/register1'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/404',
|
||||
component: () => import('@/views/error/404'),
|
||||
|
|
|
|||
|
|
@ -70,11 +70,6 @@
|
|||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right" v-if="register">
|
||||
<router-link class="link-type" :to="'/register'"
|
||||
>立即注册</router-link
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 底部 -->
|
||||
|
|
|
|||
|
|
@ -105,15 +105,6 @@
|
|||
<el-link v-if="config.loginConfig.emailCode || config.loginConfig.phoneCode" @click="toggleLoginMethod">
|
||||
{{ loginMethod === 'password' ? '短信登录' : '密码登录' }}
|
||||
</el-link>
|
||||
<!-- <router-link
|
||||
v-if="
|
||||
config.registersConfig.emailRegisters ||
|
||||
config.registersConfig.phoneRegisters
|
||||
"
|
||||
to="/register"
|
||||
>
|
||||
<el-link>注册账号</el-link>
|
||||
</router-link> -->
|
||||
<!-- <el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox> -->
|
||||
</div>
|
||||
<el-form-item style="width: 100%">
|
||||
|
|
@ -207,10 +198,6 @@ export default {
|
|||
phoneCode: false,
|
||||
emailCode: false
|
||||
},
|
||||
registersConfig: {
|
||||
phoneRegisters: true,
|
||||
emailRegisters: true
|
||||
}
|
||||
}
|
||||
) // 获取 JSON 对象
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,263 +0,0 @@
|
|||
<template>
|
||||
<div class="register">
|
||||
<el-form
|
||||
ref="registerForm"
|
||||
:model="registerForm"
|
||||
:rules="registerRules"
|
||||
class="register-form"
|
||||
>
|
||||
<h3 class="title">机械化施工装备管理(共享)平台</h3>
|
||||
<el-form-item prop="username">
|
||||
<el-input
|
||||
v-model="registerForm.username"
|
||||
type="text"
|
||||
auto-complete="off"
|
||||
placeholder="账号"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="user"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="registerForm.password"
|
||||
type="password"
|
||||
auto-complete="off"
|
||||
placeholder="密码"
|
||||
@keyup.enter.native="handleRegister"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="password"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="confirmPassword">
|
||||
<el-input
|
||||
v-model="registerForm.confirmPassword"
|
||||
type="password"
|
||||
auto-complete="off"
|
||||
placeholder="确认密码"
|
||||
@keyup.enter.native="handleRegister"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="password"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" v-if="captchaEnabled">
|
||||
<el-input
|
||||
v-model="registerForm.code"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: 63%"
|
||||
@keyup.enter.native="handleRegister"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="validCode"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
<div class="register-code">
|
||||
<img :src="codeUrl" @click="getCode" class="register-code-img" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 100%">
|
||||
<el-button
|
||||
:loading="loading"
|
||||
size="medium"
|
||||
type="primary"
|
||||
style="width: 100%"
|
||||
@click.native.prevent="handleRegister"
|
||||
>
|
||||
<span v-if="!loading">注 册</span>
|
||||
<span v-else>注 册 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right">
|
||||
<router-link class="link-type" :to="'/iws/glweb/login'"
|
||||
>使用已有账户登录</router-link
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 底部 -->
|
||||
<div class="el-register-footer">
|
||||
<span>Copyright © 2018-2024 bonus.vip All Rights Reserved.</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getCodeImg, register } from "@/api/login";
|
||||
|
||||
export default {
|
||||
name: "Register",
|
||||
data() {
|
||||
const equalToPassword = (rule, value, callback) => {
|
||||
if (this.registerForm.password !== value) {
|
||||
callback(new Error("两次输入的密码不一致"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
codeUrl: "",
|
||||
registerForm: {
|
||||
username: "",
|
||||
password: "",
|
||||
confirmPassword: "",
|
||||
code: "",
|
||||
uuid: "",
|
||||
},
|
||||
registerRules: {
|
||||
username: [
|
||||
{ required: true, trigger: "blur", message: "请输入您的账号" },
|
||||
{
|
||||
min: 2,
|
||||
max: 20,
|
||||
message: "用户账号长度必须介于 2 和 20 之间",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
password: [
|
||||
{ required: true, trigger: "blur", message: "请输入您的密码" },
|
||||
{
|
||||
min: 5,
|
||||
max: 20,
|
||||
message: "用户密码长度必须介于 5 和 20 之间",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
pattern: /^[^<>"'|\\]+$/,
|
||||
message: "不能包含非法字符:< > \" ' \\\ |",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
confirmPassword: [
|
||||
{ required: true, trigger: "blur", message: "请再次输入您的密码" },
|
||||
{ required: true, validator: equalToPassword, trigger: "blur" },
|
||||
],
|
||||
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
|
||||
},
|
||||
loading: false,
|
||||
captchaEnabled: true,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getCode();
|
||||
},
|
||||
methods: {
|
||||
getCode() {
|
||||
getCodeImg().then((res) => {
|
||||
this.captchaEnabled =
|
||||
res.captchaEnabled === undefined ? true : res.captchaEnabled;
|
||||
if (this.captchaEnabled) {
|
||||
this.codeUrl = "data:image/gif;base64," + res.img;
|
||||
this.registerForm.uuid = res.uuid;
|
||||
}
|
||||
});
|
||||
},
|
||||
handleRegister() {
|
||||
this.$refs.registerForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true;
|
||||
register(this.registerForm)
|
||||
.then((res) => {
|
||||
const username = this.registerForm.username;
|
||||
this.$alert(
|
||||
"<font color='red'>恭喜你,您的账号 " +
|
||||
username +
|
||||
" 注册成功!</font>",
|
||||
"系统提示",
|
||||
{
|
||||
dangerouslyUseHTMLString: true,
|
||||
type: "success",
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.$router.push("/login");
|
||||
})
|
||||
.catch(() => {});
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
if (this.captchaEnabled) {
|
||||
this.getCode();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss">
|
||||
.register {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
background-image: url("../assets/images/login-background.jpg");
|
||||
background-size: cover;
|
||||
}
|
||||
.title {
|
||||
margin: 0px auto 30px auto;
|
||||
text-align: center;
|
||||
color: #707070;
|
||||
}
|
||||
|
||||
.register-form {
|
||||
border-radius: 6px;
|
||||
background: #ffffff;
|
||||
width: 400px;
|
||||
padding: 25px 25px 5px 25px;
|
||||
.el-input {
|
||||
height: 38px;
|
||||
input {
|
||||
height: 38px;
|
||||
}
|
||||
}
|
||||
.input-icon {
|
||||
height: 39px;
|
||||
width: 14px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
}
|
||||
.register-tip {
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
color: #bfbfbf;
|
||||
}
|
||||
.register-code {
|
||||
width: 33%;
|
||||
height: 38px;
|
||||
float: right;
|
||||
img {
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.el-register-footer {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-family: Arial;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.register-code-img {
|
||||
height: 38px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,409 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="register">
|
||||
<el-form
|
||||
ref="registerForm"
|
||||
:model="registerForm"
|
||||
:rules="registerRules"
|
||||
class="register-form"
|
||||
>
|
||||
<h3 class="title">机械化施工装备管理(共享)平台</h3>
|
||||
|
||||
<el-form-item prop="nickName">
|
||||
<el-input
|
||||
v-model="registerForm.nickName"
|
||||
type="text"
|
||||
auto-complete="off"
|
||||
placeholder="请输入姓名"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="user"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="mobile">
|
||||
<el-input
|
||||
v-model="registerForm.mobile"
|
||||
type="text"
|
||||
auto-complete="off"
|
||||
:placeholder="`请输入${
|
||||
config.registersConfig.phoneRegisters ? '手机号' : ''
|
||||
}${config.registersConfig.emailRegisters ? '/邮箱' : ''}`"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="phone"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="registerForm.password"
|
||||
type="password"
|
||||
auto-complete="off"
|
||||
placeholder="密码"
|
||||
@keyup.enter.native="handleRegister"
|
||||
show-password
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="password"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="confirmPassword">
|
||||
<el-input
|
||||
v-model="registerForm.confirmPassword"
|
||||
type="password"
|
||||
auto-complete="off"
|
||||
placeholder="确认密码"
|
||||
@keyup.enter.native="handleRegister"
|
||||
show-password
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="password"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="code" v-if="captchaEnabled">
|
||||
<el-input
|
||||
v-model="registerForm.code"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: 63%"
|
||||
@keyup.enter.native="handleRegister"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="validCode"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
<div class="register-code">
|
||||
<img :src="codeUrl" @click="getCode" class="register-code-img" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
v-show="config.registersConfig.verificationCode"
|
||||
prop="verificationCode"
|
||||
>
|
||||
<el-input
|
||||
v-model="registerForm.verificationCode"
|
||||
:readonly="!isSendingCode"
|
||||
placeholder="请输入验证码"
|
||||
>
|
||||
<template slot="append">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="sendCode"
|
||||
:disabled="
|
||||
isSendingCode || captchaEnabled ? !registerForm.code : false
|
||||
"
|
||||
class="send-code-button"
|
||||
>
|
||||
{{ isSendingCode ? `${countdown}s` : "获取验证码" }}
|
||||
</el-button>
|
||||
</template>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="message"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100%">
|
||||
<el-button
|
||||
:loading="loading"
|
||||
size="medium"
|
||||
type="primary"
|
||||
style="width: 100%"
|
||||
@click.native.prevent="handleRegister"
|
||||
>
|
||||
<span v-if="!loading">注 册</span>
|
||||
<span v-else>注 册 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right">
|
||||
<router-link class="link-type" :to="'/login'"
|
||||
>使用已有账户登录</router-link
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 底部 -->
|
||||
<div class="el-register-footer">
|
||||
<span>Copyright © 2018-2024 bonus.vip All Rights Reserved.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getCodeImg, register } from "@/api/login";
|
||||
import { validateNewPassword } from "@/utils/validate";
|
||||
import { decryptCBC } from "@/utils/aescbc";
|
||||
|
||||
export default {
|
||||
name: "Register",
|
||||
computed: {
|
||||
LOGIN() {
|
||||
return LOGIN;
|
||||
},
|
||||
config() {
|
||||
return (
|
||||
JSON.parse(localStorage.getItem("systemConfig")) || {
|
||||
registersConfig: {
|
||||
phoneRegisters: true,
|
||||
emailRegisters: true,
|
||||
verificationCode: true,
|
||||
},
|
||||
}
|
||||
); // 获取 JSON 对象
|
||||
},
|
||||
},
|
||||
data() {
|
||||
// 验证姓名是否符合要求
|
||||
const validateNickName = (rule, value, callback) => {
|
||||
const regex = /^[\u4e00-\u9fa5]{2,4}$/;
|
||||
if (!value) {
|
||||
callback(new Error("请输入姓名"));
|
||||
} else if (!regex.test(value)) {
|
||||
callback(new Error("名字必须是2到4个汉字"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
// 验证密码是否一致
|
||||
const equalToPassword = (rule, value, callback) => {
|
||||
if (this.registerForm.password !== value) {
|
||||
callback(new Error("两次输入的密码不一致"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
codeUrl: "",
|
||||
isSendingCode: false,
|
||||
countdown: 0,
|
||||
registerForm: {
|
||||
username: "",
|
||||
password: "",
|
||||
confirmPassword: "",
|
||||
verificationCode: "",
|
||||
mobile: "",
|
||||
nickName: "",
|
||||
code: "",
|
||||
uuid: "",
|
||||
phoneUuid: "",
|
||||
mobileCodeType: "REGISTER",
|
||||
},
|
||||
registerRules: {
|
||||
nickName: [
|
||||
{ required: true, trigger: "blur", validator: validateNickName },
|
||||
],
|
||||
mobile: [
|
||||
{ required: true, message: "请输入手机号/邮箱", trigger: "blur" },
|
||||
{ validator: this.validateContact, trigger: "blur" },
|
||||
],
|
||||
password: [
|
||||
{ required: true, trigger: "blur", message: "请输入您的密码" },
|
||||
{ validator: validateNewPassword, trigger: "blur" },
|
||||
],
|
||||
confirmPassword: [
|
||||
{ required: true, trigger: "blur", message: "请再次输入您的密码" },
|
||||
{ required: true, validator: equalToPassword, trigger: "blur" },
|
||||
],
|
||||
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
|
||||
},
|
||||
loading: false,
|
||||
captchaEnabled: true,
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.getCode();
|
||||
},
|
||||
methods: {
|
||||
// 获取验证码图片
|
||||
getCode() {
|
||||
getCodeImg().then((res) => {
|
||||
this.captchaEnabled =
|
||||
res.captchaEnabled === undefined ? true : res.captchaEnabled;
|
||||
if (this.captchaEnabled) {
|
||||
this.codeUrl = "data:image/gif;base64," + res.img;
|
||||
this.registerForm.uuid = res.uuid;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 处理注册请求
|
||||
handleRegister() {
|
||||
this.$refs.registerForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true;
|
||||
register(this.registerForm)
|
||||
.then((res) => {
|
||||
const username = this.registerForm.username;
|
||||
this.$alert(
|
||||
`<font color="red">恭喜你,您的账号 ${username} 注册成功!</font>`,
|
||||
"系统提示",
|
||||
{
|
||||
dangerouslyUseHTMLString: true,
|
||||
type: "success",
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.$router.push("/login");
|
||||
})
|
||||
.catch(() => {});
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
if (this.captchaEnabled) {
|
||||
this.getCode();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 发送验证码
|
||||
sendCode() {
|
||||
if (!this.registerForm.mobile) {
|
||||
this.$message.error("请先填写手机号");
|
||||
return;
|
||||
}
|
||||
this.$store
|
||||
.dispatch("GetPhoneCode", this.registerForm)
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.isSendingCode = true;
|
||||
this.countdown = 60;
|
||||
const timer = setInterval(() => {
|
||||
this.countdown -= 1;
|
||||
if (this.countdown <= 0) {
|
||||
clearInterval(timer);
|
||||
}
|
||||
}, 1000);
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
if (this.captchaEnabled) {
|
||||
this.getCode();
|
||||
}
|
||||
this.isSendingCode = false;
|
||||
this.countdown = 0;
|
||||
});
|
||||
},
|
||||
|
||||
// 验证手机号或邮箱格式
|
||||
validateContact(rule, value, callback) {
|
||||
const phoneRegex = /^1[3-9]\d{9}$/;
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||
|
||||
if (!value) {
|
||||
return callback(new Error("请输入电子邮件或电话号码"));
|
||||
}
|
||||
|
||||
if (!phoneRegex.test(value) && !emailRegex.test(value)) {
|
||||
return callback(new Error("必须是有效的电子邮件或电话号码"));
|
||||
}
|
||||
|
||||
callback();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss">
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
background-image: url("../assets/images/bg.png");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.register {
|
||||
width: 42%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0px auto 30px auto;
|
||||
text-align: center;
|
||||
color: #707070;
|
||||
}
|
||||
|
||||
.register-form {
|
||||
border-radius: 6px;
|
||||
background: #ffffff;
|
||||
width: 400px;
|
||||
padding: 25px 25px 5px 25px;
|
||||
|
||||
.el-input {
|
||||
height: 38px;
|
||||
|
||||
input {
|
||||
height: 38px;
|
||||
}
|
||||
}
|
||||
|
||||
.input-icon {
|
||||
height: 39px;
|
||||
width: 14px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.register-tip {
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
color: #bfbfbf;
|
||||
}
|
||||
|
||||
.register-code {
|
||||
width: 33%;
|
||||
height: 38px;
|
||||
float: right;
|
||||
|
||||
img {
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.el-register-footer {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-family: Arial;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.register-code-img {
|
||||
height: 38px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -44,7 +44,7 @@ export default {
|
|||
|
||||
// 造点假数据
|
||||
const categories = ['2020', '2021', '2022', '2023', '2024', '2025']
|
||||
const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500))
|
||||
const data = [520, 680, 750, 820, 910, 1050]
|
||||
|
||||
const option = {
|
||||
tooltip: {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/cityScreen', '_blank')
|
||||
window.open(`${url}/screen/cityScreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/cityWidescreen', '_blank')
|
||||
window.open(`${url}/screen/cityWidescreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/gwScreen', '_blank')
|
||||
window.open(`${url}/screen/gwScreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/wsScreenWidescreen', '_blank')
|
||||
window.open(`${url}/screen/wsScreenWidescreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/shareScreen', '_blank')
|
||||
window.open(`${url}/screen/shareScreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ export default {
|
|||
return {}
|
||||
},
|
||||
mounted() {
|
||||
const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : ''
|
||||
// 打开大屏
|
||||
window.open('iws/glweb/#/screen/wsScreen', '_blank')
|
||||
window.open(`${url}/screen/wsScreen`, '_blank')
|
||||
// 关闭当前标签页
|
||||
this.$tab.closePage()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ export default {
|
|||
|
||||
// 造点假数据
|
||||
const categories = ['2020', '2021', '2022', '2023', '2024', '2025']
|
||||
const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500))
|
||||
const data = [520, 680, 750, 820, 910, 1050]
|
||||
|
||||
const option = {
|
||||
tooltip: {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ export default {
|
|||
|
||||
// 造点假数据
|
||||
const categories = ['2020', '2021', '2022', '2023', '2024', '2025']
|
||||
const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500))
|
||||
const data = [520, 680, 750, 820, 910, 1050]
|
||||
|
||||
const option = {
|
||||
tooltip: {
|
||||
|
|
|
|||
|
|
@ -695,30 +695,31 @@ export default {
|
|||
})
|
||||
},
|
||||
confirmPassword(row) {
|
||||
this.$prompt('请输入密码,鉴别用户', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
closeOnClickModal: false,
|
||||
inputPattern: /^.{8,16}$/,
|
||||
inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
inputValidator: (value) => {
|
||||
// 调用 validateNewPassword 校验
|
||||
const errorMessage = function (error) {
|
||||
if (error) {
|
||||
return error.message;
|
||||
} else {
|
||||
console.log('验证通过');
|
||||
}
|
||||
};
|
||||
validateNewPassword(null, value, errorMessage);
|
||||
}
|
||||
}).then(({value}) => {
|
||||
confirmPassword(value).then(response => {
|
||||
this.$modal.msgSuccess('验证成功')
|
||||
this.handleUpdate(row)
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
this.handleUpdate(row)
|
||||
// this.$prompt('请输入密码,鉴别用户', '提示', {
|
||||
// confirmButtonText: '确定',
|
||||
// cancelButtonText: '取消',
|
||||
// closeOnClickModal: false,
|
||||
// inputPattern: /^.{8,16}$/,
|
||||
// inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
// inputValidator: (value) => {
|
||||
// // 调用 validateNewPassword 校验
|
||||
// const errorMessage = function (error) {
|
||||
// if (error) {
|
||||
// return error.message;
|
||||
// } else {
|
||||
// console.log('验证通过');
|
||||
// }
|
||||
// };
|
||||
// validateNewPassword(null, value, errorMessage);
|
||||
// }
|
||||
// }).then(({value}) => {
|
||||
// confirmPassword(value).then(response => {
|
||||
// this.$modal.msgSuccess('验证成功')
|
||||
// this.handleUpdate(row)
|
||||
// })
|
||||
// }).catch(() => {
|
||||
// })
|
||||
},
|
||||
confirmResetPwd(row) {
|
||||
this.$prompt('请输入密码,鉴别用户', '提示', {
|
||||
|
|
@ -752,25 +753,43 @@ export default {
|
|||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
closeOnClickModal: false,
|
||||
inputPattern: /^.{8,16}$/,
|
||||
inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
inputValidator: (value) => {
|
||||
// 调用 validateNewPassword 校验
|
||||
const errorMessage = function (error) {
|
||||
// 1️⃣ 空值校验
|
||||
if (!value || value.trim() === '') {
|
||||
return '密码不能为空'
|
||||
}
|
||||
|
||||
// 2️⃣ 不能包含空格(任意位置)
|
||||
if (/\s/.test(value)) {
|
||||
return '密码不能包含空格'
|
||||
}
|
||||
|
||||
// 3️⃣ 长度校验
|
||||
if (value.length < 8 || value.length > 16) {
|
||||
return '用户密码长度必须介于 8 和 16 之间'
|
||||
}
|
||||
|
||||
// 4️⃣ 调用原有校验
|
||||
let errorMsg = ''
|
||||
validateNewPassword(null, value, (error) => {
|
||||
if (error) {
|
||||
return error.message;
|
||||
} else {
|
||||
console.log('验证通过');
|
||||
errorMsg = error.message
|
||||
}
|
||||
};
|
||||
validateNewPassword(null, value, errorMessage);
|
||||
})
|
||||
|
||||
if (errorMsg) {
|
||||
return errorMsg
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}).then(({value}) => {
|
||||
resetUserPwd(row.userId, value).then(response => {
|
||||
})
|
||||
.then(({ value }) => {
|
||||
resetUserPwd(row.userId, value).then(() => {
|
||||
this.$modal.msgSuccess('修改成功,新密码是:' + value)
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
/** 分配角色操作 */
|
||||
handleAuthRole: function (row) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue