管理端,装修页面添加两种新轮播

master
mabo 2021-08-10 18:01:07 +08:00
parent b89fb8b2ba
commit d104baf426
4 changed files with 1511 additions and 292 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,14 @@
<template v-if="element.type == 'carousel'">
<model-carousel :data="element"></model-carousel>
</template>
<!-- 轮播图模块100%宽度无个人信息栏 -->
<template v-if="element.type == 'carousel1'">
<model-carousel1 class="mb_20" :data="element"></model-carousel1>
</template>
<!-- 轮播图模块包括个人信息两个轮播模块 -->
<template v-if="element.type == 'carousel2'">
<model-carousel2 class="mb_20" :data="element"></model-carousel2>
</template>
<!-- 热门广告 -->
<template v-if="element.type == 'hotAdvert'">
<div class="setup-content">
@ -223,6 +231,8 @@
<script>
import ModelCarousel from "./modelList/carousel.vue";
import ModelCarousel1 from './modelList/carousel1.vue';
import ModelCarousel2 from './modelList/carousel2.vue';
import FirstPageAdvert from "./modelList/firstPageAdvert.vue";
import NewGoodsSort from "./modelList/newGoodsSort.vue";
import Recommend from "./modelList/recommend.vue";
@ -235,6 +245,8 @@ export default {
props: ["element", "select", "index", "data"],
components: {
ModelCarousel,
ModelCarousel1,
ModelCarousel2,
Recommend,
NewGoodsSort,
FirstPageAdvert,

View File

@ -0,0 +1,188 @@
<template>
<div class="model-carousel1" :style="{background: bgColor}">
<div class="nav-body clearfix">
<!-- 侧边导航 -->
<div class="nav-side">导航栏占位区</div>
<div class="nav-content setup-content">
<!-- 轮播图 -->
<Carousel autoplay @on-change="autoChange">
<CarouselItem v-for="(item, index) in data.options.list" :key="index" >
<div style="overflow: hidden">
<img :src="item.img" width="1200" height="470" />
</div>
</CarouselItem>
</Carousel>
<div class="setup-box">
<div>
<Button size="small" @click.stop="handleSelectModel">编辑</Button>
</div>
</div>
</div>
</div>
<Modal
v-model="showModal"
title="快捷导航"
draggable
width="800"
:z-index="100"
mask-closable="false"
:on-ok="sureDecorate"
:on-cancel="cancelDecorate"
>
<div class="modal-tab-bar">
<Button type="primary" size="small" @click="handleAdd"></Button>
&nbsp;
<span class="ml_10">图片尺寸:{{ data.size }}</span>
<span style="color: red" class="fz_12 ml_10">点击缩略图替换图片点击颜色选择器选择背景色</span>
<table cellspacing="0">
<thead>
<tr>
<th width="250">所选图片</th>
<th width="250">链接地址</th>
<th width="250">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in data.options.list" :key="index">
<td>
<img
style="cursor: pointer"
:src="item.img"
@click="handleSelectImg(item)"
width="200"
height="100"
alt=""
/>
</td>
<td><Input v-model="item.url" disabled /></td>
<td>
<Button
type="info"
size="small"
@click="handleSelectLink(item)"
>选择链接</Button
>&nbsp;
<ColorPicker size="small" v-model="item.bgColor" />
&nbsp;
<Button
type="error"
ghost
size="small"
@click="handleDel(index)"
>删除</Button
>
</td>
</tr>
</tbody>
</table>
</div>
</Modal>
<!-- 选择商品链接 -->
<liliDialog
ref="liliDialog"
@selectedLink="selectedLink"
@selectedGoodsData="selectedGoodsData"
></liliDialog>
<!-- 选择图片 -->
<Modal width="1200px" v-model="picModelFlag" footer-hide>
<ossManage @callback="callbackSelected" ref="ossManage" />
</Modal>
</div>
</template>
<script>
import ossManage from "@/views/sys/oss-manage/ossManage";
export default {
name: "modelCarousel",
props: ["data"],
components: {
ossManage
},
data() {
return {
showModal: false, // modal
selected: null, //
picModelFlag: false, // modal
bgColor:'#fff' //
};
},
mounted () {
this.bgColor = this.data.options.list[0].bgColor
},
methods: {
handleSelectModel () {
//
this.showModal = true;
},
//
autoChange (oVal,val) {
this.bgColor = this.data.options.list[val].bgColor
},
//
handleAdd () {
this.data.options.list.push({ img: "", url: "", bgColor: '#fff' });
this.$forceUpdate();
},
// modal
handleSelectLink (item) {
this.$refs.liliDialog.open('link')
this.selected = item;
},
callbackSelected (item) { //
this.picModelFlag = false;
this.selected.img = item.url;
},
//
handleDel(index) {
this.data.options.list.splice(index, 1);
},
selectedLink(val) { //
this.selected.url = this.$options.filters.formatLinkType(val);
},
// modal
handleSelectImg(item) {
this.selected = item;
this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
}
},
};
</script>
<style scoped lang="scss">
@import "./setup-box.scss";
.model-carousel1 {
width: 1500px;
height: 470px;
margin-left: -150px;
background: #fff;
}
/*大的导航信息,包含导航,幻灯片等*/
.nav-body {
width: 1200px;
height: 470px;
margin: 0px auto;
}
.nav-side {
height: 100%;
width: 200px;
padding: 0px;
color: #fff;
background-color:rgba(0,0,0,.5);
line-height: 470px;
text-align: center;
position: absolute;
z-index: 1;
}
/*导航内容*/
.nav-content {
width: 1200px;
height: 470px;
overflow: hidden;
float: left;
position: relative;
}
</style>

View File

@ -0,0 +1,370 @@
<template>
<div class="model-carousel2">
<div class="nav-body clearfix">
<!-- 侧边导航 -->
<div class="nav-side">导航栏占位区</div>
<div class="nav-content setup-content">
<!-- 轮播图 -->
<Carousel autoplay>
<CarouselItem v-for="(item, index) in data.options.list" :key="index">
<div style="overflow: hidden">
<img :src="item.img" width="590" height="470" />
</div>
</CarouselItem>
</Carousel>
<div class="setup-box">
<div>
<Button size="small" @click.stop="handleSelectModel">编辑</Button>
</div>
</div>
</div>
<div class="nav-content1 setup-content">
<!-- 轮播图 -->
<Carousel autoplay :autoplay-speed="5000">
<CarouselItem v-for="(item, index) in data.options.listRight" :key="index">
<div class="mb_10">
<img :src="item[0].img" width="190" height="150" />
</div>
<div class="mb_10">
<img :src="item[1].img" width="190" height="150" />
</div>
<div>
<img :src="item[2].img" width="190" height="150" />
</div>
</CarouselItem>
</Carousel>
<div class="setup-box">
<div>
<Button size="small" @click.stop="handleSelectModel">编辑</Button>
</div>
</div>
</div>
<div class="nav-right">
<div class="person-msg">
<img :src="userInfo.face" v-if="userInfo.face" alt />
<Avatar icon="ios-person" class="mb_10" v-else size="80" />
<div>Hi{{ userInfo.nickName || "欢迎来到LiLi Shop" | secrecyMobile }}</div>
<div v-if="userInfo.id">
<Button type="error" shape="circle">会员中心</Button>
</div>
<div v-else>
<Button type="error" shape="circle">请登录</Button>
</div>
</div>
<div class="shop-msg">
<div>
<span>常见问题</span>
<ul class="article-list">
<li class="ellipsis" :alt="article.title" v-for="(article, index) in articleList" :key="index" @click="goArticle(article.id)">
{{article.title}}
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- 左侧轮播装修 -->
<Modal
v-model="showModal"
title="快捷导航"
draggable
width="800"
:z-index="100"
mask-closable="false"
>
<div class="modal-tab-bar">
<Button type="primary" size="small" @click="handleAdd"></Button>
&nbsp;
<span class="ml_10">图片尺寸:{{ data.size }}</span>
<span style="color: red" class="fz_12 ml_10">点击缩略图替换图片</span>
<table cellspacing="0">
<thead>
<tr>
<th width="250">所选图片</th>
<th width="250">链接地址</th>
<th width="250">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in data.options.list" :key="index">
<td>
<img
style="cursor: pointer"
:src="item.img"
@click="handleSelectImg(item)"
width="200"
height="100"
alt=""
/>
</td>
<td><Input v-model="item.url" disabled /></td>
<td>
<Button
type="info"
size="small"
@click="handleSelectLink(item)"
>选择链接</Button>&nbsp;
<Button
type="error"
ghost
size="small"
@click="handleDel(index)"
>删除</Button
>
</td>
</tr>
</tbody>
</table>
</div>
</Modal>
<!-- 右侧轮播装修 -->
<Modal
v-model="showModal"
title="右侧装修"
draggable
width="800"
:z-index="100"
mask-closable="false"
>
<div class="modal-tab-bar">
<Button type="primary" size="small" @click="handleAddGroup"></Button>
&nbsp;
<span class="ml_10">图片尺寸:{{ data.size }}</span>
<span style="color: red" class="fz_12 ml_10">点击缩略图替换图片</span>
<Tabs type="card" closable @on-tab-remove="handleTabRemove" class="mt_10">
<TabPane :label="'图片组'+(gIndex+1)" v-for="(group, gIndex) in data.options.listRight" :key="gIndex">
<table cellspacing="0">
<thead>
<tr>
<th width="250">所选图片</th>
<th width="250">链接地址</th>
<th width="250">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in group" :key="index">
<td>
<img
style="cursor: pointer"
:src="item.img"
@click="handleSelectImg(item)"
width="200"
height="100"
alt=""
/>
</td>
<td><Input v-model="item.url" disabled /></td>
<td>
<Button
type="info"
size="small"
@click="handleSelectLink(item)"
>选择链接</Button>
</td>
</tr>
</tbody>
</table>
</TabPane>
</Tabs>
</div>
</Modal>
<!-- 选择商品链接 -->
<liliDialog
ref="liliDialog"
@selectedLink="selectedLink"
@selectedGoodsData="selectedGoodsData"
></liliDialog>
<!-- 选择图片 -->
<Modal width="1200px" v-model="picModelFlag" footer-hide>
<ossManage @callback="callbackSelected" ref="ossManage" />
</Modal>
</div>
</template>
<script>
import ossManage from "@/views/sys/oss-manage/ossManage";
export default {
name: "modelCarousel",
props: ["data"],
components: {
ossManage
},
data() {
return {
showModal: false, // modal
selected: null, //
picModelFlag: false, // modal
userInfo:{},
articleList:[
{title:'促销计算规则'},
{title:'商家申请开店'},
{title:'商家账号注册'},
{title:'促销计算规则'}
]
};
},
methods: {
handleSelectModel () {
//
this.showModal = true;
},
//
handleAdd () {
this.data.options.list.push({ img: "", url: "" });
this.$forceUpdate();
},
//
handleAddGroup () {
this.data.options.listRight.push([
{img:'',url:''},
{img:'',url:''},
{img:'',url:''}
])
},
//
handleTabRemove (index) {
this.data.options.listRight.splice(index, 1)
},
//
handleSelectLink (item) {
this.$refs.liliDialog.open('link')
this.selected = item;
},
callbackSelected (item) { //
this.picModelFlag = false;
this.selected.img = item.url;
},
//
handleDel(index) {
this.data.options.list.splice(index, 1);
},
selectedLink(val) { //
console.log(val);
this.selected.url = this.$options.filters.formatLinkType(val);
console.log(this.selected.url);
},
// modal
handleSelectImg(item) {
this.selected = item;
this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
},
},
};
</script>
<style scoped lang="scss">
@import "./setup-box.scss";
.model-carousel2 {
width: 1200px;
height: 470px;
overflow: hidden;
}
.nav-item li {
float: left;
font-size: 16px;
font-weight: bold;
margin-left: 30px;
}
.nav-item a {
text-decoration: none;
color: #555555;
}
.nav-item a:hover {
color: $theme_color;
}
/*大的导航信息,包含导航,幻灯片等*/
.nav-body {
width: 1200px;
height: 470px;
margin: 0px auto;
}
.nav-side {
height: 100%;
width: 200px;
padding: 0px;
color: #fff;
float: left;
background-color: #6e6568;
line-height: 470px;
text-align: center;
}
/*导航内容*/
.nav-content,.nav-content1 {
width: 590px;
height: 470px;
overflow: hidden;
float: left;
position: relative;
margin-left: 10px;
}
.nav-content1{
width: 190px;
}
.nav-right {
float: left;
width: 190px;
margin-left: 10px;
.person-msg {
display: flex;
align-items: center;
flex-direction: column;
margin: 20px auto;
button {
height: 25px !important;
margin-top: 10px;
}
.ivu-btn-default {
color: $theme_color;
border-color: $theme_color;
}
img {
margin-bottom: 10px;
width: 80px;
height: 80px;
border-radius: 50%;
}
}
.shop-msg {
div {
width: 100%;
margin: 10px 27px;
span {
cursor: pointer;
text-align: center;
font-weight: bold;
margin-left: 5px;
}
span:nth-child(1) {
@include content_color($theme_color);
margin-left: 0;
}
span:nth-child(2) {
font-weight: normal;
}
span:nth-child(3):hover {
color: $theme_color;
}
}
ul {
li {
cursor: pointer;
margin: 5px 0;
color: #999395;
width: 150px;
font-size: 12px;
&:hover {
color: $theme_color;
}
}
}
}
}
</style>