ToB企服应用市场:ToB评测及商务社交产业平台

标题: 端午假期整理了仿天猫H5 APP项目vue.js+express+mongo [打印本页]

作者: 前进之路    时间: 2022-6-24 19:44
标题: 端午假期整理了仿天猫H5 APP项目vue.js+express+mongo
效果


源码

源码太多,放github上了点击
遇到的问题

连接mongodb数据库多个集合(model文件)

  1. module.exports = {
  2.     dbProduct: mongoose.model('runoob',mongoSchema,'product'),
  3.     dbRotation: mongoose.model('runoob',mongoSchema,'rotation'),
  4.     dbUsers:mongoose.model('runoob',mongoSchema,'users'),
  5.   };
复制代码
发送验证码需要开启QQ邮箱SMTP(email文件)


  1. // 创建发送邮件对象
  2. let transporter=nodemailer.createTransport({
  3.     service:'qq',
  4.     secure: true,
  5.     auth:{
  6. <template>
  7.   
  8.    <my-tabbar :list="list" selectedColor="#f00"></my-tabbar>
  9.   
  10. </template> user:'XXX@qq.com',  // QQ邮箱
  11. <template>
  12.   
  13.    <my-tabbar :list="list" selectedColor="#f00"></my-tabbar>
  14.   
  15. </template> pass:'XXXXXXX',  // 授权码
  16.     },
  17. })
复制代码
在通用返回组件通过获取当前激活路由信息来改变界面标题(components文件夹)

  1. this.$route.meta.title;
复制代码
在底部通用导航中,通过获取路由携带的信息来渲染底部组件(components文件夹)

  1. <template>
  2.   
  3.    <my-tabbar :list="list" selectedColor="#f00"></my-tabbar>
  4.   
  5. </template>
复制代码
根据路由激活后isActive来确定是否选中(components文件夹)

  1. :class="['tab-bar-item', isActive && 'router-link-active', isExactActive && 'router-link-exact-active']"
复制代码
只有isActive,isExactActive为真才会有属性router-link-active,router-link-exact-active也就是渲染样式
放置全局前置守卫来判定是否登录(router文件夹)

  1. // 全局前置路由守卫,实现页面拦截
  2. router.beforeEach((to,from,next)=>{
  3.   if(to.meta?.permission){ // 在登录后才能访问的路由中有meta={permission:true}
  4.     if(store.state.shoppingCart.token){
  5.       next()
  6.     }else{
  7.       next('/login')
  8.     }
  9.   }else{
  10.     next()
  11.   }
  12. })
复制代码

store仓库,仓库中的数据在启用命名空间后只能在store中进行更改,并且调用时要加上仓库名称


  1. namespaced: true, // 命名空间(名字空间)
复制代码

  1. export default new Vuex.Store({
  2.   strict: process.env.NODE_ENV !== 'production', // 启用严格模式,保证在mutation中更改数据
  3.   modules: {
  4.     shoppingCart, //shoppingCart 是这个模块命名空间
  5.   },
  6.   plugins: [createPersistedState({
  7.     storage: sessionStorage, // 默认是向 localStorage 中保存数据
  8.     paths:[
  9.       'shoppingCart.token',
  10.       'shoppingCart.name',
  11.     ],
  12.   })],
  13. })
复制代码

  1. import { mapActions,mapGetters } from 'vuex' // 引入映射
  2. export default {
  3.   name:'cart',
  4.   computed:{
  5.     carts(){
  6.       return this.$store.state.shoppingCart.carts
  7.     },
  8.     ...mapGetters('shoppingCart',['allChecked','allMoney']), // 前面加入模块名shoppingCart
  9.   },
  10.   methods:{
  11.     ...mapActions('shoppingCart',['removeCart','changNumCart','changCheckedSingle','changCheckedAll']),
  12.     // 前面加入模块名shoppingCart
  13.     onSubmit(){
  14.       console.log("提交订单");
  15.     },
  16.     onClickEditAddress(){
  17.       console.log('修改地址');
  18.     },
  19.   },
  20. }
复制代码
分类页面刚进入就显示商品信息

  1. created(){    this.$router.push({      name:'sub',      params:{<template>
  2.   
  3.    <my-tabbar :list="list" selectedColor="#f00"></my-tabbar>
  4.   
  5. </template> name:this.navList[0],      },    })  },
复制代码
也就是在分类页面加载好后即向子路由发送网络请求拿到第一个分类商品中的数据
项目结构


移动端适配

直接通过PC端写的代码在移动端不同的设备上,布局会出现问题

让不同设备的视口取得最佳CSS像素

  1. [/code] [size=5]安装 postcss,postcss-pxtorem,postcss-loader,postcss-import,postcss-url一系列插件[/size]
  2. [code]npm install postcss@8.2.6 --save
复制代码
  1. npm install postcss-import@14.0.0 --save
复制代码
  1. npm install postcss-loader@5.0.0 --save
复制代码
  1. npm install postcss-pxtorem@5.1.1 --save
复制代码
  1. npm install postcss-url@10.1.1 --save
复制代码
在项目根目录下添加 .postcssrc.js 文件

  1. module.exports = {
  2.   plugins: {
  3.     'postcss-pxtorem': {
  4.       rootValue: 32, //根目录的字体大小设为32px
  5.       propList: ['*'], //proplist:是那些属性需要转换成rem,全部
  6.       minPixelValue: 2 //最小转换单位.2px
  7.     }
  8.   }
  9. };
复制代码
在项目中index.html的头部添加下面这段js代码:

[code][/code] 注:设计师制作的效果图常为750px,为了方便直接读取UI标好的像素大小,根目录的字体大小就设置为32px;
打包

HBuilder X

新建项目


调试


打包





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4