diff --git a/stdiet-ui/package.json b/stdiet-ui/package.json
index e9357aaf0..76287eff4 100644
--- a/stdiet-ui/package.json
+++ b/stdiet-ui/package.json
@@ -64,6 +64,7 @@
     "vue": "2.6.10",
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.4.9",
+    "vue-qr": "^2.3.0",
     "vue-router": "3.0.2",
     "vue-scrollto": "^2.20.0",
     "vue-splitpane": "1.0.4",
diff --git a/stdiet-ui/src/components/ContractDrawer/index.vue b/stdiet-ui/src/components/ContractDrawer/index.vue
index 2facf1ccf..c315d1e20 100644
--- a/stdiet-ui/src/components/ContractDrawer/index.vue
+++ b/stdiet-ui/src/components/ContractDrawer/index.vue
@@ -50,21 +50,27 @@
             width="200"
           />
 
-          <el-table-column
-            label="合同地址"
-            align="center"
-            prop="path"
-            width="80"
-          >
+          <el-table-column label="合同地址" align="center" prop="path">
             <template slot-scope="scope">
               <el-button
                 type="text"
+                style="margin-right: 8px"
                 icon="el-icon-copy-document"
                 @click="handleCopy(scope.row.path)"
                 class="copyBtn"
                 :data-clipboard-text="copyValue"
                 >复制
               </el-button>
+              <el-popover placement="top" trigger="click">
+                <VueQr :text="copyValue" :logoSrc="logo" />
+                <el-button
+                  slot="reference"
+                  icon="el-icon-picture-outline"
+                  type="text"
+                  @click="handleCopy(scope.row.path)"
+                  >二维码</el-button
+                >
+              </el-popover>
             </template>
           </el-table-column>
           <el-table-column label="操作" align="center" width="180">
@@ -108,15 +114,18 @@ import { delContract, listContract } from "@/api/custom/contract";
 import ContractDetail from "@/components/ContractDetail";
 import Clipboard from "clipboard";
 import ContractAdd from "@/components/ContractAdd";
-
+import VueQr from "vue-qr";
+const logo = require("@/assets/logo/logo_b.png");
 export default {
   name: "CustomerContractDrawer",
   components: {
     "contract-detail": ContractDetail,
     "add-contract": ContractAdd,
+    VueQr,
   },
   data() {
     return {
+      logo,
       visible: false,
       title: "",
       data: undefined,
diff --git a/stdiet-ui/src/components/HeatStatisticsDrawer/index.vue b/stdiet-ui/src/components/HeatStatisticsDrawer/index.vue
index 2f050501e..1e0b4b929 100644
--- a/stdiet-ui/src/components/HeatStatisticsDrawer/index.vue
+++ b/stdiet-ui/src/components/HeatStatisticsDrawer/index.vue
@@ -10,16 +10,34 @@
       <div class="app-container">
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
-            <el-button icon="el-icon-share" size="small" title="点击复制链接" class="copyBtn" type="primary" :data-clipboard-text="copyValue" @click="handleCopy()">外食计算器</el-button>
+            <el-button
+              icon="el-icon-share"
+              size="small"
+              title="点击复制链接"
+              class="copyBtn"
+              type="primary"
+              :data-clipboard-text="copyValue"
+              @click="handleCopy()"
+              >外食计算器</el-button
+            >
           </el-col>
+          <el-popover :placement="bottom" trigger="click">
+            <VueQr :text="copyValue" :logoSrc="logo" />
+            <el-button slot="reference">二维码</el-button>
+          </el-popover>
         </el-row>
-        <el-table :data="foodHeatStatisticsList" >
-          <el-table-column label="日期" align="center" prop="edibleDate" width="120">
+        <el-table :data="foodHeatStatisticsList">
+          <el-table-column
+            label="日期"
+            align="center"
+            prop="edibleDate"
+            width="120"
+          >
             <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.edibleDate, '{y}-{m}-{d}') }}</span>
+              <span>{{ parseTime(scope.row.edibleDate, "{y}-{m}-{d}") }}</span>
             </template>
           </el-table-column>
-         <!-- <el-table-column label="食材" align="center" prop="ingredient" />
+          <!-- <el-table-column label="食材" align="center" prop="ingredient" />
           <el-table-column label="通俗计量" align="center" prop="unitName">
             <template slot-scope="scope">
               {{ scope.row.number ? (scope.row.number + "" + (scope.row.unitName != null ? scope.row.unitName : "")) : "" }}
@@ -27,62 +45,87 @@
           </el-table-column>
           <el-table-column label="质量(克)" align="center" prop="quantity" />-->
 
-          <el-table-column label="可摄入量" align="center" prop="maxHeatValue" />
+          <el-table-column
+            label="可摄入量"
+            align="center"
+            prop="maxHeatValue"
+          />
           <el-table-column label="食材热量" align="center" prop="heatValue" />
           <el-table-column label="热量缺口" align="center" prop="heatGap" />
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <el-table-column
+            label="操作"
+            align="center"
+            class-name="small-padding fixed-width"
+          >
             <template slot-scope="scope">
               <el-button
                 size="mini"
                 type="text"
                 @click="handleDetail(scope.row)"
                 v-hasPermi="['custom:foodHeatStatistics:query']"
-              >详情</el-button>
+                >详情</el-button
+              >
               <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
                 @click="handleCalculate(scope.row)"
-              >计算</el-button>
+                >计算</el-button
+              >
               <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
                 @click="handleOnDeleteClick(scope.row)"
                 v-hasPermi="['custom:foodHeatStatistics:remove']"
-              >删除</el-button>
+                >删除</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
 
         <pagination
-          v-show="total>0"
+          v-show="total > 0"
           :total="total"
           :page.sync="queryParams.pageNum"
           :limit.sync="queryParams.pageSize"
           @pagination="fetchHeatList"
         />
 
-        <heatStatisticsCalculate ref="heatStatisticsCalculateRef"></heatStatisticsCalculate>
-        <heatStatisticsDetail ref="heatStatisticsDetailRef"></heatStatisticsDetail>
-
+        <heatStatisticsCalculate
+          ref="heatStatisticsCalculateRef"
+        ></heatStatisticsCalculate>
+        <heatStatisticsDetail
+          ref="heatStatisticsDetailRef"
+        ></heatStatisticsDetail>
       </div>
     </el-drawer>
   </div>
 </template>
 <script>
