欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

VueJs使用Amaze ui调整列表和内容页面

程序员文章站 2022-04-09 20:56:52
制作左侧菜单 一个后台管理系统,大致的样式都是分为南北东西的,而西(也就是左侧)一般是我们的菜单。如图: 我们今天就来把我们的项目完成到如上图的样式,首先我们来制作...

制作左侧菜单

一个后台管理系统,大致的样式都是分为南北东西的,而西(也就是左侧)一般是我们的菜单。如图:

VueJs使用Amaze ui调整列表和内容页面

我们今天就来把我们的项目完成到如上图的样式,首先我们来制作左侧的菜单,在/src/components/下新建menu.vue。代码如下:

<template>
<div class="admin-sidebar am-offcanvas" id="admin-offcanvas">
 <div class="am-offcanvas-bar admin-offcanvas-bar">
  <ul class="am-list admin-sidebar-list">
   <li class="admin-parent" v-for="menu in menus"><router-link :to="menu.href">{{menu.name}}</router-link>
    <ul class="am-list am-collapse admin-sidebar-sub am-in" id="collapse-nav">
      <li v-for="child in menu.childs" v-if="menu.childs"><router-link :to="child.href"><span class="am-icon-check"></span> {{child.name}}<span class="am-icon-star am-fr am-margin-right admin-icon-yellow"></span></router-link></li>
     </ul>
   </li>
  </ul>
 </div>
</div>
</template>
<script>
export default{
  name : "menu",
  data(){
    return {
      menus:[{
        name:"首页",
        href:"/",
        childs:[]
      },{
        name:"写信",
        href:"/",
        childs:[]
      },{
        name:"收件箱",
        href:"/inbox",
        childs:[]
      },{
        name:"发件箱",
        href:"/outbox",
        childs:[]
      },{
        name:"垃圾箱",
        href:"/",
        childs:[]
      },{
        name:"草稿箱",
        href:"/",
        childs:[]
      },{
        name:"其他文件夹",
        href:"/",
        childs:[{
          name:"已发送邮件",
          href:"/"
        },{
          name:"已删除邮件",
          href:"/"
        }]
      }]
    }
  }
}
</script>

现在我们的菜单就已经做好了,只需要将菜单应用到我们的项目中就可以了。打开/src/app.vue,修改如下位置:

VueJs使用Amaze ui调整列表和内容页面

调整列表页面

打开/src/pages/index.vue代码如下:

<template>
<div class="admin-content">
 <div class="admin-content-body">
  <div class="am-cf am-padding am-padding-bottom-0">
   <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">收件箱</strong> / <small>inbox</small></div>
  </div>
  <hr>
  <div class="am-g">
   <div class="am-u-sm-12 am-u-md-6">
    <div class="am-btn-toolbar">
     <div class="am-btn-group am-btn-group-xs">
      <button type="button" class="am-btn am-btn-default" @click="toadd"><span class="am-icon-plus"></span> 新增</button>
      <button type="button" class="am-btn am-btn-default" @click="save"><span class="am-icon-save"></span> 保存</button>
      <button type="button" class="am-btn am-btn-default" @click="verify"><span class="am-icon-archive"></span> 审核</button>
      <button type="button" class="am-btn am-btn-default" @click="remove"><span class="am-icon-trash-o"></span> 删除</button>
     </div>
    </div>
   </div>
   <div class="am-u-sm-12 am-u-md-3">
    <div class="am-input-group am-input-group-sm">
     <input type="text" class="am-form-field">
    <span class="am-input-group-btn">
     <button class="am-btn am-btn-default" type="button">搜索</button>
    </span>
    </div>
   </div>
  </div>
  <!-- admin-content-body end -->
  <div class="am-g" style="margin-top:5px;">
   <div class="am-u-sm-12">
    <form class="am-form">
     <table class="am-table am-table-striped am-table-hover table-main am-table-bordered am-table-radius" >
      <thead>
      <tr>
       <th class="table-check"><input type="checkbox" /></th><th class="table-id">id</th><th class="table-title">标题</th><th class="table-type">类别</th><th class="table-author am-hide-sm-only">作者</th><th class="table-date am-hide-sm-only">修改日期</th><th class="table-set">操作</th>
      </tr>
      </thead>
      <tbody>
      <tr v-for="(item,index) in tablelist">
       <td><input type="checkbox" /></td>
       <td>{{index + 1}}</td>
       <td><router-link :to="'/content/' + item.id">{{item.title}}</router-link></td>
       <td>{{item.tab}}</td>
       <td class="am-hide-sm-only">{{item.author.loginname}}</td>
       <td class="am-hide-sm-only">{{item.create_at}}</td>
       <td>
        <div class="am-btn-toolbar">
         <div class="am-btn-group am-btn-group-xs">
          <button class="am-btn am-btn-default am-btn-xs am-text-secondary"><span class="am-icon-pencil-square-o"></span> 编辑</button>
          <button class="am-btn am-btn-default am-btn-xs am-hide-sm-only"><span class="am-icon-copy"></span> 复制</button>
          <button class="am-btn am-btn-default am-btn-xs am-text-danger am-hide-sm-only"><span class="am-icon-trash-o"></span> 删除</button>
         </div>
        </div>
       </td>
      </tr>
      </tbody>
     </table>
     <div class="am-cf">
      共 15 条记录
      <div class="am-fr">
       <ul class="am-pagination">
        <li class="am-disabled"><a href="#">«</a></li>
        <li class="am-active"><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li><a href="#">»</a></li>
       </ul>
      </div>
     </div>
    </form>
   </div>
  </div>
  <!-- am-g end -->
 </div>
