236 lines
6.7 KiB
Vue
Raw Normal View History

2025-04-14 10:57:27 +08:00
<template>
<view class="container">
<view class="form-panel">
<uni-forms ref="ebikeInfoForm" :modelValue="ebikeInfo" labelWidth="100px">
<uni-section title="车辆" type="line">
2025-05-20 14:30:55 +08:00
<uni-forms-item label="车辆编号" required name="bikeCode"
:rules="[{ required: true, errorMessage: '请扫描或输入车辆编号' }]">
<bikeCodeScan @scan-change="bikeCodeScanChange" :codeValue="ebikeInfo.bikeCode"
ref="bikeCodeScanRef" />
2025-04-14 10:57:27 +08:00
</uni-forms-item>
2025-05-20 14:30:55 +08:00
<uni-forms-item label="车辆型号" required name="bikeModel"
:rules="[{ required: true, errorMessage: '请输入车辆型号' }]">
2025-04-14 10:57:27 +08:00
<uni-easyinput v-model="ebikeInfo.bikeModel" placeholder="请输入车辆型号" />
</uni-forms-item>
<uni-forms-item label="车牌号" name="bikeNumber">
<uni-easyinput v-model="ebikeInfo.bikeNumber" placeholder="请输入车牌号" />
</uni-forms-item>
</uni-section>
<uni-section title="中控" type="line">
2025-05-20 14:30:55 +08:00
<uni-forms-item label="中控编号" required :name="['ebikeEcuInfo','ecuCode']"
:rules="[{ required: true, errorMessage: '请扫描或输入中控编号' }]">
2025-04-14 10:57:27 +08:00
<ecuCodeScan @scan-change="ecuCodeScanChange" :codeValue="ebikeInfo.ebikeEcuInfo.ecuCode" />
</uni-forms-item>
2025-05-20 14:30:55 +08:00
<uni-forms-item label="中控序列号" required :name="['ebikeEcuInfo','ecuSN']"
:rules="[{ required: true, errorMessage: '请输入中控序列号' }]">
<uni-easyinput v-model="ebikeInfo.ebikeEcuInfo.ecuSN" placeholder="请输入中控序列号" />
2025-04-14 10:57:27 +08:00
</uni-forms-item>
2025-05-20 14:30:55 +08:00
<uni-forms-item label="中控品牌" required :name="['ebikeEcuInfo','ecuModel']"
:rules="[{ required: true, errorMessage: '请选择中控品牌' }]">
<uni-data-select v-model="ebikeInfo.ebikeEcuInfo.ecuModel" :localdata="ecuModelRange"
@change="ecuModelChange" placeholder="请选择中控品牌"></uni-data-select>
2025-04-14 10:57:27 +08:00
</uni-forms-item>
</uni-section>
<uni-section title="电池" type="line">
2025-05-20 14:30:55 +08:00
<uni-forms-item label="电池编号" required :name="['ebikeBatteryInfo','batteryCode']"
:rules="[{ required: true, errorMessage: '请扫描或输入电池编号' }]">
<scanCode @scan-change="batteryCodeScanChange"
2025-05-20 14:30:55 +08:00
:codeValue="ebikeInfo.ebikeBatteryInfo.batteryCode" />
2025-04-14 10:57:27 +08:00
</uni-forms-item>
</uni-section>
<uni-section title="头盔" type="line">
<uni-forms-item label="头盔编号" :name="['ebikeHelmetInfo','helmetCode']">
<scanCode @scan-change="helmetCodeScanChange"
2025-05-20 14:30:55 +08:00
:codeValue="ebikeInfo.ebikeHelmetInfo.helmetCode" />
2025-04-14 10:57:27 +08:00
</uni-forms-item>
</uni-section>
</uni-forms>
</view>
</view>
<view class="nav-panel">
<c-uni-goods-nav :fill="true" :options="[]" :buttonGroup="navButtonGroup" @buttonClick="navButtonClick" />
</view>
</template>
<script setup>
2025-05-20 14:30:55 +08:00
import {
ref,
reactive
} from 'vue';
2025-04-14 10:57:27 +08:00
import * as api from '@/utils/api.js';
2025-05-20 14:30:55 +08:00
import {
showModelMessage
} from '@/utils/tools';
2025-04-14 10:57:27 +08:00
const ebikeInfoForm = ref(null);
const bikeCodeScanRef = ref(null);
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
const ebikeInfo = ref({
bikeCode: '',
bikeModel: '',
2025-05-20 14:30:55 +08:00
bikeNumber: '',
2025-04-14 10:57:27 +08:00
ebikeEcuInfo: {
ecuCode: '',
ecuSN: '',
ecuModel: ''
},
ebikeBatteryInfo: {
batteryCode: ''
},
ebikeHelmetInfo: {
helmetCode: ''
}
});
2025-05-20 14:30:55 +08:00
const ecuModelRange = [{
value: "乐摇摇",
text: "乐摇摇"
},
{
value: "美团",
text: "美团"
}
]
2025-04-14 10:57:27 +08:00
const navButtonGroup = reactive([{
text: '入库',
backgroundColor: '#0078D4',
color: '#fff',
disable: false
2025-05-20 14:30:55 +08:00
}]);
const navButtonClick = (e) => {
2025-04-14 10:57:27 +08:00
const index = e.index;
//navButtonGroup[index].disable = true;
2025-05-20 14:30:55 +08:00
if (index == 0) {
2025-04-14 10:57:27 +08:00
if (ebikeInfoForm.value) { // 确保表单元素已挂载
ebikeInfoForm.value.validate().then((res) => {
handleSubmit();
}).catch((err) => {
//console.log('err', err);
});
} else {
//console.error('Form element is not available'); // 调试信息,以防万一
}
}
}
2025-05-20 14:30:55 +08:00
const ecuModelChange = (value) => {
2025-04-14 10:57:27 +08:00
ebikeInfo.value.ebikeEcuInfo.ecuModel = value;
};
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
const handleSubmit = () => {
2025-05-20 14:30:55 +08:00
const params = ebikeInfo.value;
api.callEbikeInfo("saveEbikeInfo", params).then((res) => {
2025-04-14 10:57:27 +08:00
uni.showToast({
title: "入库成功",
icon: 'success',
duration: 5000,
success: (res) => {
2025-05-20 14:30:55 +08:00
setTimeout(function() {
uni.navigateBack();
2025-04-14 10:57:27 +08:00
}, 5000);
}
});
2025-05-20 14:30:55 +08:00
}).catch((err) => {
uni.showToast({
title: "入库失败",
icon: 'error',
duration: 5000
});
});
2025-04-14 10:57:27 +08:00
};
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
let timer;
const bikeCodeScanChange = (data) => {
2025-05-20 14:30:55 +08:00
// clearTimeout(timer);
2025-04-14 10:57:27 +08:00
ebikeInfo.value.bikeCode = data;
2025-05-20 14:30:55 +08:00
if (!data) return;
// timer = setTimeout(function() {
api.callEbikeInfo("getBikeINfoData?bikeCode=" + data).then((res) => {
if (res.code == 200 && res.data && res.data.bikeId) {
showModelMessage("车辆信息已存在!")
ebikeInfo.value.bikeCode = "";
bikeCodeScanRef.value.onSetValue("");
} else {
api.callOperateApi("ebikeBikeQrcode/checkBikeCodeExistence?bikeCode=" + data, {},
"get").then(res => {
if (res.code == 200) {
if (res.data > 0) {
ebikeInfo.value.bikeCode = data;
} else {
ebikeInfo.value.bikeCode = "";
bikeCodeScanRef.value.onSetValue("");
2025-05-22 17:37:49 +08:00
showModelMessage("车辆编号二维码未生成,请重新扫码或输入!")
2025-05-20 14:30:55 +08:00
}
}
})
}
}).catch((err) => {
ebikeInfo.value.bikeCode = data;
});
// }, 1000);
2025-04-14 10:57:27 +08:00
};
const ecuCodeScanChange = (data) => {
ebikeInfo.value.ebikeEcuInfo.ecuCode = data["imei"];
ebikeInfo.value.ebikeEcuInfo.ecuSN = data["sn"];
};
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
const batteryCodeScanChange = (data) => {
2025-05-22 17:37:49 +08:00
if (!data) return;
api.callOperateApi("ebikeBatteryQrcode/checkbatteryCodeExistence?batteryCode=" + data, {},
"get").then(res => {
if (res.code == 200) {
if (res.data > 0) {
ebikeInfo.value.ebikeBatteryInfo.batteryCode = data;
} else {
ebikeInfo.value.ebikeBatteryInfo.batteryCode = "";
showModelMessage("电池二维码未生成,请重新扫码或输入!")
}
}
})
2025-04-14 10:57:27 +08:00
};
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
const helmetCodeScanChange = (data) => {
2025-05-22 17:37:49 +08:00
if (!data) return;
api.callOperateApi("ebikeHelmetQrcode/checkhelmetCodeExistence?helmetCode=" + data, {},
2025-05-20 14:30:55 +08:00
"get").then(res => {
if (res.code == 200) {
if (res.data > 0) {
ebikeInfo.value.ebikeHelmetInfo.helmetCode = data;
} else {
ebikeInfo.value.ebikeHelmetInfo.helmetCode = "";
// bikeCodeScanRef.value.onSetValue("");
2025-05-22 17:37:49 +08:00
showModelMessage("头盔二维码未生成,请重新扫码或输入!")
2025-05-20 14:30:55 +08:00
}
}
})
2025-04-14 10:57:27 +08:00
};
</script>
<style>
.container {
padding: 15px;
background-color: #fff;
}
2025-05-20 14:30:55 +08:00
2025-04-14 10:57:27 +08:00
/* 全局样式 */
2025-05-20 14:30:55 +08:00
/* .uni-forms .uni-forms-item__label {
2025-04-14 10:57:27 +08:00
width: 100px !important;
} */
2025-05-20 14:30:55 +08:00
.form-panel {
2025-04-14 10:57:27 +08:00
padding-bottom: 55px;
}
2025-05-20 14:30:55 +08:00
.nav-panel {
2025-04-14 10:57:27 +08:00
position: fixed;
bottom: 0rpx;
width: 100%;
padding-bottom: 10px;
z-index: 999;
2025-05-20 14:30:55 +08:00
background-color: #fff;
2025-04-14 10:57:27 +08:00
}
2025-05-20 14:30:55 +08:00
</style>