From 24ef032c4ef5dad3a4f4450810f054f8012bb93b Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期五, 01 八月 2025 12:30:28 +0800
Subject: [PATCH] 患者检验检查增加

---
 src/views/home/index.vue                        |    2 
 package-lock.json                               |  432 ++++++++++---------
 src/views/report/components/DateRangePicker.vue |  195 +++++++++
 src/views/report/item/index.vue                 |  298 ++++++-------
 src/assets/listIoc.png                          |    0 
 src/views/report/index.vue                      |  325 +++++++++++---
 src/assets/xueye.png                            |    0 
 7 files changed, 809 insertions(+), 443 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 52e71a0..8fc607c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -52,10 +52,18 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -138,14 +146,29 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-      "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz",
+      "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+      "dependencies": {
+        "@babel/types": "^7.28.0"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
       "engines": {
         "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.28.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz",
+      "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@csstools/selector-specificity": {
@@ -724,49 +747,49 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.39.tgz",
-      "integrity": "sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
+      "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
       "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/shared": "3.2.39",
+        "@babel/parser": "^7.28.0",
+        "@vue/shared": "3.5.18",
+        "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
-        "source-map": "^0.6.1"
+        "source-map-js": "^1.2.1"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.39.tgz",
-      "integrity": "sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
+      "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
       "dependencies": {
-        "@vue/compiler-core": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-core": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.39.tgz",
-      "integrity": "sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
+      "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
       "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.39",
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/compiler-ssr": "3.2.39",
-        "@vue/reactivity-transform": "3.2.39",
-        "@vue/shared": "3.2.39",
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-core": "3.5.18",
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7",
-        "postcss": "^8.1.10",
-        "source-map": "^0.6.1"
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.39.tgz",
-      "integrity": "sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
+      "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
       "dependencies": {
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -775,60 +798,49 @@
       "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ=="
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.39.tgz",
-      "integrity": "sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.18.tgz",
+      "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
       "dependencies": {
-        "@vue/shared": "3.2.39"
-      }
-    },
-    "node_modules/@vue/reactivity-transform": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.39.tgz",
-      "integrity": "sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==",
-      "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.39",
-        "@vue/shared": "3.2.39",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7"
+        "@vue/shared": "3.5.18"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.39.tgz",
-      "integrity": "sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
+      "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
       "dependencies": {
-        "@vue/reactivity": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/reactivity": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.39.tgz",
-      "integrity": "sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
+      "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
       "dependencies": {
-        "@vue/runtime-core": "3.2.39",
-        "@vue/shared": "3.2.39",
-        "csstype": "^2.6.8"
+        "@vue/reactivity": "3.5.18",
+        "@vue/runtime-core": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.39.tgz",
-      "integrity": "sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
+      "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
       "dependencies": {
-        "@vue/compiler-ssr": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18"
       },
       "peerDependencies": {
-        "vue": "3.2.39"
+        "vue": "3.5.18"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.39.tgz",
-      "integrity": "sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw=="
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz",
+      "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA=="
     },
     "node_modules/@webassemblyjs/ast": {
       "version": "1.11.1",
@@ -1645,9 +1657,9 @@
       }
     },
     "node_modules/csstype": {
-      "version": "2.6.20",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
-      "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
     },
     "node_modules/dashdash": {
       "version": "1.14.1",
@@ -1869,10 +1881,9 @@
       }
     },
     "node_modules/entities": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
-      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
-      "dev": true,
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "engines": {
         "node": ">=0.12"
       },
@@ -3868,12 +3879,17 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.25.9",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
-      "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+      "version": "0.30.17",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
       "dependencies": {
-        "sourcemap-codec": "^1.4.8"
+        "@jridgewell/sourcemap-codec": "^1.5.0"
       }
+    },
+    "node_modules/magic-string/node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="
     },
     "node_modules/make-fetch-happen": {
       "version": "9.1.0",
@@ -4162,9 +4178,9 @@
       "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA=="
     },
     "node_modules/nanoid": {
-      "version": "3.3.8",
-      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
-      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
       "funding": [
         {
           "type": "github",
@@ -4672,9 +4688,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
-      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "funding": [
         {
           "type": "opencollective",
@@ -4690,7 +4706,7 @@
         }
       ],
       "dependencies": {
-        "nanoid": "^3.3.8",
+        "nanoid": "^3.3.11",
         "picocolors": "^1.1.1",
         "source-map-js": "^1.2.1"
       },
@@ -5467,6 +5483,7 @@
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "peer": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -5478,11 +5495,6 @@
       "engines": {
         "node": ">=0.10.0"
       }
-    },
-    "node_modules/sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
     },
     "node_modules/spdx-correct": {
       "version": "3.1.1",
@@ -6354,15 +6366,23 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.39.tgz",
-      "integrity": "sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz",
+      "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
       "dependencies": {
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/compiler-sfc": "3.2.39",
-        "@vue/runtime-dom": "3.2.39",
-        "@vue/server-renderer": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-sfc": "3.5.18",
+        "@vue/runtime-dom": "3.5.18",
+        "@vue/server-renderer": "3.5.18",
+        "@vue/shared": "3.5.18"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
     "node_modules/vue-demi": {
@@ -6843,10 +6863,15 @@
         "@babel/highlight": "^7.18.6"
       }
     },
+    "@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
+    },
     "@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
     },
     "@babel/highlight": {
       "version": "7.18.6",
@@ -6910,9 +6935,21 @@
       }
     },
     "@babel/parser": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-      "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw=="
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz",
+      "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+      "requires": {
+        "@babel/types": "^7.28.0"
+      }
+    },
+    "@babel/types": {
+      "version": "7.28.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz",
+      "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+      "requires": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      }
     },
     "@csstools/selector-specificity": {
       "version": "2.0.2",
@@ -7330,49 +7367,49 @@
       }
     },
     "@vue/compiler-core": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.39.tgz",
