sum-table.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. <template>
  2. <div class="sum-table">
  3. <el-table
  4. :data="tableData"
  5. style="width: 100%"
  6. border
  7. :span-method="cellMergeMethod"
  8. >
  9. <el-table-column type="index" label="序号" width="45" />
  10. <el-table-column
  11. prop="zhiLiangZhiBiao"
  12. align="center"
  13. label="质量指标"
  14. width="120"
  15. />
  16. <el-table-column
  17. prop="muBiaoZhi"
  18. align="center"
  19. label="目标达成值"
  20. width="120"
  21. />
  22. <el-table-column
  23. prop="shuJuLaiYuan"
  24. align="center"
  25. label="数据来源"
  26. width="120"
  27. />
  28. <el-table-column
  29. prop="zongJiDaCheng"
  30. align="center"
  31. label="总计达成值"
  32. width="120"
  33. />
  34. <el-table-column
  35. prop="daBiaoPingJia"
  36. align="center"
  37. label="达标评价"
  38. width="120"
  39. >
  40. <template slot-scope="scope">
  41. {{
  42. scope.row.daBiaoPingJia === 'N'
  43. ? '原因分析占比'
  44. : scope.row.daBiaoPingJia
  45. }}
  46. </template>
  47. </el-table-column>
  48. <el-table-column align="center" label="项目">
  49. <el-table-column
  50. v-for="item in childCols"
  51. :key="item.prop"
  52. :prop="item.prop"
  53. align="center"
  54. :label="item.label"
  55. width="120px"
  56. />
  57. </el-table-column>
  58. </el-table>
  59. </div>
  60. </template>
  61. <script>
  62. export default {
  63. props: {
  64. formData: {
  65. type: Object,
  66. default: () => {}
  67. },
  68. readonly: {
  69. type: Boolean,
  70. default: false
  71. },
  72. params: {
  73. type: Object,
  74. default: () => {}
  75. }
  76. },
  77. data() {
  78. return {
  79. childCols: [],
  80. tableData: []
  81. }
  82. },
  83. watch: {
  84. 'formData.bianZhiBuMen': {
  85. handler(val) {
  86. if (!val) return
  87. this.getColumnList(val)
  88. },
  89. deep: true,
  90. immediate: true
  91. }
  92. },
  93. mounted() {
  94. console.log(this.formData, this.params, this.readonly, 'shiFouHeJi')
  95. },
  96. methods: {
  97. /**
  98. * 单元格合并方法
  99. * 1. 质量指标、目标达成值、总计达成值、达标评价:数据相同时纵向合并(rowspan)
  100. * 2. childCols(列索引>=6):shiFouHeJi为Y时横向合并(colspan)
  101. */
  102. cellMergeMethod({ row, column, rowIndex, columnIndex }) {
  103. // 需要纵向合并的字段
  104. const mergeColFields = [
  105. 'zhiLiangZhiBiao',
  106. 'muBiaoZhi',
  107. 'zongJiDaCheng',
  108. 'daBiaoPingJia'
  109. ]
  110. const field = column.property
  111. // --- 需求1:纵向合并(相同值时 rowspan) ---
  112. // 特殊规则:达标评价为N时,总计达成值不合并
  113. if (
  114. mergeColFields.includes(field) &&
  115. !(field === 'zongJiDaCheng' && row.daBiaoPingJia === 'N')
  116. ) {
  117. if (this.isMergeStart(field, rowIndex)) {
  118. return { rowspan: this.getMergeSpan(field, rowIndex), colspan: 1 }
  119. } else {
  120. return { rowspan: 0, colspan: 0 }
  121. }
  122. }
  123. // --- 需求2:childCols 横向合并(shiFouHeJi=Y 时 colspan) ---
  124. if (columnIndex >= 6 && row.shiFouHeJi === 'Y') {
  125. if (columnIndex === 6) {
  126. return { rowspan: 1, colspan: this.childCols.length }
  127. } else {
  128. return { rowspan: 0, colspan: 0 }
  129. }
  130. }
  131. return { rowspan: 1, colspan: 1 }
  132. },
  133. /** 判断当前行是否为某字段纵向合并的起始行(同一质量指标范围内) */
  134. isMergeStart(field, currentIndex) {
  135. if (currentIndex === 0) return true
  136. const curRow = this.tableData[currentIndex]
  137. const prevRow = this.tableData[currentIndex - 1]
  138. // 质量指标不同则必须重新开始,不合并
  139. if (curRow.zhiLiangZhiBiao !== prevRow.zhiLiangZhiBiao) return true
  140. // 同一质量指标内,字段值不同则重新开始
  141. return curRow[field] !== prevRow[field]
  142. },
  143. /** 计算从当前行开始、同一质量指标范围内的连续相同值行数 */
  144. getMergeSpan(field, startIndex) {
  145. const startVal = this.tableData[startIndex][field]
  146. const startZhiLiang = this.tableData[startIndex].zhiLiangZhiBiao
  147. let span = 1
  148. for (let i = startIndex + 1; i < this.tableData.length; i++) {
  149. const row = this.tableData[i]
  150. // 超出同一质量指标范围则停止
  151. if (row.zhiLiangZhiBiao !== startZhiLiang) break
  152. if (row[field] === startVal) {
  153. span++
  154. } else {
  155. break
  156. }
  157. }
  158. return span
  159. },
  160. getColumnList(bianZhiBuMen) {
  161. // TODO: 正式环境替换为 this.$common.request(...)
  162. // 模拟 res.variables?.data 的数据格式
  163. const mockData = [
  164. { xiang_mu_: '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测' },
  165. { xiang_mu_: '人PCA3基因表达检测' },
  166. { xiang_mu_: '精神类药物基因' },
  167. { xiang_mu_: '结直肠癌多基因甲基化检测' },
  168. { xiang_mu_: '胃癌早筛甲基化检测(Septin9、RNF180)' },
  169. { xiang_mu_: '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"' },
  170. { xiang_mu_: '人外周血循环肿瘤细胞(CTC)分型检测' },
  171. { xiang_mu_: '循环染色体异常细胞检测(CAC)' },
  172. { xiang_mu_: 'HLA-B51基因分型检测' },
  173. { xiang_mu_: 'HLA-B27基因分型检测' },
  174. { xiang_mu_: '结直肠癌miR-92a检测(RNA)' },
  175. { xiang_mu_: '结直肠癌SDC2基因甲基化' },
  176. { xiang_mu_: '宫颈癌甲基化检测' },
  177. { xiang_mu_: '人乳头瘤病毒基因分型' }
  178. ]
  179. // 模拟异步,与原接口保持一致
  180. Promise.resolve({ variables: { data: mockData } }).then((res) => {
  181. this.childCols = res.variables.data.map((item) => ({
  182. label: item.xiang_mu_,
  183. prop: item.xiang_mu_
  184. }))
  185. // 列数据就绪后自动加载表格数据
  186. this.getTableData()
  187. })
  188. },
  189. getTableData() {
  190. const keys = this.childCols.reduce((pre, cur) => {
  191. pre[cur.prop] = cur.label
  192. return pre
  193. }, {})
  194. // TODO: 正式环境替换为接口请求
  195. // 模拟表格数据,验证合并功能:
  196. // - 前3行:质量指标/目标达成值/总计达成值/达标评价 相同 → 纵向合并
  197. // - 第4行:独立行,不合并
  198. // - 第5行:独立行,不合并
  199. // - 最后2行:shiFouHeJi=Y → childCols 横向合并 + 主列纵向合并
  200. this.tableData = [
  201. {
  202. zhiLiangZhiBiao: '实验室内周转时间达标率',
  203. muBiaoZhi: '≥95%',
  204. shuJuLaiYuan: '实验室内周转时间(从实验室接收到报告发出时间)',
  205. zongJiDaCheng: '96%',
  206. daBiaoPingJia: 'Y',
  207. shiFouHeJi: 'N',
  208. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 128,
  209. 人PCA3基因表达检测: 56,
  210. 精神类药物基因: 89,
  211. 结直肠癌多基因甲基化检测: 45,
  212. '胃癌早筛甲基化检测(Septin9、RNF180)': 67,
  213. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 34,
  214. '人外周血循环肿瘤细胞(CTC)分型检测': 78,
  215. '循环染色体异常细胞检测(CAC)': 23,
  216. 'HLA-B51基因分型检测': 91,
  217. 'HLA-B27基因分型检测': 42,
  218. '结直肠癌miR-92a检测(RNA)': 55,
  219. 结直肠癌SDC2基因甲基化: 38,
  220. 宫颈癌甲基化检测: 61,
  221. 人乳头瘤病毒基因分型: 47
  222. },
  223. {
  224. zhiLiangZhiBiao: '实验室内周转时间达标率',
  225. muBiaoZhi: '≥95%',
  226. shuJuLaiYuan: '实验室内周转时间达标数',
  227. zongJiDaCheng: '96%',
  228. daBiaoPingJia: 'Y',
  229. shiFouHeJi: 'N',
  230. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 135,
  231. 人PCA3基因表达检测: 62,
  232. 精神类药物基因: 94,
  233. 结直肠癌多基因甲基化检测: 51,
  234. '胃癌早筛甲基化检测(Septin9、RNF180)': 72,
  235. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 39,
  236. '人外周血循环肿瘤细胞(CTC)分型检测': 83,
  237. '循环染色体异常细胞检测(CAC)': 28,
  238. 'HLA-B51基因分型检测': 97,
  239. 'HLA-B27基因分型检测': 48,
  240. '结直肠癌miR-92a检测(RNA)': 59,
  241. 结直肠癌SDC2基因甲基化: 41,
  242. 宫颈癌甲基化检测: 65,
  243. 人乳头瘤病毒基因分型: 52
  244. },
  245. {
  246. zhiLiangZhiBiao: '实验室内周转时间达标率',
  247. muBiaoZhi: '≥95%',
  248. shuJuLaiYuan: '实验室内周转时间中位数',
  249. zongJiDaCheng: '96%',
  250. daBiaoPingJia: 'Y',
  251. shiFouHeJi: 'N',
  252. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 142,
  253. 人PCA3基因表达检测: 48,
  254. 精神类药物基因: 91,
  255. 结直肠癌多基因甲基化检测: 47,
  256. '胃癌早筛甲基化检测(Septin9、RNF180)': 69,
  257. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 36,
  258. '人外周血循环肿瘤细胞(CTC)分型检测': 80,
  259. '循环染色体异常细胞检测(CAC)': 25,
  260. 'HLA-B51基因分型检测': 94,
  261. 'HLA-B27基因分型检测': 45,
  262. '结直肠癌miR-92a检测(RNA)': 57,
  263. 结直肠癌SDC2基因甲基化: 39,
  264. 宫颈癌甲基化检测: 63,
  265. 人乳头瘤病毒基因分型: 49
  266. },
  267. {
  268. zhiLiangZhiBiao: '实验室内周转时间达标率',
  269. muBiaoZhi: '≥95%',
  270. shuJuLaiYuan: '实验室内周转时间90%分位数',
  271. zongJiDaCheng: '96%',
  272. daBiaoPingJia: 'Y',
  273. shiFouHeJi: 'N',
  274. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 76,
  275. 人PCA3基因表达检测: 33,
  276. 精神类药物基因: 67,
  277. 结直肠癌多基因甲基化检测: 29,
  278. '胃癌早筛甲基化检测(Septin9、RNF180)': 44,
  279. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 18,
  280. '人外周血循环肿瘤细胞(CTC)分型检测': 52,
  281. '循环染色体异常细胞检测(CAC)': 12,
  282. 'HLA-B51基因分型检测': 63,
  283. 'HLA-B27基因分型检测': 27,
  284. '结直肠癌miR-92a检测(RNA)': 36,
  285. 结直肠癌SDC2基因甲基化: 21,
  286. 宫颈癌甲基化检测: 40,
  287. 人乳头瘤病毒基因分型: 30
  288. },
  289. {
  290. zhiLiangZhiBiao: '实验室内周转时间达标率',
  291. muBiaoZhi: '≥95%',
  292. shuJuLaiYuan: '检验报告总数',
  293. zongJiDaCheng: '96%',
  294. daBiaoPingJia: 'Y',
  295. shiFouHeJi: 'N',
  296. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  297. 人PCA3基因表达检测: 187,
  298. 精神类药物基因: 203,
  299. 结直肠癌多基因甲基化检测: 156,
  300. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  301. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  302. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  303. '循环染色体异常细胞检测(CAC)': 98,
  304. 'HLA-B51基因分型检测': 220,
  305. 'HLA-B27基因分型检测': 145,
  306. '结直肠癌miR-92a检测(RNA)': 167,
  307. 结直肠癌SDC2基因甲基化: 123,
  308. 宫颈癌甲基化检测: 189,
  309. 人乳头瘤病毒基因分型: 158
  310. },
  311. {
  312. zhiLiangZhiBiao: '实验室内周转时间达标率',
  313. muBiaoZhi: '≥95%',
  314. shuJuLaiYuan: '当月检验报告超时数',
  315. zongJiDaCheng: '96%',
  316. daBiaoPingJia: 'Y',
  317. shiFouHeJi: 'N',
  318. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  319. 人PCA3基因表达检测: 187,
  320. 精神类药物基因: 203,
  321. 结直肠癌多基因甲基化检测: 156,
  322. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  323. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  324. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  325. '循环染色体异常细胞检测(CAC)': 98,
  326. 'HLA-B51基因分型检测': 220,
  327. 'HLA-B27基因分型检测': 145,
  328. '结直肠癌miR-92a检测(RNA)': 167,
  329. 结直肠癌SDC2基因甲基化: 123,
  330. 宫颈癌甲基化检测: 189,
  331. 人乳头瘤病毒基因分型: 158
  332. },
  333. {
  334. zhiLiangZhiBiao: '实验室内周转时间达标率',
  335. muBiaoZhi: '≥95%',
  336. shuJuLaiYuan: '申请项目漏检导致检验报告超时数',
  337. zongJiDaCheng: '99.5%',
  338. daBiaoPingJia: 'N',
  339. shiFouHeJi: 'N',
  340. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  341. 人PCA3基因表达检测: 187,
  342. 精神类药物基因: 203,
  343. 结直肠癌多基因甲基化检测: 156,
  344. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  345. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  346. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  347. '循环染色体异常细胞检测(CAC)': 98,
  348. 'HLA-B51基因分型检测': 220,
  349. 'HLA-B27基因分型检测': 145,
  350. '结直肠癌miR-92a检测(RNA)': 167,
  351. 结直肠癌SDC2基因甲基化: 123,
  352. 宫颈癌甲基化检测: 189,
  353. 人乳头瘤病毒基因分型: 158
  354. },
  355. {
  356. zhiLiangZhiBiao: '实验室内周转时间达标率',
  357. muBiaoZhi: '≥95%',
  358. shuJuLaiYuan: '设备故障导致检验报告超时数',
  359. zongJiDaCheng: '99.5%',
  360. daBiaoPingJia: 'N',
  361. shiFouHeJi: 'N',
  362. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  363. 人PCA3基因表达检测: 187,
  364. 精神类药物基因: 203,
  365. 结直肠癌多基因甲基化检测: 156,
  366. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  367. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  368. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  369. '循环染色体异常细胞检测(CAC)': 98,
  370. 'HLA-B51基因分型检测': 220,
  371. 'HLA-B27基因分型检测': 145,
  372. '结直肠癌miR-92a检测(RNA)': 167,
  373. 结直肠癌SDC2基因甲基化: 123,
  374. 宫颈癌甲基化检测: 189,
  375. 人乳头瘤病毒基因分型: 158
  376. },
  377. {
  378. zhiLiangZhiBiao: '实验室内周转时间达标率',
  379. muBiaoZhi: '≥95%',
  380. shuJuLaiYuan: '检测复查导致检验报告超时数',
  381. zongJiDaCheng: '99.5%',
  382. daBiaoPingJia: 'N',
  383. shiFouHeJi: 'N',
  384. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  385. 人PCA3基因表达检测: 187,
  386. 精神类药物基因: 203,
  387. 结直肠癌多基因甲基化检测: 156,
  388. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  389. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  390. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  391. '循环染色体异常细胞检测(CAC)': 98,
  392. 'HLA-B51基因分型检测': 220,
  393. 'HLA-B27基因分型检测': 145,
  394. '结直肠癌miR-92a检测(RNA)': 167,
  395. 结直肠癌SDC2基因甲基化: 123,
  396. 宫颈癌甲基化检测: 189,
  397. 人乳头瘤病毒基因分型: 158
  398. },
  399. {
  400. zhiLiangZhiBiao: '检验报告不正确率',
  401. muBiaoZhi: '≤0.1‰',
  402. shuJuLaiYuan: '不正确检验报告数',
  403. zongJiDaCheng: '0%',
  404. daBiaoPingJia: 'Y',
  405. shiFouHeJi: 'N',
  406. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  407. 人PCA3基因表达检测: 187,
  408. 精神类药物基因: 203,
  409. 结直肠癌多基因甲基化检测: 156,
  410. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  411. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  412. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  413. '循环染色体异常细胞检测(CAC)': 98,
  414. 'HLA-B51基因分型检测': 220,
  415. 'HLA-B27基因分型检测': 145,
  416. '结直肠癌miR-92a检测(RNA)': 167,
  417. 结直肠癌SDC2基因甲基化: 123,
  418. 宫颈癌甲基化检测: 189,
  419. 人乳头瘤病毒基因分型: 158
  420. },
  421. {
  422. zhiLiangZhiBiao: '检验报告不正确率',
  423. muBiaoZhi: '≤0.1‰',
  424. shuJuLaiYuan: '检验报告总数',
  425. zongJiDaCheng: '0%',
  426. daBiaoPingJia: 'Y',
  427. shiFouHeJi: 'N',
  428. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 215,
  429. 人PCA3基因表达检测: 187,
  430. 精神类药物基因: 203,
  431. 结直肠癌多基因甲基化检测: 156,
  432. '胃癌早筛甲基化检测(Septin9、RNF180)': 178,
  433. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 134,
  434. '人外周血循环肿瘤细胞(CTC)分型检测': 192,
  435. '循环染色体异常细胞检测(CAC)': 98,
  436. 'HLA-B51基因分型检测': 220,
  437. 'HLA-B27基因分型检测': 145,
  438. '结直肠癌miR-92a检测(RNA)': 167,
  439. 结直肠癌SDC2基因甲基化: 123,
  440. 宫颈癌甲基化检测: 189,
  441. 人乳头瘤病毒基因分型: 158
  442. },
  443. {
  444. zhiLiangZhiBiao: '委托样品周转时间达标报告数',
  445. muBiaoZhi: '≥90%',
  446. shuJuLaiYuan: '委托样品周转时间达标报告数',
  447. zongJiDaCheng: '100%',
  448. daBiaoPingJia: 'Y',
  449. shiFouHeJi: 'Y',
  450. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 300,
  451. 人PCA3基因表达检测: 250,
  452. 精神类药物基因: 280,
  453. 结直肠癌多基因甲基化检测: 210,
  454. '胃癌早筛甲基化检测(Septin9、RNF180)': 240,
  455. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 180,
  456. '人外周血循环肿瘤细胞(CTC)分型检测': 270,
  457. '循环染色体异常细胞检测(CAC)': 150,
  458. 'HLA-B51基因分型检测': 310,
  459. 'HLA-B27基因分型检测': 200,
  460. '结直肠癌miR-92a检测(RNA)': 230,
  461. 结直肠癌SDC2基因甲基化: 170,
  462. 宫颈癌甲基化检测: 260,
  463. 人乳头瘤病毒基因分型: 220
  464. },
  465. {
  466. zhiLiangZhiBiao: '委托样品周转时间达标报告数',
  467. muBiaoZhi: '≥90%',
  468. shuJuLaiYuan: '委托样品周转时间达标报告数',
  469. zongJiDaCheng: '100%',
  470. daBiaoPingJia: 'Y',
  471. shiFouHeJi: 'Y',
  472. '乳头瘤病毒(HPV)E6/E7 mRNA基因分型检测': 320,
  473. 人PCA3基因表达检测: 265,
  474. 精神类药物基因: 295,
  475. 结直肠癌多基因甲基化检测: 225,
  476. '胃癌早筛甲基化检测(Septin9、RNF180)': 255,
  477. '"幽门螺杆菌23S rRNA/gyrA基因 突变检测"': 195,
  478. '人外周血循环肿瘤细胞(CTC)分型检测': 285,
  479. '循环染色体异常细胞检测(CAC)': 165,
  480. 'HLA-B51基因分型检测': 325,
  481. 'HLA-B27基因分型检测': 215,
  482. '结直肠癌miR-92a检测(RNA)': 245,
  483. 结直肠癌SDC2基因甲基化: 185,
  484. 宫颈癌甲基化检测: 275,
  485. 人乳头瘤病毒基因分型: 235
  486. }
  487. ]
  488. }
  489. }
  490. }
  491. </script>
  492. <style lang="scss" scoped></style>