index.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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: function (e) {
  46. console.log('picker发送选择改变,携带值为', e.detail.value)
  47. this.setData({ today: e.detail.value })
  48. this.searchDate();
  49. 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. let meal;
  87. let mw;
  88. if (type == 0) {//早餐
  89. mw = 'breakfast';
  90. meal = this.data.form.breakfast;
  91. // 计算卡路里
  92. let reserve = meal.reserve + data.reserve;
  93. this.setData({ 'form.breakfast.reserve': reserve })
  94. } else if (type == 1) {//午餐
  95. mw = 'lunch';
  96. meal = this.data.form.lunch;
  97. // 计算卡路里
  98. let reserve = meal.reserve + data.reserve;
  99. this.setData({ 'form.lunch.reserve': reserve })
  100. } else if (type == 2) {//晚餐
  101. mw = 'dinner';
  102. meal = this.data.form.dinner;
  103. // 计算卡路里
  104. let reserve = meal.reserve + data.reserve;
  105. this.setData({ 'form.dinner.reserve': reserve })
  106. }
  107. // 查询下标
  108. let res = meal.list.findIndex(i => i.id === data.id);
  109. // 查询数据
  110. let arr = meal.list.find(i => i.id === data.id);
  111. let onum = 0;
  112. if (arr) {//已有值
  113. onum = arr.num + 1;
  114. let qwe = { ...arr, num: onum } //id: arr.id, title: arr.title
  115. meal.list.splice(res, 1, qwe)
  116. } else {//没有值
  117. console.log(data)
  118. let onum = 1;
  119. let arr = { ...data, num: onum } //id: data.id, title: data.title
  120. meal.list.push(arr)
  121. }
  122. },
  123. /**
  124. * 更新菜单的数量
  125. * @param {String} type 三餐的类型
  126. * @param {Number} num 当前的数量
  127. * @param {String} id 指定菜品
  128. */
  129. menuNumOpera(type, num, id) {
  130. let list = this.data[`${type}List`];
  131. const li = list.findIndex(f => f._id === id)
  132. const ld = list.find(f => f._id === id)
  133. if (ld) {
  134. ld.num = num;
  135. list.splice(li, 1, ld)
  136. this.setData({
  137. [`${type}List`]: list
  138. })
  139. }
  140. },
  141. // 减少
  142. oneMinus: function (e) {
  143. console.log('减少');
  144. let data = e.target.dataset.data;
  145. let type = this.data.infoTab;
  146. let meal;
  147. let mw;
  148. if (type == 0) {//早餐
  149. mw = 'breakfast';
  150. meal = this.data.form.breakfast;
  151. // 计算减少卡路里
  152. let reserve = meal.reserve - data.reserve;
  153. this.setData({ 'form.breakfast.reserve': reserve })
  154. } else if (type == 1) {//午餐
  155. mw = 'lunch';
  156. meal = this.data.form.lunch;
  157. // 计算减少卡路里
  158. let reserve = meal.reserve - data.reserve;
  159. this.setData({ 'form.lunch.reserve': reserve })
  160. } else if (type == 2) {//晚餐
  161. mw = 'dinner';
  162. meal = this.data.form.dinner;
  163. // 计算减少卡路里
  164. let reserve = meal.reserve - data.reserve;
  165. this.setData({ 'form.dinner.reserve': reserve })
  166. }
  167. // 查询下标
  168. let res = meal.list.findIndex(i => i.id === data.id);
  169. // 查询数据
  170. let arr = meal.list.find(i => i.id === data.id);
  171. if (arr) {
  172. if (arr.num - 1 <= 0) meal.list.splice(res, 1)
  173. else {
  174. let qwe = { ...arr, num: arr.num - 1 }
  175. meal.list.splice(res, 1, qwe)
  176. }
  177. }
  178. // this.menuNumOpera(mw, onum, data._id)
  179. },
  180. // 提交
  181. onSubmit: function () {
  182. const data = JSON.parse(JSON.stringify(this.data.form))
  183. if (app.globalData.wxInfo) data.openid = app.globalData.wxInfo.openid;
  184. if (this.data.today) data.date = this.data.today;
  185. let url;
  186. if (data._id) url = `${app.globalData.publicUrl}/api/st/dining/order/update/${data._id}`
  187. else url = `${app.globalData.publicUrl}/api/st/dining/order`;
  188. wx.request({
  189. url,
  190. method: "post",
  191. header: {
  192. 'x-tenant': app.globalData.tenant
  193. },
  194. data,
  195. success: res => {
  196. if (res.data.errcode == 0) {
  197. wx.showToast({
  198. title: '完成点餐',
  199. })
  200. }
  201. },
  202. error: err => {
  203. wx.showToast({
  204. title: err.msg,
  205. icon: 'error'
  206. })
  207. }
  208. })
  209. },
  210. /**
  211. * 生命周期函数--监听页面加载
  212. */
  213. onLoad: 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. this.searchDate();
  219. this.searchOrder();
  220. },
  221. // 查询时间
  222. searchDate: function () {
  223. let today = this.data.today;
  224. wx.request({
  225. url: `${app.globalData.publicUrl}/api/st/dining/arrange/getByDate?date=` + today,
  226. method: "get",
  227. header: {
  228. 'x-tenant': app.globalData.tenant
  229. },
  230. success: res => {
  231. const { arrange } = res.data.data;
  232. if (!arrange) return;
  233. let { breakfast, lunch, dinner } = arrange
  234. breakfast = this.dealImg(breakfast)
  235. lunch = this.dealImg(lunch)
  236. dinner = this.dealImg(dinner)
  237. this.setData({
  238. breakfastList: breakfast,
  239. lunchList: lunch,
  240. dinnerList: dinner
  241. })
  242. },
  243. error: err => {
  244. wx.showToast({
  245. title: err.msg,
  246. icon: 'error'
  247. })
  248. }
  249. })
  250. },
  251. dealImg(list) {
  252. for (let i of list) {
  253. if (i.img && i.img.length > 0 && i.img[0]) i.url = `${app.globalData.fileUrl}${i.img[0].url}`;
  254. else i.url = this.data.logo;
  255. }
  256. return list;
  257. },
  258. searchST: function () {
  259. wx.request({
  260. url: `${app.globalData.publicUrl}/api/st/system/tenant/getTenant/${app.globalData.tenant}`,
  261. method: "get",
  262. header: { 'x-tenant': app.globalData.tenant },
  263. data: {},
  264. success: res => {
  265. const { data } = res.data;
  266. this.setData({ tenant: data.name });
  267. this.setData({ logo: `${app.globalData.fileUrl}` + data.img.logo })
  268. },
  269. error: err => {
  270. wx.showToast({
  271. title: err.msg,
  272. icon: 'error'
  273. })
  274. }
  275. })
  276. },
  277. // 查订单
  278. searchOrder() {
  279. let today = this.data.today;
  280. let openid = app.globalData.wxInfo.openid;
  281. wx.request({
  282. url: `${app.globalData.publicUrl}/api/st/dining/order/getByOpenid?date=${today}&openid=${openid}`,
  283. method: "get",
  284. header: {
  285. 'x-tenant': app.globalData.tenant
  286. },
  287. success: res => {
  288. const { data } = res.data
  289. if (!data) return
  290. this.setData({
  291. form: res.data.data,
  292. })
  293. const robj = res.data.data
  294. if (robj.breakfast && robj.breakfast.list && robj.breakfast.list.length > 0) this.dealOrderToMenu('breakfast', robj.breakfast.list)
  295. if (robj.lunch && robj.lunch.list && robj.lunch.list.length > 0) this.dealOrderToMenu('lunch', robj.lunch.list)
  296. if (robj.dinner && robj.dinner.list && robj.dinner.list.length > 0) this.dealOrderToMenu('dinner', robj.dinner.list)
  297. },
  298. error: err => {
  299. wx.showToast({
  300. title: err.msg,
  301. icon: 'error'
  302. })
  303. }
  304. })
  305. },
  306. /**
  307. * 将点过的单还原,继续修改
  308. * @param {String} type 三餐类型
  309. * @param {Array} list 某餐的内容
  310. */
  311. dealOrderToMenu(type, list) {
  312. console.log(type, list)
  313. if (list.length <= 0) return;
  314. const menu = this.data[`${type}List`]
  315. if (!menu) return;
  316. for (const o of list) {
  317. const { num, _id } = o
  318. this.menuNumOpera(type, num, _id)
  319. }
  320. },
  321. /**
  322. * 生命周期函数--监听页面初次渲染完成
  323. */
  324. onReady: function () {
  325. },
  326. /**
  327. * 生命周期函数--监听页面显示
  328. */
  329. onShow: function () {
  330. if (typeof this.getTabBar === 'function' &&
  331. this.getTabBar()) {
  332. this.getTabBar().setData({
  333. selected: 1
  334. })
  335. }
  336. },
  337. /**
  338. * 生命周期函数--监听页面隐藏
  339. */
  340. onHide: function () {
  341. },
  342. /**
  343. * 生命周期函数--监听页面卸载
  344. */
  345. onUnload: function () {
  346. },
  347. /**
  348. * 页面相关事件处理函数--监听用户下拉动作
  349. */
  350. onPullDownRefresh: function () {
  351. },
  352. /**
  353. * 页面上拉触底事件的处理函数
  354. */
  355. onReachBottom: function () {
  356. },
  357. /**
  358. * 用户点击右上角分享
  359. */
  360. onShareAppMessage: function () {
  361. }
  362. })