From 212cabbb1c9bd4d113c739a43e31ef736fece886 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 27 八月 2025 16:01:27 +0800
Subject: [PATCH] 1.设备报修开发联调
---
src/pages/equipmentManagement/repair/add.vue | 157 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 119 insertions(+), 38 deletions(-)
diff --git a/src/pages/equipmentManagement/repair/add.vue b/src/pages/equipmentManagement/repair/add.vue
index 7b865c0..d48202d 100644
--- a/src/pages/equipmentManagement/repair/add.vue
+++ b/src/pages/equipmentManagement/repair/add.vue
@@ -16,7 +16,11 @@
readonly
@click="showDevicePicker"
clearable
- />
+ >
+ <template #right-icon>
+ <van-icon name="scan" @click.stop="startScan" class="scan-icon" />
+ </template>
+ </van-field>
<van-field
v-model="form.deviceModel"
label="瑙勬牸鍨嬪彿"
@@ -86,7 +90,7 @@
</template>
<script setup>
-import { ref, computed, onMounted } from 'vue';
+import { ref, computed, onMounted, onUnmounted } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import PageHeader from '@/components/PageHeader.vue';
import { getDeviceLedger } from '@/api/equipmentManagement/ledger';
@@ -110,6 +114,10 @@
// 璁惧閫夐」
const deviceOptions = ref([]);
const deviceNameText = ref('');
+
+// 鎵爜鐩稿叧鐘舵��
+const isScanning = ref(false);
+const scanTimer = ref(null);
// 琛ㄥ崟楠岃瘉瑙勫垯
const formRules = {
@@ -204,6 +212,108 @@
clearValidate();
};
+// 鎵弿浜岀淮鐮佸姛鑳�
+const startScan = () => {
+ if (isScanning.value) {
+ showToast('姝e湪鎵弿涓紝璇风◢鍊�...');
+ return;
+ }
+
+ // 璋冪敤uni-app鐨勬壂鐮丄PI
+ uni.scanCode({
+ scanType: ['qrCode', 'barCode'],
+ success: (res) => {
+ handleScanResult(res.result);
+ },
+ fail: (err) => {
+ console.error('鎵爜澶辫触:', err);
+ showToast('鎵爜澶辫触锛岃閲嶈瘯');
+ }
+ });
+};
+
+// 澶勭悊鎵爜缁撴灉
+const handleScanResult = (scanResult) => {
+ if (!scanResult) {
+ showToast('鎵爜缁撴灉涓虹┖');
+ return;
+ }
+
+ isScanning.value = true;
+ showToast('鎵爜鎴愬姛锛�3绉掑悗鑷姩濉厖璁惧淇℃伅');
+
+ // 3绉掑悗澶勭悊鎵爜缁撴灉
+ scanTimer.value = setTimeout(() => {
+ processScanResult(scanResult);
+ isScanning.value = false;
+ }, 3000);
+};
+
+// 澶勭悊鎵爜缁撴灉骞跺尮閰嶈澶�
+const processScanResult = (scanResult) => {
+ // 鍦ㄨ澶囧垪琛ㄤ腑鏌ユ壘鍖归厤鐨勮澶�
+ // 鍋囪浜岀淮鐮佸唴瀹规槸璁惧鍚嶇О鎴栬澶囩紪鍙�
+ const matchedDevice = deviceOptions.value.find(device =>
+ device.deviceName === scanResult ||
+ device.deviceCode === scanResult ||
+ device.id.toString() === scanResult
+ );
+
+ if (matchedDevice) {
+ // 鎵惧埌鍖归厤鐨勮澶囷紝鑷姩濉厖
+ form.value.deviceLedgerId = matchedDevice.id;
+ deviceNameText.value = matchedDevice.deviceName;
+ form.value.deviceModel = matchedDevice.deviceModel;
+ showToast('璁惧淇℃伅宸茶嚜鍔ㄥ~鍏�');
+ } else {
+ // 鏈壘鍒板尮閰嶇殑璁惧
+ showToast('鏈壘鍒板尮閰嶇殑璁惧锛岃鎵嬪姩閫夋嫨');
+ }
+};
+
+// 鏄剧ず璁惧閫夋嫨鍣�
+const showDevicePicker = () => {
+ showDevice.value = true;
+};
+
+// 纭璁惧閫夋嫨
+const onDeviceConfirm = ({ selectedValues, selectedOptions }) => {
+ form.value.deviceLedgerId = selectedOptions[0].value;
+ devicePickerValue.value = selectedValues;
+ showDevice.value = false;
+ setDeviceModel(selectedOptions[0].value);
+};
+
+// 鏄剧ず鏃ユ湡閫夋嫨鍣�
+const showDatePicker = () => {
+ showDate.value = true;
+};
+
+// 纭鏃ユ湡閫夋嫨
+const onDateConfirm = ({ selectedValues }) => {
+ form.value.repairTime = selectedValues.join('-');
+ currentDate.value = selectedValues;
+ showDate.value = false;
+};
+
+onShow(() => {
+ // 椤甸潰鏄剧ず鏃惰幏鍙栧弬鏁�
+ getPageParams();
+});
+
+onMounted(() => {
+ // 椤甸潰鍔犺浇鏃惰幏鍙栬澶囧垪琛ㄥ拰鍙傛暟
+ loadDeviceName();
+ getPageParams();
+});
+
+// 缁勪欢鍗歌浇鏃舵竻鐞嗗畾鏃跺櫒
+onUnmounted(() => {
+ if (scanTimer.value) {
+ clearTimeout(scanTimer.value);
+ }
+});
+
// 鎻愪氦琛ㄥ崟
const sendForm = async () => {
try {
@@ -262,42 +372,6 @@
const options = currentPage.options;
return options.id;
};
-
-// 鏄剧ず璁惧閫夋嫨鍣�
-const showDevicePicker = () => {
- showDevice.value = true;
-};
-
-// 纭璁惧閫夋嫨
-const onDeviceConfirm = ({ selectedValues, selectedOptions }) => {
- form.value.deviceLedgerId = selectedOptions[0].value;
- devicePickerValue.value = selectedValues;
- showDevice.value = false;
- setDeviceModel(selectedOptions[0].value);
-};
-
-// 鏄剧ず鏃ユ湡閫夋嫨鍣�
-const showDatePicker = () => {
- showDate.value = true;
-};
-
-// 纭鏃ユ湡閫夋嫨
-const onDateConfirm = ({ selectedValues }) => {
- form.value.repairTime = selectedValues.join('-');
- currentDate.value = selectedValues;
- showDate.value = false;
-};
-
-onShow(() => {
- // 椤甸潰鏄剧ず鏃惰幏鍙栧弬鏁�
- getPageParams();
-});
-
-onMounted(() => {
- // 椤甸潰鍔犺浇鏃惰幏鍙栬澶囧垪琛ㄥ拰鍙傛暟
- loadDeviceName();
- getPageParams();
-});
</script>
<style scoped lang="scss">
@@ -353,4 +427,11 @@
font-size: 12px;
color: #888;
}
+
+.scan-icon {
+ color: #1989fa;
+ font-size: 18px;
+ margin-left: 8px;
+ cursor: pointer;
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.3