prescription-consulting.js 11 KB

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