-      "integrity": "sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
+      "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
       "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/shared": "3.2.39",
+        "@babel/parser": "^7.28.0",
+        "@vue/shared": "3.5.18",
+        "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
-        "source-map": "^0.6.1"
+        "source-map-js": "^1.2.1"
       }
     },
     "@vue/compiler-dom": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.39.tgz",
-      "integrity": "sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
+      "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
       "requires": {
-        "@vue/compiler-core": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-core": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "@vue/compiler-sfc": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.39.tgz",
-      "integrity": "sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
+      "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
       "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.39",
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/compiler-ssr": "3.2.39",
-        "@vue/reactivity-transform": "3.2.39",
-        "@vue/shared": "3.2.39",
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-core": "3.5.18",
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7",
-        "postcss": "^8.1.10",
-        "source-map": "^0.6.1"
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
       }
     },
     "@vue/compiler-ssr": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.39.tgz",
-      "integrity": "sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
+      "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
       "requires": {
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "@vue/devtools-api": {
@@ -7381,57 +7418,46 @@
       "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ=="
     },
     "@vue/reactivity": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.39.tgz",
-      "integrity": "sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.18.tgz",
+      "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
       "requires": {
-        "@vue/shared": "3.2.39"
-      }
-    },
-    "@vue/reactivity-transform": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.39.tgz",
-      "integrity": "sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==",
-      "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.39",
-        "@vue/shared": "3.2.39",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7"
+        "@vue/shared": "3.5.18"
       }
     },
     "@vue/runtime-core": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.39.tgz",
-      "integrity": "sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
+      "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
       "requires": {
-        "@vue/reactivity": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/reactivity": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "@vue/runtime-dom": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.39.tgz",
-      "integrity": "sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
+      "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
       "requires": {
-        "@vue/runtime-core": "3.2.39",
-        "@vue/shared": "3.2.39",
-        "csstype": "^2.6.8"
+        "@vue/reactivity": "3.5.18",
+        "@vue/runtime-core": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "csstype": "^3.1.3"
       }
     },
     "@vue/server-renderer": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.39.tgz",
-      "integrity": "sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
+      "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
       "requires": {
-        "@vue/compiler-ssr": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "@vue/shared": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.39.tgz",
-      "integrity": "sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw=="
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz",
+      "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA=="
     },
     "@webassemblyjs/ast": {
       "version": "1.11.1",
@@ -8083,9 +8109,9 @@
       "dev": true
     },
     "csstype": {
-      "version": "2.6.20",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
-      "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
     },
     "dashdash": {
       "version": "1.14.1",
@@ -8256,10 +8282,9 @@
       }
     },
     "entities": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
-      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
-      "dev": true
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
     },
     "env-paths": {
       "version": "2.2.1",
@@ -9646,11 +9671,18 @@
       }
     },
     "magic-string": {
-      "version": "0.25.9",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
-      "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+      "version": "0.30.17",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
       "requires": {
-        "sourcemap-codec": "^1.4.8"
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      },
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": {
+          "version": "1.5.4",
+          "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+          "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="
+        }
       }
     },
     "make-fetch-happen": {
@@ -9861,9 +9893,9 @@
       "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA=="
     },
     "nanoid": {
-      "version": "3.3.8",
-      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
-      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
     },
     "natural-compare": {
       "version": "1.4.0",
@@ -10220,11 +10252,11 @@
       }
     },
     "postcss": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
-      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "requires": {
-        "nanoid": "^3.3.8",
+        "nanoid": "^3.3.11",
         "picocolors": "^1.1.1",
         "source-map-js": "^1.2.1"
       }
