index.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. // pages/reserve/index.js
  2. import moment, { parseTwoDigitYear } from '../../utils/moment.min';
  3. moment.locale('en', {
  4. longDateFormat: {
  5. l: 'YYYY-MM-DD',
  6. L: 'YYYY-MM-DD HH:mm:ss',
  7. },
  8. });
  9. const app = getApp();
  10. Page({
  11. /**
  12. * 页面的初始数据
  13. */
  14. data: {
  15. height: app.globalData.height * 2 + 25,
  16. windowHeight: app.globalData.windowHeight,
  17. navbarData: {
  18. name: '报餐',
  19. },
  20. tenant: '',
  21. logo: '',
  22. today: '',
  23. // 点餐
  24. currentTab: 0,
  25. // 早餐,午餐,晚餐
  26. infoTab: '0',
  27. // 餐列表
  28. breakfastList: [],
  29. lunchList: [],
  30. dinnerList: [],
  31. // 餐数量
  32. oneStepper: 0,
  33. twoStepper: 0,
  34. thrStepper: 0,
  35. // 选餐表单
  36. form: {
  37. breakfast: { reserve: 0, list: [] },
  38. lunch: { reserve: 0, list: [] },
  39. dinner: { reserve: 0, list: [] },
  40. },
  41. // 时间选择范围
  42. picker: {},
  43. },
  44. // 选择日期
  45. bindDateChange: async function (e) {
  46. console.log('picker发送选择改变,携带值为', e.detail.value);
  47. this.setData({ today: e.detail.value });
  48. await this.searchDate();
  49. await this.searchOrder();
  50. },
  51. // 禁止左右滑动
  52. stopTab: function (e) {
  53. return false;
  54. },
  55. //点击切换
  56. clickTab: function (e) {
  57. var that = this;
  58. if (this.data.currentTab === e.target.dataset.current) {
  59. return false;
  60. } else {
  61. that.setData({
  62. currentTab: e.target.dataset.current,
  63. });
  64. }
  65. },
  66. // 点击选择餐食
  67. infoClickTab: function (e) {
  68. var that = this;
  69. let data = e.target.dataset.current;
  70. if (this.data.infoTab === data) return false;
  71. else that.setData({ infoTab: data });
  72. },
  73. // 选择餐数量
  74. // 早餐,午餐,晚餐
  75. oneChange: function (e) {
  76. console.log(e);
  77. const { data, type } = e.target.dataset;
  78. const { detail } = e;
  79. this.menuNumOpera(type, detail, data._id);
  80. },
  81. // 增加
  82. onePlus: function (e) {
  83. console.log('增加');
  84. let data = e.target.dataset.data;
  85. let type = this.data.infoTab;
  86. console.log(typeof type);
  87. let initMealData = { list: [], reserve: 0 };
  88. let meal;
  89. let mw;
  90. switch (type) {
  91. case '0':
  92. mw = 'breakfast';
  93. meal = this.data.form.breakfast;
  94. break;
  95. case '1':
  96. mw = 'lunch';
  97. meal = this.data.form.lunch;
  98. break;
  99. case '2':
  100. mw = 'dinner';
  101. meal = this.data.form.dinner;
  102. break;
  103. default:
  104. break;
  105. }
  106. if (!meal) meal = initMealData;
  107. // 计算卡路里
  108. meal.reserve = meal.reserve + data.reserve;
  109. // 查询下标
  110. let res = meal.list.findIndex((i) => i._id === data._id);
  111. // 查询数据
  112. let arr = meal.list.find((i) => i._id === data._id);
  113. let onum = 0;
  114. if (arr) {
  115. //已有值
  116. onum = arr.num + 1;
  117. let qwe = { ...arr, num: onum }; //id: arr.id, title: arr.title
  118. meal.list.splice(res, 1, qwe);
  119. } else {
  120. //没有值
  121. let onum = 1;
  122. let arr = { ...data, num: onum }; //id: data.id, title: data.title
  123. meal.list.push(arr);
  124. }
  125. const key = `form.${mw}`;
  126. this.setData({ [key]: meal });
  127. this.computedTotalReserve();
  128. },
  129. /**
  130. * 更新菜单的数量
  131. * @param {String} type 三餐的类型
  132. * @param {Number} num 当前的数量
  133. * @param {String} id 指定菜品
  134. */
  135. menuNumOpera(type, num, id) {
  136. let list = this.data[`${type}List`];
  137. console.log(list);
  138. const li = list.findIndex((f) => f._id === id);
  139. const ld = list.find((f) => f._id === id);
  140. console.log(li, id);
  141. if (ld) {
  142. ld.num = num;
  143. list.splice(li, 1, ld);
  144. this.setData({
  145. [`${type}List`]: list,
  146. });
  147. }
  148. },
  149. // 减少
  150. oneMinus: function (e) {
  151. console.log('减少');
  152. let data = e.target.dataset.data;
  153. let type = this.data.infoTab;
  154. let initMealData = { list: [], reserve: 0 };
  155. let meal;
  156. let mw;
  157. switch (type) {
  158. case '0':
  159. mw = 'breakfast';
  160. meal = this.data.form.breakfast;
  161. break;
  162. case '1':
  163. mw = 'lunch';
  164. meal = this.data.form.lunch;
  165. break;
  166. case '2':
  167. mw = 'dinner';
  168. meal = this.data.form.dinner;
  169. break;
  170. default:
  171. break;
  172. }
  173. if (!meal) meal = initMealData;
  174. // 计算卡路里
  175. meal.reserve = meal.reserve - data.reserve;
  176. // 查询下标
  177. let res = meal.list.findIndex((i) => i._id === data._id);
  178. // 查询数据
  179. let arr = meal.list.find((i) => i._id === data._id);
  180. if (arr) {
  181. if (arr.num - 1 <= 0) meal.list.splice(res, 1);
  182. else {
  183. let qwe = { ...arr, num: arr.num - 1 };
  184. meal.list.splice(res, 1, qwe);
  185. }
  186. }
  187. const key = `form.${mw}`;
  188. this.setData({ [key]: meal });
  189. this.computedTotalReserve();
  190. },
  191. computedTotalReserve() {
  192. const form = this.data.form;
  193. const br = form.breakfast && form.breakfast.reserve ? form.breakfast.reserve : 0;
  194. const lr = form.lunch && form.lunch.reserve ? form.lunch.reserve : 0;
  195. const dr = form.dinner && form.dinner.reserve ? form.dinner.reserve : 0;
  196. const total = br + lr + dr;
  197. this.setData({ totalReserve: total });
  198. },
  199. // 提交
  200. onSubmit: async function () {
  201. const data = JSON.parse(JSON.stringify(this.data.form));
  202. if (app.globalData.wxInfo) data.openid = app.globalData.wxInfo.openid;
  203. if (this.data.today) data.date = this.data.today;
  204. let url;
  205. if (data._id) url = `/order/update/${data._id}`;
  206. else url = `/order`;
  207. const res = await app.$post(url, data);
  208. if (res.errcode === 0) wx.showToast({ title: '点餐成功', icon: 'success' });
  209. },
  210. /**
  211. * 生命周期函数--监听页面加载
  212. */
  213. onLoad: async function (options) {
  214. this.searchST();
  215. let today = moment().add(1, 'days').format('YYYY-MM-DD');
  216. let endday = moment().add(1, 'months').format('YYYY-MM-DD');
  217. this.setData({ today: today, picker: { start: today, end: endday } });
  218. await this.searchDate();
  219. await this.searchOrder();
  220. },
  221. // 查询时间
  222. searchDate: async function () {
  223. let today = this.data.today;
  224. const res = await app.$get(`/arrange/getByDate?date=${today}`);
  225. const { arrange } = res.data;
  226. if (!arrange) return;
  227. let { breakfast, lunch, dinner } = arrange;
  228. breakfast = this.dealImg(breakfast);
  229. lunch = this.dealImg(lunch);
  230. dinner = this.dealImg(dinner);
  231. this.setData({
  232. breakfastList: breakfast,
  233. lunchList: lunch,
  234. dinnerList: dinner,
  235. });
  236. },
  237. dealImg(list) {
  238. for (let i of list) {
  239. if (i.img && i.img.length > 0 && i.img[0]) i.url = `${i.img[0].url}`;
  240. else i.url = this.data.logo;
  241. }
  242. return list;
  243. },
  244. searchST: async function () {
  245. const res = await app.$get('/config');
  246. const logo = `${res.data.logo[0].url || ''}`;
  247. this.setData({ logo });
  248. // wx.request({
  249. // url: `${app.globalData.publicUrl}/api/st/system/tenant/getTenant/${app.globalData.tenant}`,
  250. // method: "get",
  251. // data: {},
  252. // success: res => {
  253. // const { data } = res.data;
  254. // this.setData({ tenant: data.name });
  255. // this.setData({ logo: `${app.globalData.fileUrl}` + data.img.logo })
  256. // },
  257. // error: err => {
  258. // wx.showToast({
  259. // title: err.msg,
  260. // icon: 'error'
  261. // })
  262. // }
  263. // })
  264. },
  265. // 查订单
  266. async searchOrder() {
  267. let today = this.data.today;
  268. let openid = app.globalData.wxInfo.openid;
  269. const res = await app.$get(`/order/getByOpenid?date=${today}&openid=${openid}`);
  270. const { data } = res;
  271. if (!data) return;
  272. this.setData({
  273. form: res.data,
  274. });
  275. const robj = res.data;
  276. if (robj.breakfast && robj.breakfast.list && robj.breakfast.list.length > 0) this.dealOrderToMenu('breakfast', robj.breakfast.list);
  277. if (robj.lunch && robj.lunch.list && robj.lunch.list.length > 0) this.dealOrderToMenu('lunch', robj.lunch.list);
  278. if (robj.dinner && robj.dinner.list && robj.dinner.list.length > 0) this.dealOrderToMenu('dinner', robj.dinner.list);
  279. this.computedTotalReserve();
  280. },
  281. /**
  282. * 将点过的单还原,继续修改
  283. * @param {String} type 三餐类型
  284. * @param {Array} list 某餐的内容
  285. */
  286. dealOrderToMenu(type, list) {
  287. console.log(type, list);
  288. if (list.length <= 0) return;
  289. const menu = this.data[`${type}List`];
  290. if (!menu) {
  291. console.log('没找到菜单');
  292. return;
  293. }
  294. for (const o of list) {
  295. const { num, _id } = o;
  296. this.menuNumOpera(type, num, _id);
  297. }
  298. },
  299. /**
  300. * 生命周期函数--监听页面初次渲染完成
  301. */
  302. onReady: function () {},
  303. /**
  304. * 生命周期函数--监听页面显示
  305. */
  306. onShow: function () {
  307. if (typeof this.getTabBar === 'function' && this.getTabBar()) {
  308. this.getTabBar().setData({
  309. selected: 1,
  310. });
  311. }
  312. },
  313. /**
  314. * 生命周期函数--监听页面隐藏
  315. */
  316. onHide: function () {},
  317. /**
  318. * 生命周期函数--监听页面卸载
  319. */
  320. onUnload: function () {},
  321. /**
  322. * 页面相关事件处理函数--监听用户下拉动作
  323. */
  324. onPullDownRefresh: function () {},
  325. /**
  326. * 页面上拉触底事件的处理函数
  327. */
  328. onReachBottom: function () {},
  329. /**
  330. * 用户点击右上角分享
  331. */
  332. onShareAppMessage: function () {},
  333. });