血透系统PC前端

AssessmentAfterDislysis.vue 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <template>
  2. <div class="assessment-after-box">
  3. <el-dialog
  4. title="透后评估"
  5. :visible.sync="isVisibility"
  6. width="70%"
  7. >
  8. <el-form ref="form" :model="form" label-width="130px" >
  9. <!-- <el-row :gutter="20"> -->
  10. <el-row :gutter="20">
  11. <el-col :span="8">
  12. <el-form-item label="透后体重(kg): ">
  13. <el-input v-model="form.weight_after"></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="8">
  17. <el-form-item label="体重减少(kg): ">
  18. <el-input v-model="form.weight_loss"></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="8">
  22. <el-form-item label="体温(℃): ">
  23. <el-input v-model="form.temperature"></el-input>
  24. </el-form-item>
  25. </el-col>
  26. </el-row>
  27. <el-row :gutter="20">
  28. <el-col :span="8">
  29. <el-form-item label="收缩压(mmhg): ">
  30. <el-input v-model="form.systolic_blood_pressure"></el-input>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="8">
  34. <el-form-item label="舒张压(mmhg): ">
  35. <el-input v-model="form.diastolic_blood_pressure"></el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="8">
  39. <el-form-item label="脉率(次/分): ">
  40. <el-input v-model="form.pulse_frequency"></el-input>
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <el-row :gutter="20">
  45. <el-col :span="8">
  46. <el-form-item label="实际超滤量(L): ">
  47. <el-input v-model="form.actual_ultrafiltration"></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="8">
  51. <el-form-item label="实际置换量(L): ">
  52. <el-input v-model="form.actual_displacement"></el-input>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="8">
  56. <el-form-item label="实际治疗时长(时):">
  57. <!-- <el-input v-model="form.actual_treatment_hour"></el-input> -->
  58. <el-time-picker
  59. v-model="actualTreatmentHourShow"
  60. :picker-options="{
  61. selectableRange: '00:01:00 - 23:59:00'
  62. }"
  63. placeholder="透析时长"
  64. style="width:100%;"
  65. value-format="H:m"
  66. format="H:m"
  67. @change="selectActualTreatmentHour"
  68. >
  69. </el-time-picker>
  70. </el-form-item>
  71. </el-col>
  72. </el-row>
  73. <el-row :gutter="20">
  74. <el-col :span="8">
  75. <el-form-item label="凝血: ">
  76. <!-- <el-select v-model="form.cruor" >
  77. <el-option v-for="item in cruorOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
  78. </el-select>
  79. -->
  80. <el-input v-model="form.cruor" readonly @focus="showDialog('1')"></el-input>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="8">
  84. <el-form-item label="透后症状: ">
  85. <el-input v-model="form.symptom_after_dialysis" readonly @focus="showDialog('2')"></el-input>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="8">
  89. <el-form-item label="透析中入量: ">
  90. <el-input v-model="form.dialysis_intakes"></el-input>
  91. </el-form-item>
  92. </el-col>
  93. </el-row>
  94. <el-row :gutter="20">
  95. <el-col :span="8">
  96. <el-form-item label="内瘘: ">
  97. <el-input v-model="form.internal_fistula" readonly @focus="showDialog('3')"></el-input>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :span="8">
  101. <el-form-item label="血管通路部位: ">
  102. <el-select v-model="form.blood_access_part_id" >
  103. <el-option v-for="item in vascularAccessOptions" :label="item.name" :value="item.id" :key="item.id"></el-option>
  104. </el-select>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="8">
  108. <el-form-item label="血管通路操作: ">
  109. <el-select v-model="form.blood_access_part_opera_id" >
  110. <el-option v-for="item in vascularAccessDescOptions" :label="item.name" :value="item.id" :key="item.id"></el-option>
  111. </el-select>
  112. </el-form-item>
  113. </el-col>
  114. </el-row>
  115. <el-row :gutter="20">
  116. <el-col :span="8">
  117. <el-form-item label="导管: ">
  118. <el-input v-model="form.catheter" readonly @focus="showDialog('4')"></el-input>
  119. </el-form-item>
  120. </el-col>
  121. <el-col :span="8">
  122. <el-form-item label="并发症: ">
  123. <el-input v-model="form.complication" readonly @focus="showDialog('5')"></el-input>
  124. </el-form-item>
  125. </el-col>
  126. <el-col :span="8">
  127. <el-form-item label="拔针后穿刺点渗血: ">
  128. <el-radio-group v-model="form.puncture_point_oozing_blood">
  129. <el-radio :label="1">有</el-radio>
  130. <el-radio :label="2">无</el-radio>
  131. </el-radio-group>
  132. </el-form-item>
  133. </el-col>
  134. </el-row>
  135. <el-row :gutter="20">
  136. <el-col :span="8">
  137. <el-form-item label="穿刺处血肿: ">
  138. <el-radio-group v-model="form.puncture_point_haematoma">
  139. <el-radio :label="1">有</el-radio>
  140. <el-radio :label="2">无</el-radio>
  141. </el-radio-group>
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="8">
  145. <el-form-item label="压迫后内瘘震颤: ">
  146. <el-select v-model="form.internal_fistula_tremor_ac" >
  147. <el-option v-for="item in internalFistulaTremorAcOptions" :label="item.name" :value="item.id" :key="item.id"></el-option>
  148. </el-select>
  149. </el-form-item>
  150. </el-col>
  151. <el-col :span="8">
  152. <el-form-item label="患者去向: ">
  153. <el-select v-model="form.patient_gose" >
  154. <el-option v-for="item in patientGoseOptions" :label="item.name" :value="item.id" :key="item.id"></el-option>
  155. </el-select>
  156. </el-form-item>
  157. </el-col>
  158. </el-row>
  159. <el-row :gutter="20" v-show="form.patient_gose==3">
  160. <el-col :span="24">
  161. <el-form-item label="科室: ">
  162. <el-input v-model="form.inpatient_department" :rows="5"></el-input>
  163. </el-form-item>
  164. </el-col>
  165. </el-row>
  166. <el-row :gutter="20" v-show="form.patient_gose==3">
  167. <el-col :span="24">
  168. <el-form-item label="交待观察内容: ">
  169. <el-input placeholder="交待病房护士/患者/陪人观察内容" v-model="form.observation_content" :rows="5" readonly @focus="showDialog('6')"></el-input>
  170. </el-form-item>
  171. </el-col>
  172. </el-row>
  173. <el-row :gutter="20" v-show="form.patient_gose==3">
  174. <el-col :span="24">
  175. <el-form-item label="其他观察内容: " >
  176. <el-input v-model="form.observation_content_other" :rows="5" ></el-input>
  177. </el-form-item>
  178. </el-col>
  179. </el-row>
  180. <el-row :gutter="20">
  181. <el-col :span="24">
  182. <el-form-item label="备注: ">
  183. <el-input type="textarea" v-model="form.remark" :rows="5"></el-input>
  184. </el-form-item>
  185. </el-col>
  186. </el-row>
  187. <!-- </el-row> -->
  188. </el-form>
  189. <span slot="footer" class="dialog-footer" >
  190. <el-button @click="hide">取 消</el-button>
  191. <el-button type="primary" @click="submitForm" :loading="loading">确 定</el-button>
  192. </span>
  193. </el-dialog>
  194. <multi-select-box
  195. :propsForm="InnerDialogProps"
  196. v-on:dialog-comfirm="DialogComfirm"
  197. v-on:dialog-cancle="DialogCancle"
  198. ></multi-select-box>
  199. </div>
  200. </template>
  201. <script>
  202. import { getDataConfig } from "@/utils/data";
  203. import MultiSelectBox from "./MultiSelectBox";
  204. import {postAssessmentAfterDislysis} from "@/api/dialysis"
  205. import {uParseTime} from "@/utils/tools";
  206. export default {
  207. name: "AssessmentAfterDislysis",
  208. props: {
  209. assessment_after_dislysis : { // 透后评估
  210. type: Object,
  211. default: () => {
  212. return {id: 0}
  213. }
  214. },
  215. dialysis_order : { // 透析记录
  216. type: Object,
  217. default: () => {
  218. return {id: 0}
  219. }
  220. },
  221. patient : { // 患者信息
  222. type: Object,
  223. default: () => {
  224. return {id: 0}
  225. }
  226. },
  227. },
  228. data() {
  229. return {
  230. loading:false,
  231. record_date:'',
  232. isVisibility:false,
  233. actualTreatmentHourShow: new Date(2018, 1, 1, 3, 0),
  234. cruorOptions: [],
  235. symptomsOptions:[],
  236. internalFistulaOptions:[],
  237. vascularAccessOptions:[],
  238. vascularAccessDescOptions:[],
  239. catheterOptions:[],
  240. complicationOptions:[],
  241. internalFistulaTremorAcOptions:[],
  242. patientGoseOptions:[],
  243. observationContentOptions:[],
  244. isVisibiltyForCruorDialog: false,
  245. dialogCruorTitle:'凝血',
  246. InnerDialogProps: {
  247. values: [],
  248. visibility: false,
  249. isShowTextArea: true,
  250. customContent: '',
  251. titles: '',
  252. type:'', //不同弹框类型,用来匹配数据
  253. },
  254. form: {
  255. weight_after:'',
  256. weight_loss:'',
  257. temperature:'',
  258. systolic_blood_pressure:'',
  259. diastolic_blood_pressure:'',
  260. pulse_frequency:'',
  261. actual_ultrafiltration:'',
  262. actual_displacement:'',
  263. actual_treatment_hour:'',
  264. actual_treatment_minute:'',
  265. cruor:'',
  266. symptom_after_dialysis:'',
  267. dialysis_intakes:'',
  268. internal_fistula:'',
  269. blood_access_part_id:'',
  270. blood_access_part_opera_id:'',
  271. catheter:'',
  272. complication:'',
  273. puncture_point_oozing_blood:2,
  274. puncture_point_haematoma:2,
  275. internal_fistula_tremor_ac:'',
  276. patient_gose:'',
  277. inpatient_department:'',
  278. observation_content:'',
  279. observation_content_other:'',
  280. remark:'',
  281. dialysis_order_id:0,
  282. }
  283. };
  284. },
  285. watch: {
  286. "assessment_after_dislysis.id":function () {
  287. if(this.assessment_after_dislysis.id>0) {
  288. for(var index in this.form) {
  289. this.form[index] = this.assessment_after_dislysis[index];
  290. }
  291. if(this.assessment_after_dislysis['blood_access_part_id'] == 0){
  292. this.form['blood_access_part_id'] = ''
  293. }
  294. if(this.assessment_after_dislysis['blood_access_part_opera_id'] == 0){
  295. this.form['blood_access_part_opera_id'] = ''
  296. }
  297. if(this.assessment_after_dislysis['internal_fistula_tremor_ac'] == 0){
  298. this.form['internal_fistula_tremor_ac'] = ''
  299. }
  300. if(this.assessment_after_dislysis['patient_gose'] == 0){
  301. this.form['patient_gose'] = ''
  302. }
  303. if(this.assessment_after_dislysis['weight_after'] == 0){
  304. this.form['weight_after'] = ''
  305. }
  306. if(this.assessment_after_dislysis['weight_loss'] == 0){
  307. this.form['weight_loss'] = ''
  308. }
  309. if(this.assessment_after_dislysis['temperature'] == 0){
  310. this.form['temperature'] = ''
  311. }
  312. if(this.assessment_after_dislysis['systolic_blood_pressure'] == 0){
  313. this.form['systolic_blood_pressure'] = ''
  314. }
  315. if(this.assessment_after_dislysis['diastolic_blood_pressure'] == 0){
  316. this.form['diastolic_blood_pressure'] = ''
  317. }
  318. if(this.assessment_after_dislysis['pulse_frequency'] == 0){
  319. this.form['pulse_frequency'] = ''
  320. }
  321. if(this.assessment_after_dislysis['actual_ultrafiltration'] == 0){
  322. this.form['actual_ultrafiltration'] = ''
  323. }
  324. if(this.assessment_after_dislysis['actual_displacement'] == 0){
  325. this.form['actual_displacement'] = ''
  326. }
  327. if(this.assessment_after_dislysis['dialysis_intakes'] == 0){
  328. this.form['dialysis_intakes'] = ''
  329. }
  330. this.actualTreatmentHourShow = new Date(2018, 1, 1, this.assessment_after_dislysis['actual_treatment_hour'], this.assessment_after_dislysis['actual_treatment_minute'])
  331. }
  332. },
  333. "dialysis_order.id":function () {
  334. this.form["dialysis_order_id"] = this.assessment_after_dislysis["dialysis_order_id"];
  335. },
  336. "form.patient_gose":function(){
  337. if(this.form.patient_gose.patient_gose != 3) {
  338. this.form.inpatient_department = '';
  339. this.form.observation_content = '';
  340. this.form.observation_content_other = '';
  341. }
  342. }
  343. },
  344. methods: {
  345. submitForm(){
  346. this.loading = true;
  347. let ParamsQuery = {};
  348. if (!(this.patient.id > 0)) {
  349. this.$message.error("没有选择患者");
  350. this.loading = false;
  351. return false;
  352. }
  353. if (this.record_date.length != 10) {
  354. this.$message.error("无效的日期");
  355. this.loading = false;
  356. return false;
  357. }
  358. ParamsQuery["patient"] = this.patient.id;
  359. ParamsQuery["record_date"] = this.record_date;
  360. let data = {};
  361. data["weight_after"] = this.form.weight_after?parseFloat(this.form.weight_after):0;
  362. data["weight_loss"] = this.form.weight_loss?parseFloat(this.form.weight_loss):0;
  363. data["temperature"] = this.form.temperature?parseFloat(this.form.temperature):0;
  364. data["systolic_blood_pressure"] = this.form.systolic_blood_pressure?parseFloat(this.form.systolic_blood_pressure):0;
  365. data["diastolic_blood_pressure"] = this.form.diastolic_blood_pressure?parseFloat(this.form.diastolic_blood_pressure):0;
  366. data["pulse_frequency"] = this.form.pulse_frequency?parseFloat(this.form.pulse_frequency):0;
  367. data["actual_ultrafiltration"] = this.form.actual_ultrafiltration?parseFloat(this.form.actual_ultrafiltration):0;
  368. data["actual_displacement"] = this.form.actual_displacement?parseFloat(this.form.actual_displacement):0;
  369. data["actual_treatment_hour"] = this.form.actual_treatment_hour?parseFloat(this.form.actual_treatment_hour):0;
  370. data["actual_treatment_minute"] = this.form.actual_treatment_minute?parseFloat(this.form.actual_treatment_minute):0;
  371. data["cruor"] = this.form.cruor;
  372. data["symptom_after_dialysis"] = this.form.symptom_after_dialysis;
  373. data["dialysis_intakes"] = this.form.dialysis_intakes?parseFloat(this.form.dialysis_intakes):0;
  374. data["internal_fistula"] = this.form.internal_fistula;
  375. data["blood_access_part_id"] = this.form.blood_access_part_id?parseFloat(this.form.blood_access_part_id):0;
  376. data["blood_access_part_opera_id"] = this.form.blood_access_part_opera_id?parseFloat(this.form.blood_access_part_opera_id):0;
  377. data["catheter"] = this.form.catheter;
  378. data["complication"] = this.form.complication;
  379. data["puncture_point_oozing_blood"] = this.form.puncture_point_oozing_blood?parseFloat(this.form.puncture_point_oozing_blood):0;
  380. data["puncture_point_haematoma"] = this.form.puncture_point_haematoma?parseFloat(this.form.puncture_point_haematoma):0;
  381. data["internal_fistula_tremor_ac"] = this.form.internal_fistula_tremor_ac?parseFloat(this.form.internal_fistula_tremor_ac):0;
  382. data["patient_gose"] = this.form.patient_gose?parseFloat(this.form.patient_gose):0;
  383. data["inpatient_department"] = this.form.inpatient_department;
  384. data["observation_content"] = this.form.observation_content;
  385. data["observation_content_other"] = this.form.observation_content_other;
  386. data["remark"] = this.form.remark;
  387. data["dialysis_order_id"] = this.form.dialysis_order_id?parseFloat(this.form.dialysis_order_id):0;
  388. postAssessmentAfterDislysis(ParamsQuery, data).then(response => {
  389. this.loading = false;
  390. if (response.data.state == 0) {
  391. this.$message.error(response.data.msg);
  392. return false;
  393. } else {
  394. this.$notify({
  395. title: "成功",
  396. message: "提交成功",
  397. type: "success",
  398. duration: 2000
  399. });
  400. var assement = response.data.data.AssessmentAfterDislysis;
  401. var assessment_after_dislysis = this.assessment_after_dislysis;
  402. for( var index in assement) {
  403. // assessment_after_dislysis[index] = assement[index];
  404. this.$set(assessment_after_dislysis, index, assement[index])
  405. }
  406. this.hide();
  407. }
  408. }).catch(v=>{
  409. this.loading = false;
  410. });
  411. },
  412. showDialog:function(val){
  413. this.InnerDialogProps.visibility = true
  414. switch(val) {
  415. case '1':
  416. this.InnerDialogProps.values = this.cruorOptions
  417. this.InnerDialogProps.titles = '凝血'
  418. this.InnerDialogProps.type = 'cruor'
  419. this.InnerDialogProps.selected = this.form.cruor
  420. this.InnerDialogProps.isShowTextArea = true
  421. break
  422. case '2':
  423. this.InnerDialogProps.values = this.symptomsOptions
  424. this.InnerDialogProps.titles = '透后症状'
  425. this.InnerDialogProps.type = 'symptom_after_dialysis'
  426. this.InnerDialogProps.selected = this.form.symptom_after_dialysis
  427. this.InnerDialogProps.isShowTextArea = true
  428. break
  429. case '3':
  430. this.InnerDialogProps.values = this.internalFistulaOptions
  431. this.InnerDialogProps.titles = '内瘘'
  432. this.InnerDialogProps.type = 'internal_fistula'
  433. this.InnerDialogProps.selected = this.form.internal_fistula
  434. this.InnerDialogProps.isShowTextArea = true
  435. break
  436. case '4':
  437. this.InnerDialogProps.values = this.catheterOptions
  438. this.InnerDialogProps.titles = '导管'
  439. this.InnerDialogProps.type = 'catheter'
  440. this.InnerDialogProps.selected = this.form.catheter
  441. this.InnerDialogProps.isShowTextArea = true
  442. break
  443. case '5':
  444. this.InnerDialogProps.values = this.complicationOptions
  445. this.InnerDialogProps.titles = '并发症'
  446. this.InnerDialogProps.type = 'complication'
  447. this.InnerDialogProps.selected = this.form.complication
  448. this.InnerDialogProps.isShowTextArea = true
  449. break
  450. case '6':
  451. this.InnerDialogProps.values = this.observationContentOptions
  452. this.InnerDialogProps.titles = '交待病房护士/患者/陪人观察内容'
  453. this.InnerDialogProps.type = 'observation_content'
  454. this.InnerDialogProps.selected = this.form.observation_content
  455. this.InnerDialogProps.isShowTextArea = false
  456. break
  457. }
  458. },
  459. selectActualTreatmentHour(val) {
  460. var valTime = val.split(":");
  461. this.form.actual_treatment_hour = valTime[0];
  462. this.form.actual_treatment_minute = valTime[1];
  463. },
  464. DialogComfirm:function (val) {
  465. this.InnerDialogProps.visibility = false
  466. switch (val.type) {
  467. case 'cruor':
  468. this.form.cruor = val.value.join(',');
  469. break;
  470. case 'symptom_after_dialysis':
  471. this.form.symptom_after_dialysis = val.value.join(',');
  472. break;
  473. case 'internal_fistula':
  474. this.form.internal_fistula = val.value.join(',');
  475. break;
  476. case 'catheter':
  477. this.form.catheter = val.value.join(',');
  478. break;
  479. case 'complication':
  480. this.form.complication = val.value.join(',');
  481. break;
  482. case 'observation_content':
  483. this.form.observation_content = val.value.join(',');
  484. break;
  485. default:
  486. break;
  487. }
  488. console.log(val);
  489. },
  490. DialogCancle: function (val) {
  491. this.InnerDialogProps.visibility = false
  492. },
  493. show() {
  494. this.isVisibility = true;
  495. },
  496. hide() {
  497. this.isVisibility = false;
  498. }
  499. },
  500. created() {
  501. this.cruorOptions = getDataConfig("hemodialysis", "cruor");
  502. this.symptomsOptions = getDataConfig('hemodialysis','symptoms');
  503. this.internalFistulaOptions = getDataConfig('hemodialysis','internal_fistula')
  504. this.vascularAccessOptions = getDataConfig('hemodialysis','vascular_access')
  505. this.vascularAccessDescOptions = getDataConfig('hemodialysis','vascular_access_desc')
  506. this.catheterOptions = getDataConfig('hemodialysis','catheter')
  507. this.complicationOptions = getDataConfig('hemodialysis','complication')
  508. this.internalFistulaTremorAcOptions = this.$store.getters.internal_fistula_tremor_ac;
  509. this.patientGoseOptions = this.$store.getters.patient_gose;
  510. this.observationContentOptions = this.$store.getters.observation_content;
  511. console.log(this.patient)
  512. var date = this.$route.query && this.$route.query.date;
  513. this.record_date = uParseTime(date, '{y}-{m}-{d}');
  514. },
  515. components: {
  516. MultiSelectBox
  517. }
  518. };
  519. </script>
  520. <style scoped>
  521. </style>