Commit 49a63db6 by Administrator

Merge branch 'hxh' into 'dev'

Hxh

See merge request !13
parents 93a266c5 201573a4
......@@ -2269,87 +2269,6 @@
"webpack-chain": "^6.4.0",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^4.2.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
}
}
},
"@vue/cli-shared-utils": {
......@@ -13264,6 +13183,87 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-navigation": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/vue-navigation/-/vue-navigation-1.1.4.tgz",
......
<template>
<header class="header" :class="{ 'no-shadow': !shadow }">
<headerNavMobile v-if="$isMobile" :nav="navbar"></headerNavMobile>
<headerNavMobile v-if="$isMobile" :nav="navbar" :userInfo="userInfo"></headerNavMobile>
<div class="container" v-else>
<div class="logo">
<span class="logo_text">
......@@ -15,27 +15,26 @@
v-for="item in navbar"
@click="changePath"
:key="item.path">
<router-link :to="item.path">{{ item.name }}</router-link>
<a :href="item.path">{{ item.name }}</a>
</li>
</ul>
</nav>
<!-- <div class="user-info" v-if="userInfo">
<div class="user-msg">
<span class="user-name">{{ '小溪' }}</span>
<span>欢迎您</span>
</div>
<div class="logout" title="退出登录" @click="logout">
<img src="../assets/images/logout.png"/>
</div>
</div> -->
<div class="right_btn">
<!-- <el-button type="primary" size="mini" @click="login">登录</el-button>
<el-button size="mini" @click="register">注册</el-button> -->
<div class="user-operate">
<div class="user-operate" v-if="!userInfo">
<span class="login-btn" @click="login">登录</span>
<span class="reg-btn" @click="register">注册</span>
</div>
<div class="user-info" v-else>
<div class="user-msg">
<span class="user-name">{{ userInfo.companyName }}</span>
<span>欢迎您</span>
</div>
<div class="logout" title="退出登录" @click="logout">
<img src="../assets/images/logout.png" />
</div>
</div>
<el-button type="primary" @click="freeTrial">免费试用</el-button>
</div>
</div>
......@@ -43,7 +42,7 @@
</template>
<script>
import { mapMutations, mapState } from 'vuex'
import { mapMutations } from 'vuex'
import headerNavMobile from './headerNavMobile.vue'
export default {
......@@ -61,21 +60,31 @@ export default {
navbar: [
{ name: '首页', path: '/home' },
{ name: '核心功能', path: '/function' },
{ name: '价格', path: '/price' },
// { name: '价格', path: '/price' },
{ name: '需求痛点', path: '/demand_pain_point' },
{ name: '关于我们', path: '/about_us' },
{ name: '帮助', path: '/help'},
{ name: '一键定制', path: 'https://jomalls.com/custom/' },
{ name: '帮助', path: '/help' },
],
userInfo:JSON.parse(localStorage.getItem('userInfo'))
}
},
computed: {
...mapState(['userInfo']),
// ...mapState(['shopifyObj']),
active() {
return this.$route.path
},
},
mounted() {
if(this.$route.query.shopKey){
localStorage.setItem('shopifyObj', JSON.stringify(this.$route.query))
}
if(this.userInfo && this.$route.query.shopKey){
this.$router.push('/contact')
}
},
methods: {
...mapMutations(['setUserInfo']),
...mapMutations(['setUserInfo','setShopKey']),
changePath() {
this.scrollParent().scrollTo({
behavior: 'smooth',
......@@ -83,6 +92,9 @@ export default {
})
},
login() {
if(this.$route.query&&this.$route.query.shopKey){
this.setShopKey(this.$route.query.shopKey)
}
this.$router.push('/login')
},
register() {
......@@ -108,6 +120,19 @@ export default {
right: 0;
left: 0;
}
.user-name {
margin-right: 10px;
}
.user-msg {
color: #fff;
}
.logout {
margin-right: 30px;
}
@media screen and (max-width: 1100px) {
.header {
position: sticky;
......@@ -156,10 +181,6 @@ export default {
margin-right: 50px;
}
.user-name {
margin-right: 10px;
}
.logout img {
width: 20px;
vertical-align: middle;
......
......@@ -6,11 +6,21 @@
<div class="header-nav-mobile_logo">
<img src="../assets/logo.png" height="40px" />
</div>
<div class="header-nav-mobile_login">
<div class="header-nav-mobile_login" v-if="!userInfo">
<span @click="login">登录</span>
<span style="margin: 0 5px">|</span>
<span @click="register">注册</span>
</div>
<div class="header-nav-mobile_user" v-else>
<span class="user-name">{{ userInfo.companyName }}</span>
<span style="margin: 0 10px">欢迎您</span>
<span style="margin: 0 5px">|</span>
<span style="margin-left: 10px;cursor: pointer;" @click="logout">
<img
style="width: 16px; height: 16px; vertical-align: middle"
src="../assets/images/logout.png" />
</span>
</div>
<transition name="header-nav-mobile">
<div
v-show="showing"
......@@ -35,6 +45,7 @@
</div>
</template>
<script>
import { mapMutations } from 'vuex'
export default {
name: 'headerNavMobile',
data() {
......@@ -46,8 +57,14 @@ export default {
nav: {
type: Array,
},
userInfo: {
type: Object,
},
},
computed: {
},
methods: {
...mapMutations(['setUserInfo']),
toggleShow() {
this.showing = !this.showing
},
......@@ -61,6 +78,11 @@ export default {
register() {
this.$router.push('/register')
},
logout() {
localStorage.removeItem('userInfo')
this.setUserInfo(undefined)
this.$router.push('/login')
},
},
}
</script>
......@@ -94,6 +116,14 @@ export default {
justify-content: flex-end;
}
.header-nav-mobile_user {
flex: 1;
display: flex;
font-size: 12px;
margin-right: 10px;
justify-content: flex-end;
}
.header-nav-mobile_trigger {
flex: 1;
}
......
......@@ -57,6 +57,7 @@ import {
CascaderPanel,
Tag,
Scrollbar,
RadioButton,
} from 'element-ui'
Vue.prototype.$ELEMENT = { size: 'mini' }
......@@ -91,7 +92,7 @@ Vue.use(Container)
Vue.use(ButtonGroup)
Vue.use(Tag)
Vue.use(Scrollbar)
Vue.use(RadioButton)
Vue.use(Cascader)
Vue.prototype.$alert = MessageBox.alert
Vue.prototype.$message = (message) =>
......
......@@ -70,10 +70,15 @@ const routes = [
component: (resolve) => require(['../views/authorization-failed'], resolve),
},
{
path: '/protocol',
path: '/protocol/:type',
name: 'protocol',
component: (resolve) => require(['../views/protocol'], resolve),
},
{
path: '/message',
name: 'message',
component: (resolve) => require(['../views/message'], resolve),
}
]
const router = new VueRouter({
......
......@@ -7,10 +7,14 @@ export default new Vuex.Store({
},
state: {
userInfo: JSON.parse(JSON.stringify(localStorage.getItem('userInfo'))) || undefined,
shopifyObj:{}
},
mutations: {
setUserInfo(state, profile) {
state.userInfo = profile
},
setShopKey(state,data){
state.shopifyObj = data
}
},
actions: {
......
......@@ -2,17 +2,17 @@
<div class="login_bg">
<div class="contact-header">
<div class="header-image">
<img src="../assets/logo.png" height="40px"/>
<img src="../assets/logo.png" height="40px" />
</div>
<!-- <div class="user-info">
<div class="user-msg">
<div class="user-info">
<!-- <div class="user-msg">
<span class="user-name">{{ '小溪' }}</span>
<span>欢迎您</span>
</div>
</div> -->
<div class="logout" title="退出登录" @click="logout">
<img src="../assets/images/logout.png" />
</div>
</div> -->
</div>
</div>
<div class="login_content">
<div class="no-authority">
......@@ -23,8 +23,14 @@
font-size: 50px;
line-height: 100px;
font-family: '微软雅黑';
" v-if="userInfo.erpKey">
<a :href="userInfo.erpKey+'.jomalls.com'" target="_blank" style="text-decoration: none"> {{userInfo.erpKey+'.jomalls.com'}}</a>
"
v-if="userInfo && userInfo.erpKey">
<a
:href="`https://${userInfo && userInfo.erpKey}.jomalls.com`"
target="_blank"
style="text-decoration: none">
{{ `https://${userInfo && userInfo.erpKey}.jomalls.com` }}
</a>
</div>
<h1
style="
......@@ -33,16 +39,30 @@
font-size: 50px;
line-height: 100px;
font-family: '微软雅黑';
" v-else>
"
v-else>
您尚未开通erp权限,请联系您的商务经理
</h1>
<h2 style="
<h2
style="
text-align: center;
color: #fff;
font-size: 36px;
line-height: 100px;
font-family: '微软雅黑';
">联系电话:15399065167</h2>
">
联系电话:18710915638
</h2>
<h2
style="
text-align: center;
color: #fff;
font-size: 36px;
line-height: 50px;
font-family: '微软雅黑';
">
邮箱:nina@jomalls.com
</h2>
<el-button
style="
text-align: center;
......@@ -64,27 +84,48 @@
</template>
<script>
import {mapState} from 'vuex'
import { mapMutations, mapState } from 'vuex'
import { post } from '../utils/axios'
export default {
name: 'contact',
components: {},
data() {
return {}
return {
userInfo: JSON.parse(localStorage.getItem('userInfo')),
shopifyObj: JSON.parse(localStorage.getItem('shopifyObj'))
}
},
computed: {
...mapState(['userInfo']),
...mapState(['shopifyObj']),
},
mounted() {
console.log(this.userInfo,123)
console.log(this.shopifyObj);
if (this.userInfo && this.shopifyObj) {
this.getShopifyInfo()
}
},
methods: {
...mapMutations(['setUserInfo']),
goBack() {
this.$router.push('/')
},
getShopifyInfo() {
console.log(this.shopifyObj)
if (!this.shopifyObj.shopKey || !this.userInfo.erpKey) return
post('business/shop/bind', {
shopKey: this.shopifyObj.shopKey,
platform: this.shopifyObj.platform,
companyCode: this.userInfo.erpKey,
}).then((res) => {
console.log(res)
})
},
logout() {
localStorage.removeItem('userInfo')
this.setUserInfo(undefined)
this.$router.push('/login')
},
},
}
</script>
......
<template>
<div class="message">
<div>
<h1 class="code" v-if="code === '200'" style="color: green;font-weight: bold;"><span>{{ msg }}</span></h1>
<h1 class="code" v-if="code === '500'" style="color: red;font-weight: bold;"><span>{{ msg }}</span></h1>
</div>
</div>
</template>
<script>
export default {
name: 'message',
data() {
return {
code: '',
msg: '',
}
},
mounted() {
const { code, msg } = this.$route.query
if (code) {
this.code = code
}
if (msg) {
this.msg = msg
}
},
}
</script>
<style scoped>
.message {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
</style>
......@@ -67,6 +67,10 @@ export default {
valueClass: 'fs-20 fw-b',
},
{
label: '适用范围',
value: 'radius'
},
{
label: '收费方式',
value: (d) => {
d = d.chargeType
......@@ -111,12 +115,34 @@ export default {
prices: [
{
name: 'shopify版',
chargeType: '一次性收费',
price: '10$',
radius: 'shopify',
accountsCount: '不限',
deploymentType: 'SaaS',
rechargeAmount: '0',//充值金额
featureCustomization: false, // 功能定制
permissionManage: true, // 权限管理
financialManage: true, // 财务管理
statisticalReport: true, // 统计报表
orderManage: true, // 订单管理
logisticsManage: true, // 物流管理
orderStorage: '180天', // 订单数据存储
logsRetainDays: '90天', // 操作日志查看天数
shopCount: 50, // 店铺数量
imageStorage: '4G', // 图片空间
trainingType: '线上培训', // 培训方式
exclusivePM: true, // 专属产品经理
},
{
name: '试用版',
chargeType: ['免费3个月', '或3000单'], // 收费方式
price: 0, // 价格
radius: 'other',
accountsCount: 10, // 账号数量
rechargeAmount: '赠送', // 充值金额
rechargeAmount: '0', // 充值金额
deploymentType: 'SaaS', // 部署方式
featureCustomization: false, // 功能定制
permissionManage: true, // 权限管理
......@@ -136,6 +162,7 @@ export default {
chargeType: '按单收费', // 收费方式
price: '0.2元/单', // 价格
radius: 'other',
accountsCount: 100, // 账号数量
rechargeAmount: '首充10000元', // 充值金额
deploymentType: 'SaaS', // 部署方式
......@@ -158,6 +185,7 @@ export default {
chargeType: '按单收费', // 收费方式
price: '0.16元/单', // 价格
radius: 'other',
accountsCount: '不限', // 账号数量
rechargeAmount: '首充30000元', // 充值金额
deploymentType: 'SaaS', // 部署方式
......@@ -180,6 +208,7 @@ export default {
chargeType: '按月收费', // 收费方式
price: 9800, // 价格
radius: 'other',
accountsCount: '不限', // 账号数量
rechargeAmount: '季付', // 充值金额
deploymentType: 'SaaS', // 部署方式
......@@ -202,6 +231,7 @@ export default {
chargeType: '按月收费', // 收费方式
price: 29800, // 价格
radius: 'other',
accountsCount: '不限', // 账号数量
rechargeAmount: '季付', // 充值金额
deploymentType: 'SaaS或阿里云独立部署', // 部署方式
......
......@@ -13,25 +13,29 @@
<h2 style="text-align: center; font-weight: 400; color: #4a4c6d">
用户注册
</h2>
<el-radio-group v-model="labelPosition" class="radioGroup" size="small" @change="clickChange">
<el-radio-button label="mailbox">邮箱注册</el-radio-button>
<el-radio-button label="phone">手机号注册</el-radio-button>
</el-radio-group>
<el-form
size="medium"
:model="registerForm"
:rules="rules"
ref="registerForm"
class="login_form">
<el-form-item prop="email" label="">
<el-form-item v-if="labelPosition==='mailbox'" prop="email" label="">
<el-input
v-model="registerForm.email"
prefix-icon="el-icon-postcard"
placeholder="请输入邮箱"></el-input>
</el-form-item>
<el-form-item prop="code" label="">
<el-form-item v-if="labelPosition==='mailbox'" prop="code" label="">
<div style="display: flex; gap: 20px">
<div style="flex: 1">
<el-input
v-model="registerForm.code"
prefix-icon="el-icon-message"
placeholder="请输入验证码"></el-input>
placeholder="请输入邮箱验证码"></el-input>
</div>
<div>
<el-button
......@@ -47,6 +51,51 @@
</div>
</div>
</el-form-item>
<el-form-item v-if="labelPosition==='phone'" prop="phone" label="">
<el-input
v-model="registerForm.phone"
prefix-icon="el-icon-phone"
placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item v-if="labelPosition==='phone'" prop="verifyKey" label="">
<div style="display: flex; gap: 20px; margin-bottom: -10px;">
<div style="flex: 1">
<el-input
v-model="registerForm.verifyKey"
prefix-icon="el-icon-postcard"
placeholder="请输入验证码,区分大小写">
</el-input>
</div>
<div @click="getVerifycode">
<img
style="width: 100px; height: 80%"
:src="VerifyUrl">
</img>
</div>
</div>
</el-form-item>
<el-form-item v-if="labelPosition==='phone'" prop="code" label="">
<div style="display: flex; gap: 20px">
<div style="flex: 1">
<el-input
v-model="registerForm.code"
prefix-icon="el-icon-message"
placeholder="请输入短信验证码"></el-input>
</div>
<div>
<el-button
class="get-code-button"
style="width: 112px"
:disabled="getCodeDisabled"
:class="getCodeDisabled ? 'disabled' : 'code-btn'"
@click="verPhonecode">
{{
codeCountDown === 0 ? '获取验证码' : `${codeCountDown}秒`
}}
</el-button>
</div>
</div>
</el-form-item>
<el-form-item prop="password" label="">
<el-input
type="password"
......@@ -80,8 +129,12 @@
<el-checkbox v-model="isRead" label="" :indeterminate="false" />
<span class="tos-link">
阅读并同意
<a class="link" href="/protocol" target="_blank">
九猫ERP条款与协议
<a class="link" href="/protocol/term" target="_blank">
《九猫ERP条款与协议》
</a>
<span></span>
<a class="link" href="/protocol/privacy" target="_blank">
《隐私协议》
</a>
</span>
</div>
......@@ -102,6 +155,7 @@
<script>
import { get, post } from '../utils/axios'
import md5 from 'js-md5'
import {mapState} from "vuex";
export default {
name: 'register',
components: {},
......@@ -116,6 +170,9 @@ export default {
}
}
return {
VerifyUrl:'',
verifyKeyTime:'',
labelPosition: 'mailbox',
registerForm: {},
isRead: false,
agreeAnimate: false,
......@@ -129,7 +186,16 @@ export default {
trigger: ['blur', 'change'],
},
],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{
pattern: /^1[3,4,5,6,7,8,9][0-9]{9}$/,
message: "请输入正确手机号码",
trigger: ['blur', 'change'],
}
],
code: [{ required: true, message: '请输入验证码', trigger: 'blur' }],
verifyKey: [{ required: true, message: '请输入验证码', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
checkPass: [
{ required: true, message: '请再次输入密码', trigger: 'blur' },
......@@ -148,6 +214,9 @@ export default {
return this.codeCountDown > 0
},
},
mounted(){
this.getVerifycode()
},
methods: {
async verCode() {
try {
......@@ -161,7 +230,35 @@ export default {
}
try {
const res = await get('business/user/emailcode', {
email: this.registerForm.email,
email: this.registerForm.email
})
this.codeCountDown = 60
this.timer = setInterval(() => {
this.codeCountDown--
if (this.codeCountDown <= 0) {
clearInterval(this.timer)
}
}, 1000)
this.$message.success(res.message)
} catch (e) {
console.error(e)
}
},
async verPhonecode(){
try {
await new Promise((resolve, reject) => {
this.$refs.registerForm.validateField('phone', (m) => {
m ? reject() : resolve()
})
})
} catch {
return
}
try {
const res = await post('business/user/phonecode', {
account: this.registerForm.phone,
verifyKey: this.verifyKeyTime,
verifyCode: this.registerForm.verifyKey
})
this.codeCountDown = 60
this.timer = setInterval(() => {
......@@ -172,6 +269,7 @@ export default {
}, 1000)
this.$message.success(res.message)
} catch (e) {
this.getVerifycode()
console.error(e)
}
},
......@@ -185,7 +283,7 @@ export default {
}, 700)
return
}
const { code, companyName, email, job, password } = this.registerForm
const { code, companyName, email, job, password, phone, verifyKey } = this.registerForm
const hash = md5.create()
hash.update(password)
......@@ -196,6 +294,7 @@ export default {
email: email,
job: job,
password: passwordHash,
account: email ? email : phone
}).then((res) => {
this.$message.success(res.message)
if (res.code === 200) {
......@@ -206,6 +305,19 @@ export default {
}
})
},
getVerifycode(){
this.verifyKeyTime = new Date().getTime();
get('business/user/verifycode',{
verifyKey: this.verifyKeyTime
}).then((res)=>{
if(res.code === 200){
this.VerifyUrl = res.message
}
})
},
clickChange(lab){
this.registerForm = {}
}
},
}
</script>
......@@ -308,6 +420,12 @@ export default {
top: 7%;
left: 8%;
}
.radioGroup{
display: flex;
justify-content: center;
align-items: center;
margin-top: 10px;
}
@media screen and (max-width: 1100px) {
.login_bg {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment