直播系统平台搭建的重要性与工作总结的高效方法探讨
621
2022-05-30
讲解完了整个vue,我们可以使用已经学习的知识自己做一个项目。项目可以综合锻炼知识整合能力,希望大家都可以认真做项目。
16.1 项目简介
该项目是一个网上汽车销售系统,有后台管理,和前台销售界面。
16.1.1 业务要求
第一部分:前端销售
• 注册用户
• 登录和忘记密码
• 商品浏览
• 查看商品详情
• 添加购物车
• 立即购买
• 支付
第二部分:后台管理
• 基础数据管理(供应商管理,品牌管理,商品管理)
• 订单管理
• 权限管理
• 售后管理
• 报表
16.1.2 项目效果
1、注册
图16- 1 注册效果图
2、 登录
图16- 2 登录效果图
3、 商品详情页
图16- 3 商品详情页
4、 商品添加购物车
图16- 4 添加到购物车
添加到购物车有数量消息提示。但是如果没有登录的话则不能添加到购物车。
5、 购物车
图16- 5 购物车界面
6、 后台订单管理
16.1.3 核心代码
1、移动端组件库的使用
官方文档:http://mint-ui.github.io/#!/zh-cn
第一种:全局使用
第一步:先安装
npm install mint-ui -S
第二步:在main.js中引用
//导入mint-ui
import Mint from 'mint-ui';
import 'mint-ui/lib/style.css'
Vue.use(Mint);
第二种:按需使用
第一步:安装同上
第二步:安装 babel-plugin-component:
npm install babel-plugin-component -D
注:借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。
第三步:修改.babelrc
{
"presets": ["env", "stage-0"],
"plugins": [["component",[{"libraryName": "mint-ui","style": true}]]]
}
2、 商品列表
时间: {{n.newsDate | dateFmt('YYYY-MM-DD')}}
点击次数:{{n.readNum}}
import { Loadmore,Toast } from 'mint-ui';
export default {
data(){
return {
newsList:[],
current:1,
totalPage:0,
allLoaded:false,
bottomStatus:"",
list:[]
}
},
methods:{
//获取新闻
getPages(){
this.$ajax({
url:"/news/"+this.current,
method:"get"
}).then(response=>{
console.log(response.data.message);
this.newsList = response.data.message;
this.totalPage = response.data.totalPage;
if(this.current == 1){
this.list = this.newsList;
}else{
this.list.push(...this.newsList);
}
});
},
//下拉刷新
loadTop() {
Toast("正在刷新。。。。");
this.current = 1;
this.getPages();
this.$refs.loadmore.onTopLoaded();
},
//上拉加载
loadBottom(){
Toast("正在拼命加载中。。。。");
this.current = this.current + 1;
if(this.current > this.totalPage){
Toast('数据已经加载完毕。。。。');
this.allLoaded = true;
return;
}
this.getPages();
this.$refs.loadmore.onBottomLoaded();
},
handleBottomChange(status) {
this.bottomStatus = status;
},
},
created(){
this.getPages();
},
mounted(){
this.$nextTick(function () {
this.contentH = document.documentElement.clientHeight -
this.$refs.wrapper.getBoundingClientRect().top;
})
}
}
3、 商品详情页
发表时间:{{newsInfo.newsDate | dateFmt()}}
点击:{{newsInfo.readNum}}次
import { Toast } from 'mint-ui'
import comment from './Comment.vue'
export default {
components:{comment},
data(){
return {
id:this.$route.params.id,
newsInfo:{},
}
},
methods:{
getNewsInfo(){
this.$ajax({
url:"/findNews/"+this.id,
method:"get"
}).then(resp=>{
let status = resp.data.status;
if(status==1){
this.newsInfo = resp.data.message[0];
}else{
Toast("获取新闻失败");
}
});
}
},
created(){
this.getNewsInfo();
}
}
.newsinfo{
padding:8px 4px;
}
.title{
font-size: 16px;
text-align: center;
margin: 15px 0;
color:red;
}
.subtitle{
font-size: 13px;
color:#226aff;
display: flex;
justify-content: space-between;
}
/* 用来解决互联网图片的额问题,以及index.html要加入 */
.content >>> img {
max-width: 100%;
height: auto;
}
4、 购物车
总价(不包含运费):
已勾选商品 {{this.$store.getters.getTotalPrice.num}} 件,总价 ¥ {{this.$store.getters.getTotalPrice.val}}万
import mui from '../../lib/mui/js/mui.min.js'
export default {
data(){
return {
cars:[],
}
},
methods:{
del(id,i){
this.cars.splice(i,1);
this.$store.commit("delGoods",id);
this.cars = JSON.parse(localStorage.getItem("cars"));
},
updateSelected(id,val){
this.$store.commit("updateSelected",{id,val});
this.cars = JSON.parse(localStorage.getItem("cars"));
},
updateNum(id,i){
let val = document.getElementById('test'+i).value;
this.$store.commit("updateNum",{id,val});
this.cars = JSON.parse(localStorage.getItem("cars"));
},
// 添加
addGs(info){
// 注意selected 为 0 1
info.c_selected=info.c_selected?1:0;
info.c_status=info.c_status?1:0;
this.$ajax({
url:"before/addshopcar",
method:"post",
data:info
}).then(resp=>{
if(resp.data.status === 1){
console.log("添加成功");
}
})
},
// 修改
updGs(info){
info.c_selected=info.c_selected?1:0;
info.c_status=info.c_status?1:0;
this.$ajax({
url:"before/updateshopcar",
method:"put",
data:info
}).then(resp=>{
if(resp.data.status === 1){
console.log("修改成功");
}
})
},
// 删除
delGs(id){
this.$ajax({
url:"before/deleteshopcar/"+id,
method:"delete"
}).then(resp=>{
if(resp.data.status === 1){
console.log("删除成功");
}
})
},
// 结算
js(){
// 判断勾选状态
let selectedNum = 0;
this.cars.forEach(item=>{
if(item.c_selected){
selectedNum++;
}
})
if(selectedNum===0){
alert("您还未勾选商品,请选择您想购买的商品,亲");
return;
}
let ids = this.$store.state.ids;
let bdids = []; // 用来保存本地购物车的 ids
this.cars.forEach(item=>{
bdids.push(item.c_p_id);
})
// 看看本地是否包含数据库的goodsId
ids.forEach(item=>{
if(bdids.includes(item)){
// 包含修改
this.cars.some(c=>{
if(c.c_p_id === item){
this.updGs(c); // 必须传入商品对象
return true;
}
})
}else{
// 不包含 删除
this.delGs(item);
}
})
bdids.forEach(item=>{
if(!ids.includes(item)){
this.cars.some(c=>{
if(c.c_p_id === item){
this.addGs(c);
return true;
}
})
}
})
this.cars.forEach(item=>{
if(item.c_selected){
this.$ajax({
url:'before/deleteshopcar',
method:'delete',
query:{c_id:item.c_id,c_num:item.c_num}
}).then(resp=>{
})
}
})
// 初始化购物车
this.getCs();
this.$router.push("/bill/carbill/"+this.$store.getters.getTotalPrice.val+'/'+bdids)
// window.location.reload();
},
getCs() {
let ids = [];
this.$ajax({
url: "before/shopcar",
method:"get"
}).then(resp => {
resp.data.message.forEach(item => {
ids.push(item.c_p_id);
if (item.c_selected == 1) {
item.c_selected = true;
} else {
item.c_selected = false;
}
if (item.c_status == 1) {
item.c_status = true;
} else {
item.c_status = false;
}
})
// c_p_id,c_num,c_u_id,p_img,p_name,p_price,c_selected
this.$store.commit("carsInit", resp.data.message);
// 给ids赋值
this.$store.commit("idsInit", ids);
// 同时储存到本地
localStorage.setItem("cars", JSON.stringify(this.$store.state.cars));
})
},
initProp(){
// let uid = localStorage.getItem("uid");
let userInfobd = JSON.parse(localStorage.getItem("userInfo"));
if(userInfobd.length==0){
let userInfo = this.$store.getters.getUserInfo;
if(userInfo.length==0){
this.$router.push("/user/login");
return;
}
}
}
},
created(){
// 先判断用户是否登录
this.initProp();
this.cars = JSON.parse(localStorage.getItem("cars"));
},
mounted(){
mui('.mui-numbox').numbox();
}
}
.mui-card-content-inner{
display:flex;
align-items: center;
}
img{
width:60px;
height: 60px;
}
h1{
font-size:13px;
}
.price{
color:red;
font-weight: bold;
}
.jiesuan{
display: flex;
justify-content: space-around;
}
.red{
color:red;
font-weight: bold;
font-size:20px;
}
16.2 项目意义
首先告诉大家,做项目并不是一件简单的事情。为何如此说呢,因为在接到分配的任务后,首先要思考的是,我做的是什么业务,这个业务的意义目的在哪里,这一块的功能给客户提供什么样的方便,业务流程如何走下去,才更能深入到客户的心里。这只是初期的头脑风暴。后续业务流程稳定下来,该思考的是,为了使我的业务流程按照思路正常走下去,应该如何有效的建立各个数据表,从此处我们发现,必须先了解深入业务,才可以确定数据表,所以大家不要着急敲代码,而应该深思熟虑方可敲代码。
其次,敲代码的过程中,又有了更清醒的觉悟,那就是所学习的知识不足以支撑完成整个项目,所以说写项目的过程是一个自我积极学习的过程而不是老师被动输入的过程,前者的学习更能内化自己专业方面的知识,提高学习的能力,所以每个人都要积极的写项目。
最后,写项目不仅是自我积极学习的过程,也是打怪兽的过程,这个怪兽就是令人抓狂的bug。我们发现一个bug解决了,另一个bug接踵而至,跟事先约好了似的,令你头疼。此时此刻,此情此景,我知道,你想放弃,放弃是一个正常人面对挫折做出的自我保护的下意识的行为,所以,不是你懦弱,也不是你逃避,这是所有人都会做出的选择,但是,此时此刻,我劝你别着急放弃,先冷静,这个时候,我希望你的叛逆汹涌而出,别人放弃,那我偏偏要与众不同,我非要与bug死磕到底,这个思想如果出来了,那你就开始前进了,进步就是在一念之间,所以,请珍重。
以上所叙述,是做项目的部分心理过程,其实过程是丰富多彩的,比如说,终于出来一个效果了,那我放松一会儿吧,结果“一会儿”变成了一天的游戏打杀,等等等等过程,我希望大家有更丰富的过程,经历了,总结了,反省了,那就是你的财富。但是依然要说一句,了解你的诱惑(例如看电子小说,是你控制不住花费大量时间的),规避自己的行为,认真对待,彻底执行,完成项目,因为项目真的是一个不可多得的浴火重生的机会。
Vue
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。