• 基于微信小程序+Java+Vue+MySQL的菜谱分享小程序


    目录

    菜谱分享小程序开发文档

    如何运行

    后端运行

    微信小程序端运行

    项目概览

    开发环境

    数据库

    新表有数据

    数据库创建

    前后端交互

    资源

    分页面介绍(重点)

    首页

    搜索页

    分类页

    菜谱详细内容页

    发布/编辑页

    个人中心页

    登录授权页

    我的发布页 & 我的收藏页

    其他

    项目运行注意

    如何运行

    后端运行

    克隆项目之后,打开 IDEA 或者 Ecplise,导入 Maven 项目(前提,本地已经安装 JDK,Maven),运行 Main 方法即可

    微信小程序端运行

    前提:本地机器安装了 Node.js

    克隆完前端微信小程序的项目之后,导入到微信小程序开发者工具,修改为自己的 AppId(必须)
    设置不校验合法域名
    构建 npm
    等待构建完成即可运行
    默认请求的后端地址是我的服务器地址,随时可能会无法请求,如果出现构建完成页面中没有数据的情况,请在本地创建数据库,并启动本地的后端项目,并将微信小程序项目中的 resquest/http.js 里面的请求地址修改为本地地址
    const serverIp = “http://127.0.0.1:3000/api”
    项目概览
    项目分为前端(微信小程序端)和后端项目,前端项目名称为 gourmet-web,后端项目名称为 gourmet-api。
    项目结构为前后端分离结构,前后端使用 JSON 格式进行交互。
    数据库使用 MySQL 8.0。
    开发环境
    微信小程序端
    · 开发工具:微信开发者工具、Visual Studio Code
    · 使用 webpack 管理项目
    · 微信小程序端使用原生开发框架
    · 使用 npm 管理项目依赖
    · 项目开发的所有图标资源均使用阿里巴巴矢量图库
    · 使用 axios 发起服务端请求
    · 调试基本库选择 2.13.1
    · 使用 Git 进行版本控制
    服务端
    · 开发语言:Java
    · 开发工具:IntelliJ IDEA
    · 主要框架:Spring Boot 、MyBatis

    · 使用 Maven 管理项目

    · 使用 Git 对项目进行版本控制

    数据库

    · 数据库类型:MySQL 8.0

    · 统一字符编码:utf8mb4

    · 数据库管理工具:Navicat Premium

    服务器

    · 腾讯云服务器:1 核 1GB 带宽 1M

    · 系统:CentOS 7.5

    · JDK 版本:JDK8

    · 管理工具:XShell、Xftp

    数据库

    表概览(6)

    · 菜谱主表

    · 用料表

    · 菜谱浏览记录表

    · 分类表(两级或三级分类)

    · 用户表

    · 用户收藏表

    本文转载自:http://www.biyezuopin.vip/onews.asp?id=16554

    // 引入全局mixin
    import mixin from './libs/mixin/mixin.js'
    // 引入关于是否mixin集成小程序分享的配置
    // import wxshare from './libs/mixin/mpShare.js'
    // 全局挂载引入http相关请求拦截插件
    import http from './libs/request'
    
    function wranning(str) {
    	// 开发环境进行信息输出,主要是一些报错信息
    	// 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:
    	// 	https://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e5%92%8c%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83
    	if (process.env.NODE_ENV === 'development') {
    		console.warn(str)
    	}
    }
    
    // 尝试判断在根目录的/store中是否有$u.mixin.js,此文件uView默认为需要挂在到全局的vuex的state变量
    // HX2.6.11版本,放到try中,控制台依然会警告,暂时不用此方式,
    // let vuexStore = {};
    // try {
    // 	vuexStore = require("@/store/$u.mixin.js");
    // } catch (e) {
    // 	//TODO handle the exception
    // }
    
    // post类型对象参数转为get类型url参数
    import queryParams from './libs/function/queryParams.js'
    // 路由封装
    import route from './libs/function/route.js'
    // 时间格式化
    import timeFormat from './libs/function/timeFormat.js'
    // 时间戳格式化,返回多久之前
    import timeFrom from './libs/function/timeFrom.js'
    // 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制
    import colorGradient from './libs/function/colorGradient.js'
    // 生成全局唯一guid字符串
    import guid from './libs/function/guid.js'
    // 主题相关颜色,info|success|warning|primary|default|error,此颜色已在uview.scss中定义,但是为js中也能使用,故也定义一份
    import color from './libs/function/color.js'
    // 根据type获取图标名称
    import type2icon from './libs/function/type2icon.js'
    // 打乱数组的顺序
    import randomArray from './libs/function/randomArray.js'
    // 对象和数组的深度克隆
    import deepClone from './libs/function/deepClone.js'
    // 对象深度拷贝
    import deepMerge from './libs/function/deepMerge.js'
    // 添加单位
    import addUnit from './libs/function/addUnit.js'
    
    // 规则检验
    import test from './libs/function/test.js'
    // 随机数
    import random from './libs/function/random.js'
    // 去除空格
    import trim from './libs/function/trim.js'
    // toast提示,对uni.showToast的封装
    import toast from './libs/function/toast.js'
    // 获取父组件参数
    import getParent from './libs/function/getParent.js'
    // 获取整个父组件
    import $parent from './libs/function/$parent.js'
    // 获取sys()和os()工具方法
    // 获取设备信息,挂载到$u的sys()(system的缩写)属性中,
    // 同时把安卓和ios平台的名称"ios"和"android"挂到$u.os()中,方便取用
    import {sys, os} from './libs/function/sys.js'
    // 防抖方法
    import debounce from './libs/function/debounce.js'
    // 节流方法
    import throttle from './libs/function/throttle.js'
    
    
    // 配置信息
    import config from './libs/config/config.js'
    // 各个需要fixed的地方的z-index配置文件
    import zIndex from './libs/config/zIndex.js'
    
    const $u = {
    	queryParams: queryParams,
    	route: route,
    	timeFormat: timeFormat,
    	date: timeFormat, // 另名date
    	timeFrom,
    	colorGradient: colorGradient.colorGradient,
    	colorToRgba: colorGradient.colorToRgba,
    	guid,
    	color,
    	sys,
    	os,
    	type2icon,
    	randomArray,
    	wranning,
    	get: http.get,
    	post: http.post,
    	put: http.put,
    	'delete': http.delete,
    	hexToRgb: colorGradient.hexToRgb,
    	rgbToHex: colorGradient.rgbToHex,
    	test,
    	random,
    	deepClone,
    	deepMerge,
    	getParent,
    	$parent,
    	addUnit,
    	trim,
    	type: ['primary', 'success', 'error', 'warning', 'info'],
    	http,
    	toast,
    	config, // uView配置信息相关,比如版本号
    	zIndex,
    	debounce,
    	throttle,
    }
    
    // $u挂载到uni对象上
    uni.$u = $u
    
    const install = Vue => {
    	Vue.mixin(mixin) 
    	if (Vue.prototype.openShare) {
    		Vue.mixin(mpShare);
    	}
    	// Vue.mixin(vuexStore);
    	// 时间格式化,同时两个名称,date和timeFormat
    	Vue.filter('timeFormat', (timestamp, format) => {
    		return timeFormat(timestamp, format)
    	})
    	Vue.filter('date', (timestamp, format) => {
    		return timeFormat(timestamp, format)
    	})
    	// 将多久以前的方法,注入到全局过滤器
    	Vue.filter('timeFrom', (timestamp, format) => {
    		return timeFrom(timestamp, format)
    	})
    	Vue.prototype.$u = $u
    }
    
    export default {
    	install
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Vue的安装与配置
    vue-cli创建项目(详情步骤)
    Interceptor内存马
    Java终止线程的三种方式
    前端笔记(11) Vue3 Router 编程式导航 router.push router.replace
    【第34天】异或 ^ 的神奇 | 排除偶次重复
    Jmeter核心使用教程
    手拉手一起学HTML(下)——表格标签和列表标签,表单标签
    基于JavaSwing开发推箱子小游戏(不同版) 课程设计 大作业源码
    怎么判断list是否为null
  • 原文地址:https://blog.csdn.net/newlw/article/details/126126361