zoukankan      html  css  js  c++  java
  • Vue小作业--图书管理

      该项目主要是练习vue的基础语法,其中涉及到`v-model`数据双向绑定、事件绑定的修饰符(阻止默认事件发生)、过滤器。项目使用的是bootstrap的css样式进行布局,实现了图书的动态增加、动态查找的功能。

    最终效果:

    源码:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
            integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <script src="https://cdn.jsdelivr.net/npm/vue"></script>
        <title>图书管理系统</title>
    </head>
    
    <body>
        <div id="app">
            <div class="container">
                <h1>图书管理系统</h1>
                <hr>
                <form class="form-inline col-md-9">
                    <div class="form-group">
                        <label for="BookName">书名:</label>
                        <input type="text" class="form-control" id="BookName" placeholder="书名" v-model="add_book.name">
                    </div>
                    <div class="form-group">
                        <label for="BookAuthor">作者:</label>
                        <input type="text" class="form-control" id="BookAuthor" placeholder="作者" v-model="add_book.author">
                    </div>
                    <div class="form-group">
                        <label for="BookPrice">价格:</label>
                        <input type="text" class="form-control" id="BookPrice" placeholder="价格" v-model="add_book.price">
                    </div>
                    <button type="button" class="btn btn-default" @click.prevent="addBook">添加</button>
                </form>
                <form class="form-inline col-md-3">
                    <div class="form-group">
                        <label for="BookAuthor">书名:</label>
                        <input type="text" class="form-control " v-model="keyWord" placeholder="输入关键字">
                    </div>
                </form>
                <br>
                <hr>
                <table class="table table-striped">
                    <thead>
                        <tr>
                            <th>序号</th>
                            <th>书名</th>
                            <th>作者</th>
                            <th>价格</th>
                            <th>时间</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr v-for="book,index in book_ret" key="book.name">
                            <td>{{index + 1 }}</td>
                            <td>{{book.name}}</td>
                            <td>{{book.author}}</td>
                            <td>{{book.price}}</td>
                            <td>{{book.date|timeFormat}}</td>
                            <td><button class="btn btn-danger" @click="del">删除</button></td>
                        </tr>
                    </tbody>
    
                </table>
            </div>
        </div>
        <script>
            new Vue({
                el: "#app",
                data: {
                    books: [{
                            name: "红楼梦",
                            author: "曹雪芹",
                            price: "109",
                            date: new Date()
                        },
                        {
                            name: "西游记",
                            author: "吴承恩",
                            price: 179,
                            date: new Date()
                        }
                    ],
                    add_book: {
                        name: "",
                        author: "",
                        price: 0,
                        date: new Date()
                    },
                    keyWord: ""
                },
                computed: {
                    // 为了增加查询功能
                    book_ret() {
                        const that = this;
                        if (this.keyWord) {
                            // 遍历books对象,进行筛选
                            let newBooks = this.books.filter(function (item) {
                                // 如果item的name中包含keyWord则将其添加到newBooks对象中
                                if (item.name.indexOf(that.keyWord) >= 0) {
                                    return true
                                } else {
                                    return false
                                }
                            })
                            return newBooks
                        } else {
                            return this.books
                        }
                    }
                },
                methods: {
                    addBook() {
                        // 为了解决输入框改变新添加的数据也改变,此时需要将`this.add_book`给到另外一个对象
                        // JSON.stringify:将json格式的数据转换为字符串
                        // JSON.parse:将字符串转换为json格式的数据
                        let book = JSON.parse(JSON.stringify(this.add_book))
                        this.books.push(book)
                        // 清空输入框内容
                        this.add_book = {
                            name: "",
                            author: "",
                            price: 0,
                            date: new Date()
                        }
                    },
                    del(index) {
                        books.splice(index, 1)
                    }
                },
                filters: {
                    timeFormat: function (value) {
                        value = new Date(value)
                        let year = value.getFullYear()
                        let month = value.getMonth() + 1
                        let day = value.getDate()
                        let hour = value.getHours()
                        let minute = value.getMinutes()
                        return `${year} - ${month} - ${day}  ${hour}:${minute}`
                    }
                }
            })
        </script>
    </body>
    
    </html>
  • 相关阅读:
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业03--栈和队列
    DS博客作业02-线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06---结构体&文件
    C语言博客作业05---指针
    C语言博客作业04--数组
    DS博客作业08--课程总结
    DS博客作业07--查找
  • 原文地址:https://www.cnblogs.com/xshan/p/12357010.html
Copyright © 2011-2022 走看看