From 2f88d8356b105994ba63caefe3fddf4e7a32540d Mon Sep 17 00:00:00 2001 From: wuyy Date: Fri, 18 Sep 2026 09:16:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E9=AA=8C=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/liswork/Issueorder/index.vue | 4 +- .../statistics/overview/css/index.css | 68 +++++-------- .../regional/statistics/overview/index.vue | 97 +++++++++++++------ 3 files changed, 95 insertions(+), 74 deletions(-) diff --git a/src/views/liswork/Issueorder/index.vue b/src/views/liswork/Issueorder/index.vue index 6cef3e9..3d5366b 100644 --- a/src/views/liswork/Issueorder/index.vue +++ b/src/views/liswork/Issueorder/index.vue @@ -311,8 +311,10 @@ const saveHandle = () => { amount: item.amount, applyid: labpat.value.applyid, uid: item.uid - })) + })), + barCodeList: [...new Set(sqxmCzList.value.map(item => item.barcode).filter(Boolean))] } + saveLoading.value = true saveReqInfo(data).then(res => { if (res.code == 0) { diff --git a/src/views/regional/statistics/overview/css/index.css b/src/views/regional/statistics/overview/css/index.css index 60c8e47..6859f28 100644 --- a/src/views/regional/statistics/overview/css/index.css +++ b/src/views/regional/statistics/overview/css/index.css @@ -220,6 +220,9 @@ height: 68vh; } */ +.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li { + margin-bottom: 15px; +} .leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn { display: flex; @@ -228,7 +231,6 @@ color: #fff; font-size: 1.125rem; font-weight: 700; - height: 2.5rem; } .leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left { @@ -250,25 +252,7 @@ margin: auto 0; } -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_left .bot { - background: #e7feb8; -} -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_left .bot { - background: #fdea8a; -} - -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_left .bot { - background: #8ff9f8; -} - -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_left .bot { - background: #d890fa; -} - -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_left .bot { - background: #05d1fc; -} .leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left zi {} @@ -289,36 +273,30 @@ -webkit-animation: widthMove1 2s ease-in-out; } +.leftMain_middle .line_lineIn_sy { + width: 100%; + height: 1.25rem; + background: #fcae05; + border-radius: 125rem; + -webkit-animation: widthMove2 2s ease-in-out; +} + + + .line_lineIn .per { position: absolute; top: 0; left: 50%; } -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_line .line_lineIn { - background: #e7feb8; - -webkit-animation: widthMove2 2s ease-in-out; +.line_lineIn_sy .per { + position: absolute; + top: -1px; + left: 30%; + font-size: 17px; } -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_line .line_lineIn { - background: #fdea8a; - -webkit-animation: widthMove3 2s ease-in-out; -} -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_line .line_lineIn { - background: #8ff9f8; - -webkit-animation: widthMove4 2s ease-in-out; -} - -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_line .line_lineIn { - background: #d890fa; - -webkit-animation: widthMove5 2s ease-in-out; -} - -.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_line .line_lineIn { - background: #05d1fc; - -webkit-animation: widthMove6 2s ease-in-out; -} @-webkit-keyframes widthMove1 { 0% { @@ -326,17 +304,17 @@ } 100% { - width: 98.5%; + width: 100%; } } @-webkit-keyframes widthMove2 { 0% { - width: 0%; + width: 100%; } 100% { - width: 88.5%; + width: 0%; } } @@ -437,7 +415,7 @@ font-size: 1.125rem; font-weight: 700; margin-bottom: .625rem; - } +} .proportion ul li .liIn .liIn_left { width: 50%; @@ -628,7 +606,7 @@ ::-webkit-scrollbar-thumb { background: linear-gradient(to bottom, #00d4ff, - /* 顶部亮青色,和你的条形颜色呼应 */ + /* 顶部亮青色,和你的条形颜色呼应 */ #0099cc /* 底部深蓝色,和背景协调 */ ); diff --git a/src/views/regional/statistics/overview/index.vue b/src/views/regional/statistics/overview/index.vue index 96bc755..746d4b4 100644 --- a/src/views/regional/statistics/overview/index.vue +++ b/src/views/regional/statistics/overview/index.vue @@ -51,7 +51,7 @@
-

近一年送检标本数量趋势图

+

当年送检标本数量趋势图

@@ -77,6 +77,16 @@

{{ item.sl }}

+ +
+
+
+
+
剩余 {{ item.remain }}
+
+
+

+
@@ -140,14 +150,14 @@ const sourceYear = ref([ const dayCounts = ref([ - { dict_name: '检验申请', sl: 0, percent: '0%' }, - { dict_name: '标本采集', sl: 0, percent: '0%' }, - { dict_name: '标本签收', sl: 0, percent: '0%' }, - { dict_name: '标本送检', sl: 0, percent: '0%' }, - { dict_name: '上机检测', sl: 0, percent: '0%' }, - { dict_name: '结果审核', sl: 0, percent: '0%' }, - { dict_name: '申请作废', sl: 0, percent: '0%' }, - { dict_name: '标本退回', sl: 0, percent: '0%' }, + { dict_name: '检验申请', sl: 0, percent: '0%', flag: false }, + { dict_name: '标本采集', sl: 0, percent: '0%', remain: 0, remainPer: '0%', flag: true }, + { dict_name: '标本送检', sl: 0, percent: '0%', remain: 0, remainPer: '0%', flag: true }, + { dict_name: '标本签收', sl: 0, percent: '0%', remain: 0, remainPer: '0%', flag: true }, + { dict_name: '上机检测', sl: 0, percent: '0%', remain: 0, remainPer: '0%', flag: true }, + { dict_name: '结果审核', sl: 0, percent: '0%', remain: 0, remainPer: '0%', flag: true }, + { dict_name: '申请作废', sl: 0, percent: '0%', flag: false }, + { dict_name: '标本退回', sl: 0, percent: '0%', flag: false }, ]) const listData: any = ref([]) @@ -277,6 +287,33 @@ const getEcharts3 = (data) => { }, tooltip: { trigger: 'axis', // 或 'item',根据图表类型选择 + formatter: function (params: any[]) { + let total = 0; + params.forEach(p => { + // 兼容 null / undefined,全部转为0参与求和 + const val = p.value ?? 0; + const num = Number(val); + if (!isNaN(num)) { + total += num; + } + }) + // 头部:月份居左,总数居右 + let res = `
+ ${params[0].axisValue} + 总数:${total} +
`; + + params.forEach(p => { + const val = p.value; + // null / undefined 显示 "-",否则显示原始数值 + const showVal = (val === null || val === undefined) ? '0' : val; + res += `
+ ${p.marker}${p.seriesName} + ${showVal} +
`; + }) + return res; + } }, legend: { type: 'scroll', // 开启滚动 @@ -377,29 +414,33 @@ const getDataInfo = () => { // 当日送检样本情况 // 匹配流程数量&百分比 const baseNum = res.data.regStatStatusTotal['检验申请'] || 0 - // dayCounts.value = Object.entries(res.data.regStatStatusTotal).map(([dict_name, sl]) => { - // if (dict_name === '检验申请') { - // return { dict_name, sl, percent: '100%' } - // } - // let p = 0 - // if (baseNum > 0) { - // p = (sl as number) / baseNum * 100 - // } - // return { - // dict_name, - // sl, - // percent: p.toFixed(2) + '%' - // } - // }) + dayCounts.value.forEach(item => { item.sl = res.data.regStatStatusTotal[item.dict_name] || 0 - //检验申请占比显示100% - if (item.dict_name == '检验申请') { - item.percent = '100%' - return - } item.percent = (item.sl / baseNum * 100).toFixed(2) + '%' + if (item.percent.endsWith('.00%')) { + item.percent = item.percent.replace('.00%', '%') + } }) + const flowOrder = dayCounts.value.map(item => item.dict_name).filter(name => name !== '申请作废' && name !== '标本退回'); + //初始化全部remain=0 + dayCounts.value.forEach(d => d.remain = 0); + for (let i = 1; i < flowOrder.length; i++) { + const prevName = flowOrder[i - 1]; + const currName = flowOrder[i]; + const prevItem = dayCounts.value.find(x => x.dict_name === prevName); + const currItem = dayCounts.value.find(x => x.dict_name === currName); + if (prevItem && currItem) { + currItem.remain = prevItem.sl - currItem.sl; + if (currItem.remain < 0) currItem.remain = 0; + + if (prevItem.sl > 0) { + currItem.remainPer = (currItem.remain / prevItem.sl * 100).toFixed(2) + '%'; + } else { + currItem.remainPer = "0%"; + } + } + } getEcharts1(res.data.regStatMonth || []) getEcharts3(res.data.regStatHospYear || [])