This commit is contained in:
@QQNZX 2024-01-02 10:04:57 +08:00
parent 53062019b4
commit 9974798e58
25 changed files with 364 additions and 162 deletions

View File

@ -42,6 +42,7 @@
"bignumber.js": "^9.1.2",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"crypto-js": "^4.2.0",
"echarts": "4.9.0",
"element-tiptap": "^1.27.1",
"element-ui": "2.15.12",

View File

@ -6,18 +6,21 @@
</template>
<script>
import { getToken, setToken, removeToken } from '@/utils/auth'
import CryptoJS from "crypto-js";
export default {
name: 'FuintDoc',
data() {
return {
// url: 'https://www.fuint.cn/docs/index/'
url: 'http://192.168.0.181:82/#/homeindex?id=0'
url: ''
}
},
methods: {
goto() {
window.open(this.url)
console.log( getToken())
window.open('http://127.0.0.1:5500/index.html?id='+ getToken())
}
}
}

View File

@ -17,7 +17,6 @@
mode="vertical"
style="margin-bottom: 80px;"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
:key="route.path + index"

View File

@ -59,7 +59,7 @@
</el-input>
</div>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
<img :src="codeUrl" @click="getCodeimg" class="login-code-img"/>
</div>
</div>
</el-form-item>
@ -132,22 +132,6 @@
</div>
</div>
<!-- <div class="login-main">-->
<!-- <div class="caption">-->
<!-- <h4 class="caption-title">{{ systemName }}</h4>-->
<!-- <p class="caption-remark">欢迎使用 {{ systemName }}您的卡券储值卡计次卡等会员营销小管家</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="login-form">-->
<!-- <div class="copy-right">-->
<!-- <span>Copyright © 2020-2023 <a class="link" href="https://www.fuint.cn">fuint.cn</a> All Rights Reserved.</span>-->
<!-- </div>-->
<!-- </div>-->
</div>
</template>

View File

@ -11,5 +11,5 @@ VUE_APP_BASE_API = '/dev-api'
VUE_APP_PUBLIC_PATH = '/'
# 后端接口地址
VUE_APP_SERVER_URL = 'http://192.168.0.196:8080/'
VUE_APP_SERVER_URL = 'http://192.168.0.196:8081/'

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 951 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 KiB

View File

@ -11,14 +11,14 @@ $panGreen: #30B08F;
// 默认菜单主题风格
$base-menu-color:#ffffff;// 菜单全部字体颜色
$base-menu-color-active:#ffffff;// 父级菜单激活的字体颜色
$base-menu-background:#1a5982;
$base-menu-background:#5a91ff;
$base-logo-title-color: #ffffff;
$base-menu-light-color:#ffffff;
$base-menu-light-background:#ffffff;
$base-logo-light-title-color: #1a5982;
$base-sub-menu-background:#18547a;//展开的背景色
$base-sub-menu-background: #4e77cc;//展开的背景色
$base-sub-menu-hover:#001528;
$base-sidebar-width: 200px;

View File

