new_recover.html 58 KB

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