ソースを参照

Merge branch 'feature/20220929首页静态开发'

# Conflicts:
#	digital-park-web/digital-park/src/api/common.js
#	digital-park-web/digital-park/vue.config.js
feature/20220929首页静态开发
王饶冀 2年前
コミット
58ccdefbc3

+ 11
- 0
digital-park-web/digital-park/package-lock.json ファイルの表示

@@ -10,6 +10,7 @@
"dependencies": {
"axios": "^0.19.2",
"core-js": "^3.6.4",
"crypto-js": "^4.1.1",
"dayjs": "^1.10.4",
"element-ui": "^2.13.0",
"npm-check": "^6.0.1",
@@ -5246,6 +5247,11 @@
"node": "*"
}
},
"node_modules/crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
},
"node_modules/crypto-random-string": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@@ -23167,6 +23173,11 @@
"randomfill": "^1.0.3"
}
},
"crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
},
"crypto-random-string": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz",

+ 1
- 0
digital-park-web/digital-park/package.json ファイルの表示

@@ -11,6 +11,7 @@
"dependencies": {
"axios": "^0.19.2",
"core-js": "^3.6.4",
"crypto-js": "^4.1.1",
"dayjs": "^1.10.4",
"element-ui": "^2.13.0",
"npm-check": "^6.0.1",

+ 3
- 1
digital-park-web/digital-park/src/App.vue ファイルの表示

@@ -14,7 +14,9 @@ export default {
data() {
return {};
},
created() {},
created() {
this.$store.dispatch('getUserInfo');
},
methods: {},
};
</script>

+ 2
- 1
digital-park-web/digital-park/src/api/common.js ファイルの表示

@@ -1,4 +1,5 @@
/**
<<<<<<< HEAD
* api接口统一管理
*
* 公共接口
@@ -19,4 +20,4 @@ export const getClassificationDataList = p => get("/common/getClassificationData
export const getClassificationType = p => get("/common/getClassificationType", p);

// 获取所有列表
export const getAllPickListByEntity = p => get("/common/getAllPickListByEntity", p);
export const getAllPickListByEntity = p => get("/common/getAllPickListByEntity", p);

+ 29
- 0
digital-park-web/digital-park/src/api/login/index.js ファイルの表示

@@ -0,0 +1,29 @@
/**
* api-登录接口
*/
import { get, post } from "@/utils/http";



// 用户名、密码登录
export const accountLogin = (username, password) => post(`/account/login/${username}/${password}`);

// 手机验证码登录
export const mobilePhoneLogin = (mobilePhone, imgCode, smsVerificationCode) => post(`/account/login/code/${mobilePhone}/${imgCode}/${smsVerificationCode}`);

// 获取短信验证码
export const getMobilePhoneCode = (mobilePhone, imgCode) => post(`/verificationCode/sms/${mobilePhone}/${imgCode}`);

// 注册账号
export const accountRegister = p => post("/account/register", p);

// 忘记密码 --- 修改密码
export const forgetPassword = p => post("/account/forgetPassword", p);

// 退出登录
export const logout = p => post('/account/logout', p);






+ 26
- 10
digital-park-web/digital-park/src/components/Header.vue ファイルの表示

@@ -8,11 +8,13 @@
</section>
<section class="wrap_right">
<div>
<router-link v-for="item in nav" :key="item.name" :to="item.path">
{{ item.name }}
</router-link>
<router-link
v-for="item in nav"
:key="item.name"
:to="item.path"
>{{ item.name }}</router-link>
</div>
<section class="enterprise pointer">
<section class="enterprise pointer" @click="goMyCompany">
<img src="@assets/image/index/icon_company.png" alt="icon_company" />
我的企业
</section>
@@ -24,11 +26,16 @@
<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import { commonJs } from "@/utils/common.js";
import { routerOpenInNewWindow } from "@/utils/common.js";
import { mapGetters } from "vuex";
export default {
//import引入的组件需要注入到对象中才能使用
components: {},
computed: {
...mapGetters({
currentAccount: "currentAccount",
}),
},
data() {
//这里存放数据
return {
@@ -52,22 +59,31 @@ export default {
],
};
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//方法集合
methods: {
clickRouter(path) {
commonJs.routerOpenInNewWindow({
routerOpenInNewWindow({
path,
});
},
// 前往我的企业
goMyCompany() {
let path = '/my-business';
console.log(this.currentAccount,'this.currentAccount')
if(!this.currentAccount){
path = '/login'
}
localStorage.setItem('loginFrom','/my-business');
this.$router.push(path);
},
},
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
mounted() {
},
};
</script>
<style lang="scss" scoped>

+ 10
- 1
digital-park-web/digital-park/src/store/actions.js ファイルの表示

@@ -1 +1,10 @@
export default {};
import { RECEIVE_PRESENT_USER } from "./mutation-types";
import { getSession } from "@api/common";

export default {
// 异步获取用户信息
async getUserInfo({ commit }) {
const result = await getSession();
commit(RECEIVE_PRESENT_USER, result.data.data)
}
};

+ 3
- 1
digital-park-web/digital-park/src/store/getters.js ファイルの表示

@@ -1,2 +1,4 @@
const getters = {};
const getters = {
currentAccount: state => state.sessionInfo.currentAccount,
};
export default getters;

+ 0
- 4
digital-park-web/digital-park/src/store/modules/state.js ファイルの表示

@@ -1,4 +0,0 @@
// 状态对象
export default {

}

+ 2
- 0
digital-park-web/digital-park/src/store/mutation-types.js ファイルの表示

@@ -0,0 +1,2 @@
// 接收用户信息
export const RECEIVE_PRESENT_USER = 'receive_present_user'

+ 6
- 1
digital-park-web/digital-park/src/store/mutations.js ファイルの表示

@@ -1 +1,6 @@
export default {};
import { RECEIVE_PRESENT_USER } from "./mutation-types";
export default {
[RECEIVE_PRESENT_USER](state, payload) {
state.sessionInfo = payload;
}
};

+ 4
- 1
digital-park-web/digital-park/src/store/state.js ファイルの表示

@@ -1,2 +1,5 @@
// 状态对象
export default {};
export default {
sessionInfo: {},
test: 123,
};

+ 25
- 7
digital-park-web/digital-park/src/utils/common.js ファイルの表示

@@ -1,10 +1,28 @@
import router from "../router/index";
import { Message } from "element-ui";
// export const commonJs = {
// // 在新的页面打开路由
// routerOpenInNewWindow: routerPath => {
// let routeData = router.resolve(routerPath);
// window.open(routeData.href, "_blank");
// },
// };

export const commonJs = {
// 在新的页面打开路由
routerOpenInNewWindow: routerPath => {
let routeData = router.resolve(routerPath);
window.open(routeData.href, "_blank");
},
};
// 在新的页面打开路由
export const routerOpenInNewWindow = routerPath => {
let routeData = router.resolve(routerPath);
window.open(routeData.href, "_blank");
}

/**
*
* @param {*} status 1成功 0错误 可迭代
* @param {*} msg 提示信息
*/
export const sendMsg = (status, msg) => {
if (status == 1) {
Message.success(msg)
} else {
Message.error(msg)
}
}

+ 42
- 0
digital-park-web/digital-park/src/utils/cookie-util.js ファイルの表示

@@ -0,0 +1,42 @@
//设置cookie
export function setCookie(key, value,day=36500) {
let exdate = new Date(); //获取时间
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * day); //保存的天数,我这里写的是100年
//字符串拼接cookie
//escape方法的作用是进行编码,主要防止value中有特殊字符
window.document.cookie =
key + '=' + escape(value) + ';path=/;expires=' + exdate.toGMTString();
}

//读取cookie
export function getCookie(cookieName) {
var cookieStr = document.cookie;
var cookievalue = "";
var cookiMap ="";
if (cookieStr != null && cookieStr != undefined) {
var arrayCookie = cookieStr.split(';');
for (var i = 0; i < arrayCookie.length; i++) {
var arrayDetail = arrayCookie[i].split('=');
if (i == 0) {
cookiMap = '{"' + arrayDetail[0] + '":"' + arrayDetail[1] + '",';
} else if (i == arrayCookie.length - 1) {
cookiMap += '"' + arrayDetail[0] + '":"' + arrayDetail[1] + '"}';
} else {
cookiMap += '"' + arrayDetail[0] + '":"' + arrayDetail[1] + '",';
}
}
}
var s = cookiMap.replace(/\s/g, "");//去掉字符串中空格
var cookieObj = JSON.parse(s);
for (var item in cookieObj) {
if (item == cookieName) {
cookievalue = unescape(cookieObj[item]);
}
}
return cookievalue;
}

/*删除cookie*/
export function delCookie(c_name) {
setCookie(c_name, '', -1);
}

+ 21
- 0
digital-park-web/digital-park/src/utils/encrypt.js ファイルの表示

@@ -0,0 +1,21 @@
/**
* 加密
*/
import CryptoJS from 'crypto-js'
export default {
//加密
encrypt(word, keyStr) {
keyStr = keyStr ? keyStr : 'abcdefgabcdefg12';
let key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
},
//解密
decrypt(word, keyStr) {
keyStr = keyStr ? keyStr : 'abcdefgabcdefg12';
let key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
let decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
}

+ 61
- 17
digital-park-web/digital-park/src/views/login/LoginFrom/LoginFrom.scss ファイルの表示

@@ -16,6 +16,7 @@
right: 360px;
top: 30%;
transform: translate(0, -20%);

.el-input__icon {
color: $boderColor;
}
@@ -35,6 +36,18 @@
color: $fontColor;
}
}
.is-error {
.el-input__inner {
border-color: red;
}
}
.is-error-info {
@include font(12px, red);
float: left;
margin-top: -20px;
// position: relative;
// left: 10px;
}
}
}
.login-title {
@@ -59,7 +72,7 @@
.verification-code-row {
height: 40px;
.img-code-input {
width: 276px;
width: 270px;
margin-right: 6px;
.img-code-icon {
width: 14px;
@@ -73,17 +86,32 @@
}
}
.img-code-box {
width: 78px;
background-image: linear-gradient(135deg, #42a6fe 0%, #0070d2 100%);
width: 84px;
height: 40px;
border-radius: 6px;
color: #fff;
text-align: center;
line-height: 40px;
cursor: pointer;
&.get-code {
font-size: 12px;
img {
cursor: pointer;
width: 100%;
height: 100%;
}
.el-button {
color: #fff;
font-size: 14px;
width: 84px;
height: 40px;
cursor: pointer;
background-image: linear-gradient(
135deg,
#42a6fe 0%,
#0070d2 100%
);
border-radius: 6px;
text-align: center;
padding: 0;
&.is-disabled {
color: #c0c4cc;
cursor: not-allowed;
background-image: none;
}
}
}
}
@@ -106,13 +134,20 @@
width: 360px;
height: 50px;
line-height: 50px;
background-image: linear-gradient(135deg, #42a6fe 0%, #0070d2 100%);
border-radius: 6px;
text-align: center;
font-size: 18px;
color: #ffffff;
font-weight: bold;
// background-image: linear-gradient(135deg, #42a6fe 0%, #0070d2 100%);
// border-radius: 6px;
// text-align: center;
// font-size: 18px;
// color: #ffffff;
// font-weight: bold;
margin-bottom: 30px;
.el-button {
height: 100%;
width: 100%;
background-image: linear-gradient(135deg, #42a6fe 0%, #0070d2 100%);
font-size: 18px;
font-weight: bold;
}
}
.other-login {
color: $fontColor;
@@ -124,4 +159,13 @@
.mb-20 {
margin-bottom: 20px;
}
}
.mt-20 {
margin-top: 20px;
}
.el-loading-mask {
background: transparent;
// .el-loading-text {
// color: #fff;
// }
}
}

+ 448
- 38
digital-park-web/digital-park/src/views/login/LoginFrom/LoginFrom.vue ファイルの表示

@@ -9,17 +9,28 @@
>登录之后您可以享受企业服务、税收分析、订阅信息、定制化服务</div>
<!-- 默认登录 -->
<div v-if="loginMethod == 1">
<el-input placeholder="请输入用户名..." v-model="userName" class="mb-20">
<el-input
placeholder="请输入用户名..."
v-model="accountName"
class="mb-20"
:class="{'is-error':accountNameError}"
@focus="clearError('accountNameError')"
>
<i slot="prefix" class="el-input__icon el-icon-user"></i>
<div class="is-error-info" v-if="accountNameError">请输入用户名</div>
</el-input>
<div class="is-error-info" v-if="accountNameError">请输入用户名...</div>
<el-input
placeholder="请输入登录密码..."
v-model="password"
show-password
class="mb-20"
:class="{'is-error':passwordError}"
@focus="clearError('passwordError')"
>
<i slot="prefix" class="el-input__icon el-icon-lock"></i>
</el-input>
<div class="is-error-info" v-if="passwordError">请输入登录密码...</div>
</div>
<!-- 手机登录 -->
<div v-if="loginMethod == 2">
@@ -39,50 +50,97 @@
alt
/>
</el-input>
<div class="img-code-box fl">123456</div>
<div class="img-code-box fl" @click="getVerificationCode">
<img class="imgCode" :src="imgCodeUrl" alt="验证码" />
</div>
</div>
<div class="verification-code-row mb-20">
<el-input
placeholder="请输入手机验证码..."
v-model="phoneCode"
class="fl img-code-input"
:class="{'is-error':phoneCodeError}"
@focus="clearError('phoneCodeError')"
>
<img
slot="prefix"
src="~@/assets/image/login/numCodeIcon.png"
class="img-code-icon-num"
alt
/>
</el-input>
<div class="img-code-box get-code fl">
<el-button :disabled="true" v-if="phoneCodeDisable">{{ word }}</el-button>
<el-button v-else @click="getPhoneCode">{{ word }}</el-button>
</div>
<div
class="is-error-info"
style="margin-top:0"
v-if="phoneCodeError"
>请输入手机验证码</div>
</div>
<el-input
placeholder="请输入手机验证码..."
v-model="phoneCode"
class="mb-20 img-phone-number"
>
<img
slot="prefix"
src="~@/assets/image/login/numCodeIcon.png"
class="img-code-icon"
alt
/>
</el-input>
</div>
<!-- 注册 || 忘记密码 -->
<div v-if="loginMethod == 3 || loginMethod == 4">
<el-input placeholder="请输入手机号码..." v-model="mobilePhone" class="mb-20">
<i slot="prefix" class="el-input__icon el-icon-mobile-phone"></i>
</el-input>
<el-input placeholder="请输入用户名..." v-model="userName" class="mb-20">
<i slot="prefix" class="el-input__icon el-icon-user"></i>
</el-input>
<el-input
placeholder="请输入新密码..."
v-model="newPassword"
show-password
placeholder="请输入手机号码..."
v-model="mobilePhone"
class="mb-20"
:class="{'is-error':mobilePhoneError}"
@focus="clearError('mobilePhoneError')"
>
<i slot="prefix" class="el-input__icon el-icon-lock"></i>
<i slot="prefix" class="el-input__icon el-icon-mobile-phone"></i>
</el-input>
<div
class="is-error-info"
v-if="mobilePhoneError"
>{{ mobilePhone ? '请输入正确的手机号码':'请输入手机号码' }}</div>
<el-input
placeholder="请再次输入新密码..."
v-model="confirmPassword"
show-password
placeholder="请输入用户名..."
v-model="accountName"
class="mb-20"
:class="{'is-error':accountNameError}"
@focus="clearError('accountNameError')"
v-if="loginMethod == 3"
>
<i slot="prefix" class="el-input__icon el-icon-lock"></i>
<i slot="prefix" class="el-input__icon el-icon-user"></i>
</el-input>
<div class="is-error-info" v-if="accountNameError && loginMethod == 3">请输入用户名</div>
<form>
<el-input
placeholder="请输入新密码..."
v-model="newPassword"
show-password
class="mb-20"
:class="{'is-error':newPasswordError}"
@focus="clearError('newPasswordError')"
>
<i slot="prefix" class="el-input__icon el-icon-lock"></i>
</el-input>
</form>

<div class="is-error-info" v-if="newPasswordError">请输入新密码</div>
<form>
<el-input
placeholder="请再次输入新密码..."
v-model="confirmPassword"
show-password
class="mb-20"
:class="{'is-error':confirmPasswordError}"
@focus="clearError('confirmPasswordError')"
>
<i slot="prefix" class="el-input__icon el-icon-lock"></i>
</el-input>
</form>

<div class="is-error-info" v-if="confirmPasswordError">请输入新密码</div>
<div class="verification-code-row mb-20">
<el-input
placeholder="请输入图片验证码..."
v-model="imgCode"
class="fl img-code-input"
:class="{'is-error':imgCodeError}"
@focus="clearError('imgCodeError')"
>
<img
slot="prefix"
@@ -91,13 +149,18 @@
alt
/>
</el-input>
<div class="img-code-box fl">123456</div>
<div class="img-code-box fl" @click="getVerificationCode">
<img class="imgCode" :src="imgCodeUrl" alt="验证码" />
</div>
<div class="is-error-info" style="margin-top:0" v-if="imgCodeError">请输入图片验证码</div>
</div>
<div class="verification-code-row mb-20">
<el-input
placeholder="请输入手机验证码..."
v-model="phoneCode"
class="fl img-code-input"
:class="{'is-error':phoneCodeError}"
@focus="clearError('phoneCodeError')"
>
<img
slot="prefix"
@@ -106,19 +169,37 @@
alt
/>
</el-input>
<div class="img-code-box get-code fl">获取验证码</div>
<div class="img-code-box get-code fl">
<el-button :disabled="true" v-if="phoneCodeDisable">{{ word }}</el-button>
<el-button v-else @click="getPhoneCode">{{ word }}</el-button>
</div>
<div
class="is-error-info"
style="margin-top:0"
v-if="phoneCodeError"
>请输入手机验证码</div>
</div>
</div>
<div class="remember-row mb-20" v-if="loginMethod == 1 || loginMethod == 2">
<div class="remember-password fl">
<div class="remember-password fl" v-if="loginMethod == 1">
<el-checkbox v-model="isRemember">记住密码</el-checkbox>
</div>
<span
class="forgot-password fr pointer"
@click="loginMethodChange(4)"
>忘记密码?</span>
<span class="forgot-password fr pointer" @click="loginMethodChange(4)">忘记密码?</span>
</div>
<!-- 登录按钮 -->
<div class="login-btn">
<el-button
type="primary"
v-if="loginLoading"
:loading="true"
disabled
>{{ loginLoadingText }}</el-button>
<el-button
type="primary"
v-else
@click="submitLoginInfo"
>{{ getLoginBtnText() }}</el-button>
</div>
<div class="login-btn pointer">{{ getLoginBtnText() }}</div>
<div class="other-login" v-if="loginMethod == 1 || loginMethod == 2">
<span
class="fl pointer"
@@ -147,13 +228,26 @@
</template>

<script>
import ret from "bluebird/js/release/util";
import "./LoginFrom.scss";
import {
accountLogin,
getMobilePhoneCode,
accountRegister,
mobilePhoneLogin,
forgetPassword,
} from "../../../api/login";
// 密码加密
import Utils from "@/utils/encrypt";
// 引入工具方法
import { sendMsg } from "@/utils/common";
// 导入cookie操作
import { setCookie, getCookie, delCookie } from "@/utils/cookie-util";
export default {
data() {
return {
// 登录loading
loginLoading: false,
loginLoadingText: "",
/**
*
* 登录方式
@@ -165,27 +259,109 @@ export default {
*/
loginMethod: 1,
// 用户名
userName: "",
accountName: "",
accountNameError: false,
// 登录密码
password: "",
passwordError: false,
// 手机号码
mobilePhone: "",
mobilePhoneError: false,
// 图片验证码
imgCode: "",
imgCodeUrl: "",
imgCodeError: false,
// 手机验证码
phoneCode: "",
phoneCodeError: false,
// 新密码
newPassword: "",
newPasswordError: false,
// 确认密码
confirmPassword: "",
confirmPasswordError: false,
// 记住密码
isRemember: false,
// 加密码
encrypt: "hAw6eqnFLKxpsDv3",
// 获取手机验证密码倒计时
sendTimer: null,
word: "获取验证码", // 手机短信验证码文字
isOvertime: false, // 手机短信验证时间判断
phoneCodeDisable: false, // 手机短信验证码按钮禁用开启
};
},
mounted() {
this.init();
},
methods: {
//
init() {
// 获取图片验证码
this.getVerificationCode();
// 账号回显
this.accountName = getCookie("accountName");
// 手机号回显
this.mobilePhone = getCookie("mobilePhone");
// 如果有密码记录
if (getCookie("password")) {
this.password = Utils.decrypt(
getCookie("password"),
this.encrypt
);
this.isRemember = true;
}
},
// 获取图片验证码
getVerificationCode() {
this.imgCodeUrl =
process.env.VUE_APP_BASE_API +
"/verificationCode/img?height=40&width=84&fontSize=25" +
"&n=" +
parseInt(Math.random() * 9999 + 1);
},
// 获取手机验证码
getPhoneCode() {
let { imgCode, mobilePhone } = this;
if (this.checkIsAllow(["mobilePhone", "imgCode"])) {
this.phoneCodeDisable = true;
getMobilePhoneCode(mobilePhone.trim(), imgCode.trim())
.then((res) => {
if (res.data.status == 0) {
if (this.isOvertime) {
return false;
}
let time = 60;
this.sendTimer = setInterval(() => {
this.isOvertime = true;
time--;
this.word = "已发送" + time + "秒";
console.log(`测试定时器`);
if (time <= 0) {
this.isOvertime = false;
clearInterval(this.sendTimer);
this.word = "发送验证码";
this.phoneCodeDisable = false;
}
}, 1000);
this.$router.push("/");
console.log("跳转到首页");
} else {
sendMsg(0, res.data.msg);
this.phoneCodeDisable = false;
}
})
.catch((err) => {
sendMsg(0, "获取验证码失败");
console.log(err);
this.phoneCodeDisable = false;
});
}
},
// 登录界面切换
loginMethodChange(status) {
this.loginMethod = status;
this.clearAllError();
},
// 获取title
getTitleText() {
@@ -205,6 +381,240 @@ export default {
? "注册"
: "修改密码";
},
// 提交登录信息
submitLoginInfo() {
// 登录方式
let { loginMethod } = this;
// 检测字段
let checkKeyList = [];
// 账号密码登录
if (loginMethod == 1) {
checkKeyList = ["accountName", "password"];
}
// 手机登录
if (loginMethod == 2) {
checkKeyList = ["mobilePhone", "imgCode", "phoneCode"];
}
// 注册
if (loginMethod == 3) {
checkKeyList = [
"mobilePhone",
"accountName",
"newPassword",
"confirmPassword",
"imgCode",
"phoneCode",
];
}
// 忘记密码
if (loginMethod == 4) {
checkKeyList = [
"mobilePhone",
"newPassword",
"confirmPassword",
"imgCode",
"phoneCode",
];
}
// 效验不通过
if (!this.checkIsAllow(checkKeyList)) {
return;
}
// 默认登录
if (loginMethod == 1) {
this.accountLogin();
}
// 手机号登录
if (loginMethod == 2) {
this.mobilePhoneLogin();
}
// 注册账号
if (loginMethod == 3) {
this.accountRegister();
}
// 忘记密码
if (loginMethod == 4) {
this.forgetPassword();
}
},
// 忘记密码 --- 修改密码
forgetPassword() {
let { mobilePhone, newPassword, imgCode, phoneCode } = this;
let param = {
mobilePhone,
newPassword,
imgCode,
smsVerificationCode: phoneCode,
};
this.loginLoading = true;
this.loginLoadingText = "修改中...";

forgetPassword(param)
.then((res) => {
const data = res.data;
if (data.status == 0) {
sendMsg(1, "修改成功");
// 保存用户名
setCookie("accountName", accountName.trim());
this.loginMethodChange(1);
} else {
sendMsg(0, data.msg);
}
this.loginLoading = false;
})
.catch((err) => {
sendMsg(0, "修改失败");
console.log(err);
this.loginLoading = false;
});
},
// 手机号登录
mobilePhoneLogin() {
let { mobilePhone, imgCode, phoneCode } = this;
this.loginLoading = true;
this.loginLoadingText = "登录中...";
mobilePhoneLogin(mobilePhone, imgCode, phoneCode)
.then((res) => {
const data = res.data;
if (data.status == 0) {
sendMsg(1, "登录成功");
// 保存用户名
setCookie("mobilePhone", mobilePhone.trim());
this.loginSuccessFn();
} else {
sendMsg(0, data.msg);
}
this.loginLoading = false;
})
.catch((err) => {
sendMsg(0, "登录失败");
console.log(err);
this.loginLoading = false;
});
},
// 注册账号
accountRegister() {
let {
mobilePhone,
accountName,
newPassword,
confirmPassword,
imgCode,
phoneCode,
} = this;
let param = {
mobilePhone,
accountName,
password: newPassword,
confirmPassword,
imgCode,
smsVerificationCode: phoneCode,
};
this.loginLoading = true;
this.loginLoadingText = "注册中...";
accountRegister(param)
.then((res) => {
const data = res.data;
if (data.status == 0) {
sendMsg(1, "注册成功");
// 保存用户名
setCookie("accountName", accountName.trim());
this.loginSuccessFn();
} else {
sendMsg(0, data.msg);
}
this.loginLoading = false;
})
.catch((err) => {
sendMsg(0, "注册失败");
console.log(err);
this.loginLoading = false;
});
},
// 默认登录
accountLogin() {
let { isRemember, encrypt, accountName, password } = this;
this.loginLoading = true;
this.loginLoadingText = "登录中...";
accountLogin(accountName.trim(), password.trim())
.then((res) => {
const data = res.data;
if (data.status == 0) {
sendMsg(1, "登录成功");
// 保存用户名
setCookie("accountName", accountName.trim());
// 判断是否勾选记住密码
if (isRemember) {
let encryptPwd = Utils.encrypt(
password.trim(),
encrypt
);
setCookie("password", encryptPwd, 7);
} else {
delCookie("password");
}
this.loginSuccessFn();
} else {
sendMsg(0, data.msg);
}
this.loginLoading = false;
})
.catch((err) => {
sendMsg(0, "登录失败");
console.log(err);
this.loginLoading = false;
});
},
// 登录成功后的响应
loginSuccessFn() {
let getLoginFrom = localStorage.getItem("loginFrom") || "/";
this.$router.push(getLoginFrom);
this.$store.dispatch('getUserInfo');
},
// 检测是否通过
checkIsAllow(checkKeyList) {
let isAllow = true;
checkKeyList.forEach((el) => {
if (!this.checkKey(this[el], el + "Error")) {
isAllow = false;
}
});
return isAllow;
},
// 检测字段
checkKey(val, key) {
let flag = true;
if (!val || !val.trim()) {
this[key] = true;
flag = false;
}
if (
key == "mobilePhoneError" &&
!/^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(val)
) {
this[key] = true;
flag = false;
}
return flag;
},
// 清楚错误
clearError(key) {
this[key] = false;
},
// 清除所有错误
clearAllError() {
this.accountNameError = false;
this.passwordError = false;
this.newPasswordError = false;
this.confirmPasswordError = false;
this.imgCodeError = false;
this.phoneCodeError = false;
this.mobilePhoneError = false;
},
},
destroyed() {
clearInterval(this.sendTimer);
this.sendTimer = null;
},
};
</script>

+ 10
- 1
digital-park-web/digital-park/src/views/my-related/business/Business.vue ファイルの表示

@@ -4,7 +4,7 @@
<Nav />
<div class="header-container">
<div class="company-name">
<span class="company-span">公司名称:{{ getCompanyName() }}</span>
<span class="company-span">公司名称:{{ getCompanyName() }} <button @click="logout">(测试)退出登录</button></span>
<!-- 已认领,未入驻园区 -->
<div class="company-btn fr" v-if="isClaimed && !isSettleParl">
我是企业,<span class="btn-span">我要入驻园区</span>
@@ -109,6 +109,7 @@
import "./Business.scss";
import Nav from "@components/Header.vue";
import Footer from "@components/Footer.vue";
import { logout } from '@api/login';
export default {
components: { Nav, Footer },
data() {
@@ -253,6 +254,14 @@ export default {
}
return companyName;
},
// 退出登录
logout(){
logout().then(()=>{
this.$store.dispatch('getUserInfo').then(()=>{
this.$router.push('/login');
})
})
},
},
};
</script>

+ 3
- 1
digital-park-web/digital-park/vue.config.js ファイルの表示

@@ -24,7 +24,9 @@ module.exports = {
proxy: {
"/domain": {
// target: "http://localhost:80",
target: "http://192.168.18.236:18888/",
// target: "http://192.168.18.236:18888/",
target: "http://192.168.18.138:18888",
// target: "http://localhost:80",
changeOrigin: true,
pathRewrite: {
"^/domain": "",

読み込み中…
キャンセル
保存