</div>
</template>
<script>
 export default{
  name : "inbox",
  data () {
    return {
     tablelist: []
    }
   },
   created () {
    this.initialization()
   },
   mounted () {
    $(".admin-content").css("height",(document.documentelement.clientheight-36-50)+"px");
   },
   methods: {
    initialization () {
     this.$api.get('topics', {page:1,limit:10}, r => {
      console.log(r);
      if(r.success){
       this.tablelist = r.data;
      }
     })
    },
    toadd(){
      alert("添加");
    },
    save(){
      alert("保存");
    },
    verify(){
      alert("审核");
    },
    remove(){
      alert("删除");
    }
   }
 }
</script>

注意:上面我们初始化查询第一页的数据,并规定每页显示10条,我们没有做分页功能的开发。是由于cnodejs.org的api并没有给我们返回分页的信息,将来如果是实际开发,那么接口正常情况是会返回分页信息的,我们到时候再具体的渲染就好了。

调整内容页面

打开/src/pages/content.vue,代码如下:

<template>
<div class="admin-content">
  <h2 v-text="article.title"></h2>
  <p>作者:{{article.author.loginname}}  发表于:{{article.create_at}}</p>
  <hr>
  <article v-html="article.content"></article>
  <h3>网友回复:</h3>
  <ul>
   <li v-for="i in article.replies">
    <p>评论者:{{i.author.loginname}}  评论于:{{i.create_at}}</p>
    <article v-html="i.content"></article>
   </li>
  </ul>
 </div>
</template>
<script>
 export default {
  name : "content",
  data () {
   return {
    id: this.$route.params.id,
    article: {
     author: {
      loginname:""
     }
    }
   }
  },
  created () {
   this.getdata();
  },
  mounted () {
   $(".admin-content").css("height",(document.documentelement.clientheight-36-50)+"px");
  },
  methods: {
   getdata () {
    this.$api.get('topic/' + this.id, null, r => {
     console.log(r.data);
     this.article = r.data;
    })
   }
  }
 }
</script>

到此为止我们就完成了列表页面和内容页面的整合了,说明一下在调整后的script中,多了个mounted 方法,这个是vuejs的勾子函数,我理解的意思表示元素已经创建,数据也渲染完成。我们来设置admin-content的高度就没有问题了,不过这个我不确定是我的写法有问题,还是amaze ui和vuejs整合后的影响,目前只能这样解决了。

最终效果

列表页面:

VueJs使用Amaze ui调整列表和内容页面

内容页面:

VueJs使用Amaze ui调整列表和内容页面

总结

以上所述是小编给大家介绍的vuejs使用amaze ui调整列表和内容页面,希望对大家有所帮助