最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue项目一:电商后台管理项目PC端(上)

    正文概述 掘金(微微猫)   2021-01-03   1320

    技术选型

    vue项目一:电商后台管理项目PC端(上)

    开始正式通过vue ui脚手架创建项目,通过后台api接口,
    返回的数据渲染页面
    

    项目基本业务概述

    vue项目一:电商后台管理项目PC端(上)

    我们今天主要做后台管理项目
    

    电商后台管理系统的功能划分

    该后台项目的6大版块
    用户登录 /login页面
    用户管理:用户列表
    权限管理:角色列表+权限列表
    商品管理:商品列表+分类管理+参数管理
    订单管理:订单列表
    数据统计:数据报表
    

    项目的开发模式以及技术选型

    vue项目一:电商后台管理项目PC端(上)

    采用的使用前后端分离开发的模式
    主要使用到的技术有
    Vue + VueRouter + Element-UI + Axios + Echarts
    

    前端项目初始化

    vue项目一:电商后台管理项目PC端(上)

    用vue ui脚手架创建项目
    看图创建
    

    创建码云账号并配置SSH公钥

    vue项目一:电商后台管理项目PC端(上)

    因为国内码云比较快,且是中文的,所以我们使用的是码云
    1:但是码云注册登录后,需要配置公钥才能,创建新的数据库,并连接到远程仓库
    2:根据公钥管理:里面是官方的教程,配合截图分析一起。完成公钥添加
    

    将本地项目托管到码云中

    vue项目一:电商后台管理项目PC端(上)

    新建远程仓库,将本地的项项目托管到远程仓库中,完成本地仓库提交远程仓库。
    1:先建仓库。在成cmd全局配置自己的name和email
    2:在项目中打开pwoershell窗口,连接远程仓库没可能需要输入登录密码,通过push完成本地仓库,推送远程仓库,刷新页面即可看到仓库刷新成功。
    

    安装MySQL

    vue项目一:电商后台管理项目PC端(上)

    导入本地的数据库到phpstudy中启动mysql、数据库服务。
    1:因为已经准备好了数据文件,直接导入到phpstudy中即可
    2:查看是否导入成功,在数据库目录中,有刚才命名的导入的数据库,存在即表示导入成功。
    

    配置API接口服务器并使用PostMan调试接口

    vue项目一:电商后台管理项目PC端(上)

    测试数据和接口能否正常返回数据
    因为在启动后台准备好的vue_api_server,启动是,无法启动成功,看图已经被我解决了。
    本地数据库导入phpstudy托管运行并启动mysql数据服务了,启动自己的web服务器即可,node app./js,即可托管postman测试登录接口,如果登录成功,则表示mysql数据库和服务器连接正常
    

    分析登录过程以及token的原理

    vue项目一:电商后台管理项目PC端(上)

    以后的后台请求,都需要携带token
    

    分析登录页面的布局结构并创建login子分支

    vue项目一:电商后台管理项目PC端(上)

    本地仓库干净后,创建并切换到开发分支login上,进行项目开发
    

    梳理项目结构

    vue项目一:电商后台管理项目PC端(上)

    因为脚手架创建的是欢迎页面,我们我把换头页面和不需要的组件都清理干净,干净的工作区域,开始新的开发。具体清理可查看图片
    

    渲染Login组件并实现路由重定向

    vue项目一:电商后台管理项目PC端(上)

    创建+挂载+并占位渲染login组件到App根组件中
    1:创建登录组件
    2:在router中挂载组件,在newRouter中配置路由请求地址,和使用的路由组件,并向外导出
    3:配置好组件,在App.vue中<router-view>用占位符,App根组件才渲染了路由组件
    4:页面效果,App根组件页面,渲染了login组件
    

    设置背景色并在屏幕中央绘制登录盒子

    vue项目一:电商后台管理项目PC端(上)

    安装less-loader,定义全局样式,和自己的页面基础布局。
    1-2-3:注意:因为 login组件的style lang=less, 但是有没有全局下载和配置使用less语法打包,所以打包编译的时候就报错了。需要在可视化插件中下载开发依赖插件。就能解决报错。
    4-5:因为App组件页面是没有高度的,是元素把页面高度撑开的,但是我们开发的是单页面程序,需要占满,公共的css样式代码,我们必须写到src/assets/global.css中,在main.js入口文件中导入,全局生效,后续的后台页面都有了高度。
    6: 开始写自己login页面的样式,高度100% ,和当前页面一样高,就撑满了页面。
    盒子的居中方式是相对于页面left 50%,然后用transform:translate(-50%, -50%),走自身的一半,实现盒子居中
    7:页面盒子在页面居中
    

    绘制默认头像

    vue项目一:电商后台管理项目PC端(上)

    头像用的是基础的css3样式设置,在自己的style中写
    

    绘制登录表单区域

    vue项目一:电商后台管理项目PC端(上)

    导入form组件,完成form组件的布局
    1-2-3:登录中用到了element-ui中的form组件,拷贝组件到自己的template中,但是一定要在element.js中解构并全局挂载该组件,才能使用
    4:对自己的表单进行修改,我们使用的是c3盒模型,按钮用的是flex布局, justify-content:flex-end,默认靠右底对齐。
    5:页面效果
    

    绘制带icon的input输入框

    vue项目一:电商后台管理项目PC端(上)

    在自己的项目中如何使用第三方图标
    因为有时候element-ui的图标不够用,只能下载第三方图标
    第三方图标的使用方式也是非常简单的
    1:-2-3-4:参考element-ui使用图标的方式,把我们下载好的图标,在main.js中引入, 这样就是全局引入了, 在哪个页面都能使用自己的图标了。导入文件后,在自己的页面使用图标,前面inconfot是固定的写法,后面的是具体的图标名称。
    5:页面效果,每个输入框前面就多了这个图标
    

    实现表单的数据绑定

    vue项目一:电商后台管理项目PC端(上)

    参考模仿实现表单数据的绑定
    1:参考了element-ui中表单的数据绑定方式后,在自己项目中模仿起来
    2::model接收表单对象,而表单对象通过v-model双向数据绑定,把输入框的值接收到, 这样就实现了接收表单对象中的内容了, :model接收表单对象, v-model双向数据绑定输入框中的内容
    3:页面效果, 因为v-model接收的是data中的属性,里面的值,会自动填充到输入框中
    

    实现表单数据验证

    vue项目一:电商后台管理项目PC端(上)

    参考模仿实现了表单验证规则
    1: 参考了element-ui中通过:rules=rules绑定了验证规则,里面输入框需要绑定自己父级item上,不是绑给输入框
    2::rules="表单验证对象", prpo="验证规则",一个验证规则中可以有多个属性验证对象
    3:元素中使用了验证规则,data中定义了验证规则。开始提交测试验证是否通过
    4:能触发验证规则,表示验证生效 
    

    实现表单的重置功能

    vue项目一:电商后台管理项目PC端(上)

    使用resetFields方法,重置还原表单中的数据
    如果内容输错,或者验证不通过,点击重置,一键还原输入框中的内容
    1-2-3-4:因为之前能看到ref能绑定form绑定对象$refs:loginFormRef, 所以我们就能通过点击事件,触发自己的事件处理函数,在里面调用this.$refs.loginFormRef这个对象,相当于就是表单对象,自然就能调用.resetFields( )将表单中的内容重置还原
    5:测试,点击能重置还原表单中的内容
    

    实现登录前表单数据的预验证

    vue项目一:电商后台管理项目PC端(上)

    点击登录按钮,触发验证对象,对表单的内容进行验证
    1-2: 触发点击登录事件,函数中同上调用this.$refs.loginFormRef实现表单验证功能,vaild返回的是布尔值,表示验证是否通过
    3:测试,能触发验证规则,将登录状态以布尔值的方式打印到控制台中
    

    配置axios发起登录请求

    vue项目一:电商后台管理项目PC端(上)

    验证通过后,调用axios发请求,拿到服务器返回的数据,并打印登录信息
    1: 全局挂载axios,根据接口设置根路径,并将axios挂载为vue原型上的$http方法,这样就能使用$http发起数据请求了。
    2:如果验证通过,调用$http发请求登录接口的数据,将表单中的内容给携带,判断数据的返回值是不是200.在控制台打印登录信息, 返回值result是一个promise,通过await能返回一个result对象,能将data:res重对象中解构并重命名为res,res就是data这个对象,
    

    配置Message全局弹框组件

    vue项目一:电商后台管理项目PC端(上)

    因为打印的登录信息用户是看不到的,使用需要用到message弹框,提示用户
    1-2-3:在自己的函数中this.$message.error弹出失败的信息,success弹出成功的信息。因为element.js中已经将Message挂载到app原型上了,所以在任何地方通过this.$message将信息通过弹框的方式提示出来
    4:测试能弹出登录的状态信息。
    

    完善登录之后的操作

    vue项目一:电商后台管理项目PC端(上)

    登录成功后,需要个用户颁发一个token令牌,才能以令牌方式进入后台页面,重定向home页面,生成token信息
    1:在数据中我们我们能看到返回的token属性,
    2:在点击登录成功后,重定向到了home后台主页,并在sessionStorage中保存会话信息,注意:token用于跨域,不跨域长期存储个人信息,推荐localStorage本地会话,临时的则存放在sessionStorage中
    3:完成登录重定向到home页面,创建一个home组件,并在router.js中国导入,并配置路由地址和组件。实现点击跳转到home页面,同时也生成了token令牌
    

    路由导航守卫控制页面访问权限

    vue项目一:电商后台管理项目PC端(上)

    普通没有token令牌是不允许通过url地址访问后台的,导航守卫防止他人访问后台,重定向到login登录页面。
    1-2:在roter.js中不能直接export default导出所有路由了,需要给路由定义beforeEach导航守卫,判断其他人要访问是login页允许放行,但是要获取到token令牌,如果用户没有令牌,表示不能访问后台,就返回到login页面。反之就是有令牌,则允许放行。
    3:测试token清空后,输入/home是会被cdx到/login页面。因为没有token。
    

    实现退出功能

    vue项目一:电商后台管理项目PC端(上)

    登录到home页面后,点击退出按钮,实现清空token重定向到login页面
    1-2-3:点击退出,事件函数中window.sessionStorage.clear()将临时会话中的tokenb清空,并路由重定向到/login页面, 通过this.$router.push('/login')重定向回登录页面
    4:测试,点击能退出,并清空了sessionStorage中的token信息,重定向回到login页面
    

    处理项目中的ESLint语法报错问题

    vue项目一:电商后台管理项目PC端(上)

    因为之前写代码中,eslint保存后对代码验证,报警了,解决语法验证的警告!
    1-2问题是vscode自带的格式化工具自动补上了;分号,和自动把""把' '给替换了,
    3:问题是eslint过于严格,希望每个函数之间 ( ),需要加上空格。
    根据图片:在.prettierrc中配置自动格式化,的参数配置,eslintrc.js中不允许空格即可解决问题
    

    修改element-ui组件的按需导入形式

    vue项目一:电商后台管理项目PC端(上)

    之前都是换行解构取组件的,现在可以并为一行
    将所有的组件,一行解构出来。简化了代码量
    

    将本地代码提交代码到码云中

    vue项目一:电商后台管理项目PC端(上)

    完成了登录功能的开发,验证合格后,开始本地提交仓库,再合并分支推送到远程仓库中,并切换分支,把分支也推送上去。
    

    实现基本的主页布局

    vue项目一:电商后台管理项目PC端(上)

    去element-ui官网拷贝布局容器修改为自己的页面布局
    因为已经登录到后台首页了,用element-ui的布局容器,快速实现页面的布局
    1:分析页面布局
    2:去element-ui官网拷贝布局容器到自己页面
    3:拷贝到自己的页面
    4:将container, Header,Aside,Main导入组件,注意都是大写开头,并且省略el,全部全部挂载app.use()
    5:刚初始化的布局容器是没有宽高的, 需要设置宽高,和背景色才能看得出来基础布局。完成了页面的容器布局
    

    美化主页的header区域

    vue项目一:电商后台管理项目PC端(上)

    实现头部header的布局
    1:头部用flex布局,justify-content:space-between各自平分,align-items:center内容上下居中,用css3实现页面的布局
    2:页面效果
    

    实现导航菜单的基本结构

    vue项目一:电商后台管理项目PC端(上)

    去element-ui挂网拷贝导航栏,实现左侧菜单导航的布局:
    1:去element-ui官网拷贝导航菜单
    2:拷贝到自己页面中,只留下一个导航栏,
    3:将到导航组件从element-ui中解构出来, menu导航栏,sunmenu导航栏内层父容器,menu-item二级菜单导航,注意都是大写开头,且省去了el
    4:页面效果
    

    通过axios拦截器添加token验证

    vue项目一:电商后台管理项目PC端(上)

    因为多了welcome后台页面后,其他页面都需要token,我们在发请求前把登录成功后的token,设置在headers.Authoriaztion中,这样后台发生路由切换都会生成token,这样每个路由请求,都会携带token认证成功完成页面切换。
    1:因为后续的api需要授权,需要在Authorization中提供token令牌
    2:流程示意图
    3:在main.js中设置token信息,axios.interceptors.request.use设置请求头, 通过打印能看到headers中是没有Authoriation这个属性, 我们就给config.headers.Authorization,获取到window.sessionStorage.getItem('token'),把token获取到设置给headersAuthoriztion属性中, 然后return出去,这样每次发请求都会触发,并在Headers中设置Authoriaztion字段,虽然目前是null,因为后续还有使用它点击其他菜单栏所以默认是空的, 目前只是登录到了后台,产生了Authoriaztion这个属性而已,后续的tab切换就会产生token。经过点击证实了我的说法是正确的
    4:成功在登录后,在请求头部中设置了Authoriaztion字段,默认是空,只有点击切换了tab页面,就会生成token,就不在是null了
    

    获取左侧菜单数据

    vue项目一:电商后台管理项目PC端(上)

    在create钩子函数中,触发函数,把拿到的数据,弹出到data中,并打印查看
    1:查看接口要求
    2:create在vue实例,创建成功,就会被立即调用,一般是用于获取数据。
    3:data中的menulist:[]是一个空数组,在created钩子函数被调用的时候,会立即出发函数,拿到左侧导航的数据。 
    3.1:在async异步函数中发起请求,获取到menus的数据,将获取到的数据结解构成data,并重命名为res。如果获取数据失败,弹出错误提示信息,获取成功,就把数据赋值给data中的menulist,实现数据填充。注意此时只是获取,并打印数据而已。
    

    通过双层for循环渲染左侧菜单

    vue项目一:电商后台管理项目PC端(上)

    把拿到的导航数据,根据打印的数据,渲染自己的导航栏菜单
    1:data中的数据,放在submenu导航容器中遍历,必须:key=item.id提高性能,而:index也是item.id, 完成1级菜单的数据渲染
    2:开始遍历.itme.children,同上属性绑定item.children.id。实现二级菜单的数据渲染。注意前面的图标还没有更改。
    

    为选中项设置字体颜色并添加分类图标

    vue项目一:电商后台管理项目PC端(上)

    设置导航菜单栏中的图标,2级图标是element-ui中自带的, 1级就麻烦些,是根据id渲染的
    1:在data中设置iconObj对象中设置:id是根据数据中的id,而后面的incon图标类名,则是自己下载图标的类名。通过class="inconsObj[item.id]"根据id顺序,把对象中对应的属性渲染到菜单栏中。
    2:二级图标简单,不讲解
    3:页面效果,完成了1-2级的数据渲染
    

    每次只能打开一个菜单项并解决边框问题

    vue项目一:电商后台管理项目PC端(上)

    解决所有导航栏都能展开,完成只能同时展开1个菜单栏
    1:unique-opened保持一个菜单的展开,全写形式是:  :uniique-opened="true",我们使用了简写
    2:还有一个问题二级带单的右边框,根据调试面板,找到对应的元素,将边框取消掉即可。完成了菜单展开和2级菜单的右边框问题
    3:页面效果
    

    实现侧边栏的折叠与展开效果

    vue项目一:电商后台管理项目PC端(上)

    实现侧边菜单栏的展开与折叠效果
    1:在上面添加1个元素,设置元素的基本外形,完成折叠按钮的样式设置,注意不能给宽度,并通过letter-spacing设置|||竖线的间隔宽度。
    2::collapse-transition="false"关闭折叠动画, :collapse="isCollapse"里面的属性是data中的是否折叠的默认值,因为点击折叠事件中能把该值取反,进行折叠切换。
    3:折叠前的效果。
    4:折叠后的效果【默认不开启折叠的,需要true开启折叠效果】
    4.1:   :width="isCollapse ? '64' : '240'",如果为true是折叠,宽度就是64,反之就是展开,宽度就是240. 很妙!
    

    实现首页路由的重定向效果

    vue项目一:电商后台管理项目PC端(上)

    登录后台默认展示welcome页面,
    1:创建welcome页面,只写template也是可以的
    2:在router.js中导入组件,并设置为/home的子组件, 并设置重定向到/welcome这个组件。实现了路由重定向
    3:注意因为他想在home页面展示,虽然创建好了组件,并配置好了路由,需要在home中用<router-view>展示路由占位符。在该home页面挂载展示该组件
    4:页面效果,登录成功后,自动跳转到/welcome页面
    

    实现侧边栏路由链接的改造

    vue项目一:电商后台管理项目PC端(上)

    左侧的导航菜单点击是能跳转到不同的页面的,完成点击跳转不同路由页面
    1:首先在组件中开启router路由功能,就能点击跳转了
    2::index="'/ + subItem.path'",完成路由地址的拼接, 注意:index就是动态的地址,数据中的path前面少了/,所以需要添加上,就能实现路由跳转了
    3;页面效果,点击左侧菜单,就能跳转到对应的路由页面
    

    通过路由的形式展示用户列表组件

    vue项目一:电商后台管理项目PC端(上)

    点击用户列表展示,用户列表组件。完成列表组件的创建和渲染
    1:创建组件
    2:在main.js中配置为/home的一个子组件,配置好路由地址和组件,路由地址不能乱写,需要和点击跳转的路由地址一致
    3:页面效果--点击跳转到--用户列表页面
    

    在sessionStorage中保存左侧菜单的激活状态

    vue项目一:电商后台管理项目PC端(上)

    点击让当前的二级菜单高亮,刷新页面高亮依旧存在,因为将状态保存到了sessionStorage中了
    1:点击触发自己的事件函数,把点击的请求地址携带过去'/' + subItem.path, 
    2:事件函数中拿到请求地址,在token中设置一个activePath属性,值就是传进来的请求地址,
    3:data数据中的activePath默认是空,只有在钩子函数中通过window.sessionStorage.getItem('activePath')把这个请求路由给获取到,在赋值给this.activePath,实现了数据的填充。然而:default-active='activePath',当前激活高亮的就是这个属性
    4:页面效果,点击二级菜单高亮,刷新页面高亮仍然存在,因为转态已经存储在了sessionStorage中
    5:实现过程;点击事件中把数据中的path请求地址给事件函数,函数中调用window把数据存储在sessionStorage中,而created钩子函数,拿到activePath把属性赋值给数据中的activePath,此时:default-active="activePath"绑定了这个属性,实现了点击刷新仍然高亮。
    
    

    绘制用户列表组件的基础布局结构

    vue项目一:电商后台管理项目PC端(上)

    添加面包屑组件+卡片组件+输入框组件+按钮,完成一1-2行的样式布局
    1:拷贝组件
    2:修改组件的全局样式
    3:导入这5个组件
    4-5:上面是面包屑组件,下面是卡片组件,卡片中的slot数可以删除的,经过测试的。:gutter每个元素之间的空白缝隙, :sapn元素占多宽。完成页面的布局
    6:页面效果:完成了面包屑和卡片中的第一行样式布局
    

    获取用户列表数据

    vue项目一:电商后台管理项目PC端(上)

    发起请求拿到用户列表数据,把用户列表数据打印查看
    1:接口文档,查看必须携带的参数
    2:参数单独定义在data中的queryInfo中,里面包含了:查询参数+当前页码+每页显示几条数据
    2.1:在created钩子函数中调用getUserLsit拿到数据,
    2.2:封装异步函数,发请求拿数据,把queryInfo写在params参数中,传递给后台。将错误信息弹出,成功就把获取到的users用户列表的数据赋值给data中的userList属性,实现数据的填充。和total数据条数。
    3:把数据打印查看,成功获取到用户列表的数据了。
    

    使用el-table组件渲染基本的用户列表

    vue项目一:电商后台管理项目PC端(上)

    完成table表格的页面布局和数据填充
    1:设置全局样式
    2:拷贝表格组件,:data="userlist"把数据拿到, border添加边框, stripe添加隔行变色,
    2.1:注意label就是表头文字信息, prpo就是表格中每项的数据信息,有点神奇
    3:导入table+tableColum组件
    4:页面效果:完成了表格布局,和数据渲染
    

    为表格添加索引列

    vue项目一:电商后台管理项目PC端(上)

    完成表格头一行的index编号设置,其实就是添加一行el-table-column, type=index,就实现了编号设置。
    

    自定义状态列的显示效果

    vue项目一:电商后台管理项目PC端(上)

    将状态值用switch开关代替,开关灯是可以通过点击修改的,
    1:拷贝开关
    2:在table-column中插入tempalte插槽, slot-scope=scope就能拿到这行的数据,在页面{{scope.row}}就是这行的数据,switch双向数据绑定scope.row.mg_state根数据的转态绑定,就能根据状态渲染开关,也能点击开关,完成数据修改。刷新页面状态依旧保存。
    3:导入switch开关组件
    4:-5:页面效果,完成点击开关,完成数据状态修改
    

    通过作用域插槽渲染操作列

    vue项目一:电商后台管理项目PC端(上)

    渲染最有一中的3个按钮,给最后一个按钮添加鼠标经过提示
    1:拷贝样式
    2:导图提示组件
    3:设置width=180设置表格的宽度,最后一个button按钮,需要被toopTip元素包裹,才能鼠标经过显示提示信息,:enterable=false鼠标经过就当没经过。完成了3个按钮的渲染
    4:页面效果
    

    实现分页效果

    vue项目一:电商后台管理项目PC端(上)

    实现分页组件的渲染,和点击实现分页的各个功能
    1:拷贝分页组件
    2:导入组件
    3:设置分页的全局样式
    4: 元素中设置分页的具体信息:
    @size-change=下拉框每页显示几条数据
    @current-change=点击页码值,实现分页功能
    :current-page=当前点击的是第几页
    :page-size=[1,2,5,10] 下拉框中的每页显示数据条数
    :page-size="queryInfo.pagesize"每页显示的条数
    layout=布局,看图,里面对应每个组件
    :total总条数
    5:当前默认是第一页,且每页显示2条数据。
    5.1:handleSizeChange下拉框选择时间:把下拉框中的newSize数据条数,按数据条数渲染数据
    5.2:handleCurrentChange,当前点击的页码,注意每次做分页修改时,修改后,度需要调用getUserList重新刷新数据。实现分页数据的变化
    

    修改用户状态

    vue项目一:电商后台管理项目PC端(上)

    用开关调用后台服务器实现数据状态修改
    1:switch中有一个change事件,能拿到开关的状态
    2:@change事件中能触发的事件函数中,把这行数据携带,打印查看mg_state的状态是能看到,调用接口发起数据修改,把数据中的userinfo.mg_state给服务器,实现点击开关完成修改功能,并弹出提示框,提示完成修改功能。
    3-4:注意接口中需要使用模板语法把数据拼接携带过后台 `user/${userinfo.id}/state/${userinfo.mg_state}`。 这样就把该行数据的ID和状态个携带到后台了
    5:点击开关,完成按钮的状态修改。
    

    实现搜索功能

    vue项目一:电商后台管理项目PC端(上)

    在输入框中搜索关键字用户名,就能把该用户的数据渲染出来,点击x就能把数据还原回来
    1:v-model=queryInfo.query绑定查询参数, clearable出现关闭按钮, @clear=getUserList,点击数据库中的清空按钮会重新调用getUserInfo函数,重新拿到数渲染页面
    2:点击搜索按钮,因为双向数据绑定了v-model,在函数中是默认把queryInfo给当做params参数传递的,所以点击搜索也能根据输入框中的内容,渲染页面该用户的数据。
    

    渲染添加用户的对话框

    vue项目一:电商后台管理项目PC端(上)

    用户列表完成,开始完成用户列表的具体各个功能,点击添加用户弹出diglog对话框
    1:拷贝到自己项目中,并导入
    2:点击取消和确定都让 @click="addDialogVisible=false", 关闭对话框。因为data中的addDialogVisible:false, 默认值是假,是不会弹出对话框的,只有在点击添加用户的时候,@click=:addDialogVisible=true:,弹出对话框
    3-4-5:页面效果-点击弹出对话框, 点击其他地方就会关闭对话框。
    

    渲染添加用户的表单

    vue项目一:电商后台管理项目PC端(上)

    给弹出框,添加表单控件,和表单验证规则,对表单中的内容实施验证
    1:拷贝表单验证到自己项目中
    2:给表单form添加, :model="addForm" 监听data中的addForm对象, 里面是多个属性值,每个属性值都是表单控件v-modle="addForm.username",双向数据绑定了该属性, 输入框中的内容就会到达addForm中。 :rules="addForRules"绑定表单验证规则,每个验证规则都是一个数组,每个都是required:true, message:'请输入', trigger:blur, 第二组验证规则就是min, max, message, trigger。 有2岑哪个验证规则。
    3-4:如上所述, addForm中的属性已经是双向数据绑定了,data中有验证规则, 每个验证规则都是一个数组, 每个数组中都是一个对象。对象有2层验证规则
    5:页面效果, 添加了表单验证规则, 每个验证规则都能正确被触发。
    

    自定义邮箱和手机号的校验规则

    vue项目一:电商后台管理项目PC端(上)

    邮箱和手机号码需要自定义验证规则,完成他们的验证
    1:查看element-ui中的自定义验证规则
    2:因为表单控件已经v-model绑好了数据, 我们只管定义验证规则即可,每个验证规则都是用变量接收一个es6函数, 参数1, 验证规则, 参数2:输入框中的值, 参数3:回调函数。 回调函数中定义了一个正则表达式, 用来验证表单中内容, 通过判断if(regEmail.test(value))对输入框中内容实施验证, 将验证结果通过cb返回出去, 如果验证不通过,则把错误提示也返回出去
    3.1: 调用刚才自定义好的验证规则:validator:checkEmail, validator能触发刚才的验证规则, 第一个验证规则不动, 只修改验证规则2.
    4:页面效果·能正确触发邮箱和手机号码的验证
    

    实现添加表单的重置操作

    vue项目一:电商后台管理项目PC端(上)

    关闭添加用户对护框的时候,再次打开将输入框中的内容给清空掉
    1:点击事件中通过this.$refs,addFormRef.ressetFields将输入框中的内容给清空掉
    1.1:因为表单中ref="addFormref"绑定了引用对象, 该方式相当于拿到了表单对象,调用他得resetFields将内容给清空了
    2-3:关闭对话框,再次打开对话框, 输入框中的内容就已经被清空了。完成清空功能
    

    实现添加用户前的表单预校验

    vue项目一:电商后台管理项目PC端(上)

    完成验证和表单清空功能,开始完成完成点击确定时,触发表单的预验证功能
    1:触发点击事件,事件中this.$refs.adFormRef.validate调用它就能实现表单的预验证,valid就是验证的结果。如果通过就会返回true。
    2:通过验证,点击确定就会打印true
    

    调用API接口完成添加用户的操作

    vue项目一:电商后台管理项目PC端(上)

    完成表单预验证,开始调用接口完成真正的添加用户功能, 和渲染用户
    1:接口文档
    2:因为addForm就是表单中的内容,所以接口中所需要携带的数据, 都可以被它替代掉,调用接口携带数据, 如果返回的状态=201弹出失败的信息,反之就是成功的信息, 在关闭对话框,调用getUserList重新获取数据,再次渲染页面
    3:完成了预验证,点击添加新用户的功能, 在重新渲染了页面。
    

    展示修改用户的对话框

    vue项目一:电商后台管理项目PC端(上)

    点击修改,添加对话框,弹出对话框
    1:拷贝组件
    2:点击确定和取消都关闭对话框, 只有点击修改的时候吗,是打开对话框的,因为editDialogVisible:false, 点击了修改才是true。:visible.sync其功能和@cllick都差不多,只是名称不一样而已
    3:点击修改,弹出了基础外形的对话框
    

    根据Id查询对应的用户信息

    vue项目一:电商后台管理项目PC端(上)

    调用接口拿到修改用户的信息,将拿到的用户信息,储存在editForm中, 
    1:调用接口把参数id个携带, 完成拿到用户数据, 如果拿取失败,就弹出对话框提示用户失败, 正确就把数据赋值给editForm, 实现了用户数据的获取,只是获取数据而已,还未添加控件,把数据渲染到控件中
    

    渲染修改用户的表单

    vue项目一:电商后台管理项目PC端(上)

    完成了修改用户数据的获取, 添加表单控件,添加自定义的邮箱和手机号验证
    1:添加表单验证控件
    2:绑定表单对象:model=editForm, :rules=editFormRules绑定验证对象,ref=editFromRef绑定表单引用对象, 表单控件中v-model="editForm.username"绑定表单中的内容
    2.1:data中创建editForm表单对象, 在data中定义2个自定义验证对象, 注意对象2中的validator:checkEnmail使用的是全局data中的自定义验证规则,实施验证的,每个表单中的v-model都是和数据响应中的返回值的属性名必须一致的
    3:点击修改,弹出修改框,对输入框中的内容实施了验证。
    

    实现修改用户表单的重置操作

    vue项目一:电商后台管理项目PC端(上)

    关闭对话框,再次打开对话框,将对话框中的内容给重置回来
    1:关闭事件中,this.$refs.editFormRef.resetFields调用了引用对象,实现了数据重置功能
    2-3:关闭对话框以后, 再次打开, 输入框中的内容就被重置了
    

    完成提交修改之前的表单预验证

    vue项目一:电商后台管理项目PC端(上)

    完成了重置功能,开始完成表单点击确定对内容实施预验证功能
    1: @close关闭事件中, 触发了事件函数,this.$refs.editFormRef.vaildate调用了预验证功能, 把valid打印到控制台中, 它对表单的验证结果会打印一个布尔值
    2:单击完成修改,验证通过, 点击确定,在控制台中打印了布尔值
    

    提交表单完成用户信息的修改

    vue项目一:电商后台管理项目PC端(上)

    完成了表单预验证功能, 开始调用接口完成修改用户功能
    1: 预验证通过后, 发起axiso请求,用额的是put修改方式,参数1携带id, 参数2是一个对象, {email+moblie}把邮箱和手机号码发送给后台, 完成修改用户功能,如果修改不成功, 就弹出错误信息, 如果修改成功,就关闭对话框,调用getuserList刷新页面数据, 并弹出提示,修改用户信息成功。
    

    弹框询问用户是否确认删除数据

    vue项目一:电商后台管理项目PC端(上)

    点击删除,弹出删除的对话框,将删除的确定和取消打印、到控制台中
    1:拷贝组件
    2:组件的使用方法
    3:将组件先解构出来, 再调用MessageBox.confirm方法,把这个方法赋值给Vue.prototype.$confirm,把它挂载为vue原型上的一个方法,这样js中就能用this.
    $confirm这个表单对象了。 
    4:点击删除,弹出删除对话框, 事件函数中携带了id,通过this.$confirm弹出对话框,confirm就是提示信息, 对象2就是2个按钮, confirmButtonText:确定按钮, cancelButtonText取消按钮, type:warning就是图标。 完成弹出框的文字布局后,如果这个表单的返回值不是是confirm取消,表示不要删除,弹出已取消删除, 反之就是要真正的删除,将删除信息打印到控制台中
    5-6-7:点击删除,取消就弹出提示,如果是确定,就只是打印文字信息,还未后续操作。。。
    
    

    调用API完成删除用户的操作

    vue项目一:电商后台管理项目PC端(上)

    完成了删除框的布局, 调用接口完成真正的删除功能,重新渲染页面
    1:接口文档,需要携带id
    2:点击弹出删除对话框,确定删除,就调用接口,把id携带,如果删除失败,则弹出删除失败的提示信息, 如果删除成功,就弹出提示茶树成功, 调用getUserList重新渲染页面
    

    创建user子分支并把代码推送到码云仓库中

    vue项目一:电商后台管理项目PC端(上)

    因为代码全部误写到了master主分支上,别怕创建并切换分支,代码会自动过去,
    1:创建切换分支,代码就全部过到分支上了
    2:完成本地仓库中的代码更新
    3:创建远程分支
    4:合并分支
    5:完成master远程分支的更新
    

    创建rights子分支并推送到码云

    vue项目一:电商后台管理项目PC端(上)

    创建并切换到开发分支上,并把分支推送到远程分支上,完成远程分支的创建。
    

    通过路由展示权限列表组件

    vue项目一:电商后台管理项目PC端(上)

    完了了用户列表页面的功能, 开始完成权限管理的权限列表页面组件的创建,点击跳转到权限列表页面
    1:创建组件
    2:在router.js中配置路由,导入权限列表组件,将它配置为home页面的一个子路由
    3:页面效果--点击跳转到权限列表页面
    

    绘制面包屑导航和卡片视图

    vue项目一:电商后台管理项目PC端(上)

    完成点击跳转到权限列表页面后,完成面包屑和卡片组件的基础外形渲染
    1:因为这2个组件之前就已经结构过了, 所以直接拷贝过来,修改就可了。
    2:页面效果,完成了页面效果的面包屑和卡片组件的布局渲染
    

    调用API获取权限列表的数据

    vue项目一:电商后台管理项目PC端(上)

    完成面包屑和卡片的渲染,调用接口打印权限列表的数据
    1:接口文档,请求地址后面必须携带数据类型,rights/:type  ===> get('rights/list'), 
    2:在data中创建空数组用来接收数据, create钩子函数中调用函数,获取数据。 methods中封装函数,异步函数中,发起数据请求,把请求类型规定好, 如果获取权限列表数据失败,就弹出失败信息, 成功就把数据赋值给data中的这个数组, 通过打印,数据已经获取成功
    

    渲染权限列表UI结构

    vue项目一:电商后台管理项目PC端(上)

    完成权限列表的数据获取打印, 创建表格,把数据渲染到表格中
    1:拷贝组件
    2:导入组件
    3:table组件:data="rightsList"绑定空数组数据,添加边框和隔行变色,添加序号type=index,
    3.1: label是表头名称, prop="数据响应中的属性",就会渲染到表格中的每个具体信息,
    3.2: 权限等级中是通过标签展示等级的,所以在column中嵌套了插槽template slot-scope=scope接收了这行表单的数据,通过if判断level的值,按值渲染元素的等级,完成等级按钮的渲染
    4:prop中的信息必须和接口中的一致
    5:页面效果--完成了表格数据的渲染,和等级按需渲染
    

    介绍 用户-角色-权限 三者之间的关系

    vue项目一:电商后台管理项目PC端(上)

    完成了权限列表页面的布局和渲染,开始分析角色:
    每个角色拥有的权限是不一样的,所以角色是根据用户的不同,权限也不同
    

    通过路由展示角色列表组件

    vue项目一:电商后台管理项目PC端(上)

    16:完成了权限类表的功能,切换到角色列表页面的开发,点击切换到角色列表组件
    1:创建组件
    2:导入组件,将组件注册为/home路由下的一个子组件
    3:点击角色列表,切换到角色列表页面
    

    绘制基本布局结构并获取列表数据

    vue项目一:电商后台管理项目PC端(上)

    17:完成页面组件创建,分析角色列表布局,和添加面包屑和卡片组件
    1:分析接口文档,最后一层数据,是不包含children,那就是第3层角色的数据。
    2:在data中创建空数组,在create中调用函数,函数封装中发起请求,啥都不携带,如果数据请求失败,就弹出提示, 正确就把获取到的数据赋值给这个空数组。打印数据查看已经获取到了
    3-4:请求到的角色列表的数据, 并且完成了面包屑和卡片视图的渲染
    

    渲染角色列表数据

    vue项目一:电商后台管理项目PC端(上)

    18:完成了面包屑和卡片视图的渲染,以及拿到了角色列表的数据,添加表格并渲染数据
    1:添加带图标的组件
    2:添加table表格组件,每一行都是一个table-column,expand就是展开行, index就是序号,label就是表头名称, prop就是绑定的数据,必须和返回的数据中的一致。width是指固定宽度,sloy-scope=scope,接收了表格的数据行,设置3个按钮的图标颜色大小。
    3:页面效果,完成了卡片中表格的数据渲染
    

    说明角色列表需要完成的功能模块

    vue项目一:电商后台管理项目PC端(上)

    19:完成了表格数据创建和渲染,其中的3个功能和用户列表的功能一致,自己去独立完成,本节只做如下2个功能
    1:功能1:渲染折叠菜单中的数据和样式
    2 :功能2:点击分配权限,完成权限对话框的渲染,和权限分配的功能
    

    分析角色下权限渲染的实现思路

    vue项目一:电商后台管理项目PC端(上)

    20:先做功能1,渲染折叠菜单中的数据渲染,先拿到row数据,打印数据做分析
    1:在展开列中template添加插槽,将scope.row数据打印查看,
    2:分析数据第一个id就是这行数据的角色名称, 第二行才是1级数据,依次递减。最后一个数据是没有children属性的,数据分析完毕
    3:看图分析,折叠中的每行,对应的就是红框中的数据
    

    通过第一层for循环渲染一级权限

    vue项目一:电商后台管理项目PC端(上)

    21:完成分析了数据对应关系, 开始渲染第一层数据
    1:row中遍历数据,把数据填充在tag中,实现了第一层数据的渲染,一行总共24个栅格系统,:sapn=5,第一行占5份宽
    2:页面效果,渲染了第一层数据
    

    美化一级权限的UI结构

    vue项目一:电商后台管理项目PC端(上)

    22:完成了第一级数据的渲染,对样式进行美化,
    1:添加了上下边框,:class=['bbbottom', i1 === 0 ? 'bdtop' : ' ' ],第一个底边框是直接加的,而第二个需要按需加载,如果是数组红中的第一个,就不需加载顶边框,i1相当于index=1, 注意:calss需要动态绑定,所有类名需要写在[ ]数组中,用逗号隔开,支持3元表达式按需添加
    2: 给第一个菜单添加小图标,小三角
    3:页面效果,添加了小图标,和加了上下边框。
    

    通过第二层for循环渲染二级权限

    vue项目一:电商后台管理项目PC端(上)

    23:完成了菜单1的样式设置,开始渲染2级菜单的数据
    1:row外行,里面嵌套了一个row内行,他只能遍历item1.children, 再把遍历的数据展示在子的tag标签中, 它里面的边框也是按照三元表达式按需渲染的
    2:完成了页面的数据渲染,并添加了小三角箭头
    3:数据分析,共3层数据,也总共3个children属性
    

    通过第三层for循环渲染三级权限

    vue项目一:电商后台管理项目PC端(上)

    24:渲染了2级数据,开始渲染3级数据,
    1:内层row中已经是item2.children第二次循环了,需要在 tag标签中开启第三层标签循环,把渲染的数据通填充到自己的标签中在页面展示
    2:完成了3级数据的渲染
    

    美化角色下权限的UI结构

    vue项目一:电商后台管理项目PC端(上)

    25:完成了3级的数据渲染,现在解决页面最小宽度布局混乱问题,和元素垂直居中问题
    1:在global.css的body中中添加了min-width:1366px,完美解决了页面过小布局乱的问题
    2:使用flex布局,align-items:center, 将元素上下垂直居中显示。将这个元素,放在:class=[数组中],实现上下垂直居中
    3:页面效果: 完成了上下垂直居中和页面布局过小乱的问题
    

    点击删除权限按钮弹出确认提示框

    vue项目一:电商后台管理项目PC端(上)

    26:完成了3级折叠数据的渲染,开始完成点击小菜单,将这个菜单从数据中删除
    1:因为之前在element.js中在全局挂载了$confirm方法,所以能在js中直接使用this.$confirm弹出删除的对话框,如果用户取消了删除,弹出取消删除的提示框,如果是删除了,就在控制台中打印删除。 因为还未调用接口完成数据删除功能。注意@close能触发关闭事件,
    2:页面效果,点击取消会提示,但是点击删除只会打印。
    

    完成删除角色下指定权限的功能

    vue项目一:电商后台管理项目PC端(上)

    完成了点击删除,能触发打印删除结果,调用接口正式完成数据删除
    1:接口文档, :roleId相当于是哪行数据,  :rightId 是哪行数据的儿子,它也有自己的id, 结合在一起,参数1就是爸爸的id, 参数2就是要删除的儿子的ID。根据爸爸删除儿子
    2:给每个图标添加关闭图标,并调用关闭事件函数, 把要删除的(父行, 子id)传给后台,在请求地址中替换` `模板语法,把参数2传递。完成删除功能。---注意不能直接调用this.getRolesList,这样删除一条数据后,会自动刷新页面并关闭折叠。需要将role.children接收删除返回的数据,这样就能实现删除一个数据,并且不关闭对话框。
    3:完成删除一个菜单的功能,并且不会关闭折叠。实现局部删除该行的子元素。
    

    弹出分配权限对话框并请求权限数据

    vue项目一:电商后台管理项目PC端(上)

    28:完成了用户列表的渲染和折叠菜单的渲染和删除,开始完成点击弹出分配权限对话框和打印权限列表的数据
    1:引入组件
    2:接口文档,需要接受一个tree树形控件,
    3:在页面已经添加了分配权限的对话框,点击分配权限弹出对话框,发请求,如果数据失败就提示失败的信息,将获取到的所有的权限数据,全部添加空数组中,待会添加树形控件,将获取到的数据展示在树形控件中,现在只是弹出对话框,通过接口拿到数据
    4-5:点击弹出了对话框, 和在控制台中打印了数据
    

    初步配置并使用el-tree树形控件

    vue项目一:电商后台管理项目PC端(上)

    29:完成了点击弹出对话框和获取到权限列表数据之后,添加树形组件,把数据渲染到组件上
    1:添加组件+引入组件
    2:组件添加到页面中, :data=rightslist这个空数组,里面就是所有的权限数据。 :props指定数据绑定展示的字段,label就是展示的名称,children就是自己的每个数据中的子对象。
    3:点击弹出对话框后,在树形控件中展示了数据。
    

    优化树形控件的展示效果

    vue项目一:电商后台管理项目PC端(上)

    30:完成了弹出对话框中树形控件的数据渲染,开始完成树形控件的样式美化
    1:在组件中添加 show-checkbox,展示复选框, node-key="id",每个节点绑定唯一标识符号。注意id就是返回数据中的id,唯一标识符号。
    2:完成了数据前面添加了复选框,和添加了唯一标识符号
    

    分析已有权限默认勾选的实现思路

    vue项目一:电商后台管理项目PC端(上)

    31:完成了点击弹出属性组件和组件的优化,开始测试让每个节点中的数据被选勾选
    1::default-checked-keys="defKeys",它能显示每个勾选的节点,能接受数组中的一个数组,数组中的id就是每个3级数据的id,有几个,页面就会被勾选几个
    2:页面效果,通过:default-checkbox测试了显示的勾选的复选框
    

    加载当前角色已有的权限

    vue项目一:电商后台管理项目PC端(上)

    32:测试了复选框勾选的渲染条件,开始渲染已经勾选的角色。将勾选的全部渲染并勾选
    1:点击分配权的时候触发事件函数,把接口获得到的数据用rightslist储存起来,用一个递归函数把所有勾选的数据给挑出来,再把函数的调用,放在点击弹出对话框的时候,就调用递归函数,把勾选好的数据展示到页面
    1.1:递归函数的讲解:参数讲解:封装递归函数,ndoe接收的是scope.row该对象的一组数据,arr就是data中的defKeys空数组,用来存储找到勾选的数据的。
    1.2:递归过程的讲解:通过调用函数,拿到对象,和空数组,调用封装函数,外层的forEach去遍历该对象中的children属性,并且是函数自己调用自己形成了循环,把循环找到的并不包含children的对象全部push到defKeys空数组中,此时数组中的数据都是3级对象,node这是每一123级的数据,它都有。而arr就是defKeys中有每一个被勾选的每一个数据【我知道遍历到的每一个数据,但是被勾选就有点疑惑了】
    2:通过递归拿到了被勾选的id,并添加到了defKeys中,只要一点击就会把树形控件中被勾选的数据都渲染到页面中
    

    在关闭对话框时重置defKeys数组

    vue项目一:电商后台管理项目PC端(上)

    33:完成了树形控件中的数据渲染,但是每次每次点击不同的分配权限,它会累加到其他分配权限中【就是被人被全了,点击其他的,也被全选了】,需要每次点击分配权限每次关闭对话框时,将数组给清空掉,就不会实现污染问题了
    1:给弹出对话框绑定点击关闭事件
    2:关闭事件函数中,将数据给置空,就实现了独立互不污染的添加分配权限了
    

    调用API完成分配权限的功能

    vue项目一:电商后台管理项目PC端(上)

    34:解决了每次完成权限分配就清空数组,一面数据累加,污染到其他角色的分配权限,调用接口完成真正的角色权限分配的修改
    1:数据接口
    2:属性控件的方法
    3:在点击弹出对话框的时候,把该一级角色的id给获取到
    4:接收1级数据的ID
    5-6:点击为权限分配事件,函数中调用this.$refs.treeRef.getCheckedKeys获取全选的状态的按钮, this.$refs.treeRef,.getHalfCheckedKeys,获取到所有半选状态的菜单,他们2个会组合个一个数组,返回给keys,返回成一个数组, 调用接口发起权限数据修改,把1级菜单的ID和他里面的全选和半选的按钮,发给后台,如果分配失败弹出失败的信息, 如果成功就弹出成功的提示信息。关闭对话框,重新渲染页面数据,完成了分配权限的修改,并刷新了页面
    7:页面效果点击弹出对划线,点击修改权限,点击确定完成了权限的修改,在关闭对话框,刷新页面数据。实现了分配的功能
    

    渲染分配角色的对话框并请求角色列表数据

    vue项目一:电商后台管理项目PC端(上)

    35:返回去完成用户管理--用户列表-的分配角色功能,点击弹出对话框,将用户和角色信息渲染到页面中
    1:接口文档
    2:点击弹出对话框,
    3:把用户的name和role渲染到页面中
    4:点击弹出对话框,发起数据请求,把获取到的数据储存在rolesList中,供之后的下拉框提供数据渲染
    5:页面效果,点击弹出对话框,完成了点击弹出对话框和框内的数据渲染
    

    渲染角色列表的select下拉菜单

    vue项目一:电商后台管理项目PC端(上)

    36:完成了点击分配角色对话框展示和所有角色数据的获取,开始完成下拉框的数据渲染
    1:拷贝组件
    2:导入组件
    3:v-model="selectedRoleId"双向数据绑定,他能拿到已选中用户的id, :label=item.roleName,它能获取到选中的数据,就是下拉框中的每一项数据,:value=item.id就是每一项的id,展示了下拉框中的数据。
    4:完成了点击下拉框中的数据,就渲染到下拉框中
    

    完成分配角色的功能

    vue项目一:电商后台管理项目PC端(上)

    37:完成了分类角色的下拉菜单的数据渲染,开始调用接口完成分配用户角色的功能
    1:接口文档
    2:点击确定触发saveRoleInfo函数,如果没有选中任何数据,点击确定,则弹出提示信息,提示必须有所选择。 有选就调用接口发起数据请求,把该对象的id携带到后台,实现了数据的修改。
    2.1:关闭的时候,将选中的下拉框,和选中的这个用户给清空。不但实现了修改,重新打开并实现了数据的重置功能,就是一个新的表单供用户修改,完成了分配角色的修改功能
    

    提交本地代码到Git仓库并推送到码云

    vue项目一:电商后台管理项目PC端(上)

    38:刚才是中途返回去完成了其他页面的分配角色,返回角色列表页面的仓库更新,因为已经完成了功能开发
    1:本地更新
    2:因为之前已经创建了远程分支,现在自己也所处分支上,直接push就会用本地分支把远程分支更新
    3:完成远程主分支更新,1:切换到主分支再合并分支,再更新远程主分支。
    

    介绍商品分类功能的作用

    vue项目一:电商后台管理项目PC端(上)

    01:前台页面和后台管理页面的逻辑其实是一致的
    

    创建goods_cate子分支并push到码云中

    vue项目一:电商后台管理项目PC端(上)

    02:创建本地分支,并创建远程分支
    

    通过路由加载商品分类组件

    vue项目一:电商后台管理项目PC端(上)

    03:创建商品分类组件,并在router中配置为/home的子路由页面,实现了点击商品分类跳转到该页面。
    

    绘制商品分类组件的基本页面布局

    vue项目一:电商后台管理项目PC端(上)

    04:完成了点击跳转到组件页面,实现面包屑和卡片视图,的基础页面布局
    

    调用API获取商品分类列表数据

    vue项目一:电商后台管理项目PC端(上)

    05:实现了页面的基础布局,开始调用接口获取到接口数据,将商品分类数据打印查看
    1:接口文档
    2:在data中定义查询条件,里面包含type是查询第几层数据,pagenum是当前页码值,pagesize每页显示多少条数据。
    2.1:定义了空数组,用来接收分类列表数据,total用来统计总共多少条数据。
    2.2:在create中调用函数,获取到数据。封装函数,发起数据请求,params:this.queryInfo查询参数, 就是刚才定义的初始化查询对象,如果数据获取失败,就弹出提示,成功就把数据储存在空数组中,和总条数储存在total中,实现了页面数据的获取
    3:打印了获取到的分类列表的数据
    

    初步使用vue-table-with-tree-grid树形表格组件

    vue项目一:电商后台管理项目PC端(上)

    06:完成了数据的获取,开始使用第三方依赖,布局树形表格,把数据渲染
    1:在可视面板中下载第三方运行依赖
    2:将下载的插件,导入到自己的main入口文件中,这样所有的子页面都可以使用。并将它注册为全局组件。vue.component('tree-table', TreeTable),以后就可以使用tree-table插件了
    3:在vue页面中使用插件,每个属性需要看使用手册
    3.1::data=catelist商品分类的列表数据
    3.2::cloumns=cloumns为列定义数据,label就是表头的名称,cat_anme就是绑定的数据名称。
    3.3::selection-type=false 关闭表格前面的对话框, :expand-type=false关闭表格的折叠,
    3.4:show-index显示index序号
    3.5:index-text设置序号的标题名称
    3.6:  border添加竖线边框, :show-row-hover:关闭鼠标经过背景色高亮效果
    4:添加初始数据, 用来设置表格的数据
    5:api方法
    6:Attribute属性
    7:代码示例和接口返回的数据
    8:页面效果,暂时渲染了1级数据。
    

    使用自定义模板列渲染表格数据

    vue项目一:电商后台管理项目PC端(上)

    07:使用了第三方表格,并把1级数据根据文档把数据给渲染了,现在渲染是否有效
    1:如何自定义插槽,插入自己的图标。
    2:接口响应的数据
    3:定义template插槽,slot:isok接收了data中模板,如果是false就渲染勾,如果不是就渲染x,实现了按需渲染图标
    4:页面效果, 渲染了是否有效这行数据的图标,且是按需渲染的
    

    渲染排序和操作对应的UI结构

    vue项目一:电商后台管理项目PC端(上)

    08:渲染了第一个自定义模板, 开始渲染第二个自定义模板,渲染排序。
    1:定义了插槽的规则与数据
    2:定义了一个排序,也是按需渲染图标的,第二个就是直接渲染带图标的按钮,都是使用自定义模板的方式
    3:接口文档
    4:页面效果,渲染了2级和3级的数据,是根据scope.row.cate_level=数值,根据值渲染的
    

    实现分页功能

    vue项目一:电商后台管理项目PC端(上)

    09-渲染了123级的菜单数据,和自定义模板的数据,开始渲染分页功能
    1:插入组件,@size-change监听页码值的改变
    1.2:@current-change监听数据页的改变
    1.3::current-page=queryinfo.pagenum,渲染了默认是从第一页显示数据
    1.4::page-size=[1,2, 5,10],按照一页显示多少条数据
    1.5: :page-size="queryInfo.pagenum" 一页显示几条数据
    1.6:layout页面所有分页组件的布局
    1.7:handleSizeChange和handleCurrentChange都是监听了页码值和页面数据的变化,而重新渲染页面,实现了数据分页的功能
    2:页面效果,实现了分页功能
    

    渲染添加分类的对话框和表单

    vue项目一:电商后台管理项目PC端(上)

    10:完成了分页功能,开始完成添加分类功能,实现点击弹出对话框,并添加了表单验证规则
    1:添加了对话框,绑定了表单数据对象,对象中药有分类的名称,和分类的id,分类的等级。
    1.2:绑定了验证规则
    1.3:绑定了引用对象
    1.4:prop指定了验证对象
    1.5:双向v-model绑定了数据框的数据
    1.6:lable表头的标题
    1.7:在data中定义了表单数据对象和验证规则对象
    2: 接口文档,3项值是必填项,父类id,分类名称,分类层级
    3:点击弹出对话框,渲染了输入框,和添加了验证规则
    

    获取父级分类数据列表

    vue项目一:电商后台管理项目PC端(上)

    11:完成了单击添加分类弹出对话框和添加了表单验证规则,开始调用将下拉菜单的数据打印
    1:接口文档,
    2:点击弹出对话框的时候,就调用获取分类数据的函数,函数中调用接口,携带了params参数type:2,意思就是获取2级的数据因为第3级的数据是用户选择的,而不是我们渲染的
    3:将获取到的数据打印到控制台中,还未渲染层级列表数据
    

    渲染级联选择器

    vue项目一:电商后台管理项目PC端(上)

    12:刚才获取到了2级的数据并打印了,现在根据数据把下拉菜单渲染
    1:props指定渲染数据,value渲染的2级id, label渲染2级数据的名称,children就是渲染带chuildren的项, 
    2:在级联选择器中渲染数据,:options指定了数据源, :props指定了级联渲染的配置对象, v-model指定了父级分类的id, @change打印选中的数据, clearable添加关闭按钮, change-on-select允许任意一级都可选中
    3:代码示例和接口返回的数据
    4:点击完成2级的数据渲染以及选中。
    

    根据父分类的变化处理表单中的数据

    vue项目一:电商后台管理项目PC端(上)

    13;渲染了级联选择框,开始完成分类名称的渲染
    1:@change触发自己的事件函数,函数中如果选中了数据,就把选中的最后一项的id赋值给cat_pid就是3,cat_level就是3,
    2:完成了分类名称的数据渲染,等下使用接口完成数据的修改
    

    在对话框的close事件中重置表单数据

    vue项目一:电商后台管理项目PC端(上)

    14:完成了表单数据添加的逻辑,开始完成点击关闭对话框的时候,将数据框清空
    1:点击关闭时触发事件函数,函数中将表单重置,还要将数组清空,id和level归哦,实现真正的初始化
    2:实现了添加分类数据的归0.重置功能
    

    完成添加分类的操作

    vue项目一:电商后台管理项目PC端(上)

    15:完成了数据清空重置功能,开始调用接口完成修改分类功能
    1:响应的数据
    2:编辑和删除的功能和之前的一样,需要同学们自己完成,调用接口完成了添加分了,并刷新了页面
    3:页面效果,完成了添加分类,并重新渲染了页面数据
    4-5:这2个功能需要同学自己课下完成
    

    将goods_cate分支上的代码提交到Git仓库中

    vue项目一:电商后台管理项目PC端(上)

    16:完成添加分类的功能。完成了本地分支更新,再完成了远程分支更新,合并分支,后再更新远程主分支
    

    创建goods_params分支

    vue项目一:电商后台管理项目PC端(上)

    17:创建并切换分支,再远程创建同名分支
    

    介绍分类参数功能的作用

    vue项目一:电商后台管理项目PC端(上)

    18: 后台的分类参数和前台分类参数的逻辑是一致的
    

    通过路由加载分类参数组件页面

    vue项目一:电商后台管理项目PC端(上)

    19:创建分类参数组件,实现点击跳转到该页面,并在router,js中挂载该路由。
    

    渲染分类参数页面的基本UI结构

    vue项目一:电商后台管理项目PC端(上)

    20:完成了点击跳转到分类参数页面,开始创建页面的基础布局
    1:引入alert组件,
    2:在element.js中解构该组件
    3:页面效果,显示了面包屑和alert提示
    

    调用API获取商品分类列表数据

    vue项目一:电商后台管理项目PC端(上)

    21:完成了商品页面的基础外形布局, 再调用接口获取分类数据列表
    1:在data中定义空数组
    1.2:在created中调用事件函数,获取数据
    1.3:封装异步函数,函数中发起请求,如果数据获取失败,就提示,成功就将数据打印在控制台中
    2:接口文档,不需要携带参数,直接请求即可返回数据
    3:成功的请求到了数据
    

    渲染商品分类的级联选择框

    vue项目一:电商后台管理项目PC端(上)

    22:获取到了分类列表的数据,导入级联选择器设置级联中的数据
    1:级联选择器:options接收商品列表, :props指定级联框中的数据,v-model级联选择框中的数据。 @change级联选中项中发生改变,会触发这个函数,他能拿到选中好的数据,并显示在级联选择器中
    2:完成了级联选择器中的数据渲染,和数据获取
    

    控制级联选择框的选中范围

    vue项目一:电商后台管理项目PC端(上)

    23:渲染好级联选择器的数据后也拿到了选中中级联数据并打印了,如果只选择了2项,是不能让数据被选中在级联中的
    1:在@change中判断,如果选中的级联,返回的数组中的长度不满足3,就不允许级联被选中。将级联选中的数组给清空,就实现了数据的不选中,return阻止程序向下继续执行
    2:页面效果,如果选中的数据没有3级,就将选中的数组给清空,就实现了数组中的数据清空
    

    渲染分类参数的Tabs页签

    vue项目一:电商后台管理项目PC端(上)

    24:完成了未选中3级数据,就清空级联中的数据,开始完成tab标签页面的渲染
    1:导入标签页组件
    2:解构标签页组件
    3:在tabs中配置参数v-model双向绑定activeName指向当前点击的是哪项,默认的值就是tab选中的值,@tab-click点击时触发的事件函数,将当前被选中的tab高亮显示
    4-5:页面效果,完成了tab标签页的渲染和选中的数据打印
    

    渲染添加参数按钮并控制按钮的禁用状态

    vue项目一:电商后台管理项目PC端(上)

    25:完成了tab中的数据渲染,开始实现,如果级联中没选中3级数据,就让添加参数按钮禁用
    1:让动态和静态中添加参数的2个按钮禁用,用:disabled动态绑定事件函数中的返回结果,事件函数中如果选中的的长度没有3级,就返回true禁用,反之就返回false不禁用。注意:disabled能接收一个函数的return返回值
    2:-3:页面效果,没有选中3级数据,就禁用按钮
    

    获取参数列表数据

    vue项目一:电商后台管理项目PC端(上)

    26:完成了级联未选中3级数据,就让添加参数按钮禁用。现在完成参数列表数据的获取并打印
    1:在tab-pane中tab标签中,name是tab的标识名称,label就是title标题。
    2:点击tab能在控制台中打印only或者many就是tab标签的标识名称
    3:tab标签中的name是在data中activeName绑定的,它绑定的many,那么tab标签页显示的就是tab1.
    4:cateId函数,返回的是选中的选中的分类id,如果选中了3项数据,就返回选中的这3项ID,返回给cateId这个函数
    5:在级联选中事件函数中,触发的handleChange函数中,如果选中的是3级数据,就开始发起请求,将选中的3级分类的id【cateId】和选中的是静态还是动态,params:sel: this.actibeName发给后台服务器,服务器知道了是哪3级联的id和选中是静态和动态,将属于参数列表的数据返回。如果数据返回失败,就弹出提示,返回数据成功就把数据打印在控制台中,留给后续操作
    6:控制台中拿到了参数列表的数据了
    

    切换Tabs面板后重新获取参数列表数据

    vue项目一:电商后台管理项目PC端(上)

    27:完成了参数列表的数据获取,开始完成小问题:@change事件中返回了刚才请求到的后台数据,但是点击tab却无数据返回,因为tab没有绑定刚才那个事件,无法获取数据的
    1:点击tab无数据,需要点击tab能获取到参数列表的数据
    2:将刚才写在handleChange事件函数,中所有的代码剪切到getParamsData事件函数中,函数中就是剪切过来的数据请求代码,在handleTabClick和handleChange中都调用该函数,2者都能获取到参数列表的数据了
    3:点击级联和tab都能拿到后台返回的数据了
    

    将获取到的参数数据挂载到不同的数据源上

    vue项目一:电商后台管理项目PC端(上)

    28:解决了级联和tab都能拿到数据,区分动态和静态数据,将他们存储在自己的data中
    1:点击tab是,拿到了数据,并且把拿到的数据,分类储存在动态和静态参数中
    2:在获取参数中,将当前选中的tab页,把对应的数据储存起来
    

    渲染动态参数和静态属性的Table表格

    vue项目一:电商后台管理项目PC端(上)

    29:将请求到的数据进行了动静区分,好后续的操作。现在渲染表格中的分裂数据了
    1:在table中:data绑定了manyTableData数据,静态表格就绑定了onlyTableData数据,将获取到的数据区分对待,开始渲染表格中的数据
    2:表格中的cloumn行,label就是表头,prop就是指定渲染数据项,在最后一行中使用template插槽,将操作中的按钮给渲染
    3:页面效果中的动静参数面板中的表格,按需渲染了
    

    渲染添加参数的对话框

    vue项目一:电商后台管理项目PC端(上)

    30:完成了动静tab页中的表格数据渲染,开始完成2者共用一个对话框,区分不同的数据,且通过表单验证
    1-2:点击添加按钮,弹出dialog对话框,:model绑定表单数据对象,:rules验证规则,ref表单引用对象,:label动态显示文本,prop指定了分类的名称。v-mdeol绑定了添加表单中的分类名称
    2.1:点击关闭的时候,触发关闭事件函数,在关闭对话框的时候,将表单中的数据重置了。
    2.2:titleText标题的名称用函数封装,根据点击不同的当前高亮项,返回不同的文本信息。这样输入框标题就能渲染不同的数据了
    3:点击点击面板中的添加按钮,其实共用的是一个对话框,但是对话框中数据不同而已
    

    完成动态参数和静态属性的添加操作

    vue项目一:电商后台管理项目PC端(上)

    31:完成了点击弹出共用一个对话框,框中显示不同的数据而已,开始完成参数添加的功能
    1:点击确定的时候,触发事件函数中的,先对表单中的数据进行验证,调用接口获取数据,携带3级联的id,和添加的名和当前点击的是哪一个面板。【合计就是:点击了哪一面板,是不是选中了3级联,和选中的内容,都要给后台数据】
    2:接口文档:要携带的参数,参数1是级联的数组id,参数2是添加的内容,和点击的面板
    3-4:点击添加完成了添加参数的功能,添加的参数,会在表格中渲染数据
    

    渲染修改参数的对话框

    vue项目一:电商后台管理项目PC端(上)

    32:完成了添加参数内容,开始完成点击修改弹出对话框
    1:在页面添加dialog对话框,:model绑定表单的数据对象, :rules绑定验证规则, ref表单引用对象, :label表头的标题,v-mdeol双向的是输入中的内容,
    1.1:在不同的点击修改面板中的按钮,会弹出修改的弹出对话框
    2-3:页面效果,点击弹出了修改对话框
    

    完成修改参数的操作

    vue项目一:电商后台管理项目PC端(上)

    33:完成了点击弹出修改对话框,开始完成修改参数的功能
    1:接口文档,根据id查询参数接口,徐涛携带3级的id,和自己点击的那个id。编辑提交参数的接口完成数据的修改,要携带3级联的id,自己点击修改的ID,和携带的参数,就是自己修改的内容和修改的那一个面板中的数据
    2-3:点击显示修改对话框,发起数据请求,将请求到的数据渲染到自己的输入框中,并显示对话框。
    完成了点击显示修改对话框,并把请求到的数据渲染到输入框中
    
    A: 点击确定修改按钮,
    B:触发修改事件,函数中对表单中的内容进行验证,发起接口请求,如果数据请求失败,就提示,请求成功就调用getParamsData刷新页面数据
    C:页面效果,点击弹出修改的对话框并渲染对话框中的内容,点击确定修改,发起数据请求,完成数据参数修改,并重新刷新页面表格,再次渲染页面数据
    

    完成删除参数的业务逻辑

    vue项目一:电商后台管理项目PC端(上)

    34:完成了修改参数的功能,开始实现删除参数的功能
    1:点击删除,弹出删除的confirm对话框,如果是confirm弹出取消了删除,反之就调用接口携带级联的ID和自己的id,实现删除删除功能,如果数据删除失败,弹出提示,成功就弹出删除成功,并调用getParamsData重新刷新页面数据
    2:接口文档
    3:页面效果,点击删除,弹出删除对话框,点击确定删除,弹出删除的提示新,并重新刷新页面数据,完成删除参数功能
    

    渲染参数下的可选项

    vue项目一:电商后台管理项目PC端(上)

    01:完成了删除参数功能,开始渲染折叠框中的数据,将数据转换成数组并以标签的形式展示
    1-2-3:在getParamsData中获取数据,把数据打印发现attr_vals返回的是一个字符串,每个数据都是用空格隔开的,使用forEach遍历数据,在遍历中用split将空格分隔,返回一个数组,并以逗号隔开的每一项
    4-5;把分隔的数组,在tag中循环,并展示。页面中就渲染了tag标签。
    

    解决attr_vals为空字符串时候的小问题

    vue项目一:电商后台管理项目PC端(上)

    02:完成了tag数据以标签形式的展示,但是当空的折叠行,会莫名的多了一个空的标签,解决自动生成空白标签
    1:在getParams改造数据, 在forEach中如果有数据就用split转成成数组,如果没有就是一个空的数组,就不会在页面显示多余的tab标签了
    2:页面效果,其实就是['']数组中多了一个空白的字符串,所以就渲染了空白标签,使用3元表达示按需渲染了标签
    

    控制按钮与文本框的切换显示

    vue项目一:电商后台管理项目PC端(上)

    03:完成了解决生成空白标签,开始双击将标签改变成输入框
    1:在页面使用动态编辑标签
    2:拷贝就多了输入框和button按钮,input中的v-model就是输入框中的值,ref就是输入的引用对象, @keyup.enter.native就是失去键盘时触发的事件函数,@blur就是输入框失去焦点时触发的事件
    3:在输入框失去焦点时,或者键盘弹起时,触发事件函数,函数中就打印ok,表示事件能被触发。在点击button按钮的时候,就会切换成input输入框
    4:页面效果,点击按钮就会切换成输入框
    

    为每一行数据提供单独的inputVisible和inputValue

    vue项目一:电商后台管理项目PC端(上)

    04:完成了输入框和按钮的编辑切换,开始完成共用数据所产生的问题
    1:问题描述,点击了一个输入框,但是所有行都多了一个输入框,因为共用的是同一个数据对象,和值。改造成独立的数据,数据就不会互相影响了
    2:删除掉光光数据,文本框的切换,和文本框中的输入内容
    3:在getParamsData的forEach遍历中,循环中给每个数据生成自己输入框显示和输入框的值,因为数据独立,就互不影响了。
    4-5:点击只会自己行中的按钮变成输入框,其他行中的数据不会发生改变。
    

    让文本框自动获得焦点

    vue项目一:电商后台管理项目PC端(上)

    05:解决了数据共用所产生的问题,开始完成让输入框自动获取焦点功能
    1-2:this.$nextTick() => {this.$refs.saveTagInput.$refs.input.focus}实现了页面元素渲染后,点击输入框,输入框自动获得焦点的功能
    3:变成输入框后自动获取焦点
    

    实现文本框与按钮的切换显示

    vue项目一:电商后台管理项目PC端(上)

    06:完成了输入框自动获取焦点功能,开始完成输入框如果如果输入很对空格,失去焦点时,还原清空的输入框
    1:输入框失去焦点或者键盘弹起事件,触发的事件函数,函数中如果输入框中的内容trim去除空格后,是空白的,就把输入框中的内容清空,隐藏输入框
    2-3:完成了输入框内容的重置功能
    

    完成参数可选项的添加操作

    vue项目一:电商后台管理项目PC端(上)

    07:完成了输入框内容的空白重置功能,开始完成参数添加功能
    1:接口文档,需要携带的参数有:attr_name输入框中的内容,attr_sel输入框中的tab面板,attr_vals参数的属性值,和修改的3级id+修改该行的id,
    2:在失去焦点时触发的事件函数,发起数据请求,携带了3级id和自己的id,和参数2的新属性的名称依旧面板类型和就属性的值,完成tab标签中的内容修改,修改失败,就弹出失败的信息,成功就弹出修改成功。
    3:点击tag完成了数据的修改
    

    删除参数下的可选项

    vue项目一:电商后台管理项目PC端(上)

    08:完成了tag标签中参数的修改,开始完成点击删除tag标签
    1:在tag元素中添加closeable关闭的图标, @close点击关闭时触发的事件函数
    2:函数中根据i序号,从数组中删除了一项数据,在调用saveAttrVals实现了保存数据,实现了数据删除功能,注意删除功能不需要调用getParamsData刷新页面数据,就能实现页面数据的重新渲染
    3:页面效果,实现了点击数据实现了点击删除tag标签的功能
    

    清空表格数据

    vue项目一:电商后台管理项目PC端(上)

    10:完成了tag标签的删除功能,开始完成级联如果没有选中数据,页面就不能渲染表格数据
    1-2:在getParamsData函数中,将面板中的数据清空,即可实现页面表格数据的情况。及时manyTableMenu和onlyTableData=[ ], 就实现了数据的清空功能
    3-4:如果级联选择器中没有选中数据,就不渲染表格中的数据
    

    完成静态属性表格中的展开行效果

    vue项目一:电商后台管理项目PC端(上)

    11:完成了级联中的数据没选中就不渲染表格功能,开始完成监听表格面板中表格的展开行
    1:直接把之前对他面板的table-column直接拷贝一份即可,因为数据和处理函数是共用的,所以实现了代码重用的功能
    2:点击静态属性面板,展开折叠,里面能展示tag标签数据,和点击实现了删除功能。就是代码重用的功能
    

    将本地goods_params分支的代码提交并推送到码云

    vue项目一:电商后台管理项目PC端(上)

    12:完成了动静面板中的表格数据渲染,添加和删除参数,以及折叠中的tag渲染修改和删除功能,完成了分类列表页面使用的功能开发,开始完成仓库更新
    1:本地更新-->远程分支更新-->合并分支,更新远程主分支
    2:远程仓库中的分支和主分支得到了更新
    

    创建goods_list子分支并推送到码云

    vue项目一:电商后台管理项目PC端(上)

    13:完成分类列表页面的开发,以及仓库更新,开始创建分支去完成商品列表页面的开发
    1:创建并切换分支-->创建远程同名分支
    2:远程多了同名分支
    

    由于字数限制,文章分为上下篇

    下一篇:vue项目一:电商后台管理项目PC端(下)


    起源地下载网 » vue项目一:电商后台管理项目PC端(上)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元