zoukankan      html  css  js  c++  java
  • 十一、VueJs 填坑日记之使用Amaze ui调整列表和内容页面

    上一篇博文我们整合了Amaze ui,并且调整了一个头部header和底部footer文件,其实做起来也很简单,只要按照步骤来做,完全没有问题。今天我们来重新调整一下列表页面和内容页面,使我们做的后台管理系统更有范儿。

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

    我们今天就来把我们的项目完成到如上图的样式,首先我们来制作左侧的菜单,在/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,修改如下位置:


    调整列表页面
    打开/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整合后的影响,目前只能这样解决了。

    最终效果
    列表页面:

    内容页面:

  • 相关阅读:
    小型数据库的选择(轻量级数据库)(转)
    MSSOAP与WebService
    SOAP和WSDL的一些必要知识 (转)
    几个小型数据库的比较
    常用的嵌入式数据库的比较
    webservice Quiz(Wsdl &Soap)
    ASP.Net获取文件的路径
    SOAP=RPC+HTTP+XML
    记录几个IP查询接口
    COM+组件注册方法
  • 原文地址:https://www.cnblogs.com/xinhudong/p/7927629.html
Copyright © 2011-2022 走看看