drug_storage.js 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188
  1. //@ sourceURL=drug_storage.js
  2. let groupNo = window.localStorage["groupYk"];//药库编码
  3. var hospitalName ='长沙泰和医院'
  4. $(function () {
  5. getAjaxRequst("/thmz/queryHospitalName",{},true,function (res) {
  6. hospitalName = res.data
  7. $('.hospitalName').text(hospitalName)
  8. })
  9. init_daterangepicker();
  10. $('.datetime').datetimepicker({
  11. language: 'zh-CN',
  12. format: 'yyyy-mm-dd',
  13. autoclose: true,
  14. minView: 2,
  15. startView: 2,
  16. });
  17. initSearchList('<div id="medicinePopoverContent"><table id="tb_table_medicine"></table></div>',
  18. 'drugName', 600, 250);
  19. initSearchList('<div id="medicinePopoverContent"><table id="tb_table_drug1"></table></div>',
  20. 'drugName1', 600, 250);
  21. initSearchList('<div id="medicinePopoverContent"><table id="tb_table_bar1"></table></div>',
  22. 'barCode1', 600, 250);
  23. initSearchList('<div id="employeePopoverContent"><table id="tb_table_employee"></table></div>',
  24. 'purchaserNameLabel', 300, 250);
  25. initSearchList('<div id="supplyPopoverContent"><table id="tb_table_supply"></table></div>',
  26. ['supplyNameLabel', 'supplyNameSearch'], 300, 250);
  27. $('#drugName').on('input', debounce(e=>{
  28. inputDrugName()
  29. },500));
  30. $('#drugName1').on('input', debounce(e=>{
  31. inputDrugName1()
  32. },500));
  33. //商品码检索药品
  34. $('#barCode1').on('input', debounce(e=>{
  35. inputBarCode()
  36. },500));
  37. function inputDrugName() {
  38. showDrugPopover({
  39. method: 'POST',
  40. data: JSON.stringify({
  41. searchText: $("#drugName").val() == "" ? null : $("#drugName").val(),
  42. groupNo: groupNo,
  43. delFlag: 0
  44. }),
  45. url: '/thmz/getYpZdDictBase',
  46. columns: [
  47. {
  48. field: 'stockAmount',
  49. title: '库存',
  50. align: "center",
  51. valign: 'middle',
  52. formatter: function (value, row, index) {
  53. return value.toFixed(0);
  54. }
  55. }],
  56. onClickRow: function (row, $element) {
  57. $('#drugName').webuiPopover('hide');
  58. $('#chargeCode').val(row['code']);
  59. $('#serial').val(row['serial']);
  60. $('#drugName').val(row['name']);
  61. $('#specification').val(row['specification']);
  62. $('#packRetprice').val(row['packRetprice']);
  63. $('#buyPrice').val(row['buyPrice']);
  64. $('#manufactoryName').val(row['manufactoryName']);
  65. $('#manuCode').val(row['manuCode']);
  66. $('#licenseNo').val(row['pzwh']);
  67. $('#nationalCode').val(row['nationalCode']);
  68. }
  69. });
  70. };
  71. function inputDrugName1() {
  72. showDrugPopoverNew({
  73. method: 'POST',
  74. data: JSON.stringify({
  75. searchText: $("#drugName1").val() == "" ? null : $("#drugName1").val(),
  76. groupNo: groupNo,
  77. delFlag: 0
  78. }),
  79. url: '/thmz/getYpZdDictBase',
  80. columns: [
  81. {
  82. field: 'barCode',
  83. title: '商品码',
  84. align: "center",
  85. valign: 'middle'
  86. },{
  87. field: 'stockAmount',
  88. title: '库存',
  89. align: "center",
  90. valign: 'middle',
  91. formatter: function (value, row, index) {
  92. return value.toFixed(0);
  93. }
  94. }],
  95. onClickRow: function (row, $element) {
  96. $('#drugName1').webuiPopover('hide');
  97. $('#chargeCode1').val(row['code']);
  98. $('#serial1').val(row['serial']);
  99. $('#drugName1').val(row['name']);
  100. $('#barCode1').val(row['barCode']);
  101. $('#specification1').val(row['specification']);
  102. $('#packRetprice1').val(row['packRetprice']);
  103. $('#buyPrice1').val(row['buyPrice']);
  104. $('#manufactoryName1').val(row['manufactoryName']);
  105. $('#manuCode1').val(row['manuCode']);
  106. $('#licenseNo1').val(row['pzwh']);
  107. $('#nationalCode1').val(row['nationalCode']);
  108. $('#buyAmt1').val(null);
  109. $('#buyValue1').val(null);
  110. $('#manuNo1').val('');
  111. $('#producingDate1').val(null);
  112. $('#effDate1').val(null);
  113. }
  114. }, 'tb_table_drug1');
  115. };
  116. //商品码检索药品明细
  117. function inputBarCode() {
  118. showDrugPopoverNew({
  119. method: 'POST',
  120. data: JSON.stringify({
  121. searchText: $("#barCode1").val() == "" ? null : $("#barCode1").val(),
  122. groupNo: groupNo,
  123. delFlag: 0
  124. }),
  125. url: '/thmz/getYpZdDictBaseByBarCode',
  126. columns: [
  127. {
  128. field: 'barCode',
  129. title: '商品码',
  130. align: "center",
  131. valign: 'middle'
  132. },{
  133. field: 'stockAmount',
  134. title: '库存',
  135. align: "center",
  136. valign: 'middle',
  137. formatter: function (value, row, index) {
  138. if(!isEmpty(value)){
  139. return value.toFixed(0);
  140. } else {
  141. return value;
  142. }
  143. }
  144. }],
  145. onClickRow: function (row, $element) {
  146. $('#barCode1').webuiPopover('hide');
  147. $('#chargeCode1').val(row['code']);
  148. $('#serial1').val(row['serial']);
  149. $('#drugName1').val(row['name']);
  150. $('#barCode1').val(row['barCode']);
  151. $('#specification1').val(row['specification']);
  152. $('#packRetprice1').val(row['packRetprice']);
  153. $('#buyPrice1').val(row['buyPrice']);
  154. $('#manufactoryName1').val(row['manufactoryName']);
  155. $('#manuCode1').val(row['manuCode']);
  156. $('#licenseNo1').val(row['pzwh']);
  157. $('#nationalCode1').val(row['nationalCode']);
  158. $('#buyAmt1').val(null);
  159. $('#buyValue1').val(null);
  160. $('#manuNo1').val('');
  161. $('#producingDate1').val(null);
  162. $('#effDate1').val(null);
  163. }
  164. }, 'tb_table_bar1');
  165. };
  166. $('#purchaserNameLabel').on('input focus', function (e) {
  167. showEmployeePopover({
  168. data: {
  169. searchText: $("#purchaserNameLabel").val() == "" ? null : $("#purchaserNameLabel").val(),
  170. },
  171. onClickRow: function (row, $element) {
  172. $('#purchaserNameLabel').webuiPopover('hide');
  173. $('#purchaser').val(row['employeeCode']);
  174. $('#purchaserNameLabel').val(row['employeeName']);
  175. }
  176. });
  177. });
  178. $('#supplyNameLabel').on('input focus', function (e) {
  179. showSupplyPopover({
  180. data: {
  181. searchText: $("#supplyNameLabel").val() == "" ? null : $("#supplyNameLabel").val(),
  182. },
  183. onClickRow: function (row, $element) {
  184. $('#supplyNameLabel').webuiPopover('hide');
  185. $('#supplyCode').val(row['code']);
  186. $('#supplyNameLabel').val(row['name']);
  187. }
  188. });
  189. });
  190. $('#supplyNameSearch').on('input focus', function (e) {
  191. showSupplyPopover({
  192. data: {
  193. searchText: $("#supplyNameSearch").val() == "" ? null : $("#supplyNameSearch").val(),
  194. },
  195. onClickRow: function (row, $element) {
  196. $('#supplyNameSearch').webuiPopover('hide');
  197. $('#supplyCodeSearch').val(row['code']);
  198. $('#supplyNameSearch').val(row['name']);
  199. }
  200. });
  201. });
  202. $('#buyAmt').on('input focus', function (e) {
  203. $("#buyValue").val((e.target.value * $("#buyPrice").val()).toFixed(2));
  204. });
  205. $('#buyPrice').on('input focus', function (e) {
  206. $("#buyValue").val((e.target.value * $("#buyAmt").val()).toFixed(2));
  207. });
  208. $('#buyAmt1').on('input focus', function (e) {
  209. $("#buyValue1").val((e.target.value * $("#buyPrice1").val()).toFixed(2));
  210. });
  211. $('#buyPrice1').on('input focus', function (e) {
  212. $("#buyValue1").val((e.target.value * $("#buyAmt1").val()).toFixed(2));
  213. });
  214. $('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
  215. $(".selectpicker").selectpicker();
  216. if (groupNo == null) {
  217. return errorMesageSimaple('药库参数未设置,请在药品管理参数设置中设置');
  218. }
  219. $("#btn_query").click(function (t) {
  220. initRecordTable();
  221. });
  222. $("#btn_record").click(function () {
  223. $("#recordModal").modal("show");
  224. initRecordTable();
  225. });
  226. initDetailed();
  227. initBar();
  228. $("#addDetailed").click(function () {
  229. $("#detailedFormModal").modal("hide");
  230. if ($("#checkerName").val() == '') {//新增
  231. let ids = $("#tb_table_detailed").jqGrid("getDataIDs");//得到jqgrid当前行数
  232. let rowid = Math.max.apply(Math, ids);//获得当前最大行号
  233. let formData = {};
  234. let t = $("#detailedForm").serializeArray();
  235. $.each(t, function () {
  236. formData[this.name] = this.value
  237. });
  238. $("#tb_table_detailed").addRowData(rowid + 1, formData, 'first');
  239. $("#tb_table_detailed").jqGrid('editRow', rowid + 1);
  240. } else {//修改
  241. var ids = $("#tb_bar_code").jqGrid("getDataIDs");//得到jqgrid当前行数
  242. var rowid = Math.max.apply(Math,ids);//获得当前最大行号
  243. if(rowid == "-Infinity"){
  244. rowid = 0;
  245. }
  246. $("#tb_bar_code").saveRow(rowid);//取消最后一行的编辑状态
  247. let form = $("#detailedForm").serializeObject();
  248. form.inDocuNo = $("#inDocuNoLabel").val();
  249. form.purchaser = $("#purchaser").val();
  250. form.supplyCode = $("#supplyCode").val();
  251. form.groupNo = groupNo;
  252. form.ypManuBarCodes = $("#tb_bar_code").getRowData();
  253. request({
  254. url: '/modifYpInDetl',
  255. method: 'POST',
  256. data: JSON.stringify(form)
  257. }).then((res) => {
  258. successMesage(res);
  259. loadDetailed(form.inDocuNo);
  260. });
  261. }
  262. });
  263. $("#btn_save").on('click', function () {
  264. let ypInDetlVoList = $("#tb_table_detailed").jqGrid("getRowData");
  265. if (ypInDetlVoList == null || ypInDetlVoList.length === 0) {
  266. return errorMesageSimaple('没有可保存数据!');
  267. }
  268. if ($("#purchaser").val() === "" || $("#supplyCode").val() === "") {
  269. return errorMesageSimaple('采购人和供应商不能为空!');
  270. }
  271. ypInDetlVoList[0].purchaser = $("#purchaser").val();
  272. ypInDetlVoList[0].supplyCode = $("#supplyCode").val();
  273. ypInDetlVoList[0].inDocuNo = $("#inDocuNoLabel").val();
  274. ypInDetlVoList[0].groupNo = groupNo;
  275. ypInDetlVoList[0].ypManuBarCodes = $("#tb_bar_code").getRowData();
  276. request({
  277. url: '/saveYpInDetlList',
  278. method: 'POST',
  279. data: JSON.stringify(ypInDetlVoList)
  280. }).then((res) => {
  281. initValue();
  282. successMesage(res);
  283. });
  284. });
  285. $("#btn_clean").on('click', function () {
  286. initValue();
  287. });
  288. $("#btn_audit").on('click', function () {
  289. let ypInDetlVoList = $("#tb_table_detailed").jqGrid("getRowData");
  290. if (isEmpty($("#inDocuNoLabel").val()) || ypInDetlVoList == null || ypInDetlVoList.length === 0) {
  291. return errorMesageSimaple('没有可审核的数据!');
  292. }
  293. if (ypInDetlVoList[0]['confirmFlag'] === '1') {
  294. return errorMesageSimaple('当前入库单已审核通过,请勿重复审核!');
  295. }
  296. $("#btn_audit").attr("disabled",true);
  297. request({
  298. url: '/auditYpInDetl',
  299. method: 'GET',
  300. data: {
  301. inDocuNo: $("#inDocuNoLabel").val()
  302. }
  303. }).then((res) => {
  304. if(res.code == 0){
  305. successMesage(res);
  306. initValue();
  307. }
  308. }).catch((res) => {
  309. $("#btn_audit").attr("disabled",false);
  310. });
  311. });
  312. $("#btn_daily").click(function (t) {
  313. setPrintHtml();
  314. });
  315. // 确认药品追溯码集合
  316. $("#saveBarList").click(function () {
  317. if(barC === 1){
  318. return errorMesageSimaple('当前扫码未进行追溯码检查,请检查!');
  319. }
  320. // 有重复错误追溯码信息
  321. if(barFor){
  322. return errorMesageSimaple('当前扫码有重复或者错误追溯码信息,请检查!');
  323. }
  324. let barList = $("#drugTracCodgStr").val();
  325. let rowid = $('#rowid2').val();
  326. let buyAmt2 = $("#buyAmt2").val();
  327. if(!isEmpty(barList)){
  328. let str = removeLastComma(barList.replaceAll('\n', ','), ',');
  329. let clFlag = $('#clFlag').val()
  330. if(clFlag === '1'){
  331. if(Number.parseInt(buyAmt2) !== str.split(',').length){
  332. return errorMesageSimaple('当前入库单数量与扫码数量不一致,请检查!');
  333. }
  334. } else if(clFlag === '0'){
  335. if(1 !== str.split(',').length){
  336. return errorMesageSimaple('当前入库单数量与扫码数量不一致,请检查!');
  337. }
  338. }
  339. // 更新追溯码内容
  340. $("#tb_bar_code").setCell(rowid, 'drugTracCodg', str);
  341. // 更新追溯码扫码数量
  342. $("#tb_bar_code").setCell(rowid, 'quantity', str.split(',').length);
  343. $("#tb_bar_code").setCell(rowid, 'clFlag', clFlag);
  344. $("#tb_bar_code").setCell(rowid, 'clFlagName', clFlag);
  345. $("#tb_bar_code").saveRow(rowid);
  346. }
  347. $("#barListModal").modal('hide');
  348. })
  349. // 添加药品追溯码入库信息
  350. $("#addDetailedForBar").click(function () {
  351. if ($("#checkerName1").val() === '') {//新增
  352. let formData = $("#tb_bar_code").jqGrid("getRowData");
  353. formData.forEach(function (item, index, arr) {
  354. $("#tb_table_detailed").jqGrid('addRowData', index + 1, item);
  355. $("#tb_table_detailed").jqGrid('editRow', index + 1);
  356. })
  357. } else {//修改
  358. let ids = $("#tb_bar_code1").jqGrid("getDataIDs");//得到jqgrid当前行数
  359. let rowid = Math.max.apply(Math,ids);//获得当前最大行号
  360. if(rowid == "-Infinity"){
  361. rowid = 0;
  362. }
  363. $("#tb_bar_code1").saveRow(rowid);//取消最后一行的编辑状态
  364. let form = $("#barForm").serializeObject();
  365. form.inDocuNo = $("#inDocuNoLabel").val();
  366. form.purchaser = $("#purchaser").val();
  367. form.supplyCode = $("#supplyCode").val();
  368. form.groupNo = groupNo;
  369. form.ypManuBarCodes = $("#tb_bar_code").getRowData();
  370. request({
  371. url: '/modifYpInDetl',
  372. method: 'POST',
  373. data: JSON.stringify(form)
  374. }).then((res) => {
  375. successMesage(res);
  376. loadDetailed(form.inDocuNo);
  377. });
  378. }
  379. $("#barFormModal").modal("hide");
  380. });
  381. // 追溯码检查
  382. $("#checkBarList").click(function () {
  383. drugBarStat();
  384. });
  385. // 追溯码去重
  386. $("#checkBarRe").click(function () {
  387. drugBarRepeat()
  388. drugBarStat();
  389. });
  390. });
  391. /**
  392. * 初始化表单和grid
  393. */
  394. function initValue() {
  395. $("#purchaser").val("");
  396. $("#checkerName").val("");
  397. $("#purchaserNameLabel").val("");
  398. $("#supplyCode").val("");
  399. $("#supplyNameLabel").val("");
  400. $("#inDateLabel").val("");
  401. $("#inDocuNoLabel").val("");
  402. $("#tb_table_detailed").jqGrid("clearGridData");
  403. $("#confirmFlag").val("");
  404. $("#addDetailed").attr("disabled",false);
  405. $("#btn_save").attr("disabled",false);
  406. $("#btn_audit").attr("disabled",false);
  407. }
  408. /**
  409. * 查询列表
  410. */
  411. function initRecordTable() {
  412. $('#tb_record').bootstrapTable('destroy');
  413. $('#tb_record').bootstrapTable({
  414. url: '/thmz/getYpInDetlPage', //请求后台的URL(*)
  415. method: 'POST', //请求方式(*)
  416. toolbar: '#toolbar', //工具按钮用哪个容器
  417. striped: true, //是否显示行间隔色
  418. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  419. pagination: true, //是否显示分页(*)
  420. sortable: true, //是否启用排序
  421. sortOrder: "asc", //排序方式
  422. queryParams: recordTableQueryParams, //传递参数(*)
  423. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  424. pageNumber: 1, //初始化加载第一页,默认第一页
  425. pageSize: 10, //每页的记录行数(*)
  426. pageList: [10, 20, 40, 100], //可供选择的每页的行数(*)
  427. search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  428. strictSearch: true,
  429. showColumns: false, //是否显示所有的列
  430. showRefresh: false, //是否显示刷新按钮
  431. minimumCountColumns: 2, //最少允许的列数
  432. clickToSelect: true, //是否启用点击选中行
  433. uniqueId: "ID", //每一行的唯一标识,一般为主键列
  434. showToggle: false, //是否显示详细视图和列表视图的切换按钮
  435. cardView: false, //是否显示详细视图
  436. detailView: false,
  437. ajaxOptions: {
  438. headers: {
  439. 'Accept': 'application/json',
  440. 'Authorization': 'Bearer ' + localStorage.getItem("token")
  441. }
  442. },
  443. columns: [
  444. {
  445. title: '操作',
  446. field: 'op',
  447. align: "center",
  448. valign: 'middle',
  449. formatter: function (value, row, index) {
  450. var str = '';
  451. if($("#confirmFlagSearch").val() === "0"){
  452. str = '<button type="button" class="registration-no-color-foot-button" title="删除" onclick="removeYpInDetl(\'' + row.inDocuNo + '\')"><i class="fa fa-times"></i></button>';
  453. }
  454. str += '<button type="button" class="registration-no-color-foot-button" title="详细" onclick="getYpInDetlDetail(\'' + row.inDocuNo + '\')"><i class="fa fa-plus"></i></button>';
  455. return str;
  456. }
  457. }, {
  458. field: 'inDate',
  459. title: '入库日期',
  460. align: "center",
  461. valign: 'middle',
  462. formatter: function (value, row, index) {
  463. return value == null ? "-" : format(value, "yyyy-MM-dd HH:mm:ss");
  464. }
  465. }, {
  466. field: 'reptNo',
  467. title: '发票号',
  468. align: "center",
  469. valign: 'middle'
  470. }, {
  471. field: 'inDocuNo',
  472. title: '入库单号',
  473. align: "center",
  474. valign: 'middle'
  475. },
  476. {
  477. field: 'purchaserName',
  478. title: '采购员',
  479. align: "center",
  480. valign: 'middle'
  481. },
  482. {
  483. field: 'supplyName',
  484. title: '供应商',
  485. align: "center",
  486. valign: 'middle'
  487. },
  488. {
  489. field: 'buyValue',
  490. title: '购入金额',
  491. align: "center",
  492. valign: 'middle',
  493. formatter: function (value, row, index) {
  494. return value.toFixed(2);
  495. }
  496. },
  497. {
  498. field: 'packValue',
  499. title: '零售金额',
  500. align: "center",
  501. valign: 'middle',
  502. formatter: function (value, row, index) {
  503. return value.toFixed(2);
  504. }
  505. }
  506. ],
  507. onDblClickRow: function (row) {
  508. getYpInDetlDetail(row.inDocuNo)
  509. },
  510. responseHandler: function (res) {
  511. if (res == '401' || res == 401) {
  512. window.location.href = '/thmz/login/view'
  513. return;
  514. }
  515. var ress = eval(res);
  516. if (ress.code == -1) {
  517. errorMesage(res);
  518. return {
  519. "total": 0,//总页数
  520. "rows": {} //数据
  521. };
  522. }
  523. return {
  524. "total": ress.total,//总页数
  525. "rows": ress.data //数据
  526. };
  527. }
  528. });
  529. }
  530. function removeYpInDetl(inDocuNo) {
  531. if (!confirm("确定删除该张单据吗?")) {
  532. return;
  533. }
  534. request({
  535. url: '/removeYpInDetlByInDocuNo',
  536. method: 'GET',
  537. data: {inDocuNo: inDocuNo}
  538. }).then((res) => {
  539. successMesage(res);
  540. initRecordTable();
  541. });
  542. }
  543. function getYpInDetlDetail(inDocuNo) {
  544. $("#recordModal").modal("hide");
  545. loadDetailed(inDocuNo);
  546. }
  547. function recordTableQueryParams(params) {
  548. let rePortRangeArr = getRePortRangeArr();
  549. let temp = {
  550. inType:'0,2,3',
  551. beginTime: rePortRangeArr[0],
  552. endTime: rePortRangeArr[1],
  553. groupNo: groupNo,
  554. reptNo: $("#reptNoSearch").val() == '' ? null : $("#reptNoSearch").val(),
  555. supplyCode: $("#supplyCodeSearch").val() == '' ? null : $("#supplyCodeSearch").val(),
  556. confirmFlag: $("#confirmFlagSearch").val(),
  557. inDocuNo: $("#inDocuNoSearch").val() == '' ? null : $("#inDocuNoSearch").val(),
  558. pageSize: params.limit, //页面大小
  559. pageIndex: params.offset / params.limit //页码
  560. };
  561. return JSON.stringify(temp);
  562. }
  563. /**
  564. * 加载详细表格数据
  565. * @param inDocuNo
  566. */
  567. function loadDetailed(inDocuNo) {
  568. $("#tb_table_detailed").jqGrid('setGridParam', {
  569. datatype: 'JSON',
  570. postData: {inDocuNo: inDocuNo}
  571. }).trigger('reloadGrid');
  572. }
  573. /**
  574. * 初始化详细表格
  575. */
  576. function initDetailed() {
  577. let selectRowId;//选中的行号
  578. $.jgrid.gridUnload("tb_table_detailed");
  579. $("#tb_table_detailed").jqGrid({
  580. datatype: 'local',
  581. mtype: 'get',
  582. url: '/thmz/getYpInDetlDetailed',
  583. loadBeforeSend: function (jqXHR) {
  584. jqXHR.setRequestHeader("Authorization", 'Bearer ' + localStorage.getItem("token"));
  585. jqXHR.setRequestHeader("Accept", 'application/json');
  586. },
  587. ajaxCellOptions: {
  588. beforeSend: function (XMLHttpRequest) {
  589. XMLHttpRequest.setRequestHeader("Authorization", 'Bearer ' + localStorage.getItem("token"));
  590. }
  591. },
  592. height: screen.height * 0.3,
  593. toolbar: [true, "top"],
  594. styleUI: 'Bootstrap',
  595. viewrecords: true,
  596. autowidth: false,
  597. autoScroll: true,
  598. shrinkToFit: true,
  599. rowNum: -1,//取消分页
  600. caption: '入库单明细',
  601. cellEdit: false,
  602. sortable: false,
  603. loadonce: false, //一次加载全部数据到客户端,由客户端进行排序。
  604. sortname: 'chargeCode', //设置默认的排序列
  605. sortorder: 'desc',
  606. cellsubmit: "remote",
  607. colNames: ['药品编码', '药品名称', '生产厂家', '规格', '零售价', '零售金额', '购入价', '购入量', '购入金额', '有效期', '生产日期', '药品追溯码', '批号', '传票号', '传票日期', '文号', '入库人',
  608. '入库类别名称','入库类别', '结账标记', '发票日期', '药品国家医保编码', '规格编码', '生成厂家编码', '序号', '审核状态'],
  609. colModel: [
  610. {name: 'chargeCode', index: 'chargeCode', align: 'center', width: 100, sortable: false},
  611. {name: 'drugName', index: 'drugName', align: 'left', width: 160},
  612. {name: 'manufactoryName', index: 'manufactoryName', align: 'left', width: 160},
  613. {name: 'specification', index: 'specification', align: 'center', width: 120},
  614. {name: 'packRetprice', index: 'packRetprice', align: 'center', width: 100},
  615. {
  616. name: 'packValue', index: 'packValue', align: 'center', width: 100,
  617. formatter: function (cellvalue, options, rowObject) {
  618. return (rowObject.packRetprice * rowObject.buyAmt).toFixed(2)
  619. }
  620. },
  621. {name: 'buyPrice', index: 'buyPrice', align: 'center', width: 100},
  622. {name: 'buyAmt', index: 'buyAmt', align: 'center', width: 100},
  623. {
  624. name: 'buyValue', index: 'buyValue', align: 'center', width: 100,
  625. formatter: function (cellvalue, options, rowObject) {
  626. return (rowObject.buyPrice * rowObject.buyAmt).toFixed(2)
  627. }
  628. },
  629. {
  630. name: 'effDate', index: 'effDate', align: 'center', width: 100,
  631. formatter: function (cellvalue, options, rowObject) {
  632. return cellvalue == null ? "" : format(cellvalue, "yyyy-MM-dd");
  633. }
  634. }, {
  635. name: 'producingDate', index: 'producingDate', align: 'center', width: 100,
  636. formatter: function (cellvalue, options, rowObject) {
  637. return cellvalue == null ? "" : format(cellvalue, "yyyy-MM-dd");
  638. }
  639. },
  640. {name: 'drugTracCodg', index: 'drugTracCodg', align: 'center', width: 140},
  641. {name: 'manuNo', index: 'manuNo', align: 'center', width: 100},
  642. {name: 'reptNo', index: 'reptNo', align: 'center', width: 100},
  643. {
  644. name: 'reptDate', index: 'reptDate', align: 'center', width: 120,
  645. formatter: function (cellvalue, options, rowObject) {
  646. return cellvalue == null ? "" : format(cellvalue, "yyyy-MM-dd");
  647. }
  648. },
  649. {name: 'licenseNo', index: 'licenseNo', align: 'center', width: 120},
  650. {name: 'checkerName', index: 'checkerName', align: 'center', width: 100},
  651. {
  652. name: 'inTypeName', index: 'inTypeName', align: 'center', width: 100,
  653. formatter: function (cellvalue, options, rowObject) {
  654. let str = '';
  655. switch (rowObject.inType) {
  656. case '0':
  657. str = '入库';
  658. break;
  659. case '1':
  660. str = '退库';
  661. break;
  662. case '2':
  663. str = '赠药';
  664. break;
  665. case '3':
  666. str = '紧急入库';
  667. }
  668. return str
  669. }
  670. },
  671. {
  672. name: 'inType', index: 'inType', align: 'center', width: 100, hidden: true
  673. },
  674. {
  675. name: 'acctType', index: 'acctType', align: 'center', width: 100,
  676. formatter: function (cellvalue, options, rowObject) {
  677. return cellvalue === 1 ? '已结账' : '未结账'
  678. }
  679. },
  680. {
  681. name: 'fpDate', index: 'fpDate', align: 'center', width: 100,
  682. formatter: function (cellvalue, options, rowObject) {
  683. return cellvalue == null ? "" : format(cellvalue, "yyyy-MM-dd");
  684. }
  685. },
  686. {name: 'nationalCode', index: 'nationalCode', align: 'center', width: 120},
  687. {
  688. name: 'serial', index: 'serial', hidden: true
  689. }, {
  690. name: 'manuCode', index: 'manuCode', hidden: true
  691. }, {
  692. name: 'inSeri', index: 'inSeri', hidden: true
  693. }, {
  694. name: 'confirmFlag', index: 'confirmFlag', hidden: true
  695. }
  696. ],
  697. jsonReader: {
  698. root: "data", repeatitems: false
  699. },
  700. onCellSelect: function (rowid, iCol, cellcontent, e) {
  701. selectRowId = rowid;
  702. },
  703. ondblClickRow: function (row) {
  704. let rowData = $('#tb_table_detailed').jqGrid('getRowData', row);
  705. let inType = 0;
  706. switch (rowData) {
  707. case "入库":
  708. inType = 0;
  709. break;
  710. case "退库":
  711. inType = 1;
  712. break;
  713. case "赠药":
  714. inType = 2;
  715. break;
  716. case "紧急入库":
  717. inType = 3;
  718. }
  719. rowData.inType = inType;
  720. $("#detailedForm")[0].reset();
  721. $("#confirmFlag").val()==1?$("#addDetailed").attr("disabled",true):$("#addDetailed").attr("disabled",false);
  722. $("#detailedFormModal").modal("show");
  723. $.each(rowData, function (key, value) {
  724. $("#" + key).val(value);
  725. });
  726. isEmpty(rowData.checkerName)?$("#div_bar_code").hide():$("#div_bar_code").show();
  727. loadBar(rowData.inDocuNo, rowData.chargeCode, rowData.manuNo);
  728. $("#barCode").val("");
  729. },
  730. loadComplete: function (res) { //加载完成(初始加载),回调函数
  731. if (res == '401' || res == 401) {
  732. window.location.href = '/thmz/login/view';
  733. return;
  734. }
  735. if (res.code == -1) {
  736. return errorMesage(res);
  737. }
  738. if (res.data != null && res.data.length > 0) {
  739. $("#xxform")[0].reset();
  740. let data = res.data[0];
  741. $("#inDocuNoLabel").val(data['inDocuNo']);
  742. $("#inDateLabel").val(format(data['inDate'], "yyyy-MM-dd HH:mm:ss"));
  743. $("#purchaserNameLabel").val(data['purchaserName']);
  744. $("#purchaser").val(data['purchaser']);
  745. $("#supplyNameLabel").val(data['supplyName']);
  746. $("#supplyCode").val(data['supplyCode']);
  747. $("#confirmFlag").val(data['confirmFlag']);
  748. }
  749. if($("#confirmFlag").val()==1){
  750. $("#btn_save").attr("disabled",true);
  751. $("#btn_audit").attr("disabled",true);
  752. }else{
  753. $("#btn_save").attr("disabled",false);
  754. $("#btn_audit").attr("disabled",false);
  755. }
  756. }
  757. });
  758. $("#t_tb_table_detailed").append("<button class='registration-no-color-foot-button' title='新增药品' id='showDetailed' style='color: #35D082;margin-left: 10px;'><i class='fa fa-plus'></i></button>");
  759. $("#t_tb_table_detailed").append("<button class='registration-no-color-foot-button' title='新增入库信息' id='showDrugBarDetailed' style='color: #35D082;margin-left: 10px;'><i class='fa fa-plus-square'></i></button>");
  760. $("#t_tb_table_detailed").append("<button class='registration-no-color-foot-button' title='删除药品' id='removeDetailed' style='color: red;margin-left: 10px;'><i class='fa fa-trash-o'></i></button>");
  761. $("#showDetailed").on('click', function () {
  762. $("#detailedForm")[0].reset();
  763. $("#detailedFormModal").modal("show");
  764. $("#div_bar_code").hide();
  765. $("#manuNo").attr("disabled",false);
  766. $("#confirmFlag").val()==1?$("#addDetailed").attr("disabled",true):$("#addDetailed").attr("disabled",false);
  767. let rowData = $("#tb_table_detailed").jqGrid("getRowData")[0];
  768. if(rowData){
  769. $("#reptNo").val(rowData['reptNo']);
  770. $("#reptDate").val(rowData['reptDate']);
  771. }else{
  772. $("#reptNo").val(null);
  773. $("#reptDate").val(null);
  774. }
  775. });
  776. // 增加入库信息扫入
  777. $("#showDrugBarDetailed").on('click', function () {
  778. $("#barForm")[0].reset();
  779. $("#barFormModal").modal("show");
  780. $("#div_bar_code").show();
  781. $("#chargeCode1").val('');
  782. $("#manuNo1").attr("disabled",false);
  783. $("#confirmFlag").val()===1 ? $("#addDetailed").attr("disabled",true) : $("#addDetailed").attr("disabled",false);
  784. let rowData = $("#tb_table_detailed").jqGrid("getRowData")[0];
  785. if(rowData){
  786. $("#reptNo1").val(rowData['reptNo']);
  787. $("#reptDate1").val(rowData['reptDate']);
  788. }else{
  789. $("#reptNo1").val(null);
  790. $("#reptDate1").val(null);
  791. }
  792. $("#tb_bar_code").jqGrid('clearGridData');
  793. });
  794. $("#removeDetailed").on('click', function () {
  795. if($("#confirmFlag").val() == 1){
  796. return errorMesageSimaple('已审核,禁止操作!');
  797. }
  798. if (selectRowId == null) {
  799. return errorMesageSimaple('请选择一行进行删除!');
  800. }
  801. $("#tb_table_detailed").jqGrid("delRowData", selectRowId);
  802. });
  803. }
  804. /**
  805. * 加载入库药品条码表格数据
  806. * @param inDocuNo 入库单号
  807. * @param chargeCode 药品编码
  808. * @param manuNo 批号
  809. */
  810. function loadBar(inDocuNo, chargeCode, manuNo) {
  811. $("#tb_bar_code").jqGrid('setGridParam', {
  812. datatype: 'JSON',
  813. postData: JSON.stringify({chargeCode: chargeCode,manuNo: manuNo,inDocuNo:inDocuNo})
  814. }).trigger('reloadGrid');
  815. }
  816. /**
  817. * 初始化入库药品条码表格数据
  818. */
  819. function initBar() {
  820. $.jgrid.gridUnload("tb_bar_code");
  821. $("#tb_bar_code").jqGrid({
  822. datatype: 'local',
  823. mtype: 'POST',
  824. url: '/thmz/getYpManuBarCode',
  825. loadBeforeSend: function (jqXHR) {
  826. jqXHR.setRequestHeader("Authorization", 'Bearer ' + localStorage.getItem("token"));
  827. jqXHR.setRequestHeader("Accept", 'application/json;charset=UTF-8');
  828. jqXHR.setRequestHeader("Content-Type", 'application/json;charset=UTF-8');
  829. },
  830. ajaxCellOptions: {
  831. beforeSend: function (XMLHttpRequest) {
  832. XMLHttpRequest.setRequestHeader("Authorization", 'Bearer ' + localStorage.getItem("token"));
  833. }
  834. },
  835. height: screen.height * 0.2,
  836. toolbar: [true, "top"],
  837. styleUI: 'Bootstrap',
  838. viewrecords: true,
  839. autowidth: false,
  840. autoScroll: true,
  841. shrinkToFit: true,
  842. rowNum: -1,//取消分页
  843. cellEdit: true,
  844. classes: {
  845. // 为选中行添加的CSS类
  846. "ui-state-highlight": "your-custom-class"
  847. },
  848. sortable: false,
  849. loadonce: true, //一次加载全部数据到客户端,由客户端进行排序。
  850. cellsubmit: "clientArray",
  851. caption: '入库药品关联条码',
  852. rownumbers: true,//是否显示序号
  853. // multiselect: true,
  854. // multiboxonly: true,
  855. // multiselectWidth: 60,
  856. colNames: ['药品编码','药品名称','商品码','追溯码','追溯码数量','批号','入库单号','1','是否拆零','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18'],
  857. colModel: [
  858. {name: 'chargeCode', index: 'chargeCode', align: 'center', width: 120,sortable: false},
  859. {name: 'drugName', index: 'drugName', align: 'left', width: 160,sortable: false},
  860. {name: 'barCode', index: 'barCode', align: 'center', width: 120,sortable: false},
  861. {name: 'drugTracCodg', index: 'drugTracCodg', align: 'left', width: 200,sortable: false},
  862. {name: 'quantity', index: 'quantity', align: 'center', width: 120,sortable: false},
  863. {name: 'manuNo', index: 'manuNo', align: 'center', width: 150,sortable: false},
  864. {name: 'inDocuNo', index: 'inDocuNo', align: 'center', width: 150,sortable: false},
  865. {name: 'clFlag', index: 'clFlag',align: 'center', width: 100,hidden: true},
  866. {name: 'clFlagName', index: 'clFlagName',align: 'center', width: 100,sortable: false,
  867. formatter: function (cellvalue, options, rowObject) {
  868. if(isEmpty(cellvalue)){
  869. return '';
  870. } else {
  871. return cellvalue === '0' ? '否' : '是';
  872. }
  873. }
  874. },
  875. {name: 'manufactoryName', index: 'manufactoryName',hidden: true},
  876. {name: 'specification', index: 'specification',hidden: true},
  877. {name: 'packRetprice', index: 'packRetprice',hidden: true},
  878. {name: 'buyAmt', index: 'buyAmt',hidden: true},
  879. {name: 'buyPrice', index: 'buyPrice',hidden: true},
  880. {name: 'effDate', index: 'effDate',hidden: true},
  881. {name: 'producingDate', index: 'producingDate',hidden: true},
  882. {name: 'manuNo', index: 'manuNo',hidden: true},
  883. {name: 'reptNo', index: 'reptNo',hidden: true},
  884. {name: 'reptDate', index: 'reptDate',hidden: true},
  885. {name: 'licenseNo', index: 'licenseNo',hidden: true},
  886. {name: 'nationalCode', index: 'nationalCode',hidden: true},
  887. {name: 'serial', index: 'serial',hidden: true},
  888. {name: 'manuCode', index: 'manuCode',hidden: true},
  889. {name: 'inSeri', index: 'inSeri',hidden: true},
  890. {name: 'inType', index: 'inType',hidden: true},
  891. {name: 'fpDate', index: 'fpDate',hidden: true},
  892. ],
  893. jsonReader: {
  894. root: "data", repeatitems: false
  895. },
  896. afterSubmitCell: function(rowid, cellname, value, iRow, iCol) {
  897. $("#tb_bar_code").setCell(rowid, iCol, value);
  898. return true; // 必须返回 ture or false,否则 下面的 afterSaveCell 方法执行不了的
  899. },
  900. afterSaveCell: function (rowid, celname, value, iRow, iCol) {
  901. $("#tb_bar_code").setCell(rowid, iCol, value);
  902. return true;
  903. },
  904. onCellSelect: function (rowid, iCol, cellcontent, e) {
  905. $("#tb_bar_code #jqg_tb_bar_code_" + rowid).prop("checked", true);//打钩
  906. if(iCol === 4){
  907. let rowData = $("#tb_bar_code").jqGrid("getRowData", rowid);
  908. $("#barListForm")[0].reset();
  909. $("#clFlag option:selected").val('1')
  910. $("#barListModal").modal("show");
  911. $('#chargeCode2').val(rowData['chargeCode']);
  912. $('#buyAmt2').val(rowData['buyAmt']);
  913. $('#quantity2').val(rowData['quantity']);
  914. $('#drugName2').val(rowData['drugName']);
  915. $('#barCode2').val(rowData['barCode']);
  916. if(!isEmpty(rowData['drugTracCodg'])){
  917. let str = (rowData['drugTracCodg'] + ',').replaceAll(',', '\n');
  918. $('#drugTracCodgStr').val(str);
  919. }
  920. $('#rowid2').val(rowid);
  921. }
  922. },
  923. beforeSelectRow: function(rowid, e) {
  924. // 阻止行选择
  925. return true;
  926. },
  927. beforeEditCell: function(rowid,iCol,cellcontent,e){
  928. },
  929. loadComplete: function (res) { //加载完成(初始加载),回调函数
  930. /*$("#barCode").focus();*/
  931. if (res == '401' || res == 401) {
  932. window.location.href = '/thmz/login/view';
  933. return;
  934. }
  935. if (res.code == -1) {
  936. errorMesage(res);
  937. }else{
  938. // if(!isEmpty(res.data) && res.data.length>0){
  939. // $("#manuNo").attr("disabled",true)
  940. // }else{
  941. // $("#manuNo").attr("disabled",false)
  942. // }
  943. }
  944. }
  945. });
  946. $("#t_tb_bar_code").append("<button class='registration-no-color-foot-button' title='添加药品' id='addBarCode' style='color: #35D082;margin-left: 10px;'><i class='fa fa-plus'></i></button>");
  947. $("#t_tb_bar_code").append("<button class='registration-no-color-foot-button' title='删除条码' id='removeBarCode' style='color: red;margin-left: 10px;'><i class='fa fa-trash-o'></i></button>");
  948. // $("#t_tb_bar_code").append("<input id='barCode' name='barCode' type='text' style='margin-left: 10px;' autocomplete='off' placeholder='扫描条码...'>");
  949. $("#addBarCode").on('click', function () {
  950. if(isEmpty($("#chargeCode1").val())){
  951. return errorMesageSimaple('药品编码为空,请重新设置药品!');
  952. }
  953. let barDataList = $("#tb_bar_code").jqGrid("getGridParam").data;//得到jqgrid当前行数
  954. let rowid = barDataList.length
  955. if(barDataList.length !== 0 ){
  956. // 因为新增的数据都是放在首行,所以id最大的是第一行数据
  957. rowid = Number.parseInt(barDataList[0].id) + 1
  958. }
  959. $("#tb_bar_code").saveRow(rowid);
  960. let formData = {}
  961. let t = $("#barForm").serializeArray();
  962. $.each(t, function () {
  963. formData[this.name.replace('1', '')] = this.value
  964. });
  965. formData['inDocuNo'] = $("#inDocuNoLabel").val();
  966. formData['drugTracCodg'] = '';
  967. $("#tb_bar_code").addRowData(rowid, formData,'first');
  968. // $("#tb_bar_code").jqGrid('editRow', rowid+1);
  969. });
  970. $("#removeBarCode").on('click', function () {
  971. if (!confirm("确定删除该条药品追溯码吗?")) {
  972. return;
  973. }
  974. let selectRowId = $("#tb_bar_code").jqGrid("getGridParam", "selrow");
  975. if(isEmpty(selectRowId)){
  976. return errorMesageSimaple('请选择一行数据!');
  977. }
  978. $("#tb_bar_code").jqGrid("delRowData", selectRowId);
  979. });
  980. /**
  981. * 条码赋值
  982. * @param value
  983. */
  984. function autoBar(value){
  985. let selectRowId = $("#tb_bar_code").jqGrid("getGridParam", "selrow");
  986. if(isEmpty(selectRowId)){
  987. return errorMesageSimaple('请选择一个药品!');
  988. }
  989. // 获取当前追溯码信息
  990. let ypTracCodg = $("#tb_bar_code").getCell(selectRowId, 'drugTracCodg')
  991. if(!isEmpty(ypTracCodg)){
  992. // 更新追溯码内容
  993. $("#tb_bar_code").setCell(selectRowId, 'drugTracCodg', ypTracCodg + ',' + value);
  994. // 更新追溯码扫码数量(这里不需要加1,因为最后会多一个",")
  995. $("#tb_bar_code").setCell(selectRowId, 'quantity', ypTracCodg.split(',').length);
  996. } else {
  997. $("#tb_bar_code").setCell(selectRowId, 'drugTracCodg', value);
  998. $("#tb_bar_code").setCell(selectRowId, 'quantity', 1);
  999. }
  1000. $("#barCode").val("");
  1001. }
  1002. /**
  1003. * 扫码条码
  1004. */
  1005. $("#barCode").on('input', debounce(e=>{
  1006. autoBar(e.delegateTarget.value)
  1007. },500));
  1008. }
  1009. /**
  1010. * 生产报表数据
  1011. */
  1012. function setPrintHtml() {
  1013. let date = {inDocuNo: $("#inDocuNoLabel").val()};
  1014. request({
  1015. url: '/getYpInDetlDetailed',
  1016. method: 'GET',
  1017. data: date
  1018. }).then((res) => {
  1019. console.log(res);
  1020. let html = '';
  1021. let packRetpriceSum = 0;
  1022. let buyPriceSum = 0;
  1023. $('.sjh').remove();
  1024. for (let i = 0; i < res['data'].length; i++) {
  1025. let data = res['data'][i];
  1026. let packRetprice = keepTwoDecimal(parseFloat(data['buyAmt']) * parseFloat(data['packRetprice']));
  1027. let buyPrice = keepTwoDecimal(parseFloat(data['buyAmt']) * parseFloat(data['buyPrice']));
  1028. packRetpriceSum += packRetprice;
  1029. buyPriceSum += buyPrice;
  1030. if (i === 0) {
  1031. $(".printDate").html(format(new Date(), "yyyy-MM-dd HH:mm"));
  1032. $(".supplyName").html(data['supplyName']);
  1033. $(".inDocuNo").html(data['inDocuNo']);
  1034. $(".confirmDate").html(format(data['confirmDate'], "yyyy-MM-dd HH:mm"));
  1035. $(".lister").html($(".current_user")[0].innerText);
  1036. $(".listerAudit").html(data['confirmName']);
  1037. }
  1038. html += '<tr class="sjh">';
  1039. html += '<td class="xtd" style="text-align: center;">' + data['chargeCode'] + '</td>';
  1040. html += '<td class="xtd" style="text-align: left;">' + data['drugName'] + '</td>';
  1041. html += '<td class="xtd" style="text-align: left;">' + data['specification'] + '</td>';
  1042. html += '<td class="xtd" style="text-align: center;">' + data['buyAmt'] + '</td>';
  1043. html += '<td class="xtd" style="text-align: center;">' + data['buyPrice'] + '</td>';
  1044. html += '<td class="xtd" style="text-align: center;">' + data['packRetprice'] + '</td>';
  1045. html += '<td class="xtd" style="text-align: center;">' + buyPrice + '</td>';
  1046. html += '<td class="xtd" style="text-align: center;">' + packRetprice + '</td>';
  1047. html += '<td class="xtd" style="text-align: center;">' + data['manuNo'] + '</td>';
  1048. html += '<td class="xtd" style="text-align: left;">' + (isEmpty(data['manufactoryName'])?'':data['manufactoryName']) + '</td>';
  1049. html += '<td class="xtd" style="text-align: center;">' + format(data['effDate'], "yyyy-MM-dd") + '</td>';
  1050. html += '</tr>';
  1051. }
  1052. $("#base_tr").after(html);
  1053. $(".packRetpriceSum").html(keepTwoDecimal(packRetpriceSum));
  1054. $(".buyPriceSum").html(keepTwoDecimal(buyPriceSum));
  1055. $(".balance").html(keepTwoDecimal(Math.abs(packRetpriceSum-buyPriceSum)));
  1056. print();
  1057. });
  1058. }
  1059. /**
  1060. * 打印报表
  1061. */
  1062. function print() {
  1063. setDefaultPrint();
  1064. LODOP = getLodop();
  1065. LODOP.PRINT_INITA(6, 0, "215mm", "280mm", "入库单打印");
  1066. LODOP.SET_PRINT_PAGESIZE(1, "215mm", "280mm", "");
  1067. //设置默认打印机
  1068. LODOP.SET_PRINTER_INDEX(defaultPrintIndex);
  1069. LODOP.SET_PRINT_STYLE("FontSize", 11); //字体大小
  1070. LODOP.SET_PRINT_STYLEA(0, "ItemType", 2);
  1071. var strStyle = "<style>table,td,th {border-width: 1px;padding-bottom:0px;" +
  1072. "border-style: solid;border-collapse: collapse;table-layout:fixed;word-wrap:break-word;font-size: 13}.xtd{border: 1px solid black;}</style>";
  1073. LODOP.ADD_PRINT_HTM("0mm", "0mm", "RightMargin:0mm", "BottomMargin:0mm", strStyle + document.getElementById("report_table_1").innerHTML);
  1074. //LODOP.PRINT();
  1075. LODOP.PREVIEW();
  1076. }
  1077. // 追溯码扫码计数统计
  1078. let barFor = false
  1079. let barC = 1
  1080. function drugBarStat(){
  1081. barFor = false
  1082. barC = 0
  1083. $('#quantity2').val(null)
  1084. $('#drugTracCodgAt').val(null);
  1085. let sum = 0;
  1086. let str = $("#drugTracCodgStr").val();
  1087. let infoErr = '错误:\n';
  1088. let infoRep = '重复:\n';
  1089. if(!isEmpty(str)){
  1090. let barInfo = str.replaceAll('\n', ',').split(',')
  1091. if(barInfo.length > 0) {
  1092. for(let i in barInfo){
  1093. if(barInfo[i].length === 20){
  1094. sum++;
  1095. } else {
  1096. if(barInfo[i] > 0 && barInfo[i].length !== 20){
  1097. sum++;
  1098. barFor = true
  1099. infoErr += barInfo[i] + '\n';
  1100. }
  1101. }
  1102. }
  1103. let barInfoCp = [...barInfo]
  1104. let repStr = ''
  1105. for(let i in barInfo){
  1106. let rep = 1;
  1107. // 不能用index的序号去比,因为它已经比过了
  1108. let index = 0;
  1109. if(!(isEmpty(repStr) || repStr.indexOf(barInfo[i]) === -1)){
  1110. continue
  1111. }
  1112. for(let j in barInfoCp){
  1113. if(j > i && barInfo[i] === barInfoCp[j]){
  1114. rep++;
  1115. barFor = true
  1116. if(isEmpty(repStr)){
  1117. repStr = barInfo[i]
  1118. } else if(repStr.indexOf(barInfo[i]) === -1){
  1119. repStr += ',' + barInfo[i]
  1120. }
  1121. index = j
  1122. }
  1123. }
  1124. if(rep > 1){
  1125. infoRep = infoRep + barInfo[i] + '重复出现:' + rep + '次。 \n'
  1126. rep = 1
  1127. }
  1128. }
  1129. }
  1130. }
  1131. let info = infoErr + '\n' + infoRep
  1132. $('#quantity2').val(sum)
  1133. $('#drugTracCodgAt').val(info);
  1134. }
  1135. /**
  1136. * 去掉最后一个字符
  1137. * @param str 字符串
  1138. * @param char 去掉的字符
  1139. * @returns {string}
  1140. */
  1141. function removeLastComma(str, char) {
  1142. if (str.endsWith(char)) {
  1143. str = str.substring(0, str.length - 1);
  1144. }
  1145. return str;
  1146. }
  1147. function drugBarRepeat(){
  1148. let barStr = $("#drugTracCodgStr").val()
  1149. if(!isEmpty(barStr)) {
  1150. let barInfo = barStr.replaceAll('\n', ',').split(',')
  1151. if (barInfo.length > 0) {
  1152. let barData = new Set(barInfo)
  1153. let barList = [...barData]
  1154. let data = ''
  1155. for(let i in barList){
  1156. if(!isEmpty(barList[i])) {
  1157. data += (barList[i] + '\n')
  1158. }
  1159. }
  1160. $("#drugTracCodgStr").val(data)
  1161. }
  1162. }
  1163. }