prescription-adjustment.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. $(function(){
  2. var request = getRequest(),
  3. teamCode = request.id,
  4. isLeader = isTeamLeader(),
  5. prescriptionCode = request.code;
  6. var medicineFreqData = [];
  7. var usageDict = [];
  8. var isChangeDiagnosis = 0; //判断是否改变疾病类型
  9. var $main = $('#main');
  10. template.helper('toJson',function(o) {
  11. if(o) {
  12. return JSON.stringify(o)
  13. }
  14. return "";
  15. })
  16. Promise.all([
  17. prescriptionDetailApis.getContinuedPrescriptionAsDoctor({
  18. data: {
  19. code: prescriptionCode, // 续方CODE
  20. type: isLeader?1:2 // 是否为团队长,1:是,2:否
  21. }
  22. }),
  23. prescriptionDetailApis.getRateList({data:{}}),
  24. prescriptionDetailApis.getUsageDict({data:{}}),
  25. prescriptionDetailApis.getReasonByType({data: {type:1}})
  26. ]).then(function(responses) {
  27. var prescriptionInfo = responses[0].data;
  28. var reasonTypes = responses[3].data;
  29. $main.html(template('detailTmpl', $.extend({},prescriptionInfo, {reasonTypes:reasonTypes})))
  30. medicineFreqData = responses[1].data
  31. usageDict = responses[2].data
  32. bindEvents()
  33. initDiagnosisSuggestInput()
  34. initDrugNameSuggestInput()
  35. initFreqSuggestInput()
  36. initDaySuggestInput()
  37. initUsageSuggestInput()
  38. calcWorldWithTextarea()
  39. }).catch(function(e) {
  40. console && console.error(e)
  41. })
  42. function bindEvents() {
  43. $('#addDrugBtn').click(function() {
  44. var html = template('drugTmpl',{})
  45. $('#drugs').append(html)
  46. initDrugNameSuggestInput()
  47. initFreqSuggestInput()
  48. initDaySuggestInput()
  49. initUsageSuggestInput()
  50. })
  51. $('#adjustReason').on('click','li',function() {
  52. if($(this).hasClass('active')) {
  53. $(this).removeClass('active')
  54. } else {
  55. $(this).addClass('active')
  56. }
  57. setAdjustReason()
  58. })
  59. $('#drugs').on('click','.icon-shanchu',function() {
  60. $(this).closest('.ibox-content').remove();
  61. }).on('click','.icon-jianshao',function() {
  62. var $input = $(this).closest('li').find('input').eq(0);
  63. var amount = parseInt($input.val()||'0')
  64. if(amount > 0) {
  65. $input.val(amount - 1)
  66. } else {
  67. $input.val(0)
  68. }
  69. var $box = $(this).closest('.ibox-content')
  70. countMediSum($box)
  71. }).on('click','.icon-xinzeng',function() {
  72. var $input = $(this).closest('li').find('input').eq(0);
  73. var amount = parseInt($input.val()||'0')
  74. $input.val(amount + 1)
  75. var $box = $(this).closest('.ibox-content')
  76. countMediSum($box)
  77. }).on('blur', 'input.j-medi-single, input.j-selDate',function() {
  78. var $box = $(this).closest('.ibox-content')
  79. countMediSum($box)
  80. })
  81. $('.diagnosis-wrap').on('click',function() {
  82. $('#placeholdText').hide()
  83. $('#diagnosisInput').show()
  84. $('#diagnosisInput').focus()
  85. })
  86. $('#addDiagnosisBtn').on('click',function() {
  87. $(this).hide();
  88. $('.diagnosis-wrap').show();
  89. setTimeout(function() {
  90. $('#diagnosisInput').click()
  91. },100)
  92. })
  93. $('#diagnosisInput').on('blur keydown',function(e) {
  94. if(e.type == 'keydown' && e.keyCode == 13) {
  95. $('#diagnosisInput').blur()
  96. } else {
  97. if(e.type == 'blur') {
  98. $('#placeholdText').show()
  99. $('#diagnosisInput').hide()
  100. var name = $('#diagnosisInput').val()
  101. var code = $('#diagnosisInput').attr('data-code')
  102. if(name && code) {
  103. isChangeDiagnosis = 1;
  104. var html = template('diagnosisTmpl', {data:{name: name,code:code}})
  105. $('#diagnosis').append(html)
  106. }
  107. $('#diagnosisInput').val('')
  108. $('#diagnosisInput').attr('data-code','')
  109. $('#addDiagnosisBtn').show()
  110. $('.diagnosis-wrap').hide()
  111. }
  112. }
  113. })
  114. $('#diagnosis').on('click', '.fa-close' ,function() {
  115. $(this).closest('li').remove()
  116. isChangeDiagnosis = 1;
  117. })
  118. $('#backBtn').on('click',function() {
  119. history.go(-1);
  120. })
  121. $('#confirmBtn').click(function(){
  122. var $sum = $(".j-sumMedicine");
  123. if($sum.length > 0){
  124. for(var i=0;i<$sum.length;i++){
  125. if(! $sum.eq(i).attr('data-num')){
  126. showErrorMsg('请完善药品信息')
  127. return
  128. }
  129. }
  130. }else{
  131. return
  132. }
  133. var msgArr = [],
  134. $box = $('#drugs .ibox-content');
  135. for(var i=0;i<$box.length;i++){
  136. var data = {};
  137. var saveData = JSON.parse($box.eq(i).attr('data-json'));
  138. data.prescriptionCode = prescriptionCode;
  139. data.drugCode = saveData.drugCode;
  140. data.drugName = $box.eq(i).find('.j-drugName').val().replace(/\(/,'(').replace(/\)/,')');
  141. data.drugRate = $box.eq(i).find('.j-selFreq').attr('data-code');
  142. data.drugRateName = $box.eq(i).find('.j-selFreq').val();
  143. data.drugFormat=saveData.drugFormat.replace(/\(/,'(').replace(/\)/,')');
  144. data.subjectClass = $box.eq(i).attr('data-class');
  145. data.isRefrigerate = $box.eq(i).attr('data-storage')==2?1:0;
  146. data.physicAmount = "";
  147. data.physicAmountUnit = saveData.physicAmountUnit;
  148. data.physicAmountUnitName = saveData.physicAmountUnitName;
  149. data.physicDose = $box.eq(i).find('.j-medi-single').val().trim();
  150. data.physicDoseUnit = $box.eq(i).find('.j-dose-unit').attr('data-unit');
  151. data.physicDoseUnitName = $box.eq(i).find('.j-dose-unit').text();
  152. data.drugNumUnit = $box.eq(i).find('.j-sumMedicine').attr('data-unit');//取当次用量单位
  153. data.drugNumUnitName = $box.eq(i).find('.j-sumMedicine').attr('data-name');
  154. data.drugUsage= $box.eq(i).find('.j-method').attr('data-code');
  155. data.usageName= $box.eq(i).find('.j-method').val();
  156. data.num= $box.eq(i).find(".j-sumMedicine").attr('data-num');//取总量
  157. data.dayCount=$box.eq(i).find('.j-selDate').val();
  158. msgArr.push(data);
  159. }
  160. //调整CODE
  161. var reasonCode= _.map($('#adjustReason li.active'),function(el) {
  162. return $(el).attr('data-code')
  163. }).join(',')
  164. var params= {
  165. code:prescriptionCode,
  166. infos:JSON.stringify(msgArr),
  167. reason:$('#adjustReasonTextarea').val().trim()?$('#adjustReasonTextarea').val().trim():'-',
  168. reasonCode:reasonCode,
  169. diagnosis:(function(){
  170. // TODO
  171. var diagnosis = [];
  172. if(isChangeDiagnosis) {
  173. diagnosis = _.map($('#diagnosis li'),function(el) {
  174. var data = JSON.parse($(el).attr('data-json'))
  175. return {
  176. code: data.code,
  177. name: data.name
  178. }
  179. })
  180. return JSON.stringify(diagnosis)
  181. }
  182. return ""
  183. })()
  184. }
  185. prescriptionDetailApis.updatePresInfo({
  186. data: params
  187. }).then(function(res) {
  188. if(res.status == 200){
  189. showSuccessMsg("保存成功")
  190. location.reload(true)
  191. } else {
  192. showErroeMsg("保存失败")
  193. }
  194. })
  195. })
  196. }
  197. function setAdjustReason() {
  198. var reasons = _.map($('#adjustReason li.active'),function(el) {
  199. return $.trim($(el).text())
  200. });
  201. if(reasons && reasons.length) {
  202. $('#adjustReasonTextarea').val(reasons.join(','))
  203. $('#adjustReasonTextarea').focus()
  204. }
  205. }
  206. function initDiagnosisSuggestInput() {
  207. $('#diagnosisInput').bsSuggest({
  208. url: APIService.server+'doctor/prescriptionInfo/getIcd10Info?nameKey=',
  209. getDataMethod:'url',
  210. idField: "code",
  211. keyField: "name",
  212. effectiveFields: ['name'],
  213. ignorecase: true,
  214. fnProcessData: function(res) {
  215. return {
  216. value: res.data
  217. }
  218. }
  219. }).on('onSetSelectValue', function (e, v) {
  220. $(this).attr('data-code', v.id)
  221. })
  222. }
  223. function initDrugNameSuggestInput() {
  224. $("input.j-drugName").bsSuggest({
  225. url: APIService.server+'doctor/prescriptionInfo/findDictByName?name=',
  226. getDataMethod:'url',
  227. idField: "drugCode",
  228. keyField: "drugName",
  229. effectiveFields: ['drugName','drugFormat'],
  230. effectiveFieldsAlias:{drugName: "药品名称",drugFormat:"规格"},
  231. ignorecase: true,
  232. fnProcessData: function(res) {
  233. return {
  234. value: res.data
  235. }
  236. }
  237. }).on('onSetSelectValue', function (e, v) {
  238. var $box = $(this).closest('.ibox-content'),
  239. $single = $box.find(".j-medi-single"),
  240. $doseUnit = $box.find('.j-dose-unit'),
  241. $freq = $box.find(".j-selFreq"),
  242. $date = $box.find(".j-selDate");
  243. var json = v.json;
  244. $box.attr('data-json',JSON.stringify(json))
  245. $single.val(json.physicDose)
  246. $single.attr('data-code', json.physicDoseUnit)
  247. $doseUnit.text(json.physicDoseUnitName)
  248. $doseUnit.attr('data-unit', json.physicDoseUnit)
  249. $freq.val(json.drugRateName||"")
  250. $freq.attr('data-code', json.drugRate)
  251. $date.val(json.dayCount||"")
  252. })
  253. }
  254. function initFreqSuggestInput() {
  255. $("input.j-selFreq").bsSuggest({
  256. data: {value: medicineFreqData},
  257. idField: "code",
  258. keyField: "name",
  259. getDataMethod:'data',
  260. effectiveFields: ['name'],
  261. ignorecase: true
  262. }).on('onSetSelectValue', function (e, v) {
  263. $(this).attr('data-code', v.id)
  264. var $box = $(this).closest('.ibox-content')
  265. countMediSum($box)
  266. })
  267. }
  268. function initDaySuggestInput() {
  269. $("input.j-selDate").bsSuggest({
  270. data: {value: _.map(_.range(1, 31),function(v) {
  271. return {
  272. day: v
  273. }
  274. })},
  275. idField: "day",
  276. keyField: "day",
  277. getDataMethod:'data',
  278. effectiveFields: ['day'],
  279. ignorecase: true
  280. }).on('onSetSelectValue', function (e, v) {
  281. var $box = $(this).closest('.ibox-content')
  282. countMediSum($box)
  283. })
  284. }
  285. function initUsageSuggestInput() {
  286. $("input.j-method").bsSuggest({
  287. data: {value: usageDict},
  288. idField: "code",
  289. keyField: "name",
  290. getDataMethod:'data',
  291. effectiveFields: ['name'],
  292. ignorecase: true
  293. }).on('onSetSelectValue', function (e, v) {
  294. })
  295. }
  296. //计算药品总量
  297. function countMediSum($box){
  298. var single = $box.find(".j-medi-single").val(),
  299. freq = $box.find(".j-selFreq").attr('data-code'),
  300. date = $box.find(".j-selDate").val(),
  301. $sum = $box.find('.j-sumMedicine'),
  302. $info = JSON.parse($box.attr('data-json'));
  303. if(!single || !freq || !date) {
  304. return ;
  305. } else {
  306. single = single.trim();
  307. freq = freq.trim();
  308. date = date.trim();
  309. }
  310. if(single && freq && date){
  311. prescriptionDetailApis.drugToRate({data:{code: freq}}).then(function(res){
  312. if(res.status == 200){
  313. var rate = res.data.rate
  314. var num = single*rate*date
  315. var sum="";
  316. if($info.pakeSpec){
  317. //新增药品
  318. sum = Math.ceil(num/$info.minDose)
  319. $sum.text(sum+$info.drugNumUnitName)
  320. $sum.attr('data-num',sum)
  321. $sum.attr('data-name',$info.drugNumUnitName);
  322. $sum.attr('data-unit',$info.drugNumUnit);
  323. }else{
  324. var drugNumUnit = $info.drugNumUnit,
  325. physicDoseUnit = $info.physicDoseUnit;
  326. //请求药品信息
  327. var drugCode = $info.drugCode;
  328. prescriptionDetailApis.getPhysicInfo({data:{code: drugCode}}).then(function(res){
  329. if(res.status == 200){
  330. var msg = res.data[0]
  331. $box.attr('data-storage',msg.storageConditions);//冷藏
  332. $box.attr('data-class',msg.subjectClass);
  333. if(drugNumUnit == physicDoseUnit){
  334. sum = num
  335. }else{
  336. if(drugNumUnit == msg.pack_unit){
  337. sum = Math.ceil(num/msg.packSpec)
  338. }else{
  339. sum = Math.ceil(num/msg.minDose)
  340. }
  341. }
  342. $sum.text(sum+$info.drugNumUnitName)
  343. $sum.attr('data-num',sum)
  344. $sum.attr('data-name',$info.drugNumUnitName);
  345. $sum.attr('data-unit',$info.drugNumUnit);
  346. }
  347. })
  348. }
  349. }
  350. })
  351. }
  352. }
  353. })