初始化提交

saber
jinna 3 years ago
parent cebe78b4db
commit d9a09b2cd9
  1. 14210
      package-lock.json
  2. BIN
      public/img/bg/login_bag.png
  3. BIN
      src/assets/image/login_bag.png
  4. BIN
      src/assets/image/up_1.jpg
  5. BIN
      src/assets/image/up_2.jpg
  6. BIN
      src/assets/image/up_3.jpg
  7. 41
      src/config/website.js
  8. 15
      src/page/index/top/index.vue
  9. 31
      src/page/login/index.vue
  10. 14
      src/page/login/userlogin.vue
  11. 114
      src/styles/login.scss
  12. 421
      src/views/carlist/index.vue
  13. 257
      src/views/station/index.vue
  14. 19
      src/views/video/index.vue
  15. 36
      vue.config.js

14210
package-lock.json generated

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

@ -4,17 +4,17 @@
export default { export default {
title: "saber", title: "saber",
logo: "S", logo: "S",
key: 'saber',//配置主键,目前用于存储 key: "saber", //配置主键,目前用于存储
indexTitle: 'Saber Admin', indexTitle: "慢直播",
clientId: 'saber', // 客户端id clientId: "saber", // 客户端id
clientSecret: 'saber_secret', // 客户端密钥 clientSecret: "saber_secret", // 客户端密钥
tenantMode: true, // 是否开启租户模式 tenantMode: true, // 是否开启租户模式
tenantId: "000000", // 管理组租户编号 tenantId: "000000", // 管理组租户编号
captchaMode: true, // 是否开启验证码模式 captchaMode: false, // 是否开启验证码模式
switchMode: false, // 是否开启部门切换模式 switchMode: false, // 是否开启部门切换模式
lockPage: '/lock', lockPage: "/lock",
tokenTime: 3000, tokenTime: 3000,
tokenHeader: 'Blade-Auth', tokenHeader: "Blade-Auth",
//http的status默认放行列表 //http的status默认放行列表
statusWhiteList: [], statusWhiteList: [],
//配置首页不可关闭 //配置首页不可关闭
@ -25,27 +25,28 @@ export default {
params: {}, params: {},
query: {}, query: {},
meta: { meta: {
i18n: 'dashboard' i18n: "dashboard",
}, },
group: [], group: [],
close: false close: false,
}, },
//配置菜单的属性 //配置菜单的属性
menu: { menu: {
iconDefault: 'iconfont icon-caidan', iconDefault: "iconfont icon-caidan",
props: { props: {
label: 'name', label: "name",
path: 'path', path: "path",
icon: 'source', icon: "source",
children: 'children' children: "children",
} },
}, },
// 第三方系统授权地址 // 第三方系统授权地址
authUrl: 'http://localhost/blade-auth/oauth/render', authUrl: "http://localhost/blade-auth/oauth/render",
// 报表设计器地址(cloud端口为8108,boot端口为80) // 报表设计器地址(cloud端口为8108,boot端口为80)
reportUrl: 'http://localhost:8108/ureport', reportUrl: "http://localhost:8108/ureport",
// 单点登录系统认证(blade-auth服务的地) // 单点登录系统认证(blade-auth服务的地)
ssoUrl: 'http://localhost:8100/oauth/authorize?client_id=saber&response_type=code&redirect_uri=', ssoUrl:
"http://localhost:8100/oauth/authorize?client_id=saber&response_type=code&redirect_uri=",
// 单点登录回调地址(Saber服务的地址) // 单点登录回调地址(Saber服务的地址)
redirectUri: 'http://localhost:1888', redirectUri: "http://localhost:1888",
} };

