当前位置:   article > 正文

基于java SpringBoot和Vue uniapp的影楼摄影预约小程序_婚纱展示小程序demo

婚纱展示小程序demo

摘要

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

实现的功能

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

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

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

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

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

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

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

用到的技术

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

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

部分代码展示

  1. <template>
  2. <view class="container">
  3. <!-- 小程序头部兼容 -->
  4. <!-- #ifdef MP -->
  5. <view class="mp-search-box">
  6. <input @confirm="search" class="ser-input" type="text" value="输入关键字搜索" />
  7. </view>
  8. <!-- #endif -->
  9. <!-- 头部轮播 -->
  10. <view class="carousel-section">
  11. <!-- 标题栏和状态栏占位符 -->
  12. <view class="titleNview-placing"></view>
  13. <!-- 背景色区域 -->
  14. <view class="titleNview-background" :style="{backgroundColor:titleNViewBackground}"></view>
  15. <swiper class="carousel" circular @change="swiperChange">
  16. <swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item" @click="navToDetailPage({title: '轮播广告'})">
  17. <image mode="aspectFill" :src="item.src" />
  18. </swiper-item>
  19. </swiper>
  20. <!-- 自定义swiper指示器 -->
  21. <view class="swiper-dots">
  22. <text class="num">{{swiperCurrent+1}}</text>
  23. <text class="sign">/</text>
  24. <text class="num">{{swiperLength}}</text>
  25. </view>
  26. </view>
  27. <view class="block-wrap">
  28. <u-grid :col="4" :border="false" >
  29. <u-grid-item index="0" @click="changeType(0)" >
  30. <image class="gn-icon" src="/static/picture-album.png"></image>
  31. <view class="grid-text" :class="tab==0?'selTab':''">摄影服装</view>
  32. </u-grid-item>
  33. <u-grid-item index="1" @click="changeType(1)" >
  34. <image class="gn-icon" src="/static/map-draw.png"></image>
  35. <view class="grid-text" :class="tab==1?'selTab':''">拍摄场地</view>
  36. </u-grid-item>
  37. <u-grid-item index="2">
  38. <image class="gn-icon" @click="toOrder()" src="/static/camera.png"></image>
  39. <view class="grid-text">预约拍摄</view>
  40. </u-grid-item>
  41. </u-grid>
  42. </view>
  43. <!-- 分类 -->
  44. <!-- <view class="cate-section">
  45. <view class="cate-item" v-for="(item,index) in typeList" :key="item.id" @click="navTo(item.id)">
  46. <image :src="'/static/temp/t'+(index+1)+'.png'"></image>
  47. <text>{{item.name}}</text>
  48. </view>
  49. </view> -->
  50. <!-- <view class="ad-1">
  51. <image src="/static/temp/hot.png" mode="scaleToFill"></image>
  52. </view> -->
  53. <!-- 猜你喜欢 -->
  54. <view class="f-header m-t">
  55. <image src="/static/temp/h1.png"></image>
  56. <view class="tit-box">
  57. <text class="tit">{{ tab == 0?"服装列表":"场地列表" }}</text>
  58. <text class="tit2">{{ tab == 0?"Cloth":"Place" }}</text>
  59. </view>
  60. <!-- <text class="yticon icon-you"></text> -->
  61. </view>
  62. <view class="guess-section">
  63. <view
  64. v-for="(item, index) in dataList" :key="index"
  65. class="guess-item"
  66. @click="toInfo(item)"
  67. >
  68. <view class="image-wrapper">
  69. <image :src="picUrl+item.pic1" mode="aspectFill"></image>
  70. </view>
  71. <text class="title clamp">{{item.name}}</text>
  72. <view class="base" >
  73. <view v-if="index2<3" class="tag" v-for="(item2,index2) in splitTag(item.tag)" :key="index2">{{item2}}</view>
  74. </view>
  75. <text class="price">{{tab==0?"服装":"影棚"}}租金:¥{{item.price}}</text>
  76. </view>
  77. </view>
  78. </view>
  79. </template>
  80. <script>
  81. import appRequest from "@/common/appRequestUrl.js";
  82. export default {
  83. data() {
  84. return {
  85. tab:0,
  86. picUrl:appRequest.urlMap.getPicById,
  87. titleNViewBackground: '',
  88. swiperCurrent: 0,
  89. swiperLength: 0,
  90. carouselList: [],
  91. dataList: [],
  92. user:"",
  93. typeList:[],
  94. userInfo:"",
  95. name:""
  96. };
  97. },
  98. onLoad() {
  99. this.getData();
  100. // this.getType();
  101. //options
  102. },onShow() {
  103. // this.user = appRequest.getUserInfo();
  104. // this.getGoods();
  105. },
  106. onNavigationBarSearchInputConfirmed(e) {
  107. if(e.text){
  108. this.name = e.text;
  109. this.getData();
  110. }
  111. },
  112. methods: {
  113. toOrder(){
  114. uni.navigateTo({
  115. url:"/pages/order/order"
  116. })
  117. },
  118. search(e) {
  119. this.name = e.detail.value;
  120. this.getData();
  121. },
  122. splitTag(text){
  123. return text.split(" ");
  124. },
  125. changeType(index){
  126. this.tab = index;
  127. if(index<2){
  128. this.getData();
  129. }
  130. },
  131. toLogin(){
  132. let _this = this;
  133. let userInfo = appRequest.getUserInfo();
  134. if(!userInfo){
  135. wx.login({
  136. success(res) {
  137. if (res.code) {
  138. let code = res.code;
  139. uni.showModal({
  140. title: "登录",
  141. content: "请授权获取微信信息用于登录",
  142. success: function(res) {
  143. if (res.confirm) {
  144. _this.getUserLogin(code);
  145. }
  146. }
  147. })
  148. } else {
  149. console.log('登录失败!' + res.errMsg)
  150. }
  151. }
  152. })
  153. }else{
  154. this.userInfo = userInfo;
  155. }
  156. },getUserLogin(code){
  157. let _this = this;
  158. uni.clearStorage();
  159. wx.getUserProfile({
  160. desc: '使用前需要微信授权登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  161. success: (res) => {
  162. console.log(JSON.stringify(res));
  163. appRequest.request({
  164. method: "GET",
  165. data: {
  166. code: code,
  167. enData: res.encryptedData,
  168. iv:res.iv,
  169. userInfo:res.userInfo
  170. },
  171. url: appRequest.urlMap.loginCheck,
  172. success: function(res) {
  173. if(res.data.code == 200){
  174. try {
  175. uni.setStorageSync('userInfo', res.data.data);
  176. uni.switchTab({
  177. url:"/pages/index/index"
  178. })
  179. } catch (e) {
  180. //callback()
  181. uni.clearStorage();
  182. }
  183. }else{
  184. //callback()
  185. }
  186. },
  187. fail: function(res) {
  188. //callback();
  189. }
  190. })
  191. },fail: (err) => {
  192. console.log(err);
  193. }
  194. })
  195. },
  196. toInfo(item){
  197. uni.navigateTo({
  198. url:"../product/product?id="+item.id
  199. })
  200. },
  201. navTo(id){
  202. try {
  203. uni.setStorageSync('currId', id);
  204. } catch (e) {
  205. }
  206. uni.switchTab({
  207. url:"../category/category"
  208. })
  209. },
  210. getData(){
  211. let _this = this;
  212. appRequest.request({
  213. method: "POST",
  214. url: appRequest.urlMap.findPhClothPlaceList,
  215. data:{
  216. type:_this.tab,
  217. validFlag:1,
  218. name:_this.name
  219. },
  220. success: function(res) {
  221. if(res.data.code == 200){
  222. _this.dataList = res.data.data;
  223. _this.carouselList = [];
  224. _this.swiperLength = 3;
  225. for(var i=0;i<3;i++){
  226. var obj = _this.dataList[i];
  227. if(obj){
  228. _this.carouselList.push({
  229. src: _this.picUrl+obj.pic1,
  230. background: "rgb(203, 87, 60)"
  231. });
  232. }
  233. }
  234. }else{
  235. _this.$api.msg(res.data.msg);
  236. }
  237. },
  238. fail: function(res) {
  239. _this.$api.msg("请求异常");
  240. }
  241. })
  242. },
  243. /**
  244. * 请求静态数据只是为了代码不那么乱
  245. * 分次请求未作整合
  246. */
  247. async loadData() {
  248. let carouselList = await this.$api.json('carouselList');
  249. this.titleNViewBackground = carouselList[0].background;
  250. this.swiperLength = 5;
  251. this.carouselList = carouselList;
  252. // let goodsList = await this.$api.json('goodsList');
  253. // this.goodsList = goodsList || [];
  254. },
  255. //轮播图切换修改背景色
  256. swiperChange(e) {
  257. const index = e.detail.current;
  258. this.swiperCurrent = index;
  259. this.titleNViewBackground = this.carouselList[index].background;
  260. },
  261. //详情页
  262. navToDetailPage(item) {
  263. //测试数据没有写id,用title代替
  264. let id = item.title;
  265. uni.navigateTo({
  266. url: `/pages/product/product?id=${id}`
  267. })
  268. }
  269. }
  270. }
  271. </script>

演示视频

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/139651
推荐阅读
相关标签
  

闽ICP备14008679号