基于java SpringBoot和Vue uniapp的影楼摄影预约小程序

摘要

        今天信息技术的发展很快,其足迹在我们的生活中随处可见。它影响着我们的衣食住行等各种需求。影响也在逐渐增加,逐渐渗透到各行各业,在这种背景下,经过实地考察后,为了让婚纱照管理更加高效方便,我决定开发一个摄影棚预约管理系统。随着社会的进步和时代的发展,科学技术不断向前发展,在21世纪,这是一个信息技术的时代。计算机技术的时代日新月异,计算机以前所未有的创新方式改变着世界的面貌,人们的现代化速度越来越快,生活方式发生了前所未有的新变化。计算机可以解决的问题数量大大增加,可以更有效地处理实际问题,节省大量时间。为此,影楼摄影预约系统的设计符合当前的现实。

实现的功能

本系统分为普通用户和管理员两种角色,普通用户是小程序端,管理员是PC浏览器端。

功能应该包括:注册登录、预约摄影功能、选择场景管理订单、分享照片的社区、个人中心等功能。

注册、登录:未注册用户可以注册,有了账号后可以登录小程序;

预约摄影功能:用户通过小程序登录后可以选择预约摄影;

选择场景管理订单:根据不同的订单管理自己预约信息;

分享照片的社区:主要是用户可以把自己喜欢的照片分享出去,也可以起到给影楼引流和宣传的作用;

个人中心:用户可以管理自己的个人信息。

用到的技术

后端 java语言的SpringBoot框架,MySql数据库,Maven依赖管理;

前端 Vue.js语法的UniApp框架。

部分代码展示

