new_recover.html 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>新建计划</title>
  6. <link rel="stylesheet" type="text/css" href="../../../css/bootstrap.min.css" />
  7. <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
  8. <link rel="stylesheet" type="text/css" href="../../../css/cross.ui.css" />
  9. <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
  10. <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
  11. <link rel="stylesheet" type="text/css" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css" />
  12. <link rel="stylesheet" type="text/css" href="../css/new_recover.css" />
  13. <script src="../../../js/esModule.js" type="text/javascript"></script>
  14. </head>
  15. <body class="m0">
  16. <div id="app" v-cloak>
  17. <div class="c-position-a" style="top: -999px; left: -999px;" v-show="isTest"></div>
  18. <div class="c-h100 clearfix">
  19. <div class="fl c-h100 w400 person_info c-border-r" style="overflow: hidden;">
  20. <div v-if="!patiInfo" class="c-h100" style="overflow: auto;">
  21. <div class="c-border-b c-t-center pt20">
  22. <div class="set-photo imgw80">
  23. <img src="../../../images/p-female.png" alt="居民头像" />
  24. </div>
  25. <p class="ptb10">患者名</p>
  26. </div>
  27. <div>
  28. <div class="no-result c-t-center pt20">
  29. <img src="../images/wushuju01_img.png" alt="无数据" />
  30. <p class="c-999">暂无相关信息</p>
  31. <div class="pt30">
  32. <span class="c-fff btn cur-pit plr10 ptb5 bgc-12b7f5 b-r-3" @click="selectPatient()">同步信息</span>
  33. </div>
  34. </div>
  35. </div>
  36. </div>
  37. <div v-else class="c-h100 plr10" style="overflow: auto;">
  38. <div class="c-t-center pt20 c-position-r">
  39. <div class="set-photo imgw80">
  40. <img :src="setPatImg(patiInfo.photo)" alt="居民头像" />
  41. </div>
  42. <h3 class="ptb10 m0 c-f16">{{patiInfo.name}}</h3>
  43. <span class="c-position-a set-qiehuan cur-pit" @click="selectPatient()"></span>
  44. </div>
  45. <h4 class="h30 m0 c-f14 c-border-b f-w500">基本信息</h4>
  46. <ul class="c-333 m0 p0 pb20">
  47. <li class="pt10"><span class="c-999">性&emsp;&emsp;别:</span>{{patiInfo.sex == 1 ? "男" : "女"}}</li>
  48. <li class="pt10"><span class="c-999">年&emsp;&emsp;龄:</span>{{patiInfo.age}}岁</li>
  49. <li class="pt10"><span class="c-999">身份证号:</span>{{patiInfo.idcard}}</li>
  50. <li class="pt10"><span class="c-999">地&emsp;&emsp;址:</span>{{patiInfo.address}}</li>
  51. </ul>
  52. <h4 class="h30 m0 c-f14 c-border-b f-w500">家庭医生</h4>
  53. <ul class="c-333 m0 p0 pb20">
  54. <li class="pt10"><span class="c-999">签约社区:</span>{{patiInfo.ssHospitalName || patiInfo.jtHospitalName}}</li>
  55. <li class="pt10"><span class="c-999">全科医生:</span>{{patiInfo.ssDoctorName || patiInfo.jtDoctorName}}</li>
  56. <li class="pt10"><span class="c-999">健&ensp;管&ensp;师:</span>{{patiInfo.ssDoctorHealthName || patiInfo.jtDoctorHealthName}}</li>
  57. </ul>
  58. <!-- <h4 class="h30 m0 c-f14 c-border-b">诊疗信息</h4> -->
  59. <!-- <ul class="c-333 m0 p0 pb20" >
  60. <div class="input-group mtb10" >
  61. <label style="transform: translateY(50%); color: #999999;font-weight: normal;">就诊事件:</label>
  62. <div class="input-group-btn" style="width: 80%; transform: translateY(50%);top: -5px;">
  63. <button style="width:223px;padding: 0; text-overflow: ellipsis; overflow: hidden;" v-bind:disabled="edit" type="button" class="btn btn-white dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  64. {{diagnosisInfo[indexOrder].orgName}}
  65. <span class="caret" style="position: absolute; top: 50%; right: 20px; margin-top: -2px;"></span>
  66. </button>
  67. <ul class="dropdown-menu" style="min-width: 206px;" >
  68. <li class="c-f14 c-border-b" style="text-align: center; padding: 2px;cursor:pointer;" v-for="(v, i) in diagnosisInfo" @click="orderHospital(i)" v-html="v.orgName"></li>
  69. </ul>
  70. </div>
  71. </div>
  72. <li class="pt10" style="display: flex;" id="department">
  73. <label class="c-999" style="font-weight: normal;">入院科室:</label>
  74. <input class="form-control" v-bind:disabled="edit" v-bind:value="nodata == true? '请输入': subsidiaryInfo.data.department" style=" text-align: center; height: 22px; border-radius: 3px; width: 80%;">
  75. </li>
  76. <li class="pt10" style="display: flex;" id="attendingDoctor">
  77. <label class="c-999" style="font-weight: normal;">主治医师:</label>
  78. <input class="form-control" v-bind:disabled="edit" v-bind:value="nodata == true? '请输入': subsidiaryInfo.data.attendingDoctor" style="text-align: center; height: 22px; border-radius: 3px; width: 80%;">
  79. </li>
  80. <li class="pt10" style="display: flex;" id="admissionDiagnosis">
  81. <label class="c-999" style="font-weight: normal;">入院诊断:</label>
  82. <input class="form-control" v-bind:disabled="edit" v-bind:value="nodata == true? '请输入': subsidiaryInfo.data.admissionDiagnosis" style="text-align: center; height: 22px; border-radius: 3px; width: 80%;">
  83. </li>
  84. <li class="pt10" style="display: flex;" id="dischargeDiagnosis">
  85. <label class="c-999" style="font-weight: normal;">出院诊断:</label>
  86. <input class="form-control" v-bind:disabled="edit" v-bind:value="nodata == true? '请输入': subsidiaryInfo.data.dischargeDiagnosis" style="text-align: center; height: 22px; border-radius: 3px; width: 80%;">
  87. </li>
  88. </ul> -->
  89. <!-- <h4 class="h30 m0 c-f14 c-border-b c-999">医嘱小结</h4> -->
  90. <!-- <textarea v-bind:disabled="edit" class="tipText m0 pt10 c-333 mt10" style="height: 200px; width: 100%; border:1px solid #e1e1e1; resize:none;text-indent:28px" v-html="subsidiaryInfo.data.dischargeOrder"></textarea> -->
  91. <!-- <button type="button" class="btn btn-default fr" style="width: 60px; background: #12B7F5; border-radius: 0px ;border: 0px ;" @click="editdiagnosis()" v-html="edit == true? '编辑':'保存'"></button> -->
  92. <h4 class="h30 m0 c-f14 c-border-b f-w500" style="overflow: hidden;">
  93. 康复建议
  94. <span class="click-text" @click="editAdviceTextarea">
  95. {{isEdit == true? '编辑':'保存'}}
  96. </span>
  97. </h4>
  98. <textarea v-bind:disabled="isEdit" v-model="adviceContent" class="m0 p10 c-333 mt10" :class="{'bg-f5f5fa':isEdit, 'bd-red':showAdviceContentTip}" style="width: 100%;height: 200px; width: 100%; border:1px solid #e1e1e1; resize:none;" placeholder="请输入您的康复建议..."></textarea>
  99. <h4 class="h30 m0 c-f14 c-border-b f-w500" style="overflow: hidden;">
  100. 住院病历
  101. </h4>
  102. <div v-if="medicalRecordsList.length>0" v-for="(o, i) in medicalRecordsList" class="mt10">
  103. <div class="flex vc c-f14 c-border plr10 ptb5 link-control" style="cursor: pointer;" @click="editMedicalRecords(o, i)" :class="{'bd-12b7f5': curMedicalRecordsIndex==i}">
  104. <span class="c-666 mr15">
  105. {{formatter(o.admissionTime)}}
  106. </span>
  107. <div class="flex1 c-12b7f5 ellipsis-1">
  108. {{o.hospitalName}}
  109. </div>
  110. </div>
  111. </div>
  112. <button type="button" class="btn btn-default fr" style="width: 100%; background: #12B7F5; border-radius: 0px ;border: 0px ;padding: 10px;margin-top: 15px;" @click="addMedicalRecords()">添加住院病历</button>
  113. </div>
  114. </div>
  115. <div class="fl c-h100 w-100-400">
  116. <div class="c-h100 plr5" v-if="!isPlan">
  117. <h4 class="m0 pl15 lh40 c-border-b f-w500 c-position-r"><span class="c-position-a set-blue-span"></span>配置康复计划</h4>
  118. <div style="overflow: hidden; height: calc(100% - 41px);">
  119. <div style="overflow: auto; height: 100%;">
  120. <div class="un-select c-t-center pt45" v-if="!patiInfo">
  121. <img src="../images/wushuju_img.png" alt="" />
  122. <p class="c-999">您还没有选择居民</p>
  123. </div>
  124. <ul class="muban_con lh40 c-t-center pt30" v-else>
  125. <li class="mb20" v-for="(muban, index) in mubanList" :key="index" @click="addMuban(muban.id)">{{muban.title}}</li>
  126. <li class="addmuban-btn c-fff" @click="addMuban()">新增模板</li>
  127. </ul>
  128. </div>
  129. </div>
  130. </div>
  131. <div class="clearfix c-h100" v-else>
  132. <div class="fl w-100-400 c-h100">
  133. <div class="plr5 c-h100-79">
  134. <h4 class="m0 pl15 lh40 c-border-b set-label f-w500 c-position-r">
  135. <em class="c-position-a set-blue-span"></em>
  136. 配置康复计划
  137. <!-- <span v-for="(label, index) in spanLabel" :key="index" class="fr ml20 pl20 c-f14 c-999 cur-pit" :class="{'active': index == labelIndex}" @click="setLabelIndex(index, label)">{{label.labelName}}</span> -->
  138. </h4>
  139. <div class="c-h100-41" style="overflow: hidden;">
  140. <ul class="c-h100 p0 m0" style="overflow: auto;">
  141. <li class="mt10 plr10 ptb5 c-border b-r-3 clearfix" v-for="(detail, index) in templateDetail" :key="index">
  142. <div v-if="detail.name=='康复咨询'||detail.name=='远程健康监测'">
  143. <div class="fl w-100-78 c-333">
  144. <p :class='detail.isTimeSame ? "m0 p0 mb10 txt-ells cur-pit c-red" : "m0 p0 mb10 txt-ells cur-pit"' @click="lookProject(detail)">{{detail.name}}</p>
  145. <div class="clearfix">
  146. <p class="w400 m0 mb10 p0 fl"><span class="c-999">医&emsp;&emsp;院:</span>{{docInfo.hospitalName}}</p>
  147. <p class="m0 p0 mb10 fl"><span class="c-999">费&emsp;&emsp;用:</span>0.00</p>
  148. </div>
  149. <div class="m0 p0 clearfix">
  150. <div class="w400 m0 mb10 p0 fl clearfix">
  151. <span class="fl c-999">选择频次:</span>
  152. <div class="fl c-position-r w100">
  153. 不限频次
  154. </div>
  155. </div>
  156. </div>
  157. <div class="clearfix">
  158. <span class="fl c-999">备&emsp;&emsp;注:</span>
  159. <div class="fl maxw600 plr15 ptb10 c-border set-textarea">
  160. <textarea placeholder="不补充说明特殊用法、方式" v-model="detail.remark" name="" rows="" cols=""></textarea>
  161. </div>
  162. </div>
  163. </div>
  164. <div class='fr w60 c-t-right clearfix'>
  165. <div class="clearfix mb10"><span class="fr sub-tap cur-pit" @click="subTemplate(index, detail)"></span></div>
  166. </div>
  167. </div>
  168. <div v-else>
  169. <div class="fl w-100-78 c-333">
  170. <p :class='detail.isTimeSame ? "m0 p0 mb10 txt-ells cur-pit c-red" : "m0 p0 mb10 txt-ells cur-pit"' @click="lookProject(detail)">{{detail.name}}</p>
  171. <div class="clearfix">
  172. <p class="w400 m0 mb10 p0 fl"><span class="c-999">医&emsp;&emsp;院:</span>{{detail.executeHospitalName}}</p>
  173. <p class="m0 p0 mb10 fl"><span class="c-999">费&emsp;&emsp;用:</span>0.00</p>
  174. </div>
  175. <div class="m0 p0 clearfix">
  176. <div class="w400 m0 mb10 p0 fl clearfix">
  177. <span class="fl c-999">选择频次:</span>
  178. <div class="fl c-position-r w100">
  179. <p class="m0 p0 plr10 c-border cur-pit set-xia" :class="{'set-shang':detail.selectFre}" @click="changeSelectFre(index, detail.selectFre)">{{detail.frequencyCode}}</p>
  180. <ul class="m0 p0 c-border-b c-border-l c-border-r c-position-a doc_list" v-if="detail.selectFre" style="overflow-y: auto; height: 100px;">
  181. <li class="plr10 c-border-t cur-pit" v-for="(list, indDoc) in detail.frequencyList" :key="indDoc" @click="selectFre(index, list)">{{list.code}}</li>
  182. </ul>
  183. </div>
  184. </div>
  185. <div class="m0 mb10 p0 fl clearfix">
  186. <span class="fl c-999">执行人员:</span>
  187. <div class="fl c-position-r w100">
  188. <p class="m0 p0 plr10 c-border cur-pit set-xia" :class="{'set-shang':detail.selectDoc}" @click="changeSelectDoc(index, detail.selectDoc)">{{detail.executeDoctorName}}</p>
  189. <ul class="m0 p0 c-border-b c-border-l c-border-r c-position-a doc_list" v-if="detail.selectDoc" style="overflow-y: auto; max-height: 100px;">
  190. <li class="plr10 c-border-t cur-pit" v-for="(list, indDoc) in detail.docList" :key="indDoc" @click="selectLi(index, list)">{{list.name}}</li>
  191. </ul>
  192. </div>
  193. </div>
  194. </div>
  195. <div class="pl65 mb10 set-label" v-if="detail.frequency.unit == 'H'">
  196. <span :class="detail.timeType == 1 ? 'pl20 mr5 cur-pit active' : 'pl20 mr5 cur-pit'" @click="selectTimeType(index, 1)">白天</span>
  197. <span :class="detail.timeType == 2 ? 'pl20 mr5 cur-pit active' : 'pl20 mr5 cur-pit'" @click="selectTimeType(index, 2)">晚上</span>
  198. <span :class="detail.timeType == 0 ? 'pl20 cur-pit active' : 'pl20 cur-pit'" @click="selectTimeType(index, 0)">全天</span>
  199. </div>
  200. <div>
  201. <div class="clearfix">
  202. <span class="fl c-999 lh24">起始时间:</span>
  203. <div class="fl maxw600 mb10">
  204. <el-date-picker v-model="detail.value14[0]" type="date" placeholder="开始日期" value-format="yyyy-MM-dd" :picker-options="pickerOptions1" @input="getRandgeDate(index, 0)">
  205. </el-date-picker>
  206. <span>—</span>
  207. <el-date-picker v-model="detail.value14[1]" type="date" placeholder="结束日期" value-format="yyyy-MM-dd" :picker-options="pickerOptions1" @input="getRandgeDate(index, 1)">
  208. </el-date-picker>
  209. </div>
  210. </el-date-picker>
  211. <span class="fl lh24 mlr10 c-999">或</span>
  212. <div class="fl maxw600 mb10">
  213. <el-date-picker type="dates" :picker-options="pickerOptions1" v-model="detail.value15" value-format="yyyy-MM-dd" @input="getSelectDate(index)" placeholder="选择一个或者多个日期"></el-date-picker>
  214. </div>
  215. </div>
  216. </div>
  217. <div class="clearfix">
  218. <span class="fl c-999">备&emsp;&emsp;注:</span>
  219. <div class="fl maxw600 plr15 ptb10 c-border set-textarea">
  220. <textarea placeholder="不补充说明特殊用法、方式" v-model="detail.remark" name="" rows="" cols=""></textarea>
  221. </div>
  222. </div>
  223. </div>
  224. <div class='fr w60 c-t-right clearfix'>
  225. <p class="m0 p0 mb10">×{{mul(detail.executeTime.length, detail.frequency.count)}}</p>
  226. <div class="clearfix mb10"><span class="fr sub-tap cur-pit" @click="subTemplate(index, detail)"></span></div>
  227. <div class="clearfix"><span class="fr fuzhi-tap cur-pit" @click="copyTemplate(index, detail)"></span></div>
  228. </div>
  229. </div>
  230. </li>
  231. <li class="pt100 c-t-center" v-if="!templateDetail.length">
  232. <span class="set-right-arraw pr20">请在右侧“服务项”列表中选择</span>
  233. </li>
  234. </ul>
  235. </div>
  236. </div>
  237. <div>
  238. <p class="m0 p0 pl20 ptb10 c-border-b set-label">支付方式:<span class="ml10 pl20 active">按服务支付</span><em class="c-red ml20">(按选择支付方式完成收费)</em></p>
  239. <div class="pl20 lh40">总费用:
  240. <span class="c-red c-f16">¥{{allFee}}</span>
  241. <span class="fr lh30 cur-pit plr15 c-t-center c-fff" :class="havePlan ? 'bgc-12b7f5' : 'bgc-d7dce6'" @click="createRehabilitationPlan()">生成计划</span>
  242. <span class="fr lh30 cur-pit plr15 c-t-center bgc-green c-fff" @click="canclePlan()">取消</span>
  243. </div>
  244. </div>
  245. </div>
  246. <div class="fr w400 c-h100 c-border-l">
  247. <div class="plr5 c-h100">
  248. <h4 class="m0 pl15 lh40 c-border-b c-position-r f-w500">
  249. <em class="c-position-a set-blue-span"></em>添加其他项目
  250. </h4>
  251. <div class="clearfix mtb10 c-border">
  252. <input class="fl search-input plr10" type="text" v-model="searchKey" placeholder="输入项目名称" />
  253. <span class="fr search-btn" @click="searchProject()"></span>
  254. </div>
  255. <div class="c-h100-99" style="overflow: hidden;">
  256. <div class="c-h100 p0 m0" style="overflow: auto;">
  257. <ul class="p0 m0 pr10">
  258. <li v-for="(o, i) in serviceItems" :key="i" class="clearfix ptb5">
  259. <!-- @click="selectProject(i, o)" -->
  260. <div class="fl c-border w-100-66 cur-pit border-c12b7f5 ptb5 plr5 b-r-3 clearfix" :class="o.isSelect ? 'bgc-12b7f5' : 'bgc-fff'">
  261. <p class="fl w-100-78 txt-ells lh18" :class="o.isSelect ? 'c-fff' : 'c-666'">{{o.name}}</p>
  262. </div>
  263. <span class="fr h30 btn cur-pit plr10 bgc-12b7f5 c-fff b-r-3" style="padding: 0 10px;" v-if="!o.isSelect" @click="addProject(i, o)">添加</span>
  264. <span class="fr h30 btn plr10 bgc-e1e1e1 c-fff b-r-3" style="padding: 0 10px;" v-else>添加</span>
  265. </li>
  266. </ul>
  267. </div>
  268. </div>
  269. <!-- <div class="c-h100-99" style="overflow: hidden;">
  270. <ul class="c-h100 p0 m0" style="overflow: auto;">
  271. <li v-for="(project1, index) in projectList" :key="index">
  272. <h4 class="set-arrow c-f14 h30 p0 m0 pl20 f-w500 cur-pit" :class="{'active': index == proIndex1}" @click="selectPro(1, index)">{{project1.itemType == 1 ? '诊疗服务' : '健康服务'}}</h4>
  273. <ul class="c-h100 p0 m0 pl10" v-if="index == proIndex1">
  274. <li v-for="(project2, index2) in project1.item" :key="index2">
  275. <p class="set-arrow h30 c-f14 pl20 m0 c-333 cur-pit" :class="{'active': index2 == proIndex2}" @click="selectPro(2, index2)">{{project2.itemName}}</p>
  276. <ul class="p0 m0 pr10" v-if="index2 == proIndex2">
  277. <li v-for="(project3, index3) in project2.hospitalServiceItems" :key="index3" class="clearfix ptb5">
  278. <div class="fl c-border w-100-66 cur-pit border-c12b7f5 ptb5 plr5 b-r-3 clearfix" :class="project3.isSelect ? 'bgc-12b7f5' : 'bgc-fff'" @click="selectProject(index, index2, index3, project3)">
  279. <p class="fl w-100-78 txt-ells lh18" :class="project3.isSelect ? 'c-fff' : 'c-666'">{{project3.specialistServiceItemDO.title}}</p>
  280. <span class="fr lh18 b-r-3 c-f12 ml5 bgc-4dcd70 plr5 c-fff" v-if="project3.flag == 1 || project3.flag == 3">社区</span>
  281. <span class="fr lh18 b-r-3 c-f12 ml5 bgc-55cefc plr5 c-fff" v-if="project3.flag == 2 || project3.flag == 3">医院</span>
  282. </div>
  283. <span class="fr h30 btn cur-pit plr10 bgc-12b7f5 c-fff b-r-3" style="padding: 0 10px;" v-if="!project3.isSelect" @click="addProject(index, index2, index3, project3)">添加</span>
  284. <span class="fr h30 btn plr10 bgc-e1e1e1 c-fff b-r-3" style="padding: 0 10px;" v-else>添加</span>
  285. </li>
  286. </ul>
  287. </li>
  288. </ul>
  289. </li>
  290. </ul>
  291. </div> -->
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. </div>
  297. </div>
  298. <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
  299. <script src="../../../js/jquery-2.2.4.js"></script>
  300. <script src="../../../plugins/layer/layer.min.js"></script>
  301. <script src="../../../plugins/toastr/toastr.min.js"></script>
  302. <script src="../../../js/bootstrap.min.js"></script>
  303. <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
  304. <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
  305. <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
  306. <script src="https://unpkg.com/element-ui/lib/index.js" type="text/javascript" charset="utf-8"></script>
  307. <script src="../../../api/http-request.js" type="text/javascript"></script>
  308. <script src="../../../api/recover_api.js" type="text/javascript"></script>
  309. <script type="text/javascript" src="../../../api/rehabilitation-api.js"></script>
  310. <script type="text/javascript">
  311. var doctorType = (JSON.parse(window.localStorage.getItem('wlyyAgent'))||{}).doctorType,
  312. docInfo = JSON.parse(window.localStorage.getItem('docInfo'))
  313. console.log('docInfodocInfodocInfodocInfo', docInfo)
  314. var httpData=GetRequest()
  315. function showSuccessMessage(msg) {
  316. layer.msg(msg, {
  317. icon: 1
  318. })
  319. }
  320. function showErrorMessage(msg) {
  321. layer.msg(msg, {
  322. icon: 5
  323. })
  324. }
  325. function showWarningMessage(msg) {
  326. layer.msg(msg, {
  327. icon: 2
  328. })
  329. }
  330. function showInfoMessage(msg) {
  331. layer.msg(msg, {
  332. icon: 6
  333. })
  334. }
  335. top.recoverVue = new Vue({
  336. el: "#app",
  337. data: {
  338. pickerOptions1: {
  339. disabledDate: function(time) {
  340. return time.getTime() < Date.now() - 8.64e7;
  341. }
  342. },
  343. surefont: '添加',
  344. isTest: false,
  345. pati: null,
  346. teamCode: null,
  347. isPlan: false,
  348. proIndex1: null,
  349. proIndex2: null,
  350. patiInfo: null,
  351. diseaseObj: null, // 疾病
  352. mubanList: [],
  353. templateDetail: [],
  354. templateResult: [],
  355. allFee: 0,
  356. projectList: null,
  357. serviceItems: null, // 服务项列表
  358. labelIndex: 2,
  359. labelCode: 1,
  360. spanLabel: [{
  361. labelName: "(转)家庭病床",
  362. code: 3
  363. }, {
  364. labelName: "(转)社区医院",
  365. code: 2
  366. }, {
  367. labelName: "康复计划",
  368. code: 1
  369. }],
  370. jDlist: [], //家签医生
  371. zDlist: [], //专科医生
  372. selectProjectDetail: null,
  373. searchKey: null,
  374. havePlan: false,
  375. frequencyList: [],
  376. diagnosisInfo:"",
  377. indexOrder:0,
  378. profileRes:[],
  379. nodata:false,
  380. subsidiaryInfo:{},
  381. edit:true,
  382. selectDiseaseIndex:'',
  383. isPlanId :'',
  384. selectPatientIndex: '',
  385. adviceContent: '', //康复建议
  386. isEdit: false,
  387. medicalRecordsList: [],
  388. docInfo: JSON.parse(window.localStorage.getItem('docInfo')),
  389. showAdviceContentTip: false,
  390. curMedicalRecordsIndex: -1
  391. },
  392. watch: {
  393. adviceContent: function(){
  394. var vm = this
  395. if(vm.adviceContent.trim().length>0){
  396. vm.showAdviceContentTip = false
  397. } else {
  398. vm.showAdviceContentTip = true
  399. }
  400. },
  401. templateDetail: function(){
  402. if(this.templateDetail.length==0){
  403. this.havePlan = false
  404. }
  405. }
  406. },
  407. mounted: function() {
  408. this.selectFrequencys()
  409. if(httpData.patient) {
  410. this.isPlan = false
  411. this.allFee = 0
  412. this.templateDetail = []
  413. this.pati = {patient: httpData.patient}
  414. this.getPatientInfo()
  415. // this.diagnosisQuery()
  416. }
  417. if(httpData.teamCode){
  418. this.teamCode = httpData.teamCode
  419. this.findTemplateList()
  420. } else {
  421. this.teamCode = docInfo.teamCode
  422. }
  423. },
  424. methods: {
  425. // 添加住院病历
  426. addMedicalRecords: function(){
  427. var vm = this
  428. this.selectPatientIndex = layer.open({
  429. type: 2,
  430. area: ['480px', '520px'],
  431. shade: 0.5,
  432. title: '添加住院病历',
  433. closeBtn: 1,
  434. shift: 5,
  435. shadeClose: false, //点击遮罩关闭层
  436. content: "medical-records.html?patient="+vm.pati.patient+'&patientName='+vm.pati.patientName
  437. });
  438. },
  439. // 编辑住院病历
  440. editMedicalRecords: function(o, i){
  441. var vm = this
  442. vm.curMedicalRecordsIndex = i
  443. window.localStorage.setItem('curMedicalRecords', JSON.stringify(o))
  444. this.selectPatientIndex = layer.open({
  445. type: 2,
  446. area: ['480px', '520px'],
  447. shade: 0.5,
  448. title: '添加住院病历',
  449. closeBtn: 1,
  450. shift: 5,
  451. shadeClose: false, //点击遮罩关闭层
  452. content: "medical-records.html?patient="+vm.pati.patient+'&patientName='+vm.pati.patientName+'&medicalRecordsId='+o.id
  453. });
  454. },
  455. //关闭添加住院病历弹框
  456. closeMedicalRecords: function(){
  457. layer.close(this.selectPatientIndex)
  458. },
  459. completeMedicalRecords: function(type, data){
  460. if(type=='edit'){
  461. this.$set(this.medicalRecordsList, this.curMedicalRecordsIndex, data)
  462. } else {
  463. this.medicalRecordsList.unshift(data)
  464. }
  465. layer.close(this.selectPatientIndex)
  466. },
  467. //获取诊疗信息
  468. diagnosisQuery:function(){
  469. var vm = this;
  470. loadding = layer.load(0, {shade: false});
  471. params = {
  472. patient: this.pati.patient,
  473. // patient:"3b26a7905e034c36a5ba8e65bdc0dc7f",
  474. type: '2',
  475. page: 1,
  476. pageSize: 50,
  477. lastTime: ''
  478. }
  479. recoverAPI.diagnosisQuery(params).then(function(res){
  480. layer.close(loadding)
  481. if (res.status == 200) {
  482. if(res.data.length == 0){
  483. vm.diagnosisInfo = [{orgName:'无'}]
  484. console.log(vm.diagnosisInfo)
  485. vm.nodata = true
  486. }else{
  487. vm.diagnosisInfo = res.data;
  488. }
  489. vm.orderHospital(0)
  490. }else{
  491. vm.diagnosisInfo = [{orgName:'无'}]
  492. vm.orderHospital(0)
  493. showErrorMessage(res.msg);
  494. }
  495. })
  496. },
  497. //按照医院查询诊疗信息
  498. orderHospital:function(index){
  499. var vm = this;
  500. vm.indexOrder = index
  501. loadding = layer.load(0, {shade: false});
  502. var sec_params = {
  503. patient: vm.pati.patient,
  504. event:vm.diagnosisInfo[index].id || "",
  505. // patient:"3b26a7905e034c36a5ba8e65bdc0dc7f",
  506. // event:"26eec2df-caa9-4b7e-9993-0ad7ae8d0a15",
  507. catalog:'0213',
  508. serial:"1"
  509. }
  510. recoverAPI.diagnosisSubsidiary(sec_params).then(function(res){
  511. layer.close(loadding)
  512. vm.subsidiaryInfo = vm.selectXmlDom(res,'0213')
  513. console.log(vm.subsidiaryInfo)
  514. })
  515. },
  516. //获取xml数据
  517. selectXmlDom: function (profileRes,tempalteCode) {
  518. var vm = this;
  519. if(profileRes.status == 200){
  520. var $dom = $(profileRes.data.replace(/<\?xml .*\?>/,'')),
  521. version = $dom.find(">version").length?$dom.find(">version").attr("code"):$dom.attr('version');
  522. $.trim(version) || (function () {
  523. version = $dom.find(">ClinicalDocument").length? '2.0.0.1' : '';
  524. })();
  525. if($.trim(version)) {
  526. var verNum = version.split('.')[0];
  527. var jsonData = {}
  528. // xml 转 json
  529. if((typeof profileRes.data=='string')&&profileRes.data.constructor==String) {
  530. // 去除携带的脚本内容
  531. profileRes.data = profileRes.data.replace(/<script[^>]*?>[\s\S]*?<\/script>/ig,'');
  532. // console.log(profileRes.data.replace(/<\?xml .*\?>/,''))
  533. jsonData = vm.handleData(profileRes.data.replace(/<\?xml .*\?>/,''));
  534. }
  535. }
  536. }else{
  537. showErrorMessage(profileRes.msg)
  538. jsonData = {data:{}}
  539. }
  540. return jsonData;
  541. },
  542. handleData :function (xmlStr) {
  543. var $xmlDom = $(xmlStr),
  544. $nodes = {
  545. } ;
  546. var resultData = [];
  547. return {
  548. data:{
  549. "department": $xmlDom.find('component section entry inDept').text(),//科室
  550. "dednumber": $xmlDom.find('component section entry bed').text(),//床号
  551. "HospitalizationNumber": "",//住院号
  552. "name": $xmlDom.find('recordTarget patient name').text(),//姓名
  553. "sex": $xmlDom.find('recordTarget patient sex').text(),//性别
  554. "nation": $xmlDom.find('recordTarget nation').text(),//民族
  555. "marriage": $xmlDom.find('recordTarget marriage').text(),//婚姻
  556. "admissionTime": $xmlDom.find('component section entry inTime').attr('value'),//入院时间
  557. "dischargeTime": $xmlDom.find('component section entry outTime').attr('value'),//出院时间
  558. "lengthStay": $xmlDom.find('component section entry inHospitalDay').text(),//住院天数
  559. "admissionStatus": $xmlDom.find('component section entry inCondition').text(),//入院情况
  560. "admissionDiagnosis": $xmlDom.find('component section entry inDiagnosis').text(),//入院诊断
  561. "dischargeDiagnosis": $xmlDom.find('component section entry outDiagnosis').text(),//出院诊断
  562. "DiagnosisProcess": $xmlDom.find('component section entry remedialCourse').text(),//诊疗经过
  563. "dischargeStatus": $xmlDom.find('component section entry outCondition').text(),//出院情况
  564. "dischargeOrder": $xmlDom.find('component section entry outOrder').text(),//出院医嘱
  565. "treatmentOutcome": $xmlDom.find('component section entry remedialResult').text(),//治疗结果
  566. "residentPhysician": $xmlDom.find('residentDoctor name').text(),//住院医师
  567. "attendingDoctor": $xmlDom.find('inChargeDoctor name').text(),//主治医师
  568. "time": $xmlDom.find('inChargeDoctor time').attr('value')//时间
  569. }
  570. }
  571. },
  572. //编辑诊疗
  573. editdiagnosis:function(){
  574. var vm = this;
  575. vm.edit = !vm.edit;
  576. vm.nodata = false
  577. vm.subsidiaryInfo.data.department = $('#department').find('input').val()
  578. vm.subsidiaryInfo.data.attendingDoctor = $('#attendingDoctor').find('input').val()
  579. vm.subsidiaryInfo.data.admissionDiagnosis = $('#department').find('input').val()
  580. vm.subsidiaryInfo.data.dischargeDiagnosis = $('#dischargeDiagnosis').find('input').val()
  581. },
  582. // 编辑康复建议
  583. editAdviceTextarea: function(){
  584. this.isEdit = !this.isEdit
  585. },
  586. // 获取频次列表
  587. selectFrequencys: function() {
  588. var vm = this,
  589. loadding = layer.load(0, {shade: false});
  590. recoverAPI.selectFrequencys().then(function(res) {
  591. layer.close(loadding)
  592. if(res.status == 200) {
  593. vm.frequencyList = res.data
  594. } else {
  595. showErrorMessage(res.msg);
  596. }
  597. })
  598. },
  599. // 获取居民信息
  600. getPatientInfo: function() {
  601. // this.findPatientSignSpecialistInfo()
  602. var vm = this,
  603. loadding = layer.load(0, {shade: false}),
  604. params = {
  605. patient: this.pati.patient
  606. }
  607. recoverAPI.getPatientInfo(params).then(function(res) {
  608. layer.close(loadding)
  609. if(res.status == 200) {
  610. vm.patiInfo = res.data
  611. vm.pati.patientName = res.data.name
  612. vm.jDlist.push({
  613. name: docInfo.name,
  614. code: docInfo.code,
  615. hospitalName: docInfo.hospitalName
  616. })
  617. vm.jDlist.push({
  618. name: vm.patiInfo.ssDoctorName || vm.patiInfo.jtDoctorName,
  619. code: vm.patiInfo.ssDoctor || vm.patiInfo.jtDoctor,
  620. hospitalName: vm.patiInfo.jtHospitalName
  621. })
  622. vm.jDlist.push({
  623. name: vm.patiInfo.ssDoctorHealthName || vm.patiInfo.jtDoctorHealthName,
  624. code: vm.patiInfo.ssDoctorHealth || vm.patiInfo.jtDoctorHealth,
  625. hospitalName: vm.patiInfo.jtHospitalName
  626. })
  627. } else {
  628. showErrorMessage(res.msg);
  629. }
  630. })
  631. },
  632. // 签约专科信息
  633. findPatientSignSpecialistInfo: function() {
  634. var vm = this,
  635. params = {
  636. patient: this.pati.patient,
  637. doctor: docInfo.code
  638. }
  639. recoverAPI.findPatientSignSpecialistInfo(params).then(function(res) {
  640. if(res.status == 200) {
  641. vm.pati.teamCode = res.data.teamCode
  642. // vm.jDlist.push({
  643. // name: res.data.doctorName,
  644. // code: res.data.doctor
  645. // })
  646. vm.teamCode = res.data.teamCode
  647. vm.specialistTeam(res.data.teamCode)
  648. } else {
  649. showErrorMessage(res.msg);
  650. }
  651. })
  652. },
  653. // 获取专科团队
  654. specialistTeam: function(teamCode) {
  655. var vm = this,
  656. params = {
  657. teamId: teamCode
  658. }
  659. recoverAPI.specialistTeam(params).then(function(res) {
  660. if(res.status == 200) {
  661. vm.zDlist = res.data.members
  662. } else {
  663. showErrorMessage(res.msg);
  664. }
  665. })
  666. },
  667. // 模板列表
  668. findTemplateList: function() {
  669. var vm = this,
  670. loadding = layer.load(0, {shade: false}),
  671. params = {
  672. patient: this.pati.patient,
  673. doctor: docInfo.code,
  674. adminTeamCode: vm.teamCode
  675. }
  676. recoverAPI.findTemplateList(params).then(function(res) {
  677. layer.close(loadding)
  678. if(res.status == 200) {
  679. vm.mubanList = res.data
  680. } else {
  681. showErrorMessage(res.msg);
  682. }
  683. })
  684. },
  685. // 模板详细
  686. findTemplateDetail: function(templateId) {
  687. var vm = this,
  688. loadding = layer.load(0, {shade: false}),
  689. params = {
  690. templateId: templateId
  691. }
  692. recoverAPI.findTemplateDetail(params).then(function(res) {
  693. layer.close(loadding)
  694. if(res.status == 200) {
  695. vm.templateDetail = []
  696. vm.templateResult = res.data
  697. vm.getServiceItemList().then(function(){
  698. $.each(vm.serviceItems, function(index,o) {
  699. $.each(vm.templateResult, function(index1, o1) {
  700. if(o1.code == o.code) {
  701. o.isSelect = true
  702. o1.isSelect = true
  703. o1.selectDoc = false
  704. o1.selectDate = 1
  705. o1.value14 = []
  706. o1.value15 = null
  707. o1.executeTime = []
  708. o1.selectDateRange = []
  709. // 默认频次
  710. o1.selectFre = false
  711. o1.frequencyCode = vm.frequencyList[0].code
  712. o1.frequency = vm.frequencyList[0]
  713. o1.frequencyList = vm.frequencyList
  714. o1.timeType = 0
  715. o1.remark = null
  716. o1.executeDoctor = vm.jDlist[0].code
  717. o1.executeDoctorName = vm.jDlist[0].name
  718. o1.executeHospitalName = vm.jDlist[0].hospitalName
  719. o1.docList = vm.jDlist
  720. vm.templateDetail.push(o1)
  721. }
  722. })
  723. return o
  724. })
  725. })
  726. // vm.findServiceItemsByHospital()
  727. } else {
  728. showErrorMessage(res.msg);
  729. }
  730. })
  731. },
  732. // 服务项目列表 2020-03-03 新增接口
  733. getServiceItemList: function(isSearch){
  734. var vm = this,
  735. loadding = layer.load(0, {shade: false}),
  736. params = {
  737. name: vm.searchKey
  738. }
  739. return rehaAPI.getServiceItemList(params).then(function(res) {
  740. layer.close(loadding)
  741. if(res.status == 200) {
  742. var serviceItems = res.data
  743. vm.serviceItems = $.each(serviceItems, function(index,o) {
  744. o.isSelect = false
  745. return o;
  746. })
  747. }else {
  748. showErrorMessage(res.msg);
  749. }
  750. })
  751. },
  752. // 服务项目列表
  753. // findServiceItemsByHospital: function() {
  754. // var vm = this,
  755. // loadding = layer.load(0, {shade: false}),
  756. // params = {
  757. // doctor: docInfo.code,
  758. // patient: this.pati.patient,
  759. // serviceItemName: this.searchKey
  760. // }
  761. // recoverAPI.findServiceItemsByHospital(params).then(function(res) {
  762. // layer.close(loadding)
  763. // if(res.status == 200) {
  764. // vm.projectList = $.each(res.data[0], function(index, o) {
  765. // $.each(vm.templateResult, function(index1, o1) {
  766. // if(o1.specialistServiceItemDO.itemType == o.itemType) {
  767. // $.each(o.item, function(index2, o2) {
  768. // if(o1.specialistServiceItemDO.diseaseItem == o2.itemName) {
  769. // $.each(o2.hospitalServiceItems, function(index3, o3) {
  770. // if(o3.serviceItemId == o1.serviceItemId) {
  771. // o3.isSelect = true
  772. // o3.selectDoc = false
  773. // o3.selectDate = 1
  774. // o3.value14 = []
  775. // o3.value15 = null
  776. // o3.specialistServiceItemDO.executeTime = []
  777. // o3.specialistServiceItemDO.selectDateRange = []
  778. // // 默认频次
  779. // o3.selectFre = false
  780. // o3.frequencyCode = vm.frequencyList[0].code
  781. // o3.frequency = vm.frequencyList[0]
  782. // o3.frequencyList = vm.frequencyList
  783. // o3.timeType = 0
  784. // o3.remark = null
  785. // // 标识 (1 社区 2 医院 3 社区、医院)
  786. // if(o3.flag == 2) {
  787. // o3.executeDoctor = vm.zDlist[0].code
  788. // o3.executeDoctorName = vm.zDlist[0].name
  789. // o3.docList = vm.zDlist
  790. // } else {
  791. // o3.executeDoctor = vm.jDlist[0].code
  792. // o3.executeDoctorName = vm.jDlist[0].name
  793. // o3.docList = vm.jDlist
  794. // }
  795. // vm.templateDetail.push(o3)
  796. // }
  797. // });
  798. // }
  799. // });
  800. // }
  801. // });
  802. // return o;
  803. // });
  804. // } else {
  805. // showErrorMessage(res.msg);
  806. // }
  807. // })
  808. // },
  809. searchProject: function() {
  810. this.getServiceItemList(true)
  811. },
  812. setPatImg: function(src) {
  813. if(!src) {
  814. return "../../../images/p-female.png"
  815. } else {
  816. var str = httpRequest.getImgUrl(src);
  817. return str
  818. }
  819. },
  820. changeSelectFre: function(index, bool) {
  821. this.templateDetail[index].selectFre = !bool
  822. this.isTest = !this.isTest
  823. },
  824. changeSelectDoc: function(index, bool) {
  825. this.templateDetail[index].selectDoc = !bool
  826. this.isTest = !this.isTest
  827. },
  828. // 选择频次
  829. selectFre: function(index, list) {
  830. this.templateDetail[index].selectFre = false
  831. this.templateDetail[index].frequencyCode = list.code
  832. this.templateDetail[index].frequency = list
  833. this.templateDetail[index] = this.templateDetail[index]
  834. this.isTest = !this.isTest
  835. },
  836. // 选择时间段
  837. selectTimeType: function(index, timetype) {
  838. this.templateDetail[index].timeType = timetype
  839. this.isTest = !this.isTest
  840. },
  841. // 选择执行医生
  842. selectLi: function(index, list) {
  843. this.templateDetail[index].selectDoc = false
  844. this.templateDetail[index].executeDoctor = list.code
  845. this.templateDetail[index].executeDoctorName = list.name
  846. this.templateDetail[index].executeHospitalName = list.hospitalName
  847. this.templateDetail[index] = this.templateDetail[index]
  848. this.isTest = !this.isTest
  849. },
  850. // 删除配置计划
  851. subTemplate: function(index, detail) {
  852. var vm = this
  853. this.isTest = !this.isTest
  854. this.templateDetail.splice(index, 1)
  855. var len = detail.executeTime.length
  856. var deleteJudge = true
  857. $.each(vm.templateDetail, function(index, o) {
  858. if(o.code == detail.code) {
  859. deleteJudge = false
  860. }
  861. });
  862. if(deleteJudge) {
  863. $.each(vm.serviceItems, function(index, o) {
  864. if(detail.code == o.code) {
  865. o.isSelect = false
  866. o.executeTime = []
  867. vm.serviceItems[index] = o
  868. }
  869. });
  870. }
  871. this.judgeHavePlan()
  872. },
  873. // 复制计划
  874. copyTemplate: function(index, detail) {
  875. var vm = this,
  876. obj = JSON.parse(JSON.stringify(detail));
  877. this.isTest = !this.isTest
  878. obj.executeTime = []
  879. obj.value14 = []
  880. obj.value15 = null
  881. this.templateDetail.push(obj)
  882. if(obj.code!='2'&&obj.code!='3'){
  883. this.havePlan = false
  884. }
  885. },
  886. // 选择项目
  887. selectProject: function(index, index2, index3, o) {
  888. this.selectProjectDetail = o
  889. this.selectPatientIndex = layer.open({
  890. type: 2,
  891. area: ['400px', '500px'],
  892. shade: 0.5,
  893. title: '选择项目',
  894. closeBtn: 1,
  895. shift: 5,
  896. shadeClose: false, //点击遮罩关闭层
  897. content: "select-project.html?isLook=true&projectId=" + o.id + "&index=" + index + "&index3=" + index3 + "&index2=" + index2
  898. });
  899. },
  900. // 添加项目
  901. addProject: function(index, obj) {
  902. if(obj) {
  903. this.selectProjectDetail = obj
  904. }
  905. if(this.selectProjectDetail.isSelect) {
  906. showWarningMessage("已添加!")
  907. return false;
  908. }
  909. this.selectProjectDetail.isSelect = true
  910. this.selectProjectDetail.selectDoc = false
  911. this.selectProjectDetail.selectDate = 1
  912. this.selectProjectDetail.value14 = []
  913. this.selectProjectDetail.value15 = null
  914. this.selectProjectDetail.executeTime = []
  915. this.selectProjectDetail.selectDateRange = []
  916. // 频次选择
  917. this.selectProjectDetail.selectFre = false
  918. this.selectProjectDetail.frequencyCode = this.frequencyList[0].code
  919. this.selectProjectDetail.frequency = this.frequencyList[0]
  920. this.selectProjectDetail.frequencyList = this.frequencyList
  921. this.selectProjectDetail.timeType = 0
  922. this.selectProjectDetail.remark = null
  923. this.selectProjectDetail.executeDoctor = this.jDlist[0].code
  924. this.selectProjectDetail.executeDoctorName = this.jDlist[0].name
  925. this.selectProjectDetail.executeHospitalName = this.jDlist[0].hospitalName
  926. this.selectProjectDetail.docList = this.jDlist
  927. this.templateDetail.push(this.selectProjectDetail)
  928. this.serviceItems[index] = this.selectProjectDetail
  929. if(this.selectProjectDetail.code!='2'&&this.selectProjectDetail.code!='3'){
  930. this.havePlan = false
  931. }
  932. },
  933. // 查看项目
  934. lookProject: function(o) {
  935. this.selectPatientIndex = layer.open({
  936. type: 2,
  937. area: ['400px', '500px'],
  938. shade: 0.5,
  939. title: '查看项目',
  940. closeBtn: 1,
  941. shift: 5,
  942. shadeClose: false, //点击遮罩关闭层
  943. content: "select-project.html?projectId=" + o.id
  944. });
  945. },
  946. // 选择居民
  947. selectPatient: function() {
  948. this.selectPatientIndex = layer.open({
  949. type: 2,
  950. area: ['400px', '500px'],
  951. shade: 0.5,
  952. title: '同步患者',
  953. closeBtn: 1,
  954. shift: 5,
  955. shadeClose: false, //点击遮罩关闭层
  956. content: "select-patient.html"
  957. });
  958. },
  959. // 选择居民回调
  960. selectPatientOk: function(pati) {
  961. this.isPlan = false
  962. this.allFee = 0
  963. this.templateDetail = []
  964. this.pati = pati
  965. this.isEdit = false
  966. this.showAdviceContentTip = false
  967. this.medicalRecordsList = []
  968. this.getPatientInfo()
  969. this.findTemplateList()
  970. // this.diagnosisQuery()
  971. layer.close(this.selectPatientIndex)
  972. },
  973. // 添加模板
  974. addMuban: function(oId) {
  975. var vm = this
  976. var templateId = oId||''
  977. if(!this.adviceContent){
  978. vm.showAdviceContentTip = true
  979. showWarningMessage("请输入康复建议!")
  980. return false;
  981. }
  982. if(vm.medicalRecordsList.length==0){
  983. showWarningMessage("请选择住院病历!")
  984. return false;
  985. }
  986. vm.newPlan(templateId)
  987. },
  988. // 取消计划
  989. canclePlan: function(obj) {
  990. var vm = this
  991. cancleIndex = layer.open({
  992. type: 2,
  993. area: ['400px', '180px'],
  994. shade: 0.5,
  995. title: '取消确认',
  996. closeBtn: 1,
  997. shift: 5,
  998. shadeClose: false, //点击遮罩关闭层
  999. content: "cancle_sure.html"
  1000. });
  1001. },
  1002. cancleSure: function() {
  1003. this.isPlan = false
  1004. this.allFee = 0
  1005. this.templateDetail = []
  1006. },
  1007. // (disease, templateId)
  1008. newPlan: function(templateId) {
  1009. // this.diseaseObj = disease
  1010. // var templateId = this.templateId
  1011. this.isPlan = true
  1012. if(templateId) {
  1013. this.findTemplateDetail(templateId)
  1014. } else {
  1015. this.templateDetail = []
  1016. this.getServiceItemList()
  1017. // this.findServiceItemsByHospital()
  1018. }
  1019. },
  1020. selectPro: function(pro, index) {
  1021. if(pro == 1) {
  1022. this.proIndex2 = null;
  1023. this.proIndex1 == index ? this.proIndex1 = null : this.proIndex1 = index
  1024. } else {
  1025. this.proIndex2 == index ? this.proIndex2 = null : this.proIndex2 = index
  1026. }
  1027. },
  1028. setLabelIndex: function(index, label) {
  1029. this.labelIndex = index
  1030. this.labelCode = label.code
  1031. },
  1032. changeSelectDate: function(index, num) {
  1033. if(this.templateDetail[index].executeTime.length) {
  1034. showWarningMessage("请先清除此选项的计划时间!");
  1035. return false;
  1036. }
  1037. this.isTest = !this.isTest
  1038. this.templateDetail[index].selectDate = num
  1039. },
  1040. openSelectTime: function(index) {
  1041. var vm = this
  1042. selectTimeIndex = layer.open({
  1043. type: 2,
  1044. area: ['600px', '500px'],
  1045. shade: 0.5,
  1046. title: '服务时间选择',
  1047. closeBtn: 1,
  1048. shift: 5,
  1049. shadeClose: false, //点击遮罩关闭层
  1050. content: "select_timer.html"
  1051. });
  1052. },
  1053. formatter: function(time){
  1054. return new Date(time).format('yyyy-MM-dd')
  1055. },
  1056. // 选择日期
  1057. getSelectDate: function(index) {
  1058. var vm = this,
  1059. projectId = vm.templateDetail[index].code;
  1060. if(!this.templateDetail[index].value15) {
  1061. return false;
  1062. }
  1063. vm.templateDetail = $.map(vm.templateDetail, function(o, index) {
  1064. if(projectId == o.code) {
  1065. o.isTimeSame = false
  1066. }
  1067. return o
  1068. })
  1069. this.templateDetail[index].executeTime = []
  1070. var arr = this.templateDetail[index].value15
  1071. this.templateDetail[index].executeTime = arr
  1072. this.templateDetail[index].value14 = []
  1073. this.isTest = !this.isTest
  1074. },
  1075. // 选择周期
  1076. getRandgeDate: function(index, i) {
  1077. var vm = this
  1078. var templateDetail=this.templateDetail[index]
  1079. if(!templateDetail.value14[i]){
  1080. this.templateDetail[index].executeTime = []
  1081. this.havePlan = false
  1082. return false
  1083. }
  1084. if(templateDetail.value14[0]>templateDetail.value14[1]){
  1085. showWarningMessage("开始时间应小于结束时间!")
  1086. return false;
  1087. }
  1088. var projectId = vm.templateDetail[index].code;
  1089. vm.templateDetail = $.map(vm.templateDetail, function(o, index) {
  1090. if(projectId == o.code) {
  1091. o.isTimeSame = false
  1092. }
  1093. return o
  1094. })
  1095. this.templateDetail[index].executeTime = []
  1096. var arr = this.templateDetail[index].value14,
  1097. startTime = new Date(arr[0]).getTime(),
  1098. endTime = new Date(arr[1]).getTime(),
  1099. absTime = endTime - startTime,
  1100. oneday = 60 * 60 *24 * 1000,
  1101. i = 0;
  1102. for(i; i * oneday <= absTime; i++) {
  1103. var num = i * oneday + startTime,
  1104. str = new Date(num).format("yyyy-MM-dd")
  1105. this.templateDetail[index].executeTime.push(str)
  1106. }
  1107. var obj = {
  1108. startTime: arr[0],
  1109. endTime: arr[1],
  1110. length: i
  1111. }
  1112. this.templateDetail[index].selectDateRange.push(obj)
  1113. this.templateDetail[index].value15 = null
  1114. this.isTest = !this.isTest
  1115. this.judgeHavePlan()
  1116. },
  1117. // 计算总费用
  1118. checkAllMoney: function() {
  1119. var vm = this
  1120. this.allFee = 0
  1121. $.each(vm.templateDetail, function(index, o) {
  1122. var fee = vm.mul(vm.mul(o.expense, o.frequency.count), o.executeTime.length)
  1123. vm.allFee = vm.add(vm.allFee, fee)
  1124. });
  1125. },
  1126. judgeHavePlan: function() {
  1127. var arr = []
  1128. for(var k = 0; k < this.templateDetail.length; k++) {
  1129. if(this.templateDetail[k].code!='2'&&this.templateDetail[k].code!='3'){
  1130. if(this.templateDetail[k].executeTime[0]) {
  1131. arr.push(true)
  1132. }else {
  1133. arr.push(false)
  1134. }
  1135. }
  1136. }
  1137. var flag = _.every(arr, Boolean)
  1138. if(flag){
  1139. this.havePlan = true
  1140. }else{
  1141. this.havePlan = false
  1142. }
  1143. },
  1144. createRehabilitationPlan: function() {
  1145. var vm = this
  1146. if(!this.havePlan) {
  1147. showWarningMessage("请选择计划时间!")
  1148. return false;
  1149. }
  1150. if(!this.adviceContent){
  1151. showWarningMessage("请输入康复建议!")
  1152. return false;
  1153. }
  1154. if(vm.medicalRecordsList.length==0){
  1155. showWarningMessage("请选择住院病历!")
  1156. return false;
  1157. }
  1158. var codeArr=[];
  1159. $.each(vm.medicalRecordsList,function(i, o){
  1160. codeArr.push(o.code)
  1161. })
  1162. var loadding = layer.load(0, {shade: false}),
  1163. data = {
  1164. patient: this.pati.patient,
  1165. name: this.pati.patientName,
  1166. title: this.pati.patientName + "的康复计划",
  1167. // disease: this.diseaseObj.diseaseCode,
  1168. // diseaseName: this.diseaseObj.diseaseName,
  1169. planType: this.labelCode || 1,
  1170. payment: 2,
  1171. totalExpense: this.allFee || 0,
  1172. adviceContent: this.adviceContent,
  1173. medicalRecordsCode: codeArr.join(','),
  1174. detail: []
  1175. };
  1176. $.each(vm.templateDetail, function(index, o) {
  1177. if(o.code=='2'||o.code=='3'){
  1178. var obj = {
  1179. hospitalServiceItemId: o.code,
  1180. type: 2,
  1181. doctor: '',
  1182. doctorName: '',
  1183. executeTimes: '',
  1184. frequencyCode: '',
  1185. timeType: 0,
  1186. remark: o.remark || ''
  1187. }
  1188. data.detail.push(obj)
  1189. }else{
  1190. if(o.executeTime.length) {
  1191. var executeTime = []
  1192. $.each(o.executeTime, function(ind, v) {
  1193. v += ' 00:00'
  1194. executeTime.push(v)
  1195. });
  1196. var obj = {
  1197. hospitalServiceItemId: o.code,
  1198. type: 2,
  1199. doctor: o.executeDoctor,
  1200. doctorName: o.executeDoctorName,
  1201. executeTimes: executeTime.join(","),
  1202. frequencyCode: o.frequencyCode,
  1203. timeType: o.timeType,
  1204. remark: o.remark || ''
  1205. }
  1206. data.detail.push(obj)
  1207. }
  1208. }
  1209. });
  1210. var params = {
  1211. json: JSON.stringify(data)
  1212. }
  1213. // console.log('paramsparamsparamsparamsparams', data)
  1214. // return
  1215. recoverAPI.createRehabilitationPlan(params).then(function(res) {
  1216. layer.close(loadding)
  1217. if(res.status == 200) {
  1218. vm.isPlanId = res.data
  1219. // if(vm.isPlanId){
  1220. // var thr_parems ={
  1221. // patient:vm.pati.patient,
  1222. // patientName:vm.pati.patientName,
  1223. // planId:vm.isPlanId,
  1224. // hospitalName:$('.input-group-btn button').text().trim(),
  1225. // department:$('#department').find('input').val(),//vm.subsidiaryInfo.data.department|| ""
  1226. // attendingDoctorName:$('#attendingDoctor').find('input').val(),//vm.subsidiaryInfo.data.attendingDoctor ||""
  1227. // admittingDiagnosis:$('#admissionDiagnosis').find('input').val(),//vm.subsidiaryInfo.data.admissionDiagnosis || ""
  1228. // dischargeDiagnosis:$('#dischargeDiagnosis').find('input').val(),//vm.subsidiaryInfo.data.dischargeDiagnosis|| ""
  1229. // advice:$('.tipText').val().trim(),//vm.subsidiaryInfo.data.dischargeOrder ||""
  1230. // dischargeTime:vm.subsidiaryInfo.data.dischargeTime || ""
  1231. // }
  1232. // loadding = layer.load(0, {shade: false});
  1233. // recoverAPI.preservationInfo(thr_parems).then(function(res){
  1234. // layer.close(loadding)
  1235. // if (res.status == 200) {
  1236. // setTimeout(function() {
  1237. // window.location.href = "../../rehabilitation/html/health_control.html"
  1238. // }, 1000)
  1239. // showSuccessMessage('保存成功')
  1240. // }else{
  1241. // showErrorMessage(res.msg);
  1242. // }
  1243. // })
  1244. // }
  1245. setTimeout(function() {
  1246. window.location.href = "../../rehabilitation/html/health_control.html"
  1247. }, 1000)
  1248. showSuccessMessage("康复计划配置成功!")
  1249. } else {
  1250. showErrorMessage(res.msg || "同康复计划项目创建时间重复!");
  1251. vm.templateDetail = $.map(vm.templateDetail, function(o, index) {
  1252. $.each(res.data, function(ind, v) {
  1253. if(v == o.id) {
  1254. o.isTimeSame = true
  1255. }
  1256. });
  1257. return o
  1258. })
  1259. }
  1260. })
  1261. },
  1262. // 字符串方法计算加减乘除(精确度百分位)
  1263. add: function(num1,num2){
  1264. var r1,r2,m,n;
  1265. try{r1=num1.toString().split(".")[1].length}catch(e){r1=0}
  1266. try{r2=num2.toString().split(".")[1].length}catch(e){r2=0}
  1267. m = Math.pow(10,Math.max(r1,r2));
  1268. n = (r1>=r2)?r1:r2;
  1269. return ((num1*m + num2*m)/m).toFixed(n);
  1270. },
  1271. sub: function(num1,num2){
  1272. var r1,r2,m,n;
  1273. try{r1=num1.toString().split(".")[1].length}catch(e){r1=0}
  1274. try{r2=num2.toString().split(".")[1].length}catch(e){r2=0}
  1275. n = (r1>=r2)?r1:r2;
  1276. m = Math.pow(10,Math.max(r1,r2));
  1277. return ((num1*m - num2*m)/m).toFixed(n);
  1278. },
  1279. mul: function(num1,num2){
  1280. var m = 0;
  1281. try{m+=num1.toString().split(".")[1].length}catch(e){}
  1282. try{m+=num2.toString().split(".")[1].length}catch(e){}
  1283. return (Number(num1.toString().replace(".",""))*Number(num2.toString().replace(".","")))/Math.pow(10,m)
  1284. },
  1285. div: function(arg1,arg2){
  1286. var t1=0,t2=0,r1,r2;
  1287. try{t1=arg1.toString().split(".")[1].length}catch(e){}
  1288. try{t2=arg2.toString().split(".")[1].length}catch(e){}
  1289. r1=Number(arg1.toString().replace(".",""));
  1290. r2=Number(arg2.toString().replace(".",""));
  1291. return (r1/r2)*Math.pow(10,t2-t1);
  1292. }
  1293. }
  1294. })
  1295. </script>
  1296. </body>
  1297. </html>