menu.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. // pages/menu/menu.js
  2. import {
  3. imgUrl
  4. } from "../api/request"
  5. import {
  6. baseUrl,
  7. request
  8. } from "../../../pages/api/canteen-request.js"
  9. const FormData = require('./formData.js')
  10. Page({
  11. /**
  12. * 页面的初始数据
  13. */
  14. data: {
  15. imgUrl: imgUrl,
  16. baseUrl: baseUrl,
  17. selectTimeNode: 0,
  18. showModal: false,
  19. // 评分图片列表
  20. starsList: ['/pages/images/stars2.png', '/pages/images/stars2.png', '/pages/images/stars2.png', '/pages/images/stars2.png', '/pages/images/stars2.png'],
  21. // 评分
  22. score: 0,
  23. // 评论
  24. evaluation: '',
  25. // 评论图片列表
  26. imgList: [],
  27. // 日期数据
  28. dateStr: {
  29. 'startWeek': '',
  30. 'endWeek': '',
  31. 'weekList': [],
  32. 'nowDate': ''
  33. },
  34. // 选择的日期索引
  35. dateSelectIndex: 0,
  36. canteenId: '',
  37. // 菜单原始值
  38. menuOrigin: [],
  39. // 4餐菜单
  40. menuCanteen: {
  41. 'breakfastCanteen': [],
  42. 'lunchCanteen': [],
  43. 'dinnerCanteen': [],
  44. 'takeoutCanteen': []
  45. },
  46. // 点击评论详情
  47. dishesDetails: {},
  48. // 食堂名称
  49. canteenName: '',
  50. isManager: false,
  51. timePeriodMeal: {
  52. name: "",
  53. icon: "",
  54. value: ""
  55. },
  56. timePeriodMeals: []
  57. },
  58. // 自定义函数
  59. openItem(e) {
  60. var details = e.currentTarget.dataset.item
  61. this.setData({
  62. 'dishesDetails': details
  63. })
  64. this.setData({
  65. showModal: true,
  66. score: 0,
  67. evaluation: '',
  68. imgList: []
  69. })
  70. this.setStarsList();
  71. },
  72. clickLike(e) {
  73. var subIndex = e.currentTarget.dataset.index
  74. var parentIndex = e.currentTarget.dataset.parent
  75. var obj = e.currentTarget.dataset.item
  76. var params = {
  77. 'foodId': obj.id,
  78. 'canteenId': this.data.canteenId
  79. }
  80. request({
  81. url: '/mini/canteen/click',
  82. method: 'GET',
  83. data: params
  84. }).then(res => {
  85. if (res.data.result) {
  86. switch (this.data.selectTimeNode) {
  87. case 0: {
  88. var canteen = this.data.menuCanteen
  89. canteen.breakfastCanteen[parentIndex].list[subIndex].liked = !canteen.breakfastCanteen[parentIndex].list[subIndex].liked
  90. this.setData({
  91. 'menuCanteen': canteen
  92. })
  93. };
  94. break;
  95. case 1: {
  96. var canteen = this.data.menuCanteen
  97. canteen.lunchCanteen[parentIndex].list[subIndex].liked = !canteen.lunchCanteen[parentIndex].list[subIndex].liked
  98. this.setData({
  99. 'menuCanteen': canteen
  100. })
  101. };
  102. break;
  103. case 2: {
  104. var canteen = this.data.menuCanteen
  105. canteen.dinnerCanteen[parentIndex].list[subIndex].liked = !canteen.dinnerCanteen[parentIndex].list[subIndex].liked
  106. this.setData({
  107. 'menuCanteen': canteen
  108. })
  109. };
  110. break;
  111. case 3: {
  112. var canteen = this.data.menuCanteen
  113. canteen.takeoutCanteen[parentIndex].list[subIndex].liked = !canteen.takeoutCanteen[parentIndex].list[subIndex].liked
  114. this.setData({
  115. 'menuCanteen': canteen
  116. })
  117. };
  118. break;
  119. }
  120. }
  121. })
  122. },
  123. // 关闭评论
  124. closeItem(e) {
  125. this.setData({
  126. showModal: false
  127. })
  128. },
  129. // 发布评论
  130. postComment() {
  131. if (this.data.score === 0) {
  132. wx.showToast({
  133. title: '评分不能为空',
  134. icon: 'none',
  135. duration: 2000
  136. })
  137. } else if (this.data.evaluation === '') {
  138. wx.showToast({
  139. title: '评论不能为空',
  140. icon: 'none',
  141. duration: 2000
  142. })
  143. } else if (this.data.evaluation.length < 10) {
  144. wx.showToast({
  145. title: '评论字数不能小于10',
  146. icon: 'none',
  147. duration: 2000
  148. })
  149. } else {
  150. var details = this.data.dishesDetails
  151. let userid = wx.getStorageSync('userid');
  152. let formData = new FormData();
  153. formData.append("score", this.data.score);
  154. formData.append("evaluation", this.data.evaluation);
  155. formData.append("userid", userid);
  156. formData.append("canteenid", this.data.canteenId);
  157. formData.append("dishesid", details.id);
  158. for (let i = 0; i < this.data.imgList.length; i++) {
  159. formData.appendFile("files", this.data.imgList[i]);
  160. }
  161. let data = formData.getData();
  162. request({
  163. url: '/mini/canteen/addEvaluation',
  164. method: 'POST',
  165. data: data.buffer,
  166. contentType: data.contentType
  167. }).then(res => {
  168. if (res.data.result) {
  169. wx.showToast({
  170. title: '发布成功',
  171. icon: 'none',
  172. duration: 2000
  173. })
  174. } else {
  175. wx.showToast({
  176. title: '发布失败',
  177. icon: 'none',
  178. duration: 2000
  179. })
  180. }
  181. })
  182. this.setData({
  183. showModal: false
  184. })
  185. }
  186. },
  187. // 输入评论
  188. blurEvaluation(e) {
  189. this.setData({
  190. evaluation: e.detail.value
  191. })
  192. },
  193. tapTimeNode(e) {
  194. this.setData({
  195. selectTimeNode: e.currentTarget.dataset.item
  196. })
  197. },
  198. // 赋值评分
  199. setStarsList() {
  200. let temp = [];
  201. for (let i = 0; i < 5; i++) {
  202. if (i < this.data.score) {
  203. temp.push('/pages/images/stars1.png')
  204. } else {
  205. temp.push('/pages/images/stars2.png')
  206. }
  207. }
  208. this.setData({
  209. starsList: temp
  210. })
  211. },
  212. // 选择评分
  213. chooseStars(e) {
  214. this.setData({
  215. score: e.currentTarget.dataset.index + 1
  216. })
  217. this.setStarsList();
  218. },
  219. // 上传照片
  220. choosePhoto() {
  221. var that = this
  222. wx.chooseMedia({
  223. count: 4,
  224. mediaType: ['image'],
  225. sizeType: ["original", "compressed"],
  226. sourceType: ["album"],
  227. success: function (res) {
  228. for (let i = 0; i < res.tempFiles.length; i++) {
  229. let tempFilePaths = res.tempFiles[i];
  230. if (that.data.imgList.length >= 4) {
  231. wx.showToast({
  232. title: "只能上传4张图片",
  233. icon: "none",
  234. duration: 1500
  235. })
  236. break;
  237. } else if (tempFilePaths.size > 1024 * 1024 * 5) {
  238. wx.showToast({
  239. title: "图片过大",
  240. icon: "none",
  241. duration: 1500
  242. })
  243. } else {
  244. let temp = that.data.imgList;
  245. temp.push(tempFilePaths.tempFilePath);
  246. that.setData({
  247. imgList: temp
  248. })
  249. }
  250. }
  251. }
  252. })
  253. },
  254. deleteFile(e) {
  255. let temp = this.data.imgList;
  256. temp.splice(e.currentTarget.dataset.index, 1);
  257. this.setData({
  258. imgList: temp
  259. })
  260. },
  261. //格式化日期
  262. formatDate: function (date) {
  263. let myYear = date.getFullYear();
  264. let myMonth = date.getMonth() + 1;
  265. let myWeekDay = date.getDate();
  266. return myYear + "年" + myMonth + "月"
  267. },
  268. //格式化日期2
  269. formatDateNumber: function (date) {
  270. let myYear = date.getFullYear();
  271. let myMonth = date.getMonth() + 1;
  272. let myWeekDay = date.getDate();
  273. return myYear + "-" + myMonth + "-" + myWeekDay
  274. },
  275. initDate: function () {
  276. var now = new Date();
  277. var nowYear = now.getFullYear(); //当前年
  278. var nowMonth = now.getMonth(); //当前月
  279. var nowDay = now.getDate(); //当前日
  280. var nowDayOfWeek = now.getDay(); //今天是本周的第几天
  281. this.setData({
  282. dateSelectIndex: nowDayOfWeek - 1
  283. })
  284. var startWeek = this.formatDate(new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1));
  285. var endWeek = this.formatDate(new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek + 1)));
  286. var nowDate = this.formatDate(now)
  287. // 一周的日期列表
  288. var weeks = []
  289. for (var i = 1; i <= 7; i++) {
  290. weeks.push(this.formatDateNumber(new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + i)))
  291. }
  292. this.setData({
  293. dateStr: {
  294. 'startWeek': startWeek,
  295. 'endWeek': endWeek,
  296. 'weekList': weeks,
  297. 'nowDate': nowDate
  298. }
  299. })
  300. },
  301. // 切换日期
  302. selectDate: function (e) {
  303. this.setData({
  304. 'dateSelectIndex': e.currentTarget.dataset.item
  305. })
  306. this.getMenuInfo()
  307. },
  308. getMenuInfo() {
  309. var params = {
  310. 'date': this.data.dateStr.weekList[this.data.dateSelectIndex],
  311. 'canteenId': this.data.canteenId
  312. }
  313. request({
  314. url: '/mini/canteen/getMenu',
  315. method: 'GET',
  316. data: params
  317. }).then(res => {
  318. if (!(res.data.data && res.data.data.length != 0)) {
  319. this.setData({
  320. 'menuCanteen': {
  321. 'breakfastCanteen': [],
  322. 'lunchCanteen': [],
  323. 'dinnerCanteen': [],
  324. 'takeoutCanteen': []
  325. }
  326. })
  327. return
  328. }
  329. var jsonStr = res.data.data.dishesList
  330. var menuList = JSON.parse(jsonStr)
  331. this.setData({
  332. 'menuOrigin': menuList
  333. })
  334. var breakfast = []
  335. var lunch = []
  336. var dinner = []
  337. var takeout = []
  338. for (var i = 0; i < menuList.length; i++) {
  339. switch (menuList[i].timeName) {
  340. case '早餐':
  341. breakfast = menuList[i].foods
  342. break
  343. case '午餐':
  344. lunch = menuList[i].foods
  345. break
  346. case '晚餐':
  347. dinner = menuList[i].foods
  348. break
  349. case '外卖':
  350. takeout = menuList[i].foods
  351. break
  352. }
  353. }
  354. var breakfastCanteen = []
  355. var lunchCanteen = []
  356. var dinnerCanteen = []
  357. var takeoutCanteen = []
  358. for (var j = 0; j < breakfast.length; j++) {
  359. var index = -1;
  360. if (breakfastCanteen.length != 0) {
  361. index = breakfastCanteen.findIndex((item) => item.type == breakfast[j].typeName)
  362. }
  363. if (index == -1) {
  364. var tmpList = []
  365. tmpList.push(breakfast[j])
  366. breakfastCanteen.push({
  367. 'type': breakfast[j].typeName,
  368. 'list': tmpList
  369. })
  370. } else {
  371. breakfastCanteen[index].list.push(breakfast[j])
  372. }
  373. }
  374. for (var j = 0; j < lunch.length; j++) {
  375. var index = -1;
  376. if (lunchCanteen.length != 0) {
  377. index = lunchCanteen.findIndex((item) => item.type == lunch[j].typeName)
  378. }
  379. if (index == -1) {
  380. var tmpList = []
  381. tmpList.push(lunch[j])
  382. lunchCanteen.push({
  383. 'type': lunch[j].typeName,
  384. 'list': tmpList
  385. })
  386. } else {
  387. lunchCanteen[index].list.push(lunch[j])
  388. }
  389. }
  390. for (var j = 0; j < dinner.length; j++) {
  391. var index = -1;
  392. if (dinnerCanteen.length != 0) {
  393. index = dinnerCanteen.findIndex((item) => item.type == dinner[j].typeName)
  394. }
  395. if (index == -1) {
  396. var tmpList = []
  397. tmpList.push(dinner[j])
  398. dinnerCanteen.push({
  399. 'type': dinner[j].typeName,
  400. 'list': tmpList
  401. })
  402. } else {
  403. dinnerCanteen[index].list.push(dinner[j])
  404. }
  405. }
  406. for (var j = 0; j < takeout.length; j++) {
  407. var index = -1;
  408. if (takeoutCanteen.length != 0) {
  409. index = takeoutCanteen.findIndex((item) => item.type == takeout[j].typeName)
  410. }
  411. if (index == -1) {
  412. var tmpList = []
  413. tmpList.push(takeout[j])
  414. takeoutCanteen.push({
  415. 'type': takeout[j].typeName,
  416. 'list': tmpList
  417. })
  418. } else {
  419. takeoutCanteen[index].list.push(takeout[j])
  420. }
  421. }
  422. this.setData({
  423. 'menuCanteen': {
  424. 'breakfastCanteen': breakfastCanteen,
  425. 'lunchCanteen': lunchCanteen,
  426. 'dinnerCanteen': dinnerCanteen,
  427. 'takeoutCanteen': takeoutCanteen
  428. }
  429. })
  430. })
  431. },
  432. gotoComment(e) {
  433. wx.navigateTo({
  434. url: '/pages/commentList/commentList?dishesId=' + e.currentTarget.dataset.id + '&canteenId=' + this.data.canteenId
  435. })
  436. },
  437. imageError(e) {
  438. let temp = this.data.menuCanteen;
  439. switch (e.currentTarget.dataset.name) {
  440. case "breakfastCanteen":
  441. temp.breakfastCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  442. this.setData({
  443. menuCanteen: temp
  444. })
  445. break;
  446. case "lunchCanteen":
  447. temp.lunchCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  448. this.setData({
  449. menuCanteen: temp
  450. })
  451. break;
  452. case "dinnerCanteen":
  453. temp.dinnerCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  454. this.setData({
  455. menuCanteen: temp
  456. })
  457. break;
  458. case "takeoutCanteen":
  459. temp.takeoutCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  460. this.setData({
  461. menuCanteen: temp
  462. })
  463. break;
  464. }
  465. },
  466. /**
  467. * 生命周期函数--监听页面加载
  468. */
  469. onLoad: function (options) {
  470. // 查询用户所属角色
  471. request({
  472. url: '/mini/worker/getUserType',
  473. method: 'GET',
  474. data: {
  475. userId: wx.getStorageSync('userid')
  476. }
  477. }).then(res => {
  478. if (res.result) {
  479. let userType = res.data;
  480. // 政府工作人员
  481. if ("0" == userType || '2' == userType) {
  482. this.setData({
  483. isManager: false
  484. });
  485. } else if ('1' == userType) {
  486. this.setData({
  487. isManager: true
  488. });
  489. } else {
  490. wx.navigateBack();
  491. }
  492. } else {
  493. wx.navigateBack();
  494. }
  495. });
  496. this.initDate()
  497. this.setData({
  498. 'canteenId': options.canteenId,
  499. canteenName: options.canteenName
  500. })
  501. let time = options.time
  502. let times = time.split("/")
  503. let timePeriodMealarr = []
  504. // debugger
  505. for (let i = 0; i < times.length; i++) {
  506. const element = times[i];
  507. let timePeriodMeal = {
  508. name: "",
  509. icon: "",
  510. value: "",
  511. timer: "",
  512. }
  513. switch (element) {
  514. case '早':
  515. timePeriodMeal.icon = this.data.imgUrl + 'breakfast.png'
  516. timePeriodMeal.value = 0
  517. timePeriodMeal.name = '早餐'
  518. break
  519. case '中':
  520. timePeriodMeal.icon = this.data.imgUrl + 'lunch.png'
  521. timePeriodMeal.value = 1
  522. timePeriodMeal.name = '午餐'
  523. break
  524. case '晚':
  525. timePeriodMeal.icon = this.data.imgUrl + 'lunch.png'
  526. timePeriodMeal.value = 2
  527. timePeriodMeal.name = '晚餐'
  528. break
  529. case '外卖':
  530. timePeriodMeal.icon = this.data.imgUrl + 'take_out.png'
  531. timePeriodMeal.name = '外卖预告'
  532. timePeriodMeal.value = 3
  533. // timePeriodMeal.timer = menuList[i].timeQuantum
  534. break
  535. }
  536. timePeriodMealarr.push(timePeriodMeal)
  537. }
  538. this.setData({
  539. timePeriodMeals: timePeriodMealarr
  540. })
  541. wx.setNavigationBarTitle({
  542. title: options.canteenName
  543. })
  544. this.getMenuInfo();
  545. },
  546. /**
  547. * 生命周期函数--监听页面初次渲染完成
  548. */
  549. onReady: function () {
  550. },
  551. /**
  552. * 生命周期函数--监听页面显示
  553. */
  554. onShow: function () {
  555. },
  556. /**
  557. * 生命周期函数--监听页面隐藏
  558. */
  559. onHide: function () {
  560. },
  561. /**
  562. * 生命周期函数--监听页面卸载
  563. */
  564. onUnload: function () {
  565. },
  566. /**
  567. * 页面相关事件处理函数--监听用户下拉动作
  568. */
  569. onPullDownRefresh: function () {
  570. },
  571. /**
  572. * 页面上拉触底事件的处理函数
  573. */
  574. onReachBottom: function () {
  575. },
  576. /**
  577. * 用户点击右上角分享
  578. */
  579. onShareAppMessage: function () {
  580. return {
  581. title: this.data.canteenName
  582. };
  583. },
  584. /**
  585. * 上传菜品图片
  586. * @param {*} e
  587. */
  588. photograph: function (e) {
  589. let that = this;
  590. wx.chooseMedia({
  591. mediaType: ['image'],
  592. sourceType: ['camera'],
  593. success: function (res) {
  594. // console.info(res);
  595. if (res.errMsg == 'chooseMedia:ok') {
  596. wx.showLoading({
  597. title: '加载中...',
  598. });
  599. let formData = new FormData();
  600. formData.append('id', e.currentTarget.dataset.id);
  601. formData.append('canteenId', that.data.canteenId);
  602. formData.append('date', that.data.dateStr.weekList[that.data.dateSelectIndex]);
  603. formData.append('userId', wx.getStorageSync('userid'));
  604. formData.appendFile('files', res.tempFiles[0].tempFilePath);
  605. let data = formData.getData();
  606. // console.log(data);
  607. request({
  608. url: '/mini/canteen/updateDishesPic',
  609. method: 'POST',
  610. data: data.buffer,
  611. contentType: data.contentType
  612. }).then(re => {
  613. // console.info(re)
  614. if (re.result) {
  615. wx.showToast({
  616. title: '上传成功',
  617. icon: 'success',
  618. mask: true,
  619. });
  620. that.getMenuInfo();
  621. } else {
  622. wx.showToast({
  623. title: '上传失败',
  624. icon: 'error',
  625. mask: true
  626. });
  627. }
  628. wx.hideLoading();
  629. });
  630. }
  631. }
  632. });
  633. }
  634. })