prescription-consulting.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. var request = getRequest(),
  2. sessionId = request.sessionId,
  3. patiCode,
  4. consultCode,
  5. prescriptionStatus,
  6. prescriptionCode;
  7. page = 1,
  8. members = [];
  9. var docInfo = window.localStorage.getItem("docInfo");
  10. docInfo = JSON.parse(docInfo);
  11. $(function(){
  12. //续方咨询的sessionId 格式 居民code+咨询code+咨询类型( 8 )
  13. patiCode = sessionId.split("_")[0];
  14. consultCode = sessionId.split("_")[1];
  15. getConsultStatus();
  16. //获得会话参与人员
  17. consultingAPI.getMembers(sessionId).then(function(res){
  18. members = res;
  19. getMessage(true);
  20. })
  21. getPrescriptionInfo();
  22. getPatientServiceType(); //获得患者的标签类型
  23. connectSocket();
  24. bindEvents();
  25. })
  26. function getConsultStatus(){
  27. var params = {consult: consultCode};
  28. consultingAPI.getConsultStatus({data: params}).then(function(res){
  29. if(res.status == 200){
  30. //咨询状态(0进行中,1已完成,-1患者取消,-2超时未响应自动关闭)
  31. if(res.data == 0) { //咨询未结束
  32. } else { //咨询已结束
  33. $('.info-panel').html('咨询求助已结束');
  34. $('.send-btn').addClass("disabled");
  35. $("#file_head").attr("disabled", true);
  36. }
  37. }else{
  38. }
  39. });
  40. }
  41. function getMessage(isInit){
  42. var params = {
  43. page: page,
  44. pagesize: 10,
  45. end_msg_id: '',
  46. start_msg_id: '',
  47. user: docInfo.code,
  48. session_id: sessionId,
  49. content_type: '',
  50. isoffset: ''
  51. }
  52. consultingAPI.getMessages(sessionId, {data: params}).then(function(res){
  53. var list = res;
  54. if (list && list.length > 0) {
  55. id = list[list.length - 1].id;
  56. var html = '',
  57. length = list.length;
  58. for (var j = list.length-1; j >= 0; j--) {
  59. var reply = list[j];
  60. html += formatMsg(reply);
  61. }
  62. if(isInit){
  63. $("#talkBox").append(html);
  64. $("#talkBox").slimScroll({
  65. height: '100%',
  66. width: '100%',
  67. alwaysVisible: true,
  68. start : 'bottom',
  69. }).bind('slimscroll', function(e, pos) {
  70. if(pos == 'top'){
  71. if(length == 10){
  72. page++;
  73. getMessage();
  74. }
  75. }
  76. });
  77. }else{
  78. $("#talkBox").prepend(html);
  79. $("#talkBox").slimScroll();
  80. }
  81. $(".fancybox").fancybox({openEffect:"none",closeEffect:"none"});
  82. plyr.setup();
  83. }
  84. });
  85. }
  86. function formatMsg(reply){
  87. try{
  88. reply = JSON.parse(reply);
  89. }catch(e){
  90. }
  91. var isSelf = (reply.sender_id==docInfo.code) ? true : false;
  92. var isSystem = reply.sender_id == 'system';
  93. var html = '';
  94. if(reply.content_type == 7 || reply.content_type == 10){
  95. var content = reply.content;
  96. if(isSystem){
  97. content = '居民24小时内未回复,系统自动结束咨询';
  98. }
  99. html = template('sys_msg_tmp', {content: content});
  100. }else{
  101. var member;
  102. for(var i=0; i<members.length; i++){
  103. if(reply.sender_id == members[i].id){
  104. member = members[i];
  105. break;
  106. }
  107. }
  108. var img = APIService.getImgUrl(reply.avatar);
  109. if((img.indexOf('http') == -1) && (img.indexOf("https") == -1)){
  110. img = member.is_patient ? 'img/p-default.png' : 'img/d-male.png';
  111. }
  112. var content = '';
  113. try{
  114. content = JSON.parse(reply.content);
  115. }catch(e){
  116. if(reply.content_type == 12){ //视频文件
  117. var arr = reply.content.split(",");
  118. content = {};
  119. content.img = arr[0];
  120. content.path = arr[1];
  121. content.time = arr[2];
  122. }else{
  123. content = reply.content;
  124. }
  125. }
  126. var obj = {
  127. isSelf: isSelf,
  128. time: new Date(reply.timestamp).format('yyyy-MM-dd HH:mm:ss'),
  129. type: reply.content_type,
  130. name: member.name,
  131. img: img,
  132. content: content
  133. };
  134. html = template('msg_tmp', obj);
  135. }
  136. return html;
  137. }
  138. function getPrescriptionInfo(){
  139. var params = { consult: consultCode};
  140. consultingAPI.getPrescriptionInfo({data: params}).then(function(res){
  141. if(res.status == 200){
  142. var html = template('prescriptionInfo_tmp', res.data);
  143. prescriptionStatus = res.data.status;
  144. prescriptionCode = res.data.code;
  145. var statusName = getStatusName(res.data.status);
  146. $(".status-btn").text(statusName);
  147. $("#prescriptionInfo").empty().append(html);
  148. $("#prescriptionInfo").slimscroll({
  149. height: 'calc(100% - 60px)',
  150. width: '100%'
  151. });
  152. }else{
  153. toastr && toastr.warning(res.msg);
  154. }
  155. });
  156. }
  157. function getPatientServiceType(){
  158. var params = {patient: patiCode};
  159. consultingAPI.getPatientServiceType({data: params}).then(function(res){
  160. if(res.status == 200){
  161. //slowDiseasePatient: 0 //0表示没有慢病服务类型,1表示有
  162. if(res.data.slowDiseasePatient == 0){
  163. $(".diseaseInfo").html("此居民未被标注【慢病】相关标签,请在i健康APP上核实");
  164. }else{
  165. var disease = "";
  166. for(var i=0; i<res.data.signFamilyServer.length; i++){
  167. var item = res.data.signFamilyServer[i];
  168. if(i>0){
  169. disease += ','+item.name;
  170. }else{
  171. disease += item.name;
  172. }
  173. }
  174. $(".diseaseInfo").text("该居民为"+disease+"患者");
  175. }
  176. }else{
  177. toastr && toastr.warning(res.msg);
  178. }
  179. });
  180. }
  181. function connectSocket(){
  182. jQuery.getScript(APIService.socketUrl+"/socket.io/socket.io.js").done(function() {
  183. var socket = io.connect(APIService.socketUrl );
  184. socket.emit('login', {
  185. userId: docInfo.code,
  186. password: docInfo.code,
  187. sessionId: sessionId,
  188. clientType: "doctor"
  189. });
  190. socket.on('message', function (data) {
  191. console.log(data);
  192. var html = formatMsg(data);
  193. $("#talkBox").append(html);
  194. $("#talkBox").slimscroll();
  195. });
  196. socket.on('error', function (data) {
  197. console.log(data)
  198. });
  199. socket.on('ack', function (data) {
  200. });
  201. }).fail(function() {
  202. // dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:"医生实时对话连接失败!"}).show();
  203. });
  204. }
  205. function sendMessage(contentType, content){
  206. var params = {
  207. sender_id: docInfo.code,
  208. sender_name: docInfo.name,
  209. content_type: contentType,
  210. content: content,
  211. view: 0
  212. };
  213. consultingAPI.sendMessage(sessionId, {data: params}).then(function(res){
  214. console.log(res);
  215. // var html = "";
  216. // for(var i=0; i<res.messages.length; i++){
  217. // var reply = res.messages[i];
  218. // console.log(reply);
  219. // html += formatMsg(reply);
  220. // }
  221. // $("#talkBox").append(html);
  222. // $("#talkBox").slimscroll({
  223. // scrollTo: this.height
  224. // });
  225. });
  226. }
  227. //结束咨询
  228. function finish(){
  229. //判断续方状态,如果未审核,则不可以结束咨询
  230. if(prescriptionStatus > 0 && prescriptionStatus < 21){
  231. dialog({
  232. content:'续方申请未审核,不能结束咨询',
  233. width: 460,
  234. okValue:'我知道了',
  235. ok: function() {
  236. return;
  237. }
  238. }).width(320).showModal();
  239. return false;
  240. }
  241. dialog({
  242. content:'结束咨询后,居民及所有医生均无法再次回复,是否确认继续结束?',
  243. width: '460px',
  244. okValue:'继续结束',
  245. ok: function() {
  246. var params = {consult: consultCode};
  247. consultingAPI.finishConsult({data: params}).then(function(res){
  248. if(res.status == 200) {
  249. var content = docInfo.name+'结束了咨询',
  250. html = template('sys_msg_tmp', {content: content});
  251. $("#talkBox").append(html);
  252. $("#talkBox").slimScroll();
  253. $('.info-panel').html("咨询求助已结束");
  254. $(".send-btn").addClass("disabled");
  255. $("#file_head").attr("disabled", true);
  256. toastr.success("已结束咨询");
  257. } else {
  258. toastr.error(res.msg);
  259. }
  260. })
  261. },
  262. cancelValue: '我再看看',
  263. cancel: function(){}
  264. }).showModal();
  265. }
  266. function bindEvents(){
  267. $(".send-btn").on('click', function(){
  268. var $this = $(this);
  269. if($this.hasClass("disabled")){
  270. return false;
  271. }else{
  272. var text = $.trim($("#input_content").text());
  273. if(text.length == 0){
  274. toastr.options = {
  275. "positionClass": "toast-top-center",
  276. }
  277. toastr.warning('发送内容不能为空');
  278. return false;
  279. }else{
  280. sendMessage(1, text);
  281. $("#input_content").text('');
  282. var obj = {
  283. content: text,
  284. content_type: '1',
  285. sender_id: docInfo.code,
  286. timestamp: new Date().getTime()
  287. }
  288. var html = formatMsg(obj);
  289. $("#talkBox").append(html);
  290. $("#talkBox").slimscroll({
  291. scrollTo: 'bottom'
  292. });
  293. }
  294. }
  295. });
  296. $("#file_head").on('change', function(){
  297. var file = this.files[0];
  298. //先上传图片去服务器,然后再发送消息
  299. var fd=new FormData();
  300. fd.append("action", "UploadVMKImagePath");
  301. fd.append("file", file); //加入文件对象
  302. fd.append("type", '2');
  303. var ajaxObj = {
  304. data: fd,
  305. cache: false,
  306. processData: false,
  307. contentType: false
  308. }
  309. consultingAPI.uploadImage(ajaxObj).then(function(res){
  310. if(res.status == 200){
  311. sendMessage(2, res.urls);
  312. var obj = {
  313. content: res.urls,
  314. content_type: '2',
  315. sender_id: docInfo.code,
  316. timestamp: new Date().getTime()
  317. }
  318. var html = formatMsg(obj);
  319. $("#talkBox").append(html);
  320. $("#talkBox").slimscroll({
  321. scrollTo: 'bottom'
  322. });
  323. }else{
  324. }
  325. });
  326. });
  327. //查看详情
  328. $("body").on('click', '.view-detail', function(res){
  329. //修改顶部tab页面的
  330. var url = parent.document.getElementById("tab").src;
  331. parent.document.getElementById("tab").src = "prescription-tabs.html?sessionId="+sessionId+"&patiCode="+patiCode+"&code="+prescriptionCode+"&tab=1&fromTabIdx=0";
  332. })
  333. }
  334. template.helper('getSourceUrl', function(str){
  335. return APIService.getImgUrl(str);
  336. })