add.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  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. </head>
  8. <body>
  9. <div class="main-content">
  10. <form id="form-prescription-add" class="form-horizontal">
  11. <div class="ibox float-e-margins">
  12. <label class="font-noraml">处方上传</label>
  13. <div class="new-contentarea tc">
  14. <a href="javascript:void(0)" class="upload-img"><label for="inputImage" >上传图像</label> </a>
  15. <input type="file" name="avatar" id="inputImage" onchange="uploadImage(this)" accept="image/*"/>
  16. </div>
  17. </div>
  18. <div class="ibox">
  19. <div class="ibox-title">
  20. <img id="uploadedImage" src="" alt="上传的图片" style="max-width: 100%; display: block;">
  21. </div>
  22. </div>
  23. <ul class="list-group list-group-striped">
  24. <li class="list-group-item hidden" id="prescriptionNumberItem"><i class="fa fa-user"></i>
  25. <b class="font-noraml">处方单号:</b>
  26. <p class="pull-right">
  27. <div class="customize-form-group select-time">
  28. <input id="prescriptionNumber" name="prescriptionNumber" placeholder="请输入处方单号" class="styled-input" type="text">
  29. </div>
  30. </p>
  31. </li>
  32. <li class="list-group-item hidden" id="prescriptionSourceItem"><i class="fa fa-user"></i>
  33. <b class="font-noraml">处方来源:</b>
  34. <p class="pull-right">
  35. <div class="customize-form-group select-time">
  36. <input id="prescriptionSource" name="prescriptionSource" placeholder="处方来源" class="styled-input" type="text">
  37. </div>
  38. </p>
  39. </li>
  40. <li class="list-group-item"><i class="fa fa-envelope-o"></i>
  41. <b class="font-noraml">处方日期:</b>
  42. <p class="pull-right">
  43. <div class="customize-form-group select-time">
  44. <input name="prescriptionDate" placeholder="处方日期" id="prescriptionDate" class="time-input time-input2" type="text">
  45. </div>
  46. </p>
  47. </li>
  48. <li class="list-group-item"><i class="fa fa-user"></i>
  49. <b class="font-noraml">医院:</b>
  50. <p class="pull-right">
  51. <div class="customize-form-group select-time">
  52. <select name="hospital" class="styled-input" th:with="type=${@dict.getType('sys_select_dtp_hospital')}">
  53. <option value="">请选择</option>
  54. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}" >
  55. </option>
  56. </select>
  57. </div>
  58. </p>
  59. </li>
  60. <li class="list-group-item"><i class="fa fa-user"></i>
  61. <b class="font-noraml">处方医生:</b>
  62. <p class="pull-right">
  63. <div class="customize-form-group select-time">
  64. <input id="doctor" name="doctor" placeholder="请输入医生" class="styled-input" type="text" maxlength="30" >
  65. </div>
  66. </p>
  67. </li>
  68. <li class="list-group-item"><i class="fa fa-envelope-o"></i>
  69. <b class="font-noraml">科室:</b>
  70. <p class="pull-right">
  71. <div class="customize-form-group select-time">
  72. <input id="department" name="department" placeholder="请输入科室" class="form-control" type="text" maxlength="50">
  73. </div>
  74. </p>
  75. </li>
  76. <li class="list-group-item">
  77. <i class="fa fa-envelope-o"></i>
  78. <b class="font-noraml">疾病类型:</b>
  79. <p class="pull-right">
  80. <div class="customize-form-group2 select-time">
  81. <select name="diseaseType" id="diseaseType" class="styled-input2" th:with="type=${@dict.getType('sys_select_dtp_ysfw_mbzllx')}" required>
  82. <option value="">请选择</option>
  83. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}"></option>
  84. </select>
  85. </div>
  86. <div class="customize-form-group2 select-time" id="specificDiseaseDiv1" style="display: none;" >
  87. <select name="specificDisease" id="specificDisease1" class="styled-input2" th:with="type=${@dict.getType('sys_select_dtp_ysfw_mbzllx_mb')}" required>
  88. <option value="">请选择</option>
  89. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}"></option>
  90. </select>
  91. </div>
  92. <div class="customize-form-group2 select-time" id="specificDiseaseDiv2" style="display: none;">
  93. <select name="specificDisease" id="specificDisease2" class="styled-input2" th:with="type=${@dict.getType('sys_select_dtp_ysfw_mbzllx_zl')}" required>
  94. <option value="">请选择</option>
  95. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}"></option>
  96. </select>
  97. </div>
  98. </p>
  99. </li>
  100. <li class="list-group-item"><i class="fa fa-envelope-o"></i>
  101. <b class="font-noraml">临床诊断:</b>
  102. <p class="pull-right">
  103. <div class="customize-form-group select-time">
  104. <select name="clinicalDiagnosis" class="styled-input" th:with="type=${@dict.getType('sys_select_dtp_ysfw_lczd')}" >
  105. <option value="">请选择</option>
  106. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}">
  107. </option>
  108. </select>
  109. </div>
  110. </p>
  111. </li>
  112. </ul>
  113. </form>
  114. <div class="form-horizontal">
  115. <h4 class="form-header h4">药品信息</h4>
  116. <p class="pull-right">
  117. <div class="customize-form-group select-time">
  118. <div class="panel-body">
  119. <strong>药品信息</strong>
  120. <div class="form-group" id="formGroup">
  121. <div class="col-sm-12">
  122. <div class="col-sm-11" id="carGroup">
  123. <div id="iboxContainer">
  124. <ul class="list-group list-group-striped" id="inputList">
  125. <!-- 输入框将在这里动态添加 -->
  126. </ul>
  127. </div>
  128. </div>
  129. <div class="col-sm-offset-5 col-sm-10">
  130. <button type="button" onclick="selectUsersToParentCallBack2()" class="btn-danger">添加药品</button>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </div>
  136. </p>
  137. </div>
  138. </div>
  139. <th:block th:include="include :: footer" />
  140. <th:block th:include="include :: select2-js" />
  141. <th:block th:include="include :: bootstrap-fileinput-js" />
  142. <script>
  143. var prefix = ctx + "dtp/recipe";
  144. var jbtype='';
  145. function uploadImage(input) {
  146. if (input.files && input.files[0]) {
  147. var reader = new FileReader();
  148. reader.onload = function(e) {
  149. $('#uploadedImage').attr('src', e.target.result).show();
  150. sendImageToServer(e.target.result);
  151. };
  152. reader.readAsDataURL(input.files[0]);
  153. }
  154. }
  155. function sendImageToServer(imageData) {
  156. $.ajax({
  157. url: '/upload-and-recognize',
  158. type: 'POST',
  159. contentType: 'application/json',
  160. data: JSON.stringify({ imageData: imageData }),
  161. success: function(response) {
  162. $('#hospital').val(response.hospital);
  163. $('#prescriptionDate').val(response.prescriptionDate);
  164. $('#prescriptionDoctor').val(response.prescriptionDoctor);
  165. $('#clinicalDiagnosis').val(response.clinicalDiagnosis);
  166. $('#department').val(response.department);
  167. },
  168. error: function(error) {
  169. console.error('Error:', error);
  170. }
  171. });
  172. }
  173. document.getElementById('diseaseType').addEventListener('change', function() {
  174. jbtype = this.value;
  175. if(jbtype=='慢病'){
  176. specificDiseaseDiv1
  177. $('#specificDiseaseDiv1').show();
  178. $('#specificDiseaseDiv2').hide();
  179. $('#specificDisease2').prop('selectedIndex', 0);
  180. }else if(jbtype=='肿瘤'){
  181. $('#specificDiseaseDiv2').show();
  182. $('#specificDiseaseDiv1').hide();
  183. $('#specificDisease1').prop('selectedIndex', 0);
  184. }else{
  185. $('#specificDisease1').prop('selectedIndex', 0);
  186. $('#specificDisease2').prop('selectedIndex', 0);
  187. $('#specificDiseaseDiv2').hide();
  188. $('#specificDiseaseDiv1').hide();
  189. }
  190. console.log('Selected value:', this.value);
  191. });
  192. $(document).ready(function () {
  193. //$('#prescriptionSourceItem').hide();//控制是第三方存入后 登记处方时的信息显示字段
  194. //$('#prescriptionNumberItem').hide();//控制是第三方存入后 登记处方时的信息显示字段
  195. // 单图上传
  196. $("#singleFile").fileinput({
  197. uploadUrl: ctx + 'common/upload',
  198. maxFileCount: 1,
  199. autoReplace: true
  200. }).on('fileuploaded', function (event, data, previewId, index) {
  201. var rsp = data.response;
  202. log.info("return url:" + rsp.url)
  203. log.info("reutrn fileName:" + rsp.fileName)
  204. log.info("reutrn newFileName:" + rsp.newFileName)
  205. log.info("return originalFilename:" + rsp.originalFilename)
  206. }).on('fileremoved', function (event, id, index) {
  207. $("input[name='" + event.currentTarget.id + "']").val('')
  208. })
  209. });
  210. function submitHandler() {
  211. add();
  212. }
  213. function add() {
  214. debugger
  215. var formData = [];
  216. $('.ibox').each(function() {
  217. var productId = $(this).find('input[name="productId"]').val();
  218. var mdmCode = $(this).find('input[name="mdmCode"]').val();
  219. var isFlipItem = $(this).find('input[name="isFlipItem"]').val();
  220. var specification = $(this).find('input[name="specification"]').val();
  221. var genericName = $(this).find('input[name="genericName"]').val();
  222. var productName = $(this).find('input[name="productName"]').val();
  223. var quantity = $(this).find('input[name="quantity"]').val();
  224. var usageMethod = $(this).find('select[name="usageMethod"]').val();
  225. var frequency = $(this).find('select[name="frequency"]').val();
  226. var wordUsage = $(this).find('input[name="wordUsage"]').val();
  227. var medicationCycle = $(this).find('input[name="medicationCycle"]').val();
  228. if (productId && quantity && usageMethod && frequency && wordUsage && medicationCycle && productName && genericName && mdmCode && isFlipItem && specification ) {
  229. formData.push({
  230. productId: productId,
  231. mdmCode: mdmCode,
  232. quantity: quantity,
  233. genericName: genericName,
  234. isFlipItem: isFlipItem,
  235. specification: specification,
  236. productName: productName,
  237. usageMethod: usageMethod,
  238. frequency: frequency,
  239. wordUsage: wordUsage,
  240. medicationCycle: medicationCycle
  241. });
  242. }
  243. });
  244. if ($.validate.form()) {
  245. var data = $("#form-prescription-add").serializeArray();
  246. data.push({name:'drugList',value:JSON.stringify(formData)});
  247. }
  248. log.info(data);
  249. $.ajax({
  250. cache : true,
  251. type : "POST",
  252. url : ctx + "dtp/recipe/SaveRecipe",
  253. data : data,
  254. async : false,
  255. error : function(request) {
  256. $.modal.alertError("系统错误");
  257. },
  258. success : function(data) {
  259. if (data.result == "200") {
  260. $.modal.msg("保存成功,正在刷新数据请稍后……有个问题同事添加相同药品", modal_status.SUCCESS);
  261. } else if (data.code == web_status.WARNING) {
  262. $.modal.alertWarning(data.msg)
  263. } else {
  264. $.modal.alertError(data.msg);
  265. }
  266. $.operate.successCallback(data);
  267. }
  268. });
  269. }
  270. // callBack获取父窗口方法(方式二)
  271. function selectUsersToParentCallBack2(){
  272. var options = {
  273. title: '药品信息',
  274. url: prefix + "/drugInfo",
  275. callBack: doSubmit2
  276. };
  277. $.modal.openOptions(options);
  278. }
  279. function doSubmit2(index, layero){
  280. var rows = layero.find("iframe")[0].contentWindow.selectTableObject();
  281. if (rows.length == 0) {
  282. $.modal.alertWarning("请至少选择一条记录");
  283. return;
  284. }
  285. rows.forEach(function(item, index) {
  286. // 生成 ibox 容器
  287. var ibox = '<div class="ibox" id="ibox-' + item.productId[0] + '">' +
  288. '<div class="ibox-title">' +
  289. '<h5>' + item.mdmCode[0] + ' - ' + item.productName[0] + '</h5>' +
  290. '<input name="isFlipItem" placeholder="是否为上翻品" id="isFlipItem-' + item.isFlipItem[0] + '" class="styled-input3" type="hidden" value="' + item.isFlipItem[0] + '">' +
  291. '<input name="productId" placeholder="商品id" id="productId-' + item.productId[0] + '" class="styled-input3" type="hidden" value="' + item.productId[0] + '">' +
  292. '<input name="genericName" placeholder="商品通用名" id="genericName-' + item.genericName[0] + '" class="styled-input3" type="hidden" value="' + item.genericName[0] + '">' +
  293. '<input name="productName" placeholder="商品名" id="productName-' + item.productName[0] + '" class="styled-input3" type="hidden" value="' + item.productName[0] + '">' +
  294. '<input name="mdmCode" placeholder="MD编码" id="mdmCode-' + item.mdmCode[0] + '" class="styled-input3" type="hidden" value="' + item.mdmCode[0] + '">' +
  295. '<input name="specification" placeholder="规格" id="specification-' + item.specification[0] + '" class="styled-input3" type="hidden" value="' + item.specification[0] + '">' +
  296. '</div>' +
  297. '<div class="ibox-content">' +
  298. '<table class="table table-bordered">' +
  299. '<tbody>' +
  300. '<tr>' +
  301. '<td>通用名</td>' +
  302. '<td>' + item.genericName[0] + '</td>' +
  303. '</tr>' +
  304. '<tr>' +
  305. '<td>规格</td>' +
  306. '<td>' + item.specification[0] + '</td>' +
  307. '</tr>' +
  308. '</tbody>' +
  309. '</table>' +
  310. '<div class="form-group row">' +
  311. '<label class="col-sm-2">数量</label>' +
  312. '<div class="col-sm-4">' +
  313. '<input name="quantity" placeholder="数量" id="quantity-' + item.productId[0] + '" class="styled-input3" type="number">' +
  314. '</div>' +
  315. '<label class="col-sm-2">用法</label>' +
  316. '<div class="col-sm-4">' +
  317. '<select name="usageMethod" id="usageMethod-' + item.productId[0] + '" class="styled-input3">' +
  318. '<option value="">请选择</option>' +
  319. '<option value="口服">口服</option>' +
  320. '<option value="注射">注射</option>' +
  321. '</select>' +
  322. '</div>' +
  323. '</div>' +
  324. '<div class="form-group row">' +
  325. '<label class="col-sm-2">使用频次</label>' +
  326. '<div class="col-sm-4">' +
  327. '<select name="frequency" id="frequency-' + item.productId[0] + '" class="styled-input4">' +
  328. '<option value="">请选择</option>' +
  329. '<option value="每日一次">每日一次</option>' +
  330. '<option value="每日两次">每日两次</option>' +
  331. '</select>' +
  332. '</div>' +
  333. '<label class="col-sm-2">单次用量</label>' +
  334. '<div class="col-sm-4">' +
  335. '<input name="wordUsage" placeholder="单次用量" id="wordUsage-' + item.productId[0] + '" class="styled-input4" type="text">' +
  336. '</div>' +
  337. '</div>' +
  338. '<div class="form-group row">' +
  339. '<label class="col-sm-2">用药周期(天)</label>' +
  340. '<div class="col-sm-4">' +
  341. '<input name="medicationCycle" placeholder="用药周期" id="medicationCycle-' + item.productId[0] + '" class="styled-input4" type="text">' +
  342. '</div>' +
  343. '<div class="col-sm-6 text-right">' +
  344. '<button onclick="deleteRow(\'' + item.productId[0] + '\')" class="btn btn-danger">删除</button>' +
  345. '</div>' +
  346. '</div>' +
  347. '</div>' +
  348. '</div>';
  349. // 添加到容器
  350. $('#iboxContainer').append(ibox);
  351. });
  352. $.modal.close(index);
  353. }
  354. function deleteRow(productId) {
  355. // 删除 ibox 容器
  356. $('#ibox-' + productId).remove();
  357. // 更新 productId 显示
  358. $('#productId').html('');
  359. }
  360. $('#inputImage').on('change', function() {
  361. var reader = new FileReader();
  362. var file = $('#inputImage')[0].files[0];
  363. if (/^image\/\w+$/.test(file.type)) {
  364. reader.onload = function(e) {
  365. if(croppable){
  366. cropper.replace(e.target.result)
  367. }
  368. }
  369. reader.readAsDataURL(this.files[0]);
  370. } else {
  371. $.modal.alertWarning('请选择一个图片文件。');
  372. }
  373. });
  374. function avatar() {
  375. var url = ctx + 'system/user/profile/avatar';
  376. top.layer.open({
  377. type: 2,
  378. area: [$(window).width() + 'px', $(window).height() + 'px'],
  379. fix: false,
  380. //不固定
  381. maxmin: true,
  382. shade: 0.3,
  383. title: "身份证信息",
  384. content: url,
  385. btn: ['确定', '关闭'],
  386. // 弹层外区域关闭
  387. shadeClose: true,
  388. yes: function(index, layero) {
  389. var iframeWin = layero.find('iframe')[0];
  390. iframeWin.contentWindow.submitHandler(index, layero);
  391. },
  392. cancel: function(index) {
  393. return true;
  394. }
  395. });
  396. }
  397. /* 用户管理-新增-选择门店树 */
  398. function selectDeptTree() {
  399. var treeId = $("#treeId").val();
  400. var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
  401. var url = ctx + "system/user/selectDeptTree/" + deptId;
  402. var options = {
  403. title: '选择门店',
  404. width: "380",
  405. url: url,
  406. callBack: doSubmit
  407. };
  408. $.modal.openOptions(options);
  409. }
  410. function doSubmit(index, layero){
  411. var body = $.modal.getChildFrame(index);
  412. $("#treeId").val(body.find('#treeId').val());
  413. $("#treeName").val(body.find('#treeName').val());
  414. $.modal.close(index);
  415. }
  416. </script>
  417. <style>
  418. .hidden {
  419. display: none;
  420. }
  421. .ibox {
  422. width: 700px;
  423. margin-bottom: 20px;
  424. border: 1px solid #e7eaec;
  425. border-radius: 4px;
  426. }
  427. .ibox-title {
  428. background-color: #f3f3f4;
  429. border-bottom: 1px solid #e7eaec;
  430. padding: 10px 15px;
  431. font-size: 16px;
  432. }
  433. .ibox-content {
  434. padding: 15px;
  435. }
  436. .ibox-content h4 {
  437. margin-top: 0;
  438. }
  439. .customize-form-group2 {
  440. display: inline-block;
  441. }
  442. .styled-input2 {
  443. padding: 5px;
  444. border: 1px solid #ccc;
  445. border-radius: 4px;
  446. width: 200px;
  447. }
  448. .styled-input3 {
  449. display: inline-block;
  450. padding: 5px;
  451. border: 1px solid #ccc;
  452. border-radius: 4px;
  453. width: 100px;
  454. }
  455. .styled-input4 {
  456. display: inline-block;
  457. padding: 5px;
  458. border: 1px solid #ccc;
  459. border-radius: 4px;
  460. width: 100px;
  461. }
  462. .col-sm-6 {
  463. width: 125%;
  464. }
  465. .form-horizontal .form-group {
  466. margin-right: 384px;
  467. margin-left: 3px;
  468. }
  469. input[type=file] {
  470. display: none;
  471. }
  472. .form-group {
  473. margin-bottom: -1px;
  474. }
  475. /* 添加一些基础样式 */
  476. body {
  477. font-family: Arial, sans-serif;
  478. }
  479. table {
  480. width: 400px;
  481. border-collapse: collapse;
  482. }
  483. th, td {
  484. text-align: left;
  485. padding: 8px;
  486. border-bottom: 1px solid #ddd;
  487. }
  488. tr:nth-child(even) {
  489. width: 15px;
  490. background-color: #f2f2f2;
  491. }
  492. </style>
  493. </body>
  494. </html>