<template><view class="container"><!-- 小程序头部兼容 --><!-- #ifdef MP --><view class="mp-search-box"><input @confirm="search" class="ser-input" type="text" value="输入关键字搜索"  /></view><!-- #endif --><!-- 头部轮播 --><view class="carousel-section"><!-- 标题栏和状态栏占位符 --><view class="titleNview-placing"></view><!-- 背景色区域 --><view class="titleNview-background" :style="{backgroundColor:titleNViewBackground}"></view><swiper class="carousel" circular @change="swiperChange"><swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item" @click="navToDetailPage({title: '轮播广告'})"><image mode="aspectFill" :src="item.src" /></swiper-item></swiper><!-- 自定义swiper指示器 --><view class="swiper-dots"><text class="num">{{swiperCurrent+1}}</text><text class="sign">/</text><text class="num">{{swiperLength}}</text></view></view><view class="block-wrap"><u-grid :col="4" :border="false" ><u-grid-item index="0" @click="changeType(0)" ><image class="gn-icon" src="/static/picture-album.png"></image><view class="grid-text" :class="tab==0?'selTab':''">摄影服装</view></u-grid-item><u-grid-item index="1" @click="changeType(1)" ><image class="gn-icon" src="/static/map-draw.png"></image><view class="grid-text"  :class="tab==1?'selTab':''">拍摄场地</view></u-grid-item><u-grid-item index="2"><image class="gn-icon" @click="toOrder()" src="/static/camera.png"></image><view class="grid-text">预约拍摄</view></u-grid-item></u-grid></view><!-- 分类 --><!-- <view class="cate-section"><view class="cate-item" v-for="(item,index) in typeList" :key="item.id" @click="navTo(item.id)"><image :src="'/static/temp/t'+(index+1)+'.png'"></image><text>{{item.name}}</text></view></view> --><!-- <view class="ad-1"><image src="/static/temp/hot.png" mode="scaleToFill"></image></view> --><!-- 猜你喜欢 --><view class="f-header m-t"><image src="/static/temp/h1.png"></image><view class="tit-box"><text class="tit">{{ tab == 0?"服装列表":"场地列表" }}</text><text class="tit2">{{ tab == 0?"Cloth":"Place" }}</text></view><!-- <text class="yticon icon-you"></text> --></view><view class="guess-section"><view v-for="(item, index) in dataList" :key="index"class="guess-item"@click="toInfo(item)"><view class="image-wrapper"><image :src="picUrl+item.pic1" mode="aspectFill"></image></view><text class="title clamp">{{item.name}}</text><view class="base" ><view v-if="index2<3" class="tag" v-for="(item2,index2) in splitTag(item.tag)" :key="index2">{{item2}}</view></view><text class="price">{{tab==0?"服装":"影棚"}}租金:¥{{item.price}}</text></view></view></view>
</template><script>import appRequest from "@/common/appRequestUrl.js";export default {data() {return {tab:0,picUrl:appRequest.urlMap.getPicById,titleNViewBackground: '',swiperCurrent: 0,swiperLength: 0,carouselList: [],dataList: [],user:"",typeList:[],userInfo:"",name:""};},onLoad() {this.getData();// this.getType();	//options},onShow() {// this.user = appRequest.getUserInfo();// this.getGoods();},onNavigationBarSearchInputConfirmed(e) {if(e.text){this.name = e.text;this.getData();}},methods: {toOrder(){uni.navigateTo({url:"/pages/order/order"})},search(e) {this.name = e.detail.value;this.getData();},splitTag(text){return text.split(" ");},changeType(index){this.tab = index;if(index<2){this.getData();}},toLogin(){let _this = this;let userInfo = appRequest.getUserInfo();if(!userInfo){wx.login({success(res) {if (res.code) {let code = res.code;uni.showModal({title: "登录",content: "请授权获取微信信息用于登录",success: function(res) {if (res.confirm) {_this.getUserLogin(code);}}})} else {console.log('登录失败!' + res.errMsg)}}})}else{this.userInfo = userInfo;}},getUserLogin(code){let _this = this;uni.clearStorage();wx.getUserProfile({desc: '使用前需要微信授权登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {console.log(JSON.stringify(res));appRequest.request({method: "GET",data: {code: code,enData: res.encryptedData,iv:res.iv,userInfo:res.userInfo},url: appRequest.urlMap.loginCheck,success: function(res) {if(res.data.code == 200){try {uni.setStorageSync('userInfo', res.data.data);uni.switchTab({url:"/pages/index/index"})} catch (e) {//callback()uni.clearStorage();}	}else{//callback()}},fail: function(res) {//callback();}})},fail: (err) => {console.log(err);}})},toInfo(item){uni.navigateTo({url:"../product/product?id="+item.id})},navTo(id){try {uni.setStorageSync('currId', id);} catch (e) {}	uni.switchTab({url:"../category/category"})},getData(){let _this = this;appRequest.request({method: "POST",url: appRequest.urlMap.findPhClothPlaceList,data:{type:_this.tab,validFlag:1,name:_this.name},success: function(res) {if(res.data.code == 200){_this.dataList = res.data.data;_this.carouselList = [];_this.swiperLength = 3;for(var i=0;i<3;i++){var obj = _this.dataList[i];if(obj){_this.carouselList.push({src: _this.picUrl+obj.pic1,background: "rgb(203, 87, 60)"});}}}else{_this.$api.msg(res.data.msg);}},fail: function(res) {_this.$api.msg("请求异常");}})},/*** 请求静态数据只是为了代码不那么乱* 分次请求未作整合*/async loadData() {let carouselList = await this.$api.json('carouselList');this.titleNViewBackground = carouselList[0].background;this.swiperLength = 5;this.carouselList = carouselList;// let goodsList = await this.$api.json('goodsList');// this.goodsList = goodsList || [];},//轮播图切换修改背景色swiperChange(e) {const index = e.detail.current;this.swiperCurrent = index;this.titleNViewBackground = this.carouselList[index].background;},//详情页navToDetailPage(item) {//测试数据没有写id,用title代替let id = item.title;uni.navigateTo({url: `/pages/product/product?id=${id}`})}}}
</script>

演示视频

基于SpringBoot和UniAPP影楼摄影预约小程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac系统 AndroidStudio Missing essential plugin:org.jetbrains.android报错

打开Android Studio,提示 Missing essential plugin:org.jetbrains.android错误&#xff0c;产生的原因是Kotlin被禁用。 解决的方法是删除disabled_plugins.txt&#xff0c;Mac OS对应的路径为&#xff1a; /Users/xzh/Library/Application Support/Google/AndroidStudio202…

C高级 DAY4

一、分支语句 case ...in语句 shell中的switch语句 case $变量名 in常量1)语句;; ------->类似于C中break的作用&#xff0c;;;除了最后一条分之外&#xff0c;都不能省略常量2)语句;; 常量n)语句;;*) ------->类似于C中default&#xff0c;但…

【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》

写在前面 2022年11月30日&#xff0c;ChatGPT模型问世后&#xff0c;立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者&#xff0c;都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说&#xf…

【多线程】volatile 关键字

volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作&#xff0c;另一个线程针对这个变量进行修改操作&#xff0c; 此时读到的值&#xff0c;不一定是修改后的值&#xff0c;即这个读线…

【动态规划】01背包问题

文章目录 动态规划&#xff08;背包问题&#xff09;1. 01背包2. 分割等和子集3. 目标和4. 最后一块石头的重量 || 动态规划&#xff08;背包问题&#xff09; 1. 01背包 题目链接 状态表示 dp[i][j] 表示从前i个物品当中挑选&#xff0c;总体积不超过j,所有选法当中能挑选出…

UDP协议

目录 一、UDP协议端格式 二、UDP的特点 一、UDP协议端格式 16位UDP长度&#xff0c;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的最大长度&#xff1b;如果校验和出错&#xff0c;就会直接丢弃 二、UDP的特点 UDP相对于TCP来说是相对简单的&#xff0c;但是在传输…

Redis:实现全局唯一id

&#xff08;笔记总结自《黑马点评》项目&#xff09; 一、全局ID生成器 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 二、原理 为了增加ID的安全性&#xff0c;我们可以不直接使用Redis自增的数值&…

测试----计算机网络

文章目录 计算机网络的历史OSI/RM 协议TCP/IP协议IP地址 计算机网络的历史 50-60年代 内部通讯功能&#xff08;连接的是同一台主机&#xff0c;只能主机和终端之间通信&#xff0c;终端和终端之间的通讯只能依靠主机来传输&#xff09;60-70年代 主机和主机之间能通讯70年代-…

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

chrome 谷歌浏览器 导出插件拓展和导入插件拓展

给同事部署 微软 RPA时&#xff0c;需要用到对应的chrome浏览器插件&#xff1b;谷歌浏览器没有外网是不能直接下载拓展弄了半小时后才弄好&#xff0c;竟发现没有现成的教程&#xff0c;遂补充&#xff1b; 如何打包导出 谷歌浏览器 地址栏敲 chrome://extensions/在对应的地…

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测 目录 分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于局部费歇尔判别数据降维的L…

upload-labs 16/17关

16 将gif文件和包含一句话木马的php文件放在同一目录下&#xff0c;用cmd的copy命令将php文件整合进文件中。 可以看到最后一行包含了注入代码 将b1文件上传到服务器后&#xff0c;发现并未能正常执行代码&#xff0c;将上传后的文件下载到本地&#xff0c;打开后发现最后的代…

Swift学习内容精选(一)

Swift 可选(Optionals)类型 Swift 的可选&#xff08;Optional&#xff09;类型&#xff0c;用于处理值缺失的情况。可选表示"那儿有一个值&#xff0c;并且它等于 x "或者"那儿没有值"。 Swfit语言定义后缀&#xff1f;作为命名类型Optional的简写&…

二进制链表转整数

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1&#xff1a; 输入&#xff1a;head [1,0,1] 输出&#xff1a;5 解释&#xff1a;二进制数 (101) 转化为十进…

OpenCV(二十六):边缘检测(二)

目录 1.Laplacian算子边缘检测 原理&#xff1a; Laplacian边缘检测函数Laplacian() 示例代码&#xff1a; 2.Canny算子边缘检测 原理&#xff1a; Canny算法函数Canny() 示例代码&#xff1a; 1.Laplacian算子边缘检测 原理&#xff1a; Laplacian算子的原理基于图像…

【Git-Exception】Git报错:fatal: unable to auto-detect email address

报错信息&#xff1a; *** Please tell me who you are. Run git config --global user.email “youexample.com” git config –global user.name “Your Name” to set your account’s default identity. Omit --global to set the identity only in this repository. fatal…

Prometheus+Grafana可视化监控【主机状态】

文章目录 一、介绍二、安装Prometheus三、安装Grafana四、Pronetheus和Grafana相关联五、监控服务器状态六、常见问题 一、介绍 Prometheus是一个开源的系统监控和报警系统&#xff0c;现在已经加入到CNCF基金会&#xff0c;成为继k8s之后第二个在CNCF托管的项目&#xff0c;在…

【Leetcode-面试经典150题-day22】

目录 97. 交错字符串 97. 交错字符串 题意&#xff1a; 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 …

【Java基础篇 | 面向对象】—— 继承

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 继承允许一个类继承另一个…

TCP协议

目录 一、TCP协议段格式 二、TCP原理 2.1 确认应答机制 2.2 超时重传机制 2.3 连接管理机制&#xff08;重点&#xff09; 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延迟应答 2.8 捎带应答 2.9 面向字节流&#xff08;粘包问题&#xff09; 2.10 TCP异常情况&#xff08;心…