-  import { listFoodHeatStatistics, getFoodHeatStatistics, delFoodHeatStatistics, addFoodHeatStatistics, updateFoodHeatStatistics, exportFoodHeatStatistics } from "@/api/custom/foodHeatStatistics";
-  import Clipboard from 'clipboard';
-  import HeatStatisticsCalculate from "@/components/HeatStatisticsCalculate";
-  import HeatStatisticsDetail from "@/components/HeatStatisticsDetail";
+import {
+  listFoodHeatStatistics,
+  getFoodHeatStatistics,
+  delFoodHeatStatistics,
+  addFoodHeatStatistics,
+  updateFoodHeatStatistics,
+  exportFoodHeatStatistics,
+} from "@/api/custom/foodHeatStatistics";
+import Clipboard from "clipboard";
+import HeatStatisticsCalculate from "@/components/HeatStatisticsCalculate";
+import HeatStatisticsDetail from "@/components/HeatStatisticsDetail";
+import VueQr from "vue-qr";
+const logo = require("@/assets/logo/logo_b.png");
 export default {
   name: "HeatStatisticsDrawer",
   components: {
-    'heatStatisticsCalculate':HeatStatisticsCalculate,
-    'heatStatisticsDetail': HeatStatisticsDetail
+    heatStatisticsCalculate: HeatStatisticsCalculate,
+    heatStatisticsDetail: HeatStatisticsDetail,
+    VueQr,
   },
   data() {
     return {
+      logo,
       visible: false,
       title: "",
       data: undefined,
@@ -94,7 +137,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
       },
-      copyValue: ""
+      copyValue: "",
     };
   },
   methods: {
@@ -106,33 +149,31 @@ export default {
       }
       this.title = `「${this.data.name}」热量统计列表`;
       this.queryParams.customerId = data.id;
+      this.copyValue =
+        window.location.origin.replace("manage", "sign") +
+        "/foodHeatCalculator/" +
+        this.data.encId;
       this.fetchHeatList();
     },
     fetchHeatList() {
-      listFoodHeatStatistics(this.queryParams).then(response => {
+      listFoodHeatStatistics(this.queryParams).then((response) => {
         this.foodHeatStatisticsList = response.rows;
         this.total = response.total;
         this.visible = true;
       });
     },
-    handleAdd() {
-
-    },
+    handleAdd() {},
     handleOnClosed() {
       this.data = undefined;
       this.copyValue = "";
     },
     handleOnDeleteClick(data) {
       const ids = data.id || this.ids;
-      this.$confirm(
-        '是否确认删除该数据项?',
-        "警告",
-        {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        }
-      )
+      this.$confirm("是否确认删除该数据项?", "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
         .then(function () {
           return delFoodHeatStatistics(ids);
         })
@@ -143,21 +184,20 @@ export default {
         .catch(function () {});
     },
     handleCopy() {
-      this.copyValue = window.location.origin.replace('manage', 'sign') + "/foodHeatCalculator/"+this.data.encId;
-      const btnCopy = new Clipboard('.copyBtn');
+      new Clipboard(".copyBtn");
       this.$message({
-        message: '拷贝成功',
-        type: 'success'
+        message: "拷贝成功",
+        type: "success",
       });
     },
-    handleCalculate(data){
-      this.$refs.heatStatisticsCalculateRef.showDialog(data,() => {
+    handleCalculate(data) {
+      this.$refs.heatStatisticsCalculateRef.showDialog(data, () => {
         this.fetchHeatList();
       });
     },
-    handleDetail(data){
-        this.$refs.heatStatisticsDetailRef.showDialog(data, this.data.name);
-    }
+    handleDetail(data) {
+      this.$refs.heatStatisticsDetailRef.showDialog(data, this.data.name);
+    },
   },
 };
 </script>
diff --git a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
index d7702d4dd..5c237474e 100644
--- a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
+++ b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
@@ -1,112 +1,267 @@
 <template>
-  <el-dialog :visible.sync="visible" :title="title" append-to-body @closed="onClosed">
+  <el-dialog
+    :visible.sync="visible"
+    :title="title"
+    append-to-body
+    @closed="onClosed"
+  >
     <div v-if="showFlag">
-    <div style="float:right;margin-top:-10px;margin-bottom: 10px;" v-show="dataList.length > 0">
-      <!-- 只有新版健康评估信息才可修改,旧的体征数据不支持修改 -->
-      <el-button type="info" v-show="dataType == 0" @click="generateReport()"  plain>下载报告</el-button>
-      <el-button type="info" v-show="dataType == 0" @click="handleEditGuidanceClick()"  plain>减脂指导</el-button>
-      <el-button v-hasPermi="['custom:healthy:edit']" type="info" v-show="dataType == 0" @click="handleEditRemarkClick()"  plain>修改备注</el-button>
-      <el-button v-hasPermi="['custom:healthy:edit']" type="warning" v-show="dataType == 0" @click="handleEditHealthyClick()"  plain>修改信息</el-button>
-      <el-button type="danger" v-hasPermi="['custom:healthy:remove']" @click="handleDelete()" plain>删除信息</el-button>
-    </div>
-    <!-- 客户健康评估 -->
-    <div v-if="dataList.length > 0 && dataType == 0">
-      <!-- 基础信息 -->
-      <div v-for="(item,index) in dataList.slice(0,1)" style="margin-bottom: 50px;" :key="index">
-        <div>
-          <p class="p_title_1" style="margin-top: 5px;">{{titleArray[index]}}</p>
-          <table-detail-message :data="item" ></table-detail-message>
-        </div>
-        <!-- 备注 -->
-        <el-table :data="remarkList" :show-header="false" border :cell-style="remarkColumnStyle" style="width: 100%;">
-          <el-table-column width="140" prop="remarkTitle">
-          </el-table-column>
-          <el-table-column prop="remarkValue">
-            <template slot-scope="scope">
-              <auto-hide-message :data="scope.row.remarkValue" :maxLength="100"/></template>
-          </el-table-column>
-        </el-table>
-        <!-- 指导 -->
-        <el-table :data="guidanceList" :show-header="false" border :cell-style="remarkColumnStyle" style="width: 100%;">
-          <el-table-column width="140" prop="guidanceTitle">
-          </el-table-column>
-          <el-table-column prop="guidanceValue">
-            <template slot-scope="scope">
-              <auto-hide-message :data="scope.row.guidanceValue" :maxLength="100"/></template>
-          </el-table-column>
-        </el-table>
+      <div
+        style="float: right; margin-top: -10px; margin-bottom: 10px"
+        v-show="dataList.length > 0"
+      >
+        <!-- 只有新版健康评估信息才可修改,旧的体征数据不支持修改 -->
+        <el-button
+          type="info"
+          v-show="dataType == 0"
+          @click="generateReport()"
+          plain
+          >下载报告</el-button
+        >
+        <el-button
+          type="info"
+          v-show="dataType == 0"
+          @click="handleEditGuidanceClick()"
+          plain
+          >减脂指导</el-button
+        >
+        <el-button
+          v-hasPermi="['custom:healthy:edit']"
+          type="info"
+          v-show="dataType == 0"
+          @click="handleEditRemarkClick()"
+          plain
+          >修改备注</el-button
+        >
+        <el-button
+          v-hasPermi="['custom:healthy:edit']"
+          type="warning"
+          v-show="dataType == 0"
+          @click="handleEditHealthyClick()"
+          plain
+          >修改信息</el-button
+        >
+        <el-button
+          type="danger"
+          v-hasPermi="['custom:healthy:remove']"
+          @click="handleDelete()"
+          plain
+          >删除信息</el-button
+        >
       </div>
-      <!-- 其他信息 -->
-      <div style="height:400px;overflow: auto">
-        <div v-for="(item,index) in dataList.slice(1,10)" style="margin-bottom: 50px;" :key="index">
+      <!-- 客户健康评估 -->
+      <div v-if="dataList.length > 0 && dataType == 0">
+        <!-- 基础信息 -->
+        <div
+          v-for="(item, index) in dataList.slice(0, 1)"
+          style="margin-bottom: 50px"
+          :key="index"
+        >
           <div>
-            <p class="p_title_1" style="margin-top: 5px;">{{titleArray[index+1]}}</p>
-            <table-detail-message :data="item" v-if="index != dataList.length-2"></table-detail-message>
-            <el-table :show-header="false" v-if="index == dataList.length-2" :data="item" border :cell-style="columnStyle" style="width: 100%;">
-              <el-table-column width="140" prop="attr_name_one">
-              </el-table-column>
-              <el-table-column prop="value_one">
-                <template slot-scope="scope">
-                  <auto-hide-message :data="scope.row.value_one == null ? '' : (scope.row.value_one+'')" :maxLength="20"/>
-                  <el-button type="primary" v-show="scope.row.value_one" @click="downloadFile(medicalReportPathArray[0])">下载</el-button>
-                </template>
-              </el-table-column>
-              <el-table-column width="140" prop="attr_name_two"></el-table-column>
-              <el-table-column prop="value_two">
-                <template slot-scope="scope">
-                  <auto-hide-message :data="scope.row.value_two == null ? '' : (scope.row.value_two+'')" :maxLength="20"/>
-                  <el-button type="primary" v-show="scope.row.value_two" @click="downloadFile(medicalReportPathArray[1])">下载</el-button>
-                </template>
-              </el-table-column>
-              <el-table-column width="140" prop="attr_name_three"></el-table-column>
-              <el-table-column prop="value_three">
-                <template slot-scope="scope">
-                  <auto-hide-message :data="scope.row.value_three == null ? '' : (scope.row.value_three+'')" :maxLength="20"/>
-                  <el-button type="primary" v-show="scope.row.value_three" @click="downloadFile(medicalReportPathArray[2])">下载</el-button>
-                </template>
-              </el-table-column>
-            </el-table>
+            <p class="p_title_1" style="margin-top: 5px">
+              {{ titleArray[index] }}
+            </p>
+            <table-detail-message :data="item"></table-detail-message>
+          </div>
+          <!-- 备注 -->
+          <el-table
+            :data="remarkList"
+            :show-header="false"
+            border
+            :cell-style="remarkColumnStyle"
+            style="width: 100%"
+          >
+            <el-table-column width="140" prop="remarkTitle"> </el-table-column>
+            <el-table-column prop="remarkValue">
+              <template slot-scope="scope">
+                <auto-hide-message
+                  :data="scope.row.remarkValue"
+                  :maxLength="100"
+              /></template>
+            </el-table-column>
+          </el-table>
+          <!-- 指导 -->
+          <el-table
+            :data="guidanceList"
+            :show-header="false"
+            border
+            :cell-style="remarkColumnStyle"
+            style="width: 100%"
+          >
+            <el-table-column width="140" prop="guidanceTitle">
+            </el-table-column>
+            <el-table-column prop="guidanceValue">
+              <template slot-scope="scope">
+                <auto-hide-message
+                  :data="scope.row.guidanceValue"
+                  :maxLength="100"
+              /></template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <!-- 其他信息 -->
+        <div style="height: 400px; overflow: auto">
+          <div
+            v-for="(item, index) in dataList.slice(1, 10)"
+            style="margin-bottom: 50px"
+            :key="index"
+          >
+            <div>
+              <p class="p_title_1" style="margin-top: 5px">
+                {{ titleArray[index + 1] }}
+              </p>
+              <table-detail-message
+                :data="item"
+                v-if="index != dataList.length - 2"
+              ></table-detail-message>
+              <el-table
+                :show-header="false"
+                v-if="index == dataList.length - 2"
+                :data="item"
+                border
+                :cell-style="columnStyle"
+                style="width: 100%"
+              >
+                <el-table-column width="140" prop="attr_name_one">
+                </el-table-column>
+                <el-table-column prop="value_one">
+                  <template slot-scope="scope">
+                    <auto-hide-message
+                      :data="
+                        scope.row.value_one == null
+                          ? ''
+                          : scope.row.value_one + ''
+                      "
+                      :maxLength="20"
+                    />
+                    <el-button
+                      type="primary"
+                      v-show="scope.row.value_one"
+                      @click="downloadFile(medicalReportPathArray[0])"
+                      >下载</el-button
+                    >
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  width="140"
+                  prop="attr_name_two"
+                ></el-table-column>
+                <el-table-column prop="value_two">
+                  <template slot-scope="scope">
+                    <auto-hide-message
+                      :data="
+                        scope.row.value_two == null
+                          ? ''
+                          : scope.row.value_two + ''
+                      "
+                      :maxLength="20"
+                    />
+                    <el-button
+                      type="primary"
+                      v-show="scope.row.value_two"
+                      @click="downloadFile(medicalReportPathArray[1])"
+                      >下载</el-button
+                    >
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  width="140"
+                  prop="attr_name_three"
+                ></el-table-column>
+                <el-table-column prop="value_three">
+                  <template slot-scope="scope">
+                    <auto-hide-message
+                      :data="
+                        scope.row.value_three == null
+                          ? ''
+                          : scope.row.value_three + ''
+                      "
+                      :maxLength="20"
+                    />
+                    <el-button
+                      type="primary"
+                      v-show="scope.row.value_three"
+                      @click="downloadFile(medicalReportPathArray[2])"
+                      >下载</el-button
+                    >
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </div>
+      <!-- 客户体征 -->
+      <div v-else>
+        <table-detail-message
+          v-show="dataList.length > 0"
+          :data="dataList"
+        ></table-detail-message>
+        <div
+          v-show="dataList.length == 0"
+          style="font-size: 20px; text-align: center"
+        >
+          <VueQr :text="copyValue" :logoSrc="logo" />
+          <div style="text-align: center; margin-top: 20px">
+            <el-button
+              icon="el-icon-share"
+              size="small"
+              title="点击复制链接"
+              class="copyBtn"
+              type="primary"
+              :data-clipboard-text="copyValue"
+              @click="handleCopy()"
+              >健康评估表链接
+            </el-button>
           </div>
         </div>
       </div>
     </div>
-    <!-- 客户体征 -->
-    <div v-else>
-      <table-detail-message v-show="dataList.length > 0" :data="dataList" ></table-detail-message>
-      <p v-show="dataList.length == 0" style="font-size: 20px;text-align:center;">暂无数据!
-        <el-button icon="el-icon-share" size="small" title="点击复制链接" class="copyBtn" type="primary" :data-clipboard-text="copyValue" @click="handleCopy()">健康评估表链接</el-button>
-      </p>
-    </div>
-    </div>
     <!-- 编辑 -->
-    <physicalSigns-edit ref="physicalSignsEditDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-edit>
+    <physicalSigns-edit
+      ref="physicalSignsEditDialog"
+      @refreshHealthyData="getCustomerHealthyByCusId()"
+    ></physicalSigns-edit>
     <!-- 编辑备注 -->
-    <physicalSigns-remark ref="physicalSignsRemarkDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-remark>
+    <physicalSigns-remark
+      ref="physicalSignsRemarkDialog"
+      @refreshHealthyData="getCustomerHealthyByCusId()"
+    ></physicalSigns-remark>
     <!-- 编辑减脂指导 -->
-    <physicalSigns-guidance ref="physicalSignsGuidanceDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-guidance>
+    <physicalSigns-guidance
+      ref="physicalSignsGuidanceDialog"
+      @refreshHealthyData="getCustomerHealthyByCusId()"
+    ></physicalSigns-guidance>
   </el-dialog>
 </template>
 <script>
-import { getCustomerPhysicalSignsByCusId,delCustomerHealthy } from "@/api/custom/customer";
+import {
+  getCustomerPhysicalSignsByCusId,
+  delCustomerHealthy,
+} from "@/api/custom/customer";
 import { generateHealthyReport } from "@/api/custom/healthy";
 import TableDetailMessage from "@/components/TableDetailMessage";
 import AutoHideMessage from "@/components/AutoHideMessage";
 import * as healthyData from "@/utils/healthyData";
-import Clipboard from 'clipboard';
+import Clipboard from "clipboard";
 import PhysicalSignsEdit from "@/components/PhysicalSignsEdit";
 import PhysicalSignsRemark from "@/components/PhysicalSignsRemark";
 import PhysicalSignsGuidance from "@/components/PhysicalSignsGuidance";
+import VueQr from "vue-qr";
+const logo = require("@/assets/logo/logo_b.png");
 export default {
   name: "PhysicalSignsDialog",
   components: {
     "auto-hide-message": AutoHideMessage,
     "table-detail-message": TableDetailMessage,
-    "physicalSigns-edit":PhysicalSignsEdit,
-    "physicalSigns-remark":PhysicalSignsRemark,
-    "physicalSigns-guidance":PhysicalSignsGuidance
+    "physicalSigns-edit": PhysicalSignsEdit,
+    "physicalSigns-remark": PhysicalSignsRemark,
+    "physicalSigns-guidance": PhysicalSignsGuidance,
+    VueQr,
   },
   data() {
     return {
+      logo,
       visible: false,
       showFlag: false,
       title: "",
@@ -114,8 +269,8 @@ export default {
       dataList: [],
       dataType: 0,
       healthyData: null,
-      remarkList:[{"remarkTitle": "备注信息", "remarkValue": ""}],
-      guidanceList:[{"guidanceTitle": "减脂指导", "guidanceValue": ""}],
+      remarkList: [{ remarkTitle: "备注信息", remarkValue: "" }],
+      guidanceList: [{ guidanceTitle: "减脂指导", guidanceValue: "" }],
       // 体征标题
       signTitleData: [
         ["创建时间", "姓名", "年龄"],
@@ -143,82 +298,106 @@ export default {
         ["experience", "difficulty", "comments"],
       ],
       //健康评估每个模板标题,与调查表保持一致
-      titleArray: healthyData['titleArray'],
+      titleArray: healthyData["titleArray"],
       // 健康评估标题
-      healthyTitleData:[
+      healthyTitleData: [
         [
-          ["创建时间","客户姓名","手机号"],["调理项目","性别","年龄"],["身高(厘米)","体重(斤)","地域"]
+          ["创建时间", "客户姓名", "手机号"],
+          ["调理项目", "性别", "年龄"],
+          ["身高(厘米)", "体重(斤)", "地域"],
         ],
         [
-          ["减脂经历","减脂遇到的困难","减脂是否反弹"],["是否意识到生活习惯是减脂关键","",""]
+          ["减脂经历", "减脂遇到的困难", "减脂是否反弹"],
+          ["是否意识到生活习惯是减脂关键", "", ""],
         ],
         [
-          ["调味品种","烹调方式","烹调频次"],["洗菜方式","",""]
+          ["调味品种", "烹调方式", "烹调频次"],
+          ["洗菜方式", "", ""],
         ],
         [
-          ["早餐习惯","早餐吃的食物","午餐习惯"],["晚餐习惯","正餐中素菜占比","最常吃的肉类"],
-          ["晚餐时间","每周吃夜宵次数","夜宵通常吃的食物"],["食物的冷热偏好","食物的口味偏好","平均每周吃生蔬菜几次"],
-          ["每周吃生蔬菜的频次类型","平均每天吃水果次数","吃水果的时间段"],["平时吃水果的频次","一餐吃几碗饭","吃几成饱"],
-          ["吃饭速度","饮食特点","常吃的零食"],["有无服用营养保健品","营养保健品品牌名","营养保健品产品名"],
-          ["服用营养保健品频次","忌口过敏食物",""]
+          ["早餐习惯", "早餐吃的食物", "午餐习惯"],
+          ["晚餐习惯", "正餐中素菜占比", "最常吃的肉类"],
+          ["晚餐时间", "每周吃夜宵次数", "夜宵通常吃的食物"],
+          ["食物的冷热偏好", "食物的口味偏好", "平均每周吃生蔬菜几次"],
+          ["每周吃生蔬菜的频次类型", "平均每天吃水果次数", "吃水果的时间段"],
+          ["平时吃水果的频次", "一餐吃几碗饭", "吃几成饱"],
+          ["吃饭速度", "饮食特点", "常吃的零食"],
+          ["有无服用营养保健品", "营养保健品品牌名", "营养保健品产品名"],
+          ["服用营养保健品频次", "忌口过敏食物", ""],
         ],
         [
-          ["每天的饮水量","喜欢喝什么水","喝水习惯"],["常喝的饮品的每周频次","是否喝酒","喝酒种类"],["对应酒的量","是否抽烟","抽烟频次和烟龄"],
-          ["是否经常抽二手烟","工作行业","工作性质"],["排便次数","排便时间段","排便的形状"],["排便的气味","排便的速度","排便的颜色"]
+          ["每天的饮水量", "喜欢喝什么水", "喝水习惯"],
+          ["常喝的饮品的每周频次", "是否喝酒", "喝酒种类"],
+          ["对应酒的量", "是否抽烟", "抽烟频次和烟龄"],
+          ["是否经常抽二手烟", "工作行业", "工作性质"],
+          ["排便次数", "排便时间段", "排便的形状"],
+          ["排便的气味", "排便的速度", "排便的颜色"],
         ],
         [
-          ["每周运动次数","每次运动的时长","每天运动的时间"],
-          ["运动","运动场地",""]
+          ["每周运动次数", "每次运动的时长", "每天运动的时间"],
+          ["运动", "运动场地", ""],
         ],
         [
-          ["睡觉时间","睡眠质量","是否有辅助入睡药物"],
-          ["辅助睡眠类药物名称","是否经常熬夜","熬夜频次"]
+          ["睡觉时间", "睡眠质量", "是否有辅助入睡药物"],
+          ["辅助睡眠类药物名称", "是否经常熬夜", "熬夜频次"],
         ],
         [
-          ["病史体征","湿气数据","气血数据"],
-          ["家族疾病史","手术史","近期是否做过手术"],
-          ["手术恢复情况","是否长期服用药物","长期服用的药物"],
-          ["是否出现过过敏症状","过敏症状","过敏源"]
+          ["病史体征", "湿气数据", "气血数据"],
+          ["家族疾病史", "手术史", "近期是否做过手术"],
+          ["手术恢复情况", "是否长期服用药物", "长期服用的药物"],
+          ["是否出现过过敏症状", "过敏症状", "过敏源"],
         ],
-        [
-          ["体检报告(1)","体检报告(2)","体检报告(3)"]
-        ]
+        [["体检报告(1)", "体检报告(2)", "体检报告(3)"]],
       ],
       // 健康评估属性
-      healthyValueData:[
-        [["createTime","name","phone"],["conditioningProject","sex","age"],["tall","weight","position"]],
+      healthyValueData: [
         [
-          ["experience","difficulty","rebound"],["crux","",""]
-        ],
-        [["condiment","cookingStyle","cookingStyleRate"],["washVegetablesStyle","",""]],
-        [
-          ["breakfastType","breakfastFood","lunchType"],["dinner","vegetableRate","commonMeat"],
-          ["dinnerTime","supperNum","supperFood"],["dietHotAndCold","dietFlavor","vegetablesNum"],
-          ["vegetablesRateType","fruitsNum","fruitsTime"],["fruitsRate","riceNum","riceFull"],
-          ["eatingSpeed","makeFoodType","snacks"],
-          ["healthProductsFlag","healthProductsBrand","healthProductsName"],
-          ["healthProductsWeekRate","dishesIngredient",""]
+          ["createTime", "name", "phone"],
+          ["conditioningProject", "sex", "age"],
+          ["tall", "weight", "position"],
         ],
         [
-          ["waterNum","waterType","waterHabit"],["drinksNum","drinkWineFlag","drinkWineClassify"],["drinkWineAmount","smokeFlag","smokeRate"],
-          ["secondSmoke","workIndustry","workType"],["defecationNum","defecationTime","defecationShape"],["defecationSmell","defecationSpeed","defecationColor"]
+          ["experience", "difficulty", "rebound"],
+          ["crux", "", ""],
         ],
         [
-          ["motionNum","motionDuration","motionTime"],["motion","motionField",""]
+          ["condiment", "cookingStyle", "cookingStyleRate"],
+          ["washVegetablesStyle", "", ""],
         ],
         [
-          ["sleepTime","sleepQuality","sleepDrugFlag"],
-          ["sleepDrug","stayupLateFlag","stayupLateWeekNum"]
+          ["breakfastType", "breakfastFood", "lunchType"],
+          ["dinner", "vegetableRate", "commonMeat"],
+          ["dinnerTime", "supperNum", "supperFood"],
+          ["dietHotAndCold", "dietFlavor", "vegetablesNum"],
+          ["vegetablesRateType", "fruitsNum", "fruitsTime"],
+          ["fruitsRate", "riceNum", "riceFull"],
+          ["eatingSpeed", "makeFoodType", "snacks"],
+          ["healthProductsFlag", "healthProductsBrand", "healthProductsName"],
+          ["healthProductsWeekRate", "dishesIngredient", ""],
         ],
         [
-          ["physicalSigns","moistureDate","bloodData"],
-          ["familyIllnessHistory","operationHistory","nearOperationFlag"],
-          ["recoveryeSituation","longEatDrugFlag","longEatDrugClassify"],
-          ["allergyFlag","allergySituation","allergen"]
+          ["waterNum", "waterType", "waterHabit"],
+          ["drinksNum", "drinkWineFlag", "drinkWineClassify"],
+          ["drinkWineAmount", "smokeFlag", "smokeRate"],
+          ["secondSmoke", "workIndustry", "workType"],
+          ["defecationNum", "defecationTime", "defecationShape"],
+          ["defecationSmell", "defecationSpeed", "defecationColor"],
         ],
         [
-          ["medicalReport_one","medicalReport_two","medicalReport_three"]
-        ]
+          ["motionNum", "motionDuration", "motionTime"],
+          ["motion", "motionField", ""],
+        ],
+        [
+          ["sleepTime", "sleepQuality", "sleepDrugFlag"],
+          ["sleepDrug", "stayupLateFlag", "stayupLateWeekNum"],
+        ],
+        [
+          ["physicalSigns", "moistureDate", "bloodData"],
+          ["familyIllnessHistory", "operationHistory", "nearOperationFlag"],
+          ["recoveryeSituation", "longEatDrugFlag", "longEatDrugClassify"],
+          ["allergyFlag", "allergySituation", "allergen"],
+        ],
+        [["medicalReport_one", "medicalReport_two", "medicalReport_three"]],
       ],
       copyValue: "",
       detailHealthy: null,
@@ -246,21 +425,25 @@ export default {
     showDialog(data) {
       this.data = data;
       this.title = `「${data.name}」客户健康评估信息`;
+      this.copyValue =
+        window.location.origin.replace("manage", "sign") +
+        "/subhealthyInvestigation/" +
+        this.data.encId;
       this.getCustomerHealthyByCusId();
     },
-    getCustomerHealthyByCusId(){
+    getCustomerHealthyByCusId() {
       getCustomerPhysicalSignsByCusId(this.data.id).then((res) => {
         this.showFlag = false;
         if (res.data.customerHealthy) {
           //判断是体征还是健康评估
           this.dataType = res.data.type;
-          if(this.dataType == 0){
-             this.healthyData = Object.assign({}, res.data.customerHealthy);
-             this.remarkList[0].remarkValue = this.healthyData.remark;
-             this.guidanceList[0].guidanceValue = this.healthyData.guidance;
-             this.getDataListByHealthyMessage(res.data.customerHealthy);
-          }else{
-            this.getDataListBySignMessage(res.data.customerHealthy)
+          if (this.dataType == 0) {
+            this.healthyData = Object.assign({}, res.data.customerHealthy);
+            this.remarkList[0].remarkValue = this.healthyData.remark;
+            this.guidanceList[0].guidanceValue = this.healthyData.guidance;
+            this.getDataListByHealthyMessage(res.data.customerHealthy);
+          } else {
+            this.getDataListBySignMessage(res.data.customerHealthy);
           }
         }
         //this.enc_id = res.data.enc_id;
@@ -276,7 +459,7 @@ export default {
       this.copyValue = "";
     },
     //对体征信息进行处理
-    getDataListBySignMessage(sign){
+    getDataListBySignMessage(sign) {
       sign.sex = sign.sex === 0 ? `男` : "女";
       sign.position = sign.position === 0 ? `南方` : "北方";
       sign.signStr = this.getSignString(sign.signList);
@@ -305,82 +488,138 @@ export default {
       }
     },
     //对健康评估信息进行处理
-    getDataListByHealthyMessage(healthy){
+    getDataListByHealthyMessage(healthy) {
       let detailHealthy = this.dealHealthy(healthy);
       //性别
-      detailHealthy.sex = detailHealthy.sex == 0 ?  "男" : (detailHealthy.sex == 1 ? "女" : "未知");
-      detailHealthy.position = detailHealthy.position == 0 ?  "南方" : "北方";
+      detailHealthy.sex =
+        detailHealthy.sex == 0 ? "男" : detailHealthy.sex == 1 ? "女" : "未知";
+      detailHealthy.position = detailHealthy.position == 0 ? "南方" : "北方";
       detailHealthy.rebound = detailHealthy.rebound == 0 ? "否" : "是";
       detailHealthy.crux = detailHealthy.crux == 0 ? "否" : "是";
       //调味品
-      detailHealthy.condiment += detailHealthy.otherCondiment ? (","+detailHealthy.otherCondiment) : "";
+      detailHealthy.condiment += detailHealthy.otherCondiment
+        ? "," + detailHealthy.otherCondiment
+        : "";
       //烹饪
       let cookingStyleRate = "";
-      if(detailHealthy.cookingStyleRate != null){
-        detailHealthy.cookingStyleRate.split(",").forEach(function(item, index){
-          cookingStyleRate += (cookingStyleRate != "" ? "," : "") + (healthyData["cookingStyleRateArray"][index])+item +"次";
-        });
+      if (detailHealthy.cookingStyleRate != null) {
+        detailHealthy.cookingStyleRate
+          .split(",")
+          .forEach(function (item, index) {
+            cookingStyleRate +=
+              (cookingStyleRate != "" ? "," : "") +
+              healthyData["cookingStyleRateArray"][index] +
+              item +
+              "次";
+          });
       }
       detailHealthy.cookingStyleRate = cookingStyleRate;
       //洗菜方式
-      detailHealthy.washVegetablesStyle += detailHealthy.otherWashVegetablesStyle ? (","+detailHealthy.otherWashVegetablesStyle) : "";
+      detailHealthy.washVegetablesStyle += detailHealthy.otherWashVegetablesStyle
+        ? "," + detailHealthy.otherWashVegetablesStyle
+        : "";
       //素菜占比
       detailHealthy.vegetableRate += "成";
 
-      let makeFoodTypeOption = healthyData["makeFoodTypeArray"].find(opt => opt.value == detailHealthy.makeFoodType+"");
-      detailHealthy.makeFoodType = makeFoodTypeOption ? makeFoodTypeOption.name : "";
+      let makeFoodTypeOption = healthyData["makeFoodTypeArray"].find(
+        (opt) => opt.value == detailHealthy.makeFoodType + ""
+      );
+      detailHealthy.makeFoodType = makeFoodTypeOption
+        ? makeFoodTypeOption.name
+        : "";
       //零食
-      detailHealthy.snacks += detailHealthy.otherSnacks ? ("," + detailHealthy.otherSnacks) : "";
-      detailHealthy.healthProductsFlag = detailHealthy.healthProductsFlag == 1 ? "有" : "无";
-      detailHealthy.healthProductsWeekRate = detailHealthy.healthProductsDayRate+"次/天,"+detailHealthy.healthProductsWeekRate+"次/周";
+      detailHealthy.snacks += detailHealthy.otherSnacks
+        ? "," + detailHealthy.otherSnacks
+        : "";
+      detailHealthy.healthProductsFlag =
+        detailHealthy.healthProductsFlag == 1 ? "有" : "无";
+      detailHealthy.healthProductsWeekRate =
+        detailHealthy.healthProductsDayRate +
+        "次/天," +
+        detailHealthy.healthProductsWeekRate +
+        "次/周";
       detailHealthy.waterNum += "毫升";
       //饮品
       let drinksNumString = "";
-      if(detailHealthy.drinksNum != null){
-        detailHealthy.drinksNum.split(",").forEach(function(item, index){
-          drinksNumString += (drinksNumString != "" ? "," : "") + (healthyData["drinksNumArray"][index])+item +"次";
+      if (detailHealthy.drinksNum != null) {
+        detailHealthy.drinksNum.split(",").forEach(function (item, index) {
+          drinksNumString +=
+            (drinksNumString != "" ? "," : "") +
+            healthyData["drinksNumArray"][index] +
+            item +
+            "次";
         });
       }
       detailHealthy.drinksNum = drinksNumString;
-      detailHealthy.drinkWineClassify += detailHealthy.otherWineClassify ? (","+detailHealthy.otherWineClassify) : "";
+      detailHealthy.drinkWineClassify += detailHealthy.otherWineClassify
+        ? "," + detailHealthy.otherWineClassify
+        : "";
       let drinkWineAmountString = "";
-      if(detailHealthy.drinkWineAmount != null){
-        detailHealthy.drinkWineAmount.split(",").forEach(function(item, index){
-          drinkWineAmountString += (drinkWineAmountString != "" ? "," : "") + (healthyData["drinkWineAmountArray"][index])+item + healthyData["drinkWineAmountUnitArray"][index];
-        });
+      if (detailHealthy.drinkWineAmount != null) {
+        detailHealthy.drinkWineAmount
+          .split(",")
+          .forEach(function (item, index) {
+            drinkWineAmountString +=
+              (drinkWineAmountString != "" ? "," : "") +
+              healthyData["drinkWineAmountArray"][index] +
+              item +
+              healthyData["drinkWineAmountUnitArray"][index];
+          });
       }
       detailHealthy.drinkWineAmount = drinkWineAmountString;
       detailHealthy.smokeFlag = detailHealthy.smokeFlag == 1 ? "是" : "否";
       detailHealthy.secondSmoke = detailHealthy.secondSmoke == 1 ? "是" : "否";
       let smokeRateString = "";
-      if(detailHealthy.smokeRate != null){
-        detailHealthy.smokeRate.split(",").forEach(function(item, index){
-          smokeRateString += (smokeRateString != "" ? "," : "") + (healthyData["smokeRateArray"][index])+item + healthyData["smokeRateUnitArray"][index];
+      if (detailHealthy.smokeRate != null) {
+        detailHealthy.smokeRate.split(",").forEach(function (item, index) {
+          smokeRateString +=
+            (smokeRateString != "" ? "," : "") +
+            healthyData["smokeRateArray"][index] +
+            item +
+            healthyData["smokeRateUnitArray"][index];
         });
       }
       detailHealthy.smokeRate = smokeRateString;
       detailHealthy.defecationNum = detailHealthy.defecationNum + "次/天";
-      detailHealthy.motionDuration = detailHealthy.motionDuration +"分钟";
+      detailHealthy.motionDuration = detailHealthy.motionDuration + "分钟";
       let motionStr = "";
-      if(detailHealthy.aerobicMotionClassify != null){
-        detailHealthy.aerobicMotionClassify.split(",").forEach(function(item, index){
-          motionStr += item ? ((motionStr != "" ? "," : "") + item) : "";
-        });
+      if (detailHealthy.aerobicMotionClassify != null) {
+        detailHealthy.aerobicMotionClassify
+          .split(",")
+          .forEach(function (item, index) {
+            motionStr += item ? (motionStr != "" ? "," : "") + item : "";
+          });
       }
-      if(detailHealthy.anaerobicMotionClassify != null){
-        detailHealthy.anaerobicMotionClassify.split(",").forEach(function(item, index){
-          motionStr += item ? ((motionStr != "" ? "," : "") + item) : "";
-        });
+      if (detailHealthy.anaerobicMotionClassify != null) {
+        detailHealthy.anaerobicMotionClassify
+          .split(",")
+          .forEach(function (item, index) {
+            motionStr += item ? (motionStr != "" ? "," : "") + item : "";
+          });
       }
-      if(detailHealthy.anaerobicAerobicMotionClassify != null){
-        detailHealthy.anaerobicAerobicMotionClassify.split(",").forEach(function(item, index){
-          motionStr += item ? ((motionStr != "" ? "," : "") + item) : "";
-        });
+      if (detailHealthy.anaerobicAerobicMotionClassify != null) {
+        detailHealthy.anaerobicAerobicMotionClassify
+          .split(",")
+          .forEach(function (item, index) {
+            motionStr += item ? (motionStr != "" ? "," : "") + item : "";
+          });
       }
-      detailHealthy.motion =  this.trimComma(motionStr + (detailHealthy.otherMotionClassify ? ( ","+ detailHealthy.otherMotionClassify) : ""));
-      detailHealthy.motionField = this.trimComma(detailHealthy.motionField + (detailHealthy.otherMotionField ? (","+detailHealthy.otherMotionField) : ""));
-      detailHealthy.sleepDrugFlag = detailHealthy.sleepDrugFlag == 1 ? "有" : "无";
-      detailHealthy.stayupLateFlag = detailHealthy.stayupLateFlag == 1 ? "有" : "无";
+      detailHealthy.motion = this.trimComma(
+        motionStr +
+          (detailHealthy.otherMotionClassify
+            ? "," + detailHealthy.otherMotionClassify
+            : "")
+      );
+      detailHealthy.motionField = this.trimComma(
+        detailHealthy.motionField +
+          (detailHealthy.otherMotionField
+            ? "," + detailHealthy.otherMotionField
+            : "")
+      );
+      detailHealthy.sleepDrugFlag =
+        detailHealthy.sleepDrugFlag == 1 ? "有" : "无";
+      detailHealthy.stayupLateFlag =
+        detailHealthy.stayupLateFlag == 1 ? "有" : "无";
       detailHealthy.stayupLateWeekNum += "次/周";
       let physicalSigns = this.getSignString(detailHealthy.signList);
       /*if(detailHealthy.signList != null && detailHealthy.signList.length > 0){
@@ -388,101 +627,163 @@ export default {
           physicalSigns += "," + sign.name;
         })
       }*/
-      physicalSigns += "," + (detailHealthy.otherPhysicalSigns ? detailHealthy.otherPhysicalSigns : "");
+      physicalSigns +=
+        "," +
+        (detailHealthy.otherPhysicalSigns
+          ? detailHealthy.otherPhysicalSigns
+          : "");
       detailHealthy.physicalSigns = this.trimComma(physicalSigns);
-      detailHealthy.familyIllnessHistory = this.trimComma(detailHealthy.familyIllnessHistory + ","+ (detailHealthy.otherFamilyIllnessHistory ? detailHealthy.otherFamilyIllnessHistory : ""));
-      detailHealthy.operationHistory = this.trimComma(detailHealthy.operationHistory + ","+ (detailHealthy.otherOperationHistory ? detailHealthy.otherOperationHistory : ""));
-      detailHealthy.nearOperationFlag = detailHealthy.nearOperationFlag == 1 ? "有" : "无";
-      detailHealthy.longEatDrugFlag = detailHealthy.longEatDrugFlag == 1 ? "有" : "无";
-      detailHealthy.longEatDrugClassify = this.trimComma(detailHealthy.longEatDrugClassify + "," + (detailHealthy.otherLongEatDrugClassify ? detailHealthy.otherLongEatDrugClassify : ""));
+      detailHealthy.familyIllnessHistory = this.trimComma(
+        detailHealthy.familyIllnessHistory +
+          "," +
+          (detailHealthy.otherFamilyIllnessHistory
+            ? detailHealthy.otherFamilyIllnessHistory
+            : "")
+      );
+      detailHealthy.operationHistory = this.trimComma(
+        detailHealthy.operationHistory +
+          "," +
+          (detailHealthy.otherOperationHistory
+            ? detailHealthy.otherOperationHistory
+            : "")
+      );
+      detailHealthy.nearOperationFlag =
+        detailHealthy.nearOperationFlag == 1 ? "有" : "无";
+      detailHealthy.longEatDrugFlag =
+        detailHealthy.longEatDrugFlag == 1 ? "有" : "无";
+      detailHealthy.longEatDrugClassify = this.trimComma(
+        detailHealthy.longEatDrugClassify +
+          "," +
+          (detailHealthy.otherLongEatDrugClassify
+            ? detailHealthy.otherLongEatDrugClassify
+            : "")
+      );
       detailHealthy.allergyFlag = detailHealthy.allergyFlag == 1 ? "有" : "无";
-      detailHealthy.allergen = this.trimComma(detailHealthy.allergen + "," + (detailHealthy.otherAllergen ? detailHealthy.otherAllergen : ""));
-      let medicalReportPathArray = detailHealthy.medicalReport ? detailHealthy.medicalReport.split(",") : [];
-      let medicalReportNameArray = detailHealthy.medicalReportName ? detailHealthy.medicalReportName.split(",") : [];
+      detailHealthy.allergen = this.trimComma(
+        detailHealthy.allergen +
+          "," +
+          (detailHealthy.otherAllergen ? detailHealthy.otherAllergen : "")
+      );
+      let medicalReportPathArray = detailHealthy.medicalReport
+        ? detailHealthy.medicalReport.split(",")
+        : [];
+      let medicalReportNameArray = detailHealthy.medicalReportName
+        ? detailHealthy.medicalReportName.split(",")
+        : [];
       this.medicalReportPathArray = medicalReportPathArray;
-      detailHealthy.medicalReport_one = medicalReportPathArray.length > 0 ? (medicalReportNameArray.length > 0 ? medicalReportNameArray[0] : "体检报告(1)") : "";
-      detailHealthy.medicalReport_two =  medicalReportPathArray.length > 1 ? (medicalReportNameArray.length > 1 ? medicalReportNameArray[1] : "体检报告(2)") : "";
-      detailHealthy.medicalReport_three = medicalReportPathArray.length > 2 ? (medicalReportNameArray.length > 2 ? medicalReportNameArray[2] : "体检报告(3)") : "";
+      detailHealthy.medicalReport_one =
+        medicalReportPathArray.length > 0
+          ? medicalReportNameArray.length > 0
+            ? medicalReportNameArray[0]
+            : "体检报告(1)"
+          : "";
+      detailHealthy.medicalReport_two =
+        medicalReportPathArray.length > 1
+          ? medicalReportNameArray.length > 1
+            ? medicalReportNameArray[1]
+            : "体检报告(2)"
+          : "";
+      detailHealthy.medicalReport_three =
+        medicalReportPathArray.length > 2
+          ? medicalReportNameArray.length > 2
+            ? medicalReportNameArray[2]
+            : "体检报告(3)"
+          : "";
       this.detailHealthy = detailHealthy;
-      for(let i = 0; i < this.healthyTitleData.length; i++){
+      for (let i = 0; i < this.healthyTitleData.length; i++) {
         let stepArray = [];
-        for(let j= 0; j < this.healthyTitleData[i].length; j++){
-          stepArray[j] = ({"attr_name_one": this.healthyTitleData[i][j][0],"value_one": detailHealthy[this.healthyValueData[i][j][0]],"attr_name_two": this.healthyTitleData[i][j][1],"value_two": detailHealthy[this.healthyValueData[i][j][1]],"attr_name_three": this.healthyTitleData[i][j][2],"value_three": detailHealthy[this.healthyValueData[i][j][2]]});
+        for (let j = 0; j < this.healthyTitleData[i].length; j++) {
+          stepArray[j] = {
+            attr_name_one: this.healthyTitleData[i][j][0],
+            value_one: detailHealthy[this.healthyValueData[i][j][0]],
+            attr_name_two: this.healthyTitleData[i][j][1],
+            value_two: detailHealthy[this.healthyValueData[i][j][1]],
+            attr_name_three: this.healthyTitleData[i][j][2],
+            value_three: detailHealthy[this.healthyValueData[i][j][2]],
+          };
         }
         this.dataList[i] = stepArray;
       }
     },
     //健康信息处理,将数组转为字符串
-    dealHealthy(customerHealthy){
+    dealHealthy(customerHealthy) {
       let array = healthyData["needAttrName"];
-      for(let i = 0; i < array.length; i++){
-        customerHealthy[array[i]] = this.getHealthyStringByArray(array[i]+"Array", customerHealthy[array[i]]);
+      for (let i = 0; i < array.length; i++) {
+        customerHealthy[array[i]] = this.getHealthyStringByArray(
+          array[i] + "Array",
+          customerHealthy[array[i]]
+        );
       }
       return customerHealthy;
     },
     //将数组中的value值转为name
-    getHealthyStringByArray(key, valueArray){
+    getHealthyStringByArray(key, valueArray) {
       var str = "";
-      if(valueArray != null && valueArray.split(",").length > 0){
+      if (valueArray != null && valueArray.split(",").length > 0) {
         valueArray.split(",").forEach(function (item, index) {
-          let data = healthyData[key].find(opt => opt.value == item);
-          if(data != null){
+          let data = healthyData[key].find((opt) => opt.value == item);
+          if (data != null) {
             str += (str != "" ? "," : "") + data.name;
           }
-        })
+        });
       }
       return str;
     },
-    getSignString(signList){
-      if(signList == null){
+    getSignString(signList) {
+      if (signList == null) {
         return "";
       }
       let signStr = "";
-      for(let i in signList){
-        signStr += ","+signList[i].name;
+      for (let i in signList) {
+        signStr += "," + signList[i].name;
       }
       return signList.length > 0 ? signStr.substring(1) : signStr;
     },
-    downloadFile(fileName){
+    downloadFile(fileName) {
       this.downloadResource(fileName);
     },
-    generateReport(){
-       let data = this.detailHealthy;
-       if(!this.guidanceList[0].guidanceValue || this.guidanceList[0].guidanceValue.length == 0){
-         this.$confirm("该客户还未添加减脂指导,是否确认下载报告?", "警告", {
-           confirmButtonText: "确定", cancelButtonText: "取消", type: "warning"
-         })
-           .then(function(){
-           return generateHealthyReport(data);
-         })
-         .then((response) => {
-             if(response.code == 200 && response.path != null){
-                  this.download(response.path);
-             }
-          }).catch(function () {});
-       }else{
-         generateHealthyReport(data).then((res) => {
-            if(res.code == 200 && res.path != null){
-              this.download(res.path);
+    generateReport() {
+      let data = this.detailHealthy;
+      if (
+        !this.guidanceList[0].guidanceValue ||
+        this.guidanceList[0].guidanceValue.length == 0
+      ) {
+        this.$confirm("该客户还未添加减脂指导,是否确认下载报告?", "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(function () {
+            return generateHealthyReport(data);
+          })
+          .then((response) => {
+            if (response.code == 200 && response.path != null) {
+              this.download(response.path);
             }
-         });
-       }
-    },
-    trimComma(str){
-      if(str.startsWith(",") || str.startsWith(",")){
-        str = str.substring(1,str.length);
+          })
+          .catch(function () {});
+      } else {
+        generateHealthyReport(data).then((res) => {
+          if (res.code == 200 && res.path != null) {
+            this.download(res.path);
+          }
+        });
       }
-      if(str.endsWith(",") || str.endsWith(",")){
-        str = str.substring(0,str.length-1);
+    },
+    trimComma(str) {
+      if (str.startsWith(",") || str.startsWith(",")) {
+        str = str.substring(1, str.length);
+      }
+      if (str.endsWith(",") || str.endsWith(",")) {
+        str = str.substring(0, str.length - 1);
       }
       return str;
     },
     handleCopy() {
-      this.copyValue = window.location.origin.replace('manage', 'sign') + "/subhealthyInvestigation/"+this.data.encId;
-      const btnCopy = new Clipboard('.copyBtn');
+      new Clipboard(".copyBtn");
       this.$message({
-        message: '拷贝成功',
-        type: 'success'
+        message: "拷贝成功",
+        type: "success",
       });
     },
     /** 删除健康信息操作 */
@@ -496,35 +797,46 @@ export default {
           cancelButtonText: "取消",
           type: "warning",
         }
-      ).then(function () {
+      )
+        .then(function () {
           return delCustomerHealthy(ids);
-      }).then(() => {
+        })
+        .then(() => {
           this.dataList = [];
           this.msgSuccess("删除成功");
-      }).catch(function () {});
+        })
+        .catch(function () {});
     },
     handleEditHealthyClick() {
       //console.log(JSON.stringify(this.healthyData));
-      this.$refs["physicalSignsEditDialog"].showDialog(this.data, this.healthyData);
+      this.$refs["physicalSignsEditDialog"].showDialog(
+        this.data,
+        this.healthyData
+      );
     },
-    handleEditRemarkClick(){
-      this.$refs["physicalSignsRemarkDialog"].showDialog(this.data, this.healthyData);
+    handleEditRemarkClick() {
+      this.$refs["physicalSignsRemarkDialog"].showDialog(
+        this.data,
+        this.healthyData
+      );
     },
-    handleEditGuidanceClick(){
-      this.$refs["physicalSignsGuidanceDialog"].showDialog(this.data, this.healthyData);
-    }
-
-  }
+    handleEditGuidanceClick() {
+      this.$refs["physicalSignsGuidanceDialog"].showDialog(
+        this.data,
+        this.healthyData
+      );
+    },
+  },
 };
 </script>
 
 <style scoped>
-  .margin-top-20{
-    margin-top:20px;
-  }
-  .p_title_1{
-    font-size: 18px;
-    font-weight: bold;
-    margin-top: 20px;
-  }
+.margin-top-20 {
+  margin-top: 20px;
+}
+.p_title_1 {
+  font-size: 18px;
+  font-weight: bold;
+  margin-top: 20px;
+}
 </style>
diff --git a/stdiet-ui/src/views/custom/contract/index.vue b/stdiet-ui/src/views/custom/contract/index.vue
index 7e3551c29..ed75d8fb0 100644
--- a/stdiet-ui/src/views/custom/contract/index.vue
+++ b/stdiet-ui/src/views/custom/contract/index.vue
@@ -187,7 +187,7 @@
         prop="updateTime"
         width="180"
       />
-      <el-table-column label="合同地址" align="center" prop="path" width="80">
+      <el-table-column label="合同地址" align="center" prop="path" >
         <template slot-scope="scope">
           <el-button
             type="text"
@@ -197,6 +197,16 @@
             :data-clipboard-text="copyValue"
             >复制
           </el-button>
+          <el-popover placement="top" trigger="click">
+            <VueQr :text="copyValue" :logoSrc="logo" />
+            <el-button
+              slot="reference"
+              icon="el-icon-picture-outline"
+              type="text"
+              @click="handleCopy(scope.row.path)"
+              >二维码</el-button
+            >
+          </el-popover>
         </template>
       </el-table-column>
       <el-table-column label="备注" align="center" prop="remark" width="120" />
@@ -320,9 +330,14 @@ import { addContract, delContract, listContract } from "@/api/custom/contract";
 import Clipboard from "clipboard";
 
 import { mapGetters } from "vuex";
+import VueQr from "vue-qr";
+const logo = require("@/assets/logo/logo_b.png");
 
 export default {
   name: "Contract",
+  components: {
+    VueQr,
+  },
   data() {
     const checkServePromise = (rule, value, callback) => {
       if (this.form.projectId == 0 && !value) {
@@ -331,6 +346,7 @@ export default {
       callback();
     };
     return {
+      logo,
       // 遮罩层
       loading: true,
       // 选中数组