2
0

5 Коммиты 9e147c672b ... 6f2d7570fa

Автор SHA1 Сообщение Дата
  wangyang 6f2d7570fa 修复bug 5 лет назад
  wangyang 431bf3c700 计算菜谱营养素含量 5 лет назад
  wangyang 486a1c5397 食物新增gi gl,完成食物gigl计算 5 лет назад
  wangyang 28066e11de update 5 лет назад
  wangyang 6db49c9540 调整营养素含量计算至后端计算,前端仅显示 5 лет назад

+ 8 - 0
src/api/food.js

@@ -189,3 +189,11 @@ export function getFoodAllUnits(id) {
   })
 }
 
+// 食物营养素含量计算
+export function calculateNutrientsContent(id, params) {
+  return request({
+    url: `/api/foods/${id}/nutrients/content`,
+    method: 'get',
+    params
+  })
+}

+ 8 - 0
src/api/recipe.js

@@ -128,3 +128,11 @@ export function removeRecipeFood(recipeId, recipeFoodId) {
     method: 'delete'
   })
 }
+
+// 计算菜谱营养素含量
+export function getRecipeReport(recipeId) {
+  return request({
+    url: `/api/recipes/${recipeId}/report`,
+    method: 'get'
+  })
+}

+ 9 - 0
src/api/unit.js

@@ -43,3 +43,12 @@ export function updateUnit(id, data) {
     data
   })
 }
+
+// 单位转换
+export function convertUnits(unitPairs) {
+  return request({
+    url: `/api/units/convert`,
+    method: 'get',
+    params: { unitPairs }
+  })
+}

+ 8 - 6
src/components/Dropzone/index.vue

@@ -192,19 +192,21 @@
         if (!val) return
         if (Array.isArray(val)) {
           val.map((v, i) => {
-            const fileUrl = `${process.env.VUE_APP_BASE_API}/api/files/view-file?path=${v}`
-            const mockFile = { url: fileUrl }
+            // const fileUrl = `${process.env.VUE_APP_BASE_API}/api/files/view-file?path=${v}`
+            // const mockFile = { url: fileUrl }
+            const mockFile = { url: v }
             this.dropzone.options.addedfile.call(this.dropzone, mockFile)
-            this.dropzone.options.thumbnail.call(this.dropzone, mockFile, fileUrl)
+            this.dropzone.options.thumbnail.call(this.dropzone, mockFile, v)
             mockFile.previewElement.classList.add('dz-success')
             mockFile.previewElement.classList.add('dz-complete')
             return true
           })
         } else {
-          const fileUrl = `${process.env.VUE_APP_BASE_API}/api/files/view-file?path=${val}`
-          const mockFile = { url: fileUrl }
+          // const fileUrl = `${process.env.VUE_APP_BASE_API}/api/files/view-file?path=${val}`
+          // const mockFile = { url: fileUrl }
+          const mockFile = { url: val }
           this.dropzone.options.addedfile.call(this.dropzone, mockFile)
-          this.dropzone.options.thumbnail.call(this.dropzone, mockFile, fileUrl)
+          this.dropzone.options.thumbnail.call(this.dropzone, mockFile, val)
           mockFile.previewElement.classList.add('dz-success')
           mockFile.previewElement.classList.add('dz-complete')
         }

+ 3 - 2
src/components/Upload/SingleImage.vue

@@ -72,8 +72,9 @@
         this.$emit('input', val)
       },
       handleImageSuccess(response) {
-        this.emitInput(process.env.VUE_APP_BASE_API + '/api/files/view-file?path=' + response.url)
-        this.$emit("success", process.env.VUE_APP_BASE_API + '/api/files/view-file?path=' + response.url)
+        // this.emitInput(process.env.VUE_APP_BASE_API + '/api/files/view-file?path=' + response.url)
+        this.emitInput(response.url)
+        this.$emit("success", response.url)
       }
     }
   }

+ 7 - 1
src/views/food/components/FoodDetail.vue

@@ -18,6 +18,12 @@
         <el-form-item label="ep:" prop="ep" style="margin-bottom: 40px;width: 60%">
           <el-input v-model="postForm.ep" placeholder="请输入ep" style="width: 60%" />
         </el-form-item>
+        <el-form-item label="GI:" prop="gi" style="margin-bottom: 40px;width: 60%">
+          <el-input v-model="postForm.gi" placeholder="请输入gi" style="width: 60%" />
+        </el-form-item>
+        <el-form-item label="GL:" prop="gl" style="margin-bottom: 40px;width: 60%">
+          <el-input v-model="postForm.gl" placeholder="请输入gl" style="width: 60%" />
+        </el-form-item>
         <el-form-item label="食物种类:" prop="categoryId" style="margin-bottom: 40px;width: 60%">
           <el-cascader
             v-model="postForm.categoryId"
