Merge branch 'master' of https://gitee.com/darlk/ShengTangManage into xzj
This commit is contained in:
		| @@ -164,7 +164,7 @@ export default { | ||||
|                   : item[1]; | ||||
|               return { | ||||
|                 type: "text", | ||||
|                 top: idx * 20, | ||||
|                 top: idx * 24, | ||||
|                 right: 10, | ||||
|                 style: { | ||||
|                   text: `${item[0]}:${data.toFixed(1)}${ | ||||
|   | ||||
| @@ -5,7 +5,6 @@ | ||||
|       :data="nutritionSource" | ||||
|       type="nutrition" | ||||
|       width="364px" | ||||
|  | ||||
|       :subTitle="subTitle" | ||||
|     /> | ||||
|     <pie-chart | ||||
| @@ -65,13 +64,25 @@ export default { | ||||
|         ["晚餐", data.calories5], | ||||
|       ]; | ||||
|       if (data.calories2) { | ||||
|         source.push(["早加餐", data.calories2]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "早餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "早加餐", | ||||
|           data.calories2, | ||||
|         ]); | ||||
|       } | ||||
|       if (data.calories4) { | ||||
|         source.push(["午加餐", data.calories4]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "午餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "午加餐", | ||||
|           data.calories4, | ||||
|         ]); | ||||
|       } | ||||
|       if (data.calories6) { | ||||
|         source.push(["晚加餐", data.calories6]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "晚餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "晚加餐", | ||||
|           data.calories6, | ||||
|         ]); | ||||
|       } | ||||
|       return source; | ||||
|     }, | ||||
| @@ -83,13 +94,25 @@ export default { | ||||
|         ["晚餐", data.weight5], | ||||
|       ]; | ||||
|       if (data.weight2) { | ||||
|         source.push(["早加餐", data.weight2]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "早餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "早加餐", | ||||
|           data.weight2, | ||||
|         ]); | ||||
|       } | ||||
|       if (data.weight4) { | ||||
|         source.push(["午加餐", data.weight4]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "午餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "午加餐", | ||||
|           data.weight4, | ||||
|         ]); | ||||
|       } | ||||
|       if (data.weight6) { | ||||
|         source.push(["晚加餐", data.weight6]); | ||||
|         const tarIdx = source.findIndex((obj) => obj[0] === "晚餐"); | ||||
|         source.splice(tarIdx > -1 ? tarIdx + 1 : source.length, 0, [ | ||||
|           "晚加餐", | ||||
|           data.weight6, | ||||
|         ]); | ||||
|       } | ||||
|       return source; | ||||
|     }, | ||||
|   | ||||
| @@ -275,6 +275,7 @@ import AddDishesDrawer from "./AddDishesDrawer"; | ||||
| import DishesSettingDialog from "./DishesSettingDialog"; | ||||
| import VueScrollTo from "vue-scrollto"; | ||||
| import RemarkDialog from "./RemarkDialog"; | ||||
| import { processMenuData } from "./utils"; | ||||
|  | ||||
| export default { | ||||
|   name: "RecipesCom", | ||||
| @@ -318,86 +319,7 @@ export default { | ||||
|       if (!this.data.dishes) { | ||||
|         return []; | ||||
|       } | ||||
|       const mData = this.data.dishes | ||||
|         .sort((a, b) => a.type - b.type) | ||||
|         .reduce((arr, cur, idx) => { | ||||
|           if (cur.dishesId > 0 && cur.type !== "0") { | ||||
|             cur.igdList.forEach((igd) => { | ||||
|               let lastTypeHit = false, | ||||
|                 lastNameHit = false; | ||||
|               if (arr.length > 0) { | ||||
|                 // 倒推,找到第一个出现的位置 | ||||
|                 lastTypeHit = arr[arr.length - 1].type === cur.type; | ||||
|                 if (lastTypeHit) { | ||||
|                   let typePos = arr.length - 1; | ||||
|                   for (let i = typePos; i >= 0; i--) { | ||||
|                     if (arr[i].type !== cur.type) { | ||||
|                       break; | ||||
|                     } | ||||
|                     typePos = i; | ||||
|                   } | ||||
|                   arr[typePos].typeSpan.rowspan += 1; | ||||
|                 } | ||||
|                 lastNameHit = | ||||
|                   arr[arr.length - 1].name === cur.name && | ||||
|                   arr[arr.length - 1].type === cur.type; | ||||
|                 // arr[arr.length - 1].dishesId === cur.dishesId; | ||||
|                 if (lastNameHit) { | ||||
|                   let namePos = arr.length - 1; | ||||
|                   for (let i = namePos; i >= 0; i--) { | ||||
|                     if (arr[i].name !== cur.name) { | ||||
|                       break; | ||||
|                     } | ||||
|                     namePos = i; | ||||
|                   } | ||||
|                   arr[namePos].nameSpan.rowspan += 1; | ||||
|                 } | ||||
|               } | ||||
|  | ||||
|               // console.log(cur); | ||||
|               arr.push({ | ||||
|                 id: cur.id, | ||||
|                 dishesId: cur.dishesId, | ||||
|                 menuId: cur.menuId, | ||||
|                 name: cur.name, | ||||
|                 type: cur.type, | ||||
|                 isMain: cur.isMain, | ||||
|                 methods: cur.methods, | ||||
|                 remark: cur.remark, | ||||
|                 igdId: igd.id, | ||||
|                 igdType: igd.type, | ||||
|                 igdName: igd.name, | ||||
|                 proteinRatio: igd.proteinRatio, | ||||
|                 fatRatio: igd.fatRatio, | ||||
|                 carbonRatio: igd.carbonRatio, | ||||
|                 rec: igd.rec, | ||||
|                 notRec: igd.notRec, | ||||
|                 weight: igd.weight, | ||||
|                 cusWeight: igd.cusWeight, | ||||
|                 cusUnit: igd.cusUnit, | ||||
|                 typeSpan: lastTypeHit | ||||
|                   ? { | ||||
|                       rowspan: 0, | ||||
|                       colspan: 0, | ||||
|                     } | ||||
|                   : { | ||||
|                       rowspan: 1, | ||||
|                       colspan: 1, | ||||
|                     }, | ||||
|                 nameSpan: lastNameHit | ||||
|                   ? { | ||||
|                       rowspan: 0, | ||||
|                       colspan: 0, | ||||
|                     } | ||||
|                   : { | ||||
|                       rowspan: 1, | ||||
|                       colspan: 1, | ||||
|                     }, | ||||
|               }); | ||||
|             }); | ||||
|           } | ||||
|           return arr; | ||||
|         }, []); | ||||
|       const mData = processMenuData(this.data.dishes); | ||||
|       // console.log(mData); | ||||
|  | ||||
|       return mData; | ||||
|   | ||||
| @@ -0,0 +1,81 @@ | ||||
| export function processMenuData(dishes) { | ||||
|   return dishes | ||||
|     .sort((a, b) => a.type - b.type) | ||||
|     .reduce((arr, cur) => { | ||||
|       if (cur.dishesId > 0 && cur.type !== "0") { | ||||
|         cur.igdList.forEach(igd => { | ||||
|           let lastTypeHit = false, | ||||
|             lastNameHit = false; | ||||
|           if (arr.length > 0) { | ||||
|             // 倒推,找到第一个出现的位置 | ||||
|             lastTypeHit = arr[arr.length - 1].type === cur.type; | ||||
|             if (lastTypeHit) { | ||||
|               let typePos = arr.length - 1; | ||||
|               for (let i = typePos; i >= 0; i--) { | ||||
|                 if (arr[i].type !== cur.type) { | ||||
|                   break; | ||||
|                 } | ||||
|                 typePos = i; | ||||
|               } | ||||
|               arr[typePos].typeSpan.rowspan += 1; | ||||
|             } | ||||
|             lastNameHit = | ||||
|               arr[arr.length - 1].dishesId === cur.dishesId && | ||||
|               arr[arr.length - 1].type === cur.type; | ||||
|             if (lastNameHit) { | ||||
|               let namePos = arr.length - 1; | ||||
|               for (let i = namePos; i >= 0; i--) { | ||||
|                 if (arr[i].dishesId !== cur.dishesId) { | ||||
|                   break; | ||||
|                 } | ||||
|                 namePos = i; | ||||
|               } | ||||
|               arr[namePos].nameSpan.rowspan += 1; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           // console.log(cur); | ||||
|           arr.push({ | ||||
|             id: cur.id, | ||||
|             dishesId: cur.dishesId, | ||||
|             menuId: cur.menuId, | ||||
|             name: cur.name, | ||||
|             type: cur.type, | ||||
|             isMain: cur.isMain, | ||||
|             methods: cur.methods, | ||||
|             remark: cur.remark, | ||||
|             igdId: igd.id, | ||||
|             igdType: igd.type, | ||||
|             igdName: igd.name, | ||||
|             proteinRatio: igd.proteinRatio, | ||||
|             fatRatio: igd.fatRatio, | ||||
|             carbonRatio: igd.carbonRatio, | ||||
|             rec: igd.rec, | ||||
|             notRec: igd.notRec, | ||||
|             weight: igd.weight, | ||||
|             cusWeight: igd.cusWeight, | ||||
|             cusUnit: igd.cusUnit, | ||||
|             typeSpan: lastTypeHit | ||||
|               ? { | ||||
|                   rowspan: 0, | ||||
|                   colspan: 0 | ||||
|                 } | ||||
|               : { | ||||
|                   rowspan: 1, | ||||
|                   colspan: 1 | ||||
|                 }, | ||||
|             nameSpan: lastNameHit | ||||
|               ? { | ||||
|                   rowspan: 0, | ||||
|                   colspan: 0 | ||||
|                 } | ||||
|               : { | ||||
|                   rowspan: 1, | ||||
|                   colspan: 1 | ||||
|                 } | ||||
|           }); | ||||
|         }); | ||||
|       } | ||||
|       return arr; | ||||
|     }, []); | ||||
| } | ||||
| @@ -19,6 +19,17 @@ | ||||
|         > | ||||
|           另存为模板 | ||||
|         </el-button> | ||||
|         <el-button | ||||
|           size="mini" | ||||
|           type="primary" | ||||
|           style="margin-left: 12px" | ||||
|           icon="el-icon-download" | ||||
|           @click="handleOnExportImg" | ||||
|           v-loading="downloading" | ||||
|           :disabled="downloading" | ||||
|         > | ||||
|           导出图片 | ||||
|         </el-button> | ||||
|       </section> | ||||
|       <section> | ||||
|         <span class="font_size_style"> | ||||
| @@ -96,6 +107,7 @@ const { mapActions, mapState, mapMutations } = createNamespacedHelpers( | ||||
|   "recipes" | ||||
| ); | ||||
| import TemplateDialog from "@/components/TemplateDialog"; | ||||
| import html2canvans from "html2canvas"; | ||||
| export default { | ||||
|   name: "RecipesHeaderCom", | ||||
|   components: { | ||||
| @@ -104,6 +116,7 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       loading: false, | ||||
|       downloading: false, | ||||
|       nFontSize: 0, | ||||
|       fontSizeOpts: [ | ||||
|         { value: 8, label: "8" }, | ||||
| @@ -117,7 +130,14 @@ export default { | ||||
|   }, | ||||
|   updated() {}, | ||||
|   computed: { | ||||
|     ...mapState(["recipesId", "reviewStatus", "fontSize", "leftShow"]), | ||||
|     ...mapState([ | ||||
|       "recipesId", | ||||
|       "reviewStatus", | ||||
|       "fontSize", | ||||
|       "leftShow", | ||||
|       "healthyData", | ||||
|       "recipesData", | ||||
|     ]), | ||||
|   }, | ||||
|   watch: {}, | ||||
|   methods: { | ||||
| @@ -193,12 +213,47 @@ export default { | ||||
|           return "info"; | ||||
|       } | ||||
|     }, | ||||
|     handleOnExportImg() { | ||||
|       this.downloading = true; | ||||
|       this.$nextTick(() => { | ||||
|         const centerContentDom = document.getElementById("center_content"); | ||||
|         if (!centerContentDom) { | ||||
|           this.downloading = false; | ||||
|           return; | ||||
|         } | ||||
|         centerContentDom.style.overflow = "visible"; | ||||
|         const recipesDom = document.getElementById("recipes_content"); | ||||
|         if (!recipesDom) { | ||||
|           this.downloading = false; | ||||
|           return; | ||||
|         } | ||||
|         recipesDom.style.overflow = "visible"; | ||||
|         html2canvans(recipesDom, { | ||||
|           scale: 1.5, | ||||
|           height: recipesDom.scrollHeight, | ||||
|         }).then((canvas) => { | ||||
|           const { name } = this.healthyData; | ||||
|           const startNum = this.recipesData[0].numDay; | ||||
|           const endNum = this.recipesData[this.recipesData.length - 1].numDay; | ||||
|           const link = document.createElement("a"); | ||||
|           link.download = `${name}_第${startNum}至${endNum}天.jpeg`; | ||||
|           link.href = canvas.toDataURL(); | ||||
|           link.click(); | ||||
|  | ||||
|           centerContentDom.style.overflow = "auto"; | ||||
|           recipesDom.style.overflow = "auto"; | ||||
|  | ||||
|           this.downloading = false; | ||||
|           this.$message.success("食谱导出成功"); | ||||
|         }); | ||||
|       }); | ||||
|     }, | ||||
|     ...mapActions(["saveRecipes", "updateReviewStatus"]), | ||||
|     ...mapMutations(["updateStateData", "updateFontSize", "toggleLeftShow"]), | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
| <style rel="stylesheet/scss" lang="scss" scope> | ||||
| <style  lang="scss" scoped> | ||||
| .recipes_header_com_wrapper { | ||||
|   .header_btns { | ||||
|     display: flex; | ||||
| @@ -219,5 +274,14 @@ export default { | ||||
|     font-size: 12px; | ||||
|     margin-right: 12px; | ||||
|   } | ||||
|  | ||||
|   /deep/ .el-loading-spinner { | ||||
|     margin-top: -10px; | ||||
|   } | ||||
|  | ||||
|   /deep/.el-loading-spinner .circular { | ||||
|     width: 20px; | ||||
|     height: 20px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|         <VerifyView /> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="content" v-loading="recipesDataLoading"> | ||||
|     <div class="content" v-loading="recipesDataLoading" id="center_content"> | ||||
|       <RecipesView | ||||
|         v-if="!!recipesData.length" | ||||
|         :data="recipesData" | ||||
|   | ||||
| @@ -83,7 +83,11 @@ export default { | ||||
|           obj[cur.type] = []; | ||||
|         } | ||||
|         let tarMenu = cur; | ||||
|         if (!tarMenu.methods && tarMenu.igdList.length === 1) { | ||||
|         if ( | ||||
|           !tarMenu.methods && | ||||
|           !tarMenu.remark && | ||||
|           tarMenu.igdList.length === 1 | ||||
|         ) { | ||||
|           tarMenu = tarMenu.igdList[0]; | ||||
|           tarMenu.cusStr = `${this.cusWeightDict[tarMenu.cusWeight] || ""}${ | ||||
|             this.cusUnitDict[tarMenu.cusUnit] || "" | ||||
|   | ||||
| @@ -63,20 +63,17 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       visible: false, | ||||
|       label: '', | ||||
|       loading: false, | ||||
|       title: "", | ||||
|       logo: require("@/assets/logo/st_logo.png"), | ||||
|       shoppingCart: {}, | ||||
|       igdUnitDict: { | ||||
|         鸡蛋: "个", | ||||
|         牛奶: "盒", | ||||
|       }, | ||||
|     }; | ||||
|   }, | ||||
|   methods: { | ||||
|     showDrawer(obj) { | ||||
|       const { recipesId, num, label, data } = obj; | ||||
|       console.log(obj); | ||||
|       // console.log(obj); | ||||
|       this.label = label; | ||||
|       // num < 0 全部计算 | ||||
|       this.title = `${ | ||||
| @@ -100,6 +97,7 @@ export default { | ||||
|       } | ||||
|     }, | ||||
|     processShoppingCart(num, data = []) { | ||||
|       // console.log(data); | ||||
|       this.shoppingCart = data.reduce((obj, cur, idx) => { | ||||
|         if ( | ||||
|           num < 0 || // 全部计算 | ||||
| @@ -115,14 +113,14 @@ export default { | ||||
|                 const tarIObj = tarObj.find((zObj) => zObj.name === iObj.name); | ||||
|                 if (tarIObj) { | ||||
|                   tarIObj.weight += this.igdUnitDict[iObj.name] | ||||
|                     ? iObj.cusWeight | ||||
|                     ? parseInt(iObj.cusWeight) | ||||
|                     : iObj.weight; | ||||
|                 } else { | ||||
|                   tarObj.push({ | ||||
|                     type: iObj.type, | ||||
|                     name: iObj.name, | ||||
|                     weight: this.igdUnitDict[iObj.name] | ||||
|                       ? iObj.cusWeight | ||||
|                       ? parseInt(iObj.cusWeight) | ||||
|                       : iObj.weight, | ||||
|                     unit: this.igdUnitDict[iObj.name] || "g", | ||||
|                   }); | ||||
| @@ -133,7 +131,7 @@ export default { | ||||
|                     type: iObj.type, | ||||
|                     name: iObj.name, | ||||
|                     weight: this.igdUnitDict[iObj.name] | ||||
|                       ? iObj.cusWeight | ||||
|                       ? parseInt(iObj.cusWeight) | ||||
|                       : iObj.weight, | ||||
|                     unit: this.igdUnitDict[iObj.name] || "g", | ||||
|                   }, | ||||
| @@ -153,7 +151,7 @@ export default { | ||||
|     ...mapActions(["fetchFullRecipes"]), | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapState(["recipes", "idgTypeDict"]), | ||||
|     ...mapState(["recipes", "idgTypeDict", "igdUnitDict"]), | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user