zoukankan      html  css  js  c++  java
  • luffy前台组件的搭建

    luffy前台组件的搭建

    1 luffy头部组件Header

    1.1 路由跳转的两种方式

    # html中路由的跳转
    <router-link to="/">
        <img src="../assets/img/head-logo.svg" alt="">
    </router-link>
    
    #js中控制路由跳转
    this.$router.push('/');
    

    1.2 头部组件Vued代码

    # 在components
    # template部分
    <template>
        <div class="header">
            <div class="slogan">
                <p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活</p>
            </div>
            <div class="nav">
                <ul class="left-part">
                    <li class="logo">
                        <router-link to="/">
                            <img src="../assets/img/head-logo.svg" alt="">
                        </router-link>
                    </li>
                    <li class="ele">
                        <span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免费课</span>
                    </li>
                    <li class="ele">
                        <span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">实战课</span>
                    </li>
                    <li class="ele">
                        <span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">轻课</span>
                    </li>
                </ul>
    
                <div class="right-part">
                    <div>
                        <span>登录</span>
                        <span class="line">|</span>
                        <span>注册</span>
                    </div>
        		</div>
            </div>
        </div>
    
    </template>
    

    script部分

    <script>
        export default {
            name: "Header",
            data() {
                return {
                    url_path: sessionStorage.url_path || '/',
                }
            },
            methods: {
                goPage(url_path) {
                    // 已经是当前路由就没有必要重新跳转
                    if (this.url_path !== url_path) {
                        this.$router.push(url_path);
                    }
                    sessionStorage.url_path = url_path;
                },
            },
            created() {
                sessionStorage.url_path = this.$route.path;
                this.url_path = this.$route.path;
            }
        }
    </script>
    

    style部分

    <style scoped>
        .header {
            background-color: white;
            box-shadow: 0 0 5px 0 #aaa;
        }
    
        .header:after {
            content: "";
            display: block;
            clear: both;
        }
    
        .slogan {
            background-color: #eee;
            height: 40px;
        }
    
        .slogan p {
             1200px;
            margin: 0 auto;
            color: #aaa;
            font-size: 13px;
            line-height: 40px;
        }
    
        .nav {
            background-color: white;
            user-select: none;
             1200px;
            margin: 0 auto;
    
        }
    
        .nav ul {
            padding: 15px 0;
            float: left;
        }
    
        .nav ul:after {
            clear: both;
            content: '';
            display: block;
        }
    
        .nav ul li {
            float: left;
        }
    
        .logo {
            margin-right: 20px;
        }
    
        .ele {
            margin: 0 20px;
        }
    
        .ele span {
            display: block;
            font: 15px/36px '微软雅黑';
            border-bottom: 2px solid transparent;
            cursor: pointer;
        }
    
        .ele span:hover {
            border-bottom-color: orange;
        }
    
        .ele span.active {
            color: orange;
            border-bottom-color: orange;
        }
    
        .right-part {
            float: right;
        }
    
        .right-part .line {
            margin: 0 10px;
        }
    
        .right-part span {
            line-height: 68px;
            cursor: pointer;
        }
    </style>
    

    1.3 配置全局的settings和css

    • 在 assets下的js中加入settings.js
    export default {
        base_url: 'http://127.0.0.1:8000'
    } 
    
    • 在assets下的css中加入global.css
    /* 声明全局样式和项目的初始化样式 */
    body, h1, h2, h3, h4, h5, h6, p, table, tr, td, ul, li, a, form, input, select, option, textarea {
        margin: 0;
        padding: 0;
        font-size: 15px;
    }
    
    a {
        text-decoration: none;
        color: #333;
    }
    
    ul {
        list-style: none;
    }
    
    table {
        border-collapse: collapse; /* 合并边框 */
    }
    
    • 在main.js中配置
    //配置全局样式,@代表src的路径
    import '@/assets/css/global.css'
    
    // 配置全局自定义设置
    import settings from '@/assets/js/settings'
    Vue.prototype.$settings = settings;
    // 在所有需要与后台交互的组件中:this.$settings.base_url + '再拼接具体后台路由'
    

    1.4 前台配置

    # 安装相关框架
    cnpm install axios
    cnpm install vue-cookies
    cnpm install element-ui
    cnpm install jquery
    cnpm install bootstrap@3
    
    • 配置axios
    import axios from 'axios'
    Vue.prototype.$axios = axios;
    
    • 配置vue-cookies
    import cookies from 'vue-cookies'
    Vue.prototype.$cookies = cookies;
    
    • ElementUI的配置
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI);
    
    • bootstrap配置
    import 'bootstrap'
    import 'bootstrap/dist/css/bootstrap.min.css'
    
    • jquery的配置
    # 项目根路径创建一个 vue.config.js
    
    const webpack = require("webpack");
    
    module.exports = {
        configureWebpack: {
            plugins: [
                new webpack.ProvidePlugin({
                    $: "jquery",
                    jQuery: "jquery",
                    "window.jQuery": "jquery",
                    "window.$": "jquery",
                    Popper: ["popper.js", "default"]
                })
            ]
        }
    };
    

    luffy后台轮播图接口

    # BaseModel
    
    from django.db import models
    
    """
    首页轮播图,后期课程表,都会用这些字段
    """
    
    
    class BaseModel(models.Model):
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
        update_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')
        is_delete = models.BooleanField(default=False, verbose_name='是否删除')
        is_show = models.BooleanField(default=True, verbose_name='是否展示')
        display_order = models.IntegerField(verbose_name='展示顺序')
    
        class Meta:
            abstract = True  # 抽象表
    
    
    # Banner
    from django.db import models
    from utils.models import BaseModel
    
    
    # Create your models here.
    
    class Banner(BaseModel):
        name = models.CharField(max_length=32, verbose_name='图片名称')
        img = models.ImageField(upload_to='banner', verbose_name='轮播图', help_text='轮播图的尺寸必须是: 3840*800', null=True)
        link = models.CharField(max_length=32, verbose_name='跳转链接')
        info = models.TextField(verbose_name='图片简介')
    
        def __str__(self):
            return self.name
    
    # serializer
    from rest_framework import serializers
    from .models import Banner
    
    
    class BannerModelSerializer(serializers.ModelSerializer):
        class Meta:
            model = Banner
            fields = ['name', 'link', 'img']
    

    banner.vue

    <template>
    
        <div id="banner">
    
            <el-carousel height="400px">
                <el-carousel-item v-for="item in banner_list" :key="item.id">
                    <!--<img src="../assets/img/banner1.png" alt="">-->
                    <router-link :to="item.link">
                        <img :src="item.img" :alt="item.name">
                    </router-link>
    
                </el-carousel-item>
            </el-carousel>
        </div>
    
    </template>
    
    <script>
        export default {
            name: "Banner",
            // data:function(){},
            data() {
                return {
                    banner_list: []
                }
            },
            created() {
                //当banner组件一创建,就向后台发请求,拿回轮播图数据
                this.$axios.get(this.$settings.base_url + '/home/banner/').then(response => {
                    console.log(response.data);
                    this.banner_list = response.data
                }).catch(error => {
                    console.log(error)
                })
            },
    
        }
    </script>
    
    <style scoped>
        .el-carousel__item {
            height: 400px;
            min- 1200px;
        }
    
        .el-carousel__item img {
            height: 400px;
            /*margin-left: 20px;*/
            /*margin-left: calc(50% - 1920px / 2);*/
        }
    </style>
    
  • 相关阅读:
    Docker镜像与仓库(四)
    Docker网络与存储(三)
    Docker基本使用(一)
    虚拟化KVM之优化(三)
    修改CENTOS7的网卡ens33修改为eth0
    虚拟化KVM之安装(二)
    虚拟化KVM之概述(一)
    Python不同版本打包程序为.exe文件
    JSON
    同源策略(same-origin policy)及三种跨域方法
  • 原文地址:https://www.cnblogs.com/surpass123/p/13347731.html
Copyright © 2011-2022 走看看