@@ -149,7 +155,7 @@ export default {
       let imgs = this.postForm.images
       let imgIndex = -1
       for (let i = 0; i < imgs.length; i++) {
-        if (imgs[i] === file.fileUrl) {
+        if (imgs[i] === file.url) {
           imgIndex = i
           break
         }

+ 10 - 0
src/views/food/index.vue

@@ -70,6 +70,16 @@
           <span>{{ row.ep }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="GI" align="center" width="70px">
+        <template slot-scope="{row}">
+          <span>{{ row.gi }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="GL" align="center" width="70px">
+        <template slot-scope="{row}">
+          <span>{{ row.gl ? row.gl : row.glCalcd }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="创建时间" width="180px" align="center">
         <template slot-scope="{row}">
           <span>{{ row.createTime }}</span>

+ 1 - 1
src/views/foodModifier/components/ModifierDetail.vue

@@ -92,7 +92,7 @@ export default {
       let imgs = this.postForm.images
       let imgIndex = -1
       for (let i = 0; i < imgs.length; i++) {
-        if (imgs[i] === file.fileUrl) {
+        if (imgs[i] === file.url) {
           imgIndex = i
           break
         }

+ 6 - 20
src/views/foodModifier/index.vue

@@ -90,7 +90,8 @@
 
 <script>
 import { getFoodModifiers, removeFoodModifier, updateFoodModifierSort, convertFoodUnit, getNutrientList,
-  getDetail} from '@/api/food'
+  getDetail, calculateNutrientsContent } from '@/api/food'
+import { convertUnits } from '@/api/unit'
 
 export default {
   name: 'FoodModifierIndex',
@@ -149,26 +150,11 @@ export default {
       })
     },
     showDialog(row, column, event) {
-      getNutrientList(row.foodId).then(res => {
-        const nutrients = res.data
-        convertFoodUnit(row.foodId, { fromUnit: row.inInitUnit }).then(res => {
-          if (!res.data.ratio) {
-            return;
-          }
-          this.dialogHtml = `转换关系:1${row.inInitUnit}${this.food.name}=${res.data.ratio}${this.food.normalizedUnit}${this.food.name}<br>`
-          this.dialogHtml += `${row.inInit}${row.inInitUnit}${this.food.name}含有如下营养素:<br>`
-          this.dialogHtml += `******************************<br>`
-          for (let i=0; i < nutrients.length; i++) {
-            const nutrient = nutrients[i]
-            const quantity = nutrient.normalizedQuantity * res.data.ratio * row.inInit
-            this.dialogHtml += `${nutrient.nutrientName}:${quantity}${nutrient.unit}。<br>`
-            this.dialogHtml += `营养素计量为:${nutrient.quantity}${nutrient.unit}。Nv_Spec为:${nutrient.nvSpec}${nutrient.nvSpecUnit}。<br>`
-            this.dialogHtml += `******************************<br>`
-          }
-          this.dialogFormVisible = true
-        })
+      calculateNutrientsContent(row.foodId, { unit: row.inInitUnit, quantity: row.inInit }).then(res => {
+        this.dialogFormVisible = true
+        this.dialogHtml = res.data
       }).catch(res => {
-        this.$message.error('获取数据失败')
+        this.$message.error(res.data.message)
       })
     }
   }

+ 17 - 2
src/views/recipe/index.vue

@@ -30,6 +30,7 @@
       fit
       highlight-current-row
       style="width: 100%;"
+      @row-click="showDialog"
     >
       <el-table-column type="index" label="序号" align="center" fixed width="60px" />
       <el-table-column label="名称" fixed align="center">
@@ -106,11 +107,15 @@
         </el-button>
       </div>
     </el-dialog>
+
+    <el-dialog title="营养素计算" :visible.sync="contentDialogVisible">
+      <span v-html="recipeContentHtml" />
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { getRecipes, createRecipe, updateRecipe, removeRecipe } from '@/api/recipe'
+import { getRecipes, createRecipe, updateRecipe, removeRecipe, getRecipeReport } from '@/api/recipe'
 import Pagination from '@/components/Pagination'
 import SingleImage from '@/components/Upload/SingleImage'
 
@@ -131,7 +136,9 @@ export default {
       textMap: { 'create': '新建', 'edit': '更新' },
       dialogStatus: '',
       rules: {},
-      params: {}
+      params: {},
+      recipeContentHtml: '',
+      contentDialogVisible: false
     }
   },
   created() {
@@ -191,6 +198,14 @@ export default {
     },
     updateFile(value) {
       this.$set(this.params, 'coverPic', value)
+    },
+    showDialog(row) {
+      getRecipeReport(row.id).then(res => {
+        this.contentDialogVisible = true
+        this.recipeContentHtml = res.data
+      }).catch(res => {
+        this.$message.error(res.data.message)
+      })
     }
   }
 }

+ 9 - 3
src/views/user/index.vue

@@ -48,7 +48,7 @@
       </el-table-column>
       <el-table-column label="性别" align="center" width="60">
         <template slot-scope="{row}">
-          <span>{{ row.gender | genderFilter}}</span>
+          <span>{{ row.gender | genderFilter }}</span>
         </template>
       </el-table-column>
       <el-table-column label="最后登录时间" align="center" width="180">
@@ -62,7 +62,7 @@
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="280">
-        <template slot-scope="{row,$index}">
+        <template slot-scope="{row}">
           <el-button type="primary" size="mini" @click="handleUpdate(row)">
             更新
           </el-button>
@@ -79,7 +79,13 @@
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total>0" :total="total" :page.sync="listQuery.pageNum" :limit.sync="listQuery.pageSize" @pagination="fetchData" />
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="listQuery.pageNum"
+      :limit.sync="listQuery.pageSize"
+      @pagination="fetchData"
+    />
 
     <el-dialog :title="textMapping[dialogStatus]" :visible.sync="dialogFormVisible">
       <el-form ref="dataForm" :rules="rules" :model="params" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;">