AllergenEntry.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <el-dialog v-model="dialog" title="患者过敏源信息" @closed="emit('close')">
  3. <el-radio-group v-model="allergenType" @change="typeChangeClear()">
  4. <el-radio-button :label="0">过敏源</el-radio-button>
  5. <el-radio-button :label="1">本院药品</el-radio-button>
  6. </el-radio-group>
  7. <xc-combo-grid v-model="newAllergen.name"
  8. @rowClick="rowClick"
  9. row-key="code"
  10. :current-key="newAllergen.code"
  11. :query-data-func="methodAllergen">
  12. </xc-combo-grid>
  13. <!-- <el-button icon="Plus" type="primary" @click="clickNewPatientAllergens">添加</el-button>-->
  14. <el-table :data="patientAllergenData.data" :height="windowSize.h - 400">
  15. <el-table-column label="编码" prop="allergenCode"></el-table-column>
  16. <el-table-column label="名称" prop="allergenName"></el-table-column>
  17. <el-table-column label="来源" prop="type">
  18. <template #default="scope">
  19. <span v-if="scope.row.type === 0"> 过敏源 </span>
  20. <span v-else> 本院药品 </span>
  21. </template>
  22. </el-table-column>
  23. <el-table-column>
  24. <template #default="scope">
  25. <el-popconfirm
  26. cancel-button-text="取消"
  27. confirm-button-text="确定"
  28. icon="Info"
  29. icon-color="red"
  30. title="确定要删除吗?"
  31. @confirm="clickRemoveAllergens(scope.$index, scope.row.id)">
  32. <template #reference>
  33. <el-button icon="Delete" type="danger">删除</el-button>
  34. </template>
  35. </el-popconfirm>
  36. </template>
  37. </el-table-column>
  38. </el-table>
  39. </el-dialog>
  40. </template>
  41. <script name="AllergenEntry" setup>
  42. import {stringNotBlank} from '@/utils/blank-utils'
  43. import {
  44. getAllergens,
  45. getDrugInfo,
  46. getPatientAllergens,
  47. newPatientAllergens,
  48. removePatientAllergens
  49. } from '@/api/public-api'
  50. import store from '@/store'
  51. import {ElMessage} from 'element-plus'
  52. import XcComboGrid from "@/components/xiao-chan/combo-grid/XcComboGrid.vue";
  53. const props = defineProps({
  54. patNo: '',
  55. })
  56. const emit = defineEmits(['close'])
  57. const windowSize = computed(() => {
  58. return store.state.app.windowSize
  59. })
  60. let newAllergen = $ref({
  61. code: '',
  62. name: '',
  63. })
  64. let allergenData = $ref([])
  65. let allergenType = $ref(0)
  66. const dialog = ref(true)
  67. let patNo = $ref('')
  68. let patientAllergenData = $ref({
  69. data: [],
  70. currentPage: 1,
  71. sizePage: 10,
  72. total: 0,
  73. })
  74. const methodAllergen = (val) => {
  75. if (val.length < 1) {
  76. return
  77. }
  78. if (allergenType === 0) {
  79. return getAllergens(val)
  80. } else {
  81. return getDrugInfo(val)
  82. }
  83. }
  84. const rowClick = (value) => {
  85. newAllergen.code = value.code
  86. newAllergen.name = value.name
  87. clickNewPatientAllergens()
  88. }
  89. /**
  90. *
  91. * @returns {IMessageHandle} 错误信息
  92. */
  93. const clickNewPatientAllergens = () => {
  94. if (newAllergen.code === '') {
  95. return ElMessage.error('请先选择数据')
  96. }
  97. if (typeof patientAllergenData.data.find((item) => item.allergenCode === newAllergen.code) !== 'undefined') {
  98. return ElMessage.error('无法录入相同的过敏源')
  99. }
  100. newPatientAllergens(patNo, newAllergen.code, allergenType).then((res) => {
  101. patientAllergenData.data.push({
  102. id: res,
  103. allergenCode: newAllergen.code,
  104. allergenName: newAllergen.name,
  105. type: allergenType,
  106. })
  107. patientAllergenData.total = patientAllergenData.data.length
  108. })
  109. }
  110. /**
  111. * 删除数据
  112. * @param index 当前下标
  113. * @param id
  114. */
  115. const clickRemoveAllergens = (index, id) => {
  116. removePatientAllergens(id).then((res) => {
  117. patientAllergenData.data.splice(index, 1)
  118. })
  119. }
  120. const typeChangeClear = () => {
  121. newAllergen.code = ''
  122. newAllergen.name = ''
  123. allergenData = []
  124. }
  125. onMounted(() => {
  126. patNo = props.patNo
  127. if (stringNotBlank(patNo)) {
  128. getPatientAllergens(patNo).then((res) => {
  129. patientAllergenData.data = res
  130. patientAllergenData.total = patientAllergenData.data.length
  131. })
  132. }
  133. })
  134. </script>
  135. <style scoped></style>