diff --git a/package-lock.json b/package-lock.json index 8a450bf..445d95b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "device-management-platform", "version": "0.0.1", "dependencies": { + "element-plus": "^2.13.6", "lucide-vue-next": "^0.487.0", "vue": "^3.5.13", "vue-router": "^4.5.0" @@ -65,6 +66,24 @@ "node": ">=6.9.0" } }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", @@ -490,6 +509,31 @@ "node": ">=18" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmmirror.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -552,6 +596,17 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.60.1", "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", @@ -1172,6 +1227,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.4", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", @@ -1292,6 +1368,48 @@ "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", "license": "MIT" }, + "node_modules/@vueuse/core": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-12.0.0.tgz", + "integrity": "sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "12.0.0", + "@vueuse/shared": "12.0.0", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-12.0.0.tgz", + "integrity": "sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-12.0.0.tgz", + "integrity": "sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/chownr/-/chownr-3.0.0.tgz", @@ -1308,6 +1426,12 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1318,6 +1442,32 @@ "node": ">=8" } }, + "node_modules/element-plus": { + "version": "2.13.6", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.13.6.tgz", + "integrity": "sha512-XHgwXr8Fjz6i+6BaqFhAbae/dJbG7bBAAlHrY3pWL7dpj+JcqcOyKYt4Oy5KP86FQwS1k4uIZDjCx2FyUR5lDg==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "12.0.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.23", + "lodash-es": "^4.17.23", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.2.4" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.20.1", "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", @@ -1698,6 +1848,29 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, "node_modules/lucide-vue-next": { "version": "0.487.0", "resolved": "https://registry.npmmirror.com/lucide-vue-next/-/lucide-vue-next-0.487.0.tgz", @@ -1716,6 +1889,12 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz", @@ -1757,6 +1936,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", @@ -2023,6 +2208,12 @@ } } }, + "node_modules/vue-component-type-helpers": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.2.6.tgz", + "integrity": "sha512-O02tnvIfOQVmnvoWwuSydwRoHjZVt8UEBR+2p4rT35p8GAy5VTlWP8o5qXfJR/GWCN0nVZoYWsVUvx2jwgdBmQ==", + "license": "MIT" + }, "node_modules/vue-router": { "version": "4.6.4", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", diff --git a/package.json b/package.json index e3bb7bd..ba7eb08 100644 --- a/package.json +++ b/package.json @@ -9,13 +9,14 @@ "preview": "vite preview" }, "dependencies": { + "element-plus": "^2.13.6", + "lucide-vue-next": "^0.487.0", "vue": "^3.5.13", - "vue-router": "^4.5.0", - "lucide-vue-next": "^0.487.0" + "vue-router": "^4.5.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.2.3", "@tailwindcss/vite": "4.1.12", + "@vitejs/plugin-vue": "^5.2.3", "tailwindcss": "4.1.12", "vite": "6.3.5" } diff --git a/src/app/components/Sidebar.vue b/src/app/components/Sidebar.vue index a438054..f832c0a 100644 --- a/src/app/components/Sidebar.vue +++ b/src/app/components/Sidebar.vue @@ -35,7 +35,7 @@ diff --git a/src/app/pages/CalibrationRecords.vue b/src/app/pages/CalibrationRecords.vue index 7a02ac9..ef0afc0 100644 --- a/src/app/pages/CalibrationRecords.vue +++ b/src/app/pages/CalibrationRecords.vue @@ -93,10 +93,6 @@ const getStatusStyle = (status: CalibrationRecord['status']) => {
待校准采集板
23
-
-
校准中
-
8
-
校准即将到期
15
@@ -185,7 +181,7 @@ const getStatusStyle = (status: CalibrationRecord['status']) => {
- +
diff --git a/src/app/pages/ConfigFileManagement.vue b/src/app/pages/ConfigFileManagement.vue index a3fed9e..d9985c3 100644 --- a/src/app/pages/ConfigFileManagement.vue +++ b/src/app/pages/ConfigFileManagement.vue @@ -170,7 +170,6 @@ const getStatusStyle = (status: ConfigFile['status']) => {
-
diff --git a/src/app/pages/Dashboard.vue b/src/app/pages/Dashboard.vue index 931e196..d9381f5 100644 --- a/src/app/pages/Dashboard.vue +++ b/src/app/pages/Dashboard.vue @@ -82,7 +82,7 @@ import { TrendingUp, TrendingDown, Server, Wifi, CheckCircle, PackageCheck, Wren const metrics = [ { label: '设备总数', value: '5,234', trend: 'up' as const, trendValue: '+5.2%', color: '#4a7c59', icon: Server, link: '/devices' }, { label: '装配中', value: '4,856', trend: 'up' as const, trendValue: '+2.8%', color: '#52C41A', icon: Wifi, link: '/devices' }, - { label: '已激活', value: '4,912', trend: 'up' as const, trendValue: '+1.5%', color: '#4a7c59', icon: CheckCircle, link: '/activation' }, + { label: '已激活', value: '4,912', trend: 'up' as const, trendValue: '+1.5%', color: '#4a7c59', icon: CheckCircle, link: '/devices' }, { label: '有新版本', value: '156', color: '#722ED1', icon: PackageCheck, link: '/firmware' }, { label: '维修中', value: '23', trend: 'down' as const, trendValue: '-12.3%', color: '#FF4D4F', icon: Wrench, link: '/repair' }, { label: '报废', value: '56', color: '#FA8C16', icon: Target, link: '/scrap' }, @@ -100,10 +100,10 @@ const maxStatusValue = computed(() => Math.max(...deviceStatusData.map((d) => d. const taskGroups = [ { - title: '待校准设备', count: 23, link: '/calibration', + title: '校准即将到期', count: 23, link: '/calibration', tasks: [ { deviceSN: 'AC20240308005', description: '采集板校准即将到期', time: '3天后到期', link: '/calibration' }, - { deviceSN: 'AC20240308006', description: '新采集板待校准', time: '今天', link: '/calibration' }, + { deviceSN: 'AC20240308006', description: '采集板校准即将到期', time: '今天到期', link: '/calibration' }, ], }, { diff --git a/src/app/pages/DeviceDetail.vue b/src/app/pages/DeviceDetail.vue index d7845c3..dbff0c0 100644 --- a/src/app/pages/DeviceDetail.vue +++ b/src/app/pages/DeviceDetail.vue @@ -112,7 +112,15 @@
-

装配记录

+
+

装配记录

+ +
+
装配工单
diff --git a/src/app/pages/DeviceModelManagement.vue b/src/app/pages/DeviceModelManagement.vue index e5d3928..6872813 100644 --- a/src/app/pages/DeviceModelManagement.vue +++ b/src/app/pages/DeviceModelManagement.vue @@ -170,6 +170,25 @@ const boardVersionData = [ status: 'active', }, ] + +// Checklist template drawer state +const showChecklistDrawer = ref(false) +const newTplModel = ref('GD30') +const newTplItems = ref<{ text: string }[]>([{ text: '' }]) + +const openChecklistDrawer = () => { + newTplModel.value = 'GD30' + newTplItems.value = [{ text: '' }] + showChecklistDrawer.value = true +} + +const addTplItem = () => { + newTplItems.value.push({ text: '' }) +} + +const removeTplItem = (index: number) => { + newTplItems.value.splice(index, 1) +} \ No newline at end of file diff --git a/src/app/pages/DeviceRegistration.vue b/src/app/pages/DeviceRegistration.vue index eb59565..54b7c57 100644 --- a/src/app/pages/DeviceRegistration.vue +++ b/src/app/pages/DeviceRegistration.vue @@ -65,7 +65,7 @@ const checklistItems = ref([ const bomData = [ { code: 'MB-2024-001', name: '主控板', sn: 'MB20240308001', spec: 'GD30-MB-V2.3', calibration: '无需校准', quantity: 1 }, - { code: 'RX-2024-002', name: '采集板', sn: 'RX20240308002', spec: 'GD30-RX-V1.8', calibration: '已校准', quantity: 2 }, + { code: 'RX-2024-002', name: '采集板', sn: 'RX20240308001、RX20240308002', spec: 'GD30-RX-V1.8', calibration: '已校准', quantity: 2 }, { code: 'MC-2024-003', name: '测控板', sn: 'MC20240308003', spec: 'GD30-MC-V1.5', calibration: '无需校准', quantity: 1 }, { code: 'TX-2024-003', name: '发射板', sn: 'TX20240308003', spec: 'GD30-TX-V1.5', calibration: '无需校准', quantity: 1 }, { code: 'BO-2024-004', name: '升压板', sn: 'BO20240308004', spec: 'BP600', calibration: '无需校准', quantity: 1 }, @@ -132,12 +132,6 @@ const toggleChecklistItem = (id: number) => { placeholder="请输入主板SN号" value="MB20240308001" /> - - 已绑定 -
diff --git a/src/app/pages/FirmwareLibrary.vue b/src/app/pages/FirmwareLibrary.vue index 0cd8279..95fa65a 100644 --- a/src/app/pages/FirmwareLibrary.vue +++ b/src/app/pages/FirmwareLibrary.vue @@ -1,7 +1,10 @@ @@ -137,5 +248,70 @@ const firmwares = ref([
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 已签名 + + + + + +
点击或拖拽 ZIP 文件到此处
+
+
+ + + + + +
+ + + +
- + \ No newline at end of file diff --git a/src/app/pages/ScrapManagement.vue b/src/app/pages/ScrapManagement.vue index 6645020..ffd82a9 100644 --- a/src/app/pages/ScrapManagement.vue +++ b/src/app/pages/ScrapManagement.vue @@ -1,164 +1,143 @@