做视频网站视频短片,优化一个网站需要多少钱,科技侠智能锁,网站开发人员知乎文章目录1.电商业务概述2.项目初始化3.码云相关操作B.安装gitD.在本地创建公钥#xff1a;在终端运行#xff1a;ssh-keygen -t rsa -C xxxxxx.com4.配置后台项目A.安装phpStudy并导入mysql数据库数据B.安装nodeJS#xff0c;配置后台项目,从终端打开后台项目vu…
文章目录1.电商业务概述2.项目初始化3.码云相关操作B.安装gitD.在本地创建公钥在终端运行ssh-keygen -t rsa -C xxxxxx.com4.配置后台项目A.安装phpStudy并导入mysql数据库数据B.安装nodeJS配置后台项目,从终端打开后台项目vue_api_serverC.使用postman测试api接口5.实现登录功能概述A.登录状态保持B.登录逻辑C.添加新分支login在login分支中开发当前项目vue_shop进一步处理A.添加element-ui的表单组件B.添加第三方字体C.添加表单验证的步骤6.登录成功之后的操作A.登录成功之后需要将后台返回的token保存到sessionStorage中补充关于ESlint配置文件1.初始化项目 2.基于Vue技术栈进行项目开发 3.使用Vue的第三方组件进行项目开发 4.理解前后端分离开发模式
1.电商业务概述 客户使用的业务服务PC端小程序移动web移动app 管理员使用的业务服务PC后台管理端。
PC后台管理端的功能管理用户账号登录退出用户管理权限管理商品管理商品分类分类参数商品信息订单数据统计 电商后台管理系统采用前后端分离的开发模式 前端项目是基于Vue的SPA单页应用程序项目 前端技术栈:Vue,Vue-Router,Element-UI,Axios,Echarts 后端技术栈Node.js,Express,Jwt(模拟session),Mysql,Sequelize(操作数据库的框架)
2.项目初始化 A.安装Vue脚手架 B.通过脚手架创建项目 C.配置路由 D.配置Element-UI:在插件中安装搜索vue-cli-plugin-element E.配置Axios在依赖中安装,搜索axios(运行依赖) F.初始化git仓库 G.将本地项目托管到github或者码云中
3.码云相关操作
A.注册登录码云账号
B.安装git
在Windows上使用Git可以从Git官网直接下载安装程序进行安装。
测试命令git --version#C.点击网站右上角“登录”登录码云并进行账号设置
D.在本地创建公钥在终端运行ssh-keygen -t rsa -C “xxxxxx.com” E.找到公钥地址 Your identification has been saved in /c/Users/My/.ssh/id_rsa. Your public key has been saved in /c/Users/My/.ssh/id_rsa.pub. 当我们创建公钥完毕之后请注意打印出来的信息“Your public key has been saved in” /c/Users/My/.ssh/id_rsa.pub : c盘下面的Users下面的My下面的.ssh下面的id_rsa.pub就是我们创建好的公钥了
E.打开id_rsa.pub文件复制文件中的所有代码点击码云中的SSH公钥将生成的公钥复制到公钥中 G.测试公钥打开终端输入命令 ssh -T gitgitee.com
H.将本地代码托管到码云中 点击码云右上角的号-新建仓库
I.进行git配置 打开项目所在位置的终端进行git仓库关联
4.配置后台项目 A.安装phpStudy并导入mysql数据库数据 B.安装nodeJS配置后台项目,从终端打开后台项目vue_api_server
然后在终端中输入命令安装项目依赖包npm install
C.使用postman测试api接口 5.实现登录功能
概述 A.登录状态保持
如果服务器和客户端同源建议可以使用cookie或者session来保持登录状态 如果客户端和服务器跨域了建议使用token进行维持登录状态。 B.登录逻辑
在登录页面输入账号和密码进行登录将数据发送给服务器 服务器返回登录的结果登录成功则返回数据中带有token 客户端得到token并进行保存后续的请求都需要将此token发送给服务器服务器会验证token以保证用户身份。 C.添加新分支login在login分支中开发当前项目vue_shop
打开vue_shop终端使用git status确定当前项目状态。 确定当前工作目录是干净的之后创建一个分支进行开发开发完毕之后将其合并到master git checkout -b login 然后查看新创建的分支git branch
确定我们正在使用login分支进行开发
然后执行vue ui命令打开ui界面然后运行serve运行app查看当前项目效果
发现现在是一个默认页面我们需要进行更改打开项目的src目录点击main.js文件入口文件
import Vue from vue
import App from ./App.vue
import router from ./router
import ./plugins/element.jsVue.config.productionTip falsenew Vue({router,render: h h(App)
}).$mount(#app)
再打开App.vue(根组件)将根组件的内容进行操作梳理(template中留下根节点script中留下默认导出去掉组件style中去掉所有样式)
templatediv idapprouter-view/router-view/div
/templatescript
export default {name: app
}
/scriptstyle
/style再打开router.js(路由)将routes数组中的路由规则清除然后将views删除将components中的helloworld.vue删除
import Vue from vue
import Router from vue-routerVue.use(Router)export default new Router({routes: []
})在components文件夹中新建Login.vue组件,添加templatescriptstyle标签,style标签中的scoped可以防止组件之间的样式冲突没有scoped则样式是全局的
templatediv classlogin_container/div
/templatescript
export default {}
/scriptstyle langless scoped
.login_container {background-color: #2b5b6b;height: 100%;
}/style在router.js中导入组件并设置规则 在App.vue中添加路由占位符
const router new Router({routes: [{ path: /, redirect: /login },{ path: /login, component: Login }]
})当我们给Login.vue中的内容添加样式的时候会报错“缺少less-loader”需要配置less加载器开发依赖安装less(开发依赖)
然后需要添加公共样式在assets文件夹下面添加css文件夹创建global.css文件,添加全局样式
/* 全局样式表 */
html,body,#app{width: 100%;height: 100%;margin: 0;padding: 0;
}在main.js中导入global.css使得全局样式生效 import “./assets/css/global.css” 然后Login.vue中的根元素也需要设置撑满全屏height:100% 最终Login.vue文件中的代码如下
templatediv classlogin_container!-- 登录盒子 --div classlogin_box!-- 头像 --div classavatar_boximg src../assets/logo.png alt/div!-- 登录表单 --el-form :modelloginForm refLoginFormRef :rulesloginFormRules label-width0px classlogin_form!-- 用户名 --el-form-item propusernameel-input v-modelloginForm.username prefix-iconiconfont icon-user /el-input/el-form-item !-- 密码 --el-form-item proppasswordel-input typepassword v-modelloginForm.password prefix-iconiconfont icon-3702mima/el-input/el-form-item !-- 按钮 --el-form-item classbtnsel-button typeprimary clicklogin登录/el-buttonel-button typeinfo clickresetLoginForm重置/el-button/el-form-item /el-form/div/div
/templatescript
export default {data() {return {//数据绑定loginForm: {username: admin,password: 123456},//表单验证规则loginFormRules: {username: [{ required: true, message: 请输入登录名, trigger: blur },{min: 3,max: 10,message: 登录名长度在 3 到 10 个字符,trigger: blur}],password: [{ required: true, message: 请输入密码, trigger: blur },{min: 6,max: 15,message: 密码长度在 6 到 15 个字符,trigger: blur}]}}},//添加行为methods: {//添加表单重置方法resetLoginForm() {//this当前组件对象其中的属性$refs包含了设置的表单ref// console.log(this)this.$refs.LoginFormRef.resetFields()},login() {//点击登录的时候先调用validate方法验证表单内容是否有误this.$refs.LoginFormRef.validate(async valid {console.log(this.loginFormRules)//如果valid参数为true则验证通过if (!valid) {return}//发送请求进行登录const { data: res } await this.$http.post(login, this.loginForm)// console.log(res);if (res.meta.status ! 200) {return this.$message.error(登录失败: res.meta.msg) //console.log(登录失败:res.meta.msg)}this.$message.success(登录成功)console.log(res)//保存tokenwindow.sessionStorage.setItem(token, res.data.token)// 导航至/homethis.$router.push(/home)})}}
}
/scriptstyle langless scoped
.login_container {background-color: #2b5b6b;height: 100%;
}
.login_box {width: 450px;height: 300px;background: #fff;border-radius: 3px;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);.avatar_box {height: 130px;width: 130px;border: 1px solid #eee;border-radius: 50%;padding: 10px;box-shadow: 0 0 10px #ddd;position: absolute;left: 50%;transform: translate(-50%, -50%);background-color: #fff;img {width: 100%;height: 100%;border-radius: 50%;background-color: #eee;}}
}
.login_form {position: absolute;bottom: 0;width: 100%;padding: 0 20px;box-sizing: border-box;
}
.btns {display: flex;justify-content: flex-end;
}
/style
其中我们有用到一下内容需要进行进一步处理
进一步处理
A.添加element-ui的表单组件
在plugins文件夹中打开element.js文件进行elementui的按需导入
import Vue from vue
import { Button } from element-ui
import { Form, FormItem } from element-ui
import { Input } from element-uiVue.use(Button)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)B.添加第三方字体
复制素材中的fonts文件夹到assets中,在入口文件main.js中导入import ‘./assets/fonts/iconfont.css’ 然后直接在 接着添加登录盒子
C.添加表单验证的步骤
1).给添加属性:rules“rules”rules是一堆验证规则定义在script、中 2).在script中添加rules
export default{ data(){return{......, rules: {name: [{ required: true, message: 请输入活动名称, trigger: blur },{ min: 3, max: 5, message: 长度在 3 到 5 个字符, trigger: blur }],region: [{ required: true, message: 请选择活动区域, trigger: change }]
}… 3).通过的prop属性设置验证规则
vue.prototype和vue.use的区别和注意点 1、vue.prototype实例上挂载属性/方法例如Vue.prototype.axios axios; 2、vue.use引入插件例如vuexvue.use(vuex) 4.导入axios以发送ajax请求 打开main.jsimport axios from ‘axios’; 设置请求的根路径axios.defaults.baseURL ‘http://127.0.0.1:8888/api/private/v1/’; 挂载axiosVue.prototype.$http axios;
5.配置弹窗提示 在plugins文件夹中打开element.js文件进行elementui的按需导入 import {Message} from ‘element-ui’ 进行全局挂载
Vue.prototype.$message Message;在login.vue组件中编写弹窗代码
this.$message.error(登录失败)6.登录成功之后的操作
A.登录成功之后需要将后台返回的token保存到sessionStorage中
操作完毕之后需要跳转到/home
login() {//点击登录的时候先调用validate方法验证表单内容是否有误this.$refs.LoginFormRef.validate(async valid {console.log(this.loginFormRules)//如果valid参数为true则验证通过if (!valid) {return}//发送请求进行登录const { data: res } await this.$http.post(login, this.loginForm)// console.log(res);if (res.meta.status ! 200) {return this.$message.error(登录失败: res.meta.msg) //console.log(登录失败:res.meta.msg)}this.$message.success(登录成功)console.log(res)//保存tokenwindow.sessionStorage.setItem(token, res.data.token)// 导航至/homethis.$router.push(/home)})}添加一个组件Home.vue并为之添加规则
templatedivthis is homeel-button typeinfo clicklogout 退出 /el-button/div
/templatescript
export default {methods: {logout() {window.sessionStorage.clear()this.$router.push(/login)}}
}
/scriptstyle langless scoped
/style添加路由规则
const router new Router({routes: [{ path: /, redirect: /login },{ path: /login, component: Login },{ path: /home, component: Home }]
})添加路由守卫 如果用户没有登录不能访问/home,如果用户通过url地址直接访问则强制跳转到登录页面 打开router.js
import Vue from vue
import Router from vue-router
import Login from ./components/Login.vue
import Home from ./components/Home.vueVue.use(Router)const router new Router({routes: [{ path:/, redirect:/login},{ path:/login , component:Login },{ path:/home , component:Home}]
})//挂载路由导航守卫,to表示将要访问的路径from表示从哪里来next是下一个要做的操作
router.beforeEach((to,from,next){ if(to.path /login)return next();//获取tokenconst tokenStr window.sessionStorage.getItem(token);if(!tokenStr)return next(/login);next();})export default router 实现退出功能
在Home组件中添加一个退出功能按钮,给退出按钮添加点击事件添加事件处理代码如下
export default {methods:{logout(){window.sessionStorage.clear();this.$router.push(/login);}}
}补充
A.处理ESLint警告 打开脚手架面板查看警告信息 默认情况下ESLint和vscode格式化工具有冲突需要添加配置文件解决冲突。 在项目根目录添加 .prettierrc 文件
{semi:false,singleQuote:true
}打开.eslintrc.js文件禁用对 space-before-function-paren 的检查: rules: {no-console: process.env.NODE_ENV production ? error : off,no-debugger: process.env.NODE_ENV production ? error : off,space-before-function-paren : 0},B.合并按需导入的element-ui
import Vue from vue
import { Button, Form, FormItem, Input, Message } from element-uiVue.use(Button)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
// 进行全局挂载
Vue.prototype.$message Message关于ESlint配置文件
ESlint配置文件eslintrc.js详解
https://www.cnblogs.com/taoshengyijiuai/p/8431413.htmlVue中ESlint配置文件eslintrc.js文件详解
https://blog.csdn.net/weixin_38606332/article/details/80864381module.exports {//此项是用来告诉eslint找当前配置文件不能往父级查找root: true, //此项是用来指定eslint解析器的解析器必须符合规则babel-eslint解析器是对babel解析器的包装使其与ESLint解析parser: babel-eslint,//此项是用来指定javaScript语言类型和风格sourceType用来指定js导入的方式默认是script此处设置为module指某块导入方式parserOptions: {sourceType: module},//此项指定环境的全局变量下面的配置指定为浏览器环境env: {browser: true,},// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style// 此项是用来配置标准的js风格就是说写代码的时候要规范的写如果你使用vs-code我觉得应该可以避免出错extends: standard,// required to lint *.vue files// 此项是用来提供插件的插件名称省略了eslint-plugin-下面这个配置是用来规范html的plugins: [html],// add your custom rules here// 下面这些rules是用来设置从插件来的规范代码的规则使用必须去掉前缀eslint-plugin-// 主要有如下的设置规则可以设置字符串也可以设置数字两者效果一致// off - 0 关闭规则// warn - 1 开启警告规则//error - 2 开启错误规则// 了解了上面这些下面这些代码相信也看的明白了rules: {// allow paren-less arrow functionsarrow-parens: 0,// allow async-awaitgenerator-star-spacing: 0,// allow debugger during developmentno-debugger: process.env.NODE_ENV production ? 2 : 0}
}C.将代码提交到码云 新建一个项目终端,输入命令‘git status’查看修改过的与新增的文件内容 将所有文件添加到暂存区git add . 将所有代码提交到本地仓库git commit -m “添加登录功能以及/home的基本结构” 查看分支 git branch 发现所有代码都被提交到了login分支 将login分支代码合并到master主分支先切换到mastergit checkout master 在master分支进行代码合并git merge login 将本地的master推送到远端的码云git push
推送本地的子分支到码云先切换到子分支git checkout 分支名 然后推送到码云git push -u origin 远端分支名
扩展解决无法推送至远程分支
完美解决error: failed to push some refs to ‘https://github.com/xxxx.git’