美文网首页vue相关知识前端杂货铺技术干货
Vue 内容管理系统的搭建(一)

Vue 内容管理系统的搭建(一)

作者: 拿着号码牌徘徊 | 来源:发表于2017-03-02 10:49 被阅读815次

    vue在最近一段时间火热起来,相比较于ng特别是ng1和rectjs, vue显得更加轻,它也迎合了前端模块化,组件化的发展趋势。当然每个人对vue的看法和观点是不经相同的。本坑由于公司项目接触学习了vuejs,用于网站前端的搭建。但是本坑总觉得没有深入学习vue,再加上本坑也想学学nodejs。所有有了想开发与网站相匹配的后台内容管理系统。这样就有机会能更加深入的学习js大法了。当然啦,只是先实现非常简单的一些功能,比如登入退出,上传更新,列表显示等。本坑以此留下学习的轨迹,方便以后再次查看,也想分享学习过程。文章有什么不足之处,欢迎留言赐教。分前端与后端,先从前端开始吧。
    搭建前端环境
    在搭建前端项目之前,当然必须把应该要的环境给安装好,比如nodejs。安装nodejs时npm也附带安装完成。
    前端代码托管处:
    <pre>
    https://github.com/githubziven/font
    </pre>
    本坑是按照官方文档出发,通过命令行完成搭建。
    传送门:
    <pre>
    https://cn.vuejs.org/v2/guide/installation.html#命令行工具
    </pre>
    <pre>

    全局安装 vue-cli

    $ npm install --global vue-cli

    创建一个基于 webpack 模板的新项目

    $ vue init webpack font

    安装依赖,走你

    $cd font
    $ npm install

    启动项目

    $ npm run dev
    </pre>
    在指令 npm install 如果报这样的错:npm ERR! registry error parsing json。这很有可能并不是你的错。这是由于连网时出现了问题,必须换个淘宝镜像才行。网上提供下面三种方式可以解决该问题,我按第二种方式,成功:
    (1)通过config命令
    打开命令行,输入
    <pre>
    npm config set registry https://registry.npm.taobao.org
    </pre>
    然后通过npm info underscore 来检查是否配置成功(如果上面配置正确这个命令会有字符串response)
    (2)命令行指定
    <pre>
    npm --registry https://registry.npm.taobao.org info underscore
    </pre>
    (3)编辑 ~/.npmrc 加入下面内容
    <pre>
    registry = https://registry.npm.taobao.org
    </pre>
    启动项目后,就能看到如下界面。

    编辑前端登入界面

    element ui是饿了么技术团队开发的,当然它也是近期开发出来特别针对vue2的适合pc端的ui。本坑之所以用它,除了特别针对vue2,它看上去也不错,里面提供的组件也非常适合管理系统使用。element ui官网传送门:
    <pre>
    http://element.eleme.io/#/zh-CN/component/installation
    </pre>
    npm安装
    <pre>
    npm i element-ui -S
    </pre>
    引入 Element
    你可以引入整个 Element,或是根据需要仅引入需要的部分组件。安装官方文档就行了。
    页面代码 如下所示:
    <pre>
    <template>
    <div class="html__login">
    <div class="form__login--center">
    <div class="form__title--center">
    ADMIN
    </div>
    <div class="form__content">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="ruleForm">
    <el-form-item label="登录名" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
    <el-input type="password" v-model="ruleForm.password" auto-complete="off"></el-input>
    </el-form-item>
    <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
    </el-form-item>
    </el-form>
    </div>
    </div>
    </div>
    </template>
    </pre>
    引入vue-resoures
    它用于发送ajax请求,resource服务是个非常便捷的工具,它对请求进行了少许的封装。
    同样必须要安装,再引入到main.js中
    指令
    <pre>
    npm install vue-resource
    </pre>
    main.js 代码如下:
    <pre>
    // The Vue build version to load with the import command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import VueResource from "vue-resource"
    import ElementUI from 'element-ui'
    import 'element-ui/lib/theme-default/index.css'
    import App from './App'
    import router from './router'
    Vue.use(VueResource)
    Vue.use(ElementUI)/* eslint-disable no-new */
    new Vue({
    el: '#app',
    router, template: '',
    components: { App }
    })
    </pre>
    最后构建的登录界面

    前端发送请求:
    <pre>
    submitForm(formName) {
    this.$refs[formName].validate((valid) => {
    if (valid) {
    this.createUser(formName);
    } else {
    console.log('error submit!!');
    return false;
    }
    });
    },
    resetForm(formName) {
    this.$refs[formName].resetFields();
    },
    createUser(formName) {
    var jsonData = {};
    var formObj = this.$refs[formName].$children;
    for (var i = formObj.length - 2; i >= 0; i--) {
    jsonData[formObj[i].prop] = formObj[i].fieldValue;
    }
    this.checkUser(jsonData);
    },
    checkUser(jsonData) {
    var res='';
    this.$http.post(this.apiUrl, jsonData)
    .then((response) => {
    res=response.body;
    console.log(response);
    if (res.code == 1) {
    this.$message({
    message: res.message,
    type: 'success'
    });
    } else {
    this.$message.error(res.message);
    }
    }).catch((response) => {
    // response.json()
    alert('登录失败!')
    })
    }
    }
    </pre>
    整个登录界面模块login.vue
    <pre>
    <template>
    <div class="html__login">
    <div class="form__login--center">
    <div class="form__title--center">
    ADMIN
    </div>
    <div class="form__content">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="ruleForm">
    <el-form-item label="登录名" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
    <el-input type="password" v-model="ruleForm.password" auto-complete="off"></el-input>
    </el-form-item>
    <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
    </el-form-item>
    </el-form>
    </div>
    </div>
    </div>
    </template>
    <script>
    export default {
    name: 'html__login',
    data() {
    var checkName = (rule, value, callback) => {
    if (!value) {
    return callback(new Error('登录名不能为空!'))
    } else {
    callback();
    }
    };
    var checkPass = (rule, value, callback) => {
    if (value === '') {
    callback(new Error('密码不能为空'));
    } else {
    callback();
    }
    };
    return {
    ruleForm: {
    name: '',
    password: '',
    age: ''
    },
    apiUrl: 'http://localhost:3000/login',
    rules: {
    name: [{
    validator: checkName,
    trigger: 'blur'
    }],
    password: [{
    validator: checkPass,
    trigger: 'blur'
    }]
    }
    }
    },
    methods: {
    submitForm(formName) {
    this.$refs[formName].validate((valid) => {
    if (valid) {
    this.createUser(formName);
    } else {
    console.log('error submit!!');
    return false;
    }
    });
    },
    resetForm(formName) {
    this.$refs[formName].resetFields();
    },
    createUser(formName) {
    var jsonData = {};
    var formObj = this.$refs[formName].$children;
    for (var i = formObj.length - 2; i >= 0; i--) {
    jsonData[formObj[i].prop] = formObj[i].fieldValue;
    }
    this.checkUser(jsonData);
    },
    checkUser(jsonData) {
    var res='';
    this.$http.post(this.apiUrl, jsonData)
    .then((response) => {
    res=response.body;
    console.log(response);
    if (res.code == 1) {
    this.$message({
    message: res.message,
    type: 'success'
    });
    } else {
    this.$message.error(res.message);
    }
    }).catch((response) => {
    // response.json()
    alert('登录失败!')
    })
    }

    }
    

    }
    </script>

    <style lang="scss" scoped>
    $backgroundColor:#C0C0C0;
    .html__login {
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: $backgroundColor;
    display: flex;
    justify-content: center;
    align-items: center;
    .form__login--center {
    position: relative;
    width: 500px;
    height: 250px;
    background-color: rgba(255, 255, 255, 0.5);
    border-radius: 10px;
    padding-top: 20px;
    text-align: center;
    margin: 0 auto;
    }
    .form__title--center {
    padding-bottom: 20px
    }
    .form__content {
    width: 85%
    }
    }

    /* Form-mixin */
    </style>
    </pre>
    好了,前端部分就是这样,发送的请求就给后台了。下篇我们就用express来响应这个登录请求

    相关文章

      网友评论

      • 游戏人间的爸爸:能不能,稍微改一下,把代码部分稍微用点格式,这样看有些别扭
        拿着号码牌徘徊:@游戏人间的爸爸 很早写的.没有太多时间整理,后面写的文章会规范点,多谢提醒
      • 丨ouo丨:打算毕设用vue做的 看了你的源码还是学到很多~谢谢!
        拿着号码牌徘徊:这些属于初级的,后面会开发一套移动端的组件,也会写成文档,希望你能帮忙提问题纠正。

      本文标题:Vue 内容管理系统的搭建(一)

      本文链接:https://www.haomeiwen.com/subject/wsyhgttx.html