newRecipe.html 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342
  1. <!DOCTYPE html>
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org" >
  3. <head>
  4. <th:block th:include="include :: header('处方登记信息')" />
  5. <th:block th:include="include :: select2-css" />
  6. <th:block th:include="include :: bootstrap-fileinput-css" />
  7. <th:block th:include="include :: layout-latest-css" />
  8. </head>
  9. <body class="gray-bg">
  10. <div class="col-sm-12 search-collapse">
  11. <form id="dtp-form-hxcx" class="customize-search-form">
  12. <div class="customize-form-group-container">
  13. <div class="customize-form-group">
  14. <label>患者信息:</label>
  15. <input type="text" class="styled-input" placeholder="输入姓名,患者ID或手机号/证件号码" id="query" name="query"/>
  16. </div>
  17. <div class="customize-form-group">
  18. <a class="btn btn-primary btn-rounded btn-sm" onclick="search_hz()">&nbsp;搜索</a>
  19. <a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()">重置</a>
  20. <a class="btn btn-info btn-rounded btn-sm" onclick="bookbuilding()">&nbsp;快速建档</a>
  21. </div>
  22. </div>
  23. </form>
  24. <div id="patient-table-container">
  25. <table id="patient-table" class="customize-table">
  26. <thead>
  27. <tr>
  28. <th></th> <!-- 选择框 -->
  29. <th>患者ID</th>
  30. <th>患者姓名</th>
  31. <th>性别</th>
  32. <th>年龄</th>
  33. <th>证件类型</th>
  34. <th>证件号码</th>
  35. <th>临床诊断</th>
  36. <th>联系电话</th>
  37. <!-- 添加其他需要显示的列 -->
  38. </tr>
  39. </thead>
  40. <tbody>
  41. <!-- 数据行将由 JavaScript 动态插入 -->
  42. </tbody>
  43. </table>
  44. </div>
  45. </div>
  46. <div class="col-sm-12 search-collapse">
  47. <h4 class="query-condition-title">新建处方登记</h4>
  48. <form id="dtp-form-newcfxx" class="customize-search-form">
  49. <div class="customize-form-group-container">
  50. <div class="customize-form-group">
  51. <label>医院:</label>
  52. <!-- <input name="hospital" placeholder="医院" id="hospital" class="styled-input" type="text">-->
  53. <select id="hospital-select" name="hospital" class="styled-input form-control select2-multiple" placeholder="请选择或输入搜索">
  54. <option value="">请选择医院</option>
  55. </select>
  56. </div>
  57. <div class="customize-form-group">
  58. <label class="is-required">处方医生:</label>
  59. <input name="prescribingDoctor" id="prescribingDoctor" placeholder="处方医生" class="styled-input" type="text">
  60. </div>
  61. <div class="customize-form-group">
  62. <label>科室:</label>
  63. <input name="department" id="department" placeholder="科室" class="styled-input" type="text">
  64. </div>
  65. <div class="customize-form-group">
  66. <label class="is-required">处方诊断::</label>
  67. <input name="prescriptionDiagnosis" id="prescriptionDiagnosis" placeholder="处方诊断" class="styled-input" type="text">
  68. </div>
  69. <div class="customize-form-group">
  70. <label class="is-required">主管医生:</label>
  71. <input name="attendingDoctor" id="attendingDoctor" placeholder="主管医生" class="styled-input" type="text">
  72. </div>
  73. <div class="customize-form-group-container">
  74. </div>
  75. <!-- <div class="customize-form-group">-->
  76. <!-- <label class="is-required">临床诊断:</label>-->
  77. <!-- <input name="clinicalDiagnosis" id="clinicalDiagnosis" placeholder="临床诊断" class="styled-input" type="text">-->
  78. <!-- </div>-->
  79. <div class="customize-form-group">
  80. <label>处方图片:</label>
  81. <input name="prescriptionImageUrl" id="prescriptionImageUrl" placeholder="处方图片" class="styled-input" type="text">
  82. </div>
  83. <div class="customize-form-group select-time">
  84. <label class="is-required">处方开具日期:</label>
  85. <input name="prescriptionIssueDate" id="prescriptionIssueDate" placeholder="处方开具日期" class="time-input time-input2" type="text">
  86. </div>
  87. <div class="customize-form-group">
  88. <label>发票编码:</label>
  89. <input name="invoiceCode" id="invoiceCode" placeholder="发票编码" class="styled-input" type="text">
  90. </div>
  91. <div class="customize-form-group">
  92. <label>发票图片:</label>
  93. <input name="invoiceImageUrl" id="invoiceImageUrl" placeholder="发票图片" class="styled-input" type="text">
  94. </div>
  95. <!-- <div class="customize-form-group">-->
  96. <!-- <label class="is-required">登记药师姓名:</label>-->
  97. <!-- <input name="registerPharmacistName" id="registerPharmacistName" placeholder="登记药师姓名" class="styled-input" type="text">-->
  98. <!-- </div>-->
  99. <div class="customize-form-group">
  100. <label>登记人:</label>
  101. <input name="registrant" id="registrant" placeholder="未填登记人,系统默认当前用户" class="styled-input" type="text">
  102. </div>
  103. <!--<div class="customize-form-group">
  104. <label>审核药师姓名:</label>
  105. <input name="reviewingName" id="reviewingName" placeholder="审核药师姓名" class="styled-input" type="text">
  106. </div>-->
  107. <div class="customize-form-group">
  108. <label>处方类型</label>
  109. <select name="prescriptionType" th:with="type=${@dict.getType('sys_select_prescription_ype')}" class="styled-input">
  110. <option value="">全部</option>
  111. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"
  112. ></option>
  113. </select>
  114. </div>
  115. <div class="customize-form-group">
  116. <label class="col-sm-1 control-label">临床诊断大类:</label>
  117. <select id="category-select" class="styled-input form-control select2-multiple" multiple placeholder="请选择或输入搜索">
  118. <option value="">请选择疾病大类</option>
  119. </select>
  120. </div>
  121. <div class="customize-form-group">
  122. <label class="col-sm-1 control-label">临床诊断小类:</label>
  123. <select id="subcategory-select" class="styled-input form-control select2-multiple" multiple placeholder="请选择或输入搜索">
  124. <option value="">请选择子类别</option>
  125. </select>
  126. </div>
  127. </div>
  128. </form>
  129. <!-- 假设这是你的 HTML 结构class="table table-bordered" -->
  130. <div class="ibox" id="data-ibox" style="overflow: auto;">
  131. <div class="ibox-title" style="width: 100%;">药品登记列表</div>
  132. <table class="fixed-layout-table table1" id="drugInfoTable">
  133. <thead>
  134. <tr>
  135. <th>操作+<a type="button" class="btn btn-primary btn-sm" onclick="selectUsersToParentCallBack2()">添加药品</a></th>
  136. <th>药品编码</th>
  137. <th>药品名</th>
  138. <th class="hidden-column">通用名</th>
  139. <th>规格</th>
  140. <th class="hidden-column">厂家简称</th>
  141. <th class="hidden-column">给药方式</th>
  142. <th class="hidden-column">是否随访管理品</th>
  143. <th class="hidden-column">是否冷链管理品</th>
  144. <th class="hidden-column">是否登记管理品</th>
  145. <th class="hidden-column">是否慈善援助管理品</th>
  146. <th class="hidden-column">包装</th>
  147. <th class="is-required">取药数量(购药数量)</th>
  148. <th class="is-required">单次剂量数</th>
  149. <th class="is-required">单次剂量单位</th>
  150. <th class="is-required">用药频次</th>
  151. <th class="is-required">购药包装单位</th>
  152. <th>D值品用药天数</th>
  153. </tr>
  154. </thead>
  155. <tbody>
  156. <!-- 数据行将被插入到这里 -->
  157. </tbody>
  158. </table>
  159. </div>
  160. <div class="center-block ibox-title" >
  161. <label class="is-required">是否开启药师审核:</label>
  162. <button type="button" class="btn btn-primary" onclick="onclickshow()">是</button>
  163. <button type="button" class="btn btn-info" onclick="onclickhide()">否</button>
  164. </div>
  165. </div>
  166. <div class="modal inmodal" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
  167. <div class="modal-dialog">
  168. <form class="form-horizontal" id="form-budan-add">
  169. <div class="modal-content animated bounceInRight">
  170. <div class="modal-header">
  171. <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">关闭</span></button>
  172. <h2 class="modal-title">药师审核</h2>
  173. </div>
  174. <div class="modal-body">
  175. <div class="customize-search-form">
  176. <div class="customize-form-group">
  177. <label>审核药师姓名:</label>
  178. <select id="pharmacistNameSelect" name="pharmacistName" class="styled-input" style="width: 200px; height: 35px;">
  179. <option value="" disabled selected>请选择</option>
  180. </select>
  181. <span id="pharmacistVerified" class="verified-symbol" style="display:none;">✓</span>
  182. </div>
  183. <div id="passwordGroup" class="customize-form-group" style="display:none;">
  184. <label>密码:</label>
  185. <input type="password" placeholder="请输入密码" class="styled-input" style="width: 200px; height: 35px;" id="password" name="password">
  186. <button type="button" class="btn btn-success btn-sm" id="verifyPasswordBtn">确定</button>
  187. </div>
  188. <div id="checkView" style="display:none;">
  189. <div class="customize-form-group">
  190. <label>审核结果:</label>
  191. <div>
  192. <label><input type="radio" name="checkResult" value="1"> 通过</label>
  193. <label><input type="radio" name="checkResult" value="0"> 不通过</label>
  194. </div>
  195. </div>
  196. <div class="customize-form-group">
  197. <label>审核意见:</label>
  198. <input type="text" placeholder="请输入说明" class="styled-input" style="width: 200px; height: 35px;" id="remarks" name="remarks">
  199. </div>
  200. </div>
  201. </div>
  202. </div>
  203. <div class="modal-footer">
  204. <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
  205. <button type="button" class="btn btn-primary" onclick="submitReview()">提交</button>
  206. </div>
  207. </div>
  208. </form>
  209. </div>
  210. </div>
  211. <div class="main-content">
  212. <div class="col-sm-offset-5 col-sm-10">
  213. <button type="button" class="btn btn-sm btn-info" onclick="openCheckYSSH()" id="openCheckYSSid">药师审核</button>&nbsp;
  214. <button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()"><i class="fa fa-check"></i>提 交</button>&nbsp;
  215. <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
  216. </div>
  217. </div>
  218. </div>
  219. <th:block th:include="include :: footer" />
  220. <th:block th:include="include :: select2-js" />
  221. <th:block th:include="include :: bootstrap-fileinput-js" />
  222. <th:block th:include="include :: bootstrap-table-fixed-columns-js" />
  223. <th:block th:include="include :: layout-latest-js" />
  224. <script th:inline="javascript">
  225. var editFlag = [[${@permission.hasPermi('dtp:RecipeRegister:edit')}]];
  226. var removeFlag = [[${@permission.hasPermi('dtp:RecipeRegister:remove')}]];
  227. var prefix_recipe = ctx + "dtp/recipe";
  228. var prefix_yppz= ctx + "yppz/drugConfig";
  229. var prefix_configInfo= ctx + "dtp/configInfo";
  230. var prefix_pmService = ctx + "dtp/pmService";
  231. var hzparam =[];
  232. var hzparam1 ={};
  233. var openId='';
  234. var remarks;
  235. var reviewingName;
  236. var reviewStatus;
  237. var data;
  238. var shangci=false;
  239. var shangcigyList=[];
  240. var dataList=[];
  241. var selectdataList=[];
  242. var prescriptionNumber;
  243. var drugsLinkId;
  244. var reviewFormData = new FormData();
  245. $(document).ready(function() {
  246. // 获取所有的输入元素(input, textarea, select)
  247. var $inputs = $('form').find('input, textarea, select').filter(':visible');
  248. $inputs.each(function(index) {
  249. $(this).on('keydown', function(e) {
  250. if (e.key === "Enter" || e.keyCode === 13) {
  251. e.preventDefault(); // 阻止默认行为(例如提交表单)
  252. // 找到当前输入框的索引
  253. var currentIndex = $inputs.index(this);
  254. // 如果不是最后一个输入框,则聚焦下一个输入框
  255. if (currentIndex < $inputs.length - 1) {
  256. $inputs.eq(currentIndex + 1).focus();
  257. } else {
  258. // 如果是最后一个输入框,可以选择提交表单或不做任何事情
  259. // $(this).closest('form').submit();
  260. }
  261. }
  262. });
  263. });
  264. // 监听选择变化
  265. $(document).on('change', 'input[name="selectPatient"]', function() {
  266. // 移除所有行的 'selected' 类
  267. $('#patient-table tbody tr').removeClass('selected');
  268. // 获取当前选中的行并添加 'selected' 类
  269. var selectedRow = $(this).closest('tr');
  270. selectedRow.addClass('selected');
  271. // 获取选中的患者对象
  272. var selectedPatient = getSelectedPatient();
  273. if (selectedPatient) {
  274. // 调用 getLastRecipe 方法,传入患者的 ID
  275. var patientId = selectedPatient.id;
  276. getLastRecipe(patientId);
  277. }
  278. });
  279. // 初始化 Select2 插件
  280. $('#hospital-select').select2({
  281. placeholder: "请选择或直接输入搜索",
  282. //allowClear: true //在输入框最后 有一个 删除所有的X 但是会出现 第一个删除出现问题有空格
  283. });
  284. // Listen for the 'select2:select' event
  285. $('#hospital-select').on('select2:select', function(e) {
  286. var clearSpan = $('.select2-selection-clear');
  287. if (clearSpan.length > 0) {
  288. clearSpan.remove();
  289. }
  290. });
  291. // 发送 AJAX 请求获取疾病大类数据
  292. $.ajax({
  293. url: prefix_configInfo+'/dtpHospitalList',
  294. method: 'POST',
  295. dataType: 'json',
  296. success: function(data) {
  297. var options = $('#hospital-select');
  298. // 清空已有选项(除了第一个默认选项)
  299. options.find('option').not(':first').remove();
  300. $('<option>', {
  301. value: '',
  302. text : '请选择疾病医院'
  303. }).appendTo(options);
  304. // 遍历返回的数据并添加选项
  305. $.each(data.value, function(index, item) {
  306. $('<option>', {
  307. value: item.id,
  308. text : item.standardName
  309. }).appendTo(options);
  310. });
  311. // 重新初始化 Select2 以反映新的选项
  312. options.trigger('change');
  313. },
  314. error: function(xhr, status, error) {
  315. console.error("Failed to load disease categories:", error);
  316. }
  317. });
  318. var clearSpan = $('.select2-selection-clear');
  319. // 初始化 Select2 插件
  320. $('#category-select').select2({
  321. placeholder: "请选择或直接输入搜索",
  322. //allowClear: true //在输入框最后 有一个 删除所有的X 但是会出现 第一个删除出现问题有空格
  323. });
  324. // Listen for the 'select2:select' event
  325. $('#category-select').on('select2:select', function(e) {
  326. var clearSpan = $('.select2-selection-clear');
  327. if (clearSpan.length > 0) {
  328. clearSpan.remove();
  329. }
  330. });
  331. // 发送 AJAX 请求获取疾病大类数据
  332. $.ajax({
  333. url: prefix_recipe+'/typeDate',
  334. method: 'GET',
  335. dataType: 'json',
  336. success: function(data) {
  337. var options = $('#category-select');
  338. // 清空已有选项(除了第一个默认选项)
  339. options.find('option').not(':first').remove();
  340. $('<option>', {
  341. value: '',
  342. text : '请选择疾病类型'
  343. }).appendTo(options);
  344. // 遍历返回的数据并添加选项
  345. $.each(data.value, function(index, item) {
  346. $('<option>', {
  347. value: item.id,
  348. text : item.categoryName
  349. }).appendTo(options);
  350. });
  351. // 重新初始化 Select2 以反映新的选项
  352. options.trigger('change');
  353. },
  354. error: function(xhr, status, error) {
  355. console.error("Failed to load disease categories:", error);
  356. }
  357. });
  358. // 初始化子类别下拉框
  359. $('#subcategory-select').select2({
  360. placeholder: "请选择或直接输入搜索",
  361. //allowClear: true
  362. });
  363. // 监听第一个下拉框的选择事件
  364. $('#category-select').on('change', function() {
  365. var selectedCategory = $(this).val();
  366. if (selectedCategory.length > 0) {
  367. loadSubcategories(selectedCategory);
  368. } else {
  369. // 如果没有选择任何项,清空子类别下拉框
  370. $('#subcategory-select').find('option').not(':first').remove();
  371. $('#subcategory-select').trigger('change');
  372. }
  373. });
  374. //药师审核选择事件 默认打开
  375. $('#openCheckYSSid').show();
  376. });
  377. // 监听药师审核选择事件
  378. function onclickshow() {
  379. $('#openCheckYSSid').show();
  380. }
  381. function onclickhide() {
  382. $('#openCheckYSSid').hide();
  383. }
  384. function loadSubcategories(categoryId) {
  385. // 模拟从服务器获取子类别数据
  386. $.ajax({
  387. url: prefix_recipe+'/typeDate2?jbtype=' + categoryId, // 假设 ctx 是你的上下文路径
  388. method: 'GET',
  389. dataType: 'json',
  390. success: function(data) {
  391. var options = $('#subcategory-select');
  392. // 清空已有选项(除了第一个默认选项)
  393. options.find('option').not(':first').remove();
  394. // 遍历返回的数据并添加选项
  395. $.each(data.value, function(index, item) {
  396. $('<option>', {
  397. value: item.ida,
  398. text : item.categoryNamea
  399. }).appendTo(options);
  400. });
  401. // 重新初始化 Select2 以反映新的选项
  402. options.trigger('change');
  403. },
  404. error: function(xhr, status, error) {
  405. console.error("Failed to load subcategories:", error);
  406. }
  407. });
  408. }
  409. // 将后端返回的数据填充到表格中
  410. function populatePatientTable(datas) {
  411. var tbody = $('#patient-table tbody');
  412. tbody.empty(); // 清空现有行
  413. datas.forEach(function(patient, index) {
  414. var genderText = patient.gender === 0 ? '男' : '女';
  415. var row = `
  416. <tr data-index="${index}">
  417. <td><input type="radio" name="selectPatient" value="${index}"></td>
  418. <td>${patient.id}</td>
  419. <td>${patient.name}</td>
  420. <td>${genderText}</td>
  421. <td>${patient.age || '-'}</td>
  422. <td>${patient.documentType || '-'}</td>
  423. <td>${patient.documentNumber || '-'}</td>
  424. <td>${patient.disease || '-'}</td>
  425. <td>${patient.phoneNumber || '-'}</td>
  426. <!-- 添加其他列的数据 -->
  427. </tr>
  428. `;
  429. tbody.append(row);
  430. });
  431. }
  432. // 获取选中的患者数据并存入对象
  433. function getSelectedPatient() {
  434. var selectedRow = $('input[name="selectPatient"]:checked').closest('tr');
  435. if (selectedRow.length === 0) return null;
  436. var index = selectedRow.data('index');
  437. return dataList[index];
  438. }
  439. function getLastRecipe(patientId){
  440. var datas=[];
  441. var data = {
  442. "patientId":patientId,
  443. };
  444. // 初始化表格 getDrugPurchaseList
  445. $.ajax({
  446. cache : true,
  447. type : "POST",
  448. url : prefix_recipe + "/getLastRecipe",
  449. data : data,
  450. async : false,
  451. error : function(request) {
  452. $.modal.alertError("系统错误");
  453. },
  454. success : function(data) {
  455. var shangciObj={};
  456. shangcigyList=data.data.recipeList;
  457. if(data.data.recipeList !=null || data.data.recipeList != undefined){
  458. initTab(datas=data.data.recipeList)
  459. }
  460. if(data.data.recipe!=null){
  461. shangciObj=data.data.recipe;
  462. $('#hospital').val(shangciObj.hospital);
  463. $('#prescribingDoctor').val(shangciObj.prescribingDoctor);
  464. $('#department').val(shangciObj.department);
  465. $('#attendingDoctor').val(shangciObj.attendingDoctor);
  466. }else {
  467. shangciObj={};
  468. $('#hospital').val('');
  469. $('#prescribingDoctor').val('');
  470. $('#department').val('');
  471. $('#attendingDoctor').val('');
  472. }
  473. $.operate.successCallback(data);
  474. }
  475. });
  476. }
  477. function initTab(datas){
  478. var tableId = 'bootstrap-table';
  479. var tableElement = $('#' + tableId);
  480. tableElement.bootstrapTable({
  481. data: datas,
  482. columns : [
  483. {field: 'mdmCode', title: '药品编码', align: 'center'},
  484. {field: 'productName', title: '商品名', align: 'center'},
  485. {field: 'genericName', title: '通用名', align: 'center'},
  486. {field: 'specification', title: '规格', align: 'center'},
  487. {field: 'manufacturerShortName', title: '厂家简称', align: 'center'},
  488. {field: 'administrationMethod', title: '给药方式', align: 'center'},
  489. {field: 'realNameStatus', title: '处方取药数量(包装数)', align: 'center'},
  490. {field: 'singleDoseValue', title: '处方单次剂量数值', align: 'center'},
  491. {field: 'singleDoseUnit', title: '处方单次剂量单位', align: 'center'},
  492. {field: 'dosageFrequency', title: '规范用药频次', align: 'center'},
  493. {field: 'dosageFrequencyDays', title: '用药频次换算使用天数', align: 'center'},
  494. {field: 'dvalueDays', title: 'D值品用药天数', align: 'center'},
  495. {field: 'prescriptionNumber', title: '处方编号', align: 'center'},
  496. // {
  497. // title: '操作',
  498. // align: 'center',
  499. // formatter: function(value, row, index) {
  500. // if (row.id) {
  501. // var actions = [];
  502. // actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.view(\'' + row.id + '\')">购药详情</a> ');
  503. // return actions.join('');
  504. // } else {
  505. // return "";
  506. // }
  507. // }
  508. // }
  509. ]
  510. });
  511. }
  512. function getTableData() {
  513. var tableRows = [];
  514. $('#drugInfoTable tbody tr').each(function(index, row) {
  515. var rowData = {
  516. productId: $(row).data('product-id'),
  517. mdmCode: $(row).find('td:eq(1)').text().trim(),
  518. productName: $(row).find('td:eq(2)').text().trim(),
  519. genericName: $(row).find('td:eq(3)').text().trim(),
  520. specification: $(row).find('td:eq(4)').text().trim(),
  521. manufacturerShortName: $(row).find('td:eq(5)').text().trim(),
  522. administrationMethod: $(row).find('td:eq(6)').text().trim(),
  523. followUpItem: $(row).find('td:eq(7)').text().trim(),
  524. coldChainItem: $(row).find('td:eq(8)').text().trim(),
  525. registeredItem: $(row).find('td:eq(9)').text().trim(),
  526. charityAidItem: $(row).find('td:eq(10)').text().trim(),
  527. packaging: $(row).find('td:eq(11)').text().trim(),
  528. packageQuantity: $(row).find('input[name="packageQuantity"]').val(),
  529. singleDoseValue: $(row).find('input[name="singleDoseValue"]').val(),
  530. singleDoseUnit: $(row).find('select[name="singleDoseUnit"]').val(),
  531. dosageFrequency: $(row).find('select[name="dosageFrequency"]').val(),
  532. dosageFrequencyDays: $(row).find('input[name="dosageFrequencyDays"]').val(),
  533. dvalueDays: $(row).find('input[name="dvalueDays"]').val()
  534. };
  535. if (rowData.packageQuantity == ''|| rowData.packageQuantity == null|| rowData.packageQuantity == undefined){
  536. $.modal.alertError("请输入包装数量");
  537. return;
  538. }
  539. if (rowData.singleDoseValue == ''|| rowData.singleDoseValue == null|| rowData.singleDoseValue == undefined){
  540. $.modal.alertError("请输入单次剂量数值");
  541. return;
  542. }
  543. if (rowData.singleDoseUnit == ''|| rowData.singleDoseUnit == null|| rowData.singleDoseUnit == undefined){
  544. $.modal.alertError("请输入单次剂量单位");
  545. return;
  546. }
  547. if (rowData.dosageFrequency == ''|| rowData.dosageFrequency == null|| rowData.dosageFrequency == undefined){
  548. $.modal.alertError("请输入频次");
  549. return;
  550. }
  551. /*if (rowData.dosageFrequencyDays == ''|| rowData.dosageFrequencyDays == null|| rowData.dosageFrequencyDays == undefined){
  552. $.modal.alertError("请输入频次换算使用天数");
  553. return;
  554. }*/
  555. // 将每一行的数据对象添加到数组中
  556. tableRows.push(rowData);
  557. });
  558. return tableRows;
  559. }
  560. function submitHandler() {
  561. prescriptionNumber='';
  562. drugsLinkId='';
  563. var prescribingDoctor = $('#prescribingDoctor').val();
  564. if (prescribingDoctor == ''|| prescribingDoctor == null|| prescribingDoctor == undefined){
  565. $.modal.alertError("请输入处方医生");
  566. return;
  567. }
  568. var prescriptionIssueDate = $('#prescriptionIssueDate').val();
  569. if (prescriptionIssueDate == ''|| prescriptionIssueDate == null|| prescriptionIssueDate == undefined){
  570. $.modal.alertError("处方开具日期");
  571. return;
  572. }
  573. // 创建一个 FormData 对象用于提交表单数据
  574. var formData = new FormData();
  575. // 如果有文件上传,例如处方图片和发票图片
  576. // var prescriptionImageUrlInput = $('#prescriptionImageUrl')[0];
  577. // if (prescriptionImageUrlInput.files.length > 0) {
  578. // formData.append('prescriptionImageUrl', prescriptionImageUrlInput.files[0]);
  579. // }
  580. //
  581. // var invoiceImageUrlInput = $('#invoiceImageUrl')[0];
  582. // if (invoiceImageUrlInput.files.length > 0) {
  583. // formData.append('invoiceImageUrl', invoiceImageUrlInput.files[0]);
  584. // }
  585. // 收集患者信息
  586. var patientObj = getSelectedPatient();
  587. if (patientObj) {
  588. console.log("Selected Patient:", patientObj);
  589. // 添加患者信息到 FormData
  590. formData.append('patientId', patientObj.id);
  591. formData.append('patientName', patientObj.name || '');
  592. let gender = patientObj.gender; // 获取表单中的性别值
  593. if (gender ===1) {
  594. gender = 1; // 如果为空,则设置默认值为 '0'
  595. }else{
  596. gender = 0;
  597. }
  598. formData.append('gender', gender);
  599. formData.append('age', patientObj.age);
  600. console.log("PatientObj=" + patientObj);
  601. }else{
  602. $.modal.alertError("请先选择患者");
  603. return;
  604. }
  605. // 收集表单中的其他字段,并将其添加到 FormData 中
  606. $('#dtp-form-newcfxx').find(':input').each(function() {
  607. var $this = $(this);
  608. var name = $this.attr('name');
  609. if (name) { // 确保有 name 属性
  610. var value = $this.val();
  611. if (value !== undefined && value !== null && value !== '') { // 确保值不是空
  612. formData.append(name, value);
  613. }
  614. }
  615. });
  616. var selectedOptionsDL = $('#category-select option:selected');
  617. var selectedOptionsXL = $('#subcategory-select option:selected');
  618. /*var JBDL = selectedOptionsDL.map(function() { // 疾病大类
  619. return $(this).text();
  620. }).get(); // 获取的数据格式 [ "肿瘤治疗并发症与合并症名称", "风湿免疫疾病名称库" ]
  621. var JBXL = selectedOptionsXL.map(function() { // 疾病小类
  622. return $(this).text();
  623. }).get(); // 获取的数据格式 [ "肿瘤治疗并发症与合并症名称", "风湿免疫疾病名称库" ]*/
  624. var selectedDataDL = selectedOptionsDL.map(function() {
  625. return {
  626. id: $(this).val(),
  627. name: $(this).text()
  628. };
  629. }).get(); // 获取的数据格式 [{ id: "2", name: "肿瘤治疗并发症与合并症名称" }, { id: "3", name: "风湿免疫疾病名称库" }]
  630. var selectedDataXL = selectedOptionsXL.map(function() {
  631. return {
  632. id: $(this).val(),
  633. name: $(this).text()
  634. };
  635. }).get(); // 获取的数据格式 [{ id: "2", name: "肿瘤治疗并发症与合并症名称" }, { id: "3", name: "风湿免疫疾病名称库" }]
  636. const DL = JSON.stringify(selectedDataDL);
  637. const XL = JSON.stringify(selectedDataXL);
  638. formData.append('dl', DL);
  639. formData.append('xl', XL);
  640. formData.append('dlanme', DL);
  641. formData.append('xlname', XL);
  642. console.log("DL=" + DL);
  643. console.log("XL=" + XL);
  644. formData.append('remarks', remarks);
  645. formData.append('reviewingName', reviewingName);
  646. formData.append('reviewStatus', reviewStatus);
  647. formData.append('reviewFormData', reviewFormData);
  648. // 将药物数据序列化为 JSON 字符串并添加到 FormData 中
  649. /*var drugData = getTableData(); // 假设此函数正确获取表格数据
  650. if (drugData.length > 0) {
  651. formData.append('drugData', JSON.stringify(drugData));
  652. }else{
  653. $.modal.alertError("请添加药品");
  654. return;
  655. }*/
  656. var tableRows = [];
  657. var falg = true;
  658. $('#drugInfoTable tbody tr').each(function(index, row) {
  659. var rowData = {
  660. productId: $(row).data('product-id'),
  661. mdmCode: $(row).find('td:eq(1)').text().trim(),
  662. productName: $(row).find('td:eq(2)').text().trim(),
  663. genericName: $(row).find('td:eq(3)').text().trim(),
  664. specification: $(row).find('td:eq(4)').text().trim(),
  665. manufacturerShortName: $(row).find('td:eq(5)').text().trim(),
  666. administrationMethod: $(row).find('td:eq(6)').text().trim(),
  667. followUpItem: $(row).find('td:eq(7)').text().trim(),
  668. coldChainItem: $(row).find('td:eq(8)').text().trim(),
  669. registeredItem: $(row).find('td:eq(9)').text().trim(),
  670. charityAidItem: $(row).find('td:eq(10)').text().trim(),
  671. packaging: $(row).find('td:eq(11)').text().trim(),
  672. packageQuantity: $(row).find('input[name="packageQuantity"]').val(),
  673. singleDoseValue: $(row).find('input[name="singleDoseValue"]').val(),
  674. singleDoseUnit: $(row).find('select[name="singleDoseUnit"]').val(),
  675. dosageFrequency: $(row).find('select[name="dosageFrequency"]').val(),
  676. dosageFrequencyDays: $(row).find('input[name="dosageFrequencyDays"]').val(),
  677. dvalueDays: $(row).find('input[name="dvalueDays"]').val(),
  678. dosageMax: $(row).find('input[name="dosageMax"]').val(),
  679. unitMax: $(row).find('input[name="unitMax"]').val(),
  680. dosageMin: $(row).find('input[name="dosageMin"]').val(),
  681. unitMin: $(row).find('input[name="unitMin"]').val(),
  682. dosageNormal: $(row).find('input[name="dosageNormal"]').val(),
  683. unitNormal: $(row).find('input[name="unitNormal"]').val(),
  684. packingValue: $(row).find('input[name="packingValue"]').val(),
  685. packingUnit: $(row).find('input[name="packingUnit"]').val(),
  686. };
  687. if (rowData.packageQuantity == ''|| rowData.packageQuantity == null|| rowData.packageQuantity == undefined){
  688. $.modal.alertError("请输入包装数量");
  689. falg = false;
  690. return falg;
  691. }
  692. if (rowData.singleDoseValue == ''|| rowData.singleDoseValue == null|| rowData.singleDoseValue == undefined){
  693. $.modal.alertError("请输入单次剂量数值");
  694. falg = false;
  695. return falg;
  696. }
  697. if (rowData.singleDoseUnit == ''|| rowData.singleDoseUnit == null|| rowData.singleDoseUnit == undefined){
  698. $.modal.alertError("请选择单次剂量单位");
  699. falg = false;
  700. return falg;
  701. }
  702. if (rowData.dosageFrequency == ''|| rowData.dosageFrequency == null|| rowData.dosageFrequency == undefined){
  703. $.modal.alertError("请选择频次");
  704. falg = false;
  705. return falg;
  706. }
  707. /* 计算 D 值天数*/
  708. var dcnum = rowData.singleDoseValue; // 单次用量
  709. var pcnum = rowData.dosageFrequency; // 用药频次 eg: 一天一次
  710. // 计算 D 值
  711. var num = rowData.packageQuantity; // 买药数量
  712. var dnum = (num*rowData.dosageFrequencyDays)/(dcnum*pcnum); // 买药数量 * 包装单位数量 / 频次天数 = D 值天数
  713. if((dcnum*pcnum)>rowData.dosageMax){
  714. $.modal.confirm("单次剂量数值频次大于最大值 是否使用默认值?", function() {
  715. if (rowData.dosageNormal == ''|| rowData.dosageNormal == null|| rowData.dosageNormal == undefined){
  716. dnum = (num*rowData.dosageFrequencyDays)/rowData.dosageMax;
  717. }else {
  718. dnum = (num*rowData.dosageFrequencyDays)/rowData.dosageNormal;
  719. }
  720. });
  721. }
  722. if((dcnum*pcnum)<rowData.dosageMin){
  723. $.modal.confirm("单次剂量数值频次小于最小值 是否使用默认值?", function() {
  724. if (rowData.dosageNormal == ''|| rowData.dosageNormal == null|| rowData.dosageNormal == undefined){
  725. dnum = (num*rowData.dosageFrequencyDays)/rowData.dosageMin;
  726. }else {
  727. dnum = (num*rowData.dosageFrequencyDays)/rowData.dosageNormal;
  728. }
  729. });
  730. }
  731. rowData.dvalueDays = dnum;
  732. // 将每一行的数据对象添加到数组中
  733. tableRows.push(rowData);
  734. });
  735. if (!falg){
  736. return;
  737. }
  738. if (tableRows.length > 0) {
  739. formData.append('drugData', JSON.stringify(tableRows));
  740. }else{
  741. $.modal.alertError("请添加药品");
  742. return;
  743. }
  744. $.ajax({
  745. cache: false, // 设置为 false 防止缓存
  746. type: "POST",
  747. url: prefix_recipe + "/saveCFDJ",
  748. data: formData,
  749. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  750. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  751. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  752. error: function (request) {
  753. $.modal.alertError("操作失败");
  754. },
  755. success: function (data) {
  756. if(data.data.code==200){
  757. prescriptionNumber = data.data.prescriptionNumber;
  758. drugsLinkId = data.data.drugsLinkId;
  759. $.modal.msg(data.msg);
  760. $.modal.closeTab();
  761. }else{
  762. $.modal.alertError(data.data.msg);
  763. }
  764. }
  765. });
  766. }
  767. function openCheckYSSH(){
  768. //初始化时加载药师信息
  769. loadPharmacists();
  770. //$.modal.open("药师审核", prefix_pmService+'/openCheckYSJC'); findRevieForList
  771. $('#myModal').modal('show');
  772. // $.modal.closeTab();
  773. }
  774. // 异步加载所有药师信息并填充下拉框
  775. function loadPharmacists() {
  776. $.ajax({
  777. url: prefix_recipe+ "/findRevieForList", // 假设这是获取所有药师的API端点
  778. type: 'POST',
  779. cache: false, // 设置为 false 防止缓存
  780. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  781. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  782. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  783. success: function (data) {
  784. var select = $('#pharmacistNameSelect');
  785. // 清空除了默认选项外的所有选项
  786. select.find('option:not(:first)').remove();
  787. data.data.forEach(function (pharmacist) {
  788. select.append(new Option(pharmacist.pharmacistName, pharmacist.id));
  789. });
  790. },
  791. error: function () {
  792. $.modal.alertError('加载药师信息失败');
  793. }
  794. });
  795. }
  796. // 当选择药师后显示密码输入框
  797. $('#pharmacistNameSelect').change(function () {
  798. var selectedValue = $(this).val();
  799. // 如果选择了具体的药师
  800. if (selectedValue) {
  801. $('#passwordGroup').show();
  802. $('#password').val(''); // 清空密码输入框
  803. $('#checkView').hide(); // 隐藏审核结果部分
  804. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  805. } else {
  806. // 如果没有选择任何药师,隐藏所有相关元素
  807. $('#passwordGroup').hide();
  808. $('#checkView').hide(); // 确保在切换药师时隐藏审核结果和意见
  809. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  810. $('#password').val(''); // 清空密码输入框
  811. }
  812. });
  813. // 验证药师密码并显示审核结果部分
  814. function verifyPassword() {
  815. var formData = new FormData();
  816. var pharmacistId = $('#pharmacistNameSelect').val();
  817. var password = $('#password').val();
  818. console.log(pharmacistId);
  819. formData.append('id', pharmacistId);
  820. formData.append('reviewPassword', password);
  821. $.ajax({
  822. url: prefix_recipe+"/ReviewCheckInputPassword", // 假设这是验证药师密码的API端点
  823. type: 'POST',
  824. data: formData,
  825. cache: false, // 设置为 false 防止缓存
  826. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  827. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  828. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  829. success: function (data) {
  830. if (data.code === 0) {
  831. $('#checkView').show();
  832. $('#pharmacistVerified').show(); // 显示验证成功的符号
  833. } else {
  834. $.modal.alertError('密码错误');
  835. $('#checkView').hide();
  836. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  837. }
  838. },
  839. error: function () {
  840. $.modal.alertError('验证失败');
  841. }
  842. });
  843. }
  844. // 添加点击事件监听器到确认按钮上,用于触发密码验证
  845. $('#verifyPasswordBtn').click(function () {
  846. verifyPassword();
  847. });
  848. // 提交审核信息
  849. function submitReview() {
  850. debugger
  851. if ($('#pharmacistNameSelect').val() && $('#password').is(':visible')) {
  852. verifyPassword();
  853. } else {
  854. $.modal.alert('请选择审核药师并输入密码');
  855. }
  856. // 如果 checkView 显示,则可以提交表单
  857. if ($('#checkView').is(':visible')) {
  858. // 直接从特定的输入元素中获取值
  859. // 获取审核药师姓名
  860. var reviewingNameOption = $('#pharmacistNameSelect option:selected');
  861. var reviewingName1 = reviewingNameOption.text(); // 获取选中的选项文本
  862. var reviewStatus1 = $('input[name="checkResult"]:checked').val(); // 获取选中的审核结果
  863. var remarks1 = $('#remarks').val();
  864. // 检查是否所有必填项都已填写
  865. if (!reviewingName1) {
  866. $.modal.alert('请选择审核人');
  867. return;
  868. }
  869. if (!reviewStatus1) {
  870. $.modal.alert('请选择审核结果');
  871. return;
  872. }
  873. remarks= remarks1;
  874. reviewingName=reviewingName1;
  875. reviewStatus=reviewStatus1;
  876. // 添加到 formData 中
  877. reviewFormData.append("reviewingName", reviewingName1);
  878. reviewFormData.append("reviewStatus", reviewStatus1);
  879. // reviewFormData.append("prescriptionNumber", prescriptionNumber);
  880. // reviewFormData.append("drugsLinkId", drugsLinkId);
  881. reviewFormData.append("remarks", remarks1);
  882. $.modal.msgSuccess('审核信息已保存到处方登记页');
  883. $('#myModal').modal('hide'); // 关闭弹窗
  884. }
  885. }
  886. // callBack获取父窗口方法(方式二)
  887. function selectUsersToParentCallBack2(){
  888. var options = {
  889. title: '添加处方登记药品',
  890. width: 1000,
  891. height: 600,
  892. url: prefix_yppz + '/getAllProduct',
  893. callBack: doSubmit2
  894. };
  895. $.modal.openOptions(options);
  896. }
  897. function doSubmit2(index, layero) {
  898. var rows = layero.find("iframe")[0].contentWindow.selectTableObject();
  899. if (rows.length == 0) {
  900. $.modal.alertWarning("请至少选择一条记录");
  901. return;
  902. }
  903. var tableBody = $('#drugInfoTable tbody');
  904. rows.forEach(function(item) {
  905. // 动态选择所有列并映射到更具描述性的名称
  906. var columnsData = {
  907. productId: item.productId,
  908. productCode: item.productCode,
  909. productName: item.productName,
  910. genericName: item.genericName,
  911. specification: item.specification,
  912. packaging: item.packaging,
  913. manufacturer: item.manufacturer,
  914. manufacturerAbbreviation: item.manufacturerAbbreviation,
  915. productStatus: item.productStatus,
  916. dtpFlag: item.dtpFlag,
  917. isInsuranceDrug: item.isInsuranceDrug,
  918. administrationMethod: item.administrationMethod,
  919. registeredItem: item.registeredItem,
  920. followUpItem: item.followUpItem,
  921. coldChainItem: item.coldChainItem,
  922. flowItem: item.flowItem,
  923. charityAidItem: item.charityAidItem,
  924. dosageMax: item.dosageMax,
  925. unitMax: item.unitMax,
  926. dosageMin: item.dosageMin,
  927. unitMin: item.unitMin,
  928. dosageNormal: item.dosageNormal,
  929. unitNormal: item.unitNormal,
  930. packingValue: item.packingValue,
  931. packingUnit: item.packingUnit,
  932. dvalueDays: item.dvalueDays,
  933. };
  934. // 检查是否已经存在该药品
  935. if (!isProductExist(columnsData.productId)) {
  936. // 向表格中添加一行
  937. var row = `
  938. <tr data-product-id="${columnsData.productId}">
  939. <td><button onclick="deleteRow('${columnsData.productId}')" class="btn btn-danger">删除重选择药品</button></td>
  940. <td>${columnsData.productCode}</td>
  941. <td>${columnsData.productName}</td>
  942. <td class="hidden-column">${columnsData.genericName}</td>
  943. <td>${columnsData.specification}</td>
  944. <td class="hidden-column">${columnsData.manufacturerAbbreviation}</td>
  945. <td class="hidden-column">${columnsData.administrationMethod}</td>
  946. <td class="hidden-column">${columnsData.followUpItem === 1 ? '是' : '否'}</td>
  947. <td class="hidden-column">${columnsData.coldChainItem === 1 ? '是' : '否'}</td>
  948. <td class="hidden-column">${columnsData.registeredItem === 1 ? '是' : '否'}</td>
  949. <td class="hidden-column">${columnsData.charityAidItem === 1 ? '是' : '否'}</td>
  950. <td class="hidden-column">${columnsData.packaging}</td>
  951. <td class="hidden-column"><input name="dosageMax" value="${columnsData.dosageMax}"/></td>
  952. <td class="hidden-column"><input name="unitMax" value="${columnsData.unitMax}"/></td>
  953. <td class="hidden-column"><input name="dosageMin" value="${columnsData.dosageMin}"/></td>
  954. <td class="hidden-column"><input name="unitMin" value="${columnsData.unitMin}"/></td>
  955. <td class="hidden-column"><input name="dosageNormal" value="${columnsData.dosageNormal}"/></td>
  956. <td class="hidden-column"><input name="unitNormal" value="${columnsData.unitNormal}"/></td>
  957. <td class="hidden-column"><input name="packingValue" value="${columnsData.packingValue}"/></td>
  958. <td class="hidden-column"><input name="packingUnit" value="${columnsData.packingUnit}"/></td>
  959. <td> <input name="packageQuantity" id="packageQuantity${columnsData.productId}" placeholder="取药数量(包装数)" class="styled-input" style="width: 130px;" type="number"></td>
  960. <td> <input name="singleDoseValue" id="singleDoseValue${columnsData.productId}" placeholder="单次剂量数值" class="styled-input" style="width: 130px;" type="number"></td>
  961. <td>
  962. <select name="singleDoseUnit" id="singleDoseUnit${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  963. <option value="">请选择</option>
  964. <!--<option value="1">mg</option>
  965. <option value="2">g</option>
  966. <option value="3">片</option>-->
  967. </select>
  968. </td>
  969. <td>
  970. <select name="dosageFrequency" id="dosageFrequency${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  971. <option value="">请选择</option>
  972. <!--<option value="1">一日1次</option>
  973. <option value="2">一日2次</option>
  974. <option value="3">每天1次</option>
  975. <option value="4">每天隔天一次</option>
  976. <option value="5">每周2次</option>-->
  977. </select>
  978. </td>
  979. <td> <input name="dosageFrequencyDays" id="dosageFrequencyDays${columnsData.productId}" placeholder="购药包装单位" class="styled-input" style="width: 100px;" type="number"><span id="ycode${columnsData.productId}"></span></td>
  980. <td> <input name="dvalueDays" id="dvalueDays${columnsData.productId}" placeholder="系统自动计算" class="styled-input" disabled="" style="width: 100px;" type="number"></td>
  981. </tr>
  982. `;
  983. tableBody.append(row);
  984. dataInfo(columnsData.productId);
  985. //bindDosageFrequencyChangeListener(columnsData.productId);
  986. $('#dosageFrequencyDays'+columnsData.productId).val(columnsData.packingValue);
  987. $('#ycode'+columnsData.productId).text(columnsData.packingUnit);
  988. } else {
  989. $.modal.alertWarning(`药品 [ ${columnsData.productName} ] 已经添加了`);
  990. }
  991. });
  992. $.modal.close(index);
  993. }
  994. function dataInfo(productId){
  995. /*<![CDATA[*/
  996. var storeTypes = /*[[${@dict.getType('sys_gxhpz_gg_unitall')}]]*/ [];
  997. /*]]>*/
  998. /*<![CDATA[*/
  999. var pcTypes = /*[[${@dict.getType('sys_select_dtp_ysfw_sfpx')}]]*/ [];
  1000. /*]]>*/
  1001. // 获取<select>元素
  1002. var selectElement = document.getElementById('singleDoseUnit' + productId);
  1003. var pcselectElement = document.getElementById('dosageFrequency' + productId);
  1004. storeTypes.forEach(function(item, index){
  1005. console.log("item"+item.dictLabel);
  1006. console.log("dictValue"+item.dictValue);
  1007. var option = document.createElement("option");
  1008. option.value = item.dictValue;
  1009. option.text = item.dictLabel;
  1010. selectElement.add(option);
  1011. })
  1012. pcTypes.forEach(function(item, index){
  1013. console.log("item"+item.dictLabel);
  1014. console.log("dictValue"+item.dictValue);
  1015. var option = document.createElement("option");
  1016. option.value = item.dictValue;
  1017. option.text = item.dictLabel;
  1018. pcselectElement.add(option);
  1019. })
  1020. }
  1021. // 动态绑定用药频次选择事件
  1022. function bindDosageFrequencyChangeListener(productId) {
  1023. $(`#dosageFrequency${productId}`).on('change', function () {
  1024. debugger
  1025. var selectedValue = $(this).val();
  1026. if (selectedValue) {
  1027. $(`#dosageFrequencyDays${productId}`).val(selectedValue);
  1028. } else {
  1029. $(`#dosageFrequencyDays${productId}`).val('');
  1030. }
  1031. });
  1032. }
  1033. function deleteRow(productId) {
  1034. $.modal.confirm("确认删除该药品吗?", function() {
  1035. // 删除对应行
  1036. $('#drugInfoTable tbody tr[data-product-id="' + productId + '"]').remove();
  1037. });
  1038. }
  1039. function isProductExist(productId) {
  1040. // 检查表格中是否已经存在该药品
  1041. return $('#drugInfoTable tbody tr[data-product-id="' + productId + '"]').length > 0;
  1042. }
  1043. /* 用户管理-新增-选择门店树 */
  1044. function selectDeptTree() {
  1045. var treeId = $("#treeId").val();
  1046. var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
  1047. var url = ctx + "system/user/selectDeptTree/" + deptId;
  1048. var options = {
  1049. title: '选择门店',
  1050. width: "380",
  1051. url: url,
  1052. callBack: doSubmit
  1053. };
  1054. $.modal.openOptions(options);
  1055. }
  1056. function doSubmit(index, layero){
  1057. var body = $.modal.getChildFrame(index);
  1058. $("#treeId").val(body.find('#treeId').val());
  1059. $("#treeName").val(body.find('#treeName').val());
  1060. $.modal.close(index);
  1061. }
  1062. function bookbuilding(){
  1063. $.modal.open("快速建档", prefix_pmService+'/archivesAdd');
  1064. }
  1065. function resetPre() {
  1066. resetDate();
  1067. $("#dtp-form-hxcx")[0].reset();
  1068. $("#query").val("");
  1069. }
  1070. function search_hz() {
  1071. var query = $('#query').val().trim();
  1072. // 如果输入为空,清空 dValueId 输入框并停止进一步操作
  1073. if (!query) {
  1074. $('#query').val('');
  1075. return;
  1076. }
  1077. // 使用防抖机制延迟发送请求
  1078. // 发送 AJAX 请求到服务器查询数据
  1079. hzparam={query:query};//模拟微信扫码获取微信openId
  1080. $.ajax({
  1081. cache: true,
  1082. type: "POST",
  1083. url: prefix_pmService+'/slectPatientByNameOrPhoneOrIdCard', // 替换为实际的搜索 URL
  1084. data: hzparam,
  1085. async: false,
  1086. success: function (data) {
  1087. if(data.code==0){
  1088. dataList=[];
  1089. populatePatientTable(data.data);
  1090. dataList=data.data;
  1091. // 如果有且只有一条记录,默认选中这条记录
  1092. if (data.data.length === 1) {
  1093. setTimeout(function() {
  1094. $('input[name="selectPatient"]').first().prop('checked', true).trigger('change');
  1095. }, 0); // 确保DOM已经完全渲染
  1096. }
  1097. if (data.data.length <=0) {
  1098. var tbody = $('#patient-table tbody');
  1099. tbody.empty(); // 清空现有行
  1100. $.modal.confirm("未找到患者 点击确定可快速建档", function() {
  1101. // 快速建档
  1102. bookbuilding();
  1103. });
  1104. }
  1105. // // 如果找到匹配的数据,更新输入框
  1106. // $('#patientId').val(data.data.id);
  1107. // console.log("data111===="+data);
  1108. // $('#patientName').val(data.data.name);
  1109. // var gender = data.data.gender;
  1110. // $('#gender').val(gender === 1 ? '男' : gender === 0 ? '女' : '');
  1111. // $('#age').val(data.data.age);
  1112. // var patientId = data.data.id;
  1113. // if(patientId !='' && patientId != null){
  1114. // //查询出对应患者的上一次处方登记信息
  1115. // getLastRecipe(patientId);
  1116. // }
  1117. }else{
  1118. // // 清空表格中的所有数据行
  1119. // $('#patientId').val('');
  1120. // $('#patientName').val('');
  1121. // $('#gender').val('');
  1122. // $('#age').val('');
  1123. // $('#query').val('');
  1124. // getLastRecipe(0);
  1125. $.modal.alertWarning(`未找到患者 可快速建档`);
  1126. bookbuilding();
  1127. var tbody = $('#patient-table tbody');
  1128. tbody.empty(); // 清空现有行
  1129. }
  1130. },
  1131. error: function(error) {
  1132. // 清空 dValueId 输入框
  1133. $('#query').val('');
  1134. }
  1135. });
  1136. }
  1137. </script>
  1138. <style>
  1139. .ibox {
  1140. width: auto;
  1141. height: 500px;
  1142. overflow: auto; /* 当内容超过指定尺寸时显示滚动条 */
  1143. }
  1144. .fixed-layout-table {
  1145. width: 100%;
  1146. border-collapse: collapse; /* 减少单元格间距 */
  1147. }
  1148. .fixed-layout-table thead th {
  1149. position: sticky;
  1150. top: 0;
  1151. background-color: #f8f9fa; /* 表头背景颜色 */
  1152. z-index: 1;
  1153. }
  1154. /* 隐藏列的样式 */
  1155. .hidden-column {
  1156. display: none;
  1157. }
  1158. .hidden {
  1159. display: none;
  1160. }
  1161. /*.ibox {*/
  1162. /* width: 700px;*/
  1163. /* margin-bottom: 20px;*/
  1164. /* border: 1px solid #e7eaec;*/
  1165. /* border-radius: 4px;*/
  1166. /*}*/
  1167. .ibox-title {
  1168. background-color: #e6e3da;
  1169. border-bottom: 1px solid #e7eaec;
  1170. padding: 10px 15px;
  1171. font-size: 16px;
  1172. width: 1540px;
  1173. }
  1174. .ibox-content {
  1175. padding: 15px;
  1176. }
  1177. .ibox-content h4 {
  1178. margin-top: 0;
  1179. }
  1180. .form-horizontal .form-group {
  1181. margin-right: 384px;
  1182. margin-left: 3px;
  1183. }
  1184. input[type=file] {
  1185. display: none;
  1186. }
  1187. .form-group {
  1188. margin-bottom: -1px;
  1189. }
  1190. /* 添加一些基础样式 */
  1191. body {
  1192. font-family: Arial, sans-serif;
  1193. }
  1194. /* 使用ID选择器来确保样式仅应用于特定表格 */
  1195. #drugInfoTable {
  1196. /*width: 500px;*/
  1197. border-collapse: collapse;
  1198. }
  1199. /* 使用后代选择器来确保样式仅应用于该表格内的th和td元素 */
  1200. #drugInfoTable th, #drugInfoTable td {
  1201. text-align: left;
  1202. padding: 5px;
  1203. border-bottom: 1px solid #ddd;
  1204. }
  1205. /* 使用后代选择器来确保样式仅应用于该表格内的tr元素 */
  1206. #drugInfoTable tr:nth-child(even) {
  1207. background-color: #f2f2f2;
  1208. }
  1209. /* 修正了宽度设置,因为宽度通常不应该应用于行(tr),而是应用于单元格(td或th) */
  1210. #drugInfoTable tr:nth-child(even) td {
  1211. width: auto; /* 根据内容自动调整宽度 */
  1212. }
  1213. .hidden-column {
  1214. display: none;
  1215. }
  1216. .customize-table {
  1217. width: 100%;
  1218. border-collapse: collapse;
  1219. }
  1220. .customize-table th, .customize-table td {
  1221. border: 1px solid #ddd;
  1222. padding: 8px;
  1223. }
  1224. .customize-table th {
  1225. background-color: #f2f2f2;
  1226. text-align: left;
  1227. }
  1228. .customize-table tr:nth-child(even) {
  1229. background-color: #f9f9f9;
  1230. }
  1231. .customize-table tr:hover {
  1232. background-color: #ddd;
  1233. }
  1234. /* 新增:选中行的样式 */
  1235. .customize-table tr.selected {
  1236. background-color: #a9a9c5;
  1237. color: white; /* 确保文字可见 */
  1238. }
  1239. .verified-symbol {
  1240. color: green;
  1241. font-size: 16px;
  1242. margin-left: 5px;
  1243. }
  1244. </style>
  1245. </body>
  1246. </html>