全栈开发学习(Node+Vue+Mongodb)(九)——移动端页面搭建(详情页部分)

1 文章详情页

<template>
  <div class="article">
   <div class="d-flex py-3 px-2 border-bottom">
        <div class="iconfont icon-back text-blue-light" @click="$router.push('/')"></div>
       //文章标题
      <strong class="flex-1 text-blue-light pl-2 fs-sm">{{model.title}}</strong>
       //文章日期
       <div class="text-grey fs-xs">2019-06-19</div>
   </div>
      //文章内容
   <div v-html="model.body" class="text-center px-3 body"></div>
      //相关资讯
   <div class="px-3 border-top py-3">
     <div class="d-flex ai-center">
       <i class="iconfont icon-moments"></i>
       <strong class="text-blue-light fs-md ml-1">相关资讯</strong>
     </div>
     <div class="pt-2">
       <router-link
       class="py-2 px-1"
        tag="div" 
        :to="`/articles/${item._id}`"  
        v-for="item in model.related" 
        :key="item._id">
        {{item.title}}
       </router-link>
     </div>
   </div>
  </div>
</template>

解决添加图片后宽度超出屏幕:添加max-width

.article{
  .body{
    img{
      max-width:100%;
      height: auto;
      }
    iframe{
        max-width:100%;
       height: auto;
      }
  }
}

2 英雄详情页

<template>
    <div class="hero" v-if="model">
     <div class="topbar bg-black py-2 px-3 d-flex ai-center text-white">
      <img src="../assets/images/logo.jpg" height="30" />
      <div class="px-2 flex-1 ">
        <span class="text-white">王者荣耀</span>
        <span class="ml-2">攻略站</span>
      </div>
      <router-link to="/" tag="div">更多英雄 &gt;</router-link>
    </div>
    <div class="top" :style="{'background-image': `url(${model.banner})`}">
      <div class="info text-white p-3 h-100 d-flex flex-column jc-end">
        <div class="fs-sm">{{model.title}}</div>
        <h2 class="my-2">{{model.name}}</h2>
        <div class="fs-sm">{{model.categories.map(v => v.name).join('/')}}</div>
        <div class="d-flex jc-between pt-2">
          <div class="scores d-flex ai-center" v-if="model.scores">
            <span>难度</span>
            <span class="badge bg-primary">{{model.scores.difficult}}</span>
            <span>技能</span>
            <span class="badge bg-blue-1">{{model.scores.skills}}</span>
            <span>攻击</span>
            <span class="badge bg-danger">{{model.scores.attack}}</span>
            <span>生存</span>
            <span class="badge bg-dark">{{model.scores.survive}}</span>
          </div>
          <router-link to="/" tag="span" class="text-grey fs-sm">皮肤: 2 &gt;</router-link>
        </div>
      </div>
    </div>
    <!-- end of top -->
    <div>
        <div class="px-3 bg-white">
            <div class="nav nav1 d-flex pt-3 pb-2 jc-around border-bottom fs-md" >
                <div class="nav-item active">
                    <div class="nav-link ">英雄初始</div>
                </div>
                <div class="nav-item">
                    <div class="nav-link">进阶攻略</div>
                </div>
            </div>
        </div>
        <swiper>
            <swiper-slide>
                <div>
                    <!-- button -->
                   <div class="p-3 bg-white border-bottom">
                       <div class="d-flex" >
                            <router-link tag="button" to="/" class="btn btn-lg flex-1">
                            <i class="iconfont icon-video" ></i>
                               英雄介绍视频
                            </router-link>
                            <router-link tag="button" to="/" class="btn btn-lg flex-1 ml-2">
                            <i class="iconfont icon-image" ></i>
                               一图识英雄
                            </router-link>
                       </div>
                        <!-- skills -->
                         <div class="skills bg-white mt-4">
                            <div class="d-flex jc-around">
                            <img 
                            class="icon"
                             @click="currentSkillIndex=i"
                            :class="{active:currentSkillIndex===i}"
                            :src="item.icon" alt="" 
                            v-for="(item,i) in model.skills" :key="item.name"
                           />
                            </div>
                            <div v-if="currentSkill">
                                <div class="d-flex pt-4 pb-2 ml-2">   
                                   <h3 class="m-0">{{currentSkill.name}}</h3>
                                   <span class="text-grey ml-4">
                                       (冷却值:{{currentSkill.delay}} 消耗:{{currentSkill.cost}})
                                   </span>
                                </div>
                                <p class="ml-2">{{currentSkill.description}}</p>
                                <div class="border-bottom"></div>
                                <p class="text-grey">小提示:{{currentSkill.tips}}</p>
                            </div>
                         </div>
                        <!-- end of skills -->
                   </div>
                    <!-- end of part1(skills) -->

                    <m-card plain icon="moments" title="出装推荐" class="hero-items">
                      <div class="fs-lg ">顺风出装</div> 
                      <div class="d-flex jc-around text-center mt-3">
                          <div 
                          v-for="item in model.items1" 
                          :key="item.name" >
                          <img :src="item.icon" class="icon ">
                          <div class="fs-sm">{{item.name}}</div>
                          </div>
                      </div>
                      <div class="border-bottom mt-3"></div>
                      <div class="fs-lg mt-3">逆风出装</div> 
                      <div class="d-flex jc-around text-center mt-3">
                          <div 
                          v-for="item in model.items2" 
                          :key="item.name" >
                          <img :src="item.icon" class="icon ">
                          <div class="fs-sm">{{item.name}}</div>
                          </div>
                      </div>
                    </m-card>

                    <m-card plain icon="moments" title="使用技巧">
                      <p class="m-0">{{model.usageTips}}</p>
                    </m-card>

                    <m-card plain icon="moments" title="对抗技巧">
                      <p class="m-0">{{model.battleTips}}</p>
                    </m-card>

                    <m-card plain icon="moments" title="团战思路">
                      <p class="m-0">{{model.teamTips}}</p>
                    </m-card>

                     <m-card plain icon="moments" title="英雄关系">
                      <div class="fs-md">最佳搭档</div>
                      <div 
                          v-for="item in model.partners" 
                          :key="item.name" >
                          <div class="d-flex pt-3">
                            <img :src="item.hero.avatar" class="icon " height="50">
                            <p class="fs-sm ml-3 m-0">{{item.description}}</p>
                          </div>
                           <div class="border-bottom mt-3"></div>
                          </div>
                    </m-card>

                    
                </div>
            </swiper-slide>
            <swiper-slide></swiper-slide>
        </swiper>

    </div>
    <!-- end of body -->
    </div>
</template>

3 其他细节问题

  • 时间格式转化:安装工具dayjs :npm i dayjs
<span class="text-grey ">{{news.createdAt | date}}</span>
filters:{
    date(val){
        return dayjs(val).format('MM/DD')  //转化为月-日的格式
    }
  }
  • 特殊意义的图标 如> <要用转义符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值