From e404c3be1a8774db1c9970683af3ff98d666536b Mon Sep 17 00:00:00 2001 From: huangdeliang Date: Thu, 18 Feb 2021 17:05:10 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=8F=9C=E5=93=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stdiet-ui/jsconfig.json | 10 + stdiet-ui/package.json | 4 +- .../src/components/AutoHideInfo/index.vue | 2 +- .../src/components/AutoHideMessage/index.vue | 2 +- stdiet-ui/src/components/Editor/index.vue | 4 +- .../components/PhysicalSignsDialog/index.vue | 2 +- .../components/PhysicalSignsEdit/index.vue | 2 +- .../components/PhysicalSignsRemark/index.vue | 2 +- stdiet-ui/src/components/RecipesCom/index.vue | 87 ----- .../TextInfo/index.vue} | 0 stdiet-ui/src/store/modules/recipes.js | 163 ++++++++- stdiet-ui/src/utils/echarts/myShine.js | 257 ++++++++++++++ stdiet-ui/src/views/custom/dishes/index.vue | 14 +- .../custom/recipesBuild/BodySignView.vue | 2 +- .../views/custom/recipesBuild/HealthyView.vue | 3 +- .../views/custom/recipesBuild/RecipesView.vue | 17 - .../RecipesView/RecipesAspectCom/BarChart.vue | 146 ++++++++ .../RecipesView/RecipesAspectCom/PieChart.vue | 200 +++++++++++ .../RecipesView/RecipesAspectCom/index.vue | 62 ++++ .../RecipesCom/EditableText/index.vue | 69 ++++ .../RecipesCom/EditableUnit/index.vue | 147 ++++++++ .../RecipesView/RecipesCom/index.vue | 321 ++++++++++++++++++ .../custom/recipesBuild/RecipesView/index.vue | 44 +++ .../src/views/custom/recipesBuild/index.vue | 49 +-- 24 files changed, 1462 insertions(+), 147 deletions(-) create mode 100644 stdiet-ui/jsconfig.json delete mode 100644 stdiet-ui/src/components/RecipesCom/index.vue rename stdiet-ui/src/{views/custom/recipesBuild/TextInfo.vue => components/TextInfo/index.vue} (100%) create mode 100644 stdiet-ui/src/utils/echarts/myShine.js delete mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableText/index.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableUnit/index.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue diff --git a/stdiet-ui/jsconfig.json b/stdiet-ui/jsconfig.json new file mode 100644 index 000000000..f87334d48 --- /dev/null +++ b/stdiet-ui/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/stdiet-ui/package.json b/stdiet-ui/package.json index 29bdfa9f3..f69302144 100644 --- a/stdiet-ui/package.json +++ b/stdiet-ui/package.json @@ -46,13 +46,15 @@ "clipboard": "^2.0.6", "core-js": "3.6.5", "dayjs": "^1.9.1", - "echarts": "4.2.1", + "echarts": "4.7.0", "element-ui": "2.13.2", "file-saver": "2.0.1", "fuse.js": "3.4.4", + "immer": "^8.0.1", "js-beautify": "1.10.2", "js-cookie": "2.2.0", "jsencrypt": "3.0.0-rc.1", + "lodash": "^4.17.20", "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", diff --git a/stdiet-ui/src/components/AutoHideInfo/index.vue b/stdiet-ui/src/components/AutoHideInfo/index.vue index c583838c6..20457e1f4 100644 --- a/stdiet-ui/src/components/AutoHideInfo/index.vue +++ b/stdiet-ui/src/components/AutoHideInfo/index.vue @@ -38,7 +38,7 @@ }; - \ No newline at end of file + diff --git a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue index a21c58626..102568317 100644 --- a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue +++ b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue @@ -473,7 +473,7 @@ export default { }; - diff --git a/stdiet-ui/src/views/custom/recipesBuild/TextInfo.vue b/stdiet-ui/src/components/TextInfo/index.vue similarity index 100% rename from stdiet-ui/src/views/custom/recipesBuild/TextInfo.vue rename to stdiet-ui/src/components/TextInfo/index.vue diff --git a/stdiet-ui/src/store/modules/recipes.js b/stdiet-ui/src/store/modules/recipes.js index be63473b5..e0ef51672 100644 --- a/stdiet-ui/src/store/modules/recipes.js +++ b/stdiet-ui/src/store/modules/recipes.js @@ -3,11 +3,17 @@ import { getCustomerPhysicalSignsByCusId } from "@/api/custom/customer"; import { dealHealthy } from "@/utils/healthyData"; import { getRecipesPlan } from "@/api/custom/recipesPlan"; import { getRecipes } from "@/api/custom/recipes"; +import { getDicts } from "@/api/system/dict/data"; +import produce from "immer"; const oriState = { healthyData: {}, healthyDataType: 0, - recipesData: [] + recipesData: [], + cusUnitOptions: [], + cusWeightOptions: [], + typeOptions: [], + currentDay: -1 }; const mutations = { @@ -17,6 +23,46 @@ const mutations = { }, setRecipesData(state, payload) { state.recipesData = payload.recipesData; + console.log(payload.recipesData); + }, + updateRecipesDishesWeight(state, payload) { + const tarDishes = state.recipesData[payload.num].dishes.find( + obj => obj.id === payload.dishesId + ); + if (tarDishes) { + const tarIgd = tarDishes.igdList.find(obj => obj.id === payload.igdId); + if (tarIgd) { + tarIgd.weight = payload.weight; + } + } + }, + updateRecipesDishesCustomWeight(state, payload) { + const tarDishes = state.recipesData[payload.num].dishes.find( + obj => obj.id === payload.dishesId + ); + if (tarDishes) { + const tarIgd = tarDishes.igdList.find(obj => obj.id === payload.igdId); + if (tarIgd) { + tarIgd.cusWeight = payload.cusWeight; + tarIgd.cusUnit = payload.cusUnit; + } + } + }, + updateOptions(state, payload) { + payload.cusUnitOptions && (state.cusUnitOptions = payload.cusUnitOptions); + payload.cusWeightOptions && + (state.cusWeightOptions = payload.cusWeightOptions); + payload.typeOptions && (state.typeOptions = payload.typeOptions); + }, + setCurrentDay(state, payload) { + state.currentDay = + payload.currentDay === state.currentDay ? -1 : payload.currentDay; + }, + deleteSomeDayDishes(state, payload) { + // console.log(payload); + state.recipesData[payload.num].dishes = state.recipesData[ + payload.num + ].dishes.filter(obj => obj.id !== payload.dishesId); }, clean(state) { // console.log("clean"); @@ -32,12 +78,25 @@ const actions = { if (!orderResult.data.cusId) { throw new Error("未找到用户id"); } + // + getDicts("cus_cus_unit").then(response => { + commit("updateOptions", { cusUnitOptions: response.data }); + }); + getDicts("cus_cus_weight").then(response => { + commit("updateOptions", { cusWeightOptions: response.data }); + }); + getDicts("cus_dishes_type").then(response => { + commit("updateOptions", { typeOptions: response.data }); + }); // 健康数据 const healthyDataResult = await getCustomerPhysicalSignsByCusId( orderResult.data.cusId ); if (healthyDataResult.code === 200) { + if (!healthyDataResult.data.customerHealthy) { + throw new Error("客户还没填写健康评估表"); + } commit("setHealtyData", { healthyDataType: healthyDataResult.data.type, healthyData: dealHealthy(healthyDataResult.data.customerHealthy) @@ -51,7 +110,56 @@ const actions = { const recipesDataResult = await getRecipes(payload.recipesId); if (recipesDataResult.code === 200) { commit("setRecipesData", { - recipesData: recipesDataResult.data + recipesData: recipesDataResult.data.map(dayData => { + return { + id: dayData.id, + numDay: dayData.numDay, + dishes: dayData.dishes.reduce((arr, cur) => { + if ( + cur.id > -1 && + cur.name && + cur.igdList.length > 0 && + cur.type !== "0" + ) { + arr.push({ + id: cur.id, + name: cur.name, + methods: cur.methods, + type: cur.type, + isMain: cur.isMain, + igdList: cur.igdList.reduce((igdArr, igdData) => { + if (igdData.id > 0) { + const tarDetail = cur.detail.find( + obj => obj.id === igdData.id + ); + igdArr.push({ + id: igdData.id, + name: igdData.name, + carbonRatio: igdData.carbonRatio, + fatRatio: igdData.fatRatio, + proteinRatio: igdData.proteinRatio, + cusUnit: tarDetail + ? tarDetail.cus_unit + : igdData.cusUnit, + cusWeight: tarDetail + ? parseFloat(tarDetail.cus_weight) + : igdData.cusWeight, + weight: tarDetail + ? parseFloat(tarDetail.weight) + : igdData.weight, + notRec: igdData.notRec, + rec: igdData.rec, + type: igdData.type + }); + } + return igdArr; + }, []) + }); + } + return arr; + }, []) + }; + }) }); } else { throw new Error(recipesDataResult.msg); @@ -60,7 +168,56 @@ const actions = { } }; -const getters = {}; +const getters = { + analyseData: state => { + const datas = + state.currentDay > -1 + ? [state.recipesData[state.currentDay]] + : state.recipesData; + + const nutriData = datas.map(data => + data.dishes.reduce( + (obj, cur) => { + cur.igdList.forEach(igd => { + obj.pWeight += (igd.weight / 100) * igd.proteinRatio; + obj.pHeat = obj.pWeight * 4; + obj.fWeight += (igd.weight / 100) * igd.fatRatio; + obj.fHeat = obj.fWeight * 9; + obj.cWeight += (igd.weight / 100) * igd.carbonRatio; + obj.cHeat = obj.cWeight * 4; + }); + return obj; + }, + { + name: `第${data.numDay}天`, + pWeight: 0, + fWeight: 0, + cWeight: 0, + pHeat: 0, + fHeat: 0, + cHeat: 0 + } + ) + ); + // console.log(nutriData); + return nutriData; + }, + cusUnitDict: state => + state.cusUnitOptions.reduce((obj, cur) => { + obj[cur.dictValue] = cur.dictLabel; + return obj; + }, {}), + cusWeightDict: state => + state.cusWeightOptions.reduce((obj, cur) => { + obj[cur.dictValue] = cur.dictLabel; + return obj; + }, {}), + typeDict: state => + state.typeOptions.reduce((obj, cur) => { + obj[cur.dictValue] = cur.dictLabel; + return obj; + }, {}) +}; export default { namespaced: true, diff --git a/stdiet-ui/src/utils/echarts/myShine.js b/stdiet-ui/src/utils/echarts/myShine.js new file mode 100644 index 000000000..01ce1abe6 --- /dev/null +++ b/stdiet-ui/src/utils/echarts/myShine.js @@ -0,0 +1,257 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if ( + typeof exports === 'object' && + typeof exports.nodeName !== 'string' + ) { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +})(this, function(exports, echarts) { + var log = function(msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + }; + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + + var colorPalette = [ + '#c12e34', + '#e6b600', + '#0098d9', + '#2b821d', + '#005eaa', + '#339ca8', + '#cda819', + '#32a487' + ]; + + var theme = { + color: colorPalette, + + title: { + textStyle: { + fontWeight: 'normal', + fontSize: 14 + } + }, + + visualMap: { + color: ['#1790cf', '#a2d4e6'] + }, + + toolbox: { + iconStyle: { + normal: { + borderColor: '#06467c' + } + } + }, + + tooltip: { + textStyle: { + color: '#262626', + fontSize: 12 + }, + backgroundColor: 'rgba(255,255,255,0.9)', + borderWidth: 1, + padding: 10, + borderColor: '#ccc', + extraCssText: 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);', + }, + + categoryAxis: { + axisLine: { + show: true, + lineStyle: { + color: '#ebebeb', + }, + }, + axisTick: { + show: false, + lineStyle: { + color: '#ebebeb', + }, + }, + axisLabel: { + show: true, + textStyle: { + color: '#262626', + }, + }, + splitLine: { + show: false, + lineStyle: { + color: ['#ccc'], + }, + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + }, + }, + valueAxis: { + axisLine: { + show: true, + lineStyle: { + color: '#ebebeb', + }, + }, + axisTick: { + show: false, + lineStyle: { + color: '#ebebeb', + }, + }, + axisLabel: { + show: true, + textStyle: { + color: '#262626', + }, + }, + splitLine: { + show: false, + lineStyle: { + color: ['#ccc'], + }, + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + }, + }, + + dataZoom: { + dataBackgroundColor: '#dedede', + fillerColor: 'rgba(154,217,247,0.2)', + handleColor: '#005eaa' + }, + + timeline: { + lineStyle: { + color: '#005eaa' + }, + controlStyle: { + color: '#005eaa', + borderColor: '#005eaa' + } + }, + + candlestick: { + itemStyle: { + color: '#c12e34', + color0: '#2b821d' + }, + lineStyle: { + width: 1, + color: '#c12e34', + color0: '#2b821d' + }, + areaStyle: { + color: '#e6b600', + color0: '#005eaa' + } + }, + + graph: { + itemStyle: { + color: '#e6b600' + }, + linkStyle: { + color: '#005eaa' + } + }, + + map: { + itemStyle: { + color: '#f2385a', + borderColor: '#eee', + areaColor: '#ddd' + }, + areaStyle: { + color: '#ddd' + }, + label: { + color: '#c12e34' + } + }, + + gauge: { + axisLine: { + show: true, + lineStyle: { + color: [ + [0.2, '#2b821d'], + [0.8, '#005eaa'], + [1, '#c12e34'] + ], + width: 5 + } + }, + axisTick: { + splitNumber: 10, + length: 8, + lineStyle: { + color: 'auto' + } + }, + axisLabel: { + textStyle: { + color: 'auto' + } + }, + splitLine: { + length: 12, + lineStyle: { + color: 'auto' + } + }, + pointer: { + length: '90%', + width: 3, + color: 'auto' + }, + title: { + textStyle: { + color: '#333' + } + }, + detail: { + textStyle: { + color: 'auto' + } + } + } + }; + echarts.registerTheme('myShine', theme); +}); diff --git a/stdiet-ui/src/views/custom/dishes/index.vue b/stdiet-ui/src/views/custom/dishes/index.vue index ba013d2c2..35330533b 100644 --- a/stdiet-ui/src/views/custom/dishes/index.vue +++ b/stdiet-ui/src/views/custom/dishes/index.vue @@ -675,13 +675,13 @@ export default { .catch(function () {}); }, handleChange(value, direction, movedKeys) { - console.log({ - oriIgdList: this.oriDataList, - selIgdList: this.form.igdList, - ingDataList: this.ingDataList, - value, - ingType: this.ingType, - }); + // console.log({ + // oriIgdList: this.oriDataList, + // selIgdList: this.form.igdList, + // ingDataList: this.ingDataList, + // value, + // ingType: this.ingType, + // }); const newTableData = []; this.selRec = []; this.selNotRec = []; diff --git a/stdiet-ui/src/views/custom/recipesBuild/BodySignView.vue b/stdiet-ui/src/views/custom/recipesBuild/BodySignView.vue index 039b409e2..89b1f13bf 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/BodySignView.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/BodySignView.vue @@ -15,7 +15,7 @@ - diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue new file mode 100644 index 000000000..6c9ca5d12 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue @@ -0,0 +1,146 @@ + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue new file mode 100644 index 000000000..9ae52dad5 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue @@ -0,0 +1,200 @@ + + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue new file mode 100644 index 000000000..a8cd827c1 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableText/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableText/index.vue new file mode 100644 index 000000000..48b8b1824 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableText/index.vue @@ -0,0 +1,69 @@ + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableUnit/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableUnit/index.vue new file mode 100644 index 000000000..4b90c69d8 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/EditableUnit/index.vue @@ -0,0 +1,147 @@ + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue new file mode 100644 index 000000000..ac198febf --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue @@ -0,0 +1,321 @@ + + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue new file mode 100644 index 000000000..dba5cd95e --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/index.vue b/stdiet-ui/src/views/custom/recipesBuild/index.vue index 3ebf30274..ad3a9e2b6 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/index.vue @@ -1,26 +1,30 @@ - diff --git a/stdiet-ui/src/components/ContractDrawer/index.vue b/stdiet-ui/src/components/ContractDrawer/index.vue index 0a5c5e96a..4085e88b2 100644 --- a/stdiet-ui/src/components/ContractDrawer/index.vue +++ b/stdiet-ui/src/components/ContractDrawer/index.vue @@ -4,6 +4,7 @@ :title="title" :close-on-press-escape="false" :visible.sync="visible" + :wrapperClosable="false" @closed="handleOnClosed" size="40%" > @@ -22,22 +23,48 @@ - - + + - + - + @@ -48,15 +75,15 @@ type="text" icon="el-icon-view" @click="handleOnDetailClick(scope.row)" - >详情 + >详情 查看 + >查看 删除 + >删除 @@ -78,23 +105,23 @@ diff --git a/stdiet-ui/src/components/OrderDrawer/index.vue b/stdiet-ui/src/components/OrderDrawer/index.vue index 1bb84e301..b2df91de2 100644 --- a/stdiet-ui/src/components/OrderDrawer/index.vue +++ b/stdiet-ui/src/components/OrderDrawer/index.vue @@ -4,6 +4,7 @@ :title="title" :close-on-press-escape="false" :visible.sync="visible" + :wrapperClosable="false" @closed="handleOnClosed" size="40%" > diff --git a/stdiet-ui/src/store/modules/recipes.js b/stdiet-ui/src/store/modules/recipes.js index e0ef51672..ce6983729 100644 --- a/stdiet-ui/src/store/modules/recipes.js +++ b/stdiet-ui/src/store/modules/recipes.js @@ -12,6 +12,7 @@ const oriState = { recipesData: [], cusUnitOptions: [], cusWeightOptions: [], + dishesTypeOptions: [], typeOptions: [], currentDay: -1 }; @@ -23,36 +24,29 @@ const mutations = { }, setRecipesData(state, payload) { state.recipesData = payload.recipesData; - console.log(payload.recipesData); + // console.log(payload.recipesData); }, - updateRecipesDishesWeight(state, payload) { + updateRecipesDishesDetail(state, payload) { const tarDishes = state.recipesData[payload.num].dishes.find( obj => obj.id === payload.dishesId ); if (tarDishes) { const tarIgd = tarDishes.igdList.find(obj => obj.id === payload.igdId); if (tarIgd) { - tarIgd.weight = payload.weight; + payload.weight && (tarIgd.weight = payload.weight); + payload.cusWeight && (tarIgd.cusWeight = payload.cusWeight); + payload.cusUnit && (tarIgd.cusUnit = payload.cusUnit); } } }, - updateRecipesDishesCustomWeight(state, payload) { - const tarDishes = state.recipesData[payload.num].dishes.find( - obj => obj.id === payload.dishesId - ); - if (tarDishes) { - const tarIgd = tarDishes.igdList.find(obj => obj.id === payload.igdId); - if (tarIgd) { - tarIgd.cusWeight = payload.cusWeight; - tarIgd.cusUnit = payload.cusUnit; - } - } + addRecipesDishes(state, payload) { + + state.recipesData[payload.num].dishes.push(payload.data); }, updateOptions(state, payload) { - payload.cusUnitOptions && (state.cusUnitOptions = payload.cusUnitOptions); - payload.cusWeightOptions && - (state.cusWeightOptions = payload.cusWeightOptions); - payload.typeOptions && (state.typeOptions = payload.typeOptions); + Object.keys(payload).forEach(key => { + state[key] = payload[key]; + }); }, setCurrentDay(state, payload) { state.currentDay = @@ -88,6 +82,9 @@ const actions = { getDicts("cus_dishes_type").then(response => { commit("updateOptions", { typeOptions: response.data }); }); + getDicts("cus_dishes_type").then(response => { + commit("updateOptions", { dishesTypeOptions: response.data }); + }); // 健康数据 const healthyDataResult = await getCustomerPhysicalSignsByCusId( diff --git a/stdiet-ui/src/utils/healthyData.js b/stdiet-ui/src/utils/healthyData.js index daca800c2..9023a81a1 100644 --- a/stdiet-ui/src/utils/healthyData.js +++ b/stdiet-ui/src/utils/healthyData.js @@ -384,7 +384,8 @@ export const yesNoName = [ "longEatDrugFlag", "allergyFlag", "smokeFlag", - "secondSmoke" + "secondSmoke", + "sleepDrugFlag" ]; export const dictName = [ @@ -550,7 +551,7 @@ export function dealHealthy(customerHealthy) { customerHealthy.getupTime += "点"; } if (customerHealthy.hasOwnProperty("signList")) { - customerHealthy.signStr = customerHealthy.signList + customerHealthy.signStr = (customerHealthy.signList || []) .map(obj => obj.name) .join(","); } diff --git a/stdiet-ui/src/views/custom/dishes/index.vue b/stdiet-ui/src/views/custom/dishes/index.vue index 35330533b..e7121530b 100644 --- a/stdiet-ui/src/views/custom/dishes/index.vue +++ b/stdiet-ui/src/views/custom/dishes/index.vue @@ -162,9 +162,9 @@
diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/ConfigDishes.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/ConfigDishes.vue new file mode 100644 index 000000000..c64c2f311 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/ConfigDishes.vue @@ -0,0 +1,165 @@ + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/SelectDishes.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/SelectDishes.vue new file mode 100644 index 000000000..348ae2f45 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/SelectDishes.vue @@ -0,0 +1,172 @@ + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/index.vue new file mode 100644 index 000000000..93899f9a0 --- /dev/null +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/index.vue @@ -0,0 +1,166 @@ + + + + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue index ac198febf..925ab22c0 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue @@ -11,31 +11,26 @@ currentDay + 1 === num ? '1px solid #d96969' : 'none' }`" > - + + - + diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue index 925ab22c0..a9297d2d3 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue @@ -18,7 +18,9 @@ }} @@ -270,11 +272,11 @@ export default { }, handleOnDelete(data) { // console.log(data); - this.deleteSomeDayDishes({ num: this.num - 1, dishesId: data.id }); + this.deleteDishes({ num: this.num - 1, dishesId: data.id }); }, handleOnWeightChange(data, weight) { // console.log({ data, weight }); - this.updateRecipesDishesDetail({ + this.updateDishes({ num: this.num - 1, dishesId: data.id, igdId: data.igdId, @@ -282,7 +284,7 @@ export default { }); }, handleOnCustomUnitChange(data, { cusWeight, cusUnit }) { - this.updateRecipesDishesDetail({ + this.updateDishes({ num: this.num - 1, dishesId: data.id, igdId: data.igdId, @@ -291,17 +293,13 @@ export default { }); }, handleOnDishesConfirm(data) { - this.addRecipesDishes({ + this.addDishes({ num: this.num - 1, data, }); }, - ...mapMutations([ - "setCurrentDay", - "deleteSomeDayDishes", - "updateRecipesDishesDetail", - "addRecipesDishes", - ]), + ...mapActions(["updateDishes", "addDishes", "deleteDishes"]), + ...mapMutations(["setCurrentDay",]), }, }; From 3f620ed8948dd90d29ea9c11d5667a0a69e352e0 Mon Sep 17 00:00:00 2001 From: huangdeliang Date: Mon, 22 Feb 2021 19:36:01 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=94=9F=E6=88=90=E9=A3=9F=E8=B0=B1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysRecipesController.java | 69 +++- .../com/stdiet/custom/domain/SysDishes.java | 6 - .../com/stdiet/custom/domain/SysRecipes.java | 36 +- .../stdiet/custom/domain/SysRecipesDaily.java | 34 ++ .../custom/domain/SysRecipesDailyDishes.java | 28 ++ .../custom/mapper/SysRecipesMapper.java | 19 +- .../custom/service/ISysRecipesService.java | 12 +- .../service/impl/SysRecipesServiceImpl.java | 60 ++- .../mapper/custom/SysRecipesMapper.xml | 53 ++- .../mapper/custom/SysRecipesPlanMapper.xml | 2 +- stdiet-ui/src/api/custom/recipes.js | 16 +- stdiet-ui/src/components/TextInfo/index.vue | 10 +- stdiet-ui/src/router/index.js | 2 +- stdiet-ui/src/store/modules/recipes.js | 361 ++++++++++-------- .../RecipesView/RecipesAspectCom/index.vue | 21 +- .../RecipesCom/AddDishesDrawer/index.vue | 27 +- .../RecipesView/RecipesCom/index.vue | 13 +- .../custom/recipesBuild/RecipesView/index.vue | 5 + .../custom/recipesBuild/RecommondView.vue | 22 ++ .../src/views/custom/recipesBuild/index.vue | 33 +- .../src/views/custom/recipesPlan/index.vue | 36 +- 21 files changed, 576 insertions(+), 289 deletions(-) create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDaily.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDailyDishes.java create mode 100644 stdiet-ui/src/views/custom/recipesBuild/RecommondView.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesController.java index a6f196231..950b7c1cc 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesController.java @@ -4,7 +4,8 @@ import com.stdiet.common.annotation.Log; import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.common.enums.BusinessType; -import com.stdiet.custom.domain.SysDishes; +import com.stdiet.custom.domain.SysRecipes; +import com.stdiet.custom.domain.SysRecipesDailyDishes; import com.stdiet.custom.service.ISysRecipesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -16,36 +17,66 @@ public class SysRecipesController extends BaseController { @Autowired private ISysRecipesService sysRecipesService; + /** + * 获取食谱详情 + * + * @param resipesId + * @return + */ @GetMapping(value = "/{resipesId}") public AjaxResult getInfo(@PathVariable("resipesId") Long resipesId) { return AjaxResult.success(sysRecipesService.selectSysRecipesByRecipesId(resipesId)); } - /** - * 修改食谱菜品 - * - * @return - */ - @Log(title = "食谱", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SysDishes sysDishes) { - return toAjax(sysRecipesService.updateDishesDetail(sysDishes)); - } - @Log(title = "食谱", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody SysDishes sysDishes) { - int rows = sysRecipesService.insertDishes(sysDishes); + public AjaxResult addRecipes(@RequestBody SysRecipes sysRecipes) { + int rows = sysRecipesService.addRecipes(sysRecipes); if (rows > 0) { - return AjaxResult.success(sysDishes.getId()); + return AjaxResult.success(sysRecipes.getId()); } else { return AjaxResult.error(); } } - @Log(title = "销售订单", businessType = BusinessType.DELETE) - @DeleteMapping("/dishes/{cId}") - public AjaxResult delete(@PathVariable Long cId) { - return toAjax(sysRecipesService.deleteDishes(cId)); + /** + * 修改食谱菜品 + * + * @param sysRecipesDailyDishes + * @return + */ + @Log(title = "食谱菜品", businessType = BusinessType.UPDATE) + @PutMapping(value = "/dishes") + public AjaxResult edit(@RequestBody SysRecipesDailyDishes sysRecipesDailyDishes) { + return toAjax(sysRecipesService.updateDishesDetail(sysRecipesDailyDishes)); + } + + /** + * 添加菜品 + * + * @param sysRecipesDailyDishes + * @return + */ + @Log(title = "食谱菜品", businessType = BusinessType.INSERT) + @PostMapping(value = "/dishes") + public AjaxResult add(@RequestBody SysRecipesDailyDishes sysRecipesDailyDishes) { + int rows = sysRecipesService.addDishes(sysRecipesDailyDishes); + if (rows > 0) { + return AjaxResult.success(sysRecipesDailyDishes.getId()); + } else { + return AjaxResult.error(); + } + } + + /** + * 删除菜品 + * + * @param id + * @return + */ + @Log(title = "食谱菜品", businessType = BusinessType.DELETE) + @DeleteMapping("/dishes/{id}") + public AjaxResult delete(@PathVariable Long id) { + return toAjax(sysRecipesService.deleteDishes(id)); } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java index d831bce8c..6d6f32c9f 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java @@ -23,10 +23,6 @@ public class SysDishes { */ private Long id; - private Long cId; - - private Long menuId; - /** * 菜品名称 */ @@ -79,6 +75,4 @@ public class SysDishes { private List igdList; - private JSONArray detail; - } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipes.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipes.java index 9b727297d..40dc33b41 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipes.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipes.java @@ -1,47 +1,17 @@ package com.stdiet.custom.domain; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; -import java.util.Date; import java.util.List; @Data public class SysRecipes { - private static final long serialVersionUID = 1L; private Long id; - private Integer numDay; + private Long cusId; - private List dishes; + private Long planId; - private Integer reviewStatus; - - /** - * 创建者 - */ - private String createBy; - - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 更新者 - */ - private String updateBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 备注 - */ - private String remark; + private List menus; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDaily.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDaily.java new file mode 100644 index 000000000..057f25b21 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDaily.java @@ -0,0 +1,34 @@ +package com.stdiet.custom.domain; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class SysRecipesDaily { + private Long id; + + private Integer numDay; + + private Date date; + + private Long recipesId; + + private Long cusId; + + private Integer reviewStatus; + + private Date createTime; + + private String createBy; + + private Date updateTime; + + private String updateBy; + + private String remark; + + private List dishes; + +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDailyDishes.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDailyDishes.java new file mode 100644 index 000000000..b4e5d5e77 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesDailyDishes.java @@ -0,0 +1,28 @@ +package com.stdiet.custom.domain; + +import com.alibaba.fastjson.JSONArray; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class SysRecipesDailyDishes { + private Long id; + + private Long menuId; + + private String name; + + private Long dishesId; + + private JSONArray detail; + + private String methods; + + private List igdList; + + private String type; + + private Integer isMain; +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java index 182589b86..b97792625 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java @@ -1,17 +1,28 @@ package com.stdiet.custom.mapper; -import com.stdiet.custom.domain.SysDishes; import com.stdiet.custom.domain.SysRecipes; +import com.stdiet.custom.domain.SysRecipesDaily; +import com.stdiet.custom.domain.SysRecipesDailyDishes; import java.util.List; public interface SysRecipesMapper { + + public int addRecipes(SysRecipes sysRecipes); + + public int bashAddDishes(List dishes); + + public int bashAddMenus(List menus); + + + public int getNumDayByCusId(Long id); + public List selectSysRecipesByRecipesId(Long id); - public int updateDishesDetail(SysDishes sysDishes); + public int updateDishesDetail(SysRecipesDailyDishes sysRecipesDaily); - public int insertDishes(SysDishes sysDishes); + public int addDishes(SysRecipesDailyDishes sysRecipesDaily); - public int deleteDishes(Long cId); + public int deleteDishes(Long id); } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysRecipesService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysRecipesService.java index 8b85509a2..b23c9b81c 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysRecipesService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysRecipesService.java @@ -1,16 +1,20 @@ package com.stdiet.custom.service; -import com.stdiet.custom.domain.SysDishes; import com.stdiet.custom.domain.SysRecipes; +import com.stdiet.custom.domain.SysRecipesDaily; +import com.stdiet.custom.domain.SysRecipesDailyDishes; import java.util.List; public interface ISysRecipesService { + + public int addRecipes(SysRecipes sysRecipes); + public List selectSysRecipesByRecipesId(Long id); - public int updateDishesDetail(SysDishes sysDishes); + public int updateDishesDetail(SysRecipesDailyDishes sysRecipesDaily); - public int insertDishes(SysDishes sysDishes); + public int addDishes(SysRecipesDailyDishes sysRecipesDaily); - public int deleteDishes(Long cId); + public int deleteDishes(Long id); } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesServiceImpl.java index b9315178a..3ceaae40d 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesServiceImpl.java @@ -1,13 +1,18 @@ package com.stdiet.custom.service.impl; -import com.stdiet.custom.domain.SysDishes; import com.stdiet.custom.domain.SysRecipes; +import com.stdiet.custom.domain.SysRecipesDaily; +import com.stdiet.custom.domain.SysRecipesDailyDishes; +import com.stdiet.custom.domain.SysRecipesPlan; import com.stdiet.custom.mapper.SysRecipesMapper; +import com.stdiet.custom.mapper.SysRecipesPlanMapper; import com.stdiet.custom.service.ISysRecipesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Date; import java.util.List; @Service @@ -17,23 +22,64 @@ public class SysRecipesServiceImpl implements ISysRecipesService { @Autowired private SysRecipesMapper sysRecipesMapper; + @Autowired + private SysRecipesPlanMapper sysRecipesPlanMapper; + + + @Override + public int addRecipes(SysRecipes sysRecipes) { + int rows = sysRecipesMapper.addRecipes(sysRecipes); + if (rows > 0) { + int count = sysRecipesMapper.getNumDayByCusId(sysRecipes.getCusId()); + List menus = sysRecipes.getMenus(); + List dishes = new ArrayList<>(); + int size = menus.size(); + for (int i = 0; i < size; i++) { + SysRecipesDaily tarMenu = menus.get(i); + // 计算menuId + long dailyId = sysRecipes.getId() + new Date().getTime() + i; + tarMenu.setId(dailyId); + // 插入recipiesId + tarMenu.setRecipesId(sysRecipes.getId()); + // 插入numDay + tarMenu.setNumDay(count + i + 1); + for (SysRecipesDailyDishes tmpDishes : tarMenu.getDishes()) { + // 让菜品插入menuId + tmpDishes.setMenuId(dailyId); + dishes.add(tmpDishes); + } + } + // 插入每天食谱 + sysRecipesMapper.bashAddMenus(menus); + // 插入每天菜品 + sysRecipesMapper.bashAddDishes(dishes); + // 更新食谱计划 + SysRecipesPlan sysRecipesPlan = new SysRecipesPlan(); + sysRecipesPlan.setId(sysRecipes.getPlanId()); + sysRecipesPlan.setRecipesId(sysRecipes.getId()); + sysRecipesPlanMapper.updateSysRecipesPlan(sysRecipesPlan); + } + + return rows; + } + @Override public List selectSysRecipesByRecipesId(Long id) { return sysRecipesMapper.selectSysRecipesByRecipesId(id); } @Override - public int updateDishesDetail(SysDishes sysDishes) { - return sysRecipesMapper.updateDishesDetail(sysDishes); + public int updateDishesDetail(SysRecipesDailyDishes sysRecipesDailyDishes) { + return sysRecipesMapper.updateDishesDetail(sysRecipesDailyDishes); } @Override - public int insertDishes(SysDishes sysDishes) { - return sysRecipesMapper.insertDishes(sysDishes); + public int addDishes(SysRecipesDailyDishes sysRecipesDailyDishes) { + return sysRecipesMapper.addDishes(sysRecipesDailyDishes); } @Override - public int deleteDishes(Long cId) { - return sysRecipesMapper.deleteDishes(cId); + public int deleteDishes(Long id) { + return sysRecipesMapper.deleteDishes(id); } } diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml index 8c4a648bb..d29b1f7df 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -15,9 +15,10 @@ - - - + + + + @@ -78,26 +79,26 @@ - + update sys_customer_menu_dishes detail = #{detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, - where id = #{cId} + where id = #{id} - + insert into sys_customer_menu_dishes menu_id, - dishes_id, + dishes_id, type, detail, #{menuId}, - #{id}, + #{dishesId}, #{type}, #{detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, @@ -105,7 +106,39 @@ - delete from sys_customer_menu_dishes where id = #{cId} + delete from sys_customer_menu_dishes where id = #{id} + + + + + + insert into sys_customer_menu + + cus_id, + + + #{cusId}, + + + + + + insert into sys_customer_daily_menu (id, num_day, date, recipes_id, cus_id) values + + (#{item.id}, #{item.numDay}, #{item.date}, #{item.recipesId}, #{item.cusId}) + + + + + + insert into sys_customer_menu_dishes (menu_id, type, dishes_id, detail) values + + (#{item.menuId}, #{item.type}, #{item.dishesId}, #{item.detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}) + + + \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml index fe546cb74..b14eca6a9 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml @@ -126,7 +126,7 @@