@ -108,7 +108,7 @@ export default {
overflow: hidden;
position: relative;
background: #144a6e;
background-image: url("../../assets/images/bolang.png") ;
background-image: url("../../assets/images/kkx.png") ;
background-size: 100% 100%;
background-size: cover;
background-repeat: no-repeat;

View File

@ -1,17 +1,25 @@
<template>
<div class="login">
<div class="login-main">
<div class="caption">
<h4 class="caption-title">{{ systemName }}</h4>
<p class="caption-remark">欢迎使用 {{ systemName }}您的卡券储值卡计次卡等会员营销小管家</p>
<div class="box-center">
<div class="box-left">
<div class="bai-size">蓝鲸智慧加油站-中台</div>
<div class="bact-box">
<div class="sanhh">活动营销</div>
<div class="sanhh">节省人力</div>
<div class="sanhh">精准定位</div>
</div>
</div>
<div class="login-form">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules">
<div class="title">
<img class="logo" src="@/assets/logo/logo.png"/>
<span class="name">{{ systemName }}</span>
<div class="box-right">
<div class="box-title">
<div style="margin-right: 15px;cursor: pointer " v-for="(item,index) in dlyzm" :key="index" @click="actindex = item.type " >
<div>{{item.text}}</div>
<div class="gangs" v-if="item.type == actindex " ></div>
</div>
</div>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" v-if="actindex == 0" >
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
@ -36,18 +44,23 @@
</el-input>
</el-form-item>
<el-form-item prop="captchaCode" v-if="captchaOnOff">
<el-input
v-model="loginForm.captchaCode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 63%"
clearable
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
<div style="display: flex;align-items: center">
<div>
<el-input
v-model="loginForm.captchaCode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 90%"
clearable
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
</div>
<div class="login-code">
<img :src="codeUrl" @click="getCodeimg" class="login-code-img"/>
</div>
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
@ -63,27 +76,91 @@
<span v-else> 中...</span>
</el-button>
</el-form-item>
</el-form>
<div class="copy-right">
<span>Copyright © 2020-2023 <a class="link" href="https://www.fuint.cn">fuint.cn</a> All Rights Reserved.</span>
</div>
</el-form>
<!-- 验证码-->
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" v-if="actindex == 1" >
<el-form-item prop="username">
<el-input
v-model="loginForm.tel"
type="number"
auto-complete="off"
clearable
placeholder="手机号"
>
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="captchaCode" v-if="captchaOnOff">
<div style="display: flex;align-items: center">
<div>
<el-input
v-model="loginForm.telcode"
auto-complete="off"
placeholder="请输入验证码"
style="width: 90%"
clearable
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
</div>
<div>
<span class="anniulan" v-show="show" @click="getCodet" >获取验证码</span>
<span style="cursor: pointer;color: #00aaff " v-show="!show" class="count">{{count}}s后重新获取</span>
</div>
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-button
:loading="loading"
size="medium"
type="primary"
style="width:100%;line-height: 24px;font-size: 16px;"
@click.native.prevent="posttelcode()"
>
<span v-if="!loading">立即登录</span>
<span v-else> 中...</span>
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { getCodeImg } from "@/api/login";
import {getCodeImg, gettelcode, gettellogin,} from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
import BalanceRecharge from "@/views/member/balanceRecharge.vue";
import {setToken} from "@/utils/auth";
export default {
name: "Login",
components: {BalanceRecharge},
data() {
return {
show: true,
count: '',
timer: null,
dlyzm:[
{text:'登录',type:'0'},
{text: "验证码",type:'1'}
],
actindex:0,
codeUrl: "",
systemName : process.env.VUE_APP_TITLE,
loginForm: {
username: "fuint",
tel:null,
telcode:null,
username: "oil_admin",
password: "123456",
rememberMe: false,
captchaCode: "",
@ -115,11 +192,44 @@ export default {
}
},
created() {
this.getCode();
this.getCodeimg();
this.getCookie();
},
methods: {
getCode() {
getCodet() {
if(!this.loginForm.tel){
this.$message.error("手机号不能为空")
return
}
const TIME_COUNT = 60;
if (!this.timer) {
this.count = TIME_COUNT;
this.show = false;
this.timer = setInterval(() => {
if (this.count > 0 && this.count <= TIME_COUNT) {
this.count--;
} else {
this.show = true;
clearInterval(this.timer);
this.timer = null;
}
}, 1000)
}
let data = {
mobile:this.loginForm.tel
}
gettelcode(data).then(res =>{
if(res.code == 200){
this.$message.success("操作成功")
}else{
this.$message.error("操作失败请稍后再试")
}
})
},
getCodeimg() {
const app = this
getCodeImg().then(response => {
app.codeUrl = response.data.captcha
@ -137,30 +247,44 @@ export default {
uuid: this.loginForm.uuid
};
},
posttelcode(){
const data = {
mobile:this.loginForm.tel,
code:this.loginForm.telcode
}
this.$store.dispatch("codeLogin", data).then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false;
});
},
handleLogin() {
const app = this;
if (app.loading) {
return false;
return false;
}
this.$refs.loginForm.validate(valid => {
if (valid) {
app.loading = true;
if (app.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
}
app.$store.dispatch("Login", this.loginForm).then(() => {
app.loading = true;
if (app.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
}
app.$store.dispatch("Login", this.loginForm).then(() => {
app.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
app.loading = false;
if (app.captchaOnOff) {
app.getCode();
}
app.loading = false;
if (app.captchaOnOff) {
app.getCode();
}
});
}
});
@ -171,100 +295,188 @@ export default {
<style rel="stylesheet/scss" lang="scss">
.login {
height: 100%;
height: 100vh;
width: 100%;
position: relative;
background-image: url("../assets/images/backbbj.png");
overflow: hidden;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
.box-center{
width: 1000px;
height: 580px;
border-radius: 8px;
background: #FFFFFF;
box-shadow: 0px 4px 10px 0px rgba(20,61,129,0.1);
border-radius: 16px 16px 16px 16px;
opacity: 1;
margin: 150px auto;
overflow: hidden;
display: flex;
}
.gangs{
width: 100%;
height: 5px;
background: #00aaff;
border-radius: 50px;
}
.box-left{
width: 50%;
height: 100%;
background: #00aaff;
background-image: url("../assets/images/box-left.png");
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
.box-right{
width: 50%;
box-sizing: border-box;
padding: 80px;
}
.box-title{
width: 100%;
//text-align: center;
display: flex;
align-items: center;
margin-bottom: 20px;
}
.bai-size{
width: 100%;
text-align: center;
font-size: 40px;
font-weight: bold;
color: #FFFFFF;
margin-top: 65px;
}
.bact-box{
width: 85%;
margin: 15px auto;
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 40px;
}
.sanhh{
width: 112px;
height: 34px;
background: linear-gradient(90deg, #E1EBFF 0%, #FFFFFF 100%);
border-radius: 2px 2px 2px 2px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #1755D0;
}
.login-main {
background-image: url("../assets/images/login-bg.png");
position: fixed;
left: 0;
right: 500px;
top: 0;
bottom: 0;
-webkit-transform: translateZ(0);
overflow: hidden;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
.caption {
.caption-title {
font-size: 30px;
font-weight: bold;
line-height: 0px;
}
.caption-remark {
line-height: 0px;
}
background: rgba(0,0,0,.7);
color: #ffffff;
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 30px 50px;
font-size: 14px;
z-index: 20;
font-weight: 300;
min-width: 680px;
background-image: url("../assets/images/login-bg.png");
position: fixed;
left: 0;
right: 500px;
top: 0;
bottom: 0;
-webkit-transform: translateZ(0);
overflow: hidden;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
.caption {
.caption-title {
font-size: 30px;
font-weight: bold;
line-height: 0px;
}
.caption-remark {
line-height: 0px;
}
background: rgba(0,0,0,.7);
color: #ffffff;
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 30px 50px;
font-size: 14px;
z-index: 20;
font-weight: 300;
min-width: 680px;
}
}
.login-form {
width: 500px;
height: 100%;
width: 500px;
height: 100%;
float: right;
padding: 80px 60px;
background: #FFF;
.title {
text-align: left;
font-size: 24px;
color: #707070;
padding: 20px 20px 40px 0px;
.logo {
height: 24px;
width: 24px;
vertical-align: middle;
}
.name {
margin-left: 5px;
}
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.login-code {
width: 33%;
height: 38px;
float: right;
padding: 80px 60px;
background: #FFF;
.title {
text-align: left;
font-size: 24px;
color: #707070;
padding: 20px 20px 40px 0px;
.logo {
height: 24px;
width: 24px;
vertical-align: middle;
}
.name {
margin-left: 5px;
}
img {
cursor: pointer;
vertical-align: middle;
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.login-code {
width: 33%;
height: 38px;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
}
.login-code-img {
}
.login-code-img {
height: 45px;
}
.el-input {
height: 45px;
input {
height: 45px;
}
.el-input {
height: 45px;
input {
height: 45px;
}
}
.input-icon {
height: 45px;
width: 14px;
margin-left: 2px;
}
.copy-right {
color: #888888;
text-align: center;
font-size: 12px;
.link {
color: #ff5b57;
font-weight: bold;
}
}
.input-icon {
height: 45px;
width: 14px;
margin-left: 2px;
}
.copy-right {
color: #888888;
text-align: center;
font-size: 12px;
.link {
color: #ff5b57;
font-weight: bold;
}
}
}
}
.anniulan{
width: 100px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
//border: 1px solid #00aaff;
border-radius: 6px;
color: #00aaff;
cursor: pointer;
}
</style>

View File

@ -1,6 +1,6 @@
# \u6570\u636E\u5E93\u914D\u7F6E
spring.datasource.url=jdbc:mysql://192.168.1.3:3306/fuint-db?useUnicode=true&characterEncoding=UTF8&useSSL=false&allowMultiQueries=true
spring.datasource.url=jdbc:mysql://47.95.206.185:3306/fuint-db?useUnicode=true&characterEncoding=UTF8&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=qqzcy@1014
@ -123,4 +123,4 @@ weixin.subMessage.pointChange=[{'key':'amount', 'name':'\u53D8\u52A8\u6570\u91CF
//1
rocketmq.name-server=127.0.0.1:9876
//2
rocketmq.producer.group=provider
rocketmq.producer.group=provider

View File

@ -2,7 +2,7 @@
server.port=8080
env.profile=dev
#env.properties.path=D:/workspaces/oilSystem/fuintBackend/configure/
env.properties.path=D:/workspaces/oilSystem/fuintBackend/configure/
env.properties.path=D:/oil/oil/oilSystem/fuintBackend/configure/
# \u6570\u636E\u5E93\u914D\u7F6E
@ -71,4 +71,4 @@ rocketmq.consumer.tags=anran-sync-tags,anran-async-tags
#rocketmq.consumer.consumeThreadMin=20
#rocketmq.consumer.consumeThreadMax=64
##???????????????1?
#rocketmq.consumer.consumeMessageBatchMaxSize=1
#rocketmq.consumer.consumeMessageBatchMaxSize=1

View File

@ -67,13 +67,16 @@
height: 60px;
background-color: white;
position: fixed;
bottom: 0px;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
justify-content: space-around;
font-size: 12px;
font-weight: 400;
color: #666666;
bottom: -30px;
}
.barbox {
@ -120,4 +123,4 @@
height: 100%;
}
}
</style>
</style>

View File

@ -2,7 +2,7 @@
module.exports = {
// baseUrl: 'https://vue.ruoyi.vip/prod-api',
// baseUrl: 'http://192.168.0.196:8081/',
baseUrl: 'http://192.168.0.121:8080/',
baseUrl: 'http://192.168.0.196:8081/',
// baseUrl: 'http://192.168.1.5:8002/cdJdc',
imagesUrl: 'https://www.tuofeng.cc/oilRescue',

View File

@ -6,7 +6,7 @@
<view class="conttainer-top">
<!-- 轮播图 -->
<view style="width: 100%;height: 300px;">
<swiper class="swiper" style="width: 100%;height: 300px;" circular :indicator-dots="indicatorDots"
<swiper class="swiper" style="width: 100%;height: 300px;" circular :indicator-dots="indicatorDots"
:autoplay="autoplay" :interval="interval"
:duration="duration">
<swiper-item v-for="(item,index) in list1" :key="index" @click="goPage(item.routeUrl)">
@ -15,7 +15,7 @@
</swiper-item>
</swiper>
</view>
<!-- 标题 -->
<view class="top-title">
出行服务 优惠加油
@ -775,4 +775,4 @@
color: white;
margin: 0 auto;
}
</style>
</style>