menu.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  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. console.log(1231231);
  331. console.log(jsonStr);
  332. console.log(JSON.parse(jsonStr));
  333. var menuList = JSON.parse(jsonStr)
  334. console.log(1231231);
  335. console.log(menuList);
  336. console.log(1231231);
  337. this.setData({
  338. 'menuOrigin': menuList
  339. })
  340. var breakfast = []
  341. var lunch = []
  342. var dinner = []
  343. var takeout = []
  344. for (var i = 0; i < menuList.length; i++) {
  345. switch (menuList[i].timeName) {
  346. case '早餐':
  347. breakfast = menuList[i].foods
  348. break
  349. case '午餐':
  350. lunch = menuList[i].foods
  351. break
  352. case '晚餐':
  353. dinner = menuList[i].foods
  354. break
  355. case '外卖':
  356. takeout = menuList[i].foods
  357. break
  358. }
  359. }
  360. var breakfastCanteen = []
  361. var lunchCanteen = []
  362. var dinnerCanteen = []
  363. var takeoutCanteen = []
  364. for (var j = 0; j < breakfast.length; j++) {
  365. var index = -1;
  366. if (breakfastCanteen.length != 0) {
  367. index = breakfastCanteen.findIndex((item) => item.type == breakfast[j].typeName)
  368. }
  369. if (index == -1) {
  370. var tmpList = []
  371. tmpList.push(breakfast[j])
  372. breakfastCanteen.push({
  373. 'type': breakfast[j].typeName,
  374. 'list': tmpList
  375. })
  376. } else {
  377. breakfastCanteen[index].list.push(breakfast[j])
  378. }
  379. }
  380. for (var j = 0; j < lunch.length; j++) {
  381. var index = -1;
  382. if (lunchCanteen.length != 0) {
  383. index = lunchCanteen.findIndex((item) => item.type == lunch[j].typeName)
  384. }
  385. if (index == -1) {
  386. var tmpList = []
  387. tmpList.push(lunch[j])
  388. lunchCanteen.push({
  389. 'type': lunch[j].typeName,
  390. 'list': tmpList
  391. })
  392. } else {
  393. lunchCanteen[index].list.push(lunch[j])
  394. }
  395. }
  396. for (var j = 0; j < dinner.length; j++) {
  397. var index = -1;
  398. if (dinnerCanteen.length != 0) {
  399. index = dinnerCanteen.findIndex((item) => item.type == dinner[j].typeName)
  400. }
  401. if (index == -1) {
  402. var tmpList = []
  403. tmpList.push(dinner[j])
  404. dinnerCanteen.push({
  405. 'type': dinner[j].typeName,
  406. 'list': tmpList
  407. })
  408. } else {
  409. dinnerCanteen[index].list.push(dinner[j])
  410. }
  411. }
  412. for (var j = 0; j < takeout.length; j++) {
  413. var index = -1;
  414. if (takeoutCanteen.length != 0) {
  415. index = takeoutCanteen.findIndex((item) => item.type == takeout[j].typeName)
  416. }
  417. if (index == -1) {
  418. var tmpList = []
  419. tmpList.push(takeout[j])
  420. takeoutCanteen.push({
  421. 'type': takeout[j].typeName,
  422. 'list': tmpList
  423. })
  424. } else {
  425. takeoutCanteen[index].list.push(takeout[j])
  426. }
  427. }
  428. this.setData({
  429. 'menuCanteen': {
  430. 'breakfastCanteen': breakfastCanteen,
  431. 'lunchCanteen': lunchCanteen,
  432. 'dinnerCanteen': dinnerCanteen,
  433. 'takeoutCanteen': takeoutCanteen
  434. }
  435. })
  436. })
  437. },
  438. gotoComment(e) {
  439. wx.navigateTo({
  440. url: '/pages/commentList/commentList?dishesId=' + e.currentTarget.dataset.id + '&canteenId=' + this.data.canteenId
  441. })
  442. },
  443. imageError(e) {
  444. let temp = this.data.menuCanteen;
  445. switch (e.currentTarget.dataset.name) {
  446. case "breakfastCanteen":
  447. temp.breakfastCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  448. this.setData({
  449. menuCanteen: temp
  450. })
  451. break;
  452. case "lunchCanteen":
  453. temp.lunchCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  454. this.setData({
  455. menuCanteen: temp
  456. })
  457. break;
  458. case "dinnerCanteen":
  459. temp.dinnerCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  460. this.setData({
  461. menuCanteen: temp
  462. })
  463. break;
  464. case "takeoutCanteen":
  465. temp.takeoutCanteen[e.currentTarget.dataset.index].list[e.currentTarget.dataset.subindex].imgurl = '';
  466. this.setData({
  467. menuCanteen: temp
  468. })
  469. break;
  470. }
  471. },
  472. /**
  473. * 生命周期函数--监听页面加载
  474. */
  475. onLoad: function (options) {
  476. // 查询用户所属角色
  477. request({
  478. url: '/mini/worker/getUserType',
  479. method: 'GET',
  480. data: {
  481. userId: wx.getStorageSync('userid')
  482. }
  483. }).then(res => {
  484. if (res.result) {
  485. let userType = res.data;
  486. // 政府工作人员
  487. if ("0" == userType || '2' == userType) {
  488. this.setData({
  489. isManager: false
  490. });
  491. } else if ('1' == userType) {
  492. this.setData({
  493. isManager: true
  494. });
  495. } else {
  496. wx.navigateBack();
  497. }
  498. } else {
  499. wx.navigateBack();
  500. }
  501. });
  502. this.initDate()
  503. this.setData({
  504. 'canteenId': options.canteenId,
  505. canteenName: options.canteenName
  506. })
  507. let time = options.time
  508. let times = time.split("/")
  509. let timePeriodMealarr = []
  510. // debugger
  511. for (let i = 0; i < times.length; i++) {
  512. const element = times[i];
  513. let timePeriodMeal = {
  514. name: "",
  515. icon: "",
  516. value: "",
  517. timer: "",
  518. }
  519. switch (element) {
  520. case '早':
  521. timePeriodMeal.icon = this.data.imgUrl + 'breakfast.png'
  522. timePeriodMeal.value = 0
  523. timePeriodMeal.name = '早餐'
  524. break
  525. case '中':
  526. timePeriodMeal.icon = this.data.imgUrl + 'lunch.png'
  527. timePeriodMeal.value = 1
  528. timePeriodMeal.name = '午餐'
  529. break
  530. case '晚':
  531. timePeriodMeal.icon = this.data.imgUrl + 'lunch.png'
  532. timePeriodMeal.value = 2
  533. timePeriodMeal.name = '晚餐'
  534. break
  535. case '外卖':
  536. timePeriodMeal.icon = this.data.imgUrl + 'take_out.png'
  537. timePeriodMeal.name = '外卖预告'
  538. timePeriodMeal.value = 3
  539. // timePeriodMeal.timer = menuList[i].timeQuantum
  540. break
  541. }
  542. timePeriodMealarr.push(timePeriodMeal)
  543. }
  544. this.setData({
  545. timePeriodMeals: timePeriodMealarr
  546. })
  547. wx.setNavigationBarTitle({
  548. title: options.canteenName
  549. })
  550. this.getMenuInfo();
  551. },
  552. /**
  553. * 生命周期函数--监听页面初次渲染完成
  554. */
  555. onReady: function () {
  556. },
  557. /**
  558. * 生命周期函数--监听页面显示
  559. */
  560. onShow: function () {
  561. },
  562. /**
  563. * 生命周期函数--监听页面隐藏
  564. */
  565. onHide: function () {
  566. },
  567. /**
  568. * 生命周期函数--监听页面卸载
  569. */
  570. onUnload: function () {
  571. },
  572. /**
  573. * 页面相关事件处理函数--监听用户下拉动作
  574. */
  575. onPullDownRefresh: function () {
  576. },
  577. /**
  578. * 页面上拉触底事件的处理函数
  579. */
  580. onReachBottom: function () {
  581. },
  582. /**
  583. * 用户点击右上角分享
  584. */
  585. onShareAppMessage: function () {
  586. return {
  587. title: this.data.canteenName
  588. };
  589. },
  590. /**
  591. * 上传菜品图片
  592. * @param {*} e
  593. */
  594. photograph: function (e) {
  595. let that = this;
  596. wx.chooseMedia({
  597. mediaType: ['image'],
  598. sourceType: ['camera'],
  599. success: function (res) {
  600. // console.info(res);
  601. if (res.errMsg == 'chooseMedia:ok') {
  602. wx.showLoading({
  603. title: '加载中...',
  604. });
  605. let formData = new FormData();
  606. formData.append('id', e.currentTarget.dataset.id);
  607. formData.append('canteenId', that.data.canteenId);
  608. formData.append('date', that.data.dateStr.weekList[that.data.dateSelectIndex]);
  609. formData.append('userId', wx.getStorageSync('userid'));
  610. formData.appendFile('files', res.tempFiles[0].tempFilePath);
  611. let data = formData.getData();
  612. console.log(data);
  613. request({
  614. url: '/mini/canteen/updateDishesPic',
  615. method: 'POST',
  616. data: data.buffer,
  617. contentType: data.contentType
  618. }).then(re => {
  619. // console.info(re)
  620. if (re.result) {
  621. wx.showToast({
  622. title: '上传成功',
  623. icon: 'success',
  624. mask: true,
  625. });
  626. that.getMenuInfo();
  627. } else {
  628. wx.showToast({
  629. title: '上传失败',
  630. icon: 'error',
  631. mask: true
  632. });
  633. }
  634. wx.hideLoading();
  635. });
  636. }
  637. }
  638. });
  639. }
  640. })