日历展示预约设置信息
前面已经完成了预约设置功能,现在就需要通过日历的方式展示出来每天设置的预约人数。
在页面中已经完成了日历的动态展示,我们只需要查询当前月份的预约设置信息并展示到日历中即可,同时在日历中还需要展示已经预约的人数,效果如下:
完善页面
使用静态数据调试
为了能够快速看到效果,我们可以先使用静态数据模拟,然后再改为发送ajax请求查询数据库。
实现步骤:
(1)预约设置数据对应的模型数据为leftobj,在initData方法最后为leftobj模型数据赋值:
this.leftobj = [ { date: 1, number: 120, reservations: 1 }, { date: 3, number: 120, reservations: 1 }, { date: 4, number: 120, reservations: 120 }, { date: 6, number: 120, reservations: 1 }, { date: 8, number: 120, reservations: 1 } ];
其中date表示日期,number表示可预约人数,reservations表示已预约人数
(2)使用VUE的v-for标签遍历上面的leftobj模型数据,展示到日历上:
<template> <template v-for="obj in leftobj"> <template v-if="obj.date == dayobject.day.getDate()"> <template v-if="obj.number > obj.reservations"> <div class="usual"> <p>可预约{{obj.number}}人</p> <p>已预约{{obj.reservations}}人</p> </div> </template> <template v-else> <div class="fulled"> <p>可预约{{obj.number}}人</p> <p>已预约{{obj.reservations}}人</p> <p>已满</p> </div> </template> </template> </template> <button v-if="dayobject.day > today" @click="handleOrderSet(dayobject.day)" class="orderbtn">设置</button> </template>
发送ajax获取动态数据
将上面的静态模拟数据去掉,改为发送ajax请求,根据当前页面对应的月份查询数据库获取预约设置信息,将查询结果赋值给leftobj模型数据
//发送ajax请求,根据当前页面对应的月份查询预约设置信息 axios.post( "/ordersetting/getOrderSettingByMonth.do?date="+this.currentYear+'-'+this.currentMonth ).then((response)=>{ if(response.data.flag){ //为模型数据赋值,通过双向绑定展示到日历中 this.leftobj = response.data.data; }else{ this.$message.error(response.data.message); } });
后台代码
Controller
在OrderSettingController中提供getOrderSettingByMonth方法,根据月份查询预约设置信息
/** * 根据日期查询预约设置数据(获取指定日期所在月份的预约设置数据) * @param date * @return */ @RequestMapping("/getOrderSettingByMonth") public Result getOrderSettingByMonth(String date){//参数格式为:2019-03 try{ List<Map> list = orderSettingService.getOrderSettingByMonth(date); //获取预约设置数据成功 return new Result(true,MessageConstant.GET_ORDERSETTING_SUCCESS,list); }catch (Exception e){ e.printStackTrace(); //获取预约设置数据失败 return new Result(false,MessageConstant.GET_ORDERSETTING_FAIL); } }
服务接口
在OrderSettingService服务接口中扩展方法getOrderSettingByMonth
public List<Map> getOrderSettingByMonth(String date);//参数格式为:2019-03
服务实现类
在OrderSettingServiceImpl服务实现类中实现方法getOrderSettingByMonth
//根据日期查询预约设置数据 public List<Map> getOrderSettingByMonth(String date) {//2019-3 String dateBegin = date + "-1";//2019-3-1 String dateEnd = date + "-31";//2019-3-31 Map map = new HashMap(); map.put("dateBegin",dateBegin); map.put("dateEnd",dateEnd); List<OrderSetting> list = orderSettingDao.getOrderSettingByMonth(map); List<Map> data = new ArrayList<>(); for (OrderSetting orderSetting : list) { Map orderSettingMap = new HashMap(); orderSettingMap.put("date",orderSetting.getOrderDate().getDate());//获得日期(几号) orderSettingMap.put("number",orderSetting.getNumber());//可预约人数 orderSettingMap.put("reservations",orderSetting.getReservations());//已预约人数 data.add(orderSettingMap); } return data; }
Dao接口
在OrderSettingDao接口中扩展方法getOrderSettingByMonth
public List<OrderSetting> getOrderSettingByMonth(Map date);
Mapper映射文件
在OrderSettingDao.xml文件中扩展SQL
<!--根据月份查询预约设置信息--> <select id="getOrderSettingByMonth" parameterType="hashmap" resultType="com.itheima.pojo.OrderSetting"> select * from t_ordersetting where orderDate between #{dateBegin} and #{dateEnd} </select>