@@ -10750,17 +10782,13 @@
     "source-map": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "peer": true
     },
     "source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
       "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
-    },
-    "sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
     },
     "spdx-correct": {
       "version": "3.1.1",
@@ -11418,15 +11446,15 @@
       }
     },
     "vue": {
-      "version": "3.2.39",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.39.tgz",
-      "integrity": "sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==",
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz",
+      "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
       "requires": {
-        "@vue/compiler-dom": "3.2.39",
-        "@vue/compiler-sfc": "3.2.39",
-        "@vue/runtime-dom": "3.2.39",
-        "@vue/server-renderer": "3.2.39",
-        "@vue/shared": "3.2.39"
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-sfc": "3.5.18",
+        "@vue/runtime-dom": "3.5.18",
+        "@vue/server-renderer": "3.5.18",
+        "@vue/shared": "3.5.18"
       }
     },
     "vue-demi": {
diff --git a/src/assets/listIoc.png b/src/assets/listIoc.png
new file mode 100644
index 0000000..6ca7aa7
--- /dev/null
+++ b/src/assets/listIoc.png
Binary files differ
diff --git a/src/assets/xueye.png b/src/assets/xueye.png
new file mode 100644
index 0000000..64c313a
--- /dev/null
+++ b/src/assets/xueye.png
Binary files differ
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index e177ae1..7a8475f 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -151,7 +151,7 @@
     }
     const topath=(url:string)=>{
         console.log('sss')
-        if (url==='/report'){
+        if (url==='/report222'){
             Toast('此功能暂未开通')
         } else {
             router.push(url)
diff --git a/src/views/report/components/DateRangePicker.vue b/src/views/report/components/DateRangePicker.vue
new file mode 100644
index 0000000..edababc
--- /dev/null
+++ b/src/views/report/components/DateRangePicker.vue
@@ -0,0 +1,195 @@
+<template>
+    <van-popup v-model:show="showPopup" position="center" round>
+        <div class="popup-content">
+            <h3>检查时间</h3>
+            <div class="date-range-buttons">
+                <van-button :type="typeData === '近三个月' ? 'primary' : 'default'" size="small" @click="selectDateRange('近三个月')">近三个月</van-button>
+                <van-button :type="typeData === '近6个月' ? 'primary' : 'default'" size="small" @click="selectDateRange('近6个月')">近6个月</van-button>
+                <van-button :type="typeData === '近1年' ? 'primary' : 'default'" size="small" @click="selectDateRange('近1年')">近1年</van-button>
+                <van-button :type="typeData === '全部' ? 'primary' : 'default'" size="small" @click="selectDateRange('全部')">全部</van-button>
+            </div>
+            <div class="date-range-inputs">
+                <van-field v-model="startDate" placeholder="请选择开始日期" readonly @click="openDatePicker('start')">
+                    <template #button>
+                        <van-icon name="arrow-down" />
+                    </template>
+                </van-field>
+                <span>-</span>
+                <van-field v-model="endDate" placeholder="请选择结束日期" readonly @click="openDatePicker('end')">
+                    <template #button>
+                        <van-icon name="arrow-down" />
+                    </template>
+                </van-field>
+            </div>
+            <div class="buttons">
+                <van-button type="default" block @click="cancel">取消</van-button>
+                <van-button type="primary" block @click="confirm">确认</van-button>
+            </div>
+        </div>
+    </van-popup>
+
+    <!-- 使用 DatetimePicker,放在底部弹出的 Popup 中 -->
+    <van-popup v-model:show="showDatePopup" position="bottom">
+        <van-datetime-picker
+            v-model="currentDate"
+            type="date"
+            :min-date="minDate"
+            :max-date="maxDate"
+            @confirm="onConfirmDate"
+            @cancel="closeDatePicker"
+        />
+    </van-popup>
+</template>
+
+<script setup>
+    import { ref, computed, onMounted } from 'vue'
+
+    const props = defineProps({
+        modelValue: Boolean,
+    })
+    const emit = defineEmits(['update:modelValue', 'confirm'])
+
+    // 控制主弹窗的显示/隐藏 (v-model)
+    const showPopup = computed({
+        get: () => props.modelValue,
+        set: value => emit('update:modelValue', value),
+    })
+
+    // 日期选择相关的状态
+    const startDate = ref('')
+    const endDate = ref('')
+    const currentDate = ref(new Date())
+    const minDate = new Date(2020, 0, 1) // 2020-01-01
+    const maxDate = new Date(2050, 11, 31) // 2050-12-31
+
+    // 控制日期选择器弹窗 (DatetimePicker) 的显示/隐藏
+    const showDatePopup = ref(false)
+    // 记录当前是选择开始日期还是结束日期
+    const datePickerType = ref('')
+    const typeData=ref('近三个月')
+    // 选择预设时间范围
+    const selectDateRange = (range) => {
+        const now = new Date()
+        typeData.value=range
+        switch (range) {
+            case '近三个月':
+                const threeMonthsAgo = new Date(now)
+                threeMonthsAgo.setMonth(now.getMonth() - 3)
+                startDate.value = formatDate(threeMonthsAgo)
+                endDate.value = formatDate(now)
+                break
+            case '近6个月':
+                const sixMonthsAgo = new Date(now)
+                sixMonthsAgo.setMonth(now.getMonth() - 6)
+                startDate.value = formatDate(sixMonthsAgo)
+                endDate.value = formatDate(now)
+                break
+            case '近1年':
+                const oneYearAgo = new Date(now)
+                oneYearAgo.setFullYear(now.getFullYear() - 1)
+                startDate.value = formatDate(oneYearAgo)
+                endDate.value = formatDate(now)
+                break
+            case '全部':
+                startDate.value = ''
+                endDate.value = ''
+                break
+        }
+    }
+
+    // 格式化日期为 YYYY-MM-DD
+    const formatDate = (date) => {
+        const year = date.getFullYear()
+        const month = String(date.getMonth() + 1).padStart(2, '0')
+        const day = String(date.getDate()).padStart(2, '0')
+        return `${year}-${month}-${day}`
+    }
+
+    // 打开日期选择器弹窗 (方法名已更改)
+    const openDatePicker = (type) => {
+        if (typeData.value==='全部'){
+            return
+        }
+        datePickerType.value = type
+        // 设置当前选择的日期:如果已有值则用已有值,否则用今天
+        if (type === 'start' && startDate.value) {
+            currentDate.value = new Date(startDate.value)
+        } else if (type === 'end' && endDate.value) {
+            currentDate.value = new Date(endDate.value)
+        } else {
+            currentDate.value = new Date()
+        }
+        showDatePopup.value = true // 显示日期选择器弹窗
+    }
+
+    // 关闭日期选择器弹窗 (方法名已更改)
+    const closeDatePicker = () => {
+        showDatePopup.value = false
+    }
+
+    // 确认选择日期
+    const onConfirmDate = (value) => {
+        if (datePickerType.value === 'start') {
+            startDate.value = formatDate(value)
+        } else if (datePickerType.value === 'end') {
+            endDate.value = formatDate(value)
+        }
+        closeDatePicker() // 确认后关闭弹窗
+    }
+
+    // 取消主弹窗
+    const cancel = () => {
+        emit('update:modelValue', false)
+    }
+
+    // 确认选择并关闭主弹窗
+    const confirm = () => {
+        emit('confirm', { startDate: startDate.value, endDate: endDate.value, type: typeData.value })
+        emit('update:modelValue', false)
+    }
+    onMounted(()=>{
+        // 初始化为近三个月
+        selectDateRange('近三个月')
+    })
+</script>
+
+<style scoped>
+.popup-content {
+    padding: 20px;
+    text-align: center;
+    width: 80vw;
+    max-width: 400px;
+}
+
+.date-range-buttons {
+    margin-bottom: 20px;
+    display: flex;
+    justify-content: space-between;
+}
+
+.date-range-buttons .van-button {
+    flex: 1;
+    margin: 0 5px;
+}
+
+.date-range-inputs {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 20px;
+}
+
+.date-range-inputs span {
+    margin: 0 10px;
+}
+
+.buttons {
+    display: flex;
+    justify-content: space-between;
+    margin-top: 20px;
+}
+
+.buttons .van-button {
+    width: 48%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/report/index.vue b/src/views/report/index.vue
index 4349825..61d27ae 100644
--- a/src/views/report/index.vue
+++ b/src/views/report/index.vue
@@ -1,94 +1,269 @@
 <template>
     <div class="report">
-        <van-nav-bar
-            title=""
-            left-text="返回"
-            left-arrow
-            @click="fanhui"
-        />
-        <div class="inputdiv">
-            <van-field left-icon="search" class="input" v-model="inputValue" placeholder="模糊匹配项目、日期检索" />
+        <div style="border: 1pt solid #707070;">
+            <van-nav-bar title="" :left-text="typeName">
+                <template #right>
+                    <van-button
+                        icon="todo-list-o"
+                        size="small"
+                        plain
+                        type="primary"
+                        @click="showPopup = true"
+                    >筛选</van-button
+                    >
+                </template>
+            </van-nav-bar>
         </div>
-        <div class="listdiv">
-            <div class="listrow" v-for="x in 6" :key="x">
-                <van-row>
-                    <div class="info"></div>
-                    <van-row class="lable">
-                        <van-col span="12">检验值</van-col>
-                        <van-col span="12" style="text-align: right;">血常规</van-col>
-                    </van-row>
-                    <van-row class="lable">
-                        <van-col span="12">检验值</van-col>
-                        <van-col span="12" style="text-align: right; color: #769aff ;" @click="topath('/reportItem')">点击查看详情</van-col>
-                    </van-row>
-                    <van-row class="lable">
-                        <van-col span="12">最新检查日期</van-col>
-                        <van-col span="12" style="text-align: right;">2022-08-01</van-col>
-                    </van-row>
-                </van-row>
+        <DateRangePicker v-model="showPopup" @confirm="handleConfirm" />
+        <!-- <div v-if="loading" style="margin-top: 20pt; text-align: center;"> -->
+        <!-- <van-loading  type="spinner" /> -->
+        <!-- </div> -->
+        <div class="test-list">
+            <div v-for="(item, index) in reportList" :key="index" class="test-item">
+                <img src="@/assets/listIoc.png" alt="Icon" class="icon">
+                <div class="content" @click="topath(item)">
+                    <div class="title">{{ item.itemGroupName }}</div>
+                    <div class="date">{{ item.date }}</div>
+                </div>
+                <!-- <div class="hospital">{{ item.client_code }}</div> -->
             </div>
         </div>
+        <itembody ref="itembodyRef" />
+    <!-- <div class="listdiv"> -->
+        <!-- <div class="listrow" v-for="x in 6" :key="x"> -->
+        <!-- <van-row> -->
+        <!-- <div class="info"></div> -->
+        <!-- <van-row class="lable"> -->
+        <!-- <van-col span="12">检验值</van-col> -->
+        <!-- <van-col span="12" style="text-align: right">血常规</van-col> -->
+        <!-- </van-row> -->
+        <!-- <van-row class="lable"> -->
+        <!-- <van-col span="12">检验值</van-col> -->
+        <!-- <van-col -->
+        <!-- span="12" -->
+        <!-- style="text-align: right; color: #769aff" -->
+        <!-- @click="topath('/reportItem')" -->
+        <!-- >点击查看详情</van-col -->
+        <!-- > -->
+        <!-- </van-row> -->
+        <!-- <van-row class="lable"> -->
+        <!-- <van-col span="12">最新检查日期</van-col> -->
+        <!-- <van-col span="12" style="text-align: right">2022-08-01</van-col> -->
+        <!-- </van-row> -->
+        <!-- </van-row> -->
+        <!-- </div> -->
+    <!-- </div> -->
     </div>
 </template>
 <script lang="ts" setup>
-    import {ref} from 'vue'
-    import {useRouter} from 'vue-router'
-    const router=useRouter()
-    const inputValue=ref('')
-    const topath=(url:string)=>{
-        console.log('sss')
-        router.push(url)
+    import { onMounted, ref } from 'vue'
+    import { Toast } from 'vant'
+    import { userInfoStore } from '@/stores/userInfo'
+    import DateRangePicker from './components/DateRangePicker.vue'
+    import itembody from './item/index.vue'
+    import { ajaxPost } from '@/utils/axios'
+    import { AxiosRequestConfig } from 'axios'
+    const showPopup = ref(false)
+    const userInfo = userInfoStore()
+    const typeName=ref('近三个月')
+    const loading=ref(false)
+    const dataDate=ref({
+        startDate: '',
+        endDate: '',
+    })
+    const reportList=ref(<any>[])
+    const itembodyRef = ref(null)
+    const topath = (row: any) => {
+        console.log('sss',row)
+        itembodyRef.value.showSet(row)
+
     }
-    const fanhui=()=>{
-        router.go(-1)
+    const handleConfirm = (data) => {
+        typeName.value=data.type
+        console.log('Selected date range:', data)
+        dataDate.value.startDate = data.startDate
+        dataDate.value.endDate = data.endDate
+        console.log('dataDate', dataDate.value)
+        getDatas(dataDate.value)
     }
-</script>
-<style scoped lang="scss">
-    .report {
-        background-color: #f6faff;
-        padding: 0;
-
-        .inputdiv {
-            width: 94%;
-            margin-left: 3%;
-            margin-top: 5px;
-
-            .input {
-                width: 100%;
-
-                // height: 33px;
-                border-radius: 22px;
-                border: 1px solid #dadada;
-
-                // line-height: 33px;
-            }
-        }
+    // 格式化日期为 YYYY-MM-DD
+    const formatDate = (date:any) => {
+        const year = date.getFullYear()
+        const month = String(date.getMonth() + 1).padStart(2, '0')
+        const day = String(date.getDate()).padStart(2, '0')
+        return `${year}-${month}-${day}`
     }
 
-    .listdiv {
-        .listrow {
-            margin-top: 10px;
-            width: 94%;
-            margin-left: 3%;
-            background: #fff;
-            box-shadow: 0 2px 4px 0 rgba(70, 150, 249, 0.1);
-            border-radius: 8px;
+    // 排序结果数组
+    function flattenData(data) {
+        const result = []
+        // 遍历每个日期
+        for (const date in data) {
+            if (data.hasOwnProperty(date)) {
+                const groups = data[date]
 
-            .lable {
-                width: 90%;
-                margin-left: 5%;
-                height: 40px;
+                // 遍历每个组别
+                for (const groupName in groups) {
+                    if (groups.hasOwnProperty(groupName)) {
+                        const items = groups[groupName]
 
-                div {
-                    height: 40px;
-                    font-size: 13px;
-                    font-family: Arial, sans-serif;
-                    font-weight: 400;
-                    color: #777;
-                    line-height: 40px;
-                    border-bottom: #f1f1f2 1px solid;
+                        // 创建一个新的对象来存储当前组别的信息
+                        const groupItem = {
+                            date: date,
+                            itemGroupName: groupName,
+                            client_code: items.length > 0 ? items[0].client_code : null, // 假设所有项有相同的client_code
+                            itemGroupItems: items.map(item => (item))
+                        }
+
+                        result.push(groupItem)
+                    }
                 }
             }
         }
+
+        return result
     }
+
+
+    const getDatas=(dataDate)=>{
+        console.log('获取数据', dataDate)
+        console.log(userInfo.patient.patientInfo.code)
+        // const pagedata={
+        // patCode :'PAT9121102427442HIiL',
+        // date1:dataDate.value.startDate,
+        // date2:dataDate.value.endDate,
+        // isGroupByFeeItem:1
+        //
+        // }
+        //
+        // const pasm=`date1=${dataDate.value.startDate}&date2=${dataDate.value.endDate}&isGroupByFeeItem=1&patCode="${userInfo.patient.patientInfo.code}"`
+        // 配置请求头为 x-www-form-urlencoded
+        const config: AxiosRequestConfig = {
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded',
+            },
+        }
+        const pasm=`date1=${dataDate.value.startDate}&date2=${dataDate.value.endDate}&isGroupByFeeItem=1&patCode=PAT9121102427442HIiL`
+        loading.value = true // 开始加载
+        reportList.value=[]
+        const toast = Toast.loading({
+            duration: 0,
+            forbidClick: true,
+            message: '加载中...',
+        })
+
+
+        ajaxPost('/lis/report/getLatestReportByPat',pasm,config).then((re:any)=>{
+            console.log('获取数据', re)
+            console.log(re)
+            const da= flattenData(re)
+            console.log('扁平化数据', da)
+            reportList.value = da
+
+        }).finally(()=>{
+            loading.value = false // 加载完成
+            toast.clear() // 清除加载提示
+        }).catch((error:any)=>{
+            console.error('获取数据失败', error)
+        })
+    }
+    onMounted(() => {
+        const now = new Date()
+        const threeMonthsAgo = new Date(now)
+        threeMonthsAgo.setMonth(now.getMonth() - 3)
+        dataDate.value.startDate = formatDate(threeMonthsAgo)
+        dataDate.value.endDate = formatDate(now)
+        console.log('dataDate', dataDate.value)
+        getDatas()
+    })
+</script>
+<style scoped lang="scss">
+.report {
+    background-color: #b9d0e2;
+    padding: 0;
+
+    .inputdiv {
+        width: 94%;
+        margin-left: 3%;
+        margin-top: 5px;
+
+        .input {
+            width: 100%;
+
+            // height: 33px;
+            border-radius: 22px;
+            border: 1px solid #dadada;
+
+            // line-height: 33px;
+        }
+    }
+}
+
+.listdiv {
+    .listrow {
+        margin-top: 10px;
+        width: 94%;
+        margin-left: 3%;
+        background: #fff;
+        box-shadow: 0 2px 4px 0 rgba(70, 150, 249, 0.1);
+        border-radius: 8px;
+
+        .lable {
+            width: 90%;
+            margin-left: 5%;
+            height: 40px;
+
+            div {
+                height: 40px;
+                font-size: 13px;
+                font-family: Arial, sans-serif;
+                font-weight: 400;
+                color: #777;
+                line-height: 40px;
+                border-bottom: #f1f1f2 1px solid;
+            }
+        }
+    }
+}
+
+.test-list {
+    background-color: #f0f8ff;
+    padding: 10pt;
+}
+
+.test-item {
+    display: flex;
+    align-items: center;
+    background-color: "#ffffff";
+    border-radius: 5pt;
+    margin-bottom: 10pt;
+    padding: 7pt;
+}
+
+.icon {
+    width: 40pt;
+    height: 40pt;
+    margin-right: ptpx;
+}
+
+.content {
+    flex: 1;
+}
+
+.title {
+    padding: 5pt;
+    font-size: 12pt;
+    font-weight: bold;
+}
+
+.date {
+    padding: 5pt;
+    font-size: 12pt;
+    color: #666;
+}
+
+.hospital {
+    font-size: 12pt;
+    color: #666;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/report/item/index.vue b/src/views/report/item/index.vue
index eb19c58..e30c3ef 100644
--- a/src/views/report/item/index.vue
+++ b/src/views/report/item/index.vue
@@ -1,171 +1,139 @@
 <template>
-    <div class="reportItem">
-        <van-nav-bar
-            title=""
-            left-text="返回"
-            left-arrow
-            @click="fanhui"
-        />
-        <div class="tou">
-            <van-row>
-                <van-col span="10">
-                    <span class="lable">姓名:</span>
-                    <span class="value">张三丰</span>
-                </van-col>
-                <van-col span="8">
-                    <span class="lable">性别:</span>
-                    <span class="value">男</span>
-                </van-col>
-                <van-col span="6">
-                    <span class="lable">年龄:</span>
-                    <span class="value">30</span>
-                </van-col>
-                <van-col span="10">
-                    <span class="lable">科别:</span>
-                    <span class="value">体检中心</span>
-                </van-col>
-                <van-col span="14">
-                    <span class="lable">临床诊断:</span>
-                    <span class="value">职业健康查体</span>
-                </van-col>
-            </van-row>
-        </div>
-        <div class="listdiv">
-            <div class="listrow">
-                <van-row class="thclass">
-                    <van-col span="12" style="padding-left: 20px;">检验项目</van-col>
-                    <van-col span="4">结果</van-col>
-                    <van-col span="4">单位</van-col>
-                    <van-col span="4">参考范围</van-col>
-                </van-row>
-                <van-row :class="{ 'tdclass': i % 2,'tdclassb': !(i % 2) }" v-for="i in 15" :key="i">
-                    <van-col span="12" style="padding-left: 20px;">嗜碱性粒细胞绝对值(BA#)</van-col>
-                    <van-col span="4">0.1</van-col>
-                    <van-col span="4">10∧9/L</van-col>
-                    <van-col span="4">3.5-9.5</van-col>
-                </van-row>
+    <div class="blood-test-report">
+        <van-popup v-model:show="showPopup" position="bottom" :style="{ height: '100%' }">
+            <van-nav-bar
+                title=""
+                left-text="返回"
+                left-arrow
+                @click-left="onClickLeft"
+            />
+
+            <div class="report-container">
+                <div class="report-headerda">
+                    <div class="report-header">
+                        <div class="title">{{reportData.itemGroupName}}</div>
+                        <div class="hospital"></div>
+                        <img src="@/assets/xueye.png" alt="Blood Icon" class="blood-icon" />
+                    </div>
+                    <div class="report-details">
+                        <div class="doctor">申请医生:</div>
+                        <div class="date">报告时间:{{reportData.date}}</div>
+                    </div>
+                </div>
+                <table class="report-table">
+                    <thead>
+                        <tr>
+                            <th>检查项</th>
+                            <th>结果</th>
+                            <th>参考值/单位</th>
+                            <!-- <th>趋势图</th> -->
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr v-for="(item, index) in reportData.itemGroupItems" :key="index">
+                            <td>{{ item.item_name }}</td>
+                            <td>{{ item.item_result }} <b style="color: #f56c6c;">{{item.item_result_flag}}</b></td>
+                            <td>{{ item.item_result_ref }}/{{item.item_result_unit}}</td>
+                            <!-- <td><img :src="item.trendIcon" alt="Trend Icon" /></td> -->
+                        </tr>
+                    </tbody>
+                </table>
             </div>
-        </div>
-        <div class="jiao">
-            <van-row>
-                <van-col span="12">
-                    <span class="lable">送检时间:</span>
-                    <span class="value">2022-09-27 16:20</span>
-                </van-col>
-                <van-col span="12">
-                    <span class="lable">报告时间:</span>
-                    <span class="value">2022-09-27 16:50</span>
-                </van-col>
-                <van-col span="12">
-                    <span class="lable">检测医生:</span>
-                    <span class="value">李四</span>
-                </van-col>
-                <van-col span="12">
-                    <span class="lable">审核医生:</span>
-                    <span class="value">王五</span>
-                </van-col>
-                <van-col span="24">
-                    <span class="lable">备注:</span>
-                    <span class="value">本报告仅对此次检验的样本负责</span>
-                </van-col>
-            </van-row>
-        </div>
+        </van-popup>
     </div>
 </template>
-<script lang="ts" setup>
-    import {ref,reactive,watchEffect,watch} from 'vue'
-    import {useRouter} from 'vue-router'
-    const router=useRouter()
-    const fanhui=()=>{
-        router.go(-1)
-    }
-</script>
-<style scoped lang="scss">
-    .reportItem{
-        background-color: #F6FAFF;
-        .tou{
-            padding-top: 10px;
-            padding-left: 20px;
-            height: 66px;
-            box-shadow: 0px 2px 4px 0px rgba(70,150,249,0.1);
-            border-radius: 8px;
-            background: #FFFFFF;
-            div {
-                height: 30px;
-                border-radius: 6px;
-                line-height: 30px;
-                .lable{
-                    font-size: 13px;
-                    font-family: PingFangSC-Regular, PingFang SC;
-                    font-weight: 400;
-                    color: #777777;
-                }
-                .value{
-                    font-size: 13px;
-                    font-family: PingFangSC-Regular, PingFang SC;
-                    font-weight: 400;
-                    color: #333333;
-                }
-            }
-        }
-        .jiao{
-            padding-top: 20px;
-            padding-left: 20px;
-            height: 96px;
-            box-shadow: 0px 2px 4px 0px rgba(70,150,249,0.1);
-            border-radius: 8px;
-            background: #FFFFFF;
-            div {
-                height: 30px;
-                border-radius: 6px;
-                line-height: 30px;
-                .lable{
-                    font-size: 13px;
-                    font-family: PingFangSC-Regular, PingFang SC;
-                    font-weight: 400;
-                    color: #777777;
-                }
-                .value{
-                    font-size: 13px;
-                    font-family: PingFangSC-Regular, PingFang SC;
-                    font-weight: 400;
-                    color: #333333;
-                }
-            }
-        }
-    }
-    .listdiv{
-        .listrow{
-            margin-top: 10px;
-            background: #FFFFFF;
-            .thclass{
-                height:40px;
-                line-height: 40px;
-                font-size: 13px;
-                font-family: PingFangSC-Medium, PingFang SC;
-                font-weight: 500;
-                color: #333333;
 
-            }
-            .tdclass{
-                height:30px;
-                line-height: 30px;
-                font-size: 13px;
-                font-family: PingFangSC-Medium, PingFang SC;
-                font-weight: 400;
-                background: #F0F6FF;
-                color: #777777;
-            }
-            .tdclassb{
-                // padding-left: 20px;
-                height:30px;
-                line-height: 30px;
-                font-size: 13px;
-                font-family: PingFangSC-Medium, PingFang SC;
-                font-weight: 400;
-                background: #FFFFFF;
-                color: #777777;
-            }
-        }
+  <script setup>
+    import { ref } from 'vue'
+    //   import listIoc from '@/assets/listIoc.png';
+
+    const showPopup = ref(false)
+
+    const reportData=ref({
+        date:'',
+        itemGroupName:'',
+        itemGroupItems:[]
+    })
+    const onClickLeft = () => {
+        showPopup.value = false
     }
-</style>
\ No newline at end of file
+    const showSet=(viveData)=>{
+        console.log(viveData)
+        reportData.value=Object.assign({},viveData)
+        showPopup.value=true
+    }
+    defineExpose ({
+        showSet
+    })
+  </script>
+
+  <style scoped>
+    .blood-test-report {
+        text-align: center;
+        background-color: #f0f4f8;
+    }
+
+    .report-container {
+        padding: 10pt;
+        background-color: #f0f4f8;
+        min-height: 100%;
+    }
+
+    .report-headerda {
+        border: 1px solid #ddd;
+        padding: 8px;
+        margin-bottom: 10px;
+    }
+
+    .report-header {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 10px;
+        padding-bottom: 10px;
+        border-bottom: 1pt solid #707070;
+    }
+
+    .title {
+        font-size: 18px;
+        font-weight: bold;
+    }
+
+    .hospital {
+        font-size: 14px;
+        color: #666;
+    }
+
+    .blood-icon {
+        width: 50px;
+        height: 50px;
+    }
+
+    .report-details {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 20px;
+    }
+
+    .doctor,
+    .date {
+        font-size: 14px;
+        color: #666;
+    }
+
+    .report-table {
+        width: 100%;
+        border-collapse: collapse;
+    }
+
+    .report-table th,
+    .report-table td {
+        border: 1px solid #ddd;
+        padding: 8px;
+        text-align: center;
+    }
+
+    .report-table th {
+        background-color: #e6f2ff;
+    }
+  </style>
\ No newline at end of file

--
Gitblit v1.8.0