梦学谷后台管理系统分析(1)

前言:后台管理系统是内容管理系统Content Manage System(简称CMS)的一个子集。 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场。对于内容管理,业界还没有一个统一的定义,不同的机构有不同的理解。
今天分析一个前后端分离的项目梦学谷管理系统,感兴趣的可以去看一下,请多多指点,大佬勿喷梦学谷管理系统

一、项目架构

使用vue": “^2.6.11"框架,用@vue/cli 4.5.9版本脚手架搭建项目,css样式结构"element-ui”:"^2.15.1" 渲染 element-ui地址,并搭配"node-sass": “^4.12.0”,“sass-loader”: “^8.0.2” CSS 预处理器,调用后台接口使用"axios": "^0.21.1"axios,“vue-router”: "^3.2.0"实现路由切换,后台数据使用mock.js模拟数据
二、项目技术栈
本项目所用到的主要技术栈有Vue-cli、vue-router、axios、sass、element-ui、mock.js,axios简单封装

三、项目所有模块

项目的模块主要模块有:登陆模块、首页模块、会员管理、供应商管理、商品管理、员工管理

四、各模块技术点

1、登陆模块
登陆模块账号和密码需要正则,使用element -ui 的表单验证自带正则验证规则(登陆模块没有固定的用户名密码,任何人都可以登陆)

  rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          region: [
            { required: true, message: '请选择活动区域', trigger: 'change' }
          ],
          date1: [
            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
          ],
          date2: [
            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
          ],
          type: [
            { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
          ],
          resource: [
            { required: true, message: '请选择活动资源', trigger: 'change' }
          ],
          desc: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }

2、首页模块
登陆成功后直接跳转到首页面,把首页面设置路由重定向,页面布局使用布局容器
在这里插入图片描述

在这里插入图片描述
左侧导航使用菜单NavMenu 导航菜单

 <!-- 左侧菜单栏 -->
        <el-aside :width="isCollapse ? '64px' : '200px'">
          <div class="menuToggle" @click="isCollapse = !isCollapse">|||</div>
          <el-menu
            :default-active="$route.path"
            class="el-menu-vertical-demo"
            background-color="#333744"
            text-color="#fff"
            active-text-color="#ffd04b"
            :collapse="isCollapse"
            v-for="item in menusList"
            :key="item.id"
            router
          >
            <el-submenu index="1">
              <template slot="title">
                <i :class="icons[item.id]"></i>
                <span>{{ item.authName }}</span>
              </template>
              <el-menu-item
                :index="'/' + el.path"
                v-for="el in item.children"
                :key="el.id"
              >
                <i :class="iconsLcon[el.id]"></i>
                <span slot="title">{{ el.authName }}</span>
              </el-menu-item>
            </el-submenu>
          </el-menu>
        </el-aside>

用户密码修改

在这里插入代码片
var validatePass = (rule, value, callback) => {
      if (value === "") {
        callback(new Error("请输入密码"));
      } else {
        if (this.ruleForm.password !== "") {
          this.$refs.ruleForm.validateField("checkPass");
        }
        callback();
      }
    };
    var validatePass2 = (rule, value, callback) => {
      if (value === "") {
        callback(new Error("请再次输入密码"));
      } else if (value !== this.ruleForm.newPassword) {
        callback(new Error("两次输入密码不一致!"));
      } else {
        callback();
      }
    };

3、会员管理
封装面包屑导航,在每个模块直接引入面包屑导航,如果代码较多方便后期维护,在每个路由上添加meta属性

封装单个面包屑组件

<template>
  <div class="bread">
    <el-card>
      <p>
        <span></span>
        <span v-for="(item, index) in breadList" :key="index">{{ item }}</span>
      </p></el-card
    >
  </div>
</template>
<script>
export default {
  data() {
    return {
      breadList: [],
    };
  },
  mounted() {
    this.breadList = this.$route.meta.bread;
  },
};

在路由上添加meta属性

 {
      path: "/member",
      component: () => import( /* webpackChunkName: "about" */ "../components/member.vue"),
      meta: {
        bread: ['会员管理']
      }
    },

在模块组件上直接引入面包屑组件

import Bread from "./bread";

使用mock.js模拟数据
在这里插入图片描述
对应模块内功能接口
在这里插入图片描述
模块内的出生日期使用element-ui DatePicker 日期选择器,使用数据双向绑定获取所选日期

<el-date-picker
            type="date"
            placeholder="选择日期"
            v-model="formInline.birthday"
            style="width: 100%"
          ></el-date-picker>

页面分页通过分页器和对所有数据的截取将数据分页显示

:data="tableData.slice((currentPage-1)*pagesize,currentPage*pagesize)" 
  <!-- 分页器 -->
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="queryInfo.pagenum"
      :page-sizes="[3, 6, 12, 18]"
      :page-size="queryInfo.pagesize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total"
    >
    </el-pagination>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值