From 1fd1cf21f8cd268e6035fbd8f021db0900a1d186 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 25 Mar 2026 17:06:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=AE=BE=E5=A4=87=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=B7=BB=E5=8A=A0=E6=89=AB=E4=B8=80=E6=89=AB=E3=80=81?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/equipment.js | 33 + src/pages/index.vue | 35 +- src/pages_function/pages/equipment/detail.vue | 750 ++++++++++++++---- src/pages_function/pages/equipment/index.vue | 75 +- src/pages_function/pages/keypart/index.vue | 1 - 5 files changed, 695 insertions(+), 199 deletions(-) create mode 100644 src/api/mes/equipment.js diff --git a/src/api/mes/equipment.js b/src/api/mes/equipment.js new file mode 100644 index 0000000..2152385 --- /dev/null +++ b/src/api/mes/equipment.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function getEquipmentDetail(id) { + return request({ + url: '/admin-api/mes/device-ledger/get', + method: 'get', + params: { id } + }) +} + +export function getEquipmentInspectionByDeviceId(deviceId, params = {}) { + return request({ + url: '/admin-api/mes/ticket-management/getInspectionByDeviceId', + method: 'get', + params: { deviceId, ...params } + }) +} + +export function getEquipmentMaintenanceByDeviceId(deviceId, params = {}) { + return request({ + url: '/admin-api/mes/ticket-management/getMaintenanceByDeviceId', + method: 'get', + params: { deviceId, ...params } + }) +} + +export function getEquipmentRepairListByDeviceId(deviceId, params = {}) { + return request({ + url: '/admin-api/mes/dv-repair/getRepairListByDeviceId', + method: 'get', + params: { deviceId, ...params } + }) +} diff --git a/src/pages/index.vue b/src/pages/index.vue index 1dda61e..31a8833 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -14,7 +14,9 @@ - + + {{ badgeText }} + @@ -116,11 +118,18 @@ diff --git a/src/pages_function/pages/equipment/index.vue b/src/pages_function/pages/equipment/index.vue index af3b5b5..e579b97 100644 --- a/src/pages_function/pages/equipment/index.vue +++ b/src/pages_function/pages/equipment/index.vue @@ -31,10 +31,7 @@ - 正在扫描中... - - - + 正在打开扫码... @@ -68,7 +65,6 @@ import { ref } from 'vue'; const equipmentCode = ref(''); const isScanning = ref(false); -const scanProgress = ref(0); function goBack() { uni.navigateBack(); @@ -76,27 +72,38 @@ function goBack() { function startScan() { if (isScanning.value) return; - + isScanning.value = true; - scanProgress.value = 0; - - const duration = 2000; - const interval = 50; - const steps = duration / interval; - let currentStep = 0; - - const timer = setInterval(() => { - currentStep++; - scanProgress.value = Math.min((currentStep / steps) * 100, 100); - - if (currentStep >= steps) { - clearInterval(timer); - setTimeout(() => { - isScanning.value = false; - navigateToDetail('EQ-SCAN-001'); - }, 200); - } - }, interval); + + const finish = () => { + isScanning.value = false; + } + + uni.scanCode({ + onlyFromCamera: true, + scanType: ['qrCode', 'barCode'], + success: (res) => { + const code = String(res?.result || res?.code || res?.qrCode || res?.barCode || '').trim() + if (!code) { + uni.showToast({ title: '未获取到扫码结果', icon: 'none' }) + return + } + navigateToDetail(code) + }, + fail: (err) => { + const msg = String(err?.errMsg || '') + if (msg.includes('cancel')) { + uni.showToast({ title: '已取消扫码', icon: 'none' }) + return + } + if (msg.toLowerCase().includes('not support') || msg.toLowerCase().includes('not supported')) { + uni.showToast({ title: '当前平台不支持扫码', icon: 'none' }) + return + } + uni.showToast({ title: '扫码失败', icon: 'none' }) + }, + complete: finish + }) } function confirmInput() { @@ -113,7 +120,7 @@ function confirmInput() { function navigateToDetail(code) { uni.navigateTo({ - url: `/pages_function/pages/equipment/detail?code=${encodeURIComponent(code)}` + url: `/pages_function/pages/equipment/detail?id=${encodeURIComponent(code)}` }); } @@ -169,7 +176,6 @@ function navigateToDetail(code) { .content-section { padding: 40rpx 30rpx; - margin-top: -40rpx; } .scan-section { @@ -317,21 +323,6 @@ function navigateToDetail(code) { margin-bottom: 30rpx; } -.progress-bar { - width: 400rpx; - height: 8rpx; - background: rgba(255, 255, 255, 0.2); - border-radius: 4rpx; - overflow: hidden; -} - -.progress-fill { - height: 100%; - background: #ff8c00; - border-radius: 4rpx; - transition: width 0.05s linear; -} - .divider { display: flex; align-items: center; diff --git a/src/pages_function/pages/keypart/index.vue b/src/pages_function/pages/keypart/index.vue index 935450d..09ea870 100644 --- a/src/pages_function/pages/keypart/index.vue +++ b/src/pages_function/pages/keypart/index.vue @@ -169,7 +169,6 @@ function navigateToDetail(code) { .content-section { padding: 40rpx 30rpx; - margin-top: -40rpx; } .scan-section {