node.js毕业设计更美个人美妆穿搭分享微信小程序(源码+程序+LW+部署)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流

项目运行

环境配置:

Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue+Express

项目技术:

Express框架 + Node.js+ Vue 等等组成,B/S模式 +Vscode管理+前后端分离等等。

环境需要

1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可以。

2.开发环境:Vscode或HbuilderX都可以。推荐HbuilderX;

3.mysql环境:建议是用5.7版本均可

4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;

6.Navcat11:这个版本不限10/11/14/15都可以。;

Node.js毕设帮助,指导,本源码(见文末),调试部署

3.2 总体设计

根据更美个人美妆穿搭分享系统的功能需求,进行系统设计。

前台功能:用户进入系统可以实现首页,信息推送,用户分享,我的等内容,在我的页面可以对用户分享,我的收藏管理,在线留言进行详细操作;

后台主要是管理员,管理员主要包括首页,个人中心,用户管理,分类管理,信息推送管理,用户分享管理,系统管理等功能;

系统对这些功能进行整合,产生的功能结构图如下图所示:

 

图3-1 系统总体设计图

3.3 数据库设计

在每一个系统中数据库有着非常重要的作用,数据库的设计得好将会增加系统的效率以及系统各逻辑功能的实现。所以数据库的设计我们要从系统的实际需要出发,才能使其更为完美的符合系统功能的实现。

3.3.1 数据库E-R图

E-R图为实体-关系图,本系统的E-R图展现了各个实体之间的关系,在本数据库中,各个实体之间的关系均为多对多的关系,如下图:

用户注册属性图如图3-2所示。

 

 图3-2用户注册实体属性图

信息推送实体属性图如图3-3所示。

 

图3-3信息推送实体属性图

用户分享实体属性图如图3-4所示。

 

图3-4用户分享实体属性图

4.1 前台功能模块

用户要登录微信小程序,则需要注册。通过输入用户名,密码,姓名,性别,手机,邮箱等信息进行用户注册,如图4-1所示。

 

图4-1用户注册界面图

其页面代码如下:

  */

      @IgnoreAuth

    @RequestMapping("/register")

    public R register(@RequestBody YonghuEntity yonghu){

         //ValidatorUtils.validateEntity(yonghu);

         YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));

             if(user!=null) {

                    return R.error("注册用户已存在");

             }

             Long uId = new Date().getTime();

             yonghu.setId(uId);

        yonghuService.insert(yonghu);

        return R.ok();

    }

前台登录:通过注册时输入账号、密码、选择登录的角色,进行登录,如图4-2所示。

 

图4-2前台登录界面图

其页面代码如下:

form.on('submit(login)', function(data) {

                data = data.field;

                if (vue.roles.length!=1) {

                  if (!data.role) {

                        layer.msg('请选择登录用户类型', {

                           time: 2000,

                           icon: 5

                        });

                        return false;

                    }

                } else {

                        data.role = vue.roles[0].tableName;

                }

                http.request(data.role + '/login', 'get', data, function(res) {

                    layer.msg('登录成功', {

                        time: 2000,

                        icon: 6

                    });

                    // 登录凭证

                    localStorage.setItem('Token', res.token);

                    var roleName = "";

                    if(typeof(jquery('#role:checked').attr('title')) == "undefined") {

                    roleName = vue.roles[0].roleName;

                    } else {

                    roleName = jquery('#role:checked').attr('title');

                    }

                    localStorage.setItem('role', roleName);

                    // 当前登录用户角色

                    localStorage.setItem('userTable', data.role);

                    localStorage.setItem('sessionTable', data.role);

                    // 用户名称

                    localStorage.setItem('adminName', data.username);

                    http.request(data.role + '/session', 'get', {}, function(res) {

                        // 用户id

                        localStorage.setItem('userid', res.data.id);

                       if(res.data.vip) {

                           localStorage.setItem('vip', res.data.vip);

                       }

                        // 路径访问设置

                        window.location.href = '../../index.html';

                    })

                   

                });

                return false

            });

        });

        /**

         * 跳转登录

         * @param {Object} tablename

         */

        function registerClick(tablename) {

            window.location.href = '../' + tablename + '/register.html?tablename=' + tablename;

        }

