index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <el-table
  3. :data="tableData"
  4. class="mytTable"
  5. style="width: 100%"
  6. :span-method="arraySpanMethod"
  7. >
  8. <el-table-column
  9. type="index"
  10. label="排名"
  11. width="80"
  12. fixed
  13. header-row-style="background-color: #F5F7FA;"
  14. >
  15. <template #default="scope">
  16. <div
  17. v-if="scope.$index === 0"
  18. class="text-center text-sm font-extrabold text-[#000000]"
  19. >
  20. 平均分
  21. </div>
  22. <div v-if="scope.$index > 3" class="diamond">
  23. {{ scope.$index + 1 }}
  24. </div>
  25. <div v-if="scope.$index > 0" class="text-center">
  26. <img :src="RANK_IMG[scope.$index - 1]" alt="" />
  27. </div>
  28. </template>
  29. </el-table-column>
  30. <el-table-column prop="date" label="科室" fixed width="150" />
  31. <el-table-column prop="date" label="姓名" fixed width="100" />
  32. <el-table-column label="数量(5%)">
  33. <el-table-column prop="state" label="出院人次(5%)" width="140" sortable />
  34. <el-table-column prop="city" label="手术人次(15%)" width="140" />
  35. </el-table-column>
  36. <el-table-column
  37. prop="date"
  38. label="总分"
  39. width="100"
  40. sortable
  41. :header-cell-style="{ backgroundColor: '#CCEEE2' }"
  42. />
  43. <el-table-column label="效率(5%)">
  44. <el-table-column prop="state" label="平均住院日(5%)" width="150" />
  45. <el-table-column prop="city" label="药品耗材比(5%)" width="150" />
  46. </el-table-column>
  47. <el-table-column prop="date" label="总分" width="100" />
  48. <el-table-column label="质量(5%)">
  49. <el-table-column prop="state" label="手术并发症发生率" width="150" />
  50. </el-table-column>
  51. <el-table-column prop="date" label="总分" width="100" />
  52. <el-table-column label="难度(5%)">
  53. <el-table-column prop="state" label="微创手术人次(5%)" width="150" />
  54. <el-table-column prop="state" label="CMT值(5%)" width="100" />
  55. <el-table-column prop="state" label="RW>2占比(5%)" width="130" />
  56. <el-table-column prop="state" label="主刀四类手术(5%)" width="150" />
  57. <el-table-column prop="state" label="主刀微创手术(5%)" width="150" />
  58. </el-table-column>
  59. <el-table-column prop="date" label="总分" width="100" />
  60. <el-table-column label="强度(5%)">
  61. <el-table-column prop="state" label="夜班数(10%)" width="150" />
  62. </el-table-column>
  63. <el-table-column prop="date" label="总分" width="100" />
  64. <el-table-column label="教学(5%)">
  65. <el-table-column
  66. prop="state"
  67. label="手术一助指导下医生(5%)"
  68. width="200"
  69. />
  70. <el-table-column prop="date" label="教学积分(5%)" width="100" />
  71. </el-table-column>
  72. <el-table-column prop="date" label="总分" width="100" />
  73. <el-table-column label="科研(5%)">
  74. <el-table-column prop="state" label="科研积分(10%)" width="150" />
  75. </el-table-column>
  76. <el-table-column prop="date" label="总分" width="100" />
  77. <el-table-column prop="date" label="总得分" width="100" />
  78. </el-table>
  79. </template>
  80. <script lang="ts" setup>
  81. import { computed, reactive } from "vue";
  82. import rank1 from "@/assets/rank/rank1.png";
  83. import rank2 from "@/assets/rank/rank2.png";
  84. import rank3 from "@/assets/rank/rank3.png";
  85. const RANK_IMG = [rank1, rank2, rank3];
  86. const tableData = reactive([
  87. {
  88. date: "2016-05-03",
  89. name: "Tom",
  90. state: "California",
  91. city: "Los Angeles",
  92. address: "No. 189, Grove St, Los Angeles",
  93. zip: "CA 90036"
  94. },
  95. {
  96. date: "2016-05-02",
  97. name: "Tom",
  98. state: "California",
  99. city: "Los Angeles",
  100. address: "No. 189, Grove St, Los Angeles",
  101. zip: "CA 90036"
  102. },
  103. {
  104. date: "2016-05-04",
  105. name: "Tom",
  106. state: "California",
  107. city: "Los Angeles",
  108. address: "No. 189, Grove St, Los Angeles",
  109. zip: "CA 90036"
  110. },
  111. {
  112. date: "2016-05-01",
  113. name: "Tom",
  114. state: "California",
  115. city: "Los Angeles",
  116. address: "No. 189, Grove St, Los Angeles",
  117. zip: "CA 90036"
  118. }
  119. ]);
  120. const tableHeaderColor = ({ row, column, rowIndex, columnIndex }) => {
  121. // console.log("row", row);
  122. // console.log("column", column);
  123. // console.log("rowIndex", rowIndex);
  124. // console.log("columnIndex", columnIndex);
  125. // return "background: #F5F5F5; color:#000000;";
  126. return "aaaa";
  127. };
  128. const averageData = () => {
  129. tableData.unshift({
  130. date: "",
  131. name: "",
  132. state: "",
  133. city: "",
  134. address: "",
  135. zip: ""
  136. });
  137. };
  138. averageData();
  139. const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
  140. // 合并第一行的“排名”、“科室”和“姓名”
  141. if (rowIndex === 0) {
  142. if (columnIndex === 0) {
  143. return [1, 3]; // “排名”合并三列
  144. } else if (columnIndex === 1) {
  145. return [0, 0]; // “科室”不显示
  146. } else if (columnIndex === 2) {
  147. return [0, 0]; // “姓名”不显示
  148. }
  149. }
  150. return [1, 1]; // 其他单元格正常显示
  151. };
  152. </script>
  153. <style lang="scss" scoped>
  154. .diamond {
  155. display: flex;
  156. align-items: center;
  157. justify-content: center;
  158. width: 25px; /* 菱形宽度 */
  159. height: 25px; /* 菱形高度 */
  160. padding-top: 1px;
  161. margin: auto;
  162. clip-path: polygon(
  163. 50% 0%,
  164. 100% 25%,
  165. 100% 75%,
  166. 50% 100%,
  167. 0% 75%,
  168. 0% 25%
  169. ); /* 定义六边形的形状 */
  170. font-size: 12px;
  171. color: white;
  172. background-color: #d3e8f0; /* 背景颜色 */
  173. }
  174. .mytTable ::v-deep .el-table th.el-table__cell,
  175. ::v-deep .el-table th,
  176. ::v-deep .el-table tr {
  177. color: white;
  178. background-color: transparent !important;
  179. }
  180. .aaaa {
  181. background-color: black !important;
  182. }
  183. </style>