diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java index e53782b46..645785c05 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java @@ -4,8 +4,10 @@ import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.common.core.page.TableDataInfo; import com.stdiet.common.enums.BusinessType; +import com.stdiet.common.utils.HealthyUtils; import com.stdiet.common.utils.StringUtils; import com.stdiet.common.utils.sign.AesUtils; +import com.stdiet.common.utils.uuid.IdUtils; import com.stdiet.custom.domain.*; import com.stdiet.custom.dto.request.CustomerInvestigateRequest; import com.stdiet.custom.dto.request.FoodHeatCalculatorRequest; @@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; /** * 客户相关信息调查Controller @@ -139,6 +142,7 @@ public class InvestigateController extends BaseController { if(oldSysPreSale != null){ return AjaxResult.error("已提交过问卷,无法重复提交"); } + sysPreSaleSurvey.setQuestionType(0); return toAjax(sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey)); } @@ -155,4 +159,21 @@ public class InvestigateController extends BaseController { SysPreSaleSurvey preSaleSurvey = sysPreSaleSurveyService.getSysPreSaleSurveyByKey(customerKey); return AjaxResult.success(preSaleSurvey); } + + /** + * 添加用户简易问卷 + */ + @PostMapping("/addSimpleCustomerSurvey") + public AjaxResult addSimpleCustomerSurvey(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + sysPreSaleSurvey.setQuestionType(1); + sysPreSaleSurvey.setCustomerKey(IdUtils.fastSimpleUUID()); + int row = sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey); + if(row > 0){ + //获取标准体重 + Double standardWeight = HealthyUtils.calculateStandardWeightByBMI(sysPreSaleSurvey.getTall(), sysPreSaleSurvey.getAge(), sysPreSaleSurvey.getSex()); + return AjaxResult.success(standardWeight); + } + return AjaxResult.error("提交失败"); + } } diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java new file mode 100644 index 000000000..1b17670e3 --- /dev/null +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java @@ -0,0 +1,112 @@ +package com.stdiet.web.controller.custom; + +import java.util.List; + +import com.stdiet.common.utils.HealthyUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.stdiet.common.annotation.Log; +import com.stdiet.common.core.controller.BaseController; +import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.enums.BusinessType; +import com.stdiet.custom.domain.SysPreSaleSurvey; +import com.stdiet.custom.service.ISysPreSaleSurveyService; +import com.stdiet.common.utils.poi.ExcelUtil; +import com.stdiet.common.core.page.TableDataInfo; + +/** + * 简易问卷调查Controller + * + * @author xzj + * @date 2021-07-21 + */ +@RestController +@RequestMapping("/custom/preSaleSurvey") +public class SysPreSaleSurveyController extends BaseController +{ + @Autowired + private ISysPreSaleSurveyService sysPreSaleSurveyService; + + /** + * 查询简易问卷调查列表 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:list')") + @GetMapping("/list") + public TableDataInfo list(SysPreSaleSurvey sysPreSaleSurvey) + { + startPage(); + sysPreSaleSurvey.setQuestionType(1); + List<SysPreSaleSurvey> list = sysPreSaleSurveyService.selectSysPreSaleSurveyList(sysPreSaleSurvey); + if(list != null && list.size() > 0){ + for (SysPreSaleSurvey survey : list) { + //计算标准体重 + survey.setStandardWeight(HealthyUtils.calculateStandardWeightByBMI(survey.getTall(), survey.getAge(), survey.getSex())); + } + } + return getDataTable(list); + } + + /** + * 导出简易问卷调查列表 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:export')") + @Log(title = "简易问卷调查", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysPreSaleSurvey sysPreSaleSurvey) + { + List<SysPreSaleSurvey> list = sysPreSaleSurveyService.selectSysPreSaleSurveyList(sysPreSaleSurvey); + ExcelUtil<SysPreSaleSurvey> util = new ExcelUtil<SysPreSaleSurvey>(SysPreSaleSurvey.class); + return util.exportExcel(list, "preSaleSurvey"); + } + + /** + * 获取简易问卷调查详细信息 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(sysPreSaleSurveyService.selectSysPreSaleSurveyById(id)); + } + + /** + * 新增简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:add')") + @Log(title = "简易问卷调查", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + return toAjax(sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey)); + } + + /** + * 修改简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:edit')") + @Log(title = "简易问卷调查", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + return toAjax(sysPreSaleSurveyService.updateSysPreSaleSurvey(sysPreSaleSurvey)); + } + + /** + * 删除简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:remove')") + @Log(title = "简易问卷调查", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysPreSaleSurveyService.deleteSysPreSaleSurveyByIds(ids)); + } +} \ No newline at end of file diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java index 6577c9c16..3333e7ca9 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java @@ -507,6 +507,12 @@ public class WechatAppletController extends BaseController { sysWxUserInfo.setCusId(sysCustomer.getId()); sysWxUserInfo.setUpdateTime(DateUtils.getNowDate()); + //先根据cusId查询是否已经绑定过微信用户 + SysWxUserInfo cusIdWxUserInfo = sysWxUserInfoService.selectSysWxUserInfoByCusId(sysCustomer.getId()); + if(cusIdWxUserInfo != null && !sysWxUserInfo.getOpenid().equals(curWxUserInfo.getOpenid())){ + //解绑之前记录 + sysWxUserInfoService.removeCusIdByOpenId(curWxUserInfo.getOpenid()); + } if (StringUtils.isNull(curWxUserInfo)) { // 新增sys_wx_user_info sysWxUserInfo.setCreateTime(DateUtils.getNowDate()); diff --git a/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java b/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java new file mode 100644 index 000000000..b201fedb0 --- /dev/null +++ b/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java @@ -0,0 +1,82 @@ +package com.stdiet.common.enums; + +/** + * 年龄、性别对应BMI值枚举类 + */ +public enum AgeBMI { + + age7_7(7, 7, "15.5_15"), + age8_8(8, 8, "16_15"), + age9_9(9, 9, "16.5_16"), + age10_10(10, 10, "17_16"), + age11_11(11, 11, "17.5_17"), + age12_12(12, 12, "18_17"), + age13_13(13, 13, "19_18"), + age14_14(14, 14, "19.5_19"), + age15_15(15, 15, "20_20"), + age16_16(16, 16, "20.5_20"), + age17_17(17, 17, "21_20"), + age18_27(18, 27, "22_20"), + age28_32(28, 32, "22.5_20.5"), + age33_37(33, 37, "23_21"), + age38_42(38, 42, "23.5_21.5"), + age43_47(43, 47, "24_22"), + age48_52(48, 52, "24.5_22.5"); + + private final int minAge; + + private final int maxAge; + + //BMI数值,0男 1女 + private final double[] bmi; + + //等于或大于该年龄之后就五岁一个阶梯,五岁BMI加0.5 + private static final int beyondAge = 53; + + //超过beyondAge年龄之后的起始BMI值,0男 1女 + private static final double[] beyondAgeBmi = {25, 23}; + + AgeBMI(int minAge, int maxAge, String bmi) + { + this.bmi = new double[2]; + this.bmi[0] = Double.parseDouble(bmi.split("_")[0]); + this.bmi[1] = Double.parseDouble(bmi.split("_")[1]); + this.minAge = minAge; + this.maxAge = maxAge; + } + + /** + * 根据年龄、性别获取BMI值 + * @param age 年龄 + * @param sex 性别 + * @return + */ + public static double getBmiByAgeAndSex(int age, int sex){ + if(age < beyondAge){ + double bmi = 0.0; + for (AgeBMI ageBMI : AgeBMI.values()) { + if(age >= ageBMI.minAge && age <= ageBMI.maxAge){ + bmi = ageBMI.bmi[sex]; + break; + } + } + return bmi; + }else{ + return getBeyondAgeBmi(age, sex); + } + } + + + /** + * 大年龄计算BMI,五岁一个阶梯 + * @param age + * @return + */ + public static double getBeyondAgeBmi(int age, int sex){ + return beyondAgeBmi[sex] + (0.5 * ((age - beyondAge)/5)); + } + + public static void main(String[] args) { + System.out.println(getBmiByAgeAndSex(20,0)); + } +} diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java index 3f18008a0..c082255ca 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java @@ -1,5 +1,9 @@ package com.stdiet.common.utils; +import com.stdiet.common.enums.AgeBMI; + +import java.math.BigDecimal; + public class HealthyUtils { public static final long maxHeatEveryDayLess = 250; @@ -174,4 +178,19 @@ public class HealthyUtils { } + /** + * 根据年龄、性别获取BMI值,再根据BMI值、身高计算标准体重 + * @param tall 身高(厘米) + * @param age 年龄 + * @param sex 性别 0男 1女 + * @return + */ + public static Double calculateStandardWeightByBMI(int tall, int age, int sex){ + double bmi = AgeBMI.getBmiByAgeAndSex(age, sex); + if(bmi > 0){ + BigDecimal standardWeight = NumberUtils.getNumberByRoundHalfUp(bmi * Math.pow(tall/100.0, 2) * 2, 2); + return standardWeight.doubleValue(); + } + return null; + } } diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java index 0a2ed412d..87f4a5035 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java @@ -104,4 +104,8 @@ public class AesUtils { } return null; } + + public static void main(String[] args) { + System.out.println(encrypt("4470")); + } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java index c1efc3110..c5d6a9d08 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java @@ -80,6 +80,15 @@ public class SysPreSaleSurvey extends BaseEntity @Excel(name = "售前ID") private Long preSaleId; + /** 问卷类型 0售前简易问卷 1简易评估问卷 */ + @Excel(name = "问卷类型 0售前简易问卷 1简易评估问卷") + private Integer questionType; + /** 删除标识 0未删除 1已删除 */ private Integer delFlag; + + /** + * 标准体重 + */ + private Double standardWeight; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java index 3db85be46..f43fbfc48 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java @@ -1,6 +1,8 @@ package com.stdiet.custom.service; import java.util.List; +import java.util.Map; + import com.stdiet.custom.domain.SysPreSaleSurvey; /** diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java index d35117f8a..a41fba1d9 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java @@ -1,7 +1,12 @@ package com.stdiet.custom.service.impl; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.HealthyUtils; +import com.stdiet.custom.utils.NutritionalUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.stdiet.custom.mapper.SysPreSaleSurveyMapper; diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml index 4b33f45f6..7521f242d 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml @@ -21,6 +21,7 @@ <result property="bloodData" column="blood_data" /> <result property="moistureData" column="moisture_data" /> <result property="preSaleId" column="pre_sale_id" /> + <result property="questionType" column="question_type" /> <result property="createTime" column="create_time" /> <result property="updateTime" column="update_time" /> <result property="createBy" column="create_by" /> @@ -34,7 +35,10 @@ <select id="selectSysPreSaleSurveyList" parameterType="SysPreSaleSurvey" resultMap="SysPreSaleSurveyResult"> <include refid="selectSysPreSaleSurveyVo"/> where del_flag = 0 - <if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if> + <if test="questionType != null"> + and question_type = #{questionType} + </if> + <if test="name != null and name != ''"> and (name like concat('%', #{name}, '%') or phone like concat('%',#{name},'%'))</if> </select> <select id="selectSysPreSaleSurveyById" parameterType="Long" resultMap="SysPreSaleSurveyResult"> @@ -60,6 +64,7 @@ <if test="bloodData != null">blood_data,</if> <if test="moistureData != null">moisture_data,</if> <if test="preSaleId != null">pre_sale_id,</if> + <if test="questionType != null">question_type,</if> <if test="createTime != null">create_time,</if> <if test="updateTime != null">update_time,</if> <if test="createBy != null">create_by,</if> @@ -82,6 +87,7 @@ <if test="bloodData != null">#{bloodData},</if> <if test="moistureData != null">#{moistureData},</if> <if test="preSaleId != null">#{preSaleId},</if> + <if test="questionType != null">#{questionType},</if> <if test="createTime != null">#{createTime},</if> <if test="updateTime != null">#{updateTime},</if> <if test="createBy != null">#{createBy},</if> @@ -108,6 +114,7 @@ <if test="bloodData != null">blood_data = #{bloodData},</if> <if test="moistureData != null">moisture_date = #{moistureData},</if> <if test="preSaleId != null">pre_sale_id = #{preSaleId},</if> + <if test="questionType != null">question_type = #{questionType},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="createBy != null">create_by = #{createBy},</if> diff --git a/stdiet-ui/src/api/custom/customerInvestigation.js b/stdiet-ui/src/api/custom/customerInvestigation.js index fe0d36d77..42e254c30 100644 --- a/stdiet-ui/src/api/custom/customerInvestigation.js +++ b/stdiet-ui/src/api/custom/customerInvestigation.js @@ -70,4 +70,15 @@ export function addCustomerSurvey(customerSurvey) { }) } +// 添加客户建议评估信息问卷,并返回标准体重,用于生成报告 +export function addSimpleCustomerSurvey(customerSurvey) { + return request({ + url: '/investigate/addSimpleCustomerSurvey', + method: 'post', + data: customerSurvey + }) +} + + + diff --git a/stdiet-ui/src/components/SimpleSurveyReport/index.vue b/stdiet-ui/src/components/SimpleSurveyReport/index.vue new file mode 100644 index 000000000..890096c88 --- /dev/null +++ b/stdiet-ui/src/components/SimpleSurveyReport/index.vue @@ -0,0 +1,261 @@ +<template> + <div class="report_div" v-show="showFlag"> + <div class="report_title_div"> + <div class="report_title">{{reportData.name ? reportData.name : '您的'}}身体评估报告</div> + <div class="report_weight"> + <div style="text-align:center"> + <span><span class="weight_name">{{reportData.overWeight > 0 ? '超重' : '增重'}}</span>{{Math.abs(reportData.overWeight).toFixed(2)}} 斤</span> <span style="margin-left:30px"><span class="weight_name">标准体重</span>{{reportData.standardWeight.toFixed(2)}} 斤</span> + </div> + </div> + <div> + <div class="sign_div_title"> + 病史体征 + </div> + <div class="sign_div_title_small"> + 选择准确的体征,获得更精准的评估、内容与服务 + </div> + <div class="sign_type"> + <div class="sign_type_div" v-for="(item,index) in reportData.signTypeArray" :key="index"> + <span class="sign_type_div_value">{{item}}</span> + </div> + </div> + + </div> + <div class="blood_moisture"> + <div style="float: left;"> + <div class="blood_moisture_title">湿气指数</div><div :class="getBloodMoistureIndexClass(reportData.moistureIndex)"></div> + </div> + <div style="float: left;margin-top:20px"> + <div class="blood_moisture_title">气血指数</div><div :class="getBloodMoistureIndexClass(reportData.bloodIndex)"></div> + </div> + + <div class="clear"></div> + <div class="sign_div_title_small" style="margin-top:20px"> + 绿色、橙色、红色分别表示轻度、中度、重度 + </div> + </div> + <div class="bottom_content"> + 改善身体情况请和营养顾问详谈 + </div> + </div> + </div> +</template> + +<script> +import { + getDictData, + getCustomerSurvey, + addSimpleCustomerSurvey +} from "@/api/custom/customerInvestigation"; +export default { + name: "index", + data() { + return { + showFlag: false, + data: null, + moistureDataList:[], + bloodDataList:[], + physicalSignsList:[], + reportData:{ + name: "", + overWeight: 0.0, + standardWeight: 0.0, + signTypeArray: [], + moistureIndex: 0, + bloodIndex: 0 + } + }; + }, + components: { + + }, + methods: { + showReportView(data, moistureDataList, bloodDataList, physicalSignsList){ + this.moistureDataList = moistureDataList; + this.bloodDataList = bloodDataList; + this.physicalSignsList = physicalSignsList; + this.reportData.name = data.name; + this.data = data; + if(data.standardWeight != undefined && data.standardWeight != null){ + this.reportData.standardWeight = data.standardWeight; + this.reportData.overWeight = data.weight - data.standardWeight; + } + data.physicalSignsIdArray.forEach((item,index) => { + let signName = this.getSignLabelByValue(item); + if(signName != null){ + this.reportData.signTypeArray.push(signName); + } + }); + if(data.otherPhysicalSigns != null && data.otherPhysicalSigns != ""){ + data.otherPhysicalSigns = data.otherPhysicalSigns.replace(",", ","); + this.reportData.signTypeArray = this.reportData.signTypeArray.concat(data.otherPhysicalSigns.split(",")); + } + this.reportData.moistureIndex = data.moistureDataArray.length; + this.reportData.bloodIndex = data.bloodDataArray.length; + this.showFlag = true; + + }, + getSignLabelByValue(value){ + let signObj = this.physicalSignsList.find((obj) => obj.dictValue === value); + return signObj != null ? signObj.dictLabel : null; + }, + getBloodMoistureIndexClass(num){ + let className = "blood_moisture_value"; + if(num <= 3){ + className += " light"; + }else if(num <= 6){ + className += " moderate"; + }else{ + className += " severe"; + } + return className; + } + }, + created() { + + }, +}; +</script> + + <style scoped> + + .report_div{ + width: 100%; + padding-top: 25px; + padding-bottom: 200px; + background: linear-gradient(30deg, #4B8AFF, #329FFE); + } + + .report_title_div{ + padding: 25px 15px; + width: 90%; + margin:0 auto; + background: #FFFFFF; + box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1); + border-radius: 20px; + } + + .report_title{ + margin:0 auto; + text-align: center; + font-size: 20px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + } + + + .report_weight{ + margin-top: 25px; + border-top:2px solid #F1F1F1; + border-bottom:2px solid #F1F1F1; + padding: 0px 10px; + } + + .weight_name{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 50px; + margin-right:5px; + } + + .weight_value{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #333333; + line-height: 50px; + } + + .sign_div_title{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 40px; + margin-top:10px; + } + + .sign_div_title_small{ + font-size: 15px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #999999; + line-height: 20px; + } + + .sign_type{ + margin-top:10px; + padding-bottom:20px; + border-bottom:2px solid #F1F1F1; + } + + .sign_type_div{ + height: 30px; + background: #F1F1F1; + border-radius: 24px; + text-align: center; + margin:10px 5px; + padding: 0px 12px; + width:auto; + display:inline-block !important; + display:inline; + } + + .sign_type_div_value{ + font-size: 15px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #333333; + line-height: 30px; + } + + .blood_moisture{ + margin-top: 20px; + } + + .blood_moisture_title{ + float: left; + font-size: 16px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 30px; + } + + .blood_moisture_value{ + margin-left:10px; + float: left; + width: 220px; + height:30px; + border-radius: 20px; + } + + .clear{ clear:both} + + .light{ + background: #20d866; + } + + .moderate{ + background: #f0a70b; + } + + .severe{ + background: #e94545; + } + + .bottom_content{ + font-size: 14px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #4B8AFF; + line-height: 30px; + text-align:center; + margin-top:20px; + } + + +</style> diff --git a/stdiet-ui/src/permission.js b/stdiet-ui/src/permission.js index a36de713b..2b214ad8a 100644 --- a/stdiet-ui/src/permission.js +++ b/stdiet-ui/src/permission.js @@ -65,7 +65,8 @@ router.beforeEach((to, from, next) => { to.path.startsWith("/recipes/detail/") || to.path.startsWith("/subhealthyInvestigation/") || to.path.startsWith("/foodHeatCalculator/") || - to.path.startsWith("/preSaleSurvey/") + to.path.startsWith("/preSaleSurvey/") || + to.path.startsWith("/simple/preSaleSurvey") ) { // 在免登录白名单,直接进入 next(); diff --git a/stdiet-ui/src/router/index.js b/stdiet-ui/src/router/index.js index a9dc8f184..a73357daa 100644 --- a/stdiet-ui/src/router/index.js +++ b/stdiet-ui/src/router/index.js @@ -187,6 +187,13 @@ export const constantRoutes = [ hidden: true, meta: { title: "胜唐体控基础问卷表" } }, + { + path: "/simple/preSaleSurvey", + component: resolve => + require(["@/views/custom/preSaleSurvey/simpleSurvey"], resolve), + hidden: true, + meta: { title: "胜唐体控基础问卷表" } + }, ]; export default new Router({ diff --git a/stdiet-ui/src/utils/request.js b/stdiet-ui/src/utils/request.js index c26c01fa8..d4c891042 100644 --- a/stdiet-ui/src/utils/request.js +++ b/stdiet-ui/src/utils/request.js @@ -10,7 +10,7 @@ const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 10000 + timeout: 100000 }) // request拦截器 service.interceptors.request.use(config => { diff --git a/stdiet-ui/src/views/custom/preSaleSurvey/index.vue b/stdiet-ui/src/views/custom/preSaleSurvey/index.vue index e69de29bb..58871c690 100644 --- a/stdiet-ui/src/views/custom/preSaleSurvey/index.vue +++ b/stdiet-ui/src/views/custom/preSaleSurvey/index.vue @@ -0,0 +1,486 @@ +<template> + <div class="app-container"> + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="客户信息" prop="name"> + <el-input + v-model="queryParams.name" + placeholder="请输入姓名或手机号" + clearable + size="small" + /> + </el-form-item> + <el-form-item> + <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> + + <el-row :gutter="10" class="mb8"> + <!--<el-col :span="1.5"> + <el-button + type="primary" + icon="el-icon-plus" + size="mini" + @click="handleAdd" + v-hasPermi="['custom:preSaleSurvey:add']" + >新增</el-button> + </el-col>--> + <!--<el-col :span="1.5"> + <el-button + type="success" + icon="el-icon-edit" + size="mini" + :disabled="single" + @click="handleUpdate" + v-hasPermi="['custom:preSaleSurvey:edit']" + >修改</el-button> + </el-col>--> + <el-col :span="1.5"> + <el-button + icon="el-icon-share" + type="primary" + size="mini" + class="copyBtn" + :data-clipboard-text="copyValue" + @click="handleCopy" + title="点击复制问卷链接" + >问卷链接</el-button> + <el-popover + placement="bottom" + trigger="click" + style="margin: 0 12px" + > + <VueQr :text="copyValue" :logoSrc="logo" :size="256" /> + <el-button + slot="reference" + size="mini" + icon="el-icon-picture-outline" + type="primary" + title="点击查看二维码" + >二维码 + </el-button> + </el-popover> + </el-col> + + <el-col :span="1.5"> + <el-button + type="danger" + icon="el-icon-delete" + size="mini" + :disabled="multiple" + @click="handleDelete" + v-hasPermi="['custom:preSaleSurvey:remove']" + >删除</el-button> + </el-col> + <!--<el-col :span="1.5"> + <el-button + type="warning" + icon="el-icon-download" + size="mini" + @click="handleExport" + v-hasPermi="['custom:preSaleSurvey:export']" + >导出</el-button> + </el-col>--> + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + + <el-table v-loading="loading" :data="preSaleSurveyList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + <el-table-column label="姓名" align="center" prop="name" width="100"/> + <el-table-column label="年龄" align="center" prop="age" width="60"/> + <el-table-column label="性别" align="center" prop="sex" width="60"> + <template slot-scope="scope"> + {{scope.row.sex == 0 ? '男' : '女'}} + </template> + </el-table-column> + <el-table-column label="身高(厘米)" align="center" prop="tall" width="100"/> + <el-table-column label="体重(斤)" align="center" prop="weight" width="80"/> + <el-table-column label="标准体重(斤)" align="center" prop="standardWeight" width="100"> + <template slot-scope="scope"> + {{(scope.row.standardWeight.toFixed(2))}} + </template> + </el-table-column> + <el-table-column label="超重(斤)" align="center" prop="overWeight" width="80"> + <template slot-scope="scope"> + {{(scope.row.overWeight.toFixed(2))}} + </template> + </el-table-column> + <el-table-column label="电话" align="center" prop="phone" width="110"/> + <el-table-column label="特殊体征" align="center" prop="physicalSignsNameArray" > + <template slot-scope="scope"> + <AutoHideInfo :data="scope.row.physicalSignsNameArray" :line="1"></AutoHideInfo> + </template> + </el-table-column> + <el-table-column label="作息时间" align="center" prop="timeTableArray"> + <template slot-scope="scope"> + <div>{{scope.row.timeTableArray[0] != null && scope.row.timeTableArray[0] != '' ? ('睡觉:'+scope.row.timeTableArray[0]) : ''}}</div> + <div>{{scope.row.timeTableArray[1] != null && scope.row.timeTableArray[1] != '' ? ('起床:'+scope.row.timeTableArray[1]) : ''}}</div> + </template> + </el-table-column> + <el-table-column label="调理经历" align="center" prop="experience" > + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.experience" :maxLength="10"></AutoHideMessage> + </template> + </el-table-column> + <el-table-column label="职业" align="center" prop="occupation" > + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.occupation" :maxLength="10"></AutoHideMessage> + </template> + </el-table-column> + <el-table-column label="湿气数据" align="center" prop="moistureDataNameArray" > + <template slot-scope="scope"> + <AutoHideInfo :data="scope.row.moistureDataNameArray" :line="1"></AutoHideInfo> + </template> + </el-table-column> + <el-table-column label="气血数据" align="center" prop="bloodDataNameArray" > + <template slot-scope="scope"> + <AutoHideInfo :data="scope.row.bloodDataNameArray" :line="1"></AutoHideInfo> + </template> + </el-table-column> + <el-table-column label="创建时间" align="center" prop="createTime" width="140"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <!--<el-button + size="mini" + type="text" + icon="el-icon-edit" + @click="handleUpdate(scope.row)" + v-hasPermi="['custom:preSaleSurvey:edit']" + >修改</el-button>--> + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDelete(scope.row)" + v-hasPermi="['custom:preSaleSurvey:remove']" + >删除</el-button> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <!-- 添加或修改简易问卷调查对话框 --> + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-form-item label="姓名" prop="name"> + <el-input v-model="form.name" placeholder="请输入姓名" /> + </el-form-item> + <el-form-item label="身高(厘米)" prop="tall"> + <el-input v-model="form.tall" placeholder="请输入身高,厘米" /> + </el-form-item> + <el-form-item label="年龄" prop="age"> + <el-input v-model="form.age" placeholder="请输入年龄" /> + </el-form-item> + <el-form-item label="0男 1女" prop="sex"> + <el-select v-model="form.sex" placeholder="请选择0男 1女"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + <el-form-item label="电话" prop="phone"> + <el-input v-model="form.phone" placeholder="请输入电话" /> + </el-form-item> + <el-form-item label="特殊体征ID" prop="physicalSignsId"> + <el-input v-model="form.physicalSignsId" placeholder="请输入特殊体征ID" /> + </el-form-item> + <el-form-item label="体重" prop="weight"> + <el-input v-model="form.weight" placeholder="请输入体重" /> + </el-form-item> + <el-form-item label="其他体征" prop="otherPhysicalSigns"> + <el-input v-model="form.otherPhysicalSigns" placeholder="请输入其他体征" /> + </el-form-item> + <el-form-item label="作息时间" prop="timeTable"> + <el-input v-model="form.timeTable" placeholder="请输入作息时间" /> + </el-form-item> + <el-form-item label="减脂或慢病调理经历" prop="experience"> + <el-input v-model="form.experience" placeholder="请输入减脂或慢病调理经历" /> + </el-form-item> + <el-form-item label="职业" prop="occupation"> + <el-input v-model="form.occupation" placeholder="请输入职业" /> + </el-form-item> + <el-form-item label="气血数据" prop="bloodData"> + <el-input v-model="form.bloodData" placeholder="请输入气血数据" /> + </el-form-item> + <el-form-item label="售前ID" prop="preSaleId"> + <el-input v-model="form.preSaleId" placeholder="请输入售前ID" /> + </el-form-item> + <el-form-item label="湿气数据" prop="moistureData"> + <el-input v-model="form.moistureData" placeholder="请输入湿气数据" /> + </el-form-item> + <el-form-item label="问卷类型 0售前简易问卷 1简易评估问卷" prop="questionType"> + <el-select v-model="form.questionType" placeholder="请选择问卷类型 0售前简易问卷 1简易评估问卷"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">确 定</el-button> + <el-button @click="cancel">取 消</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { listPreSaleSurvey, getPreSaleSurvey, delPreSaleSurvey, addPreSaleSurvey, updatePreSaleSurvey, exportPreSaleSurvey } from "@/api/custom/preSaleSurvey"; +import Clipboard from "clipboard"; +import AutoHideInfo from "@/components/AutoHideInfo"; +import AutoHideMessage from "@/components/AutoHideMessage" +import VueQr from "vue-qr"; +const logo = require("@/assets/logo/logo_b.png"); +export default { + name: "PreSaleSurvey", + data() { + return { + logo, + // 遮罩层 + loading: true, + // 选中数组 + ids: [], + // 非单个禁用 + single: true, + // 非多个禁用 + multiple: true, + // 显示搜索条件 + showSearch: true, + // 总条数 + total: 0, + // 简易问卷调查表格数据 + preSaleSurveyList: [], + // 弹出层标题 + title: "", + // 是否显示弹出层 + open: false, + // 查询参数 + queryParams: { + pageNum: 1, + pageSize: 10, + name: null + }, + // 表单参数 + form: {}, + // 表单校验 + rules: { + + }, + simpleSignTypeOption: [], + moistureDataExtendedOption:[], + bloodDataExtendedOption:[], + copyValue: "" + }; + }, + created() { + this.copyValue = window.location.origin.replace("manage", "sign") +"/simple/preSaleSurvey" + this.getDicts("simple_sign_type").then((response) => { + this.simpleSignTypeOption = response.data; + }); + this.getDicts("moisture_data_extended").then((response) => { + this.moistureDataExtendedOption = response.data; + }); + this.getDicts("blood_data_extended").then((response) => { + this.bloodDataExtendedOption = response.data; + this.getList(); + }); + + }, + components:{ + AutoHideInfo,AutoHideMessage,VueQr + }, + methods: { + /** 查询简易问卷调查列表 */ + getList() { + this.loading = true; + listPreSaleSurvey(this.queryParams).then(response => { + response.rows.forEach(item => { + item.physicalSignsIdArray = item.physicalSignsId.split(","); + item.timeTableArray = item.timeTable.split(","); + item.bloodDataArray = item.bloodData.split(","); + item.moistureDataArray = item.moistureData.split(","); + item.physicalSignsNameArray = this.getPhysicalSignsArray(item); + item.moistureDataNameArray = this.getMoistureDataNameArray(item); + item.bloodDataNameArray = this.getBloodDataNameArray(item); + if(item.standardWeight != null && item.standardWeight > 0){ + item.overWeight = item.weight - item.standardWeight; + }else{ + item.overWeight = 0.0; + } + }); + this.preSaleSurveyList = response.rows; + this.total = response.total; + this.loading = false; + }); + }, + getPhysicalSignsArray(item){ + let array = []; + item.physicalSignsIdArray.forEach((sign,index) => { + array.push(this.getSignLabelByValue(sign, 1)); + }); + if(item.otherPhysicalSigns != null && item.otherPhysicalSigns != ""){ + item.otherPhysicalSigns = item.otherPhysicalSigns.replace(",", ","); + array = array.concat(item.otherPhysicalSigns.split(",")); + } + return array; + }, + getMoistureDataNameArray(item){ + let array = []; + item.moistureDataArray.forEach((moisture,index) => { + array.push(this.getSignLabelByValue(moisture, 2)); + }); + return array; + }, + getBloodDataNameArray(item){ + let array = []; + item.bloodDataArray.forEach((blood,index) => { + array.push(this.getSignLabelByValue(blood, 3)); + }); + return array; + }, + getSignLabelByValue(value, type){ + if(type == 1){ + let signObj = this.simpleSignTypeOption.find((obj) => obj.dictValue === value); + return signObj != null ? signObj.dictLabel : null; + }else if(type == 2){ + let signObj = this.moistureDataExtendedOption.find((obj) => obj.dictValue === value); + return signObj != null ? signObj.dictLabel : null; + }else{ + let signObj = this.bloodDataExtendedOption.find((obj) => obj.dictValue === value); + return signObj != null ? signObj.dictLabel : null; + } + }, + + // 取消按钮 + cancel() { + this.open = false; + this.reset(); + }, + // 表单重置 + reset() { + this.form = { + id: null, + name: null, + customerKey: null, + tall: null, + age: null, + sex: null, + phone: null, + physicalSignsId: null, + weight: null, + otherPhysicalSigns: null, + timeTable: null, + experience: null, + occupation: null, + bloodData: null, + preSaleId: null, + createTime: null, + moistureData: null, + updateTime: null, + createBy: null, + questionType: null, + updateBy: null, + delFlag: null + }; + this.resetForm("form"); + }, + handleCopy() { + new Clipboard(".copyBtn"); + this.$message({ + message: "拷贝成功", + type: "success", + }); + }, + /** 搜索按钮操作 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 重置按钮操作 */ + resetQuery() { + this.resetForm("queryForm"); + this.handleQuery(); + }, + // 多选框选中数据 + handleSelectionChange(selection) { + this.ids = selection.map(item => item.id) + this.single = selection.length!==1 + this.multiple = !selection.length + }, + /** 新增按钮操作 */ + handleAdd() { + this.reset(); + this.open = true; + this.title = "添加简易问卷调查"; + }, + /** 修改按钮操作 */ + handleUpdate(row) { + this.reset(); + const id = row.id || this.ids + getPreSaleSurvey(id).then(response => { + this.form = response.data; + this.open = true; + this.title = "修改简易问卷调查"; + }); + }, + /** 提交按钮 */ + submitForm() { + this.$refs["form"].validate(valid => { + if (valid) { + if (this.form.id != null) { + updatePreSaleSurvey(this.form).then(response => { + if (response.code === 200) { + this.msgSuccess("修改成功"); + this.open = false; + this.getList(); + } + }); + } else { + addPreSaleSurvey(this.form).then(response => { + if (response.code === 200) { + this.msgSuccess("新增成功"); + this.open = false; + this.getList(); + } + }); + } + } + }); + }, + /** 删除按钮操作 */ + handleDelete(row) { + const ids = row.id || this.ids; + this.$confirm('是否确认删除简易问卷调查编号为"' + ids + '"的数据项?', "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(function() { + return delPreSaleSurvey(ids); + }).then(() => { + this.getList(); + this.msgSuccess("删除成功"); + }).catch(function() {}); + }, + /** 导出按钮操作 */ + handleExport() { + const queryParams = this.queryParams; + this.$confirm('是否确认导出所有简易问卷调查数据项?', "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(function() { + return exportPreSaleSurvey(queryParams); + }).then(response => { + this.download(response.msg); + }).catch(function() {}); + } + } +}; +</script> \ No newline at end of file diff --git a/stdiet-ui/src/views/custom/preSaleSurvey/simpleSurvey/index.vue b/stdiet-ui/src/views/custom/preSaleSurvey/simpleSurvey/index.vue new file mode 100644 index 000000000..fd39043cb --- /dev/null +++ b/stdiet-ui/src/views/custom/preSaleSurvey/simpleSurvey/index.vue @@ -0,0 +1,462 @@ +<template> + <div> + <section v-show="!submitSuccessFlag"> + <div style="padding: 5px; text-align: center;margin-top:5px"> + <img :src="logo" style="width: auto; height: 40px" alt="logo" /> + </div> + <el-form + ref="form" + label-position="top" + :model="form" + :rules="rules" + label-width="100px" + style="padding: 16px" + > + <p class="p_title_1 text-span-title" style="margin-top: 0px;" align="center">胜唐体控基础信息问卷表</p> + <!--<p style="font-size: 15px; margin-bottom: 12px;margin-top: 10px;">请您确保下方姓名、手机号正确</p>--> + <el-form-item label="1、真实姓名" prop="name" style="margin-top: 2px;"> + <el-input v-model="form.name" placeholder="请输入真实姓名" maxlength="20" /> + </el-form-item> + <el-form-item label="2、手机号" prop="phone" > + <el-input v-model="form.phone" type="number" placeholder="请输入手机号" /> + </el-form-item> + <el-form-item label="3、性别" prop="sex"> + <el-radio-group v-model="form.sex" size="small"> + <el-radio :label="parseInt('0')" border>男</el-radio> + <el-radio :label="parseInt('1')" border>女</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="4、年龄" prop="age" > + <el-input type="number" v-model="form.age" placeholder="请输入年龄(整数)" autocomplete="off" ></el-input> + </el-form-item> + <el-form-item label="5、身高(厘米)" prop="tall" > + <el-input type="number" v-model="form.tall" placeholder="请输入身高(整数)" autocomplete="off" ></el-input> + </el-form-item> + <el-form-item label="6、体重(斤)" prop="weight" > + <el-input v-model="form.weight" placeholder="请输入体重(可保留一位小数)" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="7、职业" prop="occupation"> + <el-input placeholder="请输入职业名称" v-model="form.occupation" maxlength="50" + ></el-input> + </el-form-item> + <el-form-item label="8、病史体征(可多选)" prop="physicalSignsIdArray" > + <el-select v-model="form.physicalSignsIdArray" multiple placeholder="请选择"> + <el-option + v-for="physicalSign in physicalSignsList" + :key="physicalSign.dictValue" + :label="physicalSign.dictLabel" + :value="physicalSign.dictValue" + > + </el-option> + </el-select> + <div><span class="text-span">其他病史体征</span> + <el-input type="textarea" + placeholder="请输入其他病史体征,使用,隔开" + v-model="form.otherPhysicalSigns" + maxlength="200" + show-word-limit + rows="2" + ></el-input> + </div> + </el-form-item> + <el-form-item label="9、作息时间" > + <div class="margin-left"> + <span class="text-span">睡觉时间</span> + <el-input placeholder="请输入睡觉时间" maxlength="20" v-model="form.timeTableArray[0]" style="width:60%;margin-left:10px"/> + </div> + <div class="margin-left" style="margin-top:8px;"> + <span class="text-span">起床时间</span> + <el-input placeholder="请输入起床时间" maxlength="20" v-model="form.timeTableArray[1]" style="width:60%;margin-left:10px"/> + </div> + </el-form-item> + <el-form-item label="10、减脂经历" prop="experience" > + <el-input + type="textarea" + placeholder="请描述下减脂经历" + v-model="form.experience" + maxlength="200" + show-word-limit + rows="3" + ></el-input> + </el-form-item> + <el-form-item label="11、湿气测试(可多选)" prop="moistureDataArray" > + <el-checkbox-group v-model="form.moistureDataArray" > + <el-checkbox v-for="moistureItem in moistureDataList" style="width:100%" :label="moistureItem.dictValue" :key="moistureItem.dictValue">{{ moistureItem.dictLabel }}</el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="12、气血测试(可多选)" prop="bloodDataArray" > + <el-checkbox-group v-model="form.bloodDataArray" > + <el-checkbox v-for="bloodItem in bloodDataList" style="width:100%" :label="bloodItem.dictValue" :key="bloodItem.dictValue">{{ bloodItem.dictLabel }}</el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item style="text-align: center; margin: 0 auto"> + <el-button + type="primary" + @click="addCustomerSurvey()" + style="width:80%" + :disabled="submitFlag" + >填写完成,提交问卷</el-button + > + </el-form-item> + </el-form> + + </section> + <SimpleSurveyReport ref="simpleSurveyReportRef"></SimpleSurveyReport> + </div> +</template> +<script> +import { + getDictData, + getCustomerSurvey, + addSimpleCustomerSurvey +} from "@/api/custom/customerInvestigation"; +const logo = require("@/assets/logo/st_logo.png"); +import SimpleSurveyReport from "@/components/SimpleSurveyReport" +export default { + name: "index", + data() { + return { + logo, + submitFlag: false, + submitSuccessFlag: false, + moistureDataList:[], + bloodDataList:[], + physicalSignsList:[], + form:{ + customerKey: null, + name: "", + phone: "", + sex: 1, + age: null, + tall: null, + weight: null, + physicalSignsIdArray:[], + physicalSignsId: "", + otherPhysicalSigns: "", + timeTableArray:["",""], + timeTable: "", + experience: "", + occupation: "", + bloodDataArray: [], + bloodData: "", + moistureDataArray: [], + moistureData: "", + }, + rules: { + name: [{ required: true, trigger: "blur", message: "请填写姓名" }], + phone: [ + //{ required: false, trigger: "blur", message: "请选择手机号" }, + { + required: false, + trigger: "blur", + pattern: /^\d{5,11}$/ , + message: "手机号格式不正确", + } + ], + sex: [{ required: true, trigger: "blur", message: "请选择性别" }], + age: [ + { required: true, trigger: "blur", message: "请填写年龄" }, + { + required: true, + trigger: "blur", + pattern: /^[1-9]\d*$/, + message: "年龄格式不正确", + }, + ], + tall: [ + { required: true, trigger: "blur", message: "请填写身高" }, + { + required: true, + trigger: "blur", + pattern: /^[1-9]\d*$/, + message: "身高格式不正确", + }, + ], + weight: [ + { required: true, trigger: "blur", message: "请填写体重" }, + { + required: true, + trigger: "blur", + pattern: /^(\d+)(\.\d{1})?$/, + message: "体重格式不正确", + }, + ] + } + }; + }, + components: { + SimpleSurveyReport + }, + methods: { + addCustomerSurvey(){ + this.submitFlag = true; + this.form.physicalSignsId = this.form.physicalSignsIdArray.join(","); + this.form.timeTable = this.form.timeTableArray.join(","); + this.form.bloodData = this.form.bloodDataArray.join(","); + this.form.moistureData = this.form.moistureDataArray.join(","); + this.$refs.form.validate((valid) => { + if (valid){ + addSimpleCustomerSurvey(this.form).then((response) => { + if(response.code == 200){ + this.goTop(); + this.submitFlag = true; + this.form.standardWeight = response.data; + let self = this; + this.$notify({ + title: "提交成功,正在生成报告...", + message: "", + type: "success", + duration: "1000", + onClose: function(){ + self.submitSuccessFlag = true; + self.$refs.simpleSurveyReportRef.showReportView(self.form, self.moistureDataList, self.bloodDataList, self.physicalSignsList); + } + }); + }else{ + this.submitFlag = false; + } + }); + }else{ + this.$message({ + message: "数据未填写完整", + type: "warning", + }); + this.submitFlag = false; + } + }) + }, + goTop() { + window.scroll(0, 0); + }, + //获取湿气 + getMoistureDictData() { + getDictData("moisture_data_extended").then((response) => { + this.moistureDataList = response.data; + }); + }, + //获取气血 + getBloodDictData() { + getDictData("blood_data_extended").then((response) => { + this.bloodDataList = response.data; + }); + }, + /** 查询体征列表 */ + getPhysicalSignsList() { + getDictData("simple_sign_type").then((response) => { + this.physicalSignsList = response.data; + }); + } + }, + created() { + //this.form.customerKey = this.$route.params.customerKey; + //this.getCustomerSurvey(this.form.customerKey); + this.getPhysicalSignsList(); + this.getMoistureDictData(); + this.getBloodDictData(); + }, + beforeCreate() { + document.title = this.$route.meta.title; + } +}; +</script> + + <style scoped> +.el-form-item { + margin-bottom: 8px; +} + +.p_title_1 { + font-size: 18px; + font-weight: bold; + margin-top: 30px; +} +.p_title_2 { + font-size: 16px; + font-weight: bold; + margin-top: 30px; +} +.p_title_3 { + font-size: 14px; + font-weight: bold; + margin-top: 30px; +} +.margin-left { + margin-left: 14px; +} +.el-input__inner { + width: 30%; +} +.margin-top-10 { + margin-top: 10px; +} +.width-50-left-8-right-5 { + width: 50%; + margin-left: 8px; + margin-right: 5px; +} +.width-70-left-8-right-5 { + width: 70%; + margin-left: 8px; + margin-right: 5px; +} +.text-span{ + color:#606266; + font-weight: 700; + font-size: 14px + } + + .text-span-title{ + color:#606266; + font-weight: 800; + font-size: 16px + } + + .report_div{ + width: 100%; + padding-top: 25px; + padding-bottom: 200px; + background: linear-gradient(30deg, #4B8AFF, #329FFE); + } + + .report_title_div{ + padding: 25px 15px; + width: 90%; + margin:0 auto; + background: #FFFFFF; + box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1); + border-radius: 20px; + } + + .report_title{ + margin:0 auto; + text-align: center; + font-size: 20px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + } + + + .report_weight{ + margin-top: 25px; + border-top:2px solid #F1F1F1; + border-bottom:2px solid #F1F1F1; + padding: 0px 5% + } + + .weight_name{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 50px; + margin-right:5px; + } + + .weight_value{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #333333; + line-height: 50px; + } + + .sign_div_title{ + font-size: 18px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 40px; + margin-top:10px; + } + + .sign_div_title_small{ + font-size: 15px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #999999; + line-height: 20px; + } + + .sign_type{ + margin-top:10px; + padding-bottom:20px; + border-bottom:2px solid #F1F1F1; + } + + .sign_type_div{ + height: 30px; + background: #F1F1F1; + border-radius: 24px; + text-align: center; + margin:10px 5px; + padding: 0px 12px; + width:auto; + display:inline-block !important; + display:inline; + } + + .sign_type_div_value{ + font-size: 15px; + font-family: Source Han Sans CN; + font-weight: 400; + color: #333333; + line-height: 30px; + } + + .blood_moisture{ + margin-top: 20px; + } + + .blood_moisture_title{ + float: left; + font-size: 16px; + font-family: Source Han Sans CN; + font-weight: 500; + color: #4B8AFF; + line-height: 30px; + } + + .blood_moisture_value{ + margin-left:10px; + float: left; + width: 220px; + height:30px; + border-radius: 20px; + } + + .clear{ clear:both} + + .light{ + background: #20d866; + } + + .moderate{ + background: #f0a70b; + } + + .severe{ + background: #e94545; + } + + body{ + width: 100%; + + height: 100%; + + background-color: #20d866; + +} + + + + + + + + + + + + +</style>