From 31088215b5dd6c99df7116233c78d8a42fb7cdd4 Mon Sep 17 00:00:00 2001
From: huangdeliang <huangdeliang@skieer.com>
Date: Wed, 24 Feb 2021 18:20:45 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F=EF=BC=8C?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../stdiet/custom/domain/SysRecipesPlan.java  |   6 +-
 .../service/impl/SysOrderServiceImpl.java     |   3 +
 .../service/impl/SysRecipesServiceImpl.java   |   3 -
 .../mapper/custom/SysOrderMapper.xml          |  12 +-
 .../mapper/custom/SysRecipesMapper.xml        |   4 +-
 .../mapper/custom/SysRecipesPlanMapper.xml    |  25 ++-
 stdiet-ui/package.json                        |   1 +
 .../src/components/ContractDrawer/index.vue   |   1 -
 .../src/components/OrderDrawer/index.vue      |   1 -
 .../components/RecipesPlanDrawer/index.vue    |  81 ++++++++++
 stdiet-ui/src/main.js                         | 112 ++++++++------
 stdiet-ui/src/router/index.js                 |  25 +--
 stdiet-ui/src/store/modules/recipes.js        | 142 ++++++++++--------
 stdiet-ui/src/views/custom/customer/index.vue |  16 +-
 stdiet-ui/src/views/custom/order/index.vue    |   8 +-
 .../RecipesView/RecipesAspectCom/BarChart.vue |  14 +-
 .../RecipesView/RecipesAspectCom/PieChart.vue |   1 +
 .../RecipesView/RecipesAspectCom/index.vue    |   7 +-
 .../AddDishesDrawer/ConfigDishes.vue          |  21 +--
 .../RecipesView/RecipesCom/index.vue          | 102 +++++++++----
 .../custom/recipesBuild/RecipesView/index.vue |   7 +-
 .../src/views/custom/recipesBuild/index.vue   |  10 +-
 .../src/views/custom/recipesPlan/index.vue    |  37 +++--
 23 files changed, 423 insertions(+), 216 deletions(-)
 create mode 100644 stdiet-ui/src/components/RecipesPlanDrawer/index.vue

diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesPlan.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesPlan.java
index c67a8fc8e..4892c8d31 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesPlan.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesPlan.java
@@ -29,7 +29,11 @@ public class SysRecipesPlan extends BaseEntity
     private Long cusId;
 
     //客户ID
-    private Long customerId;
+//    private Long customerId;
+
+    private Integer startNumDay;
+
+    private Integer endNumDay;
 
     //非持久化字段,客户姓名
     @Excel(name = "客户姓名")
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java
index 2101510b2..42855dc14 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java
@@ -1,6 +1,7 @@
 package com.stdiet.custom.service.impl;
 
 import com.stdiet.common.utils.DateUtils;
+import com.stdiet.common.utils.SecurityUtils;
 import com.stdiet.custom.domain.SysOrder;
 import com.stdiet.custom.mapper.SysOrderMapper;
 import com.stdiet.custom.service.ISysCommissionDayService;
