YiBaoKeShiPiPei.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <template>
  2. <div class="layout_container">
  3. <header>
  4. <el-tag type="info">
  5. 医保科室匹配
  6. </el-tag>
  7. <el-select v-model="piPeiLeiXing" style="width: 120px" @change="queryYuanNeiKeShiChange">
  8. <el-option key="1" label="未匹配" value="1"></el-option>
  9. <el-option key="2" label="已匹配" value="2"></el-option>
  10. </el-select>
  11. <span>同步查询 &nbsp;</span>
  12. <el-select style="width: 120px" v-model="tongbu">
  13. <el-option key="false" label="禁用" :value="false"></el-option>
  14. <el-option key="true" label="启用" :value="true"></el-option>
  15. </el-select>&nbsp;
  16. <el-button @click="chongZhi" type="warning">重置</el-button>
  17. <el-button @click="keShiPiPeiClick" type="success">匹配</el-button>
  18. </header>
  19. <div class="layout_main layout_container layout-horizontal">
  20. <aside class="layout_el-table layout_flex_1-x">
  21. <el-tag type="info" effect="dark">本院数据</el-tag>
  22. <el-divider direction="vertical"></el-divider>
  23. <span>本院科室名称 &nbsp;&nbsp;</span>
  24. <el-input style="width: 200px" v-model="benYuanMingCheng"></el-input>
  25. <el-table :data="cptBenYuan"
  26. stripe
  27. highlight-current-row
  28. @row-click="benYuanRow"
  29. style="margin-top: 5px">
  30. <el-table-column label="本院编码">
  31. <template #default="scope">
  32. <el-radio :label="scope.row.code" :value="scope.row.code" v-model="benYuanRadio.code"></el-radio>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="本院名称" prop="name"></el-table-column>
  36. <el-table-column label="匹配医保编码" v-if="piPeiLeiXing == 2" prop="siCaty"></el-table-column>
  37. <el-table-column label="匹配医保名称" prop="siCatyName" v-if="piPeiLeiXing == 2"></el-table-column>
  38. <el-table-column label="删除匹配" v-if="piPeiLeiXing == 2">
  39. <template #default="scope">
  40. <el-popconfirm
  41. confirm-button-text="确认"
  42. cancel-button-text="取消"
  43. icon="Info"
  44. iconColor="red"
  45. title="是否删除该数据"
  46. @confirm="shanChuPiPei(scope.$index, scope.row)"
  47. >
  48. <template #reference>
  49. <el-button type="danger">删除</el-button>
  50. </template>
  51. </el-popconfirm>
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. </aside>
  56. <div class="layout_main layout_el-table">
  57. <el-tag type="info" effect="dark">医保数据</el-tag>
  58. <el-divider direction="vertical"></el-divider>
  59. <span>医保科室名称 &nbsp;&nbsp;</span>
  60. <el-input style="width: 200px" v-model="yiBaoMingCheng"></el-input>
  61. <el-table :data="cptYiBao" stripe highlight-current-row @row-click="yiBaoRow"
  62. style="margin-top: 5px">
  63. <el-table-column label="医保编码">
  64. <template #default="scope">
  65. <el-radio :label="scope.row.code" :value="scope.row.code" v-model="yiBaoRadio.code"></el-radio>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="医保名称" prop="name"></el-table-column>
  69. </el-table>
  70. </div>
  71. </div>
  72. </div>
  73. </template>
  74. <script setup>
  75. import {computed, onMounted, ref} from 'vue'
  76. import {getYiBaoKeShi, getBenYuanKeShi, piPeiKeShi} from '@/api/dictionary/yi-bao-ke-shi-pi-pei'
  77. import {ElMessage, ElMessageBox} from 'element-plus'
  78. const tableHeight = window.innerHeight - 75
  79. const benYuanMingCheng = ref('')
  80. const yiBaoMingCheng = ref('')
  81. const piPeiLeiXing = ref('1')
  82. ///////////////////////////// 查看匹配还是未匹配 /////////////////////////////////////////////////////
  83. const queryYuanNeiKeShiChange = () => {
  84. getBenYuanKeShi(piPeiLeiXing.value).then((res) => {
  85. benYuanKeShiTable.value = res
  86. })
  87. }
  88. //////////////////////// 处理表格数据 ///////////////////////////////////////////
  89. const benYuanKeShiTable = ref([])
  90. const yiBaoKeShiTable = ref([])
  91. onMounted(() => {
  92. getYiBaoKeShi().then((res) => {
  93. yiBaoKeShiTable.value = res
  94. })
  95. getBenYuanKeShi(piPeiLeiXing.value).then((res) => {
  96. benYuanKeShiTable.value = res
  97. })
  98. })
  99. const cptBenYuan = computed(() => {
  100. if (tongbu.value) {
  101. yiBaoMingCheng.value = benYuanMingCheng.value
  102. }
  103. return benYuanKeShiTable.value.filter((item) => {
  104. return item.name.indexOf(benYuanMingCheng.value) > -1
  105. })
  106. })
  107. const cptYiBao = computed(() => {
  108. return yiBaoKeShiTable.value.filter((item) => {
  109. return item.name.indexOf(yiBaoMingCheng.value) > -1
  110. })
  111. })
  112. // 重置 //
  113. const chongZhi = () => {
  114. benYuanMingCheng.value = ''
  115. yiBaoMingCheng.value = ''
  116. benYuanRadio.value = ''
  117. yiBaoRadio.value = ''
  118. }
  119. //////////////////////////////// 处理点击表格事件 ////////////////////////////////
  120. const benYuanRadio = ref({})
  121. const yiBaoRadio = ref({})
  122. const benYuanRow = (row) => {
  123. // 截取开头的两位字符串
  124. yiBaoMingCheng.value = row.name.substring(0, 2)
  125. benYuanRadio.value = row
  126. }
  127. const yiBaoRow = (row) => {
  128. yiBaoRadio.value = row
  129. }
  130. /////////////////////////////////////////// 开始匹配 /////////////////////////////////////////////////
  131. const keShiPiPeiClick = () => {
  132. if (!benYuanRadio.value || !yiBaoRadio.value) {
  133. ElMessage.error({
  134. message: '还有一项未选择',
  135. showClose: true,
  136. })
  137. } else {
  138. ElMessageBox.confirm(
  139. '<span>院内:【' +
  140. benYuanRadio.value.code +
  141. '】【' +
  142. benYuanRadio.value.name +
  143. '】</span></br><span>医保:【' +
  144. yiBaoRadio.value.code +
  145. '】【' +
  146. yiBaoRadio.value.name +
  147. '】</span>',
  148. '提示',
  149. {
  150. dangerouslyUseHTMLString: true,
  151. type: 'warning',
  152. }
  153. ).then(() => {
  154. piPeiKeShi(benYuanRadio.value.code, yiBaoRadio.value.code, yiBaoRadio.value.name, 1).then((res) => {
  155. for (let i = 0; i < benYuanKeShiTable.value.length; i++) {
  156. if (benYuanKeShiTable.value[i].code === benYuanRadio.value.code) {
  157. benYuanKeShiTable.value.splice(i, 1)
  158. }
  159. }
  160. chongZhi()
  161. })
  162. }).catch((e) => {})
  163. }
  164. }
  165. const shanChuPiPei = (index, row) => {
  166. piPeiKeShi(row.code, row.siCaty, row.siCaty,2).then((res) => {
  167. benYuanKeShiTable.value.splice(index, 1)
  168. })
  169. }
  170. ////////////////判断是否同步 /////////////////////////
  171. const tongbu = ref(false)
  172. </script>
  173. <style>
  174. .match-title {
  175. padding: 5px 10px;
  176. background-color: lightslategray;
  177. font-size: 18px;
  178. font-weight: bold;
  179. color: white;
  180. border-radius: 3px;
  181. margin-right: 15px;
  182. }
  183. </style>