zoukankan      html  css  js  c++  java
  • vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页

    设置代理,避免出现跨域问题

    /*设置代理,避免出现跨域问题*/
    proxyTable: {
      '/api':{
        target: 'https://www.oschina.net/action/apiv2/',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },

    api/index.js  接口配置

    /**
     * 引入 异步请求API
     */
    import "whatwg-fetch"
    
    const host_addr='http://192.168.1.110:8081/'
    
    /**
     * 获取资讯列表
     * 解决跨域问题: 用 '/api' 代替 host_addr
     */
    export let getList = async (page, tag) => {
      let response = await fetch('/api' + `news_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
        method: 'GET',
        mode: 'cors'
      }).catch((error) => {
        console.log(error)
      })
      return await response.json().catch((error) => {
        console.log(error)
      })
    }
    
    /**
     * 获取资讯详情
     */
    export let getNewsDetail = async (id) => {
      let response = await fetch('/api' + `news_detail?id=${id}`, {
        method: 'GET',
        mode: 'cors'
      }).catch((error) => {
        console.log(error)
      })
      return await response.json().catch((error) => {
        console.log(error)
      })
    }
    
    /**
     * 获取博客列表
     */
    export let getBlogList = async (page, tag) => {
      let response = await fetch(host_addr + `blog_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
        method: 'GET',
        mode: 'cors'
      }).catch((error) => {
        console.log(error)
      })
      return await response.json().catch((error) => {
        console.log(error)
      })
    }
    
    /**
     * 获取问答列表
     */
    export let getQuestionList = async (page, tag) => {
      let response = await fetch(host_addr + `question_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
        method: 'GET',
        mode: 'cors'
      }).catch((error) => {
        console.log(error)
      })
      return await response.json().catch((error) => {
        console.log(error)
      })
    }
    
    /**
     * 获取活动列表
     */
    export let getEventList = async (page, tag) => {
      let response = await fetch(host_addr + `event_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
        method: 'GET',
        mode: 'cors'
      }).catch((error) => {
        console.log(error)
      })
      return await response.json().catch((error) => {
        console.log(error)
      })
    }
    

    1.资讯页

    NewsList.vue

    <!-- 资讯 -->
    <template>
      <div>
        <!-- 轮播图 -->
        <swiper :list="imgs" auto style="100%;height:120px;margin:0 auto;" dots-class="custom-bottom" dots-position="center"></swiper>
        <!-- 滚动列表 -->
        <div>
          <scroller lock-x scrollbar-y :height="height" :bounce=false :scrollbarY="false" ref="scroller">
            <div class="news-wrap-list">
              <cell v-for="x in Objlist" :title="x.title" :link="{path:'/newsDetail',query:{id:x.id,tag:'资讯'}}" :inline-desc="x.body" :key="x.id">
                <img class="ic_img" slot="icon" src="../../assets/img/ic_label_today.png">
                <div>
                  <span class="pubdate">{{x.pub_date}}</span>
                </div>
              </cell>
            </div>
          </scroller>
        </div>
      </div>
    </template>
    
    <script>
      // 引入 vux 内部组件
      import { Swiper, Scroller, Cell } from 'vux'
      // 引入 api接口文档
      import { getList } from '../../api/index.js'
    
      // 轮播图列表
      const imgList = [
        'http://file06.16sucai.com/2016/0222/17714c3b51079911760e5ef7fdb553f6.jpg',
        'http://pic.58pic.com/58pic/15/67/98/93C58PICjeM_1024.jpg',
        'http://file06.16sucai.com/2016/0315/1df566087c24a94cd9534bc9bc1871ff.jpg'
      ];
    
      // 轮播图图片地址列表
      const urlList = imgList.map((one, index) => ({
        url: 'javascript:',  //这里填写图片点击的链接
        img: one
      }));
    
      export default {
        name: 'NewsList',
        components:{
          Swiper,
          Scroller,
          Cell
        },
        data(){
          return {
            imgs:urlList,
            Objlist:[],
            ishow:false,
            pageIndex:1,
            catalog:0,
            height: ''
          }
        },
        created(){
          // 获取屏幕高度
          this.height = document.documentElement.clientHeight - 46 - 44 - 120 - 53 + 'px';
          console.log(this.height);
          // 请求列表数据
          this.getList();
        },
        methods:{
          // 异步请求
          async getList(){
            // 获取列表数据
            let data = await getList(this.pageIndex, this.catalog);
            console.log(data);
            // 获取资讯列表数据
            var news_list = data.obj_list;
            // 判断是否还有数据
            if(news_list.length > 0){
              this.ishow = true;
              for(var i=0;i<news_list.length;i++){
                var time = news_list[i].pub_date;
                // 修改日期显示格式
                var bngDate = new Date(time.replace(/-/g,"/"));
                var endDate = new Date();
                var minutes = (endDate.getTime() - bngDate.getTime())/60/1000;
    
                // 时间段 判断pub_date显示内容
                if(minutes >= 60){
                  minutes = minutes/60;
                  var dateTime = parseInt(minutes);
                  if(dateTime >= 48){
                    news_list[i].pub_date = "2天前";
                  }else if(dateTime >= 24){
                    news_list[i].pub_date = "昨天";
                  }else{
                    news_list[i].pub_date = dateTime + "小时以前";
                  }
                }else{
                  var minute = parseInt(minutes);
                  news_list[i].pub_date = minute + "分钟以前";
                }
    
                news_list[i].title = "  " + news_list[i].title;
                this.Objlist.push(news_list[i]);
              }
            }
            this.locked = false;
            this.loading = false;
          },
          load(uuid){
            setTimeout(() => {
              this.$broadcast('pulldown:reset', uuid);
            }, 1000);
          }
        }
      }
    </script>
    
    <style lang="less" scoped>
      .ic_img{
        position:absolute; top:10px; left: 5px;
        15px;
        height:15px;
      }
      .weui_cell_bd>p{
        font-size:15px;
      }
      .vux-label-desc{
        padding-right:15px;
      }
      .weui_cell_bd.weui_cell_primary{
        padding-left:5px;
      }
      .news-wrap-list {
        height: 2800px;
        overflow: hidden;
      }
      .pubdate{
        font-size:5px;
      }
    </style>

    2.资讯详情页

    NewsDetail.vue

    <!-- 资讯详情页 -->
    <template>
      <div>
        <tabbar class="tabbar">
          <div class="title">{{title}}</div>
          <tabbar-item class="search"></tabbar-item>
        </tabbar>
        <h3 class="htitle">{{result.title}}</h3>
        <scroller  lock-x scrollbar-y :height="height" :bounce=false :scrollbarY="false" ref="scroller">
          <div id="content" class="contentDiv"></div>
        </scroller>
      </div>
    </template>
    
    <script>
      import { Tabbar,TabbarItem,Scroller} from 'vux'
      import { getNewsDetail } from '../../api/index.js'
      // 引入 jquery
      import "jquery"
      var $ = require('jquery');
      window.$ = $;
    
      export default{
        name:'NewsDetail',
        data () {
          return {
            title: '',
            result:'',
            body: '',
            height: ''
          }
        },
        components:{
          Tabbar,
          TabbarItem,
          Scroller
        },
        created () {
          // 获取屏幕高度
          this.height = document.documentElement.clientHeight - 50 - 100 - 53 + 'px';
          console.log(this.$route.query);
          this.title = this.$route.query.tag;
          this.getDetail();
        },
        methods:{
          // 获取消息id,根据id到服务端请求详情
          async getDetail() {
            let data = await getNewsDetail(this.$route.query.id);
            console.log(data);
            if(data.code >= 0){
              this.result = data.obj_data;
              this.body = data.obj_data.body;
              $(".contentDiv").html(this.body);
              //获取div高度,根据该高度设定滑动区域,避免footer位置变化
              var contentHeight=$(".contentDiv").height() + 50;
              document.getElementById("content").style.height = contentHeight + "px";
              this.$nextTick(() => {
                this.$refs.scroller.reset();
              });
            }
          }
        }
      }
    </script>
    
    <style lang="less" scoped>
      .tabbar{
        background-color:#00CC66;
        height:50px;
        position:relative;
      }
      .search{
        position:absolute;right:5px;top:5px;z-index:999;
      }
      .title{
        text-align:center;
        margin:auto;
        color:white;
        line-height:50px;
        font-size:18px;
      }
      .htitle{
        text-align:center;
        margin:auto;
        color:black;
        line-height:50px;
        height: 100px;
      }
    </style>
    

    3.效果图

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/crazycode2/p/7862453.html
Copyright © 2011-2022 走看看