<template> <div class="wrap"> <div class="banner"> <img width="100%" height="280" :src="info.columnBanner" alt=""> <p class="text">{{ info.columnName }}</p> </div> <div class="column-wrap"> <div class="article"> <div class="left"> <div class="forms"> <div class="item"> <span class="label">所属分类:</span> <el-select v-model="form.typeId"> <el-option v-for="item in classifications" :key="item.id" :label="item.classificationName" :value="item.id"> </el-option> </el-select> </div> <div class="item"> <span class="label">主题:</span> <el-select v-model="form.labelId"> <el-option v-for="item in labels" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </div> <div class="search"> <input type="text" placeholder="请输入搜索内容" v-model="form.title"> <i class="icon"> <img src="@/assets/images/search-white.png" alt=""> </i> </div> </div> <div class="contents"> <ul class="columns"> <li v-for="(item, i) in columns" :key="i" :class="{active: i === curColumn}" @click="toArticle(i)">{{ item.columnName }}</li> </ul> <div style="width: 1113px"> <ul class="articles"> <li v-for="(item, i) in articles" :key="i"> <div class="texts"> <p class="type">新闻类型</p> <h6>{{ item.title }}</h6> <span class="meta">{{ item.releaseTime }} | 建设进展</span> </div> <img class="pic" :src="item.titleImg" alt=""> </li> </ul> <div v-if="articles.length" class="pagination"> <el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next" :total="total"></el-pagination> </div> </div> </div> </div> <div class="right"> <el-tree class="column" ref="column" :data="columns" highlight-current :expand-on-click-node="false" :props="defaultProps" node-key="id" ></el-tree> <p class="l-title">热点内容</p> <ul class="list"> <li> <p class="text">喜报 | 深圳粒子研究院荣获全国科研…</p> <span class="date">2022-08-09</span> </li> <li> <p class="text">喜报 | 深圳粒子研究院荣获全国科研…</p> <span class="date">2022-08-09</span> </li> <li> <p class="text">喜报 | 深圳粒子研究院荣获全国科研…</p> <span class="date">2022-08-09</span> </li> </ul> <p class="l-title">最新资讯</p> <ul class="list"> <li v-for="(item, i) in news" :key="i"> <p class="text">{{ item.title }}</p> <span class="date">{{ item.createTime }}</span> </li> </ul> </div> </div> </div> </div> </template> <script> import Setting from '@/setting' import Util from '@/libs/util' export default { data() { return { id: this.$route.query.id, site: this.$store.state.content.site, columnId: '', info: { columnName: '', columnBanner: '' }, searchTimer: null, form: { title: '' }, classifications: [], labels: [], columns: [], curColumn: 0, page: 1, pageSize: 10, total: 0, articles: [], defaultProps: { value: 'id', label: 'columnName' }, news: [] } }, watch: { '$route'() { this.id = this.$route.query.id this.getInfo() }, 'form.title': function(val) { clearTimeout(this.searchTimer) this.searchTimer = setTimeout(() => { this.initData() }, 500) } }, mounted() { this.getInfo() this.getColumn() this.getNews() this.getArticle([this.id]) this.getClassification() this.getLabel() }, methods: { // 获取栏目详情 getInfo() { this.$post(`${this.api.findColumn}?id=${this.id}`).then(({ data }) => { this.info = data }).catch(res => {}) }, // 获取所属分类 getClassification() { this.$post(`${this.api.queryClassif}?siteId=${this.$route.query.siteId || this.site}`).then(({ data }) => { this.classifications = data }).catch(err => {}) }, // 获取标签 getLabel() { this.$post(`${this.api.queryLabel}?siteId=${this.$route.query.siteId || this.site}`).then(({ data }) => { this.labels = data }).catch(err => {}) }, // 资讯 getColumn() { this.$post(this.api.listWithTree, { siteId: this.$route.query.siteId || this.$store.state.content.site, columnName: '', templateId: '', typeId : '', isSort: 0 }).then(({ data }) => { this.columns = data }).catch(err => {}) }, // 最新资讯 getNews() { this.$post(this.api.newlyPublishedArticles, { pageNum: 1, pageSize: 5, siteId: this.$route.query.siteId || this.$store.state.content.site }).then(({ data }) => { this.news = data.records }).catch(res => {}) }, // 查询文章列表 toArticle(i) { this.curColumn = i this.initData() }, // 查询文章列表 getArticle(columnIds) { this.$post(this.api.queryArticle, { siteId: this.$route.query.siteId || this.$store.state.content.site, columnIds, pageNum: this.page, pageSize: this.pageSize, ...this.form }).then(({ data }) => { this.articles = data.records this.total = +data.total }).catch(res => {}) }, initData() { this.page = 1 this.getArticle([this.columns[this.curColumn].id]) }, currentChange(val) { this.page = val this.getData() }, } }; </script> <style lang="scss" scoped> .banner { position: relative; height: 280px; font-size: 48px; color: #fff; .text { position: absolute; top: 123px; left: 243px; } } .column-wrap { padding: 40px 0; background: #F9FAFA url(../../assets/images/column-bg.png) no-repeat; } .article { display: flex; justify-content: space-between; width: 1666px; margin: 0 auto; .left { width: 1295px; } .forms { display: flex; align-items: center; padding: 30px; background-color: #fff; .item { display: inline-flex; align-items: center; margin-right: 30px; } .label { font-size: 16px; color: #333; } /deep/.el-input__inner { width: 238px; height: 48px; line-height: 48px; border: 0; background: #F7F7F7; } .search { display: inline-flex; input { width: 443px; height: 48px; padding: 0 10px; font-size: 14px; color: #333; background: #F7F7F7; border: 0; border-top-left-radius: 6px; border-bottom-left-radius: 6px; &:focus { outline: none; } } } .icon { display: inline-flex; justify-content: center; align-items: center; width: 62px; height: 48px; background: #1583FF; border-radius: 0px 6px 6px 0px; cursor: pointer; } } .contents { display: flex; margin-top: 20px; } .columns { width: 174px; margin-right: 12px; li { display: flex; align-items: center; height: 48px; padding-left: 24px; margin-bottom: 1px; font-size: 16px; color: #666; background-color: #fff; border-right: 2px solid transparent; cursor: pointer; &:before { content: ''; width: 2px; height: 2px; margin-right: 5px; background-color: #666; border-radius: 50%; } &:hover { color: #0c84eb; } &.active { border-right-color: #083A93; } } } .articles { li { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; background-color: #fff; } .texts { max-width: 620px; padding-left: 30px; } .type { font-size: 18px; color: #333; } h6 { margin: 15px 0; font-size: 24px; color: #000; line-height: 38px; @include mul-ellipsis(2); } .meta { font-size: 16px; color: #666; } img { width: 417px; height: 244px; } } .right { width: 324px; } .column { width: 100%; margin-bottom: 25px; } /deep/.el-tree-node__content { height: 60px; background-color: #E5EDF8; border-bottom: 2px solid #fff; } /deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { color: #fff; background-color: #0f5698; } .list { margin-bottom: 20px; li { padding: 16px 0; border-bottom: 1px solid #D8D8D8; } .text { margin-bottom: 5px; font-size: 14px; cursor: pointer; &:hover { color: $main-color; } } .date { font-size: 12px; color: #999; } } } </style>