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