toll_administration.js 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145
  1. //@ sourceURL=toll_administration.js
  2. var LODOP; //声明为全局变量
  3. //默认打印机下标
  4. var printIndex = -1;
  5. //选中的要退的费用收费编码
  6. var chargeItemCodes = null;
  7. $(function () {
  8. //默认光标在卡号输入框
  9. $("#cardNo").focus();
  10. init_daterangepicker();
  11. initSelect();
  12. initFeeTable();
  13. //卡号输入改变事件
  14. cardNoChange();
  15. //重置查询参数
  16. $('#btn_clean').click(function () {
  17. cleanParams();
  18. });
  19. //初始化页面上面的按钮事件
  20. //查询
  21. $('#btn_query').click(function () {
  22. initFeeTable();
  23. });
  24. /**
  25. * 增加收款方式按钮事件
  26. */
  27. $("#addPayType").on("click", function (t) {
  28. // var arr = $("#payForm").find("div.pay-item");
  29. // if (arr.length > 0) {
  30. // for (var i = 0; i < arr.length; i++) {
  31. // var temp = parseFloat($(arr[i]).find("input").val());
  32. // if (temp == 0) {
  33. // new PNotify({
  34. // title: '错误提示',
  35. // text: "存在未使用的收款方式,请不要重复添加!",
  36. // type: 'error',
  37. // hide: true,
  38. // styling: 'bootstrap3'
  39. // });
  40. // return;
  41. // }
  42. // }
  43. // }
  44. var payTypeIndex = $("#payTypeIndex").val();
  45. var payTypeId = "payType_" + payTypeIndex;
  46. var html = '<div class="item form-group pay-item"><div class="col-md-12 col-sm-12 col-xs-12"><div class="col-md-2 col-sm-2 col-xs-12"></div><label class="col-md-3 col-sm-3 col-xs-12"><select class="form-control selectpicker show-tick" required="true" id="' + payTypeId + '" onchange="checkFee(false)"></select></label><div class="col-md-3 col-sm-3 col-xs-12"><input class="form-control col-md-5 col-xs-12" type="number" data-placement="bottom-right" min="0" onchange="checkFee()"></div><div class="col-md-1 col-sm-1 col-xs-12" style="line-height: 34px;">元&nbsp;&nbsp;<a style="line-height: 34px;cursor: pointer;" onclick="closeThisParent(this)"><i class="fa fa-close"></i></a></div></div></div>';
  47. $("#changeAmountParent").before(html);
  48. initChequeType(payTypeId)
  49. payTypeIndex = payTypeIndex + 1;
  50. $("#payTypeIndex").val(payTypeIndex);
  51. $("#addPayType").parent().removeClass("in").addClass("hide");
  52. });
  53. //初始门诊收银方式下拉选
  54. initChequeType("payType");
  55. setTimeout(function () {
  56. getLodop();
  57. }, 800);
  58. // $("#editPrint").on("click", function (t) {
  59. // CreatePrinterList();
  60. // $("#editPrintModal").modal();
  61. // });
  62. // /**
  63. // * 设置窗口号
  64. // */
  65. // $("#editWindows").on("click", function (t) {
  66. // $.ajax({
  67. // type: "GET",
  68. // url: '/thmz/getLastWindowsByCurrentUser',
  69. // contentType: "application/json;charset=UTF-8",
  70. // dataType: "json",
  71. // headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  72. // success: function (res) {
  73. // if (res == '401' || res == 401) {
  74. // window.location.href = '/thmz/login/view'
  75. // return;
  76. // }
  77. // if (res.code == 0) {
  78. // $("#windowsNum").val(res.data.windowsNo)
  79. // } else {
  80. // new PNotify({
  81. // title: '错误提示',
  82. // text: res.message,
  83. // type: 'error',
  84. // hide: true,
  85. // styling: 'bootstrap3'
  86. // });
  87. // }
  88. // }
  89. // });
  90. // $("#editWindowsModal").modal();
  91. // });
  92. });
  93. /**
  94. * 列表类型按钮切换事件
  95. * @param object
  96. */
  97. function payMarkButtonChange(object) {
  98. $("#pay_mark_group").find("button").each(function (index, element) {
  99. if ($(element).hasClass("btn-primary")) {
  100. $(element).removeClass("btn-primary").addClass("btn-default");
  101. }
  102. });
  103. $(object).removeClass("btn-default").addClass("btn-primary");
  104. initFeeTable();
  105. }
  106. /**
  107. * 收费明细类型按钮切换事件
  108. * @param object
  109. */
  110. function billItemButtonChange(object) {
  111. $("#bill_item_group").find("button").each(function (index, element) {
  112. if ($(element).hasClass("btn-primary")) {
  113. $(element).removeClass("btn-primary").addClass("btn-default");
  114. }
  115. });
  116. $(object).removeClass("btn-default").addClass("btn-primary");
  117. initChargeDetailTable();
  118. //默认光标在卡号输入框
  119. $("#cardNo").focus();
  120. }
  121. /**
  122. * 收费明细类型按钮切换事件
  123. * @param object
  124. */
  125. function refundBillItemButtonChange(object) {
  126. $("#refund_bill_item_group").find("button").each(function (index, element) {
  127. if ($(element).hasClass("btn-primary")) {
  128. $(element).removeClass("btn-primary").addClass("btn-default");
  129. }
  130. });
  131. $(object).removeClass("btn-default").addClass("btn-primary");
  132. initMzChargeDetailByBillItem(false);
  133. }
  134. /**
  135. * 初始化下拉选
  136. */
  137. function initSelect() {
  138. $(".selectpicker").selectpicker({
  139. dropuAuto: false
  140. });
  141. initDeptSelect();
  142. initDoctorSelect();
  143. }
  144. /**
  145. * 挂号列表中的科室列表
  146. */
  147. function initDeptSelect() {
  148. //科室列表
  149. $.ajax({
  150. type: "GET",
  151. url: '/thmz/allMzUnitCode',
  152. dataType: "json",
  153. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  154. success: function (data) {
  155. if (data == '401' || data == 401) {
  156. window.location.href = '/thmz/login/view'
  157. return;
  158. }
  159. var html = '';
  160. $.each(data.data, function (commentIndex, comment) {
  161. html += '<option value="' + comment.code + '">' + comment.name + '(' + comment.pyCode + ')</option>';
  162. });
  163. $('#deptNoParam').empty();
  164. $('#deptNoParam').html(html);
  165. $('#deptNoParam').selectpicker('refresh');
  166. }
  167. });
  168. }
  169. /**
  170. * 挂号列表中的医生列表初始化
  171. */
  172. function initDoctorSelect() {
  173. //医生列表
  174. $.ajax({
  175. type: "GET",
  176. url: '/thmz/listEmployeeByDepts?depts=' + $('#deptNoParam').val(),
  177. dataType: "json",
  178. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  179. success: function (res) {
  180. if (res == '401' || res == 401) {
  181. window.location.href = '/thmz/login/view'
  182. return;
  183. }
  184. var html = '';
  185. $.each(res.data, function (commentIndex, comment) {
  186. html += '<option value="' + comment.employeeCode + '">' + comment.employeeName + '</option>';
  187. });
  188. $('#doctorParam').empty();
  189. $('#doctorParam').html(html);
  190. $('#doctorParam').selectpicker('destroy').selectpicker('refresh');
  191. }
  192. });
  193. }
  194. var $table_1;
  195. /**
  196. * 初始化收费表格
  197. */
  198. function initFeeTable() {
  199. var payMarkGroup = getIndex("pay_mark_group");
  200. var timeColumusName = "处方时间";
  201. var timeColumus = "priceTime";
  202. $("#refundFeeTip").removeClass("in").addClass("hide");
  203. $("#chargeFeeTip").removeClass("hide").addClass("in");
  204. if (payMarkGroup == 1) {
  205. timeColumusName = "缴费时间";
  206. timeColumus = "chargeDate";
  207. $("#refundFeeTip").removeClass("hide").addClass("in");
  208. $("#chargeFeeTip").removeClass("in").addClass("hide");
  209. } else if (payMarkGroup == 2) {
  210. timeColumusName = "退费时间";
  211. timeColumus = "inputDate";
  212. }
  213. var patientId = $("#patientId").val();
  214. if (payMarkGroup == 0 && patientId != null && patientId != '') {
  215. $("#patientIdHaveTally").val(patientId);
  216. $.ajax({
  217. type: "GET",
  218. url: '/thmz/getTallyTotalCharge?patientId=' + patientId,
  219. contentType: "application/json;charset=UTF-8",
  220. dataType: "json",
  221. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  222. success: function (res) {
  223. if (res == '401' || res == 401) {
  224. window.location.href = '/thmz/login/view'
  225. return;
  226. }
  227. if (res.code == 0) {
  228. if (res.data != null && res.data > 0) {
  229. $("#haveTallyModal").modal();
  230. $("#totalTallyAmount").text(res.data.toFixed(2));
  231. } else {
  232. $("#haveTallyModal").modal('hide');
  233. }
  234. } else {
  235. new PNotify({
  236. title: '错误提示',
  237. text: res.message,
  238. type: 'error',
  239. hide: true,
  240. styling: 'bootstrap3'
  241. });
  242. }
  243. }
  244. });
  245. }
  246. $('#tb_table').bootstrapTable("destroy");
  247. $table_1 = $('#tb_table').bootstrapTable({
  248. url: '/thmz/listMzChargeDetail', //请求后台的URL(*)
  249. method: 'post', //请求方式(*)
  250. toolbar: '#toolbar', //工具按钮用哪个容器
  251. striped: true, //是否显示行间隔色
  252. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  253. pagination: true, //是否显示分页(*)
  254. sortable: true, //是否启用排序
  255. sortOrder: "asc", //排序方式
  256. queryParams: queryParams, //传递参数(*)
  257. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  258. pageNumber: 1, //初始化加载第一页,默认第一页
  259. pageSize: 5, //每页的记录行数(*)
  260. pageList: [5, 10, 25, 50, 100], //可供选择的每页的行数(*)
  261. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  262. strictSearch: true,
  263. showColumns: false, //是否显示所有的列
  264. showRefresh: false, //是否显示刷新按钮
  265. minimumCountColumns: 2, //最少允许的列数
  266. clickToSelect: true, //是否启用点击选中行
  267. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  268. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  269. cardView: false, //是否显示详细视图
  270. detailView: false,
  271. //rowStyle:rowStyle,//通过自定义函数设置行样式
  272. ajaxOptions: {
  273. headers: {
  274. 'Accept': 'application/json',
  275. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  276. }
  277. },
  278. columns: [
  279. // {
  280. // checkbox: true
  281. // },
  282. {
  283. field: 'realNo',
  284. title: '缴费流水号',
  285. align: "center",
  286. valign: 'middle',
  287. formatter: function (value, row, index) {
  288. return Math.abs(value);
  289. }
  290. }, {
  291. field: 'patientId',
  292. title: '患者编号',
  293. align: "center",
  294. valign: 'middle',
  295. }, {
  296. field: 'name',
  297. title: '患者姓名',
  298. align: "center",
  299. valign: 'middle',
  300. }, {
  301. field: 'times',
  302. title: '就诊次数',
  303. align: "center",
  304. valign: 'middle',
  305. }, {
  306. field: 'receiptNo',
  307. title: '结算次数',
  308. align: "center",
  309. valign: 'middle',
  310. formatter: function (value, row, index) {
  311. return Math.abs(value);
  312. }
  313. }, {
  314. field: 'amount',
  315. title: '金额(元)',
  316. align: "center",
  317. valign: 'middle',
  318. formatter: function (value, row, index) {
  319. return Math.abs(value);
  320. }
  321. }, {
  322. field: 'warnDept',
  323. title: '科室',
  324. align: "center",
  325. valign: 'middle',
  326. }, {
  327. field: 'doctorCode',
  328. title: '医生',
  329. align: "center",
  330. valign: 'middle',
  331. }, {
  332. field: timeColumus,
  333. title: timeColumusName,
  334. align: "center",
  335. valign: 'middle',
  336. formatter: function (value, row, index) {
  337. if (value == null || value == "") {
  338. return "";
  339. }
  340. return format(value, "yyyy-MM-dd HH:mm:ss");
  341. }
  342. }, {
  343. title: '操作',
  344. align: "center",
  345. valign: 'middle',
  346. // sortable: true,
  347. formatter: function (value, row, index) {
  348. var str = '<button type="button" class="registration-no-color-foot-button" title="费用明细" onclick="chargeDetailModal(\'' + row.patientId + '\',' + row.times + ',' + row.receiptNo + ')"><i class="fa fa-plus"></i></button>';
  349. str += '<button type="button" class="registration-no-color-foot-button" title="诊断查询" onclick="diagnoseQuery(\'' + row.patientId + '\',' + row.times + ')"><i class="fa fa-search-minus"></i></button>';
  350. var payMarkGroup = getIndex("pay_mark_group");
  351. if (payMarkGroup == 0) {
  352. str += '<button type="button" class="registration-no-color-foot-button"title="确认收费" onclick="tipHaveTally(' + row.amount + ',\'' + row.patientId + '\',' + row.times + ',\'' + row.name + '\',' + row.receiptNo + ')"><i class="fa fa-rmb"></i></button>';
  353. }
  354. if (payMarkGroup == 1) {
  355. str += '<button type="button" class="registration-no-color-foot-button" title="退费" onclick="refundFee(\'' + row.patientId + '\',' + row.times + ',' + row.receiptNo + ',' + row.printFlag + ');"><i class="fa fa-reply"></i></button>';
  356. if (row.printFlag == 0) {
  357. str += '<button type="button" id="button_'+row.realNo+'" class="registration-no-color-foot-button" title="发票打印" onclick="prn1PrintHand(\'' + row.patientId + '\',' + row.times + ',true,' + row.receiptNo + ','+row.realNo+');" style="color: #35D082;"><i class="fa fa-print"></i></button>';
  358. } else if (row.printFlag == 1) {
  359. str += '<button type="button" class="registration-no-color-foot-button" title="发票重打" onclick="repPrint(\'' + row.patientId + '\',' + row.times + ',' + row.receiptNo + ');" style="color: #F4BD00;"><i class="fa fa-print"></i></button>';
  360. str += '<button type="button" class="registration-no-color-foot-button" title="发票作废重打" onclick="obsoleteAndRepPrint(\'' + row.patientId + '\',' + row.times + ',' + row.receiptNo + ');" style="color: #E73E48;"><i class="fa fa-print"></i></button>';
  361. }
  362. }
  363. return str;
  364. }
  365. }
  366. ],
  367. responseHandler: function (res) {
  368. if (res == '401' || res == 401) {
  369. window.location.href = '/thmz/login/view'
  370. return;
  371. }
  372. var ress = eval(res);
  373. if (ress.code == -1) {
  374. if (ress.message != null && ress.message != '') {
  375. new PNotify({
  376. title: '错误提示',
  377. text: ress.message,
  378. type: 'error',
  379. hide: true,
  380. styling: 'bootstrap3'
  381. });
  382. }
  383. return {
  384. "total": 0,//总页数
  385. "rows": {} //数据
  386. };
  387. }
  388. // if(ress.pageViewVo.total==0){
  389. // $("#cardNo").val(null);
  390. // $("#name").val(null);
  391. // }
  392. return {
  393. "total": ress.pageViewVo.total,//总页数
  394. "rows": ress.pageViewVo.data //数据
  395. };
  396. },
  397. /**
  398. * @param {点击列的 field 名称} field
  399. * @param {点击列的 value 值} value
  400. * @param {点击列的整行数据} row
  401. * @param {td 元素} $element
  402. */
  403. onClickCell: function (field, value, row, $element) {
  404. var cardNo = $("#cardNo").val();
  405. if (cardNo == '120' && field == 'name' && (payMarkGroup == 0 || payMarkGroup == 1)) {
  406. $element.attr('contenteditable', true);
  407. $element.html(null);
  408. $element.focus();
  409. $element.blur(function () {
  410. var index = $element.parent().data('index');
  411. var tdValue = $element.html();
  412. saveData(index, field, tdValue, row, $table_1);
  413. })
  414. }
  415. },
  416. });
  417. }
  418. /**
  419. * 更新病人缴费记录病人姓名
  420. * @param index
  421. * @param field
  422. * @param value
  423. * @param row
  424. */
  425. function saveData(index, field, value, row, table) {
  426. $.ajax({
  427. type: "POST",
  428. url: '/thmz/changePatientIdName',
  429. contentType: "application/json;charset=UTF-8",
  430. dataType: "json",
  431. data: JSON.stringify({"patientId": row.patientId, "times": row.times, "name": value}),
  432. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  433. async: false,
  434. success: function (res) {
  435. if (res == '401' || res == 401) {
  436. window.location.href = '/thmz/login/view'
  437. return;
  438. }
  439. if (res.code == 0) {
  440. table.bootstrapTable('updateCell', {
  441. index: index, //行索引
  442. field: field, //列名
  443. value: value //cell值
  444. })
  445. } else {
  446. table.bootstrapTable('updateCell', {
  447. index: index, //行索引
  448. field: field, //列名
  449. value: row.name //cell值
  450. })
  451. errorMesage(res);
  452. }
  453. }
  454. });
  455. }
  456. /**
  457. * 构建列表查询参数
  458. * @param params
  459. * @returns {{mzChargeDetail: {patientId: string | number | string[] | undefined | jQuery, warnDept: string | number | string[] | undefined | jQuery, doctorCode: string | number | string[] | undefined | jQuery, name: string | number | string[] | undefined | jQuery, payMark: number}, beginTime: Date, endTime: Date, pageSize: *, pageIndex: number}}
  460. */
  461. function queryParams(params) {
  462. var rePortRangeArr = getRePortRangeArr();
  463. var payMarkGroup = getIndex("pay_mark_group");
  464. var temp = {
  465. mzChargeDetail: {
  466. patientId: $("#patientId").val(),
  467. warnDept: $("#deptNoParam").val(),
  468. doctorCode: $("#doctorParam").val(),
  469. name: $("#name").val(),
  470. payMark: 5
  471. },
  472. beginTime: new Date(rePortRangeArr[0]),
  473. endTime: new Date(rePortRangeArr[1]),
  474. pageSize: params.limit, //页面大小
  475. pageIndex: params.offset / params.limit, //页码
  476. serialNo: $("#serialNo").val(),
  477. ownData: $('#ownData').is(':checked') ? 0 : 1,
  478. };
  479. if (payMarkGroup == 1) {
  480. temp.mzChargeDetail.payMark = 0;
  481. } else if (payMarkGroup == 2) {
  482. temp.mzChargeDetail.payMark = 1;
  483. }
  484. return temp;
  485. };
  486. function initChargeDetailTable() {
  487. initChargeDetailTablePublic('/thmz/getMzChargeDetailByBillItem', $('#charge_detail_table'), queryParamsForDetail);
  488. }
  489. function initMzChargeDetailByBillItem(flag) {
  490. if (flag) {
  491. $("#refund_bill_item_group").removeClass("hide").addClass("in");
  492. if ($("#plusOrMinus").hasClass("fa-plus")) {
  493. $("#plusOrMinus").removeClass("fa-plus").addClass("fa-minus");
  494. initChargeDetailTablePublic('/thmz/getNewListForRefundFeeByBillItem', $('#refund_fee_bill_table'), queryParamsForRefundByBillItem);
  495. } else if ($("#plusOrMinus").hasClass("fa-minus")) {
  496. $("#plusOrMinus").removeClass("fa-minus").addClass("fa-plus");
  497. $("#refund_bill_item_group").removeClass("in").addClass("hide");
  498. $('#refund_fee_bill_table').bootstrapTable("destroy");
  499. }
  500. } else {
  501. initChargeDetailTablePublic('/thmz/getNewListForRefundFeeByBillItem', $('#refund_fee_bill_table'), queryParamsForRefundByBillItem);
  502. }
  503. }
  504. /**
  505. * 初始化收费明细表格
  506. */
  507. function initChargeDetailTablePublic(url, obj, params) {
  508. $(obj).bootstrapTable("destroy");
  509. $(obj).bootstrapTable({
  510. url: url, //请求后台的URL(*)
  511. method: 'post', //请求方式(*)
  512. toolbar: '#toolbar', //工具按钮用哪个容器
  513. striped: true, //是否显示行间隔色
  514. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  515. pagination: false, //是否显示分页(*)
  516. sortable: true, //是否启用排序
  517. sortOrder: "asc", //排序方式
  518. // sortName: 'orderNo', //排序字段
  519. queryParams: params, //传递参数(*)
  520. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  521. pageNumber: 1, //初始化加载第一页,默认第一页
  522. pageSize: 10, //每页的记录行数(*)
  523. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  524. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  525. strictSearch: true,
  526. showColumns: false, //是否显示所有的列
  527. showRefresh: false, //是否显示刷新按钮
  528. minimumCountColumns: 2, //最少允许的列数
  529. clickToSelect: true, //是否启用点击选中行
  530. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  531. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  532. cardView: false, //是否显示详细视图
  533. detailView: false,
  534. //rowStyle:rowStyle,//通过自定义函数设置行样式
  535. ajaxOptions: {
  536. headers: {
  537. 'Accept': 'application/json',
  538. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  539. }
  540. },
  541. columns: [
  542. // {
  543. // checkbox: true
  544. // },
  545. {
  546. field: 'orderNo',
  547. title: '处方号',
  548. align: "center",
  549. valign: 'middle',
  550. formatter: function (value, row, index) {
  551. return Math.abs(value);
  552. }
  553. }, {
  554. field: 'chargeItemCode',
  555. title: '编码',
  556. align: "center",
  557. valign: 'middle',
  558. }, {
  559. field: 'tcName',
  560. title: '项目',
  561. align: "center",
  562. valign: 'middle',
  563. },
  564. // {
  565. // field: 'times',
  566. // title: '规格',
  567. // align: "center",
  568. // valign: 'middle',
  569. // },
  570. {
  571. field: 'quantity',
  572. title: '数量',
  573. align: "center",
  574. valign: 'middle'
  575. }, {
  576. field: 'drugWin',
  577. title: '副数',
  578. align: "center",
  579. valign: 'middle',
  580. }, {
  581. field: 'unitPrice',
  582. title: '单价(元)',
  583. align: "center",
  584. valign: 'middle',
  585. formatter: function (value, row, index) {
  586. return value.toFixed(2);
  587. }
  588. }, {
  589. field: 'amount',
  590. title: '总金额(元)',
  591. align: "center",
  592. valign: 'middle',
  593. formatter: function (value, row, index) {
  594. return value.toFixed(2);
  595. }
  596. }
  597. ],
  598. responseHandler: function (res) {
  599. if (res == '401' || res == 401) {
  600. window.location.href = '/thmz/login/view'
  601. return;
  602. }
  603. var ress = eval(res);
  604. if (ress.code == -1) {
  605. new PNotify({
  606. title: '错误提示',
  607. text: ress.message,
  608. type: 'error',
  609. hide: true,
  610. styling: 'bootstrap3'
  611. });
  612. return {
  613. "total": 0,//总页数
  614. "rows": {} //数据
  615. };
  616. }
  617. return {
  618. //"total": ress.pageViewVo.total,//总页数
  619. "rows": ress.data //数据
  620. };
  621. },
  622. });
  623. }
  624. /**
  625. * 构建列表查询参数
  626. * @param params
  627. * @returns {{patientId: string | number | string[] | undefined | jQuery, times: string | number | string[] | undefined | jQuery, billItemCode: number}}
  628. */
  629. function queryParamsForDetail(params) {
  630. var billItemGroup = getIndex("bill_item_group");
  631. var payMarkGroup = getIndex("pay_mark_group");
  632. var temp = {
  633. patientId: $("#patientIdChargeItem").val(),
  634. times: $("#timesChargeItem").val(),
  635. receiptNo: $("#receiptNoChargeItem").val(),
  636. billItemCode: billItemGroup,
  637. payMark: 5
  638. };
  639. if (payMarkGroup == 1) {
  640. temp.payMark = 0;
  641. } else if (payMarkGroup == 2) {
  642. temp.payMark = 1;
  643. }
  644. return temp;
  645. };
  646. /**
  647. * 构建列表查询参数
  648. * @param params
  649. * @returns {{patientId: string | number | string[] | undefined | jQuery, times: string | number | string[] | undefined | jQuery, billItemCode: number}}
  650. */
  651. function queryParamsForRefundByBillItem(params) {
  652. var billItemGroup = getIndex("refund_bill_item_group");
  653. return {
  654. patientId: $("#patientIdRefund").val(),
  655. times: $("#timesRefund").val(),
  656. receiptNo: $("#receiptNoRefund").val(),
  657. chargeItemCodes: chargeItemCodes,
  658. billItemCode: billItemGroup
  659. };
  660. };
  661. /**
  662. * 卡号输入改变事件
  663. */
  664. function cardNoChange() {
  665. if (window.ActiveXObject || "ActiveXObject" in window) {
  666. $("#cardNo").on('input propertychange', function () {
  667. queryUserInfoByCardNo();
  668. });
  669. } else {
  670. $("#cardNo").on('input οninput', function () {
  671. queryUserInfoByCardNo();
  672. });
  673. }
  674. }
  675. /**
  676. * 卡号有变化后查询病人信息
  677. */
  678. function queryUserInfoByCardNo() {
  679. var cardNo = $("#cardNo").val();
  680. var index = cardNo.indexOf("-");
  681. if (index > 0 && index == cardNo.length - 2) {
  682. $("#patientId").val(cardNo);
  683. initFeeTable();
  684. } else if (cardNo == '120' || cardNo.length == 8) {
  685. $("#cardNo").attr("title", cardNo);
  686. $.ajax({
  687. type: "GET",
  688. url: '/thmz/getByIcCardNo?icCardNo=' + cardNo,
  689. contentType: "application/json;charset=UTF-8",
  690. dataType: "json",
  691. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  692. success: function (res) {
  693. if (res == '401' || res == 401) {
  694. window.location.href = '/thmz/login/view'
  695. return;
  696. }
  697. if (res.code == 0) {
  698. if (res.data != null) {
  699. $("#patientId").val(res.data.patientId);
  700. initFeeTable();
  701. }
  702. } else {
  703. new PNotify({
  704. title: '错误提示',
  705. text: res.message,
  706. type: 'error',
  707. hide: true,
  708. styling: 'bootstrap3'
  709. });
  710. }
  711. }
  712. });
  713. } else if (cardNo == null || cardNo == "") {
  714. cleanParams();
  715. }
  716. }
  717. /**
  718. * 获取按钮组选择的下标
  719. * @param id
  720. * @returns {number}
  721. */
  722. function getIndex(id) {
  723. var index = 0;
  724. var item = $("#" + id).find("button");
  725. for (var i = 0; i <= item.length; i++) {
  726. if ($(item[i]).hasClass("btn-primary")) {
  727. index = i;
  728. break;
  729. }
  730. }
  731. return index;
  732. }
  733. /**
  734. * 获取时间选择器的时间数组
  735. * @returns {string[]}
  736. */
  737. function getRePortRangeArr() {
  738. var rePortRange = $('#reportrange span').html();
  739. var rePortRangeArr = rePortRange.split(" - ");
  740. rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00"
  741. rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59"
  742. return rePortRangeArr;
  743. }
  744. /**
  745. * 打开收费窗口
  746. */
  747. function confirmFeeModal(times, totalCharge, receiptNo) {
  748. $('#payType').selectpicker('val', 1);
  749. $('#payType').selectpicker('refresh');
  750. var data = parseFloat($("#dataIdHaveTally").val());
  751. if (totalCharge != null && totalCharge > 0) {
  752. data = totalCharge;
  753. $("#timesHaveTally").val(times);
  754. $("#receiptNoHaveTally").val(receiptNo);
  755. }
  756. var prevAll = $("#changeAmountParent").prevAll();
  757. while (prevAll.length > 2) {
  758. $("#changeAmountParent").prev().remove();
  759. prevAll = $("#changeAmountParent").prevAll();
  760. }
  761. $("#realMoney").val($("#amountMoneyConfirm").text());
  762. $("#cash").val($("#amountMoneyConfirm").text());
  763. $("#tallyDetailModal").modal('hide');
  764. $("#haveTallyModal").modal('hide');
  765. $("#confirmFeeModal").modal();
  766. $("#amountMoneyConfirm").text(data);
  767. $("#realMoney").val(data);
  768. $("#cash").val(data);
  769. // $("#cash").val(null);
  770. setTimeout(function () {
  771. //默认光标在卡号输入框
  772. $("#cash").focus();
  773. }, 800);
  774. $("#payType").selectpicker('val', 1);
  775. $("#payType").selectpicker('refresh');
  776. $("#changeAmount").val(0.0);
  777. $("#surplusAmount").val(0.0);
  778. }
  779. /**
  780. * 打开收费明细窗口
  781. * @param data
  782. */
  783. function chargeDetailModal(patientId, times, receiptNo) {
  784. $("#patientIdChargeItem").val(patientId);
  785. $("#timesChargeItem").val(times);
  786. $("#receiptNoChargeItem").val(receiptNo);
  787. $("#chargeDetailModal").modal();
  788. initChargeDetailTable();
  789. }
  790. /**
  791. * 病人当前就诊次数的诊断查询
  792. * @param data
  793. */
  794. function diagnoseQuery(patientId, times) {
  795. $.ajax({
  796. type: "POST",
  797. url: '/thmz/getVisitTableByPatientIdAndTimes',
  798. contentType: "application/json;charset=UTF-8",
  799. dataType: "json",
  800. data: JSON.stringify({"patientId": patientId, "times": times}),
  801. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  802. async: false,
  803. success: function (res) {
  804. if (res == '401' || res == 401) {
  805. window.location.href = '/thmz/login/view'
  806. return;
  807. }
  808. if (res.code == 0) {
  809. if (res.data.icdText != null || res.data.icdText != '') {
  810. $("#diagnoseModal").modal();
  811. $("#diagnose").html(res.data.icdText);
  812. } else {
  813. new PNotify({
  814. title: '操作提示',
  815. text: '当前病人诊断未知',
  816. type: 'warn',
  817. styling: 'bootstrap3'
  818. });
  819. }
  820. } else {
  821. errorMesage(res);
  822. }
  823. }
  824. });
  825. }
  826. // /**
  827. // * 打开退费重收明细窗口
  828. // * @param data
  829. // */
  830. // function chargeRefundDetailModal(patientId, times) {
  831. // // $("#patientIdChargeItem").val(patientId);
  832. // // $("#timesChargeItem").val(times);
  833. // initMzChargeDetailByBillItem();
  834. // }
  835. /**
  836. * 初始门诊收银方式下拉选
  837. */
  838. function initChequeType(payType) {
  839. $.ajax({
  840. type: "GET",
  841. url: '/thmz/getAllZdChequeTypeForMz',
  842. dataType: "json",
  843. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  844. success: function (res) {
  845. if (res == '401' || res == 401) {
  846. window.location.href = '/thmz/login/view'
  847. return;
  848. }
  849. var html = '';
  850. $.each(res.data, function (commentIndex, comment) {
  851. html += '<option value="' + comment.code + '">' + comment.name + '</option>';
  852. });
  853. $('#' + payType).empty();
  854. $('#' + payType).html(html);
  855. $('#' + payType).selectpicker('refresh');
  856. $('#' + payType).selectpicker('val', 1);
  857. $('#' + payType).selectpicker('refresh');
  858. }
  859. });
  860. }
  861. /**
  862. * 关闭当前这个付款方式
  863. */
  864. function closeThisParent(obj) {
  865. $(obj).parent().parent().parent().remove();
  866. checkFee(false);
  867. }
  868. /**
  869. * 校验收款金额
  870. * @param flag 是否时提交时候的校验,是的话,如果缴费金额不够,需要返回 false
  871. */
  872. function checkFee(flag) {
  873. var realMoney = parseFloat($("#realMoney").val());
  874. realMoney = realMoney.toFixed(2);
  875. $("#realMoney").val(realMoney)
  876. var arr = $("#payForm").find("div.pay-item");
  877. if (arr.length > 0) {
  878. //非现金收款总金额
  879. var notCashAmount = 0;
  880. //现金收款总额
  881. var cashAmount = 0;
  882. for (var i = 0; i < arr.length; i++) {
  883. var temp = parseFloat($(arr[i]).find("input").val());
  884. if (isNaN(temp)) {
  885. temp = 0;
  886. }
  887. if ($(arr[i]).find("select").val() != 1) {
  888. notCashAmount += temp;
  889. } else {
  890. cashAmount += temp;
  891. }
  892. for (var j = 0; j < arr.length; j++) {
  893. if ($(arr[i]).find("select").val() == $(arr[j]).find("select").val() && i != j) {
  894. new PNotify({
  895. title: '错误提示',
  896. text: "已经存在相同的收款方式,请不要重复添加!",
  897. type: 'error',
  898. hide: true,
  899. styling: 'bootstrap3'
  900. });
  901. return;
  902. }
  903. }
  904. }
  905. if (notCashAmount > realMoney) {
  906. new PNotify({
  907. title: '错误提示',
  908. text: "非现金收款金额不能大于实收金额!",
  909. type: 'error',
  910. hide: true,
  911. styling: 'bootstrap3'
  912. });
  913. $("#addPayType").parent().removeClass("in").addClass("hide");
  914. return;
  915. }
  916. var totalAmount = cashAmount + notCashAmount;
  917. $("#surplusAmount").val(0.0);
  918. if (totalAmount < realMoney) {
  919. if (flag) {
  920. new PNotify({
  921. title: '错误提示',
  922. text: "收款金额不能少于实收金额,请调整收款金额或者增加收款方式!",
  923. type: 'error',
  924. hide: true,
  925. styling: 'bootstrap3'
  926. });
  927. return false;
  928. }
  929. if (totalAmount == 0) {
  930. $("#addPayType").parent().removeClass("in").addClass("hide");
  931. } else {
  932. $("#addPayType").parent().removeClass("hide").addClass("in");
  933. }
  934. $("#changeAmount").val(0.00);
  935. var surplusAmount = realMoney - totalAmount;
  936. $("#surplusAmount").val(surplusAmount.toFixed(2));
  937. return;
  938. }
  939. var changeAmount = 0.00;
  940. if (totalAmount >= realMoney) {
  941. changeAmount = totalAmount - realMoney;
  942. changeAmount = changeAmount.toFixed(2);
  943. $("#changeAmount").val(changeAmount);
  944. $("#addPayType").parent().removeClass("in").addClass("hide");
  945. }
  946. //设置收费首页找零与应收和实收金额
  947. $("#payableAmount").text(realMoney);
  948. $("#paidAmount").text(totalAmount);
  949. $("#changedAmount").text(changeAmount);
  950. }
  951. //计算和设置折扣比例
  952. var amountMoneyConfirm = parseFloat($("#amountMoneyConfirm").text());
  953. var discount = 100;
  954. if (realMoney < amountMoneyConfirm) {
  955. discount = realMoney / amountMoneyConfirm * 100;
  956. }
  957. $("#discount").text(discount.toFixed(2))
  958. return true;
  959. }
  960. /**
  961. * 提示有记账记录
  962. */
  963. function tipHaveTally(data, patientId, times, name, receiptNo) {
  964. if (patientId == null || patientId == "") {
  965. return;
  966. }
  967. $("#patientIdHaveTally").val(patientId);
  968. $("#nameHaveTally").val(name);
  969. $("#dataIdHaveTally").val(data);
  970. $("#timesHaveTally").val(times);
  971. $("#receiptNoHaveTally").val(receiptNo);
  972. // $.ajax({
  973. // type: "GET",
  974. // url: '/thmz/getTallyTotalCharge?patientId=' + patientId,
  975. // contentType: "application/json;charset=UTF-8",
  976. // dataType: "json",
  977. // headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  978. // success: function (res) {
  979. // if (res == '401' || res == 401) {
  980. // window.location.href = '/thmz/login/view'
  981. // return;
  982. // }
  983. // if (res.code == 0) {
  984. // if (res.data != null && res.data > 0) {
  985. // $("#haveTallyModal").modal();
  986. // $("#totalTallyAmount").text(res.data.toFixed(2));
  987. // } else {
  988. // $("#haveTallyModal").modal('hide');
  989. // confirmFeeModal(null,null,null);
  990. // }
  991. // } else {
  992. // new PNotify({
  993. // title: '错误提示',
  994. // text: res.message,
  995. // type: 'error',
  996. // hide: true,
  997. // styling: 'bootstrap3'
  998. // });
  999. // }
  1000. // }
  1001. // });
  1002. confirmFeeModal(null, null, null);
  1003. }
  1004. var $tally_detail_table;
  1005. /**
  1006. * 初始化本院记账明细表格
  1007. */
  1008. function initTallyDetailTable() {
  1009. $("#haveTallyModal").modal('hide');
  1010. var patientId = $("#patientIdHaveTally").val();
  1011. // var name = $("#nameHaveTally").val();
  1012. if (patientId == null || patientId == '') {
  1013. return;
  1014. }
  1015. $("#tallyDetailModal").modal();
  1016. $('#tally_detail_table').bootstrapTable("destroy");
  1017. $tally_detail_table = $('#tally_detail_table').bootstrapTable({
  1018. url: '/thmz/getTallyReceiptSerial?patientId=' + patientId, //请求后台的URL(*)
  1019. method: 'get', //请求方式(*)
  1020. toolbar: '#toolbar', //工具按钮用哪个容器
  1021. striped: true, //是否显示行间隔色
  1022. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  1023. pagination: false, //是否显示分页(*)
  1024. sortable: true, //是否启用排序
  1025. sortOrder: "asc", //排序方式
  1026. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  1027. pageNumber: 1, //初始化加载第一页,默认第一页
  1028. pageSize: 10, //每页的记录行数(*)
  1029. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  1030. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  1031. strictSearch: true,
  1032. showColumns: false, //是否显示所有的列
  1033. showRefresh: false, //是否显示刷新按钮
  1034. minimumCountColumns: 2, //最少允许的列数
  1035. clickToSelect: true, //是否启用点击选中行
  1036. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  1037. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  1038. cardView: false, //是否显示详细视图
  1039. detailView: false,
  1040. //rowStyle:rowStyle,//通过自定义函数设置行样式
  1041. ajaxOptions: {
  1042. headers: {
  1043. 'Accept': 'application/json',
  1044. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  1045. }
  1046. },
  1047. columns: [
  1048. // {
  1049. // checkbox: true,
  1050. // },
  1051. {
  1052. field: 'patientId',
  1053. title: '病人编号',
  1054. align: "center",
  1055. valign: 'middle'
  1056. }, {
  1057. field: 'name',
  1058. title: '病人姓名',
  1059. align: "center",
  1060. valign: 'middle',
  1061. // formatter: function (value, row, index) {
  1062. // return name;
  1063. // }
  1064. }, {
  1065. field: 'times',
  1066. title: '就诊次数',
  1067. align: "center",
  1068. valign: 'middle',
  1069. },
  1070. {
  1071. field: 'totalCharge',
  1072. title: '总费用(元)',
  1073. align: "center",
  1074. valign: 'middle',
  1075. formatter: function (value, row, index) {
  1076. return value.toFixed(2);
  1077. }
  1078. }
  1079. ],
  1080. /**
  1081. * @param {点击列的 field 名称} field
  1082. * @param {点击列的 value 值} value
  1083. * @param {点击列的整行数据} row
  1084. * @param {td 元素} $element
  1085. */
  1086. onClickCell: function (field, value, row, $element) {
  1087. var cardNo = $("#cardNo").val();
  1088. if (cardNo == '120' && field == 'name') {
  1089. $element.attr('contenteditable', true);
  1090. $element.html(null);
  1091. $element.focus();
  1092. $element.blur(function () {
  1093. var index = $element.parent().data('index');
  1094. var tdValue = $element.html();
  1095. saveData(index, field, tdValue, row, $tally_detail_table);
  1096. })
  1097. }
  1098. },
  1099. onDblClickRow: function (row) {
  1100. confirmFeeModal(row.times, row.totalCharge, row.receiptNo);
  1101. },
  1102. responseHandler: function (res) {
  1103. if (res == '401' || res == 401) {
  1104. window.location.href = '/thmz/login/view'
  1105. return;
  1106. }
  1107. var ress = eval(res);
  1108. if (ress.code == -1) {
  1109. new PNotify({
  1110. title: '错误提示',
  1111. text: ress.message,
  1112. type: 'error',
  1113. hide: true,
  1114. styling: 'bootstrap3'
  1115. });
  1116. return {
  1117. "total": 0,//总页数
  1118. "rows": {} //数据
  1119. };
  1120. }
  1121. if (ress.data == null || ress.data.length == 0) {
  1122. $("#tallyDetailModal").modal("hide");
  1123. }
  1124. return {
  1125. "rows": ress.data //数据
  1126. };
  1127. },
  1128. });
  1129. }
  1130. /**
  1131. * 提交缴费申请
  1132. */
  1133. function saveConfirmFee() {
  1134. if (!checkFee(true)) {
  1135. return;
  1136. }
  1137. var jsonData = JSON.parse('{"patientId":"","times":"","receiptNo":"","mzDepositFiles":[]}');
  1138. var patientId = $("#patientIdHaveTally").val();
  1139. var times = $("#timesHaveTally").val();
  1140. var receiptNo = $("#receiptNoHaveTally").val();
  1141. jsonData.patientId = patientId;
  1142. jsonData.times = times;
  1143. jsonData.receiptNo = receiptNo;
  1144. var arr = $("#payForm").find("div.pay-item");
  1145. if (arr.length > 0) {
  1146. for (var i = 0; i < arr.length; i++) {
  1147. var temp = parseFloat($(arr[i]).find("input").val());
  1148. var tempJson = JSON.parse('{"chequeType":"","amount":""}');
  1149. tempJson.chequeType = $(arr[i]).find("select").val();
  1150. if (tempJson.chequeType == "1") {
  1151. temp = temp - $("#changeAmount").val();
  1152. temp = temp.toFixed(2);
  1153. }
  1154. tempJson.amount = temp;
  1155. jsonData.mzDepositFiles[i] = tempJson;
  1156. }
  1157. }
  1158. $.ajax({
  1159. type: "POST",
  1160. url: '/thmz/chargeFee',
  1161. contentType: "application/json;charset=UTF-8",
  1162. dataType: "json",
  1163. data: JSON.stringify(jsonData),
  1164. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1165. success: function (res) {
  1166. if (res == '401' || res == 401) {
  1167. window.location.href = '/thmz/login/view'
  1168. return;
  1169. }
  1170. if (res.code == 0) {
  1171. prn1Print(patientId, times, true, res.receiptNo);
  1172. new PNotify({
  1173. title: '操作提示',
  1174. text: res.message,
  1175. type: 'success',
  1176. hide: true,
  1177. styling: 'bootstrap3'
  1178. });
  1179. $("#confirmFeeModal").modal("hide");
  1180. $("#patientId").val(null);
  1181. $("#cardNo").val(null);
  1182. $("#name").val(null);
  1183. initFeeTable();
  1184. //默认光标在卡号输入框
  1185. $("#cardNo").focus();
  1186. } else {
  1187. new PNotify({
  1188. title: '错误提示',
  1189. text: res.message,
  1190. type: 'error',
  1191. hide: true,
  1192. styling: 'bootstrap3'
  1193. });
  1194. }
  1195. }
  1196. });
  1197. }
  1198. /**
  1199. * 直接打印发票
  1200. * @param patientId
  1201. * @param times
  1202. * @param chargeFeeFlag 收费 退费标记 true 收费和重打发票来源 false 退费来源
  1203. */
  1204. function prn1PrintHand(patientId, times, chargeFeeFlag, receiptNo,realNo) {
  1205. $("#button_"+realNo).css("display","none");
  1206. prn1Print(patientId, times, chargeFeeFlag, receiptNo);
  1207. }
  1208. /**
  1209. * 直接打印发票
  1210. * @param patientId
  1211. * @param times
  1212. * @param chargeFeeFlag 收费 退费标记 true 收费和重打发票来源 false 退费来源
  1213. */
  1214. function prn1Print(patientId, times, chargeFeeFlag, receiptNo) {
  1215. var url = '/thmz/getAllSerialForThisTime?patientId=' + patientId + "&times=" + times + "&receiptNo=" + receiptNo;
  1216. printCommon(url, patientId, times, chargeFeeFlag);
  1217. }
  1218. /**
  1219. * 重打发票
  1220. * @param patientId
  1221. * @param times
  1222. */
  1223. function repPrint(patientId, times, receiptNo) {
  1224. $.ajax({
  1225. type: "GET",
  1226. url: '/thmz/getReceiptForThisTime?patientId=' + patientId + "&times=" + times + "&receiptNo=" + receiptNo,
  1227. contentType: "application/json;charset=UTF-8",
  1228. dataType: "json",
  1229. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1230. success: function (res) {
  1231. if (res == '401' || res == 401) {
  1232. window.location.href = '/thmz/login/view'
  1233. return;
  1234. }
  1235. if (res.code == 0) {
  1236. if (res.data.length == 1) {
  1237. var message = "确定要重新打印发票号码为【" + res.data[0].receiptBill + "】的发票吗?请确认发票打印机即将要打印的发票编号";
  1238. var url = '/thmz/repPrintForThisTime?patientId=' + patientId + "&times=" + times + "&obsolete=0" + "&receiptBill=" + res.data[0].receiptBill;
  1239. confirmMessage(patientId, times, message, url);
  1240. } else {
  1241. $("#tip_message").text("请选择需要重新打印的发票号");
  1242. $("#repPrintModal").modal();
  1243. $("#repPrintTable").html(null);
  1244. for (var i = 0; i < res.data.length; i++) {
  1245. $("<tr><td>" + res.data[i].receiptBill + "</td></tr>").appendTo("#repPrintTable").bind('click', function () {
  1246. $("#repPrintModal").modal("hide");
  1247. var message = "确定要重新打印发票号码为【" + $(this).text() + "】的发票吗?请确认发票打印机即将要打印的发票编号";
  1248. var url = '/thmz/repPrintForThisTime?patientId=' + patientId + "&times=" + times + "&obsolete=0" + "&receiptBill=" + $(this).text();
  1249. confirmMessage(patientId, times, message, url);
  1250. });
  1251. }
  1252. }
  1253. }
  1254. }
  1255. });
  1256. }
  1257. /**
  1258. * 发票重打提示
  1259. * @param patientId
  1260. * @param times
  1261. * @param name
  1262. */
  1263. function confirmMessage(patientId, times, message, url) {
  1264. if (!confirm(message)) {
  1265. return;
  1266. }
  1267. //var url='/thmz/repPrintForThisTime?patientId=' + patientId + "&times=" + times + "&obsolete=0" + "&receiptBill="+receiptBill;
  1268. printCommon(url, patientId, times, true);
  1269. }
  1270. /**
  1271. * 作废重打发票
  1272. * @param patientId
  1273. * @param times
  1274. */
  1275. function obsoleteAndRepPrint(patientId, times, receiptNo) {
  1276. $.ajax({
  1277. type: "GET",
  1278. url: '/thmz/getReceiptForThisTime?patientId=' + patientId + "&times=" + times + "&receiptNo=" + receiptNo,
  1279. contentType: "application/json;charset=UTF-8",
  1280. dataType: "json",
  1281. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1282. success: function (res) {
  1283. if (res == '401' || res == 401) {
  1284. window.location.href = '/thmz/login/view'
  1285. return;
  1286. }
  1287. if (res.code == 0) {
  1288. if (res.data.length == 1) {
  1289. var message = "确定要作废发票号码为【" + res.data[0].receiptBill + "】的发票吗?请确认需要作废发票编号";
  1290. var url = '/thmz/repPrintForThisTime?patientId=' + patientId + "&times=" + times + "&obsolete=1" + "&receiptBill=" + res.data[0].receiptBill;
  1291. confirmMessage(patientId, times, message, url);
  1292. } else {
  1293. $("#tip_message").text("请选择需要作废的发票号");
  1294. $("#repPrintModal").modal();
  1295. $("#repPrintTable").html(null);
  1296. for (var i = 0; i < res.data.length; i++) {
  1297. $("<tr><td>" + res.data[i].receiptBill + "</td></tr>").appendTo("#repPrintTable").bind('click', function () {
  1298. $("#repPrintModal").modal("hide");
  1299. var message = "确定要作废发票号码为【" + $(this).text() + "】的发票吗?请确认需要作废发票编号";
  1300. var url = '/thmz/repPrintForThisTime?patientId=' + patientId + "&times=" + times + "&obsolete=1" + "&receiptBill=" + $(this).text();
  1301. confirmMessage(patientId, times, message, url);
  1302. });
  1303. }
  1304. }
  1305. }
  1306. }
  1307. });
  1308. }
  1309. /**
  1310. * 打印发票通用方法
  1311. * @param patientId
  1312. * @param times
  1313. * @param chargeFeeFlag 收费 退费标记 true 收费和重打发票来源 false 退费来源
  1314. */
  1315. function printCommon(url, patientId, times, chargeFeeFlag) {
  1316. setPrint();
  1317. var height = "93.15mm";
  1318. // if (countReceiot % 2 == 0) {
  1319. // height = "93.2mm";
  1320. // }
  1321. $.ajax({
  1322. type: "GET",
  1323. url: url,
  1324. contentType: "application/json;charset=UTF-8",
  1325. dataType: "json",
  1326. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1327. success: function (res) {
  1328. if (res == '401' || res == 401) {
  1329. window.location.href = '/thmz/login/view'
  1330. return;
  1331. }
  1332. if (res.code == 0) {
  1333. if (res.data == null || res.data.length == 0) {
  1334. return;
  1335. }
  1336. // countReceiot++;
  1337. for (var i = 0; i < res.data.length; i++) {
  1338. LODOP = getLodop();
  1339. var temp = res.data[i].mzReceiptSerial;
  1340. LODOP.PRINT_INITA(6, 0, "120mm", height, "泰和门诊发票打印");
  1341. //设置默认打印机
  1342. LODOP.SET_PRINTER_INDEX(printIndex);
  1343. LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "120mm");
  1344. LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", height);
  1345. LODOP.SET_PRINT_PAGESIZE(1, "120mm", height, "CreateCustomPage");
  1346. LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "门诊发票");//对新建的纸张重命名
  1347. LODOP.SET_PRINT_STYLE("FontSize", 11); //字体大小
  1348. LODOP.ADD_PRINT_TEXT("6mm", "0mm", "45mm", "3mm", "湖南泰和医院管理有限公司");
  1349. LODOP.ADD_PRINT_TEXT("6mm", "59mm", "30mm", "3mm", "机制号:");
  1350. LODOP.ADD_PRINT_TEXT("6mm", "72mm", "20mm", "3mm", temp.serialNo);
  1351. LODOP.ADD_PRINT_TEXT("19mm", "0mm", "35mm", "3mm", temp.receiptBill);
  1352. LODOP.ADD_PRINT_TEXT("25mm", "7mm", "40mm", "3mm", res.mzPatientMi.name);
  1353. LODOP.ADD_PRINT_TEXT("25mm", "61mm", "27mm", "3mm", patientId);
  1354. var feeList = res.data[i].feeList;
  1355. if (feeList != null && feeList.length > 0) {
  1356. var top = 32;
  1357. var left = 6;
  1358. for (var j = 0; j < feeList.length; j++) {
  1359. var row = parseInt(j / 3);
  1360. var tempTop = top + row * 5;
  1361. var tempLeft = left;
  1362. if (j % 3 == 1) {
  1363. tempLeft = left + 30;
  1364. } else if (j % 3 == 2) {
  1365. tempLeft = left + 60;
  1366. }
  1367. LODOP.ADD_PRINT_TEXT(tempTop + "mm", tempLeft + "mm", "30mm", "3mm", feeList[j]);
  1368. }
  1369. }
  1370. // LODOP.ADD_PRINT_TEXT("32mm","25mm","25mm","3mm","诊查费 10.00");
  1371. // LODOP.ADD_PRINT_TEXT("32mm","50mm","25mm","3mm","中成药费30.10");
  1372. // LODOP.ADD_PRINT_TEXT("37mm","25mm","25mm","3mm","治疗费 22.00");
  1373. // LODOP.ADD_PRINT_TEXT("37mm","50mm","25mm","3mm","材料费 14.20");
  1374. // LODOP.ADD_PRINT_TEXT("42mm","25mm","25mm","3mm","西药费 161.20");
  1375. var qyxxs = res.data[i].qyxxs;
  1376. if (qyxxs != null && qyxxs.length > 0) {
  1377. var top = 54;
  1378. for (var j = 0; j < qyxxs.length; j++) {
  1379. var row = j / 3;
  1380. var tempTop = top + row * 10;
  1381. var qyxx = qyxxs[j];
  1382. var arr = qyxx.split(",");
  1383. LODOP.ADD_PRINT_TEXT(tempTop + "mm", "6mm", "50mm", "3mm", "取药窗口:" + arr[0]);
  1384. LODOP.ADD_PRINT_TEXT(tempTop + "mm", "61mm", "50mm", "3mm", "取药号码:" + arr[1]);
  1385. }
  1386. }
  1387. // LODOP.ADD_PRINT_TEXT("54mm","25mm","50mm","3mm","取药窗口:西药房4号窗口");
  1388. // LODOP.ADD_PRINT_TEXT("54mm","80mm","35mm","3mm","取药号码:408392");
  1389. LODOP.ADD_PRINT_TEXT("65mm", "21mm", "60mm", "3mm", temp.totalCharge + " 元");
  1390. LODOP.ADD_PRINT_TEXT("72mm", "19mm", "60mm", "3mm", res.data[i].totalChargeStr);
  1391. LODOP.ADD_PRINT_TEXT("79mm", "0mm", "15mm", "3mm", res.data[i].year);//年
  1392. LODOP.ADD_PRINT_TEXT("79mm", "13mm", "10mm", "3mm", res.data[i].month);//月
  1393. LODOP.ADD_PRINT_TEXT("79mm", "25mm", "10mm", "3mm", res.data[i].day);//日
  1394. LODOP.ADD_PRINT_TEXT("79mm", "53mm", "50mm", "3mm", temp.operatorId);//收费员
  1395. LODOP.PRINT();
  1396. //LODOP.PREVIEW();
  1397. initFeeTable();
  1398. }
  1399. } else if (res.code == -1) {
  1400. if (!chargeFeeFlag) {
  1401. return;
  1402. }
  1403. new PNotify({
  1404. title: '错误提示',
  1405. text: res.message,
  1406. type: 'error',
  1407. hide: true,
  1408. styling: 'bootstrap3'
  1409. });
  1410. }
  1411. }
  1412. });
  1413. }
  1414. //
  1415. // /**
  1416. // * 加载打印机列表
  1417. // * @constructor
  1418. // */
  1419. // function CreatePrinterList() {
  1420. // LODOP = getLodop();
  1421. // LODOP.PRINT_INITA(6, 0, "92mm", "120mm", "泰和门诊发票打印");
  1422. // //获取打印机设备数,用于进行遍历
  1423. // var count = LODOP.GET_PRINTER_COUNT();
  1424. // var html = "";
  1425. // for (var i = 0; i < count; i++) {
  1426. // //根据设备序号获取设备名
  1427. // var msg = LODOP.GET_PRINTER_NAME(i);
  1428. // html += "<option value='" + i + "'>" + msg + "</option>";
  1429. // }
  1430. // $('#printSelect').html(html);
  1431. // $('#printSelect').selectpicker('refresh');
  1432. // $.ajax({
  1433. // type: "GET",
  1434. // url: '/thmz/getLastWindowsByCurrentUser',
  1435. // contentType: "application/json;charset=UTF-8",
  1436. // dataType: "json",
  1437. // headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1438. // success: function (res) {
  1439. // if (res == '401' || res == 401) {
  1440. // window.location.href = '/thmz/login/view'
  1441. // return;
  1442. // }
  1443. // if (res.code == 0) {
  1444. // $('#printSelect').selectpicker('val', res.data.printIndex);
  1445. // $('#printSelect').selectpicker('refresh');
  1446. // printIndex=res.data.printIndex;
  1447. // }
  1448. // }
  1449. // });
  1450. // }
  1451. //
  1452. //
  1453. // /**
  1454. // * 保存窗口号
  1455. // */
  1456. // function saveWindows() {
  1457. // $.ajax({
  1458. // type: "POST",
  1459. // url: '/thmz/saveWindows',
  1460. // contentType: "application/json;charset=UTF-8",
  1461. // dataType: "json",
  1462. // data: JSON.stringify({"windowsNo": $("#windowsNum").val()}),
  1463. // headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1464. // success: function (res) {
  1465. // if (res == '401' || res == 401) {
  1466. // window.location.href = '/thmz/login/view'
  1467. // return;
  1468. // }
  1469. // $('#editWindowsModal').modal('hide');
  1470. // if (res.code == 0) {
  1471. // new PNotify({
  1472. // title: '操作提示',
  1473. // text: res.message,
  1474. // type: 'success',
  1475. // hide: true,
  1476. // styling: 'bootstrap3'
  1477. // });
  1478. // } else {
  1479. // new PNotify({
  1480. // title: '错误提示',
  1481. // text: res.message,
  1482. // type: 'error',
  1483. // hide: true,
  1484. // styling: 'bootstrap3'
  1485. // });
  1486. // }
  1487. // }
  1488. // });
  1489. // }
  1490. //
  1491. //
  1492. //
  1493. // /**
  1494. // * 保存打印机
  1495. // */
  1496. // function savePrint() {
  1497. // $.ajax({
  1498. // type: "POST",
  1499. // url: '/thmz/savePrintIndex',
  1500. // contentType: "application/json;charset=UTF-8",
  1501. // dataType: "json",
  1502. // data: JSON.stringify({"printIndex": $("#printSelect").val()}),
  1503. // headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1504. // success: function (res) {
  1505. // if (res == '401' || res == 401) {
  1506. // window.location.href = '/thmz/login/view'
  1507. // return;
  1508. // }
  1509. // LODOP = getLodop();
  1510. // LODOP.PRINT_INITA(6, 0, "92mm", "120mm", "泰和门诊发票打印");
  1511. // LODOP.SET_PRINTER_INDEX($("#printSelect").val());
  1512. // printIndex=$("#printSelect").val();
  1513. // $('#editPrintModal').modal('hide');
  1514. // if (res.code == 0) {
  1515. // new PNotify({
  1516. // title: '操作提示',
  1517. // text: res.message,
  1518. // type: 'success',
  1519. // hide: true,
  1520. // styling: 'bootstrap3'
  1521. // });
  1522. // } else {
  1523. // new PNotify({
  1524. // title: '错误提示',
  1525. // text: res.message,
  1526. // type: 'error',
  1527. // hide: true,
  1528. // styling: 'bootstrap3'
  1529. // });
  1530. // }
  1531. // }
  1532. // });
  1533. // }
  1534. /**
  1535. * 查询默认打印机
  1536. */
  1537. function setPrint() {
  1538. if (printIndex >= 0) {
  1539. return;
  1540. }
  1541. $.ajax({
  1542. type: "GET",
  1543. url: '/thmz/getLastWindowsByCurrentUser',
  1544. contentType: "application/json;charset=UTF-8",
  1545. dataType: "json",
  1546. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1547. async: false,
  1548. success: function (res) {
  1549. if (res == '401' || res == 401) {
  1550. window.location.href = '/thmz/login/view'
  1551. return;
  1552. }
  1553. if (res.code == 0) {
  1554. printIndex = res.data.printIndex;
  1555. } else {
  1556. printIndex = -1;
  1557. }
  1558. }
  1559. });
  1560. }
  1561. /**
  1562. * 退费操作
  1563. */
  1564. function refundFee(patientId, times, receiptNo, printFlag) {
  1565. if (printFlag == 0) {
  1566. new PNotify({
  1567. title: '错误提示',
  1568. text: '当前病人缴费记录发票还未打印,无法进行退费,请先打印该发票!',
  1569. type: 'error',
  1570. hide: true,
  1571. styling: 'bootstrap3'
  1572. });
  1573. return;
  1574. }
  1575. $("#refundFeePrepare").text(0.00);
  1576. $("#refundFeeDetailModal").modal();
  1577. $("#refund_bill_item_group").removeClass("in").addClass("hide");
  1578. $('#refund_fee_bill_table').bootstrapTable("destroy");
  1579. initRefundFeeDetailTable(patientId, times, receiptNo);
  1580. }
  1581. /**
  1582. * 初始化退费明细表格
  1583. * @param patientId
  1584. * @param times
  1585. * @param receiptNo
  1586. */
  1587. function initRefundFeeDetailTable(patientId, times, receiptNo) {
  1588. $("#patientIdRefund").val(patientId);
  1589. $("#timesRefund").val(times);
  1590. $("#receiptNoRefund").val(receiptNo);
  1591. $('#refund_fee_detail_table').bootstrapTable("destroy");
  1592. $('#refund_fee_detail_table').bootstrapTable({
  1593. url: '/thmz/getRefundFeeDetail', //请求后台的URL(*)
  1594. method: 'post', //请求方式(*)
  1595. toolbar: '#toolbar', //工具按钮用哪个容器
  1596. striped: true, //是否显示行间隔色
  1597. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  1598. pagination: false, //是否显示分页(*)
  1599. sortable: true, //是否启用排序
  1600. sortOrder: "asc", //排序方式
  1601. // sortName: 'orderNo', //排序字段
  1602. queryParams: queryParamsForRefundFee(patientId, times), //传递参数(*)
  1603. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  1604. pageNumber: 1, //初始化加载第一页,默认第一页
  1605. pageSize: 10, //每页的记录行数(*)
  1606. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  1607. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  1608. strictSearch: true,
  1609. showColumns: false, //是否显示所有的列
  1610. showRefresh: false, //是否显示刷新按钮
  1611. minimumCountColumns: 2, //最少允许的列数
  1612. clickToSelect: true, //是否启用点击选中行
  1613. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  1614. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  1615. cardView: false, //是否显示详细视图
  1616. detailView: false,
  1617. //rowStyle:rowStyle,//通过自定义函数设置行样式
  1618. ajaxOptions: {
  1619. headers: {
  1620. 'Accept': 'application/json',
  1621. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  1622. }
  1623. },
  1624. columns: [
  1625. {
  1626. checkbox: true,
  1627. formatter: function (value, row, index) {
  1628. if (row.confirmFlag == 1) {
  1629. return {
  1630. disabled: true, //设置是否可用
  1631. checked: false//设置选中
  1632. }
  1633. }
  1634. if (row.confirmFlag == 3) {
  1635. return {
  1636. disabled: true, //设置是否可用
  1637. checked: true//设置选中
  1638. }
  1639. }
  1640. }
  1641. },
  1642. {
  1643. field: 'orderNo',
  1644. title: '处方号',
  1645. align: "center",
  1646. valign: 'middle',
  1647. formatter: function (value, row, index) {
  1648. return Math.abs(value);
  1649. }
  1650. }, {
  1651. field: '',
  1652. title: '项目号',
  1653. align: "center",
  1654. valign: 'middle',
  1655. formatter: function (value, row, index) {
  1656. return index + 1;
  1657. }
  1658. }, {
  1659. field: 'billItemCode',
  1660. title: '分类名称',
  1661. align: "center",
  1662. valign: 'middle',
  1663. }, {
  1664. field: 'chargeItemCode',
  1665. title: '收费编码',
  1666. align: "center",
  1667. valign: 'middle',
  1668. }, {
  1669. field: 'tcName',
  1670. title: '项目',
  1671. align: "center",
  1672. valign: 'middle',
  1673. },
  1674. {
  1675. field: 'quantity',
  1676. title: '数量',
  1677. align: "center",
  1678. valign: 'middle'
  1679. ,
  1680. formatter: function (value, row, index) {
  1681. return value*row.drugWin;
  1682. }
  1683. }, {
  1684. field: 'unitPrice',
  1685. title: '单价(元)',
  1686. align: "center",
  1687. valign: 'middle',
  1688. formatter: function (value, row, index) {
  1689. return value.toFixed(2);
  1690. }
  1691. }, {
  1692. field: 'amount',
  1693. title: '总金额(元)',
  1694. align: "center",
  1695. valign: 'middle',
  1696. formatter: function (value, row, index) {
  1697. return value.toFixed(2);
  1698. }
  1699. }, {
  1700. field: 'confirmFlag',
  1701. title: '确认标志',
  1702. align: "center",
  1703. valign: 'middle',
  1704. formatter: function (value, row, index) {
  1705. if (value == 0) {
  1706. return "待确认";
  1707. }
  1708. if (value == 1) {
  1709. return "已确认";
  1710. }
  1711. if (value == 3) {
  1712. return "已取消";
  1713. }
  1714. if (value == 4) {
  1715. return "已退费";
  1716. }
  1717. }
  1718. }, {
  1719. field: 'decAmount',
  1720. title: '退药量',
  1721. align: "center",
  1722. valign: 'middle',
  1723. // formatter: function (value, row, index) {
  1724. // return value.toFixed(2);
  1725. // }
  1726. }, {
  1727. field: 'execDept',
  1728. title: '确认科室',
  1729. align: "center",
  1730. valign: 'middle'
  1731. }, {
  1732. field: 'confirmTime',
  1733. title: '确认时间',
  1734. align: "center",
  1735. valign: 'middle',
  1736. formatter: function (value, row, index) {
  1737. if (value != null && value != "") {
  1738. return format(value, "yyyy-MM-dd HH:mm:ss");
  1739. }
  1740. return "";
  1741. }
  1742. }
  1743. ],
  1744. //点击全选框时触发的操作
  1745. onCheckAll: function (rows) {
  1746. getRefundFee();
  1747. },
  1748. //取消所有
  1749. onUncheckAll: function (row) {
  1750. getRefundFee();
  1751. },
  1752. //点击每一个单选框时触发的操作
  1753. onCheck: function (row) {
  1754. getRefundFee();
  1755. },
  1756. //取消每一个单选框时对应的操作;
  1757. onUncheck: function (row) {
  1758. getRefundFee();
  1759. },
  1760. responseHandler: function (res) {
  1761. if (res == '401' || res == 401) {
  1762. window.location.href = '/thmz/login/view'
  1763. return;
  1764. }
  1765. var ress = eval(res);
  1766. if (ress.code == -1) {
  1767. new PNotify({
  1768. title: '错误提示',
  1769. text: ress.message,
  1770. type: 'error',
  1771. hide: true,
  1772. styling: 'bootstrap3'
  1773. });
  1774. return {
  1775. "total": 0,//总页数
  1776. "rows": {} //数据
  1777. };
  1778. }
  1779. return {
  1780. //"total": ress.pageViewVo.total,//总页数
  1781. "rows": ress.data //数据
  1782. };
  1783. },
  1784. });
  1785. }
  1786. /**
  1787. * 退费列表参数
  1788. * @param patientId
  1789. * @param times
  1790. * @returns {{patientId: *, times: *}}
  1791. */
  1792. function queryParamsForRefundFee(patientId, times) {
  1793. var temp = {
  1794. patientId: patientId,
  1795. times: times,
  1796. };
  1797. return temp;
  1798. };
  1799. /**
  1800. * 每次选择费用清单明细时计算实际应退金额
  1801. */
  1802. function getRefundFee() {
  1803. extracted();
  1804. if(chargeItemCodes==null){
  1805. $("#refundFeePrepare").text(0.00);
  1806. return;
  1807. }
  1808. $.ajax({
  1809. type: "POST",
  1810. url: '/thmz/getNewListForRefundFee',
  1811. contentType: "application/json;charset=UTF-8",
  1812. dataType: "json",
  1813. data: JSON.stringify({
  1814. patientId: $("#patientIdRefund").val(),
  1815. times: $("#timesRefund").val(),
  1816. chargeItemCodes: chargeItemCodes
  1817. }),
  1818. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  1819. success: function (res) {
  1820. if (res == '401' || res == 401) {
  1821. window.location.href = '/thmz/login/view'
  1822. return;
  1823. }
  1824. if (res.code == 0) {
  1825. $("#refundFeePrepare").text(res.pageViewVo.data[0].refundFee.toFixed(2));
  1826. } else {
  1827. new PNotify({
  1828. title: '错误提示',
  1829. text: res.message,
  1830. type: 'error',
  1831. hide: true,
  1832. styling: 'bootstrap3'
  1833. });
  1834. }
  1835. }
  1836. });
  1837. }
  1838. /**
  1839. * 发起预退费
  1840. */
  1841. function readyRefundFee() {
  1842. extracted();
  1843. $("#refundFeeModal").modal();
  1844. initRefundChargeDetailTable(chargeItemCodes);
  1845. $("#refundFeeDetailModal").modal("hide");
  1846. }
  1847. /**
  1848. * 获取预退费金额
  1849. * @returns {*}
  1850. */
  1851. function extracted() {
  1852. var allSelecteds = $('#refund_fee_detail_table').bootstrapTable('getAllSelections');
  1853. chargeItemCodes = null;
  1854. if (allSelecteds != null && allSelecteds.length > 0) {
  1855. for (var i = 0; i < allSelecteds.length; i++) {
  1856. var temp = allSelecteds[i].orderNo + "_" + allSelecteds[i].itemNo + "_" + allSelecteds[i].chargeItemCode;
  1857. if (chargeItemCodes == null) {
  1858. chargeItemCodes = temp;
  1859. } else {
  1860. chargeItemCodes += "," + temp;
  1861. }
  1862. }
  1863. }
  1864. }
  1865. /**
  1866. * 初始化退费重收费明细表格
  1867. */
  1868. function initRefundChargeDetailTable(chargeItemCodes) {
  1869. $('#refund_fee_table').bootstrapTable("destroy");
  1870. $('#refund_fee_table').bootstrapTable({
  1871. url: '/thmz/getNewListForRefundFee', //请求后台的URL(*)
  1872. method: 'post', //请求方式(*)
  1873. toolbar: '#toolbar', //工具按钮用哪个容器
  1874. striped: true, //是否显示行间隔色
  1875. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  1876. pagination: false, //是否显示分页(*)
  1877. sortable: true, //是否启用排序
  1878. sortOrder: "asc", //排序方式
  1879. // sortName: 'orderNo', //排序字段
  1880. queryParams: queryParamsForRefundDetail(chargeItemCodes), //传递参数(*)
  1881. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  1882. pageNumber: 1, //初始化加载第一页,默认第一页
  1883. pageSize: 10, //每页的记录行数(*)
  1884. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  1885. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  1886. strictSearch: true,
  1887. showColumns: false, //是否显示所有的列
  1888. showRefresh: false, //是否显示刷新按钮
  1889. minimumCountColumns: 2, //最少允许的列数
  1890. clickToSelect: true, //是否启用点击选中行
  1891. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  1892. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  1893. cardView: false, //是否显示详细视图
  1894. detailView: false,
  1895. //rowStyle:rowStyle,//通过自定义函数设置行样式
  1896. ajaxOptions: {
  1897. headers: {
  1898. 'Accept': 'application/json',
  1899. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  1900. }
  1901. },
  1902. columns: [
  1903. // {
  1904. // checkbox: true
  1905. // },
  1906. {
  1907. field: 'patientId',
  1908. title: '患者编号',
  1909. align: "center",
  1910. valign: 'middle',
  1911. }, {
  1912. field: 'name',
  1913. title: '患者姓名',
  1914. align: "center",
  1915. valign: 'middle',
  1916. }, {
  1917. field: 'oriAmount',
  1918. title: '已收金额(元)',
  1919. align: "center",
  1920. valign: 'middle',
  1921. }, {
  1922. field: 'refundFee',
  1923. title: '应退金额(元)',
  1924. align: "center",
  1925. valign: 'middle'
  1926. }, {
  1927. field: 'amount',
  1928. title: '应收金额(元)',
  1929. align: "center",
  1930. valign: 'middle',
  1931. formatter: function (value, row, index) {
  1932. return Math.abs(value);
  1933. }
  1934. }, {
  1935. title: '操作',
  1936. align: "center",
  1937. valign: 'middle',
  1938. // sortable: true,
  1939. formatter: function (value, row, index) {
  1940. var str = "";
  1941. if (row.amount == 0 || row.amount == null || row.amount == undefined) {
  1942. str = '<button type="button" class="can-not-used" title="费用明细" ><i id="plusOrMinus" class="fa fa-plus"></i></button>';
  1943. } else {
  1944. str = '<button type="button" class="registration-no-color-foot-button" title="费用明细" onclick="initMzChargeDetailByBillItem(true)"><i id="plusOrMinus" class="fa fa-plus"></i></button>';
  1945. }
  1946. str += '<button type="button" class="registration-no-color-foot-button"title="确认退费" onclick="saveRefundFee()"><i class="fa fa-check"></i></button>';
  1947. return str;
  1948. }
  1949. }
  1950. ],
  1951. responseHandler: function (res) {
  1952. if (res == '401' || res == 401) {
  1953. window.location.href = '/thmz/login/view'
  1954. return;
  1955. }
  1956. var ress = eval(res);
  1957. if (ress.code == -1) {
  1958. new PNotify({
  1959. title: '错误提示',
  1960. text: ress.message,
  1961. type: 'error',
  1962. hide: true,
  1963. styling: 'bootstrap3'
  1964. });
  1965. return {
  1966. "total": 0,//总页数
  1967. "rows": {} //数据
  1968. };
  1969. }
  1970. $("#oriAmount").text(ress.pageViewVo.data[0].oriAmount);
  1971. $("#newAmount").text(ress.pageViewVo.data[0].amount);
  1972. $("#refundAmount").text(ress.pageViewVo.data[0].refundFee);
  1973. return {
  1974. "total": ress.pageViewVo.total,//总页数
  1975. "rows": ress.pageViewVo.data //数据
  1976. };
  1977. },
  1978. });
  1979. }
  1980. /**
  1981. * 构建列表查询参数
  1982. * @param chargeItemCodes
  1983. * @returns {{patientId: string | number | string[] | undefined | jQuery, times: string | number | string[] | undefined | jQuery, billItemCode: number}}
  1984. */
  1985. function queryParamsForRefundDetail(chargeItemCodes) {
  1986. return {
  1987. patientId: $("#patientIdRefund").val(),
  1988. times: $("#timesRefund").val(),
  1989. chargeItemCodes: chargeItemCodes
  1990. };
  1991. };
  1992. /**
  1993. * 关闭预退费窗口
  1994. */
  1995. function closeRefundFeeDetailModal() {
  1996. $("#refundFeeDetailModal").modal("hide");
  1997. }
  1998. /**
  1999. * 提交退费操作
  2000. */
  2001. function saveRefundFee() {
  2002. var params = queryParamsForRefundByBillItem(null);
  2003. $.ajax({
  2004. type: "POST",
  2005. url: '/thmz/saveRefundFee',
  2006. contentType: "application/json;charset=UTF-8",
  2007. dataType: "json",
  2008. data: JSON.stringify(params),
  2009. headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
  2010. success: function (res) {
  2011. if (res == '401' || res == 401) {
  2012. window.location.href = '/thmz/login/view'
  2013. return;
  2014. }
  2015. if (res.code == 0) {
  2016. new PNotify({
  2017. title: '操作提示',
  2018. text: res.message,
  2019. type: 'success',
  2020. hide: true,
  2021. styling: 'bootstrap3'
  2022. });
  2023. $("#refundFeeModal").modal("hide");
  2024. if (res.times > 0) {
  2025. prn1Print(res.patientId, res.times, false, 1);
  2026. } else {
  2027. initFeeTable();
  2028. }
  2029. } else {
  2030. new PNotify({
  2031. title: '错误提示',
  2032. text: res.message,
  2033. type: 'error',
  2034. hide: true,
  2035. styling: 'bootstrap3'
  2036. });
  2037. }
  2038. }
  2039. });
  2040. }
  2041. /**
  2042. * 清空查询条件
  2043. */
  2044. function cleanParams() {
  2045. $("#deptNoParam").selectpicker('val', null);//默认选中
  2046. $("#deptNoParam").selectpicker('refresh');
  2047. $("#doctorParam").selectpicker('val', null);//默认选中
  2048. $("#doctorParam").selectpicker('refresh');
  2049. $("#cardNo").val(null);
  2050. $("#name").val(null);
  2051. $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
  2052. $("#patientId").val(null);
  2053. //默认光标在卡号输入框
  2054. $("#cardNo").focus();
  2055. $("#serialNo").val(null);
  2056. $("#ownData").removeAttr("checked");
  2057. }