west_pharmacy_dispensing.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. //@ sourceURL=west_pharmacy_dispensing.js
  2. var LODOP; //声明为全局变量
  3. var printIndex;
  4. var mzCfPrintIndex;
  5. var ekCfPrintIndex;
  6. var jzCfPrintIndex;
  7. $(function () {
  8. openSocket("PY");
  9. $("input").each(function () {
  10. this.onkeydown = function (e) { // 监听键盘事件
  11. let theEvent = window.event || e;
  12. let code = theEvent.keyCode || theEvent.which;
  13. if (code == 13) {//回车事件
  14. $("#btn_query").click(); //触发搜索按钮点击事件
  15. }
  16. }
  17. });
  18. init_daterangepicker();
  19. initTable();
  20. $('#dispensingStatusSearch').selectpicker('refresh');
  21. $("#btn_query").click(function (t) {
  22. initTable();
  23. });
  24. //重置查询参数
  25. $('#btn_clean').click(function () {
  26. cleanParams();
  27. });
  28. });
  29. /**
  30. * 获取按钮组选择的下标
  31. * @param id
  32. * @returns {number}
  33. */
  34. function getIndex(id) {
  35. var index = 0;
  36. var item = $("#" + id).find("button");
  37. for (var i = 0; i <= item.length; i++) {
  38. if ($(item[i]).hasClass("btn-primary")) {
  39. index = i;
  40. break;
  41. }
  42. }
  43. return index;
  44. }
  45. /**
  46. * 查询处方信息
  47. */
  48. function initTable() {
  49. $('#prescription_table').bootstrapTable("destroy");
  50. $('#prescription_table').bootstrapTable({
  51. url: '/thmz/listMzChargeOrder', //请求后台的URL(*)
  52. method: 'post', //请求方式(*)
  53. toolbar: '#toolbar', //工具按钮用哪个容器
  54. striped: true, //是否显示行间隔色
  55. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  56. pagination: true, //是否显示分页(*)
  57. sortable: true, //是否启用排序
  58. sortOrder: "asc", //排序方式
  59. queryParams: queryParams, //传递参数(*)
  60. sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
  61. pageNumber: 1, //初始化加载第一页,默认第一页
  62. pageSize: 10, //每页的记录行数(*)
  63. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  64. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  65. strictSearch: true,
  66. showColumns: false, //是否显示所有的列
  67. showRefresh: false, //是否显示刷新按钮
  68. minimumCountColumns: 2, //最少允许的列数
  69. clickToSelect: true, //是否启用点击选中行
  70. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  71. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  72. cardView: false, //是否显示详细视图
  73. detailView: false,
  74. //rowStyle:rowStyle,//通过自定义函数设置行样式
  75. ajaxOptions: {
  76. headers: {
  77. 'Accept': 'application/json',
  78. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  79. }
  80. },
  81. columns: [
  82. {
  83. title: '操作',
  84. field: 'op',
  85. align: "center",
  86. valign: 'middle',
  87. formatter: function (value, row, index) {
  88. var str = '<button type="button" class="registration-no-color-foot-button" title="打印" onclick="printPrescription(\'' + row.patientId + '\',\'' + row.times+ '\',\'' + row.orderNo + '\')" style="color: #35D082;"><i class="fa fa-print"></i></button>';
  89. if(row.isRadSend == 0){
  90. str += '<button type="button" class="registration-no-color-foot-button" title="配药完成" onclick="dispensingDispose(\'' + row.patientId + '\',\'' + row.orderNo + '\',\'' + row.times + '\')"><i class="fa fa-check-square-o"></i></button>';
  91. }
  92. str += '<button type="button" class="registration-no-color-foot-button" title="详细" onclick="prescriptionDetail(\'' + row.realNo + '\',\'' + 71 + '\',\'' + row.orderNo + '\',\'' + row.receiptNo + '\',\'' + row.times + '\',\'' + row.patientId + '\')"><i class="fa fa-plus"></i></button>';
  93. return str;
  94. }
  95. }, {
  96. field: 'no',
  97. title: '序号',
  98. align: "center",
  99. valign: 'middle',
  100. width: 40,
  101. formatter: function (value, row, index) {
  102. return index + 1;
  103. }
  104. }, {
  105. field: 'patientId',
  106. title: '病人ID',
  107. align: "center",
  108. valign: 'middle'
  109. }, {
  110. field: 'name',
  111. title: '病人姓名',
  112. align: "center",
  113. valign: 'middle'
  114. }, {
  115. field: 'realNo',
  116. title: '流水号',
  117. align: "center",
  118. valign: 'middle'
  119. }, {
  120. field: 'orderNo',
  121. title: '处方号',
  122. align: "center",
  123. valign: 'middle'
  124. }, {
  125. field: 'chargeDate',
  126. title: '缴费时间',
  127. align: "center",
  128. valign: 'middle',
  129. formatter: function (value, row, index) {
  130. return value == null ? "-" : format(value, "yyyy-MM-dd HH:mm:ss");
  131. }
  132. }
  133. ],
  134. responseHandler: function (res) {
  135. if (res == '401' || res == 401) {
  136. window.location.href = '/thmz/login/view'
  137. return;
  138. }
  139. var ress = eval(res);
  140. if (ress.code == -1) {
  141. if (ress.message != null && ress.message != '') {
  142. new PNotify({
  143. title: '错误提示',
  144. text: ress.message,
  145. type: 'error',
  146. hide: true,
  147. styling: 'bootstrap3'
  148. });
  149. }
  150. return {
  151. "total": 0,//总页数
  152. "rows": {} //数据
  153. };
  154. }
  155. return {
  156. "total": ress.data.length,//总页数
  157. "rows": ress.data //数据
  158. };
  159. },
  160. onDblClickRow: function (row) {
  161. printPrescription(row.patientId,row.times,row.orderNo);
  162. }
  163. });
  164. }
  165. /**
  166. * 查询病人处方明细
  167. */
  168. function prescriptionDetail(realNo, groupNo, orderNo, receiptNo, times, patientId) {
  169. var temp = {
  170. groupNo: groupNo,
  171. realNo: realNo,
  172. orderNo: orderNo,
  173. receiptNo: receiptNo,
  174. times: times,
  175. patientId: patientId
  176. };
  177. $('#tb_table_detail').bootstrapTable("destroy");
  178. $('#tb_table_detail').bootstrapTable({
  179. url: '/thmz/getFyclPrescriptionDetail', //请求后台的URL(*)
  180. method: 'POST', //请求方式(*)
  181. striped: true, //是否显示行间隔色
  182. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  183. pagination: true, //是否显示分页(*)
  184. sortable: true, //是否启用排序
  185. sortOrder: "asc", //排序方式
  186. queryParams: JSON.stringify(temp), //传递参数(*)
  187. sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
  188. pageNumber: 1, //初始化加载第一页,默认第一页
  189. pageSize: 10, //每页的记录行数(*)
  190. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  191. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  192. strictSearch: true,
  193. showColumns: false, //是否显示所有的列
  194. showRefresh: false, //是否显示刷新按钮
  195. minimumCountColumns: 2, //最少允许的列数
  196. clickToSelect: true, //是否启用点击选中行
  197. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  198. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  199. cardView: false, //是否显示详细视图
  200. detailView: false,
  201. //rowStyle:rowStyle,//通过自定义函数设置行样式
  202. ajaxOptions: {
  203. headers: {
  204. 'Accept': 'application/json',
  205. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  206. }
  207. },
  208. columns: [
  209. {
  210. field: 'location',
  211. title: '货位号',
  212. align: "center",
  213. valign: 'middle'
  214. }, {
  215. field: 'drugname',
  216. title: '品名',
  217. align: "center",
  218. valign: 'middle',
  219. }, {
  220. field: 'specification',
  221. title: '规格',
  222. align: "center",
  223. valign: 'middle',
  224. }, {
  225. field: 'quantity',
  226. title: '<span style="color: green">数量</span>',
  227. align: "center",
  228. valign: 'middle',
  229. formatter: function (value, row, index) {
  230. return '<span style="color: green">' + value + '</span>'
  231. }
  232. }, {
  233. field: 'ypUnitName',
  234. title: '单位',
  235. align: "center",
  236. valign: 'middle',
  237. }, {
  238. field: 'abbrName',
  239. title: '生产厂家',
  240. align: "center",
  241. valign: 'middle',
  242. }, {
  243. field: 'drugQuan',
  244. title: '一次剂量',
  245. align: "center",
  246. valign: 'middle',
  247. }, {
  248. field: 'drugUnitName',
  249. title: '单位',
  250. align: "center",
  251. valign: 'middle',
  252. }, {
  253. field: 'frequency',
  254. title: '频率',
  255. align: "center",
  256. valign: 'middle',
  257. }, {
  258. field: 'decAmount',
  259. title: '<span style="color: red">退药量</span>',
  260. align: "center",
  261. valign: 'middle',
  262. formatter: function (value, row, index) {
  263. return value == null ? '<span style="color: red">-</span>' : '<span style="color: red">' + value + '</span>'
  264. }
  265. }, {
  266. field: 'printName',
  267. title: '给药方式',
  268. align: "center",
  269. valign: 'middle',
  270. }, {
  271. field: 'unitPrice',
  272. title: '单价',
  273. align: "center",
  274. valign: 'middle',
  275. }
  276. , {
  277. field: 'drugFlag',//毒麻标志:1:毒;2:麻;3:精神1;4:精神2
  278. title: '<span style="color: red">毒麻</span>',
  279. align: "center",
  280. valign: 'middle',
  281. formatter: function (value, row, index) {
  282. if(value == 1){
  283. return '<span style="color: red">毒</span>'
  284. }else if(value == 2){
  285. return '<span style="color: red">麻</span>'
  286. }else if(value == 3){
  287. return '<span style="color: red">精神1</span>'
  288. }else if(value == 3){
  289. return '<span style="color: red">精神2</span>'
  290. }else{
  291. return '<span style="color: red">-</span>'
  292. }
  293. }
  294. }
  295. , {
  296. field: 'stockAmount',
  297. title: '当前库存',
  298. align: "center",
  299. valign: 'middle',
  300. }
  301. ],
  302. responseHandler: function (res) {
  303. if (res == '401' || res == 401) {
  304. window.location.href = '/thmz/login/view'
  305. return;
  306. }
  307. var ress = eval(res);
  308. if (ress.data.length > 0) {
  309. $("#employeeNameLabel").val(ress.data[0].employeeName);
  310. $("#warnDeptNameLabel").val(ress.data[0].warnDeptName);
  311. $("#chargeDateLabel").val(format(ress.data[0].chargeDate, "yyyy-MM-dd HH:mm:ss"));
  312. $("#icdTextLabel").val(ress.data[0].icdText);
  313. }
  314. if (ress.code == -1) {
  315. if (ress.message != null && ress.message != '') {
  316. new PNotify({
  317. title: '错误提示',
  318. text: ress.message,
  319. type: 'error',
  320. hide: true,
  321. styling: 'bootstrap3'
  322. });
  323. }
  324. return {
  325. "total": 0,//总页数
  326. "rows": {} //数据
  327. };
  328. }
  329. return {
  330. "total": ress.data.length,//总页数
  331. "rows": ress.data //数据
  332. };
  333. },
  334. });
  335. $("#cfxxModal").modal();
  336. }
  337. /**
  338. * 构建列表查询参数
  339. * @param params
  340. */
  341. function queryParams(params) {
  342. var rePortRangeArr = getRePortRangeArr();
  343. var temp = {
  344. /* pageSize: params.limit, //页面大小
  345. pageIndex: params.offset / params.limit, //页码*/
  346. beginTime: new Date(rePortRangeArr[0]),
  347. endTime: new Date(rePortRangeArr[1]),
  348. mzChargeDetail: {
  349. patientId: $("#patientIdSearch").val() == "" ? null : $("#patientIdSearch").val(),
  350. name: $("#nameSearch").val() == "" ? null : $("#nameSearch").val(),
  351. confirmFlag: $("#dispensingStatusSearch").val() == "" ? null : $("#dispensingStatusSearch").val(),
  352. payMark: 0, //已收费
  353. groupNo: 71, //门诊西药房
  354. windowsNoYf: '04' //4号窗口
  355. }
  356. };
  357. return temp;
  358. };
  359. /**
  360. * 配药处理
  361. */
  362. function dispensingDispose(patientId, orderNo, times) {
  363. /*if (!confirm("确定要对当前处方进行配药处理吗?")) {
  364. return;
  365. }*/
  366. var tem = {
  367. "patientId": patientId,
  368. "orderNo": orderNo,
  369. "times": times
  370. }
  371. $.ajax({
  372. type: "POST",
  373. url: '/thmz/dispensingMedicineProcessing',
  374. contentType: "application/json;charset=UTF-8",
  375. dataType: "json",
  376. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  377. data: JSON.stringify(tem),
  378. success: function (res) {
  379. if (res == '401' || res == 401) {
  380. window.location.href = '/thmz/login/view'
  381. return;
  382. }
  383. if (res.code == 0) {
  384. successMesage(res);
  385. initTable();
  386. } else {
  387. errorMesage(res);
  388. }
  389. }
  390. });
  391. }
  392. /**
  393. * 打印处方
  394. */
  395. function printPrescription(patientId, times, orderNo) {
  396. var tem = {
  397. patientId: patientId,
  398. times: times,
  399. orderNo: orderNo,
  400. groupNo: 71
  401. };
  402. $.ajax({
  403. type: "POST",
  404. url: '/thmz/getPrintPrescriptionData',
  405. contentType: "application/json;charset=UTF-8",
  406. dataType: "json",
  407. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  408. data: JSON.stringify(tem),
  409. success: function (res) {
  410. if (res == '401' || res == 401) {
  411. window.location.href = '/thmz/login/view'
  412. return;
  413. }
  414. if (res.code == 0) {
  415. setPrint();//初始化默认打印机
  416. $('#print_view input').attr("value", "");
  417. if (null != res.data) {
  418. for (var key in res.data) {
  419. $("#" + key + "").attr("value", res.data[key]);
  420. }
  421. }
  422. var list = res.data.list;
  423. if (res.data.warnDeptName.indexOf("儿科") != -1) {
  424. $('#drugFlag').attr("value", "儿科");
  425. printIndex = ekCfPrintIndex;
  426. } else if (res.data.warnDeptName.indexOf("急诊") != -1) {
  427. $('#drugFlag').attr("value", "急诊");
  428. printIndex = jzCfPrintIndex;
  429. } else if (list[0].drugFlag == '' || list[0].drugFlag == null || list[0].drugFlag == 6) {
  430. $('#drugFlag').attr("value", "普通");
  431. printIndex = mzCfPrintIndex;
  432. }
  433. if (list[0].drugFlag == 2 || list[0].drugFlag == 3) {
  434. $('#drugFlag').attr("value", "麻、精一");
  435. } else if (list[0].drugFlag == 4) {
  436. $('#drugFlag').attr("value", "精二");
  437. }
  438. $('#priceTime').attr("value", format(list[0].priceTime, "yyyy-MM-dd HH:mm"));
  439. $('#employeeName').attr("value", res.data.employeeName + "/" + res.data.employeeCode);
  440. if (res.data.sex == 1) {
  441. $('#sex').attr("value", '男');
  442. } else if (res.data.sex == 2) {
  443. $('#sex').attr("value", '女');
  444. } else {
  445. $('#sex').attr("value", '未知');
  446. }
  447. if(res.data.ybCardNo == null || res.data.ybCardNo == ''){
  448. $('#ybCardNo').attr("value", res.data.icCardNo);
  449. }
  450. var tr = '';
  451. for (let i = 0; i < list.length; i++) {
  452. var number = i + 1;
  453. let manufactoryName = list[i].manufactoryName == null || list[i].manufactoryName == '' ? '' : '(' + list[i].manufactoryName + ')';
  454. tr += '<tr>\n' +
  455. ' <td style="margin-bottom: 5px;width: 10px;font-size: 14px;" align="left" valign="top">' + number + "." +
  456. '</td>\n' +
  457. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 260px;font-size: 14px;">\n' + list[i].drugName +
  458. ' </td>\n' +
  459. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 120px;text-align: right;font-size: 14px;">' + list[i].specification +
  460. '</td>\n' +
  461. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 15px;text-align: left;font-size: 14px;">×</td>\n' +
  462. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 15px;text-align: left;font-size: 14px;">' + list[i].quantity +
  463. '</td>\n' +
  464. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 25px;text-align: left;font-size: 14px;">' + list[i].ypUnitName +
  465. '</td>\n' +
  466. ' </tr>\n' +
  467. ' <tr>\n' +
  468. ' <td style="margin-bottom: 5px;width: 10px;font-size: 14px;" align="left" valign="top">' +
  469. '</td>\n' +
  470. ' <td style="margin-bottom: 5px;vertical-align: middle !important;width: 260px;font-size: 14px;">\n' + manufactoryName +
  471. ' </td>\n' +
  472. ' <td colspan="4" style="padding-left:0px;margin-bottom: 5px;vertical-align: middle !important;text-align: left;font-size: 14px;">用法:' + list[i].drugQuan+"&nbsp;" + list[i].drugUnitName + '/次&nbsp;&nbsp;' + list[i].frequency + '&nbsp;&nbsp;' + list[i].printName +
  473. '</td>\n' +
  474. ' </tr><tr><td>&nbsp;</td>></tr>';
  475. }
  476. $('#tbody_yp').html(tr);
  477. $('#yxwk').remove();
  478. if (list.length < 5) {
  479. $('#div_yp').append('<span id="yxwk" style="margin-bottom: 5px;font-size: 14px;">以下为空</span>');
  480. }
  481. LODOP = getLodop();
  482. LODOP.PRINT_INITA(6, 0, "140mm", "202mm", "泰和医院处方笺");
  483. LODOP.SET_PRINT_STYLE("FontSize", 9); //字体大小
  484. //设置默认打印机
  485. LODOP.SET_PRINTER_INDEX(printIndex);
  486. LODOP.SET_PRINT_PAGESIZE(1, '140mm', '202mm', "CreateCustomPage");
  487. LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "140mm");
  488. LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "202mm");
  489. LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "门诊处方笺");//对新建的纸张重命名
  490. LODOP.ADD_PRINT_HTM("5mm", "7mm", "140mm", "202mm", $("div[id='print_view']").html());
  491. LODOP.PRINT();
  492. LODOP.NewPage();//下一页
  493. //LODOP.PREVIEW();
  494. successMesage(res);
  495. } else {
  496. errorMesage(res);
  497. }
  498. }
  499. });
  500. }
  501. /**
  502. * 获取时间选择器的时间数组
  503. * @returns {string[]}
  504. */
  505. function getRePortRangeArr() {
  506. var rePortRange = $('#reportrange span').html();
  507. var rePortRangeArr = rePortRange.split(" - ");
  508. rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00"
  509. rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59"
  510. return rePortRangeArr;
  511. }
  512. /**
  513. * 清空查询条件
  514. */
  515. function cleanParams() {
  516. $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
  517. $("#patientIdSearch").val(null);
  518. $("#nameSearch").val(null);
  519. $("#dispensingStatusSearch").val(0);
  520. $("#dispensingStatusSearch").selectpicker('refresh');
  521. }
  522. /**
  523. * 查询默认打印机
  524. */
  525. function setPrint() {
  526. if (mzCfPrintIndex >= 0 && ekCfPrintIndex >= 0 && jzCfPrintIndex >= 0) {
  527. return;
  528. }
  529. $.ajax({
  530. type: "GET",
  531. url: '/thmz/getLastDispensingWindowsByCurrentUser',
  532. contentType: "application/json;charset=UTF-8",
  533. dataType: "json",
  534. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  535. async: false,
  536. success: function (res) {
  537. if (res == '401' || res == 401) {
  538. window.location.href = '/thmz/login/view'
  539. return;
  540. }
  541. if (res.code == 0) {
  542. mzCfPrintIndex = res.data.mzCfPrintIndex;
  543. ekCfPrintIndex = res.data.ekCfPrintIndex;
  544. jzCfPrintIndex = res.data.jzCfPrintIndex;
  545. } else {
  546. mzCfPrintIndex = -1;
  547. ekCfPrintIndex = -1;
  548. jzCfPrintIndex = -1;
  549. }
  550. }
  551. });
  552. }