edit.html 109 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475
  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 :: jasny-bootstrap-css" />
  6. <!-- <th:block th:include="include :: bootstrap-fileinput-css" />-->
  7. <th:block th:include="include :: jasny-bootstrap-css" />
  8. <th:block th:include="include :: layout-latest-css" />
  9. <th:block th:include="include :: select2-css" />
  10. </head>
  11. <body class="gray-bg">
  12. <div class="col-sm-12 search-collapse">
  13. <div id="hzjdflag">
  14. <a class="btn btn-info btn-rounded btn-sm" onclick="addArchivesCallback()">&nbsp;快速建档</a>
  15. <!--<a class="btn btn-info btn-rounded btn-sm" onclick="$.operate.addSetwht('添加患者信息','dtp/pmService/addArchivesCallback',800,800)">&nbsp;快速建档</a>-->
  16. <!-- addArchivesCallback()提示信息<a class="btn btn-info btn-rounded btn-sm" onclick="$.operate.addSetwht('添加患者信息','dtp/pmService/addArchivesCallback',800,750)">&nbsp;快速建档</a> -->
  17. <span id="patientFlagMessage" style="display:none;" class="text-danger"></span>
  18. </div>
  19. <form id="dtp-form-newcfxx" class="customize-search-form">
  20. <div class="customize-form-group-container">
  21. <div class="customize-form-group">
  22. <label>患者姓名:</label>
  23. <input name="patientName" placeholder="患者姓名" id="patientName" readonly class="styled-input" type="text" th:value="${patientName}">
  24. <input type="hidden" id="id" class="styled-input" name="id" th:value="${id}">
  25. <input type="hidden" id="patientId" class="styled-input" name="patientId" th:value="${patientId}">
  26. <input type="hidden" id="prescriptionNumber" name="prescriptionNumber" th:value="${prescriptionNumber}">
  27. <input type="hidden" id="drugsLinkId" name="drugsLinkId" th:value="${drugsLinkId}">
  28. <input type="hidden" id="status" placeholder="处方状态" name="status" th:value="${status}">
  29. </div>
  30. <div class="customize-form-group">
  31. <label>手机号码:</label>
  32. <input type="text" id="patientPhone" placeholder="手机号" class="styled-input" readonly th:value="${patientPhone}">
  33. </div>
  34. <div class="customize-form-group">
  35. <label>性别:</label>
  36. <select name="gender1" id="gender1" class="styled-input" th:with="type=${@dict.getType('sys_user_sex')}" disabled="true">
  37. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"
  38. th:selected="${dict.dictValue} == ${gender}" ></option>
  39. </select>
  40. <!-- <input name="gender1" placeholder="性别" id="gender1" readonly class="styled-input" type="text" th:value="${gender}">-->
  41. </div>
  42. <div class="customize-form-group">
  43. <label>年龄:</label>
  44. <input name="age1" placeholder="年龄" id="age1" readonly class="styled-input" type="text" th:value="${age}">
  45. </div>
  46. <div class="customize-form-group">
  47. <label class="is-required">医院:</label>
  48. <select id="hospital-select" name="hospital" class="styled-input select2-multiple" placeholder="请选择或输入搜索">
  49. <option value="">请选择医院</option>
  50. </select>
  51. </div>
  52. <div class="customize-form-group">
  53. <label class="is-required">处方医生:</label>
  54. <input name="prescribingDoctor" id="prescribingDoctor" placeholder="处方医生" class="styled-input" type="text">
  55. </div>
  56. <div class="customize-form-group">
  57. <label>科室:</label>
  58. <input name="department" id="department" placeholder="科室" class="styled-input" type="text">
  59. </div>
  60. <div class="customize-form-group">
  61. <label class="is-required">处方诊断::</label>
  62. <input name="prescriptionDiagnosis" id="prescriptionDiagnosis" placeholder="处方诊断" class="styled-input" type="text">
  63. </div>
  64. <div class="customize-form-group">
  65. <label>主管医生:</label>
  66. <input name="attendingDoctor" id="attendingDoctor" placeholder="主管医生" class="styled-input" type="text">
  67. </div>
  68. <!-- <div class="customize-form-group">-->
  69. <!-- <label class="is-required">临床诊断:</label>-->
  70. <!-- <input name="clinicalDiagnosis" id="clinicalDiagnosis" placeholder="临床诊断" class="styled-input" type="text">-->
  71. <!-- </div>-->
  72. <div class="customize-form-group select-time">
  73. <label class="is-required">处方开具日期:</label>
  74. <input name="prescriptionIssueDate" id="prescriptionIssueDate" placeholder="处方开具日期" class="time-input time-input2" type="text">
  75. </div>
  76. <div class="customize-form-group">
  77. <label>发票编码:</label>
  78. <input name="invoiceCode" id="invoiceCode" placeholder="发票编码" class="styled-input" type="text">
  79. </div>
  80. <div class="customize-form-group">
  81. <label>登记药师姓名:</label>
  82. <input name="registerPharmacistName" id="registerPharmacistName" placeholder="登记药师姓名" class="styled-input" type="text">
  83. </div>
  84. <div class="customize-form-group">
  85. <label>登记人:</label>
  86. <input name="registrant" id="registrant" placeholder="登记人" class="styled-input" type="text">
  87. </div>
  88. <div class="customize-form-group">
  89. <label>审核药师姓名:</label>
  90. <input name="reviewingName" id="reviewingName" placeholder="审核药师姓名" readonly th:value="${reviewingName}" class="styled-input" type="text">
  91. </div>
  92. <div class="customize-form-group">
  93. <label>临床诊断:</label>
  94. <select id="category-select" class="styled-input edit_inputs select2-multiple" multiple placeholder="请选择或输入搜索">
  95. </select>
  96. </div>
  97. </div>
  98. <div class="customize-form-group-container">
  99. <div class="customize-form-group">
  100. <label>处方图片:</label>
  101. <div class="form-group">
  102. <div class="fileinput fileinput-new" data-provides="fileinput">
  103. <div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;">
  104. <img id="prescriptionImageUrl" th:if="${prescriptionImageUrl}" th:src="@{${prescriptionImageUrl}}" class="preview-image" />
  105. <div th:unless="${prescriptionImageUrl}" class="centered-content">
  106. <span class="plus-sign">+</span>
  107. </div>
  108. </div>
  109. <div>
  110. <input id="prescriptionImageUpload" name="prescriptionImageUpload" type="file">
  111. <a href="javascript:;" class="btn btn-white" data-dismiss="fileinput">清除图片</a>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="customize-form-group">
  117. <label>发票图片:</label>
  118. <div class="form-group">
  119. <div class="fileinput fileinput-new" data-provides="fileinput">
  120. <div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;">
  121. <img id="invoiceImageUrl" th:if="${invoiceImageUrl}" th:src="@{${invoiceImageUrl}}" class="preview-image" />
  122. <div th:unless="${invoiceImageUrl}" class="centered-content">
  123. <span class="plus-sign">+</span>
  124. </div>
  125. </div>
  126. <div>
  127. <input id="invoiceImageUpload" name="invoiceImageUpload" type="file">
  128. <a href="javascript:;" class="btn btn-white" data-dismiss="fileinput">清除图片</a>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. </form>
  135. <!-- 假设这是你的 HTML 结构class="table table-bordered" -->
  136. <div class="ibox" id="data-ibox" style="overflow: auto;">
  137. <div class="ibox-title" style="width: 100%;">药品登记列表</div>
  138. <table class="fixed-layout-table" id="drugInfoTable">
  139. <thead>
  140. <tr>
  141. <th>操作+<a type="button" class="btn btn-primary btn-sm" onclick="selectUsersToParentCallBack2()">添加药品</a></th>
  142. <th>药品编码</th>
  143. <th>药品名</th>
  144. <th class="hidden-column">通用名</th>
  145. <th>规格</th>
  146. <th class="hidden-column">厂家简称</th>
  147. <th class="hidden-column">给药方式</th>
  148. <th class="hidden-column">是否随访管理品</th>
  149. <th class="hidden-column">是否冷链管理品</th>
  150. <th class="hidden-column">是否登记管理品</th>
  151. <th class="hidden-column">是否慈善援助管理品</th>
  152. <th class="hidden-column">包装</th>
  153. <th class="is-required">取药数量(购药数量)</th>
  154. <th class="is-required">单次剂量数</th>
  155. <th class="is-required">单次剂量单位</th>
  156. <th class="is-required">用药频次</th>
  157. <th class="is-required">购药包装单位</th>
  158. <th>D值品用药天数</th>
  159. </tr>
  160. </thead>
  161. <tbody>
  162. <!-- 数据行将被插入到这里 -->
  163. </tbody>
  164. </table>
  165. </div>
  166. <div class="center-block ibox-title" style="width: 100%;">
  167. <label class="is-required">是否开启药师审核:</label>
  168. <button type="button" class="btn btn-primary" onclick="onclickshow()">是</button>
  169. <button type="button" class="btn btn-info" onclick="onclickhide()">否</button>
  170. </div>
  171. </div>
  172. <div class="modal inmodal" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
  173. <div class="modal-dialog">
  174. <form class="form-horizontal" id="form-budan-add">
  175. <div class="modal-content animated bounceInRight">
  176. <div class="modal-header">
  177. <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">关闭</span></button>
  178. <h2 class="modal-title">药师审核</h2>
  179. </div>
  180. <div class="modal-body">
  181. <div class="customize-search-form">
  182. <div class="customize-form-group">
  183. <label>审核药师姓名:</label>
  184. <select id="pharmacistNameSelect" name="pharmacistName" class="styled-input" style="width: 200px; height: 35px;">
  185. <option value="" disabled selected>请选择</option>
  186. </select>
  187. <span id="pharmacistVerified" class="verified-symbol" style="display:none;">✓</span>
  188. </div>
  189. <div id="passwordGroup" class="customize-form-group" style="display:none;">
  190. <label>密码:</label>
  191. <input type="password" placeholder="请输入密码" class="styled-input" style="width: 200px; height: 35px;" id="password" name="password">
  192. <button type="button" class="btn btn-success btn-sm" id="verifyPasswordBtn">确定</button>
  193. </div>
  194. <div id="checkView" style="display:none;">
  195. <div class="customize-form-group">
  196. <label>审核结果:</label>
  197. <div>
  198. <label><input type="radio" name="checkResult" value="1"> 通过</label>
  199. <label><input type="radio" name="checkResult" value="0"> 不通过</label>
  200. </div>
  201. </div>
  202. <div class="customize-form-group">
  203. <label>审核意见:</label>
  204. <input type="text" placeholder="请输入说明" class="styled-input" style="width: 200px; height: 35px;" id="remarks" name="remarks">
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="modal-footer">
  210. <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
  211. <button type="button" class="btn btn-primary" onclick="submitReview()">提交</button>
  212. </div>
  213. </div>
  214. </form>
  215. </div>
  216. </div>
  217. <div class="modal inmodal fade" id="myModal2" tabindex="-1" role="dialog" >
  218. <div class="modal-dialog modal-lg" style="width: 1000px">
  219. <div class="modal-content">
  220. <div class="modal-header">
  221. <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
  222. </button>
  223. <h4 class="modal-title">快速建档</h4>
  224. <!--<small class="font-bold">这里可以显示副标题。</small>-->
  225. </div>
  226. <div class="modal-body">
  227. <form id="form-server-add">
  228. <div class="customize-form-group-container">
  229. <label class="font-noraml">身份证上传</label>
  230. <div class="new-contentarea tc">
  231. <a href="javascript:void(0)" class="btn btn-xs btn-primary"><label for="inputImage" >上传图像</label> </a>
  232. <input type="file" name="avatar" id="inputImage" onchange="uploadImage(this)" accept="image/*"/>
  233. </div>
  234. <div class="ibox2-title" style="align-items: center;">
  235. <img id="uploadedImage" src="" style="max-width: 50%;display: block;margin-left: 21%;">
  236. </div>
  237. <div class="customize-form-group">
  238. <label class="col-sm-1 control-label is-required">姓名:</label>
  239. <input name="name" id="name" placeholder="请输入姓名" class="styled-input" type="text" maxlength="30" required>
  240. <input type="hidden" name="idCardImg" id="idCardImg" value="">
  241. </div>
  242. <div class="customize-form-group">
  243. <label class="col-sm-1 control-label is-required">性别:</label>
  244. <select name="gender" id="gender" class="styled-input" th:with="type=${@dict.getType('sys_user_sex')}" required>
  245. <option value="">请选择</option>
  246. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"
  247. ></option>
  248. </select>
  249. </div>
  250. <div class="customize-form-group select-time">
  251. <label class="col-sm-1 control-label">出生年月:</label>
  252. <div class="input-group select-time">
  253. <input name="dateBirth" placeholder="出生年月" class="time-input time-input2" type="text" id="dateBirth" disabled>
  254. </div>
  255. </div>
  256. <div class="customize-form-group select-time">
  257. <label class="col-sm-1 control-label">年龄:</label>
  258. <div class="input-group select-time">
  259. <input name="age" id="age" placeholder="年龄" class="styled-input" type="text" maxlength="30" disabled>
  260. </div>
  261. </div>
  262. <div class="customize-form-group">
  263. <label class="col-sm-1 control-label is-required">联系方式:</label>
  264. <input name="phoneNumber" id="phoneNumber" placeholder="请输入手机号" class="styled-input isPhone" type="text" maxlength="11" required>
  265. </div>
  266. <div class="customize-form-group">
  267. <label class="col-sm-1 control-label">联系人手机号:</label>
  268. <input name="contactPhone" placeholder="请输入联系人手机号" class="styled-input isPhone" type="text" maxlength="11" required>
  269. </div>
  270. <div class="customize-form-group">
  271. <label class="col-sm-1 control-label">证件类型:</label>
  272. <select name="documentType" id="documentType" class="styled-input" th:with="type=${@dict.getType('sys_select_dtp_ysfw_zjlx')}" required>
  273. <option>请选择</option>
  274. <option th:each="dict : ${type}" th:selected="${dict.dictLabel=='居民身份证'}" th:text="${dict.dictLabel}" th:value="${dict.dictLabel}"></option>
  275. </select>
  276. </div>
  277. <div class="customize-form-group">
  278. <label class="col-sm-1 control-label">联系人姓名:</label>
  279. <input name="contactName" placeholder="请输入联系人姓名" class="styled-input" type="text" maxlength="30" required>
  280. </div>
  281. <div class="customize-form-group">
  282. <label class="col-sm-1 control-label">证件号码:</label>
  283. <input name="documentNumber" id="documentNumber" placeholder="请输入证件号码" class="styled-input" type="text" maxlength="30" required>
  284. </div>
  285. <div class="customize-form-group edit select-time">
  286. <label class="col-sm-1 control-label is-required">首次确诊时间:</label>
  287. <input name="timeFirstDiagnosis" id="timeFirstDiagnosis" placeholder="首次确诊时间" class="time-input time-input2" type="text" >
  288. </div>
  289. <div class="customize-form-group">
  290. <label class="col-sm-1 control-label">配送地址:</label>
  291. <input name="addr" placeholder="配送地址" id="addr" class="styled-input" type="text">
  292. </div>
  293. <div class="customize-form-group">
  294. <label class="col-sm-1 control-label">肿瘤发病部位疾病:</label>
  295. <select id="category-select1" class="styled-input select2-multiple edit_inputs" multiple placeholder="请选择或输入搜索">
  296. </select>
  297. </div>
  298. <div class="customize-form-group">
  299. <label class="col-sm-1 control-label">肿瘤治疗并发症与合并症:</label>
  300. <select id="category-select2" class="styled-input select2-multiple edit_inputs" multiple placeholder="请选择或输入搜索">
  301. </select>
  302. </div>
  303. <div class="customize-form-group">
  304. <label class="col-sm-1 control-label">风湿免疫疾病名称:</label>
  305. <select id="category-select3" class="styled-input select2-multiple edit_inputs" multiple placeholder="请选择或输入搜索">
  306. </select>
  307. </div>
  308. <div class="customize-form-group">
  309. <label class="col-sm-1 control-label">罕见病疾病:</label>
  310. <select id="category-select4" class="styled-input select2-multiple edit_inputs" multiple placeholder="请选择或输入搜索">
  311. </select>
  312. </div>
  313. <div class="customize-form-group">
  314. <label class="col-sm-1 control-label">感染类疾病:</label>
  315. <select id="category-select5" class="styled-input select2-multiple edit_inputs" multiple placeholder="请选择或输入搜索">
  316. </select>
  317. </div>
  318. <div class="customize-form-group">
  319. <label class="col-sm-1 control-label">临时慢病:</label>
  320. <select id="category-select6" class="styled-input select2-multiple edit_inputs " multiple placeholder="请选择或输入搜索">
  321. </select>
  322. </div>
  323. </div>
  324. </form>
  325. </div>
  326. <div class="modal-footer">
  327. <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
  328. <button type="button" class="btn btn-primary" onclick="submitArchives()">保存</button>
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. <div class="main-content">
  334. <div class="col-sm-offset-5 col-sm-10">
  335. <button type="button" class="btn btn-sm btn-info" onclick="openCheckYSSH()" id="openCheckYSSid">药师审核</button>&nbsp;
  336. <button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()"><i class="fa fa-check"></i>提 交</button>&nbsp;
  337. <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
  338. </div>
  339. </div>
  340. </div>
  341. <th:block th:include="include :: footer" />
  342. <!--<th:block th:include="include :: bootstrap-fileinput-js" />-->
  343. <th:block th:include="include :: jasny-bootstrap-js" />
  344. <th:block th:include="include :: bootstrap-table-fixed-columns-js" />
  345. <th:block th:include="include :: layout-latest-js" />
  346. <th:block th:include="include :: select2-js" />
  347. <script th:inline="javascript">
  348. var editFlag = [[${@permission.hasPermi('dtp:RecipeRegister:edit')}]];
  349. var removeFlag = [[${@permission.hasPermi('dtp:RecipeRegister:remove')}]];
  350. var prefix_recipe = ctx + "dtp/recipe";
  351. var prefix_yppz = ctx + "yppz/drugConfig";
  352. var prefix_configInfo = ctx + "dtp/configInfo";
  353. var prefix_pmService = ctx + "dtp/pmService/";
  354. var hzparam = [];
  355. var patientId;
  356. var name;
  357. var age;
  358. var gender;
  359. var remarks;
  360. var reviewingName;
  361. var reviewStatus;
  362. var reviewFlag=false;
  363. var data;
  364. var patientFlag = true;//患者是否建档
  365. var shangcigyList = [];
  366. var dataList = [];
  367. var reviewFormData = new FormData();
  368. var selectdataList = [];
  369. /*<![CDATA[*/
  370. var dl = /*[[${dl}]]*/ '';
  371. /*]]>*/
  372. /*<![CDATA[*/
  373. var xl = /*[[${xl}]]*/ '';
  374. /*]]>*/
  375. /*<![CDATA[*/
  376. var hospitals = /*[[${hospital}]]*/ '';
  377. /*]]>*/
  378. document.addEventListener('DOMContentLoaded', function () {
  379. // 初始化所有 .fileinput 区域
  380. document.querySelectorAll('.fileinput').forEach(function (fileInputWrapper) {
  381. initializeImagePreview2(fileInputWrapper);
  382. });
  383. });
  384. function initializeImagePreview2(fileInputWrapper) {
  385. var fileInput = fileInputWrapper.querySelector('input[type="file"]');
  386. var previewThumbnail = fileInputWrapper.querySelector('.fileinput-preview.thumbnail');
  387. var largePreview;
  388. var clearButton = fileInputWrapper.querySelector('.btn-white[data-dismiss="fileinput"]');
  389. // 创建大图预览
  390. function createLargePreview(imageSrc) {
  391. if (largePreview) {
  392. largePreview.style.display = 'none';
  393. largePreview.remove();
  394. }
  395. largePreview = document.createElement('div');
  396. largePreview.className = 'preview-large';
  397. largePreview.style.backgroundImage = 'url(' + imageSrc + ')';
  398. largePreview.style.width = '1000px'; // 根据需要调整宽度
  399. largePreview.style.height = '900px'; // 根据需要调整高度
  400. largePreview.style.backgroundSize = 'contain';
  401. largePreview.style.backgroundRepeat = 'no-repeat';
  402. largePreview.style.backgroundPosition = 'center';
  403. largePreview.style.position = 'absolute';
  404. largePreview.style.zIndex = '1000';
  405. largePreview.style.display = 'none'; // 初始状态下不显示
  406. // 添加到DOM
  407. fileInputWrapper.appendChild(largePreview);
  408. // 为大图预览添加事件监听器
  409. largePreview.onmouseover = function () {
  410. this.style.display = 'block';
  411. };
  412. largePreview.onmousemove = function (e) {
  413. updateLargePreviewPosition(e, previewThumbnail);
  414. };
  415. largePreview.onmouseout = function (e) {
  416. if (!previewThumbnail.contains(e.relatedTarget)) {
  417. hideLargePreview();
  418. }
  419. };
  420. }
  421. // 悬停时显示大图
  422. function handleMouseOver(e) {
  423. /*if (previewThumbnail.style.backgroundImage && !largePreview) {
  424. createLargePreview(previewThumbnail.style.backgroundImage.replace(/^url$["']?/, '').replace(/["']?$$/, ''));
  425. }*/
  426. if (largePreview) {
  427. showLargePreview(e);
  428. }
  429. }
  430. // 鼠标移动时更新大图位置
  431. function handleMouseMove(e) {
  432. if (largePreview) {
  433. updateLargePreviewPosition(e, previewThumbnail);
  434. }
  435. }
  436. // 缩略图移出事件处理
  437. function handleMouseOut(e) {
  438. if (!largePreview || !largePreview.contains(e.relatedTarget)) {
  439. hideLargePreview();
  440. }
  441. }
  442. // 显示大图预览
  443. function showLargePreview(e) {
  444. largePreview.style.display = 'block';
  445. updateLargePreviewPosition(e, previewThumbnail);
  446. }
  447. // 更新大图预览位置
  448. function updateLargePreviewPosition(e, referenceElement) {
  449. const rect = referenceElement.getBoundingClientRect();
  450. const winWidth = window.innerWidth;
  451. const winHeight = window.innerHeight;
  452. const largePreviewWidth = largePreview.offsetWidth;
  453. const largePreviewHeight = largePreview.offsetHeight;
  454. let left = e.pageX ; // 尝试放置在鼠标右侧
  455. let top = e.pageY + 150; // 尝试放置在鼠标下方
  456. // 确保大图预览不超出浏览器窗口边界
  457. //if (left + largePreviewWidth > winWidth) left = e.pageX - largePreviewWidth - 300; // 如果右侧空间不足,则放在左侧
  458. if (top + largePreviewHeight > winHeight) top = e.pageY - largePreviewHeight; // 如果底部空间不足,则放在上方
  459. largePreview.style.left = left + 'px';
  460. largePreview.style.top = top+400 + 'px';;
  461. }
  462. // 隐藏大图预览
  463. function hideLargePreview() {
  464. if (largePreview) {
  465. largePreview.style.display = 'none';
  466. }
  467. }
  468. // 移除图片和大图预览
  469. function removeImageAndPreview() {
  470. previewThumbnail.style.backgroundImage = ''; // 清空缩略图背景图片
  471. if (largePreview) {
  472. largePreview.style.display = 'none';
  473. largePreview.remove(); // 从 DOM 中移除 largePreview
  474. largePreview = null;
  475. }
  476. updateClearButtonVisibility(); // 更新清除按钮的可见性
  477. }
  478. // 更新清除按钮的可见性
  479. function updateClearButtonVisibility() {
  480. /*if (clearButton) {
  481. clearButton.style.display = previewThumbnail.style.backgroundImage ? 'inline-block' : 'none';
  482. }*/
  483. }
  484. // 监听文件上传变化事件
  485. fileInput.addEventListener('change', function (e) {
  486. // 清除现有的大图预览
  487. removeImageAndPreview();
  488. // 读取新文件并更新缩略图背景图片
  489. if (this.files && this.files[0]) {
  490. var reader = new FileReader();
  491. reader.onload = function (event) {
  492. previewThumbnail.style.backgroundImage = 'url(' + event.target.result + ')';
  493. // 立即创建大图预览以反映新图片
  494. createLargePreview(event.target.result);
  495. setupEventListeners(); // 重新设置事件监听器
  496. updateClearButtonVisibility(); // 更新清除按钮的可见性
  497. };
  498. reader.readAsDataURL(this.files[0]);
  499. } else {
  500. updateClearButtonVisibility(); // 更新清除按钮的可见性
  501. }
  502. });
  503. // 初始化事件监听器
  504. function setupEventListeners() {
  505. previewThumbnail.onmouseover = handleMouseOver;
  506. previewThumbnail.onmousemove = handleMouseMove;
  507. previewThumbnail.onmouseout = handleMouseOut;
  508. // 监听清除按钮点击事件
  509. if (clearButton) {
  510. clearButton.addEventListener('click', function () {
  511. removeImageAndPreview(); // 清除图片及大图预览
  512. });
  513. }
  514. }
  515. // 对于回显的图片,确保初始化时创建大图预览并更新清除按钮的可见性
  516. if (previewThumbnail.style.backgroundImage) {
  517. createLargePreview(previewThumbnail.style.backgroundImage.replace(/^url$["']?/, '').replace(/["']?$$/, ''));
  518. updateClearButtonVisibility();
  519. } else {
  520. updateClearButtonVisibility();
  521. }
  522. // 初始化事件监听器
  523. setupEventListeners();
  524. }
  525. document.addEventListener('DOMContentLoaded', function () {
  526. // 初始化所有 .fileinput 区域
  527. document.querySelectorAll('.fileinput').forEach(function (fileInputWrapper) {
  528. initializeImagePreview(fileInputWrapper);
  529. });
  530. });
  531. function initializeImagePreview(fileInputWrapper) {
  532. var previewThumbnail = fileInputWrapper.querySelector('.fileinput-preview.thumbnail');
  533. var imgElement = previewThumbnail.querySelector('.preview-image');
  534. var largePreview;
  535. var clearButton = fileInputWrapper.querySelector('.btn-white[data-dismiss="fileinput"]');
  536. if (!imgElement || !clearButton) return; // 如果没有img元素或清除按钮,则不执行后续操作
  537. // 创建大图预览
  538. function createLargePreview(img) {
  539. if (largePreview) {
  540. largePreview.style.display = 'none';
  541. largePreview.remove();
  542. }
  543. largePreview = document.createElement('div');
  544. largePreview.className = 'preview-large';
  545. largePreview.style.backgroundImage = 'url(' + img.src + ')';
  546. largePreview.style.width = '1000px'; // 根据需要调整宽度
  547. largePreview.style.height = '900px'; // 根据需要调整高度
  548. largePreview.style.backgroundSize = 'contain';
  549. largePreview.style.backgroundRepeat = 'no-repeat';
  550. largePreview.style.backgroundPosition = 'center';
  551. largePreview.style.position = 'absolute';
  552. largePreview.style.zIndex = '1000';
  553. largePreview.style.display = 'none'; // 初始状态下不显示
  554. // 添加到DOM
  555. fileInputWrapper.appendChild(largePreview);
  556. }
  557. // 悬停时显示大图
  558. function handleMouseOver(e) {
  559. if (imgElement.src && !largePreview) {
  560. createLargePreview(imgElement);
  561. }
  562. if (largePreview) {
  563. showLargePreview(e);
  564. }
  565. }
  566. // 鼠标移动时更新大图位置
  567. function handleMouseMove(e) {
  568. if (largePreview) {
  569. updateLargePreviewPosition(e, previewThumbnail);
  570. }
  571. }
  572. // 缩略图移出事件处理
  573. function handleMouseOut(e) {
  574. if (!largePreview || !largePreview.contains(e.relatedTarget)) {
  575. hideLargePreview();
  576. }
  577. }
  578. // 显示大图预览
  579. function showLargePreview(e) {
  580. largePreview.style.display = 'block';
  581. updateLargePreviewPosition(e, previewThumbnail);
  582. }
  583. // 更新大图预览位置
  584. function updateLargePreviewPosition(e, referenceElement) {
  585. const rect = referenceElement.getBoundingClientRect();
  586. const winWidth = window.innerWidth;
  587. const winHeight = window.innerHeight;
  588. const largePreviewWidth = largePreview.offsetWidth;
  589. const largePreviewHeight = largePreview.offsetHeight;
  590. let left = e.pageX ; // 尝试放置在鼠标右侧
  591. let top = e.pageY + 150; // 尝试放置在鼠标下方
  592. // 确保大图预览不超出浏览器窗口边界
  593. //if (left + largePreviewWidth > winWidth) left = e.pageX - largePreviewWidth - 150; // 如果右侧空间不足,则放在左侧
  594. if (top + largePreviewHeight > winHeight) top = e.pageY - largePreviewHeight; // 如果底部空间不足,则放在上方
  595. largePreview.style.left = left+100 + 'px';
  596. largePreview.style.top = top+400 + 'px'; // 保持原有的偏移量
  597. }
  598. // 隐藏大图预览
  599. function hideLargePreview() {
  600. if (largePreview) {
  601. largePreview.style.display = 'none';
  602. }
  603. }
  604. // 初始化事件监听器
  605. function setupEventListeners() {
  606. previewThumbnail.onmouseover = handleMouseOver;
  607. previewThumbnail.onmousemove = handleMouseMove;
  608. previewThumbnail.onmouseout = handleMouseOut;
  609. // 监听清除按钮点击事件
  610. clearButton.addEventListener('click', function () {
  611. removeImageAndPreview(); // 清除图片及大图预览
  612. });
  613. }
  614. // 移除事件监听器
  615. function removeEventListeners() {
  616. previewThumbnail.onmouseover = null;
  617. previewThumbnail.onmousemove = null;
  618. previewThumbnail.onmouseout = null;
  619. }
  620. // 监听文件上传变化事件
  621. function setupFileInputChange(uploadId) {
  622. let upload = fileInputWrapper.querySelector(`#${uploadId}`);
  623. if (upload) {
  624. upload.addEventListener('change', function (e) {
  625. // 清除现有的大图预览
  626. removeImageAndPreview();
  627. // 读取新文件并更新 <img> 元素的 src 属性
  628. if (this.files && this.files[0]) {
  629. var reader = new FileReader();
  630. reader.onload = function (event) {
  631. imgElement.src = event.target.result;
  632. // 立即创建大图预览以反映新图片
  633. createLargePreview(imgElement);
  634. setupEventListeners(); // 重新设置事件监听器
  635. updateClearButtonVisibility(); // 更新清除按钮的可见性
  636. };
  637. reader.readAsDataURL(this.files[0]);
  638. } else {
  639. imgElement.src = ''; // 清空图片源
  640. removeEventListeners(); // 移除事件监听器
  641. updateClearButtonVisibility(); // 更新清除按钮的可见性
  642. }
  643. });
  644. }
  645. }
  646. // 移除图片和大图预览并更新清除按钮的可见性
  647. function removeImageAndPreview() {
  648. imgElement.src = ''; // 清空图片源
  649. if (largePreview) {
  650. largePreview.style.display = 'none';
  651. largePreview.remove(); // 从 DOM 中移除 largePreview
  652. largePreview = null;
  653. }
  654. removeEventListeners(); // 移除事件监听器
  655. updateClearButtonVisibility(); // 更新清除按钮的可见性
  656. }
  657. // 更新清除按钮的可见性
  658. function updateClearButtonVisibility() {
  659. if (clearButton && imgElement) {
  660. clearButton.style.display = imgElement.src !== '' ? 'inline-block' : 'none';
  661. }
  662. }
  663. // 初始化
  664. setupEventListeners();
  665. // 对应的文件上传控件ID
  666. let fileId = fileInputWrapper.querySelector('input[type="file"]')?.id;
  667. if (fileId) {
  668. setupFileInputChange(fileId);
  669. }
  670. // 对于回显的图片,确保初始化时创建大图预览并更新清除按钮的可见性
  671. if (imgElement.src) {
  672. createLargePreview(imgElement);
  673. updateClearButtonVisibility();
  674. } else {
  675. updateClearButtonVisibility();
  676. }
  677. }
  678. $(document).ready(function () {
  679. // 监听文件选择变化事件
  680. $("#prescriptionImageUpload").on('change', function() {
  681. var file = this.files[0];
  682. if (file) {
  683. var reader = new FileReader();
  684. reader.onload = function(e) {
  685. // 更新预览区域的背景图片
  686. $('#prescriptionImagePreview .fileinput-preview').css('background-image', 'url(' + e.target.result + ')');
  687. $('#prescriptionImagePreview .centered-content').hide(); // 隐藏加号图标
  688. };
  689. reader.readAsDataURL(file);
  690. } else {
  691. // 如果没有选择文件,则恢复默认状态
  692. $('#prescriptionImagePreview .fileinput-preview').css('background-image', '');
  693. $('#prescriptionImagePreview .centered-content').show(); // 显示加号图标
  694. }
  695. });
  696. //初始化查询患者是否建档
  697. var status = $('#status').val();
  698. if(status == 4){
  699. initCheckPatient();
  700. }
  701. if (!patientFlag) {
  702. $('#patientFlagMessage').text('该患者未建档,请先建档后在继续操作!。').show();
  703. } else {
  704. $('#patientFlagMessage').hide();
  705. }
  706. // 获取所有的输入元素(input, textarea, select)
  707. var $inputs = $('form').find('input, textarea, select').filter(':visible');
  708. $inputs.each(function (index) {
  709. $(this).on('keydown', function (e) {
  710. if (e.key === "Enter" || e.keyCode === 13) {
  711. e.preventDefault(); // 阻止默认行为(例如提交表单)
  712. // 找到当前输入框的索引
  713. var currentIndex = $inputs.index(this);
  714. // 如果不是最后一个输入框,则聚焦下一个输入框
  715. if (currentIndex < $inputs.length - 1) {
  716. $inputs.eq(currentIndex + 1).focus();
  717. } else {
  718. // 如果是最后一个输入框,可以选择提交表单或不做任何事情
  719. // $(this).closest('form').submit();
  720. }
  721. }
  722. });
  723. });
  724. // 监听选择变化
  725. $(document).on('change', 'input[name="selectPatient"]', function () {
  726. // 移除所有行的 'selected' 类
  727. $('#patient-table tbody tr').removeClass('selected');
  728. // 获取当前选中的行并添加 'selected' 类
  729. var selectedRow = $(this).closest('tr');
  730. selectedRow.addClass('selected');
  731. // 获取选中的患者对象
  732. var selectedPatient = getSelectedPatient();
  733. if (selectedPatient) {
  734. // 调用 getLastRecipe 方法,传入患者的 ID
  735. var patientId = selectedPatient.id;
  736. getLastRecipe(patientId);
  737. }
  738. });
  739. // 初始化 Select2 插件
  740. $('#hospital-select').select2({
  741. placeholder: "请选择或直接输入搜索",
  742. //allowClear: true //在输入框最后 有一个 删除所有的X 但是会出现 第一个删除出现问题有空格
  743. });
  744. $('#hospital-select').on('select2:select', function (e) {
  745. var clearSpan = $('.select2-selection-clear');
  746. if (clearSpan.length > 0) {
  747. clearSpan.remove();
  748. }
  749. });
  750. // 发送 AJAX 请求获取疾病大类数据
  751. $.ajax({
  752. url: prefix_configInfo + '/dtpHospitalList',
  753. method: 'POST',
  754. dataType: 'json',
  755. success: function (data) {
  756. var options = $('#hospital-select');
  757. // 清空已有选项(除了第一个默认选项)
  758. options.find('option').not(':first').remove();
  759. $('<option>', {
  760. value: '',
  761. text: '请选择疾病类型'
  762. }).appendTo(options);
  763. // 遍历返回的数据并添加选项
  764. $.each(data.value, function (index, item) {
  765. $('<option>', {
  766. value: item.id,
  767. text: item.standardName
  768. }).appendTo(options);
  769. });
  770. // 设置默认选中的 dl 选项
  771. options.val(hospitals).trigger('change');
  772. /*$('#category-select').select2({
  773. placeholder: "请选择或直接输入搜索",
  774. //allowClear: true //在输入框最后 有一个 删除所有的X 但是会出现 第一个删除出现问题有空格
  775. });*/
  776. // 加载对应的 xl 数据
  777. // 重新初始化 Select2 以反映新的选项
  778. options.trigger('change');
  779. },
  780. error: function (xhr, status, error) {
  781. $.modal.alertError("获取疾病大类失败");
  782. }
  783. });
  784. // 直接使用 dl 数据预填充下拉列表
  785. var dlParsed = JSON.parse(dl);
  786. if (Array.isArray(dlParsed)) {
  787. var dlIds = dlParsed.map(function (item) {
  788. return item.id;
  789. }); // 转换为 ID 数组
  790. // 添加 dl 中的选项到下拉列表
  791. $.each(dlParsed, function (index, item) {
  792. $('<option>', {
  793. value: item.id,
  794. text: item.name
  795. }).appendTo($('#category-select'));
  796. });
  797. // 设置默认选中的 dl 选项
  798. $('#category-select').val(dlIds).trigger('change');
  799. }
  800. // 发送 AJAX 请求获取疾病大类数据
  801. // 初始化 Select2
  802. $('#category-select').select2({
  803. placeholder: '--输入疾病名称搜索--',
  804. allowClear: true,
  805. ajax: {
  806. url: prefix_recipe + '/searchICD11', // 替换为实际的搜索 URL
  807. dataType: 'json',
  808. delay: 300,
  809. method: 'POST', // 使用 POST 方法
  810. data: function (params) {
  811. return {
  812. query: params.term // search term
  813. };
  814. },
  815. processResults: function (data) {
  816. if (data.code == 0) {
  817. return {
  818. results: data.data.map(function (item) {
  819. return {id: item.id, text: item.categoryName};
  820. })
  821. };
  822. } else {
  823. return {results: []};
  824. }
  825. },
  826. cache: true,
  827. error: function (xhr, status, error) {
  828. $.modal.alertError("获取疾病信息失败");
  829. }
  830. }
  831. });
  832. var reviewingName = $('#reviewingName').val();
  833. if($.common.isNotEmpty(reviewingName)){
  834. reviewFlag=true;
  835. $('#openCheckYSSid').hide();
  836. }else{
  837. reviewFlag=false;
  838. $('#openCheckYSSid').show();
  839. }
  840. });
  841. function updatePatientFlag(flagValue) {
  842. patientFlag = flagValue;
  843. if (!patientFlag) {
  844. $('#patientFlagMessage').text('该患者未建档,请先建档后在继续操作!').show();
  845. } else {
  846. $('#patientFlagMessage').hide();
  847. }
  848. }
  849. function formatGender(value) {
  850. switch (value) {
  851. case 0:
  852. $('#gender1').val(value);
  853. break;
  854. case 1:
  855. $('#gender1').val(value);
  856. break;
  857. default:
  858. $('#gender1').val('未知');
  859. break;
  860. }
  861. }
  862. //检查患者是否存在
  863. function initCheckPatient() {
  864. var formData = new FormData();
  865. var patientName = $('#patientName').val();
  866. var patientPhone = $('#patientPhone').val();
  867. formData.append("name", patientName);
  868. formData.append("phoneNumber", patientPhone);
  869. $.ajax({
  870. cache: false, // 设置为 false 防止缓存
  871. type: "POST",
  872. url: prefix_pmService+ "/slectPatientByNameAndPhone", // 假设这是获取所有药师的API端点
  873. data: formData,
  874. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  875. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  876. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  877. error: function (request) {
  878. $.modal.alertError("检查患者是否存在失败");
  879. },
  880. success: function (data) {
  881. if(data.code==0){
  882. patientFlag = true;
  883. patientId = data.data.id;
  884. name = data.data.name;
  885. age = data.data.age;
  886. gender = data.data.gender;
  887. //性别格式化
  888. formatGender(gender);
  889. $('#gender1').val(data.data.gender);
  890. $('#age1').val(data.data.age);
  891. $('#patientPhone').val(data.data.phoneNumber);
  892. $('#patientName').val(data.data.name);
  893. //初始化查询患者最近购药信息
  894. getLastRecipe(patientId);
  895. // $.modal.msg(data.msg);
  896. }else{
  897. patientFlag = false;
  898. updatePatientFlag(false);
  899. //$.modal.alertError("查询无数据,该患者未建档,请先建档后在继续操作");
  900. $.modal.confirm("该患者未建档 ,请先建档后在继续操作!,点击确定可快速建档", function() {
  901. // 快速建档
  902. bookbuilding();
  903. });
  904. }
  905. }
  906. });
  907. }
  908. // 将后端返回的数据填充到表格中
  909. function populatePatientTable(datas) {
  910. var tbody = $('#patient-table tbody');
  911. tbody.empty(); // 清空现有行
  912. datas.forEach(function (patient, index) {
  913. var genderText = patient.gender === 0 ? '男' : '女';
  914. var row = `
  915. <tr data-index="${index}">
  916. <td><input type="radio" name="selectPatient" value="${index}"></td>
  917. <td>${patient.id}</td>
  918. <td>${patient.name}</td>
  919. <td>${genderText}</td>
  920. <td>${patient.age || '-'}</td>
  921. <td>${patient.documentType || '-'}</td>
  922. <td>${patient.documentNumber || '-'}</td>
  923. <td>${patient.disease || '-'}</td>
  924. <td>${patient.phoneNumber || '-'}</td>
  925. <!-- 添加其他列的数据 -->
  926. </tr>
  927. `;
  928. tbody.append(row);
  929. });
  930. }
  931. // 获取选中的患者数据并存入对象
  932. function getSelectedPatient() {
  933. var selectedRow = $('input[name="selectPatient"]:checked').closest('tr');
  934. if (selectedRow.length === 0) return null;
  935. var index = selectedRow.data('index');
  936. return dataList[index];
  937. }
  938. function getLastRecipe(patientId) {
  939. var datas = [];
  940. var data = {
  941. "patientId": patientId,
  942. };
  943. // 初始化表格 getDrugPurchaseList
  944. $.ajax({
  945. cache: true,
  946. type: "POST",
  947. url: prefix_recipe + "/getLastRecipe",
  948. data: data,
  949. async: false,
  950. error: function (request) {
  951. $.modal.alertError("系统错误");
  952. },
  953. success: function (data) {
  954. var shangciObj = {};
  955. shangcigyList = data.data.recipeList;
  956. if (data.data.recipeList != null || data.data.recipeList != undefined) {
  957. initTab(datas = data.data.recipeList)
  958. }
  959. if (data.data.recipe != null) {
  960. shangciObj = data.data.recipe;
  961. $('#hospital').val(shangciObj.hospital);
  962. $('#prescribingDoctor').val(shangciObj.prescribingDoctor);
  963. $('#department').val(shangciObj.department);
  964. $('#attendingDoctor').val(shangciObj.attendingDoctor);
  965. } else {
  966. shangciObj = {};
  967. $('#hospital').val('');
  968. $('#prescribingDoctor').val('');
  969. $('#department').val('');
  970. $('#attendingDoctor').val('');
  971. }
  972. $.operate.successCallback(data);
  973. }
  974. });
  975. }
  976. function initTab(datas) {
  977. var tableId = 'bootstrap-table';
  978. var tableElement = $('#' + tableId);
  979. tableElement.bootstrapTable({
  980. data: datas,
  981. columns: [
  982. {field: 'mdmCode', title: '药品编码', align: 'center'},
  983. {field: 'productName', title: '商品名', align: 'center'},
  984. {field: 'genericName', title: '通用名', align: 'center'},
  985. {field: 'specification', title: '规格', align: 'center'},
  986. {field: 'manufacturerShortName', title: '厂家简称', align: 'center'},
  987. {field: 'administrationMethod', title: '给药方式', align: 'center'},
  988. {field: 'realNameStatus', title: '处方取药数量(包装数)', align: 'center'},
  989. {field: 'singleDoseValue', title: '处方单次剂量数值', align: 'center'},
  990. {field: 'singleDoseUnit', title: '处方单次剂量单位', align: 'center'},
  991. {field: 'dosageFrequency', title: '规范用药频次', align: 'center'},
  992. {field: 'dosageFrequencyDays', title: '用药频次换算使用天数', align: 'center'},
  993. {field: 'dvalueDays', title: 'D值品用药天数', align: 'center'},
  994. {field: 'prescriptionNumber', title: '处方编号', align: 'center'},
  995. // {
  996. // title: '操作',
  997. // align: 'center',
  998. // formatter: function(value, row, index) {
  999. // if (row.id) {
  1000. // var actions = [];
  1001. // actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.view(\'' + row.id + '\')">购药详情</a> ');
  1002. // return actions.join('');
  1003. // } else {
  1004. // return "";
  1005. // }
  1006. // }
  1007. // }
  1008. ]
  1009. });
  1010. }
  1011. function submitHandler() {
  1012. if(!patientFlag){
  1013. //$.modal.alertError("该患者未建档,请先建档后在继续操作");
  1014. $.modal.confirm("该患者未建档 ,请先建档后在继续操作!,点击确定可快速建档", function() {
  1015. // 快速建档
  1016. bookbuilding();
  1017. });
  1018. return;
  1019. }
  1020. // 创建一个 FormData 对象用于提交表单数据
  1021. var formData = new FormData();
  1022. var hospital = $("#dtp-form-newcfxx").serializeArray().find(item => item.name === 'hospital');
  1023. if (hospital.value === '') {
  1024. $.modal.alertWarning("请选择请选择医院!");
  1025. return null;
  1026. }
  1027. var prescribingDoctor = $("#dtp-form-newcfxx").serializeArray().find(item => item.name === 'prescribingDoctor');
  1028. if (prescribingDoctor.value === '') {
  1029. $.modal.alertWarning("请输入处方医生!");
  1030. return null;
  1031. }
  1032. var prescriptionDiagnosis = $("#dtp-form-newcfxx").serializeArray().find(item => item.name === 'prescriptionDiagnosis');
  1033. if (prescriptionDiagnosis.value === '') {
  1034. $.modal.alertWarning("请填写处方诊断!");
  1035. return null;
  1036. }
  1037. var prescriptionIssueDate = $("#dtp-form-newcfxx").serializeArray().find(item => item.name === 'prescriptionIssueDate');
  1038. if (prescriptionIssueDate.value === '') {
  1039. $.modal.alertWarning("请选择处方开具日期!");
  1040. return null;
  1041. }
  1042. // 收集表单中的其他字段,并将其添加到 FormData 中
  1043. $('#dtp-form-newcfxx').find(':input').each(function () {
  1044. var $this = $(this);
  1045. var name = $this.attr('name');
  1046. if (name) { // 确保有 name 属性
  1047. var value = $this.val();
  1048. if (value !== undefined && value !== null && value !== '') { // 确保值不是空
  1049. formData.append(name, value);
  1050. }
  1051. }
  1052. });
  1053. var selectedhospital = $('#hospital-select option:selected');
  1054. var selectedOptionsDL = $('#category-select option:selected');
  1055. var selectedOptionsXL = $('#subcategory-select option:selected');
  1056. var selectedDataDL = selectedOptionsDL.map(function () {
  1057. return {
  1058. id: $(this).val(),
  1059. name: $(this).text()
  1060. };
  1061. }).get(); // 获取的数据格式 [{ id: "2", name: "肿瘤治疗并发症与合并症名称" }, { id: "3", name: "风湿免疫疾病名称库" }]
  1062. var selectedDataXL = selectedOptionsXL.map(function () {
  1063. return {
  1064. id: $(this).val(),
  1065. name: $(this).text()
  1066. };
  1067. }).get(); // 获取的数据格式 [{ id: "2", name: "肿瘤治疗并发症与合并症名称" }, { id: "3", name: "风湿免疫疾病名称库" }]
  1068. var selectedhospitals = selectedhospital.map(function () {
  1069. return {
  1070. id: $(this).val(),
  1071. name: $(this).text()
  1072. };
  1073. }).get();
  1074. const hospitals = JSON.stringify(selectedhospitals);
  1075. const DL = JSON.stringify(selectedDataDL);
  1076. const XL = JSON.stringify(selectedDataXL);
  1077. formData.append('dl', DL);
  1078. formData.append('xl', XL);
  1079. formData.append('dlanme', DL);
  1080. formData.append('xlname', XL);
  1081. // 将药物数据序列化为 JSON 字符串并添加到 FormData 中
  1082. var tableRows = [];
  1083. var falg = true;
  1084. var ts_msg = '';
  1085. $('#drugInfoTable tbody tr').each(function (index, row) {
  1086. var rowData = {
  1087. productId: $(row).data('product-id'),
  1088. mdmCode: $(row).find('td:eq(1)').text(),
  1089. productName: $(row).find('td:eq(2)').text(),
  1090. genericName: $(row).find('td:eq(3)').text(),
  1091. specification: $(row).find('td:eq(4)').text(),
  1092. manufacturerShortName: $(row).find('td:eq(5)').text(),
  1093. administrationMethod: $(row).find('td:eq(6)').text(),
  1094. followUpItem: $(row).find('td:eq(7)').text(),
  1095. coldChainItem: $(row).find('td:eq(8)').text(),
  1096. registeredItem: $(row).find('td:eq(9)').text(),
  1097. charityAidItem: $(row).find('td:eq(10)').text(),
  1098. packaging: $(row).find('td:eq(11)').text(),
  1099. packageQuantity: $(row).find('input[name="packageQuantity"]').val(),
  1100. singleDoseValue: $(row).find('input[name="singleDoseValue"]').val(),
  1101. singleDoseUnit: $(row).find('select[name="singleDoseUnit"]').val(),
  1102. dosageFrequency: $(row).find('select[name="dosageFrequency"]').val(),
  1103. dosageFrequencyDays: $(row).find('input[name="dosageFrequencyDays"]').val(),
  1104. dvalueDays: $(row).find('input[name="dvalueDays"]').val(),
  1105. dosageMax: $(row).find('input[name="dosageMax"]').val(),
  1106. unitMax: $(row).find('input[name="unitMax"]').val(),
  1107. dosageMin: $(row).find('input[name="dosageMin"]').val(),
  1108. unitMin: $(row).find('input[name="unitMin"]').val(),
  1109. dosageNormal: $(row).find('input[name="dosageNormal"]').val(),
  1110. unitNormal: $(row).find('input[name="unitNormal"]').val(),
  1111. packingValue: $(row).find('input[name="packingValue"]').val(),
  1112. packingUnit: $(row).find('input[name="packingUnit"]').val(),
  1113. };
  1114. if (rowData.dosageFrequencyDays == ''|| rowData.dosageFrequencyDays == null|| rowData.dosageFrequencyDays == undefined){
  1115. $.modal.alertError("购药包装单位为空,请到药品库设置包装单位后再操作");
  1116. falg = false;
  1117. return falg;
  1118. }
  1119. if (rowData.packageQuantity == '' || rowData.packageQuantity == null || rowData.packageQuantity == undefined) {
  1120. $.modal.alertError("请输入包装数量");
  1121. falg = false;
  1122. return falg;
  1123. }
  1124. if (rowData.singleDoseValue == '' || rowData.singleDoseValue == null || rowData.singleDoseValue == undefined) {
  1125. $.modal.alertError("请输入单次剂量数值");
  1126. falg = false;
  1127. return falg;
  1128. }
  1129. if (rowData.singleDoseUnit == '' || rowData.singleDoseUnit == null || rowData.singleDoseUnit == undefined) {
  1130. $.modal.alertError("请选择单次剂量单位");
  1131. falg = false;
  1132. return falg;
  1133. }
  1134. if (rowData.dosageFrequency == '' || rowData.dosageFrequency == null || rowData.dosageFrequency == undefined) {
  1135. $.modal.alertError("请选择频次");
  1136. falg = false;
  1137. return falg;
  1138. }
  1139. /* 计算 D 值天数*/
  1140. var dcnum = rowData.singleDoseValue; // 单次用量
  1141. var pcnum = rowData.dosageFrequency; // 用药频次 eg: 一天一次
  1142. // 计算 D 值
  1143. var num = rowData.packageQuantity; // 买药数量
  1144. var dnum = (num * rowData.dosageFrequencyDays) / (dcnum * pcnum); // 买药数量 * 包装单位数量 / 频次天数 = D 值天数
  1145. if ((dcnum * pcnum) > rowData.dosageMax) {
  1146. ts_msg = '单次剂量数值频次大于 最大值 已使用默认值';
  1147. if (rowData.dosageNormal == '' || rowData.dosageNormal == null || rowData.dosageNormal == undefined) {
  1148. dnum = (num * rowData.dosageFrequencyDays) / rowData.dosageMax;
  1149. } else {
  1150. dnum = (num * rowData.dosageFrequencyDays) / rowData.dosageNormal;
  1151. }
  1152. }
  1153. if ((dcnum * pcnum) < rowData.dosageMin) {
  1154. ts_msg = '单次剂量数值频次小于 最小值 已使用默认值';
  1155. if (rowData.dosageNormal == '' || rowData.dosageNormal == null || rowData.dosageNormal == undefined) {
  1156. dnum = (num * rowData.dosageFrequencyDays) / rowData.dosageMin;
  1157. } else {
  1158. dnum = (num * rowData.dosageFrequencyDays) / rowData.dosageNormal;
  1159. }
  1160. }
  1161. rowData.dvalueDays = dnum;
  1162. // 将每一行的数据对象添加到数组中
  1163. tableRows.push(rowData);
  1164. });
  1165. if (!falg) {
  1166. return;
  1167. }
  1168. if (tableRows.length > 0) {
  1169. formData.append('drugData', JSON.stringify(tableRows));
  1170. } else {
  1171. $.modal.alertError("请添加药品");
  1172. return;
  1173. }
  1174. var id = $('#id').val();
  1175. var prescriptionNumber = $('#prescriptionNumber').val();
  1176. var drugsLinkId = $('#drugsLinkId').val();
  1177. var status = $('#status').val();
  1178. if (id != '') {
  1179. formData.append('id', id);
  1180. formData.append('status', status);
  1181. formData.append('prescriptionNumber', prescriptionNumber);
  1182. formData.append('drugsLinkId', drugsLinkId);
  1183. } else {
  1184. $.modal.alertError("请联系管理员!");
  1185. return;
  1186. }
  1187. var reviewingNameInput = $('#reviewingName').val();
  1188. if($.common.isEmpty(reviewingNameInput) && !reviewFlag){
  1189. reviewFlag=false;
  1190. $.modal.alertError("请完成药师审核或选择不开启审核");
  1191. return;
  1192. }
  1193. if(reviewFlag && $.common.isNotEmpty(reviewingName)){
  1194. formData.append('remarks', remarks);
  1195. formData.append('reviewingName', reviewingName);
  1196. formData.append('reviewStatus', reviewStatus);
  1197. formData.append('reviewFormData', reviewFormData);
  1198. }
  1199. formData.append('age', $('#age1').val());
  1200. formData.append('gender', $('#gender1').val());
  1201. formData.append('patientPhone', $('#patientPhone').val());
  1202. formData.append('patientName', $('#patientName').val());
  1203. // prescriptionImageUpload 处方
  1204. let prescriptionImageUpload = document.getElementById('prescriptionImageUpload');
  1205. //invoiceImageUpload 发票
  1206. let invoiceImageUpload = document.getElementById('invoiceImageUpload');
  1207. let prescriptionImageFile = prescriptionImageUpload.files[0];
  1208. let invoiceImageFile = invoiceImageUpload.files[0];
  1209. var fd = new FormData();
  1210. var fdi = new FormData();
  1211. var prescriptionImageUrl =$("#prescriptionImageUrl").val();
  1212. var invoiceImageUrl =$("#invoiceImageUrl").val();
  1213. formData.append('prescriptionImageUrl', '');
  1214. formData.append('invoiceImageUrl', '');
  1215. if (prescriptionImageUrl!=''&&prescriptionImageUrl!=null&&prescriptionImageUrl!=undefined){
  1216. formData.append('prescriptionImageUrl', prescriptionImageUrl);
  1217. }
  1218. if (invoiceImageUrl!=''&&invoiceImageUrl!=null&&invoiceImageUrl!=undefined){
  1219. formData.append('invoiceImageUrl', invoiceImageUrl);
  1220. }
  1221. if (prescriptionImageFile && prescriptionImageFile !== '') {
  1222. fd.append('file', prescriptionImageFile); // 'file' 是服务器端用来接收文件的字段名
  1223. $.ajax({
  1224. url: prefix_recipe + "/uploadImg",
  1225. data: fd,
  1226. type: "post",
  1227. processData: false,
  1228. contentType: false,
  1229. success: function(result) {
  1230. if (result.msg) {
  1231. formData.append('prescriptionImageUrl', result.msg);
  1232. }
  1233. // 上传发票图片
  1234. if (invoiceImageFile && invoiceImageFile !== '') {
  1235. fdi.append('file', invoiceImageFile); // 'file' 是服务器端用来接收文件的字段名
  1236. $.ajax({
  1237. url: prefix_recipe + "/uploadImg",
  1238. data: fdi,
  1239. type: "post",
  1240. processData: false,
  1241. contentType: false,
  1242. success: function(result) {
  1243. if (result.msg) {
  1244. formData.append('invoiceImageUrl', result.msg);
  1245. }
  1246. // 更新 CFDJ
  1247. updateCFDJ(formData);
  1248. },
  1249. error: function(xhr, status, error) {
  1250. $.modal.alertError("上传图片失败");
  1251. }
  1252. });
  1253. } else {
  1254. // 如果没有发票图片,则直接更新 CFDJ
  1255. updateCFDJ(formData);
  1256. }
  1257. },
  1258. error: function(xhr, status, error) {
  1259. $.modal.alertError("上传图片失败");
  1260. }
  1261. });
  1262. } else if (invoiceImageFile && invoiceImageFile !== '') {
  1263. // 如果只有发票图片需要上传
  1264. fdi.append('file', invoiceImageFile); // 'file' 是服务器端用来接收文件的字段名
  1265. $.ajax({
  1266. url: prefix_recipe + "/uploadImg",
  1267. data: fdi,
  1268. type: "post",
  1269. processData: false,
  1270. contentType: false,
  1271. success: function(result) {
  1272. if (result.msg) {
  1273. formData.append('invoiceImageUrl', result.msg);
  1274. }
  1275. // 更新 CFDJ
  1276. updateCFDJ(formData);
  1277. },
  1278. error: function(xhr, status, error) {
  1279. $.modal.alertError("上传图片失败");
  1280. }
  1281. });
  1282. } else {
  1283. // 如果没有图片需要上传,则直接更新 CFDJ
  1284. updateCFDJ(formData);
  1285. }
  1286. }
  1287. function updateCFDJ(formData) {
  1288. $.ajax({
  1289. cache: false, // 设置为 false 防止缓存
  1290. type: "POST",
  1291. url: prefix_recipe + "/updateCFDJ",
  1292. data: formData,
  1293. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  1294. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  1295. async: false, // 异步请求更为推荐,除非有特殊原因需要同步
  1296. error: function(request) {
  1297. $.modal.alertError("操作失败");
  1298. },
  1299. success: function(data) {
  1300. $.modal.alertSuccess(data.msg);
  1301. $.modal.closeTab();
  1302. window.location.reload();
  1303. }
  1304. });
  1305. }
  1306. function openCheckYSSH(){
  1307. //初始化时加载药师信息
  1308. loadPharmacists();
  1309. //$.modal.open("药师审核", prefix_pmService+'/openCheckYSJC'); findRevieForList
  1310. $('#myModal').modal('show');
  1311. // $.modal.closeTab();
  1312. }
  1313. // 异步加载所有药师信息并填充下拉框
  1314. function loadPharmacists() {
  1315. $.ajax({
  1316. url: prefix_recipe+ "/findRevieForList", // 假设这是获取所有药师的API端点
  1317. type: 'POST',
  1318. cache: false, // 设置为 false 防止缓存
  1319. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  1320. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  1321. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  1322. success: function (data) {
  1323. var select = $('#pharmacistNameSelect');
  1324. // 清空除了默认选项外的所有选项
  1325. select.find('option:not(:first)').remove();
  1326. data.data.forEach(function (pharmacist) {
  1327. select.append(new Option(pharmacist.pharmacistName, pharmacist.id));
  1328. });
  1329. },
  1330. error: function () {
  1331. $.modal.alertError('加载药师信息失败');
  1332. }
  1333. });
  1334. }
  1335. // 当选择药师后显示密码输入框
  1336. $('#pharmacistNameSelect').change(function () {
  1337. var selectedValue = $(this).val();
  1338. // 如果选择了具体的药师
  1339. if (selectedValue) {
  1340. $('#passwordGroup').show();
  1341. $('#password').val(''); // 清空密码输入框
  1342. $('#checkView').hide(); // 隐藏审核结果部分
  1343. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  1344. } else {
  1345. // 如果没有选择任何药师,隐藏所有相关元素
  1346. $('#passwordGroup').hide();
  1347. $('#checkView').hide(); // 确保在切换药师时隐藏审核结果和意见
  1348. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  1349. $('#password').val(''); // 清空密码输入框
  1350. }
  1351. });
  1352. // 验证药师密码并显示审核结果部分
  1353. function verifyPassword() {
  1354. var formData = new FormData();
  1355. var pharmacistId = $('#pharmacistNameSelect').val();
  1356. var password = $('#password').val();
  1357. formData.append('id', pharmacistId);
  1358. formData.append('reviewPassword', password);
  1359. $.ajax({
  1360. url: prefix_recipe+"/ReviewCheckInputPassword", // 假设这是验证药师密码的API端点
  1361. type: 'POST',
  1362. data: formData,
  1363. cache: false, // 设置为 false 防止缓存
  1364. processData: false, // 告诉 jQuery 不要处理数据(非常重要)
  1365. contentType: false, // 告诉 jQuery 不要设置 contentType(非常重要)
  1366. async: true, // 异步请求更为推荐,除非有特殊原因需要同步
  1367. success: function (data) {
  1368. if (data.code === 0) {
  1369. $('#checkView').show();
  1370. $('#pharmacistVerified').show(); // 显示验证成功的符号
  1371. } else {
  1372. $.modal.alertError('密码错误');
  1373. $('#checkView').hide();
  1374. $('#pharmacistVerified').hide(); // 隐藏验证成功的符号
  1375. }
  1376. },
  1377. error: function () {
  1378. $.modal.alertError('验证失败');
  1379. }
  1380. });
  1381. }
  1382. // 添加点击事件监听器到确认按钮上,用于触发密码验证
  1383. $('#verifyPasswordBtn').click(function () {
  1384. verifyPassword();
  1385. });
  1386. // 提交审核信息
  1387. function submitReview() {
  1388. if ($('#pharmacistNameSelect').val() && $('#password').is(':visible')) {
  1389. verifyPassword();
  1390. } else {
  1391. $.modal.alert('请选择审核药师并输入密码');
  1392. }
  1393. // 如果 checkView 显示,则可以提交表单
  1394. if ($('#checkView').is(':visible')) {
  1395. // 直接从特定的输入元素中获取值
  1396. // 获取审核药师姓名
  1397. var reviewingNameOption = $('#pharmacistNameSelect option:selected');
  1398. var reviewingName1 = reviewingNameOption.text(); // 获取选中的选项文本
  1399. var reviewStatus1 = $('input[name="checkResult"]:checked').val(); // 获取选中的审核结果
  1400. var remarks1 = $('#remarks').val();
  1401. // 检查是否所有必填项都已填写
  1402. if (!reviewingName1) {
  1403. $.modal.alert('请选择审核人');
  1404. return;
  1405. }
  1406. if (!reviewStatus1) {
  1407. $.modal.alert('请选择审核结果');
  1408. return;
  1409. }
  1410. remarks= remarks1;
  1411. reviewingName=reviewingName1;
  1412. reviewStatus=reviewStatus1;
  1413. // 添加到 formData 中
  1414. reviewFormData.append("reviewingName", reviewingName1);
  1415. reviewFormData.append("reviewStatus", reviewStatus1);
  1416. // reviewFormData.append("prescriptionNumber", prescriptionNumber);
  1417. // reviewFormData.append("drugsLinkId", drugsLinkId);
  1418. reviewFormData.append("remarks", remarks1);
  1419. reviewFlag=true;
  1420. $.modal.msgSuccess('审核信息已保存到处方登记页');
  1421. $('#openCheckYSSid').hide();
  1422. $('#myModal').modal('hide'); // 关闭弹窗
  1423. }
  1424. }
  1425. // 监听药师审核选择事件
  1426. function onclickshow() {
  1427. reviewFlag=false;
  1428. $('#openCheckYSSid').show();
  1429. }
  1430. function onclickhide() {
  1431. reviewFlag=true;
  1432. $('#openCheckYSSid').hide();
  1433. }
  1434. // callBack获取父窗口方法(方式二)
  1435. function selectUsersToParentCallBack2() {
  1436. var options = {
  1437. title: '添加处方登记药品',
  1438. width: 1000,
  1439. height: 600,
  1440. url: prefix_yppz + '/getAllProduct',
  1441. callBack: doSubmit2
  1442. };
  1443. $.modal.openOptions(options);
  1444. }
  1445. function doSubmit2(index, layero) {
  1446. var rows = layero.find("iframe")[0].contentWindow.selectTableObject();
  1447. if (rows.length == 0) {
  1448. $.modal.alertWarning("请至少选择一条记录");
  1449. return;
  1450. }
  1451. var tableBody = $('#drugInfoTable tbody');
  1452. rows.forEach(function (item) {
  1453. // 动态选择所有列并映射到更具描述性的名称
  1454. var columnsData = {
  1455. productId: item.productCode,
  1456. productCode: item.productCode,
  1457. productName: item.productName,
  1458. genericName: item.genericName,
  1459. specification: item.specification,
  1460. packaging: item.packaging,
  1461. manufacturer: item.manufacturer,
  1462. manufacturerAbbreviation: item.manufacturerAbbreviation,
  1463. productStatus: item.productStatus,
  1464. dtpFlag: item.dtpFlag,
  1465. isInsuranceDrug: item.isInsuranceDrug,
  1466. administrationMethod: item.administrationMethod,
  1467. registeredItem: item.registeredItem,
  1468. followUpItem: item.followUpItem,
  1469. coldChainItem: item.coldChainItem,
  1470. flowItem: item.flowItem,
  1471. charityAidItem: item.charityAidItem,
  1472. dosageMax: item.dosageMax,
  1473. unitMax: item.unitMax,
  1474. dosageMin: item.dosageMin,
  1475. unitMin: item.unitMin,
  1476. dosageNormal: item.dosageNormal,
  1477. unitNormal: item.unitNormal,
  1478. packingValue: item.packingValue,
  1479. packingUnit: item.packingUnit,
  1480. };
  1481. // 检查是否已经存在该药品
  1482. if (!isProductExist(columnsData.productId)) {
  1483. // 向表格中添加一行
  1484. var row = `
  1485. <tr data-product-id="${columnsData.productId}">
  1486. <td><button onclick="deleteRow('${columnsData.productId}')" class="btn btn-danger">删除重选择药品</button></td>
  1487. <td>${columnsData.productCode}</td>
  1488. <td>${columnsData.productName}</td>
  1489. <td class="hidden-column">${columnsData.genericName}</td>
  1490. <td>${columnsData.specification}</td>
  1491. <td class="hidden-column">${columnsData.manufacturerAbbreviation}</td>
  1492. <td class="hidden-column">${columnsData.administrationMethod}</td>
  1493. <td class="hidden-column">${columnsData.followUpItem === 1 ? '是' : '否'}</td>
  1494. <td class="hidden-column">${columnsData.coldChainItem === 1 ? '是' : '否'}</td>
  1495. <td class="hidden-column">${columnsData.registeredItem === 1 ? '是' : '否'}</td>
  1496. <td class="hidden-column">${columnsData.charityAidItem === 1 ? '是' : '否'}</td>
  1497. <td class="hidden-column">${columnsData.packaging}</td>
  1498. <td class="hidden-column"><input name="dosageMax" value="${columnsData.dosageMax}"/></td>
  1499. <td class="hidden-column"><input name="unitMax" value="${columnsData.unitMax}"/></td>
  1500. <td class="hidden-column"><input name="dosageMin" value="${columnsData.dosageMin}"/></td>
  1501. <td class="hidden-column"><input name="unitMin" value="${columnsData.unitMin}"/></td>
  1502. <td class="hidden-column"><input name="dosageNormal" value="${columnsData.dosageNormal}"/></td>
  1503. <td class="hidden-column"><input name="unitNormal" value="${columnsData.unitNormal}"/></td>
  1504. <td class="hidden-column"><input name="packingValue" value="${columnsData.packingValue}"/></td>
  1505. <td class="hidden-column"><input name="packingUnit" value="${columnsData.packingUnit}"/></td>
  1506. <td> <input name="packageQuantity" id="packageQuantity${columnsData.productId}" placeholder="取药数量(包装数)" class="styled-input" style="width: 130px;" type="number"></td>
  1507. <td> <input name="singleDoseValue" id="singleDoseValue${columnsData.productId}" placeholder="单次剂量数值" class="styled-input" style="width: 130px;" type="number"></td>
  1508. <td>
  1509. <select name="singleDoseUnit" id="singleDoseUnit${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  1510. <option value="">请选择</option>
  1511. <!--<option value="1">mg</option>
  1512. <option value="2">g</option>
  1513. <option value="3">片</option>-->
  1514. </select>
  1515. </td>
  1516. <td>
  1517. <select name="dosageFrequency" id="dosageFrequency${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  1518. <option value="">请选择</option>
  1519. <!--<option value="1">一日1次</option>
  1520. <option value="2">一日2次</option>
  1521. <option value="3">每天1次</option>
  1522. <option value="4">每天隔天一次</option>
  1523. <option value="5">每周2次</option>-->
  1524. </select>
  1525. </td>
  1526. <td> <input name="dosageFrequencyDays" id="dosageFrequencyDays${columnsData.productId}" placeholder="购药包装单位" class="styled-input" disabled style="width: 100px;" type="number"><span id="ycode${columnsData.productId}"></span></td>
  1527. <td> <input name="dvalueDays" id="dvalueDays${columnsData.productId}" placeholder="系统自动计算" class="styled-input" disabled="" style="width: 80px;" type="number"></td>
  1528. </tr>
  1529. `;
  1530. tableBody.append(row);
  1531. dataInfo(columnsData.productId)
  1532. $('#dosageFrequencyDays' + columnsData.productId).val(columnsData.packingValue);
  1533. $('#ycode' + columnsData.productId).text(columnsData.packingUnit);
  1534. //bindDosageFrequencyChangeListener(columnsData.productId);
  1535. } else {
  1536. $.modal.alertWarning(`药品 [ ${columnsData.productName} ] 已经添加了`);
  1537. }
  1538. });
  1539. $.modal.close(index);
  1540. }
  1541. function dataInfo(productId) {
  1542. /*<![CDATA[*/
  1543. var storeTypes = /*[[${@dict.getType('sys_gxhpz_gg_unitall')}]]*/ [];
  1544. /*]]>*/
  1545. /*<![CDATA[*/
  1546. var pcTypes = /*[[${@dict.getType('sys_select_dtp_ysfw_sfpx')}]]*/ [];
  1547. /*]]>*/
  1548. // 获取<select>元素
  1549. var selectElement = document.getElementById('singleDoseUnit' + productId);
  1550. var pcselectElement = document.getElementById('dosageFrequency' + productId);
  1551. storeTypes.forEach(function (item, index) {
  1552. var option = document.createElement("option");
  1553. option.value = item.dictValue;
  1554. option.text = item.dictLabel;
  1555. selectElement.add(option);
  1556. })
  1557. pcTypes.forEach(function (item, index) {
  1558. var option = document.createElement("option");
  1559. option.value = item.dictValue;
  1560. option.text = item.dictLabel;
  1561. pcselectElement.add(option);
  1562. })
  1563. }
  1564. // 动态绑定用药频次选择事件
  1565. function bindDosageFrequencyChangeListener(productId) {
  1566. $(`#dosageFrequency${productId}`).on('change', function () {
  1567. var selectedValue = $(this).val();
  1568. if (selectedValue) {
  1569. $(`#dosageFrequencyDays${productId}`).val(selectedValue);
  1570. } else {
  1571. $(`#dosageFrequencyDays${productId}`).val('');
  1572. }
  1573. });
  1574. }
  1575. function deleteRow(productId) {
  1576. $.modal.confirm("确认删除该药品吗?", function () {
  1577. // 删除对应行
  1578. $('#drugInfoTable tbody tr[data-product-id="' + productId + '"]').remove();
  1579. });
  1580. }
  1581. function isProductExist(productId) {
  1582. // 检查表格中是否已经存在该药品
  1583. return $('#drugInfoTable tbody tr[data-product-id="' + productId + '"]').length > 0;
  1584. }
  1585. /* 用户管理-新增-选择门店树 */
  1586. function selectDeptTree() {
  1587. var treeId = $("#treeId").val();
  1588. var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
  1589. var url = ctx + "system/user/selectDeptTree/" + deptId;
  1590. var options = {
  1591. title: '选择门店',
  1592. width: "380",
  1593. url: url,
  1594. callBack: doSubmit
  1595. };
  1596. $.modal.openOptions(options);
  1597. }
  1598. function doSubmit(index, layero) {
  1599. var body = $.modal.getChildFrame(index);
  1600. $("#treeId").val(body.find('#treeId').val());
  1601. $("#treeName").val(body.find('#treeName').val());
  1602. $.modal.close(index);
  1603. }
  1604. function bookbuilding(){
  1605. loadAchievs();
  1606. $('#myModal2').modal('show');
  1607. //$.operate.addSetwht('快速建档', prefix_pmService + '/archivesAdd',800,800)
  1608. }
  1609. function resetPre() {
  1610. resetDate();
  1611. $("#dtp-form-hxcx")[0].reset();
  1612. $("#query").val("");
  1613. }
  1614. function search_hz() {
  1615. var query = $('#query').val();
  1616. // 如果输入为空,清空 dValueId 输入框并停止进一步操作
  1617. if (!query) {
  1618. $('#query').val('');
  1619. return;
  1620. }
  1621. // 使用防抖机制延迟发送请求
  1622. // 发送 AJAX 请求到服务器查询数据
  1623. hzparam = {query: query};//模拟微信扫码获取微信openId
  1624. $.ajax({
  1625. cache: true,
  1626. type: "POST",
  1627. url: prefix_pmService + '/slectPatientByNameOrPhoneOrIdCard', // 替换为实际的搜索 URL
  1628. data: hzparam,
  1629. async: false,
  1630. success: function (data) {
  1631. if (data.code == 0) {
  1632. dataList = [];
  1633. populatePatientTable(data.data);
  1634. dataList = data.data;
  1635. // 如果有且只有一条记录,默认选中这条记录
  1636. if (data.data.length === 1) {
  1637. setTimeout(function () {
  1638. $('input[name="selectPatient"]').first().prop('checked', true).trigger('change');
  1639. }, 0); // 确保DOM已经完全渲染
  1640. }
  1641. if (data.data.length <= 0) {
  1642. var tbody = $('#patient-table tbody');
  1643. tbody.empty(); // 清空现有行
  1644. $.modal.confirm("未找到患者 点击确定可快速建档", function () {
  1645. // 快速建档
  1646. bookbuilding();
  1647. });
  1648. }
  1649. // // 如果找到匹配的数据,更新输入框
  1650. // $('#patientId').val(data.data.id);
  1651. // $('#patientName').val(data.data.name);
  1652. // var gender = data.data.gender;
  1653. // $('#gender').val(gender === 1 ? '男' : gender === 0 ? '女' : '');
  1654. // $('#age').val(data.data.age);
  1655. // var patientId = data.data.id;
  1656. //
  1657. // if(patientId !='' && patientId != null){
  1658. // //查询出对应患者的上一次处方登记信息
  1659. // getLastRecipe(patientId);
  1660. // }
  1661. } else {
  1662. // // 清空表格中的所有数据行
  1663. // $('#patientId').val('');
  1664. // $('#patientName').val('');
  1665. // $('#gender').val('');
  1666. // $('#age').val('');
  1667. // $('#query').val('');
  1668. // getLastRecipe(0);
  1669. $.modal.alertWarning(`未找到患者 可快速建档`);
  1670. bookbuilding();
  1671. var tbody = $('#patient-table tbody');
  1672. tbody.empty(); // 清空现有行
  1673. }
  1674. },
  1675. error: function (error) {
  1676. // 清空 dValueId 输入框
  1677. $('#query').val('');
  1678. }
  1679. });
  1680. }
  1681. /* 这里是去查询 使用药的信息*/
  1682. $(document).ready(function () {
  1683. var id = $('#id').val();
  1684. var datas = [];
  1685. var data = {
  1686. "id": id,
  1687. };
  1688. $.ajax({
  1689. cache: true,
  1690. type: "POST",
  1691. url: prefix_recipe + "/getLastRecipeInfo",
  1692. data: data,
  1693. async: false,
  1694. error: function (request) {
  1695. $.modal.alertError("系统错误");
  1696. },
  1697. success: function (data) {
  1698. var shangciObj = {};
  1699. shangcigyList = data.data.recipeList;
  1700. if (data.data.recipeList != null || data.data.recipeList != undefined) {
  1701. initTabShow(datas = data.data.recipeList)
  1702. }
  1703. if (data.data.recipe != null) {
  1704. shangciObj = data.data.recipe;
  1705. // 动态填充表单字段
  1706. $.each(shangciObj, function (key, value) {
  1707. $('#' + key).val(value);
  1708. if (key == "gender") {
  1709. if (value == 0) {
  1710. value = "男";
  1711. } else {
  1712. value = "女";
  1713. }
  1714. $('#' + key).val(value);
  1715. }
  1716. });
  1717. }
  1718. }
  1719. });
  1720. });
  1721. function initTabShow(datas) {
  1722. datas.forEach(function (item) {
  1723. var tableBody = $('#drugInfoTable tbody');
  1724. // 动态选择所有列并映射到更具描述性的名称
  1725. var columnsData = {
  1726. productId: item.mdmCode,
  1727. productCode: item.mdmCode,
  1728. productName: item.productName || "",
  1729. genericName: item.genericName || "",
  1730. specification: item.specification,
  1731. packaging: item.packaging,
  1732. manufacturer: item.manufacturer,
  1733. manufacturerAbbreviation: item.manufacturerShortName,
  1734. productStatus: item.productStatus,
  1735. dtpFlag: item.dtpFlag,
  1736. isInsuranceDrug: item.isInsuranceDrug,
  1737. administrationMethod: item.administrationMethod,
  1738. registeredItem: item.registeredItem,
  1739. followUpItem: item.followUpItem,
  1740. coldChainItem: item.coldChainItem,
  1741. flowItem: item.flowItem,
  1742. packageQuantity: item.packageQuantity,
  1743. singleDoseValue: item.singleDoseValue,
  1744. singleDoseUnit: item.singleDoseUnit,
  1745. dosageFrequency: item.dosageFrequency,
  1746. dosageFrequencyDays: item.dosageFrequencyDays,
  1747. charityAidItem: item.charityAidItem,
  1748. dosageMax: item.dosage_max,
  1749. unitMax: item.unit_max,
  1750. dosageMin: item.dosage_min,
  1751. unitMin: item.unit_min,
  1752. dosageNormal: item.dosage_normal,
  1753. unitNormal: item.unit_normal,
  1754. packingValue: item.packing_value,
  1755. packingUnit: item.packing_unit,
  1756. dvalueDays: item.dvalueDays,
  1757. };
  1758. // 检查是否已经存在该药品
  1759. if (!isProductExist(columnsData.productId)) {
  1760. // 向表格中添加一行
  1761. var row = `
  1762. <tr data-product-id="${columnsData.productId}">
  1763. <td><button onclick="deleteRow('${columnsData.productId}')" class="btn btn-danger">删除重选择药品</button></td>
  1764. <td>${columnsData.productCode}</td>
  1765. <td>${columnsData.productName}</td>
  1766. <td class="hidden-column">${columnsData.genericName}</td>
  1767. <td>${columnsData.specification}</td>
  1768. <td class="hidden-column">${columnsData.manufacturerAbbreviation}</td>
  1769. <td class="hidden-column">${columnsData.administrationMethod}</td>
  1770. <td class="hidden-column">${columnsData.followUpItem === 1 ? '是' : '否'}</td>
  1771. <td class="hidden-column">${columnsData.coldChainItem === 1 ? '是' : '否'}</td>
  1772. <td class="hidden-column">${columnsData.registeredItem === 1 ? '是' : '否'}</td>
  1773. <td class="hidden-column">${columnsData.charityAidItem === 1 ? '是' : '否'}</td>
  1774. <td class="hidden-column">${columnsData.packaging}</td>
  1775. <td class="hidden-column"><input name="dosageMax" value="${columnsData.dosageMax}"/></td>
  1776. <td class="hidden-column"><input name="unitMax" value="${columnsData.unitMax}"/></td>
  1777. <td class="hidden-column"><input name="dosageMin" value="${columnsData.dosageMin}"/></td>
  1778. <td class="hidden-column"><input name="unitMin" value="${columnsData.unitMin}"/></td>
  1779. <td class="hidden-column"><input name="dosageNormal" value="${columnsData.dosageNormal}"/></td>
  1780. <td class="hidden-column"><input name="unitNormal" value="${columnsData.unitNormal}"/></td>
  1781. <td class="hidden-column"><input name="packingValue" value="${columnsData.packingValue}"/></td>
  1782. <td class="hidden-column"><input name="packingUnit" value="${columnsData.packingUnit}"/></td>
  1783. <td> <input name="packageQuantity" id="packageQuantity${columnsData.productId}" placeholder="取药数量(包装数)" class="styled-input" style="width: 130px;" type="number"></td>
  1784. <td> <input name="singleDoseValue" id="singleDoseValue${columnsData.productId}" placeholder="单次剂量数值" class="styled-input" style="width: 130px;" type="number"></td>
  1785. <td>
  1786. <select name="singleDoseUnit" id="singleDoseUnit${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  1787. <option value="">请选择</option>
  1788. <!--<option value="1">mg</option>
  1789. <option value="2">g</option>
  1790. <option value="3">片</option>-->
  1791. </select>
  1792. </td>
  1793. <td>
  1794. <select name="dosageFrequency" id="dosageFrequency${columnsData.productId}" class="styled-input" style="width: 130px;" required>
  1795. <option value="">请选择</option>
  1796. <!--<option value="1">一日1次</option>
  1797. <option value="2">一日2次</option>
  1798. <option value="3">每天1次</option>
  1799. <option value="4">每天隔天一次</option>
  1800. <option value="5">每周2次</option>-->
  1801. </select>
  1802. </td>
  1803. <td> <input name="dosageFrequencyDays" value="${columnsData.packingValue}" id="dosageFrequencyDays${columnsData.productId}" placeholder="购药包装单位" class="styled-input" disabled style="width: 100px;" type="number"><span id="ycode${columnsData.productId}"></span></td>
  1804. <td> <input name="dvalueDays" id="dvalueDays${columnsData.productId}" placeholder="系统自动计算" class="styled-input" disabled="" style="width: 80px;" type="number"><span id="defaultNum${columnsData.productId}" style="color: red"></span></td>
  1805. </tr>
  1806. `;
  1807. tableBody.append(row);
  1808. dataInfo(columnsData.productId)
  1809. //bindDosageFrequencyChangeListener(columnsData.productId);
  1810. $('#packageQuantity' + columnsData.productId).val(columnsData.packageQuantity);
  1811. $('#dvalueDays' + columnsData.productId).val(columnsData.dvalueDays);
  1812. $('#singleDoseValue' + columnsData.productId).val(columnsData.singleDoseValue);
  1813. // 设置 select 元素的值,这将会选中 value 与 columnsData.singleDoseValue 匹配的 option
  1814. $('#singleDoseUnit' + columnsData.productId).val(columnsData.singleDoseUnit);
  1815. $('#dosageFrequency' + columnsData.productId).val(columnsData.dosageFrequency);
  1816. $('#dosageFrequencyDays' + columnsData.productId).val(columnsData.packingValue);
  1817. $('#ycode' + columnsData.productId).text(columnsData.packingUnit);
  1818. var dcnum = columnsData.singleDoseValue; // 单次用量
  1819. var pcnum = columnsData.dosageFrequency; // 用药频次 eg: 一天一次
  1820. // 计算 D 值
  1821. if ((dcnum * pcnum) > columnsData.dosageMax) {
  1822. $('#defaultNum' + columnsData.productId).text("默认值");
  1823. }
  1824. if ((dcnum * pcnum) < columnsData.dosageMin) {
  1825. $('#defaultNum' + columnsData.productId).text("默认值");
  1826. }
  1827. } else {
  1828. $.modal.alertWarning(`药品 [ ${columnsData.productName} ] 已经添加了`);
  1829. }
  1830. });
  1831. }
  1832. //患者信息
  1833. function addArchivesCallback(){
  1834. $('#myModal2').modal('show');
  1835. //初始化信息
  1836. loadAchievs();
  1837. }
  1838. function loadAchievs(){
  1839. $('#documentNumber').on('input', function() {
  1840. idCard();
  1841. });
  1842. for (var i = 1; i < 7; i++) {
  1843. // 初始化 Select2 插件
  1844. $('#category-select'+i).select2({
  1845. placeholder: "请选择或直接输入搜索",
  1846. //allowClear: true //在输入框最后 有一个 删除所有的X 但是会出现 第一个删除出现问题有空格
  1847. }).css({
  1848. 'z-index': '9999',
  1849. 'position': 'relative'
  1850. });
  1851. }
  1852. // 肿瘤发病部位疾病名称 1
  1853. // 肿瘤治疗并发症与合并症名称 2
  1854. // 风湿免疫疾病名称库 3
  1855. // 罕见病疾病名称 4
  1856. // 感染类疾病名称 5
  1857. // 临时慢病名称 6
  1858. // 发送 AJAX 请求获取疾病大类数据
  1859. $.ajax({
  1860. url: ctx + 'sp/sp/typeDate',
  1861. method: 'GET',
  1862. dataType: 'json',
  1863. success: function(data) {
  1864. // 获取所有的 select 元素
  1865. var selects = [
  1866. $('#category-select1'),
  1867. $('#category-select2'),
  1868. $('#category-select3'),
  1869. $('#category-select4'),
  1870. $('#category-select5'),
  1871. $('#category-select6')
  1872. ];
  1873. // 清空已有选项(除了第一个默认选项)
  1874. selects.forEach(function(select) {
  1875. select.find('option').not(':first').remove();
  1876. });
  1877. // 添加默认选项到每个下拉列表
  1878. selects.forEach(function(select) {
  1879. if (!select.find('option:first').length) { // 检查是否已经有默认选项
  1880. $('<option>', {
  1881. value: '',
  1882. text : '请选择疾病'
  1883. }).prependTo(select); // 使用 prependTo 确保它成为第一个选项
  1884. }
  1885. });
  1886. // 解析 dl 数据并获取 ID 数组
  1887. /*<![CDATA[*/
  1888. var dl = /*[[${dl}]]*/ '';
  1889. /*]]>*/
  1890. var dlParsed = JSON.parse(dl);
  1891. var dlIds = Array.isArray(dlParsed) ? dlParsed.map(item => item.id.toString()) : [];
  1892. // 遍历返回的数据并添加选项
  1893. $.each(data.value || [], function(index, item) {
  1894. var selectIndex = item.dict_key-1; // 假设 dict_key 是从 1 开始的索引
  1895. if (selectIndex >= 0 && selectIndex < selects.length) {
  1896. $('<option>', {
  1897. value: item.id,
  1898. text : item.categoryName
  1899. }).appendTo(selects[selectIndex]);
  1900. // 设置选中的值(仅当 dlIds 包含该项 id 时)
  1901. if (dlIds.includes(item.id.toString())) {
  1902. selects[selectIndex].val(item.id).trigger('change');
  1903. }
  1904. }
  1905. });
  1906. // 如果使用 Select2 插件,则初始化或刷新它们
  1907. selects.forEach(function(select) {
  1908. select.trigger('change');
  1909. });
  1910. },
  1911. error: function(xhr, status, error) {
  1912. $.modal.alertError("解析疾病失败");
  1913. }
  1914. });
  1915. }
  1916. // 示例使用
  1917. function submitArchives() {
  1918. var documentType= $("#documentType").val();
  1919. if(documentType=="居民身份证") {
  1920. var IDCard= $("#documentNumber").val();
  1921. if (IDCard == null || IDCard == "" || IDCard == undefined){
  1922. $.modal.alertError("请输入身份证号码")
  1923. return;
  1924. }
  1925. if (validateIDCard(IDCard)==false) {
  1926. $.modal.alertError("身份证号码格式不正确,请重新输入!")
  1927. return;
  1928. }
  1929. }
  1930. var gender= $("#gender").val()
  1931. if (gender==null || gender=="" || gender==undefined) {
  1932. $.modal.alertError("请选择性别")
  1933. return ;
  1934. }
  1935. var timeFirstDiagnosis= $("#timeFirstDiagnosis").val();
  1936. if (timeFirstDiagnosis==null || timeFirstDiagnosis=="" || timeFirstDiagnosis==undefined) {
  1937. $.modal.alertError("请选择首次确诊时间")
  1938. return ;
  1939. }
  1940. var phoneNumber= $("#phoneNumber").val()
  1941. if (phoneNumber==null || phoneNumber=="" || phoneNumber==undefined) {
  1942. $.modal.alert("请输入联系方式")
  1943. return ;
  1944. }
  1945. add();
  1946. }
  1947. function add() {
  1948. var data = $("#form-server-add").serializeArray();
  1949. // 获取所有选中的选项并处理数据
  1950. var selectedDataDL = [];
  1951. for (let i = 1; i <= 6; i++) {
  1952. var selectedOptionsDL = $(`#category-select${i} option:selected`);
  1953. if (selectedOptionsDL.length > 0) {
  1954. selectedOptionsDL.each(function() {
  1955. selectedDataDL.push({
  1956. id: $(this).val(),
  1957. name: $(this).text(),
  1958. });
  1959. });
  1960. }
  1961. }
  1962. var hasSelection = false;
  1963. if (selectedDataDL.length > 0) {
  1964. hasSelection = true;
  1965. }
  1966. var DL = JSON.stringify(selectedDataDL);
  1967. if (!hasSelection) {
  1968. $.modal.alert('请至少选择一个疾病选项!');
  1969. return;
  1970. }
  1971. data.push({name: "dl", value: DL});
  1972. data.push({name: "age", value: $("#age").val()});
  1973. data.push({name: "dateBirth", value: $("#dateBirth").val()});
  1974. $.ajax({
  1975. cache : true,
  1976. type : "POST",
  1977. url : ctx + "dtp/pmService/archivesAdd",
  1978. data : data,
  1979. async : false,
  1980. error : function(request) {
  1981. $.modal.alertError("系统错误");
  1982. },
  1983. success : function(responseData) {
  1984. $('#patientPhone').val($("#phoneNumber").val())
  1985. $('#patientName').val($("#name").val());
  1986. $('#age1').val($("#age").val());
  1987. $('#gender1').val($("#gender").val());
  1988. $('#patientFlagMessage').hide();
  1989. patientFlag = true;
  1990. $('#myModal2').modal('hide'); // 关闭弹窗
  1991. }
  1992. });
  1993. }
  1994. function uploadImage(input) {
  1995. if (input.files && input.files[0]) {
  1996. var reader = new FileReader();
  1997. reader.onload = function(e) {
  1998. $('#uploadedImage').attr('src', e.target.result).show();
  1999. // 调用 OCR 识别
  2000. recognizeIdCard(input.files[0]);
  2001. };
  2002. reader.readAsDataURL(input.files[0]);
  2003. // 直接将文件对象传递给 sendImageToServer
  2004. sendImageToServer(input.files[0]);
  2005. }
  2006. }
  2007. function sendImageToServer(file) {
  2008. var formdata = new FormData();
  2009. formdata.append("idcardImgfile", file);
  2010. $.ajax({
  2011. url: prefix_pmService + "/updateIdcardImg",
  2012. data: formdata,
  2013. type: "post",
  2014. processData: false,
  2015. contentType: false,
  2016. success: function(result) {
  2017. $("#idCardImg").val(result.msg)
  2018. },
  2019. error: function(xhr, status, error) {
  2020. console.error("Error uploading image:", error);
  2021. }
  2022. });
  2023. }
  2024. function recognizeIdCard(file) {
  2025. const formData = new FormData();
  2026. formData.append('image', file);
  2027. $.ajax({
  2028. url: prefix_pmService + "/idCard",
  2029. data: formData,
  2030. type: 'post',
  2031. processData: false,
  2032. contentType: false,
  2033. success: function(result) {
  2034. if (result.data.words_result) {
  2035. const name =result.data.words_result.姓名.words;
  2036. const idNumber = result.data.words_result.公民身份号码.words;
  2037. const gender = result.data.words_result.性别.words;
  2038. const address = result.data.words_result.住址.words;
  2039. const dateBirth = result.data.words_result.出生.words;
  2040. //const nation = result.data.words_result.名族.words;
  2041. if (gender == "男"){
  2042. $("#gender").val("0");
  2043. }else if (gender == "女"){
  2044. $("#gender").val("1");
  2045. }else if (gender == "未知"){
  2046. $("#gender").val("2");
  2047. }
  2048. // 将提取的信息填充到表单中
  2049. document.getElementById('name').value = name;
  2050. document.getElementById('documentNumber').value = idNumber;
  2051. idCard();
  2052. } else {
  2053. console.error('OCR 识别失败:', result);
  2054. }
  2055. },
  2056. error: function(xhr, status, error) {
  2057. console.error('OCR 识别错误:', error);
  2058. }
  2059. });
  2060. }
  2061. function idCard(){
  2062. var documentNumber = $('#documentNumber').val();
  2063. if (documentNumber.length === 18) { // 假设证件号码是18位的身份证号
  2064. var birthDateStr = documentNumber.substring(6, 14); // 提取出生日期部分
  2065. var year = birthDateStr.substring(0, 4);
  2066. var month = birthDateStr.substring(4, 6);
  2067. var day = birthDateStr.substring(6, 8);
  2068. var birthDate = new Date(year, month - 1, day); // 创建日期对象
  2069. if (!isNaN(birthDate.getTime())) { // 检查日期是否有效
  2070. document.getElementById('dateBirth').value = formatBirthDate(birthDate);
  2071. document.getElementById('age').value = calculateAge(birthDate);
  2072. } else {
  2073. document.getElementById('dateBirth').value = '';
  2074. document.getElementById('age').value = '0';
  2075. }
  2076. } else {
  2077. document.getElementById('dateBirth').value = '';
  2078. document.getElementById('age').value = '0';
  2079. }
  2080. }
  2081. // 定义一个函数来计算年龄
  2082. function calculateAge(dateOfBirth) {
  2083. var today = new Date();
  2084. var age = today.getFullYear() - dateOfBirth.getFullYear();
  2085. var m = today.getMonth() - dateOfBirth.getMonth();
  2086. if (today.getFullYear() === dateOfBirth.getFullYear()) {
  2087. return '0';
  2088. }
  2089. if (m < 0 || (m === 0 && today.getDate() < dateOfBirth.getDate())) {
  2090. age--;
  2091. }
  2092. return age;
  2093. }
  2094. // 格式化出生日期
  2095. function formatBirthDate(date) {
  2096. var year = date.getFullYear();
  2097. var month = ('0' + (date.getMonth() + 1)).slice(-2);
  2098. var day = ('0' + date.getDate()).slice(-2);
  2099. return `${year}-${month}-${day}`;
  2100. }
  2101. </script>
  2102. <style>
  2103. .modal.inmodal {
  2104. z-index: 1050; /* 确保模态框有一个较高的z-index */
  2105. }
  2106. .select2-dropdown {
  2107. z-index: 9999 !important; /* 强制提高select2下拉菜单的z-index */
  2108. }
  2109. .ibox {
  2110. width: auto;
  2111. height: 370px;
  2112. overflow: auto; /* 当内容超过指定尺寸时显示滚动条 */
  2113. }
  2114. .fixed-layout-table {
  2115. width: 100%;
  2116. border-collapse: collapse; /* 减少单元格间距 */
  2117. }
  2118. .fixed-layout-table thead th {
  2119. position: sticky;
  2120. top: 0;
  2121. background-color: #f8f9fa; /* 表头背景颜色 */
  2122. z-index: 1;
  2123. }
  2124. /* 隐藏列的样式 */
  2125. .hidden-column {
  2126. display: none;
  2127. }
  2128. .hidden {
  2129. display: none;
  2130. }
  2131. /*.ibox {*/
  2132. /* width: 700px;*/
  2133. /* margin-bottom: 20px;*/
  2134. /* border: 1px solid #e7eaec;*/
  2135. /* border-radius: 4px;*/
  2136. /*}*/
  2137. .ibox-title {
  2138. background-color: #f3f3f4;
  2139. border-bottom: 1px solid #e7eaec;
  2140. padding: 10px 15px;
  2141. font-size: 16px;
  2142. width: 1540px;
  2143. }
  2144. .ibox-content {
  2145. padding: 15px;
  2146. }
  2147. .ibox-content h4 {
  2148. margin-top: 0;
  2149. }
  2150. .form-horizontal .form-group {
  2151. margin-right: 384px;
  2152. margin-left: 3px;
  2153. }
  2154. input[type=file] {
  2155. display: none;
  2156. }
  2157. .form-group {
  2158. margin-bottom: -1px;
  2159. }
  2160. /* 添加一些基础样式 */
  2161. body {
  2162. font-family: Arial, sans-serif;
  2163. }
  2164. /* 使用ID选择器来确保样式仅应用于特定表格 */
  2165. #drugInfoTable {
  2166. /*width: 500px;*/
  2167. border-collapse: collapse;
  2168. }
  2169. /* 使用后代选择器来确保样式仅应用于该表格内的th和td元素 */
  2170. #drugInfoTable th, #drugInfoTable td {
  2171. text-align: left;
  2172. padding: 5px;
  2173. border-bottom: 1px solid #ddd;
  2174. }
  2175. /* 使用后代选择器来确保样式仅应用于该表格内的tr元素 */
  2176. #drugInfoTable tr:nth-child(even) {
  2177. background-color: #f2f2f2;
  2178. }
  2179. /* 修正了宽度设置,因为宽度通常不应该应用于行(tr),而是应用于单元格(td或th) */
  2180. #drugInfoTable tr:nth-child(even) td {
  2181. width: auto; /* 根据内容自动调整宽度 */
  2182. }
  2183. .hidden-column {
  2184. display: none;
  2185. }
  2186. .customize-table {
  2187. width: 100%;
  2188. border-collapse: collapse;
  2189. }
  2190. .customize-table th, .customize-table td {
  2191. border: 1px solid #ddd;
  2192. padding: 8px;
  2193. }
  2194. .customize-table th {
  2195. background-color: #f2f2f2;
  2196. text-align: left;
  2197. }
  2198. .customize-table tr:nth-child(even) {
  2199. background-color: #f9f9f9;
  2200. }
  2201. .customize-table tr:hover {
  2202. background-color: #ddd;
  2203. }
  2204. /* 新增:选中行的样式 */
  2205. .customize-table tr.selected {
  2206. background-color: #a9a9c5;
  2207. color: white; /* 确保文字可见 */
  2208. }
  2209. /* 患者的样式 */
  2210. .ibox2 {
  2211. width: 162px;
  2212. /* height: 370px; */
  2213. overflow: auto;
  2214. }
  2215. .ibox2-title {
  2216. padding: 10px 15px;
  2217. font-size: 16px;
  2218. width: 700px;
  2219. }
  2220. .ibox-content h4 {
  2221. margin-top: 0;
  2222. }
  2223. input[type=file] {
  2224. display: none;
  2225. }
  2226. .modal-content2 {
  2227. width: 800px;
  2228. background-clip: padding-box;
  2229. background-color: #fff;
  2230. border: 1px solid rgba(0, 0, 0, 0);
  2231. border-radius: 4px;
  2232. box-shadow: 0 1px 3px rgba(0,0,0,0.3);
  2233. outline: 0 none;
  2234. }
  2235. .fileinput-preview.thumbnail {
  2236. display: flex;
  2237. justify-content: center; /* 水平居中 */
  2238. align-items: center; /* 垂直居中 */
  2239. text-align: center; /* 确保文本内部也居中 */
  2240. position: relative;
  2241. background-color: #f5f5f5; /* 设置背景颜色以更好地区分 */
  2242. border: 2px dashed #ccc; /* 添加虚线边框 */
  2243. color: #999; /* 文字颜色 */
  2244. font-size: 14px; /* 文字大小 */
  2245. }
  2246. .centered-content {
  2247. display: flex;
  2248. flex-direction: column;
  2249. align-items: center;
  2250. }
  2251. .plus-sign {
  2252. margin-top: 5px;
  2253. font-size: 24px;
  2254. font-weight: bold;
  2255. }
  2256. /* 隐藏初始的大图 */
  2257. .preview-large {
  2258. display: none;
  2259. position: absolute;
  2260. border: 1px solid #ccc;
  2261. background-color: #fff;
  2262. z-index: 1000;
  2263. }
  2264. /* 确保预览框在特定容器内 */
  2265. .customize-form-group-container {
  2266. position: relative;
  2267. }
  2268. .fileinput .fileinput-preview {
  2269. background-image: none !important;
  2270. background-color: transparent !important;
  2271. }
  2272. </style>
  2273. </body>
  2274. </html>