# vue_shop **Repository Path**: ruxin736/vue_shop ## Basic Information - **Project Name**: vue_shop - **Description**: 一个基于vue+element-ui+nodejs的电商后台管理系统,支持用户登录,用户管理,分配权限,商品管理,订单管理,数据统计等功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 3 - **Created**: 2020-05-17 - **Last Updated**: 2023-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vue_shop ## Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Lints and fixes files ``` npm run lint ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/). # 界面预览 登陆页面 ![](https://gitee.com/ruxin736/images/raw/master/登录.png) 添加商品页面 ![](https://gitee.com/ruxin736/images/raw/master/添加商品.png) 商品分类页面 ![](https://gitee.com/ruxin736/images/raw/master/商品分类参数.png) 权限管理 ![](https://gitee.com/ruxin736/images/raw/master/权限管理.png) # 项目准备 ## Vue项目初始化 1. 全局安装Vue脚手架 `npm install -g @vue/cli`; 2. 运行Vue项目可视化管理面板 `vue ui`; 3. 创建Vue项目; 4. 在插件中配置Element-UI,搜索`vue-cli-plugin-element`插件并安装; 5. 在运行依赖中配置Axios,搜索`axios`并安装。 ## 调试后台服务器接口 1. 安装phpStudy(用不到Apache,可将其停止),导入`/vue_api_server/db/mydb.sql`数据库。 MySQL管理器 => MySQL导入导出 => 输入密码root => 选择要还原的文件,即素材中的`/vue_api_server/db/mydb.sql`数据库,还原到数据库名为mydb => 点击导入 弹出的对话框自动关闭后即为导入完成,在`D:\phpStudy\MySQL\data`中查看是否有mydb文件夹,若存在,则导入成功。 2. 打开`vue_api_server`文件夹,使用`npm install`安装依赖项; 3. 安装完成后,`node app.js`即可查看可用的接口; 4. 安装postman接口调试工具。 # 登录/退出 **业务流程** 1. 在登录页面输入用户名和密码; 2. 调用 后台接口进行验证; 3. 通过验证之后,根据后台的响应状态跳转到项目主页。 **相关技术栈** - http 无状态; - cookie 在客户端记录状态; - session 在服务器端记录状态; - token 维持状态。 客户端和服务器端接口之间不存在跨域问题,则使用cookie和session维持登录状态;若存在跨域问题,则使用token维持登录状态。 **登录页面布局** 通过 Element-UI 组件实现布局,具体涉及: - el-form - el-form-item - el-input - el-button **先对初始文档进行清理** 1. 用webstorm打开vue_shop项目文件,使用`git status`确认当前项目状态是否clean,若不是,则可在终端依次执行`git add .`,`git commit -m "add files"`。 2. 终端执行`git checkout -b login ` 创建一个新的分支进行开发,开发完毕后再合并到master。可使用`git branch`命令查看当前的所有分支,目前应该有两个:login和master,前面带 * 的即为当前正在开发的分支。 3. 终端执行`vue ui`打开ui界面,在任务中运行serve,编译完成后启动app,查看编译效果。 4. 第一次编译结果是一个默认页面,可以对main.js,App.vue,以及router.js文件进行清理,并删除与项目无关的默认组件。 **接下去实现登录组件** 1. 先在`plugins/element.js`文件中按需导入elementui; 2. 进行登录组件的CSS样式设计,怎么开心怎么来; 3. 使用`v-model`进行表单数据的双向绑定; 4. 为``添加`:rules="loginFormRules"`验证规则,并在各``中设置`prop`属性,以对应相应的验证规则; 5. 为Login按钮添加点击事件,实现表单数据在提交前进行格式验证,若验证通过则向服务器发送ajax请求。表单的格式验证使用form表单中的validate方法。要发送ajax请求,首先在main.js中导入axios,设置请求的根路径,并挂载到Vue原型方法中。在客户端通过post请求得到服务器的返回数据后,解构出返回数据中的data,根据data中的状态码是否为200,判断登录成功与否; 6. 导入elementui中的弹窗提示messege,并全局挂载`Vue.prototype.$message = Message`。在Login按钮的点击事件中,根据登录成功与否,弹出相应提示; 7. 若登录成功,则将服务器返回数据中的 token 保存到客户端的sessionStorage中。因为项目中除了登录之外的其他API接口只能在登录后才能访问,客户端保存的token在网站登录成功后才能生效,所以需要保存在sessionStorage中。然后设置编程式导航,跳转到home页面; 8. 在配置路由的index.js中添加路由守卫,使用`router.beforeEach()`方法,如果要访问的页面是登录页面,则放行;如果要访问的不是登录页面,则先判断是否有token,如果没有,则强制跳转到登录页面,如果有,则放行。 **接下去实现退出功能** 1. 在Home.vue组件中添加退出按钮,并为该按钮添加点击事件; 2. 点击事件的执行函数主要进行两件事:首先`window.sessionStorage.clear() `清空客户端存储的token;然后使用编程式导航跳转到登录页面。 **代码格式化问题** webstorm里面使用 `Alt+Ctrl+L` 自动实现的代码格式和Vue项目中ESLint规定的格式冲突,出现冲突时,会自动出现错误提示,但是一个个去修改太麻烦。可以在Settings => Keymap中搜索eslint,并为其设置快捷键 `Alt+L`,这样就可以一键格式化代码。 **提交代码到码云** 1. `git status` 查看当前项目的状态,文件名为红色的是修改过或新增的文件; 2. `git add .` 将修改过的文件全部添加到暂存区中; 3. `git commit -m "完成了登录功能"` 将暂存区中的文件全部添加到本地仓库中,-m 表示提交消息; 4. `git branch` 检查当前所处的分支,当前应该处于login分支; 5. `git checkout master` 切换到master分支; 6. `git merge login` 将login分支中的代码合并到master分支中; 7. `git push` 推送master分支到码云,注意此时码云中只有一个master分支,没有login分支; 8. `git checkout login` 切换到login分支; 9. `git push -u origin login` 推送login分支到码云,因为这是第一次推送login分支,云端仓库中还没有该分支,所以不能直接使用`git push`。 # 主页布局 **首先对首页进行基本的样式布局** 1. 使用elementui中的container布局容器,记得在element.js文件中进行导入; 2. 在头部区域放置logo、名称、以及退出按钮,使用flex布局实现两端对齐,以及logo和文字的居中对齐; 3. 在侧边栏使用elementui中的NavMenu菜单栏,因为只需要两级菜单,所以只保留``、``、以及`` **设置axios请求拦截器** 除了登录接口,任何访问后台的操作都需要token权限验证,所以需要在客户端发送请求前加上存储的token,以保证用户拥有获取数据的权限。 在main.js中,在将axios挂载到vue原型之前添加以下代码,通过axios请求拦截器添加 token,为每一次的API请求挂载一个 token。 ```javascript axios.interceptors.request.use(config => { config.headers.Authorization = window.sessionStorage.getItem('token') return config }) ``` **通过接口获取左侧菜单数据** 1. 查询接口文档,确定左侧菜单数据的请求路径、请求方法、以及返回数据的格式; 2. 在Home组件的`methods`中定义获取菜单的方法`getMenuList()`,使用async修饰,并将数据存储到`data`中; 3. 因为侧边栏的菜单列表是在页面渲染前就需要被初始化好,所以在`creates()`生命周期函数中执行`getMenuList()`。 4. 得到菜单列表数据后,通过`v-for`双重循环渲染左侧菜单; 5. 修改`