@@ -70,6 +71,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
     public int insertSysOrder(SysOrder sysOrder) {
         Date orderTime = DateUtils.getNowDate();
         sysOrder.setCreateTime(orderTime);
+        sysOrder.setCreateBy(SecurityUtils.getUsername());
         //sysOrder.setOrderTime(orderTime);
         //计算服务到期时间
         setOrderServerEndDate(sysOrder);
@@ -94,6 +96,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
         SysOrder oldSysOrder = sysOrderMapper.selectSysOrderById(sysOrder.getOrderId());
         //计算服务到期时间
         setOrderServerEndDate(sysOrder);
+        sysOrder.setUpdateBy(SecurityUtils.getUsername());
         sysOrder.setUpdateTime(DateUtils.getNowDate());
         //更新订单
         int row = sysOrderMapper.updateSysOrder(sysOrder);
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 3ceaae40d..5b583ff03 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
@@ -30,7 +30,6 @@ public class SysRecipesServiceImpl implements ISysRecipesService {
     public int addRecipes(SysRecipes sysRecipes) {
         int rows = sysRecipesMapper.addRecipes(sysRecipes);
         if (rows > 0) {
-            int count = sysRecipesMapper.getNumDayByCusId(sysRecipes.getCusId());
             List<SysRecipesDaily> menus = sysRecipes.getMenus();
             List<SysRecipesDailyDishes> dishes = new ArrayList<>();
             int size = menus.size();
@@ -41,8 +40,6 @@ public class SysRecipesServiceImpl implements ISysRecipesService {
                 tarMenu.setId(dailyId);
                 // 插入recipiesId
                 tarMenu.setRecipesId(sysRecipes.getId());
-                // 插入numDay
-                tarMenu.setNumDay(count + i + 1);
                 for (SysRecipesDailyDishes tmpDishes : tarMenu.getDishes()) {
                     // 让菜品插入menuId
                     tmpDishes.setMenuId(dailyId);
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml
index 20c43cceb..592110f80 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml
@@ -47,10 +47,12 @@
     </resultMap>
 
     <sql id="selectSysOrderVo">
-        select o.order_id, o.review_status, o.cus_id, o.customer, o.phone, o.amount, o.start_time, o.pause_time, o.status, o.weight, ser.dict_label as serve_time,
+        select o.order_id, o.review_status, o.cus_id, sc.name as customer, sc.phone, o.amount, o.start_time, o.pause_time, o.status, o.weight, ser.dict_label as serve_time,
         o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time,
         o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id,
-        o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,o.become_fan_time from sys_order o
+        o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,o.become_fan_time
+        from sys_order o
+        LEFT JOIN sys_customer sc ON sc.id = o.cus_id
         LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id
         LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = o.account_id
         LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_serve_time') AS ser ON ser.dict_value = o.serve_time_id
@@ -99,7 +101,7 @@
         <where>
             <if test="orderId != null  and orderId != ''">and order_id = #{orderId}</if>
             <if test="customer != null  and customer != ''">
-                and (customer like concat('%',#{customer},'%') or phone like concat('%',#{customer},'%'))
+                and (sc.name like concat('%',#{customer},'%') or sc.phone like concat('%',#{customer},'%'))
             </if>
              <if test="cusId != null  and cusId != ''">and cus_id = #{cusId}</if>
             <!--<if test="phone != null  and phone != ''">and phone = #{phone}</if>-->
@@ -127,7 +129,7 @@
                     and 0 > amount
                 </if>
             </if>
-            <if test="true">and del_flag = 0</if>
+            <if test="true">and o.del_flag = 0</if>
         </where>
         order by order_time desc
     </select>
@@ -325,7 +327,7 @@
       from sys_order o
       left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0
       left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag = 0
-      where review_status = 'yes' and o.order_time >= '2021-01-01' and del_flag = 0
+      where review_status = 'yes' and o.order_time >= '2021-01-01' and o.del_flag = 0
       <if test="userId != null">
           and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
       </if>
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml
index d29b1f7df..3e15a55d7 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml
@@ -127,9 +127,9 @@
 
     <!--  新增每菜单 -->
     <insert id="bashAddMenus">
-        insert into sys_customer_daily_menu (id, num_day, date, recipes_id, cus_id) values
+        insert into sys_customer_daily_menu (id, num_day, recipes_id, cus_id) values
         <foreach collection="list" separator="," item="item" index="index">
-            (#{item.id}, #{item.numDay}, #{item.date}, #{item.recipesId}, #{item.cusId})
+            (#{item.id}, #{item.numDay}, #{item.recipesId}, #{item.cusId})
         </foreach>
     </insert>
 
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml
index 619537d9e..0b6d91f64 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml
@@ -9,6 +9,8 @@
         <result property="orderId"    column="order_id"    />
         <result property="startDate"    column="start_date"    />
         <result property="endDate"    column="end_date"    />
+        <result property="startNumDay"    column="start_num_day"    />
+        <result property="endNumDay"    column="end_num_day"    />
         <result property="recipesId"    column="recipes_id"    />
         <result property="sendFlag"    column="send_flag"    />
         <result property="sendTime"    column="send_time"    />
@@ -19,7 +21,7 @@
         <result property="delFlag"    column="del_flag"    />
         <result property="cusId"    column="cus_id"    />
         <!-- 非持久化字段 -->
-        <result property="customerId" column="cus_id"></result><!-- 客户ID -->
+<!--        <result property="customerId" column="cus_id"></result>&lt;!&ndash; 客户ID &ndash;&gt;-->
         <result property="customer"    column="customer"    /><!-- 客户姓名 -->
         <result property="phone" column="phone"     />
         <result property="orderStartDate"    column="order_start_date"    />
@@ -31,7 +33,7 @@
     </resultMap>
 
     <sql id="selectSysRecipesPlanVo">
-        select id, order_id, cus_id, start_date, end_date, recipes_id, send_flag, send_time, create_time, create_by, update_time, update_by, del_flag from sys_recipes_plan
+        select id, order_id, cus_id, start_date, end_date, start_num_day, end_num_day, recipes_id, send_flag, send_time, create_time, create_by, update_time, update_by, del_flag from sys_recipes_plan
     </sql>
 
     <select id="selectSysRecipesPlanList" parameterType="SysRecipesPlan" resultMap="SysRecipesPlanResult">
@@ -40,6 +42,8 @@
         <if test="cusId != null "> and cus_id = #{cusId}</if>
         <if test="startDate != null "> and start_date = #{startDate}</if>
         <if test="endDate != null "> and end_date = #{endDate}</if>
+        <if test="startNumDay != null "> and start_num_day = #{startNumDay}</if>
+        <if test="endNumDay != null "> and end_num_day = #{endNumDay}</if>
         <if test="recipesId != null "> and recipes_id = #{recipesId}</if>
         <if test="sendFlag != null "> and send_flag = #{sendFlag}</if>
         <if test="sendTime != null "> and send_time = #{sendTime}</if>
@@ -57,6 +61,8 @@
             <if test="cusId != null">cus_id,</if>
             <if test="startDate != null">start_date,</if>
             <if test="endDate != null">end_date,</if>
+            <if test="startNumDay != null">start_num_day,</if>
+            <if test="endNumDay != null">end_num_day,</if>
             <if test="recipesId != null">recipes_id,</if>
             <if test="sendFlag != null">send_flag,</if>
             <if test="sendTime != null">send_time,</if>
@@ -71,6 +77,8 @@
             <if test="cusId != null">#{cusId},</if>
             <if test="startDate != null">#{startDate},</if>
             <if test="endDate != null">#{endDate},</if>
+            <if test="startNumDay != null">#{startNumDay},</if>
+            <if test="endNumDay != null">#{endNumDay},</if>
             <if test="recipesId != null">#{recipesId},</if>
             <if test="sendFlag != null">#{sendFlag},</if>
             <if test="sendTime != null">#{sendTime},</if>
@@ -89,6 +97,8 @@
             <if test="cusId != null">cus_id = #{cusId},</if>
             <if test="startDate != null">start_date = #{startDate},</if>
             <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="startNumDay != null">start_num_day = #{startNumDay},</if>
+            <if test="endNumDay != null">end_num_day = #{endNumDay},</if>
             <if test="recipesId != null">recipes_id = #{recipesId},</if>
             <if test="sendFlag != null">send_flag = #{sendFlag},</if>
             <if test="sendTime != null">send_time = #{sendTime},</if>
@@ -115,10 +125,10 @@
     <!-- 批量插入食谱计划 -->
     <insert id="insertBatch">
         INSERT INTO sys_recipes_plan
-        (order_id, cus_id, start_date, end_date, send_flag, send_time, recipes_id)
+        (order_id, cus_id, start_date, end_date, start_num_day, end_num_day, send_flag, send_time, recipes_id)
         VALUES
         <foreach collection ="list" item="plan" separator =",">
-            (#{plan.orderId}, #{plan.cusId}, #{plan.startDate}, #{plan.endDate}, #{plan.sendFlag}, #{plan.sendTime}, #{plan.recipesId})
+            (#{plan.orderId}, #{plan.cusId}, #{plan.startDate}, #{plan.endDate}, #{plan.startNumDay}, #{plan.endNumDay}, #{plan.sendFlag}, #{plan.sendTime}, #{plan.recipesId})
         </foreach >
     </insert>
 
@@ -132,15 +142,18 @@
 
     <!-- 食谱计划、订单表联查 -->
     <select id="selectPlanListByCondition" parameterType="SysRecipesPlan" resultMap="SysRecipesPlanResult">
-      SELECT srp.id,srp.order_id,srp.recipes_id,sr.customer,sr.cus_id,sr.phone,su_nutritionist.nick_name nutritionist,su_nutritionist_assis.nick_name AS nutritionist_assis,sr.start_time,sr.server_end_time, srp.start_date,srp.end_date,srp.send_flag,srp.send_time
+      SELECT srp.id,srp.order_id,srp.recipes_id,srp.start_num_day,srp.end_num_day,srp.cus_id,sc.phone,
+        su_nutritionist.nick_name nutritionist,su_nutritionist_assis.nick_name AS nutritionist_assis,
+        srp.start_date,srp.end_date,srp.send_flag,srp.send_time, sc.name as customer
       FROM sys_recipes_plan srp
       LEFT JOIN sys_order sr ON sr.order_id = srp.order_id
+      LEFT JOIN sys_customer sc ON sc.id = srp.cus_id
       LEFT JOIN sys_user su_nutritionist ON su_nutritionist.user_id = sr.nutritionist_id AND su_nutritionist.del_flag = 0
       LEFT JOIN sys_user su_nutritionist_assis ON su_nutritionist_assis.user_id = sr.nutri_assis_id AND su_nutritionist_assis.del_flag = 0
       WHERE srp.del_flag = 0
       <if test="orderId != null">AND srp.order_id = #{orderId}</if>
         <if test="sendFlag != null">AND srp.send_flag = #{sendFlag}</if>
-      <if test="customer != null and customer != ''">AND (sr.customer like concat('%',#{customer},'%') OR sr.phone like concat('%',#{customer},'%'))</if>
+      <if test="customer != null and customer != ''">AND (sc.name like concat('%',#{customer},'%') OR sc.phone like concat('%',#{customer},'%'))</if>
       <if test="nutritionistId != null">AND su_nutritionist.user_id = #{nutritionistId}</if>
       <if test="nutritionistAssisId != null">AND su_nutritionist_assis.user_id = #{nutritionistAssisId}</if>
       <if test="startDate != null and endDate != null ">AND srp.start_date BETWEEN date_format(#{startDate},'%y%m%d') AND date_format(#{endDate},'%y%m%d') </if>
diff --git a/stdiet-ui/package.json b/stdiet-ui/package.json
index f69302144..e9357aaf0 100644
--- a/stdiet-ui/package.json
+++ b/stdiet-ui/package.json
@@ -65,6 +65,7 @@
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.4.9",
     "vue-router": "3.0.2",
+    "vue-scrollto": "^2.20.0",
     "vue-splitpane": "1.0.4",
     "vuedraggable": "2.20.0",
     "vuex": "3.1.0"
diff --git a/stdiet-ui/src/components/ContractDrawer/index.vue b/stdiet-ui/src/components/ContractDrawer/index.vue
index 4085e88b2..2facf1ccf 100644
--- a/stdiet-ui/src/components/ContractDrawer/index.vue
+++ b/stdiet-ui/src/components/ContractDrawer/index.vue
@@ -4,7 +4,6 @@
       :title="title"
       :close-on-press-escape="false"
       :visible.sync="visible"
-      :wrapperClosable="false"
       @closed="handleOnClosed"
       size="40%"
     >
diff --git a/stdiet-ui/src/components/OrderDrawer/index.vue b/stdiet-ui/src/components/OrderDrawer/index.vue
index a023e35ee..7a1a3ea13 100644
--- a/stdiet-ui/src/components/OrderDrawer/index.vue
+++ b/stdiet-ui/src/components/OrderDrawer/index.vue
@@ -4,7 +4,6 @@
       :title="title"
       :close-on-press-escape="false"
       :visible.sync="visible"
-      :wrapperClosable="false"
       @closed="handleOnClosed"
       size="40%"
     >
diff --git a/stdiet-ui/src/components/RecipesPlanDrawer/index.vue b/stdiet-ui/src/components/RecipesPlanDrawer/index.vue
new file mode 100644
index 000000000..dbecf5cbb
--- /dev/null
+++ b/stdiet-ui/src/components/RecipesPlanDrawer/index.vue
@@ -0,0 +1,81 @@
+<template>
+  <el-drawer
+    :title="title"
+    :close-on-press-escape="false"
+    :visible.sync="visible"
+    @closed="handleOnClosed"
+    size="40%"
+  >
+    <div class="app-container">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            icon="el-icon-plus"
+            size="mini"
+            @click="handleInnerOpen"
+            >查看暂停记录
+          </el-button>
+        </el-col>
+      </el-row>
+
+      <el-drawer
+        :title="innerTitle"
+        :append-to-body="true"
+        :close-on-press-escape="false"
+        :visible.sync="innerVisible"
+        @closed="handleOnInnerClosed"
+      >
+        <div class="app-container">
+          <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button
+                type="primary"
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleInnerOpen"
+                >查看暂停记录
+              </el-button>
+            </el-col>
+          </el-row>
+        </div>
+      </el-drawer>
+    </div>
+  </el-drawer>
+</template>
+<script>
+export default {
+  name: "RecipesPlanDrawer",
+  data() {
+    return {
+      visible: false,
+      innerVisible: false,
+      title: "",
+      innerTitle: "",
+    };
+  },
+  methods: {
+    showDrawer(data) {
+      this.data = data;
+      if (!this.data) {
+        return;
+      }
+      this.visible = true;
+      this.title = `「${this.data.name}」食谱计划`;
+    },
+    handleOnClosed() {
+      this.data = undefined;
+    },
+    handleInnerOpen() {
+      this.innerVisible = true;
+      this.innerTitle = `「${this.data.name}」暂停记录`;
+    },
+    handleOnInnerClosed() {},
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/ :focus {
+  outline: 0;
+}
+</style>
diff --git a/stdiet-ui/src/main.js b/stdiet-ui/src/main.js
index 2f6f7e638..b270a0d4b 100644
--- a/stdiet-ui/src/main.js
+++ b/stdiet-ui/src/main.js
@@ -1,22 +1,24 @@
-import Vue from 'vue'
+import Vue from "vue";
 
-import Cookies from 'js-cookie'
+import Cookies from "js-cookie";
 
-import 'normalize.css/normalize.css' // a modern alternative to CSS resets
-import Element from 'element-ui'
-import './assets/styles/element-variables.scss'
+import "normalize.css/normalize.css"; // a modern alternative to CSS resets
+import Element from "element-ui";
+import "./assets/styles/element-variables.scss";
 
-import '@/assets/styles/index.scss' // global css
-import '@/assets/styles/ruoyi.scss' // ruoyi css
-import App from './App'
-import store from './store'
-import router from './router'
-import permission from './directive/permission'
+import "@/assets/styles/index.scss"; // global css
+import "@/assets/styles/ruoyi.scss"; // ruoyi css
+import App from "./App";
+import store from "./store";
+import router from "./router";
+import permission from "./directive/permission";
+
+import "./assets/icons"; // icon
+import "./permission"; // permission control
+import { getDicts } from "@/api/system/dict/data";
+import { getConfigKey } from "@/api/system/config";
+import VueScrollTo from "vue-scrollto";
 
-import './assets/icons' // icon
-import './permission' // permission control
-import {getDicts} from "@/api/system/dict/data";
-import {getConfigKey} from "@/api/system/config";
 import {
   addDateRange,
   download,
@@ -32,40 +34,40 @@ import {
 } from "@/utils/ruoyi";
 import Pagination from "@/components/Pagination";
 //自定义表格工具扩展
-import RightToolbar from "@/components/RightToolbar"
+import RightToolbar from "@/components/RightToolbar";
 
 // 全局方法挂载
-Vue.prototype.getDicts = getDicts
-Vue.prototype.getConfigKey = getConfigKey
-Vue.prototype.parseTime = parseTime
-Vue.prototype.resetForm = resetForm
-Vue.prototype.addDateRange = addDateRange
-Vue.prototype.selectDictLabel = selectDictLabel
-Vue.prototype.selectDictLabels = selectDictLabels
-Vue.prototype.download = download
-Vue.prototype.downloadResource = downloadResource
-Vue.prototype.handleTree = handleTree
-Vue.prototype.toThousands = toThousands
-Vue.prototype.digitUppercase = digitUppercase
-Vue.prototype.validatorIDCard = validatorIDCard
+Vue.prototype.getDicts = getDicts;
+Vue.prototype.getConfigKey = getConfigKey;
+Vue.prototype.parseTime = parseTime;
+Vue.prototype.resetForm = resetForm;
+Vue.prototype.addDateRange = addDateRange;
+Vue.prototype.selectDictLabel = selectDictLabel;
+Vue.prototype.selectDictLabels = selectDictLabels;
+Vue.prototype.download = download;
+Vue.prototype.downloadResource = downloadResource;
+Vue.prototype.handleTree = handleTree;
+Vue.prototype.toThousands = toThousands;
+Vue.prototype.digitUppercase = digitUppercase;
+Vue.prototype.validatorIDCard = validatorIDCard;
 
-Vue.prototype.msgSuccess = function (msg) {
-  this.$message({showClose: true, message: msg, type: "success"});
-}
+Vue.prototype.msgSuccess = function(msg) {
+  this.$message({ showClose: true, message: msg, type: "success" });
+};
 
-Vue.prototype.msgError = function (msg) {
-  this.$message({showClose: true, message: msg, type: "error"});
-}
+Vue.prototype.msgError = function(msg) {
+  this.$message({ showClose: true, message: msg, type: "error" });
+};
 
-Vue.prototype.msgInfo = function (msg) {
+Vue.prototype.msgInfo = function(msg) {
   this.$message.info(msg);
-}
+};
 
 // 全局组件挂载
-Vue.component('Pagination', Pagination)
-Vue.component('RightToolbar', RightToolbar)
+Vue.component("Pagination", Pagination);
+Vue.component("RightToolbar", RightToolbar);
 
-Vue.use(permission)
+Vue.use(permission);
 
 /**
  * If you don't want to use mock-server
@@ -77,14 +79,34 @@ Vue.use(permission)
  */
 
 Vue.use(Element, {
-  size: Cookies.get('size') || 'medium' // set element-ui default size
-})
+  size: Cookies.get("size") || "medium" // set element-ui default size
+});
 
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
+
+Vue.directive("title", {
+  inserted: function(el, binding) {
+    document.title = el.dataset.title;
+  }
+});
+
+Vue.use(VueScrollTo, {
+  container: "body",
+  duration: 500,
+  easing: "ease",
+  offset: 0,
+  force: true,
+  cancelable: true,
+  onStart: false,
+  onDone: false,
+  onCancel: false,
+  x: false,
+  y: true
+});
 
 new Vue({
-  el: '#app',
+  el: "#app",
   router,
   store,
   render: h => h(App)
-})
+});
diff --git a/stdiet-ui/src/router/index.js b/stdiet-ui/src/router/index.js
index 723eb3a82..fea245cae 100644
--- a/stdiet-ui/src/router/index.js
+++ b/stdiet-ui/src/router/index.js
@@ -140,19 +140,11 @@ export const constantRoutes = [
     ]
   },
   {
-    path: "/recipes",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "build",
-        component: resolve =>
-          require(["@/views/custom/recipesBuild"], resolve),
-        name: "RecipiesBuild",
-        props: true,
-        meta: { title: "食谱制作" }
-      }
-    ]
+    path: "/recipes/build",
+    component: resolve => require(["@/views/custom/recipesBuild"], resolve),
+    name: "RecipiesBuild",
+    meta: { title: "食谱制作" },
+    hidden: true
   },
   {
     path: "/f/contract/:id(\\d+)",
@@ -174,14 +166,13 @@ export const constantRoutes = [
     hidden: true,
     meta: { title: "胜唐体控健康评估表" }
   },
-{
+  {
     path: "/foodHeatCalculator/:id",
     component: resolve =>
-    require(["@/views/custom/foodHeatStatistics/investigate"], resolve),
+      require(["@/views/custom/foodHeatStatistics/investigate"], resolve),
     hidden: true,
     meta: { title: "外食计算器" }
-},
-
+  }
 ];
 
 export default new Router({
diff --git a/stdiet-ui/src/store/modules/recipes.js b/stdiet-ui/src/store/modules/recipes.js
index dd626ff4f..4311492bd 100644
--- a/stdiet-ui/src/store/modules/recipes.js
+++ b/stdiet-ui/src/store/modules/recipes.js
@@ -8,7 +8,6 @@ import {
   addRecipesApi
 } from "@/api/custom/recipes";
 import { getDicts } from "@/api/system/dict/data";
-import dayjs from "dayjs";
 
 const oriState = {
   cusId: undefined,
@@ -24,8 +23,8 @@ const oriState = {
   dishesTypeOptions: [],
   typeOptions: [],
   currentDay: -1,
-  startDate: "",
-  endDate: ""
+  startNum: 0,
+  endNum: 0
 };
 
 const mutations = {
@@ -36,9 +35,9 @@ const mutations = {
     if (tarDishes) {
       const tarIgd = tarDishes.igdList.find(obj => obj.id === payload.igdId);
       if (tarIgd) {
-        Object.keys(payload).forEach(key => {
-          tarIgd[key] = payload[key];
-        });
+        payload.weight && (tarIgd.weight = payload.weight);
+        payload.cusWeight && (tarIgd.cusWeight = payload.cusWeight);
+        payload.cusUnit && (tarIgd.cusUnit = payload.cusUnit);
       }
     }
   },
@@ -125,63 +124,73 @@ const actions = {
       healthyData
     });
   },
-  async getRecipesInfo({ commit }, payload) {
+  async getRecipesInfo({ commit, state }, payload) {
     commit("updateStateData", {
       recipesDataLoading: true
     });
     const recipesDataResult = await getRecipesApi(payload.recipesId);
-    let recipesData = undefined;
+    let recipesData = [];
     if (recipesDataResult.code === 200) {
-      recipesData = recipesDataResult.data.map(dayData => {
-        return {
-          id: dayData.id,
-          numDay: dayData.numDay,
-          dishes: dayData.dishes.reduce((arr, cur) => {
-            if (
-              cur.dishesId > -1 &&
-              cur.name &&
-              cur.igdList.length > 0 &&
-              cur.type !== "0"
-            ) {
-              arr.push({
-                id: cur.id,
-                dishesId: cur.dishesId,
-                name: cur.name,
-                menuId: cur.menuId,
-                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;
-          }, [])
-        };
-      });
+      const { endNum, startNum } = state;
+      let length = null;
+      if (endNum && startNum) {
+        length = endNum - startNum;
+      }
+      recipesData = recipesDataResult.data.reduce((outArr, dayData, idx) => {
+        if (!length || (length && length >= idx)) {
+          outArr.push({
+            id: dayData.id,
+            numDay: startNum ? startNum + idx : dayData.numDay,
+            dishes: dayData.dishes.reduce((arr, cur) => {
+              if (
+                cur.dishesId > -1 &&
+                cur.name &&
+                cur.igdList.length > 0 &&
+                cur.type !== "0"
+              ) {
+                arr.push({
+                  id: cur.id,
+                  dishesId: cur.dishesId,
+                  name: cur.name,
+                  menuId: cur.menuId,
+                  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;
+            }, [])
+          });
+        }
+        return outArr;
+      }, []);
     } else {
       throw new Error(recipesDataResult.msg);
     }
@@ -193,9 +202,7 @@ const actions = {
       cusId,
       planId,
       menus: recipesData.map((menu, idx) => ({
-        date: dayjs(state.startDate)
-          .add(idx, "day")
-          .format("YYYY-MM-DD"),
+        numDay: menu.numDay,
         cusId,
         dishes: menu.dishes.map(dObj => ({
           dishesId: dObj.dishesId,
@@ -209,11 +216,19 @@ const actions = {
         }))
       }))
     };
+
     const result = await addRecipesApi(params);
     if (result.code === 200) {
       const recipesId = result.data;
       commit("updateStateData", { recipesId });
       dispatch("getRecipesInfo", { recipesId });
+      payload.callback &&
+        payload.callback({
+          recipesId: result.data,
+          name: state.healthyData.name,
+          cusId: state.cusId,
+          planId: state.planId
+        });
     }
     // console.log(params);
   },
@@ -247,6 +262,7 @@ const actions = {
     }
   },
   async updateDishes({ commit, state }, payload) {
+    // console.log(payload);
     if (state.recipesId) {
       const tarDishes = state.recipesData[payload.num].dishes.find(
         obj => obj.dishesId === payload.dishesId
@@ -273,9 +289,9 @@ const actions = {
             commit("updateRecipesDishesDetail", payload);
           }
         }
-      } else {
-        commit("updateRecipesDishesDetail", payload);
       }
+    } else {
+      commit("updateRecipesDishesDetail", payload);
     }
   },
   async deleteDishes({ commit, state }, payload) {
diff --git a/stdiet-ui/src/views/custom/customer/index.vue b/stdiet-ui/src/views/custom/customer/index.vue
index c28605b41..9d05de70d 100644
--- a/stdiet-ui/src/views/custom/customer/index.vue
+++ b/stdiet-ui/src/views/custom/customer/index.vue
@@ -346,6 +346,7 @@
     <!-- 外食热量统计 -->
     <heatStatisticsDrawer ref="heatStatisticsRef"></heatStatisticsDrawer>
     <!-- 食谱计划抽屉 -->
+    <RecipesPlanDrawer ref="recipesPlanDrawerRef"/>
   </div>
 </template>
 
@@ -364,6 +365,7 @@ import OrderDrawer from "@/components/OrderDrawer";
 import PhysicalSignsDialog from "@/components/PhysicalSignsDialog";
 import ContractDrawer from "@/components/ContractDrawer";
 import HeatStatisticsDrawer from "@/components/HeatStatisticsDrawer";
+import RecipesPlanDrawer from '@/components/RecipesPlanDrawer'
 import { mapGetters } from "vuex";
 
 export default {
@@ -373,6 +375,7 @@ export default {
     "physical-signs-dialog": PhysicalSignsDialog,
     "contract-drawer": ContractDrawer,
     heatStatisticsDrawer: HeatStatisticsDrawer,
+    RecipesPlanDrawer
   },
   data() {
     const userId = store.getters && store.getters.userId;
@@ -392,14 +395,6 @@ export default {
       total: 0,
       // 客户档案表格数据
       customerCenterList: [],
-      // 售前字典
-      // preSaleIdOptions: [],
-      // 售后字典
-      // afterSaleIdOptions: [],
-      // 主营养师字典
-      // nutritionistIdOptions: [],
-      // 助理营养师字典
-      // nutriAssisIdOptions: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -459,9 +454,13 @@ export default {
   },
   computed: {
     ...mapGetters([
+      // 售前字典
       "preSaleIdOptions",
+      // 售后字典
       "afterSaleIdOptions",
+      // 主营养师字典
       "nutritionistIdOptions",
+      // 助理营养师字典
       "nutriAssisIdOptions",
     ]),
   },
@@ -511,6 +510,7 @@ export default {
     },
     handleOnMenuClick(row) {
       // console.log(row);
+      this.$refs['recipesPlanDrawerRef'].showDrawer(row);
     },
     handleClickHeatStatistics(row) {
       this.$refs["heatStatisticsRef"].showDrawer(row);
diff --git a/stdiet-ui/src/views/custom/order/index.vue b/stdiet-ui/src/views/custom/order/index.vue
index 2f6326317..d14535a64 100644
--- a/stdiet-ui/src/views/custom/order/index.vue
+++ b/stdiet-ui/src/views/custom/order/index.vue
@@ -335,7 +335,7 @@
         </template>
       </el-table-column>
       <el-table-column label="客户姓名" align="center" prop="customer" />
-      <!-- <el-table-column label="手机号" align="center" prop="phone" width="100" /> -->
+      <el-table-column label="手机号" align="center" prop="phone" width="100" />
       <el-table-column label="成交金额" align="center" prop="amount">
         <template slot-scope="scope">
           {{ toThousands(scope.row.amount) }}
@@ -391,14 +391,14 @@
             @click="handleUpdate(scope.row)"
             >修改
           </el-button>
-          <!-- <el-button
+          <el-button
             size="mini"
             type="text"
             icon="el-icon-s-data"
             @click="orderPauseManage(scope.row)"
             v-hasPermi="['orderPause:pause:query']"
             >暂停记录管理
-          </el-button> -->
+          </el-button>
           <el-button
             size="mini"
             v-if="
@@ -660,7 +660,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       this.$confirm(
-        '是否确认删除销售订单编号为"' + orderIds + '"的数据项?',
+        '是否确认删除销售订单编号为"' + row.orderId + '"的数据项?',
         "警告",
         {
           confirmButtonText: "确定",
diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue
index cb9dc7837..32bb1b6b3 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/BarChart.vue
@@ -4,9 +4,11 @@
 
 <script>
 import echarts from "echarts";
+import VueScrollTo from "vue-scrollto";
 require("@/utils/echarts/myShine");
 import resize from "@/views/dashboard/mixins/resize";
-
+import { createNamespacedHelpers } from "vuex";
+const { mapMutations } = createNamespacedHelpers("recipes");
 const animationDuration = 6000;
 
 export default {
@@ -55,8 +57,10 @@ export default {
     // console.log("updated");
   },
   methods: {
+    ...mapMutations(["setCurrentDay"]),
     initChart() {
       this.chart = echarts.init(this.$el, "myShine");
+      this.chart.on("click", this.handleOnClick);
       this.updateChart(this.data.length > 0 ? this.data : {});
     },
     updateChart(source) {
@@ -134,6 +138,14 @@ export default {
         })),
       });
     },
+    handleOnClick(params) {
+      // console.log(params);
+      const { dataIndex } = params;
+      this.setCurrentDay({ currentDay: dataIndex });
+      VueScrollTo.scrollTo(`#recipes${dataIndex}`, 500, {
+        container: "#recipes_content",
+      });
+    },
   },
   watch: {
     data(newVal, oldVal) {
diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue
index a5cd784f7..ae5739f8e 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/PieChart.vue
@@ -124,6 +124,7 @@ export default {
           text: `${data.name}营养统计`,
         },
         tooltip: {
+          position: 'right',
           trigger: "item",
           appendToBody: true,
           formatter: (params) => {
diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue
index 14ae7f6b7..a74c628b6 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesAspectCom/index.vue
@@ -60,7 +60,12 @@ export default {
       this.$emit("update:collapse", !this.collapse);
     },
     handleOnSave() {
-      this.saveRecipes();
+      this.saveRecipes({
+        callback: (query) => {
+          console.log(query);
+          this.$router.replace({ path: "/recipes/build", query });
+        },
+      });
     },
     ...mapActions(["saveRecipes"]),
   },
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
index e50d48069..8fa47026c 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/ConfigDishes.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/AddDishesDrawer/ConfigDishes.vue
@@ -6,7 +6,7 @@
       }}</span>
     </el-form-item>
     <el-form-item label="菜品类型">
-      <el-radio-group v-model="type" @change="handleOnTypeChange">
+      <el-radio-group v-model="mType" @change="handleOnTypeChange">
         <el-radio
           v-for="item in typeOptions"
           :key="item.dictValue"
@@ -41,11 +41,7 @@
             />
           </template>
         </el-table-column>
-        <el-table-column
-          prop="proteinRatio"
-          label="P/100g"
-          align="center"
-        />
+        <el-table-column prop="proteinRatio" label="P/100g" align="center" />
         <el-table-column prop="fatRatio" label="F/100g" align="center" />
         <el-table-column prop="carbonRatio" label="C/100g" align="center" />
       </el-table>
@@ -80,7 +76,7 @@ export default {
   name: "ConfigDishes",
   data() {
     return {
-      nType: this.type,
+      mType: this.type,
     };
   },
   props: {
@@ -113,14 +109,19 @@ export default {
     EditableText,
     EditableUnit,
   },
+  watch: {
+    type(val) {
+      this.mType = val;
+    },
+  },
   computed: {},
   methods: {
     handleOnTypeChange(type) {
-      this.$emit("onChane", { type });
+      this.$emit("onChange", { type });
     },
     handleOnWeightChange(data, val) {
       // console.log({ data, val });
-      this.$emit("onChane", {
+      this.$emit("onChange", {
         igdList: produce(this.igdList, (draftState) => {
           const tarIgd = draftState.find((obj) => obj.id === data.id);
           if (tarIgd) {
@@ -131,7 +132,7 @@ export default {
     },
     handleOnCustomUnitChange(data, val) {
       // console.log({ data, val });
-      this.$emit("onChane", {
+      this.$emit("onChange", {
         igdList: produce(this.igdList, (draftState) => {
           const tarIgd = draftState.find((obj) => obj.id === data.id);
           if (tarIgd) {
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 eb392b293..79e5821ad 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/index.vue
@@ -7,15 +7,14 @@
       :cell-style="{ padding: '2px 0' }"
       :header-cell-style="{ padding: '4px 0', height: 'unset' }"
       size="mini"
-      :style="`outline: ${
-        currentDay + 1 === num ? '1px solid #d96969' : 'none'
-      }`"
+      :style="`outline: ${currentDay === num ? '1px solid #d96969' : 'none'}`"
     >
       <el-table-column prop="type" :width="100" align="center">
         <template slot="header">
-          <span class="num_day" @click="handleOnOneDayAnalysis">{{
-            `${name}第${num}天`
-          }}</span>
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>{{ name }}</div>
+            <div>{{ `第${numDay}天` }}</div>
+          </div>
         </template>
         <template slot-scope="scope">
           <span style="font-weight: bold; font-size: 14px">{{
@@ -23,7 +22,7 @@
           }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="菜品" prop="name" align="center">
+      <el-table-column label="菜品" prop="name" align="center" :width="180">
         <template slot="header">
           <el-tooltip
             class="item"
@@ -50,7 +49,12 @@
           </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="食材" prop="igdName" align="center" />
+      <el-table-column
+        label="食材"
+        prop="igdName"
+        align="center"
+        :width="180"
+      />
       <el-table-column label="分量估算" :width="80" align="center">
         <template slot-scope="scope">
           <EditableUnit
@@ -71,42 +75,84 @@
       <el-table-column
         label="蛋白质/100g"
         prop="proteinRatio"
-        :width="100"
+        :width="60"
         align="center"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>蛋白质</div>
+            <div>/100g</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         label="脂肪/100g"
         prop="fatRatio"
-        :width="90"
+        :width="60"
         align="center"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>脂肪</div>
+            <div>/100g</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         label="碳水/100g"
         prop="carbonRatio"
-        :width="90"
+        :width="60"
         align="center"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>碳水</div>
+            <div>/100g</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         label="蛋白质含量"
         prop="proteinRatio"
-        :width="90"
+        :width="60"
         align="center"
         :formatter="nutriFormatter"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>蛋白质</div>
+            <div>含量</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         label="脂肪含量"
         prop="fatRatio"
-        :width="90"
+        :width="60"
         align="center"
         :formatter="nutriFormatter"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>脂肪</div>
+            <div>含量</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         label="碳水含量"
         prop="carbonRatio"
-        :width="90"
+        :width="60"
         align="center"
         :formatter="nutriFormatter"
-      />
+      >
+        <template slot="header">
+          <div class="num_day" @click="handleOnOneDayAnalysis">
+            <div>碳水</div>
+            <div>含量</div>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="做法" prop="methods" />
     </el-table>
     <AddDishesDrawer ref="drawerRef" @onConfirm="handleOnDishesConfirm" />
@@ -141,6 +187,10 @@ export default {
       type: Number,
       default: 0,
     },
+    numDay: {
+      type: Number,
+      default: 0,
+    },
   },
   components: {
     EditableText,
@@ -266,7 +316,7 @@ export default {
     },
     handleOnOneDayAnalysis(e) {
       // 校验某天
-      this.setCurrentDay({ currentDay: this.num - 1 });
+      this.setCurrentDay({ currentDay: this.num });
     },
     handleOnAdd() {
       // console.log(this.num);
@@ -274,12 +324,12 @@ export default {
     },
     handleOnDelete(data) {
       // console.log(data);
-      this.deleteDishes({ num: this.num - 1, id: data.id });
+      this.deleteDishes({ num: this.num, id: data.id });
     },
     handleOnWeightChange(data, weight) {
-      // console.log({ data, weight });
+      console.log({ data, weight });
       this.updateDishes({
-        num: this.num - 1,
+        num: this.num,
         dishesId: data.dishesId,
         igdId: data.igdId,
         weight,
@@ -288,7 +338,7 @@ export default {
     handleOnCustomUnitChange(data, { cusWeight, cusUnit }) {
       // console.log({ data, cusWeight, cusUnit });
       this.updateDishes({
-        num: this.num - 1,
+        num: this.num,
         dishesId: data.dishesId,
         igdId: data.igdId,
         cusWeight,
@@ -298,7 +348,7 @@ export default {
     handleOnDishesConfirm(data) {
       // console.log(data);
       this.addDishes({
-        num: this.num - 1,
+        num: this.num,
         data,
       });
     },
diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue
index bd2ced321..f8a26032e 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/index.vue
@@ -2,15 +2,18 @@
   <div class="recipes_view_wrapper">
     <RecipesAspectCom :collapse.sync="collapse" :data="analyseData" />
     <div
+      id="recipes_content"
       class="recipes_content"
-      :style="`height: calc(100vh - ${collapse ? 142 : 312}px)`"
+      :style="`height: calc(100vh - ${collapse ? 62 : 232}px)`"
     >
       <RecipesCom
         v-for="(item, index) in data"
+        :id="`recipes${index}`"
         :key="item.id"
         :data="item"
         :name="name"
-        :num="index + 1"
+        :num="index"
+        :numDay="item.numDay"
       />
     </div>
   </div>
diff --git a/stdiet-ui/src/views/custom/recipesBuild/index.vue b/stdiet-ui/src/views/custom/recipesBuild/index.vue
index 9f82a033a..d2184f2b4 100644
--- a/stdiet-ui/src/views/custom/recipesBuild/index.vue
+++ b/stdiet-ui/src/views/custom/recipesBuild/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="recipes_build_wrapper">
+  <div class="recipes_build_wrapper" v-title :data-title="$route.query.name">
     <div class="left" v-loading="recipesDataLoading">
       <RecipesView
         v-if="!!recipesData.length"
@@ -35,13 +35,13 @@ export default {
     return {};
   },
   mounted() {
-    const { cusId, planId, startDate, endDate, recipesId } = this.$route.query;
+    const { cusId, planId, startNum, endNum, recipesId } = this.$route.query;
 
     this.init({
       cusId,
       planId,
-      startDate,
-      endDate,
+      startNum: parseInt(startNum),
+      endNum: parseInt(endNum),
       recipesId,
     }).catch((err) => {
       this.$message.error(err.message);
@@ -78,7 +78,7 @@ export default {
 .recipes_build_wrapper {
   padding: 16px;
   display: flex;
-  height: calc(100vh - 86px);
+  height: 100vh;
   .left {
     flex: 4;
     border-right: 1px solid #e6ebf5;
diff --git a/stdiet-ui/src/views/custom/recipesPlan/index.vue b/stdiet-ui/src/views/custom/recipesPlan/index.vue
index 20489842f..1428a2c86 100644
--- a/stdiet-ui/src/views/custom/recipesPlan/index.vue
+++ b/stdiet-ui/src/views/custom/recipesPlan/index.vue
@@ -113,18 +113,24 @@
     >
       <!-- <el-table-column type="selection" width="55" align="center" /> -->
       <el-table-column label="客户姓名" align="center" prop="customer" />
-      <!-- <el-table-column
+      <el-table-column
         label="客户手机号"
         align="center"
         prop="hidePhone"
         width="180"
-      /> -->
+      />
       <el-table-column
         label="食谱日期范围"
         align="center"
         prop="scopeDate"
         width="200"
       />
+      <el-table-column
+        label="食谱天数范围"
+        align="center"
+        prop="scopeDay"
+        width="200"
+      />
       <el-table-column label="营养师" align="center" prop="nutritionist" />
       <el-table-column
         label="营养师助理"
@@ -447,8 +453,9 @@ export default {
         this.recipesPlanList.forEach(function (item, index) {
           item.scopeDate =
             dayjs(item.startDate).format("YYYY-MM-DD") +
-            " 到 " +
+            " 至 " +
             dayjs(item.endDate).format("YYYY-MM-DD");
+          item.scopeDay = `第${item.startNumDay} 至 ${item.endNumDay}天`;
         });
         this.total = response.total;
         this.loading = false;
@@ -603,25 +610,25 @@ export default {
     },
     handleBuild(data) {
       // console.log(data);
-      const { startDate, endDate, id, cusId, recipesId } = data;
+      const { id, cusId, recipesId, customer, startNumDay, endNumDay } = data;
 
-      // const params = { id: data.id, cusId: data.orderId };
-      // const path = `/recipes/build/${orderId}/${id}/${recipesId || 0}`;
-      // this.$router.push({
-      //   name: "build",
-      //   params,
-      // });
       const queryParam = {
         planId: id,
         cusId,
+        name: customer,
       };
-      if (!recipesId) {
-        queryParam.startDate = startDate;
-        queryParam.endDate = endDate;
-      } else {
+      if (recipesId) {
         queryParam.recipesId = recipesId;
+      } else {
+        queryParam.startNum = startNumDay;
+        queryParam.endNum = endNumDay;
       }
-      this.$router.push({ path: "/recipes/build", query: queryParam });
+      const routeUrl = this.$router.resolve({
+        path: "/recipes/build",
+        query: queryParam,
+      });
+      window.open(routeUrl.href, "_blank");
+      // this.$router.push({ path: "/recipes/build", query: queryParam });
     },
   },
 };