@ -13,13 +13,13 @@
v-if="showMenu"> v-if="showMenu">
<top-menu ref="topMenu"></top-menu> <top-menu ref="topMenu"></top-menu>
</div> </div>
<span class="top-bar__item" <!-- <span class="top-bar__item"
v-if="showSearch"> v-if="showSearch">
<top-search></top-search> <top-search></top-search>
</span> </span> -->
</div> </div>
<div class="top-bar__right"> <div class="top-bar__right">
<el-tooltip v-if="showColor" <!-- <el-tooltip v-if="showColor"
effect="dark" effect="dark"
:content="$t('navbar.color')" :content="$t('navbar.color')"
placement="bottom"> placement="bottom">
@ -64,7 +64,7 @@
<div class="top-bar__item top-bar__item--show"> <div class="top-bar__item top-bar__item--show">
<top-lang></top-lang> <top-lang></top-lang>
</div> </div>
</el-tooltip> </el-tooltip> -->
<el-tooltip v-if="showFullScren" <el-tooltip v-if="showFullScren"
effect="dark" effect="dark"
:content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')" :content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')"
@ -74,11 +74,13 @@
@click="handleScreen"></i> @click="handleScreen"></i>
</div> </div>
</el-tooltip> </el-tooltip>
<!-- <img class="top-bar__img"
:src="userInfo.avatar ? website.filePrex + userInfo.avatar : require('@/assets/image/hospital_logo.png')"> -->
<img class="top-bar__img" <img class="top-bar__img"
:src="userInfo.avatar"> src="userInfo.avatar">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
{{userInfo.userName}} {{userInfo.user_name}}
<i class="el-icon-arrow-down el-icon--right"></i> <i class="el-icon-arrow-down el-icon--right"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
@ -183,6 +185,7 @@
}, },
filters: {}, filters: {},
created() { created() {
console.log('userInfo',this.userInfo)
}, },
mounted() { mounted() {
listenfullscreen(this.setScreen); listenfullscreen(this.setScreen);

@ -4,7 +4,7 @@
@keyup.enter.native="handleLogin"> @keyup.enter.native="handleLogin">
<top-color v-show="false"></top-color> <top-color v-show="false"></top-color>
<div class="login-weaper animated bounceInDown"> <div class="login-weaper animated bounceInDown">
<div class="login-left"> <!--<div class="login-left">
<div class="login-time"> <div class="login-time">
{{time}} {{time}}
</div> </div>
@ -29,24 +29,29 @@
<span>租户管理员账号: admin / admin</span> <span>租户管理员账号: admin / admin</span>
<br> <br>
<span>----------------------------------------------</span> <span>----------------------------------------------</span>
</div> </div> -->
<!--<img class="img" src="/img/logo.png" alt="">--> <!--<img class="img" src="/img/logo.png" alt="">
</div> </div>-->
<div class="login-border"> <div class="login-border">
<div class="login-main"> <div class="login-main">
<h4 class="login-title"> <!-- <h4 class="login-title">
{{ $t('login.title') }}{{website.title}} {{ $t('login.title') }}{{website.title}}
<top-lang></top-lang> <top-lang></top-lang>
</h4> </h4> -->
<div class="login_tit">
<div>欢迎登录</div>
<div class="line"></div>
</div>
<userLogin v-if="activeName==='user'"></userLogin> <userLogin v-if="activeName==='user'"></userLogin>
<codeLogin v-else-if="activeName==='code'"></codeLogin> <!-- <codeLogin v-else-if="activeName==='code'"></codeLogin>
<thirdLogin v-else-if="activeName==='third'"></thirdLogin> <thirdLogin v-else-if="activeName==='third'"></thirdLogin> -->
<div class="login-menu"> <!-- <div class="login-menu"> -->
<a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a> <!-- <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a> -->
<!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>--> <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>-->
<a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a> <!-- <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>
<a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a> <a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a> -->
</div> <!-- </div> -->
</div> </div>
</div> </div>

@ -5,7 +5,7 @@
ref="loginForm" ref="loginForm"
:model="loginForm" :model="loginForm"
label-width="0"> label-width="0">
<el-form-item v-if="tenantMode" prop="tenantId"> <!-- <el-form-item v-if="tenantMode" prop="tenantId">
<el-input size="small" <el-input size="small"
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"
v-model="loginForm.tenantId" v-model="loginForm.tenantId"
@ -13,9 +13,9 @@
:placeholder="$t('login.tenantId')"> :placeholder="$t('login.tenantId')">
<i slot="prefix" class="icon-quanxian"/> <i slot="prefix" class="icon-quanxian"/>
</el-input> </el-input>
</el-form-item> </el-form-item> -->
<el-form-item prop="username"> <el-form-item prop="username">
<el-input size="small" <el-input
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"
v-model="loginForm.username" v-model="loginForm.username"
auto-complete="off" auto-complete="off"
@ -24,7 +24,7 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input size="small" <el-input
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"
:type="passwordType" :type="passwordType"
v-model="loginForm.password" v-model="loginForm.password"
@ -88,9 +88,9 @@
//ID //ID
roleId: "", roleId: "",
// //
username: "admin", username: "",//"admin",
// //
password: "admin", password: "",//"admin",
// //
type: "account", type: "account",
// //
@ -163,7 +163,7 @@
}; };
}, },
created() { created() {
this.getTenant(); // this.getTenant();
this.refreshCode(); this.refreshCode();
}, },
mounted() { mounted() {

@ -5,14 +5,18 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
margin: 0 auto; margin: 0 auto;
background-image: url("/img/bg/bg.jpg"); background-image: url("/img/bg/login_bag.png");
background-size: 100% 100%; background-size: 100% 100%;
} }
.login-weaper { .login-weaper {
margin: 0 auto; margin: 0 144px 0 auto;
width: 1000px; // width: 1000px;
box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4); width: 470px;
// box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
background: linear-gradient(140deg, #E4ECF7 0%, #F8FAFC 67%, #FFFFFF 100%);
box-shadow: 1px 3px 12px 1px rgba(34, 63, 88, 0.14);
border-radius: 8px;
.el-input-group__append { .el-input-group__append {
border: none; border: none;
@ -22,8 +26,9 @@
.login-left, .login-left,
.login-border { .login-border {
position: relative; position: relative;
min-height: 500px; // min-height: 500px;
align-items: center; height: 526px;
// align-items: center;
display: flex; display: flex;
} }
@ -63,20 +68,20 @@
letter-spacing: 2px; letter-spacing: 2px;
} }
.login-border { // .login-border {
border-left: none; // border-left: none;
border-top-right-radius: 5px; // border-top-right-radius: 5px;
border-bottom-right-radius: 5px; // border-bottom-right-radius: 5px;
color: #fff; // color: #fff;
background-color: #fff; // background-color: #fff;
width: 50%; // width: 50%;
float: left; // float: left;
box-sizing: border-box; // box-sizing: border-box;
} // }
.login-main { .login-main {
margin: 0 auto; margin: 0 auto;
width: 65%; width: 396px;
box-sizing: border-box; box-sizing: border-box;
} }
@ -91,10 +96,41 @@
.login-title { .login-title {
color: #333; color: #333;
margin-bottom: 40px; margin-bottom: 40px;
margin-top: 60px;
font-weight: 500; font-weight: 500;
font-size: 22px; font-size: 22px;
text-align: center; text-align: center;
letter-spacing: 4px; // letter-spacing: 4px;
}
.login_tit{
color: #333333;
font-size: 28px;
margin-top: 45px;
text-align: center;
}
.line{
width: 40px;
height: 4px;
margin-top: 10px;
background: #1B83E6;
margin: 0 auto;
margin-top: 11px;
}
.login-img {
width: 396px;
height: 42px;
}
.login-small-title {
color: #999999;
font-size: 12px;
line-height: 16px;
font-family: Microsoft YaHei-Light, Microsoft YaHei;
font-weight: 300;
text-align: left;
margin-top: 14px;
} }
.login-menu { .login-menu {
@ -111,21 +147,26 @@
.login-submit { .login-submit {
width: 100%; width: 100%;
height: 45px; height: 60px;
border: 1px solid #409EFF; // border: 1px solid #409EFF;
background: none; background: #1677FF;
;
font-size: 18px; font-size: 18px;
letter-spacing: 2px; letter-spacing: 2px;
font-weight: 300; font-weight: 300;
color: #409EFF; // color: #409EFF;
color: #fff;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
cursor: pointer; cursor: pointer;
margin-top: 30px; margin-top: 50px;
font-family: "neo"; // font-family: "neo";
transition: 0.25s; transition: 0.25s;
border-radius: 8px;
} }
.login-form { .login-form {
margin: 10px 0; margin: 60px 0 60px 0;
i { i {
color: #333; color: #333;
@ -136,24 +177,33 @@
} }
.el-form-item { .el-form-item {
margin-bottom: 12px; margin-bottom: 20px;
} }
.el-input { .el-input {
input { input {
padding-bottom: 10px; height:60px;
// padding-bottom: 10px;
text-indent: 5px; text-indent: 5px;
background: transparent; // background: transparent;
border: none; // border: none;
border-radius: 0; // border-radius: 0;
color: #333; color: #333;
border-bottom: 1px solid rgb(235, 237, 242); // border-bottom: 1px solid rgb(235, 237, 242);
border: 1px solid #D2D2D2;
border-radius: 8PX;
&:focus{
border-color: #1677FF;
}
} }
.el-input__prefix { .el-input__prefix {
top: 10px;
i { i {
color: #1677FF;
padding: 0 5px; padding: 0 5px;
font-size: 16px !important; font-size: 18px !important;
} }
} }
} }

@ -0,0 +1,421 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :page.sync="page" :data="data"
ref="crud" v-model="form" @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
@size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
:before-open="beforeOpen">
<template slot-scope="{row}" slot="hosId">
<span v-text='row.createDeptName'></span>
</template>
<template slot-scope="{row}" slot="menu">
<!-- <el-button type="text" icon="el-icon-edit" size="small"  @click="handleEdit(row)">编辑</el-button> -->
<!-- <el-button type="text" icon="el-icon-delete" size="small"  @click="handleView(row)">查看</el-button> -->
</template>
<!-- <template slot-scope="scope" slot="menuLeft">
<el-button type="primary" size="small" @click="addNumber">新增车辆</el-button>
</template> -->
<!-- 自定义弹窗按钮 -->
<template slot-scope="{row,index,type}" slot="menuForm">
<el-button icon="el-icon-circle-plus-outline" size="small" v-if="type == 'add'"
@click="$refs.crud.rowSave()">保存</el-button>
<el-button v-if="type == 'add'" type="primary" icon="el-icon-check" size="small"
@click="addPublish">提交</el-button>
</template>
</avue-crud>
</basic-container>
</template>
<script>
export default {
data() {
return {
deptName: "",
form: {
addData:[{
aisleNum:'1',aisleName:''
}]
},
loading: true,
parentId: 0,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
isShow: true,
selectDay: '',
addOption: {},
addOption1: {},
activeName: '',
isNumber: false,
option: {
height: 'auto',
calcHeight: 30,
tip: false,
searchShowBtn:false,
refreshBtn:false,
columnBtn:false,
searchShow: true,
searchMenuSpan: 6,
border: false,
index: false,
viewBtn: true,
editBtn: true,
delBtn: false,
addBtn: true,
addBtnText:'新增车辆',
selection: false,
saveBtn: false,
updateBtn: false,
cancelBtn: false,
dialogType: 'dialog',
dialogClickModal: false,
dialogMenuPosition:'center',
column: [
{
label: '车牌号',
prop: 'carId',
type: 'input',
hide: true,
viewDisplay: false,
search: true,
addDisplay:false,
editDisplay:false,
viewDisplay:false,
},
{
label: '公交车',
prop: "car",
overHidden: true
},
{
label: "车载机ID",
prop: "id",
editDisplay:false,
viewDisplay:false,
addDisplay:false,
},
{
label: "车载机",
prop: "number",
hide: true,
},
{
label: "直播通道数量",
editDisplay:false,
viewDisplay:false,
addDisplay:false,
prop: "count",
},
{
label: "直播通道",
viewDisplay:false,
editDisplay:false,
addDisplay:false,
prop: "video",
},
{
label: '直播通道',
prop: 'addData',
type: 'dynamic',
span: 24,
children: {
align: 'center',
headerAlign: 'center',
column: [
{
label: "通道号",
prop: 'aisleNum',
min:0,
max:9,
type:'number',
},
{
label: "直播通道名称",
prop: 'aisleName',
type:'input'
}
],
},
}
]
},
data: [],
count: 0,
dayArr: [],
depId: '',
tabArr: [],
tabsArr: [],
roleName: '',
isSelect: false,
hospitalArr: [],
isEdit: false,
valTime: '',
isShowHos: false,
tabArr1: [],
deadline: ''
};
},
computed: {
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
// console.log(params)
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
addPublish(){
console.log(this.form)
let numRepeat = this.form.addData.length > new Set(this.form.addData.map(item=>item.aisleNum)).size; //
let numValide = this.form.addData.find(item => item.aisleNum == undefined); //
let nameValide = this.form.addData.find(item => item.aisleName == ''); //
if(this.form.addData.length == 0){
this.$message.error('直播通道不可为空')
}else if(numRepeat){
this.$message.error('通道号不可重复')
}else if(numValide){
this.$message.error('通道号不可为空')
}else if(nameValide){
this.$message.error('通道名称不可为空')
}else if(this.form.car == ''){
this.$message.error('公交车不可为空')
}else if(this.form.number == ''){
this.$message.error('车载机不可为空')
}else{
}
},
onLoad(page, params = {}){
console.log(this.form)
this.loading = true
this.data = [
{car:'鲁F·58G42',id:'25621568729',count:'2',video:'车外摄像头、车内摄像头'}
];
this.page.total = this.data.length;
setTimeout(() =>{
this.loading = false
},500)
},
beforeOpen(done, type) {
console.log(type)
if(type == 'add'){
this.form = {
addData:[{
aisleNum:undefined,aisleName:''
}]
}
}
done();
},
//
handleEdit(row){},
//
handleView(row){
console.log(row)
},
},
};
</script>
<style lang='scss' scoped>
::v-deep .el-tabs__content {
height: 550px;
}
::v-deep .cla {
color: #F93A4A;
}
::v-deep .avue-input-number {
width: 40% !important;
}
::v-deep .el-calendar-day {
display: flex;
align-items: center;
justify-content: center;
&:hover{
cursor: default;
}
}
::v-deep .selected {
background: #EBEEF5;
pointer-events: none;
// cursor: move;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
::v-deep .select {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
::v-deep .isSelected {
background: #1677FF;
}
::v-deep .isCal{
height: 80%;
overflow-y: auto;
}
</style>
<style lang="scss">
.el-drawer .avue-form {
padding: 0 !important;
}
.dialog_box {
right: 10%;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.el-drawer__wrapper {
.number_box {
width: 800px !important;
overflow: hidden !important;
.el-drawer__body {
overflow: hidden;
.el-tabs__content{
height: auto;
position: absolute;
bottom: 0;
top: 60px;
left: 20px;
right: 20px;
overflow: auto;
}
}
.isTab{
.el-tabs{
.el-tabs__content{
bottom: 100px !important;
}
}
}
.title_box {
// padding: 0 40px;
// margin-top: 40px;
.title_txt {
display: flex;
height: 30px;
align-items: center;
justify-content: space-between;
.txt {
color: rgba(0, 0, 0, .85);
font-weight: 500;
line-height: 24px;
}
.img_box {
img {
width: 30px;
height: 30px;
}
}
}
.sub_txt {
font-size: 14px;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
color: #999999;
line-height: 16px;
}
}
.tab_box {
margin-top: 40px;
padding: 0 40px;
position: absolute;
left: 0;
right: 0;
top: 80px;
bottom: 100px;
overflow: hidden;
.hos_box {
font-size: 16px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
font-weight: bold;
color: #333333;
bottom: 65px;
position: absolute;
}
.hos_sele{
bottom: 15px;
position: absolute;
}
.monment_txt {
margin: 15px 0 20px 0;
font-size: 16px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
font-weight: bold;
color: #333333;
}
// .form_box {
// position: absolute;
// left: 0;
// right: 0;
// top: 20px;
// bottom: 10px;
// padding-bottom: 20px;
// overflow: scroll;
// }
}
.button_box {
width: 100%;
height: 90px;
background: #FFFFFF;
box-shadow: 0px -8px 16px 1px rgba(32, 50, 101, 0.15);
position: absolute;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
}
}
}
</style>

@ -0,0 +1,257 @@
<template>
<basic-container>
<el-form :inline="true" :model="stationForm">
<el-form-item>
<el-select v-model="stationForm.car" placeholder="请选择公交车">
<el-option
v-for="item in carOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="stationForm.direction" placeholder="请选择行驶方向">
<el-option
v-for="item in directionOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div class="station_box">
<div class="box">
<div class="top_box" v-for="item in stationData" :key="item"></div>
</div>
<div class="bottom">
<div class="bottom_box" :class="active == item.id ? 'active' : ''" v-for="item in stationData" @click="handleEdit(item)" :key="item">
<el-popover
ref="popverRef"
placement="right"
width="400"
trigger="hover"
@show="showPopver(item)"
@hide="hidePopver"
>
<div>
<div>{{item.tips}}</div>
<div>{{item.red}}</div>
<div>{{item.green}}</div>
<div>{{item.yellow}}</div>
<el-carousel trigger="click" height="150px">
<el-carousel-item v-for="item1 in item.imgList" :key="item1">
<!-- {{item.img}} -->
<img :src="item1.img" alt="">
<!-- <img src="~/@/assets/image/up_1.jpg" alt=""> -->
</el-carousel-item>
</el-carousel>
</div>
<div class="name_txt" slot="reference">{{item.name}}</div>
</el-popover>
</div>
</div>
</div>
<div class="station_box">
<div class="box">
<div class="top_box" v-for="item in stationData1" :key="item"></div>
</div>
<div class="bottom">
<div class="bottom_box" :class="active == item.id ? 'active' : ''" v-for="item in stationData1" :key="item">
<el-popover
ref="popverRef"
placement="right"
width="400"
trigger="hover"
@show="showPopver(item)"
@hide="hidePopver"
>
<div>
<div>{{item.tips}}</div>
<div>{{item.red}}</div>
<div>{{item.green}}</div>
<div>{{item.yellow}}</div>
<el-carousel trigger="click" height="150px">
<el-carousel-item v-for="item1 in item.imgList" :key="item1">
<!-- {{item.img}} -->
<img :src="item1.img" alt="">
<!-- <img src="~/@/assets/image/up_1.jpg" alt=""> -->
</el-carousel-item>
</el-carousel>
</div>
<div class="name_txt" slot="reference">{{item.name}}</div>
</el-popover>
</div>
</div>
</div>
</basic-container>
</template>
<script>
export default {
data() {
return {
active:'',
stationForm:{},
carOptions:[
{
value:'1',
label:"17路公交车"
}
],
directionOptions:[
{
value:1,
label:'上行'
},
{
value:1,
label:'下行'
}
],
stationArr:[
{
id:1,
name:"火车站北广场火车站北广场火车站北广场火车站北广场火车站北广场火车站北广场",
tips:'终点到了,欢迎您下次乘坐',
red:'爱在烟台,和你一起',
green:'有海的城市公交车都很浪漫',
yellow:'人文注意特色',
imgList:[
{img:require('@/assets/image/up_1.jpg')},
{img:require('@/assets/image/up_2.jpg')},
{img:require('@/assets/image/up_3.jpg')},
]
},
{
id:2,
name:"烟台日报社",
tips:'烟台日报社到了,欢迎您下次乘坐',
red:'爱在烟台,和你一起',
green:'有海的城市公交车都很浪漫',
yellow:'人文注意特色',
imgList:[
{img:require('@/assets/image/up_1.jpg')},
{img:require('@/assets/image/up_2.jpg')},
{img:require('@/assets/image/up_3.jpg')},
]
},
{
id:3,
name:"北极星钟表站",
tips:'终点到了,欢迎您下次乘坐',
red:'爱在烟台,和你一起',
green:'有海的城市公交车都很浪漫',
yellow:'人文注意特色',
imgList:[
{img:require('@/assets/image/up_1.jpg')},
{img:require('@/assets/image/up_2.jpg')},
{img:require('@/assets/image/up_3.jpg')},
]
},
{
id:4,
name:"大悦城",
tips:'终点到了,欢迎您下次乘坐',
red:'爱在烟台,和你一起',
green:'有海的城市公交车都很浪漫',
yellow:'人文注意特色',
imgList:[
{img:require('@/assets/image/up_1.jpg')},
{img:require('@/assets/image/up_2.jpg')},
{img:require('@/assets/image/up_3.jpg')},
]
},
],
stationData:[],
stationData1:[],
}
},
created() {
this.getList()
},
methods: {
showPopver(val){
this.active = val.id
},
hidePopver(){
this.active = ''
},
handleEdit(val){
console.log(val)
},
getList(){
this.stationData = [];
this.stationData1 = [];
let temp = [];
let ranm = [];
let zongArr = []
this.stationArr.forEach( (item, index)=> {
if (index % 2) {
temp.push(item)
} else {
ranm.push(item)
}
})
ranm.forEach( (item, index)=> {
zongArr.push([item,temp[index]])
})
this.stationData = zongArr[0];
this.stationData1 = zongArr[1]
},
},
}
</script>
<style lang="scss" scoped>
.station_box{
width: 100%;
height: 350px;
.box{
width: 100%;
height: 20px;
background: red;
display: flex;
align-items: center;
justify-content: space-around;
.top_box{
width: 15px;
height: 15px;
background: #fff;
border-radius: 50%;
}
}
.bottom{
width: 100%;
height: 200px;
display: flex;
align-items: center;
justify-content: space-around;
.bottom_box{
width: 35px;
height: 100%;
cursor: pointer;
.name_txt{
height: 100%;
align-items: center;
writing-mode: vertical-lr;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin: 0 auto;
}
}
.active{
background: gray;
color: #fff;
}
}
}
</style>

@ -0,0 +1,19 @@
<template>
<basic-container>
<div style="width:100%;height:780px;">
<iframe width="100%" height="100%" src="http://42.192.165.208:8005/" frameborder="0"></iframe>
</div>
</basic-container>
</template>
<script>
export default {
}
</script>
<style lang="scss" scoped>
::v-deep .top_box{
height: 14% !important;
}
</style>

@ -6,34 +6,36 @@ module.exports = {
chainWebpack: (config) => { chainWebpack: (config) => {
//忽略的打包文件 //忽略的打包文件
config.externals({ config.externals({
'vue': 'Vue', vue: "Vue",
'vue-router': 'VueRouter', "vue-router": "VueRouter",
'vuex': 'Vuex', vuex: "Vuex",
'axios': 'axios', axios: "axios",
'element-ui': 'ELEMENT', "element-ui": "ELEMENT",
}); });
const entry = config.entry('app'); const entry = config.entry("app");
entry.add('babel-polyfill').end(); entry.add("babel-polyfill").end();
entry.add('classlist-polyfill').end(); entry.add("classlist-polyfill").end();
entry.add('@/mock').end(); entry.add("@/mock").end();
}, },
css: { css: {
extract: { ignoreOrder: true } extract: { ignoreOrder: true },
}, },
//开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理 //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理
devServer: { devServer: {
port: 1888, port: 1888,
proxy: { proxy: {
'/api': { "/api": {
//本地服务接口地址 //本地服务接口地址
// target: 'http://localhost', // target: 'http://localhost',
//远程演示服务地址,可用于直接启动项目 //远程演示服务地址,可用于直接启动项目
target: 'https://saber.bladex.vip/api', // target: "http://192.168.1.106:8002",
target: "http://192.168.3.81:8002",
// target: 'https://saber.bladex.vip/api',
ws: true, ws: true,
pathRewrite: { pathRewrite: {
'^/api': '/' "^/api": "/",
} },
} },
} },
} },
}; };

Loading…
Cancel
Save