inquiryOrderReportDetails.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
  3. <div style="padding: 20px; background-color: #fff;">
  4. 咨询报告详情
  5. </div>
  6. <div class="contentx" v-if="item!=null">
  7. <div class="desct"> 咨询报告信息</div>
  8. <el-descriptions title="" :column="3" border>
  9. <el-descriptions-item label="报告编号"><span v-if="item!=null">{{item.reportSn}}</span></el-descriptions-item>
  10. <el-descriptions-item label="状态"><span v-if="item!=null"><dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
  11. <el-descriptions-item label="会员ID"><span v-if="item!=null">{{item.userId}}</span></el-descriptions-item>
  12. <el-descriptions-item label="会员昵称"><span v-if="item!=null">{{item.nickName}}</span></el-descriptions-item>
  13. <el-descriptions-item label="会员电话"><span v-if="item!=null">{{item.phone}}</span></el-descriptions-item>
  14. <el-descriptions-item label="医生名称"><span v-if="item!=null">{{item.doctorName}}</span></el-descriptions-item>
  15. <el-descriptions-item label="咨询子类型" ><dict-tag :options="inquirySubTypeOptions" :value="item.inquirySubType"/></el-descriptions-item>
  16. <el-descriptions-item label="优惠劵发送人"><span v-if="item!=null">{{item.sendName}}</span></el-descriptions-item>
  17. <el-descriptions-item label="咨询问题"><span v-if="item!=null">{{item.patientDescs}}</span></el-descriptions-item>
  18. <el-descriptions-item label="疾病历"><span v-if="item!=null">{{item.illnessLogs}}</span></el-descriptions-item>
  19. <el-descriptions-item label="用药史"><span v-if="item!=null">{{item.drugLogs}}</span></el-descriptions-item>
  20. <el-descriptions-item label="咨询结果"><span v-if="item!=null">{{item.inquiryResult}}</span></el-descriptions-item>
  21. <el-descriptions-item label="备注"><span v-if="item!=null">{{item.remark}}</span></el-descriptions-item>
  22. <el-descriptions-item label="医生签名"><span v-if="item.signUrl!=null"><img :src="item.signUrl" style="max-width: 100px;"></span></el-descriptions-item>
  23. <el-descriptions-item label="提交时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
  24. <el-descriptions-item label="首次处理时间"><span v-if="item!=null">{{item.updateTime}}</span></el-descriptions-item>
  25. <el-descriptions-item label="咨询备注"><span v-if="item!=null">{{item.companyUserRemark}}</span></el-descriptions-item>
  26. <el-descriptions-item label="疾病类型" ><dict-tag :options="diseaseTypeOptions" :value="item.diseaseType"/></el-descriptions-item>
  27. </el-descriptions>
  28. </div>
  29. <div class="contentx" v-if="item!=null">
  30. <div class="desct" >
  31. <span v-if="patientInfo">
  32. {{ patientInfo }}
  33. </span>
  34. <span v-else>
  35. 患者信息
  36. </span>
  37. </div>
  38. <el-descriptions title="" :column="3" border>
  39. <el-descriptions-item label="患者姓名" ><span v-if="item!=null">{{JSON.parse(item.patientJson).patientName}}</span></el-descriptions-item>
  40. <el-descriptions-item label="患者年龄" ><span v-if="item!=null">{{JSON.parse(item.patientJson).age}}</span></el-descriptions-item>
  41. <el-descriptions-item label="患者性别" ><span >{{JSON.parse(item.patientJson).sex==1?'男':'女'}}</span></el-descriptions-item>
  42. <el-descriptions-item label="身份证号" ><span >{{JSON.parse(item.patientJson).idCard}}</span></el-descriptions-item>
  43. <el-descriptions-item label="体重" ><span v-if="item!=null">{{JSON.parse(item.patientJson).weight}}</span></el-descriptions-item>
  44. <el-descriptions-item label="身高" ><span v-if="item!=null">{{JSON.parse(item.patientJson).height}}</span></el-descriptions-item>
  45. <el-descriptions-item label="BMI" ><span v-if="item!=null">{{bmi}}</span></el-descriptions-item>
  46. <el-descriptions-item label="肥胖类型"><span v-if="item!=null">{{fat}}</span></el-descriptions-item>
  47. <el-descriptions-item label="电话" >
  48. <span v-if="item!=null">{{patientMobile}}</span>
  49. <el-button icon="el-icon-search" size="mini" @click="handlePhone()" style="margin-left: 20px;" circle v-hasPermi="['his:inquiryOrderReport:queryPatientMobile']"></el-button>
  50. </el-descriptions-item>
  51. <el-descriptions-item label="学习周期" ><span v-if="item!=null">{{JSON.parse(item.patientJson).study}}</span></el-descriptions-item>
  52. <el-descriptions-item label="期望咨询方式" ><span >语音咨询</span></el-descriptions-item>
  53. <el-descriptions-item label="正在服药" ><span v-if="item!=null">{{JSON.parse(item.patientJson).drugs}}</span></el-descriptions-item>
  54. <el-descriptions-item label="用药情况" ><span v-if="item!=null">{{JSON.parse(item.patientJson).medication}}</span></el-descriptions-item>
  55. <el-descriptions-item label="咨询问题" span="3"><span v-if="item!=null">{{JSON.parse(item.patientJson).title}}</span></el-descriptions-item>
  56. <el-descriptions-item label="面部照片" span="3">
  57. <el-image v-if="faceImages!=null&&faceImages!=''" v-for="img in faceImages" :key="img.id"
  58. style="width: 100px"
  59. :src="img"
  60. :preview-src-list="[img]">
  61. </el-image>
  62. </el-descriptions-item>
  63. <el-descriptions-item label="舌苔照片" span="3">
  64. <el-image v-if="tongueImages!=null&&tongueImages!=''" v-for="img in tongueImages" :key="img.id"
  65. style="width: 100px"
  66. :src="img"
  67. :preview-src-list="[img]">
  68. </el-image>
  69. </el-descriptions-item>
  70. <el-descriptions-item label="检测报告或患病证书" span="3">
  71. <el-image v-if="imgs!=null&&imgs!=''" v-for="img in imgs" :key="img.id"
  72. style="width: 100px"
  73. :src="img"
  74. :preview-src-list="[img]">
  75. </el-image>
  76. </el-descriptions-item>
  77. </el-descriptions>
  78. </div>
  79. <div class="contentx" v-if="conditioningPlanJson!=null">
  80. <div class="desct"> 调理方案</div>
  81. <el-descriptions title="" :column="1" border >
  82. <el-descriptions-item :label="form.name=='用药调治'?'健康建议':form.name" v-for=" form in conditioningPlanJson" ><div style="white-space: pre-wrap;">{{form.value}}</div></el-descriptions-item>
  83. </el-descriptions>
  84. </div>
  85. </div>
  86. </template>
  87. <script>
  88. import { listBySearch,listInquiryOrderReport, getInquiryOrderReport, delInquiryOrderReport, addInquiryOrderReport, updateInquiryOrderReport, exportInquiryOrderReport ,getPatientMobile} from "@/api/store/inquiryOrderReport";
  89. export default {
  90. name: "inquiryOrderReport",
  91. props:["data"],
  92. data() {
  93. return {
  94. patientInfo: process.env.VUE_APP_PATIENT_INFO,
  95. diseaseParams:{
  96. diseaseId:null,
  97. diseaseName:null
  98. },
  99. item:null,
  100. bmi:null,
  101. statusOptions:[],
  102. inquirySubTypeOptions:[],
  103. formJson:null,
  104. conditioningPlanJson:null,
  105. // patientJson:{},
  106. imgs:[],
  107. patientMobile:null,
  108. faceImages:[],
  109. tongueImages:[],
  110. diseaseTypeOptions:[],
  111. fat:null,
  112. }
  113. },
  114. created() {
  115. // this.getDicts("sys_inquiry_order_report_disease_type").then(response => {
  116. // this.diseaseTypeOptions = response.data;
  117. // });
  118. this.getDicts("sys_inquiry_order_report_status").then(response => {
  119. this.statusOptions = response.data;
  120. });
  121. this.getDicts("sys_inquiry_sub_type").then(response => {
  122. this.inquirySubTypeOptions = response.data;
  123. });
  124. },
  125. methods: {
  126. handlePhone(){
  127. const reportId = this.item.reportId;
  128. getPatientMobile(reportId).then(response =>{
  129. this.patientMobile = response.mobile;
  130. })
  131. },
  132. getDetails(orderId) {
  133. this.imgs=null;
  134. this.tongueImages=null;
  135. this.faceImages=null;
  136. this.conditioningPlanJson=null;
  137. this.item=null;
  138. this.diseaseTypeOptions=[];
  139. getInquiryOrderReport(orderId).then(response => {
  140. this.item = response.data;
  141. if(response.data.conditioningPlanJson!=null){
  142. this.conditioningPlanJson=JSON.parse(response.data.conditioningPlanJson)
  143. };
  144. if(response.data.diseaseType!=null){
  145. this.item.diseaseType = response.data.diseaseType.split(",")
  146. this.item.diseaseType.forEach(disease => {
  147. this.diseaseParams.diseaseId = disease; // 使用 disease 作为 query 参数
  148. listBySearch(this.diseaseParams).then(response => {
  149. this.diseaseTypeOptions.push(...response.rows); // 将 response.rows 展开并推入 diseaseTypeOptions
  150. });
  151. });
  152. }
  153. if(response.data.patientJson!=null){
  154. var json=JSON.parse(this.item.patientJson);
  155. if(json!=null&&json!=""){
  156. if(json.reportImages!=null&&json.reportImages!=""){
  157. this.imgs= (json.reportImages).split(",");
  158. }
  159. if(json.tongueImages!=null&&json.tongueImages!=""){
  160. this.tongueImages=json.tongueImages.split(",")
  161. }
  162. if(json.faceImages!=null&&json.faceImages!=""){
  163. this.faceImages=json.faceImages.split(",")
  164. }
  165. if(json.mobile!=null&&json.mobile!=""){
  166. this.patientMobile=json.mobile;
  167. }
  168. }
  169. var weight = JSON.parse(this.item.patientJson).weight;
  170. var height = JSON.parse(this.item.patientJson).height;
  171. // 计算BMI值
  172. this.bmi = Math.round(weight / Math.pow(height / 100, 2));
  173. // 判断体重状态
  174. if (this.bmi < 18.5) {
  175. this.fat="偏瘦";
  176. } else if (this.bmi < 24) {
  177. this.fat="正常";
  178. } else if (this.bmi < 28) {
  179. this.fat="超重";
  180. } else {
  181. this.fat="肥胖";
  182. }
  183. };
  184. });
  185. },
  186. }
  187. }
  188. </script>
  189. <style>
  190. .contentx{
  191. height: 100%;
  192. background-color: #fff;
  193. padding: 0px 20px 20px;
  194. margin: 20px;
  195. }
  196. .el-descriptions-item__label.is-bordered-label{
  197. font-weight: normal;
  198. }
  199. .el-descriptions-item__content {
  200. max-width: 500px;
  201. min-width: 100px;
  202. }
  203. .desct{
  204. padding-top: 20px;
  205. padding-bottom: 20px;
  206. color: #524b4a;
  207. font-weight: bold;
  208. }
  209. </style>