登录更美个人美妆穿搭分享小程序首页,用户可以进行首页,信息推送,用户分享,我的等功能的查看与操作,如图4-3所示。

 

图4-3小程序首页界面图

methods: {

        jump(url) {

             if (this.queryIndex == 0) {

                    localStorage.setItem('indexQueryCondition', document.getElementById("dianyingxinxidianyingmingcheng").value);

             }

                 jump(url)

        },

      queryChange(event) {

             this.queryIndex = event.target.value;

             if (this.queryIndex == 0) {

                    this.dianyingxinxidianyingmingcheng = this.queryList[event.target.value].queryName;

             }

      }

      }

    });

    layui.use(['layer', 'form', 'element', 'carousel', 'http', 'jquery'], function() {

             var layer = layui.layer;

             var element = layui.element;

             var form = layui.form;

             var carousel = layui.carousel;

             var http = layui.http;

             var jquery = layui.jquery;

      vue.baseurl=http.baseurl;

      // 获取轮播图 数据

      http.request('config/list', 'get', {

        page: 1,

        limit: 5

      }, function(res) {

        if (res.data.list.length > 0) {

          let swiperList = [];

          res.data.list.forEach(element => {

            if (element.value != null) {

              swiperList.push({

                img: http.baseurl + element.value

              });

            }

          });

               vue.swiperList = swiperList;

               vue.$nextTick(() => {

                 carousel.render({

                       elem: '#test1',

                           width: '89.6%',

                       height: '500px',

                       arrow: 'hover',

                       anim: 'default',

                       autoplay: 'true',

                       interval: '3000',

                       indicator: 'inside'

                 });

               })

          // vue.$nextTick(()=>{

          //   window.xznSlide();

          // });

        }

      });

 

      http.request('news/list', 'get', {

        page: 1,

        order: 'desc'

      }, function(res) {

        var newsList = res.data.list;

             for(var i = 0; i<newsList.length; i++) {

                    let d = newsList[i].addtime.split(' ')

                    d = d[0].split('-')

                    newsList[i].year = d[0]

                    newsList[i].month = d[1] + '-' + d[2]

             }

            

        vue.newsList = newsList;

        if (newsList.length > 0 && newsList.length <= 2) {

          vue.leftNewsList = res.data.list

        } else {

          var leftNewsList = []

          for (let i = 0; i <= 2; i++) {

            leftNewsList.push(newsList[i]);

          }

          vue.leftNewsList = leftNewsList

        }

        if (newsList.length > 2 && newsList.length <= 8) {

          var rightNewsList = []

          for (let i = 3; i <= newsList.length; i++) {

            rightNewsList.push(newsList[i]);

          }

          vue.rightNewsList = rightNewsList

        }

             let flag = 10;

             let options = {"navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},"slidesPerView":5,"loop":true,"spaceBetween":20,"autoplay":{"delay":3000,"disableOnInteraction":false}}

             options.pagination = {el:'null'}

             if(flag == 3) {

                    vue.$nextTick(() => {

                           new Swiper('#newsnews', options)

                    })

             }

            

             if(flag == 6) {

                    let sixSwiper = {

                           loop: true,

                           speed: 2500,

                           slidesPerView: 3,

                           spaceBetween: 10,

                           centeredSlides: true,

                           watchSlidesProgress: true,

                           autoplay: {

                             delay: 0,

                             stopOnLastSlide: false,

                             disableOnInteraction: false

                           }

                    }

                   

                    vue.$nextTick(() => {

                           new Swiper('#new-list-6', sixSwiper)

                    })

             }

      });

      // 获取推荐信息

      var autoSortUrl = "dianyingxinxi/autoSort";

      if(localStorage.getItem('userid')!=null) {

           autoSortUrl = "dianyingxinxi/autoSort2";

      }

      http.request(autoSortUrl, 'get', {

        page: 1,

      limit: 3 * 1

             }, function(res) {

                    vue.dianyingxinxiRecommend = res.data.list

                    let flag = 1;

                    let options = {"navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},"slidesPerView":5,"loop":true,"spaceBetween":20,"autoplay":{"delay":3000,"disableOnInteraction":false}}

                    options.pagination = {el:'null'}

                    if(flag == 3) {

                           vue.$nextTick(() => {

                                         new Swiper('#recommenddianyingxinxi', options)

                           })

                    }

                   

            

                    if(flag == 5) {

                           vue.$nextTick(() => {

                                  var swiper = new Swiper('#recommend-five-swiperdianyingxinxi', {

                                         loop: true,

                                         speed: 500,

                                         slidesPerView: 5,

                                         spaceBetween: 10,

                                         autoplay: {"delay":3000,"disableOnInteraction":false},

                                         centeredSlides: true,

                                         watchSlidesProgress: true,

                                         on: {

                                                setTranslate: function() {

                                                       slides = this.slides

                                                       for (i = 0; i < slides.length; i++) {

                                                              slide = slides.eq(i)

                                                              progress = slides[i].progress

                                                              // slide.html(progress.toFixed(2)); //看清楚progress是怎么变化的

                                                              slide.css({

                                                                     'opacity': '',

                                                                     'background': ''

                                                              });

                                                              slide.transform(''); //清除样式

                                 

                                                              slide.transform('scale(' + (1.5 - Math.abs(progress) / 4) + ')');

                                                       }

                                                },

                                                setTransition: function(transition) {

                                                       for (var i = 0; i < this.slides.length; i++) {

                                                              var slide = this.slides.eq(i)

                                                              slide.transition(transition);

                                                       }

                                                },

                                         },

                                         navigation: {"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},

                                         pagination: {"el":".swiper-pagination","clickable":true},

                                  });

                           })

                    }

             });

  });

信息推送:在信息推送页面,可以查看名称,图片,风格,分类,注意事项,视频,点击次数,详情等内容,也能对信息推送进行评论或收藏等操作,如图4-4所示。

 

图4-4信息推送界面图

用户分享:在用户分享页面,可以查看分享标题,分享类型,分享图片,分享视频,分享日期,用户名,邮箱,分享内容等内容,也能对用户分享进行收藏操作,如图4-4所示。

 

图4-4用户分享界面图

用户:在我的页面,可以对用户分享,我的收藏管理,在线留言等功能进行相应的操作,如图4-5所示。

 

图4-5 我的界面图

用户信息:点击用户信息,通过输入用户名,密码,姓名,性别,头像,手机,邮箱等内容,点击保存来更新用户信息,也可以点击退出登录,退出系统,如图4-6所示。

 

图4-6用户信息界面图

4.2管理员功能模块

管理员登录,通过输入账号和密码,选择角色等信息进行登录操作,如下图所示。 

 

图4-7管理员登录界面图

其页面代码如下:

mounted() {

      let menus = menu.list();

      this.menus = menus;

        },

  created() {

    this.getRandCode()

     

  },

  methods: {

    register(tableName){

      this.$storage.set("loginTable", tableName);

      this.$router.push({path:'/register'})

    },

    // 登陆

    login() {

      if (!this.rulesForm.username) {

         this.$message.error("请输入用户名");

        return;

      }

      if (!this.rulesForm.password) {

         this.$message.error("请输入密码");

        return;

      }

      if (!this.rulesForm.role) {

         this.$message.error("请选择角色");

        return;

      }

      let menus = this.menus;

      for (let i = 0; i < menus.length; i++) {

        if (menus[i].roleName == this.rulesForm.role) {

          this.tableName = menus[i].tableName;

        }

      }

      this.$http({

        url: `${this.tableName}/login?username=${this.rulesForm.username}&password=${this.rulesForm.password}`,

        method: "post"

      }).then(({ data }) => {

        if (data && data.code === 0) {

          this.$storage.set("Token", data.token);

          this.$storage.set("role", this.rulesForm.role);

          this.$storage.set("sessionTable", this.tableName);

          this.$storage.set("adminName", this.rulesForm.username);

          this.$router.replace({ path: "/index/" });

        } else {

          this.$message.error(data.msg);

        }

      });

},

管理员登录到更美个人美妆穿搭分享小程序后,可以对首页,个人中心,用户管理,分类管理,信息推送管理,用户分享管理,系统管理等功能进行相应操作,如下图所示:

 

图4-8管理员功能界面图

用户管理:在用户管理页面,可以对索引,用户名,姓名,性别,头像,手机,邮箱等用户信息进行详情、修改和删除等操作,如下图所示。

 

图4-9用户管理界面图

分类管理:在分类管理页面,可以对索引,分类信息进行详情、修改和删除等操作,如下图所示。

 

图4-10分类管理界面图

信息推送管理:在信息推送管理页面,可以对索引,名称,风格,分类,图片,视频,注意事项等信息进行详情,修改,查看评论和删除等操作,如下图所示。

 

图4-11信息推送管理界面图

用户分享管理:在用户分享管理页面,可以对索引,分享标题,分享类型,分享图片,分享视频,分享日期,用户名,邮箱等信息进行详情或删除操作,如下图所示。

 

图4-12用户分享管理界面图

Node.js毕设帮助,指导,源码获取,调试部署

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序是腾讯公司开发的一种应用程序框架,旨在帮助开发人员快速构建自己的应用程序,并且能够方便地在微信生态环境中进行推广和传播。Node.js是一种基于事件驱动、非阻塞I/O模型的服务器端JavaScript环境,可以方便地构建高效的网络应用程序。在这两个技术的结合下,我们可以构建出非常优秀的微信小程序,实现各种有趣、实用的功能。 使用Node.js开发微信小程序,我们可以方便地处理各种异步请求,包括网络请求、数据库请求等。同时,Node.js也提供了非常多的第三方库和模块,可以用来处理常用的任务,例如加密、压缩、日志记录等。这些库和模块,可以方便地在微信小程序中进行调用,减少了我们开发过程中的工作量。 微信小程序Node.js的结合,也可以实现一些高端的功能,例如实现WebSocket协议进行即时通讯、使用WebRTC协议进行音视频通话等。这些功能,可以让我们的微信小程序变得加有趣、实用,在用户中获得高的使用度和评价。 总而言之,微信小程序Node.js的结合,可以帮助我们快地构建出优秀的网络应用程序,同时也可以实现多的功能,提升微信小程序的价值和竞争力。 ### 回答2: 微信小程序是一种可以在微信里面运行的轻量级应用程序。而Node.js则是一种基于Chrome V8引擎的JavaScript运行环境,可以在服务器端运行JavaScript代码。 微信小程序使用JavaScript语言进行编程,在开发过程中需要使用到Node.js的一些模块和工具,并且微信开发者工具也是基于Node.js开发的。例如,小程序开发中需要用到的网络请求、文件读写、加密解密等功能,都可以通过Node.js提供的模块实现。同时,Node.js的工具包也可以为小程序的开发带来便利,例如Webpack和Babel可以帮助我们进行代码打包和转换,ESLint可以检测我们代码中的潜在问题等等。 在小程序的开发中,Node.js也可以帮助我们实现一些复杂的业务逻辑。例如,我们可以使用Node.js开发一个服务端应用,用于提供小程序的数据接口、推送消息、定时任务等服务。这样的话,小程序的开发人员只需要调用这些服务的接口即可,而不必关心具体的实现细节。 总而言之,微信小程序Node.js可以互相促进,在小程序的开发中可以使用Node.js提供的工具和服务,来提升应用程序的性能和功能。 ### 回答3: 微信小程序开发是一项新兴的技术,而Node.js则是一种非常流行的后端开发技术。结合这两者可以实现加强大的微信小程序开发。Node.js可以利用它强大的IO处理能力,为微信小程序提供后台服务,实现小程序业务逻辑的处理、数据的存储和管理等功能。同时,通过Node.js还可以进行与数据库的交互、实现数据的持久化等功能。此外,Node.js还拥有一些优秀的微信小程序开发框架,如WePY、mpvue等,这些框架可以快速地创建小程序,提高开发效率。 当我们使用Node.js进行微信小程序开发时,要注意一些小细节。首先需要了解微信小程序Node.js的交互方式,可以使用微信小程序提供的API与Node.js进行通信,实现数据的传递。此外,还需要注意小程序的安全性问题,尤其是在与后台服务进行交互时,需要加强安全防护,避免出现信息泄露等安全问题。最后,还需要掌握一些微信小程序Node.js的相关技术,如微信小程序开发规范、Node.js框架等。 总之,微信小程序Node.js的结合可以为小程序提供加丰富的功能和加优秀的用户体验,具有非常广阔的发展前景,前景非常广阔。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值