InfectiousDisease.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <template>
  2. <div class="layout_container">
  3. <header>
  4. <el-date-picker
  5. v-model="dateRange"
  6. type="daterange"
  7. range-separator="至"
  8. start-placeholder="开始日期"
  9. end-placeholder="结束日期"
  10. :shortcuts="shortcuts"
  11. style="width: 220px"
  12. ></el-date-picker>
  13. <el-select style="width: 160px" v-model="dept" filterable remote placeholder="科室" remote-show-suffix clearable
  14. :loading="loadingDept"
  15. :remote-method="selectDeptMultiple">
  16. <el-option v-for="item in deptOptions" :key="item.value" :label="item.label" :value="item.value"/>
  17. </el-select>
  18. <el-select style="width: 160px" v-model="doctor" filterable remote placeholder="医生" remote-show-suffix clearable
  19. :loading="loadingDoctor" :remote-method="selectDoctorMultiple">
  20. <el-option v-for="item in doctorOptions" :key="item.value" :label="item.label" :value="item.value"/>
  21. </el-select>
  22. <el-input v-model="admNo" style="width: 180px;" placeholder="请输入住院/门诊号" clearable></el-input>
  23. <el-button type="primary" icon="Search" @click="query" style="margin-left: 5px">查询</el-button>
  24. <el-button type="primary" icon="Download" @click="exportData" style="margin-left: 5px">导出</el-button>
  25. </header>
  26. <div class="layout_main">
  27. <xc-table :data="returnData" localPaging>
  28. <el-table-column type="index" label="序号" align="center"></el-table-column>
  29. <template v-for="col in returnData.tableDisplays">
  30. <el-table-column v-if="col.prop.endsWith('-t')" :prop="col.prop" :label="col.label" :width="col.width"
  31. :align="col.align" show-overflow-tooltip>
  32. <template v-for="cell in returnData.chirdData">
  33. <el-table-column v-if="cell.pid === col.id" :prop="cell.prop" :label="cell.label"
  34. :width="cell.width" :align="cell.align" show-overflow-tooltip>
  35. </el-table-column>
  36. </template>
  37. </el-table-column>
  38. <el-table-column v-else :prop="col.prop" :label="col.label" :width="col.width" :align="col.align"
  39. show-overflow-tooltip>
  40. </el-table-column>
  41. </template>
  42. </xc-table>
  43. </div>
  44. </div>
  45. </template>
  46. <script setup name="InfectiousDisease">
  47. import {reactive, ref} from 'vue'
  48. import {shortcuts, clockinShortcuts} from '@/data/shortcuts'
  49. import {formatDate, getDateRangeFormatDate} from '@/utils/date'
  50. import {ElMessage} from 'element-plus'
  51. import {selectReportPortalMenu, exportReportPortalData} from '@/api/reports/high-report'
  52. import {selectAllDept, selectAllDoctor} from '@/api/medical-insurance/si-yb-util'
  53. import XcTable from '@/components/xiao-chan/xc-table/XcTable.vue'
  54. const start = formatDate(clockinShortcuts[1].value[0]);
  55. const end = formatDate(clockinShortcuts[1].value[1]);
  56. const dateRange = ref([]);
  57. const queryTerm = reactive({
  58. startTime: "",
  59. endTime: "",
  60. dept: "",
  61. doctor: "",
  62. zyh: "",
  63. reportId: "zy_crbtj",
  64. menuId: "201",
  65. type: "1",
  66. });
  67. const dept = ref('')
  68. const doctor = ref('')
  69. const admNo = ref('')
  70. onMounted(() => {
  71. queryTerm.startTime = start + '00:00:00';
  72. queryTerm.endTime = end + " 23:59:59";
  73. dateRange.value = [start, end];
  74. });
  75. const deptOptions = ref([])
  76. const doctorOptions = ref([])
  77. const loadingDept = ref(false)
  78. const loadingDoctor = ref(false)
  79. const selectDeptMultiple = (ks) => {
  80. if (ks) {
  81. loadingDept.value = true
  82. const param = {
  83. str: ks,
  84. }
  85. selectAllDept(param).then((res) => {
  86. loadingDept.value = false
  87. deptOptions.value = res
  88. })
  89. } else {
  90. deptOptions.value = []
  91. }
  92. }
  93. const selectDoctorMultiple = (ys) => {
  94. if (ys) {
  95. loadingDoctor.value = true
  96. let d = dept.value
  97. const paramF = {
  98. str: ys,
  99. dept: d,
  100. }
  101. selectAllDoctor(paramF).then((res) => {
  102. loadingDoctor.value = false
  103. doctorOptions.value = res
  104. })
  105. } else {
  106. doctorOptions.value = []
  107. }
  108. }
  109. const returnData = ref({
  110. currentPage: 1,
  111. pageSize: 30,
  112. total: 0,
  113. data: []
  114. });
  115. const query = async () => {
  116. if (dateRange.value) {
  117. let dateS = getDateRangeFormatDate(dateRange.value);
  118. queryTerm.startTime = dateS.startTime;
  119. queryTerm.endTime = dateS.endTime;
  120. } else {
  121. queryTerm.startTime = start;
  122. queryTerm.endTime = end;
  123. ElMessage({
  124. type: "info",
  125. message: "默认查询本月的数据",
  126. duration: 2500,
  127. showClose: true,
  128. });
  129. }
  130. if(dept.value){
  131. queryTerm.dept = dept.value;
  132. } else {
  133. queryTerm.dept = ''
  134. }
  135. if(doctor.value){
  136. queryTerm.doctor = doctor.value;
  137. } else {
  138. queryTerm.doctor = ''
  139. }
  140. queryTerm.zyh = admNo.value
  141. await selectReportPortalMenu(queryTerm)
  142. .then((res) => {
  143. let id
  144. returnData.value.tableDisplays = []
  145. returnData.value.chirdData = []
  146. res.tableDisplays.forEach(item => {
  147. if (item.prop.endsWith('-t')) {
  148. id = item.id
  149. returnData.value.tableDisplays.push(item)
  150. } else {
  151. if (item.pid === id) {
  152. returnData.value.chirdData.push(item)
  153. } else {
  154. returnData.value.tableDisplays.push(item)
  155. }
  156. }
  157. })
  158. returnData.value.data = res.dataList
  159. returnData.value.total = returnData.value.data.length
  160. });
  161. };
  162. const exportData = () => {
  163. if (returnData.value.data.length <= 0) {
  164. ElMessage({
  165. message: '没有可以导出的数据!',
  166. type: 'warning',
  167. duration: 2500,
  168. showClose: true,
  169. })
  170. }
  171. if(dept.value){
  172. queryTerm.dept = dept.value;
  173. }
  174. if(doctor.value){
  175. queryTerm.doctor = doctor.value;
  176. }
  177. // 导出excel表格标题
  178. queryTerm.exportName = '传染病统计';
  179. exportReportPortalData(queryTerm)
  180. }
  181. </script>