fix:修改部分功能

This commit is contained in:
5g0Wp7Zy 2025-07-10 14:43:10 +08:00
parent e24b20bd06
commit 1b9aa5d30d
4 changed files with 1381 additions and 1061 deletions

View File

@ -1,61 +1,56 @@
<template> <template>
<view> <view>
<uni-easyinput class="uni-mt-5" @blur="onInput" v-model="inputCodeValue" placeholder="请扫描或输入车辆编号" <uni-easyinput
suffixIcon="scan" @iconClick="onScan"> class="uni-mt-5"
</uni-easyinput> @blur="onInput"
</view> v-model="inputCodeValue"
placeholder="请扫描或输入车辆编号"
suffixIcon="scan"
@iconClick="onScan"
>
</uni-easyinput>
</view>
</template> </template>
<script setup> <script setup>
import { import { ref, onMounted } from "vue";
ref, import { showModelMessage, getUrlParams } from "@/utils/tools.js";
onMounted
} from 'vue';
import {
showModelMessage,
getUrlParams
} from '@/utils/tools.js';
const inputCodeValue = ref(''); const inputCodeValue = ref("");
const { const { codeValue } = defineProps(["codeValue"]);
codeValue inputCodeValue.value = codeValue;
} = defineProps(["codeValue"]);
inputCodeValue.value = codeValue;
const emit = defineEmits(['scan-change']); const emit = defineEmits(["scan-change"]);
const onScan = () => { const onScan = () => {
uni.scanCode({ uni.scanCode({
onlyFromCamera: true, // onlyFromCamera: true, //
scanType: ["qrCode"], scanType: ["qrCode"],
success: function(res) { success: function (res) {
const { const { result } = res;
result if (!result || result.indexOf("number") == -1) {
} = res; showModelMessage("无效的车辆二维码");
if (!result || result.indexOf("number") == -1) { inputCodeValue.value = "";
showModelMessage("无效的车辆二维码"); emit("scan-change", "");
inputCodeValue.value = ""; } else {
emit('scan-change', ""); const params = getUrlParams(result);
} else { inputCodeValue.value = params["number"];
const params = getUrlParams(result); emit("scan-change", params["number"]);
inputCodeValue.value = params["number"]; }
emit('scan-change', params["number"]); },
} });
} };
}) const onInput = (value) => {
}; console.log(value, "onInput");
const onInput = (value) => { if (value.detail.value == "") return;
if (value.detail.value == "") return; inputCodeValue.value = value.detail.value;
inputCodeValue.value = value.detail.value; emit("scan-change", value.detail.value);
emit('scan-change', value.detail.value); };
}
const onSetValue = (value) => { const onSetValue = (value) => {
inputCodeValue.value = value; inputCodeValue.value = value;
} };
defineExpose({ defineExpose({
onSetValue onSetValue,
}); });
</script> </script>
<style> <style></style>
</style>

File diff suppressed because it is too large Load Diff

View File

@ -6,9 +6,12 @@
:default-page-no="1" :default-page-no="1"
:default-page-size="5" :default-page-size="5"
:auto-show-back-to-top="true" :auto-show-back-to-top="true"
:paging-style="{
'background-color': ' #f3f4f6',
}"
> >
<template #top> <template #top>
<view class="flex"> <view class="flex" style="background-color: white">
<view class="search"> <view class="search">
<uni-search-bar <uni-search-bar
radius="5" radius="5"
@ -245,7 +248,7 @@ const sjztlist = ref([
const paging = ref(null); const paging = ref(null);
const status = ref("more"); //,more,loadingnoMore const status = ref("more"); //,more,loadingnoMore
const selectedItems = ref([]); const selectedItems = ref(["12123123"]);
const usableHeight = ref(0); const usableHeight = ref(0);
onMounted(() => { onMounted(() => {
// //
@ -480,7 +483,7 @@ const navButtonClick = (res) => {
<style scoped> <style scoped>
.container { .container {
padding: 10px 0px 0px 0px; padding: 10px 0px 0px 0px;
background-color: #f3f4f6; /* background-color: #f3f4f6; */
} }
.list-title { .list-title {

View File

@ -1,280 +1,355 @@
<template> <template>
<view class="container"> <view class="container">
<view class="form-panel"> <view class="form-panel">
<uni-forms ref="ebikeInfoForm" :modelValue="ebikeInfo" labelWidth="100px"> <uni-forms ref="ebikeInfoForm" :modelValue="ebikeInfo" labelWidth="100px">
<uni-section title="车辆" type="line"> <uni-section title="车辆" type="line">
<uni-forms-item label="车辆编号" required name="bikeCode" <uni-forms-item
:rules="[{ required: true, errorMessage: '请扫描或输入车辆编号' }]"> label="车辆编号"
<bikeCodeScan @scan-change="bikeCodeScanChange" :codeValue="ebikeInfo.bikeCode" required
ref="bikeCodeScanRef" /> name="bikeCode"
</uni-forms-item> :rules="[{ required: true, errorMessage: '请扫描或输入车辆编号' }]"
<uni-forms-item label="车辆型号" required name="bikeModel" >
:rules="[{ required: true, errorMessage: '请输入车辆型号' }]"> <bikeCodeScan
<uni-easyinput v-model="ebikeInfo.bikeModel" placeholder="请输入车辆型号" /> @scan-change="bikeCodeScanChange"
</uni-forms-item> :codeValue="ebikeInfo.bikeCode"
<uni-forms-item label="车牌号" name="bikeNumber"> ref="bikeCodeScanRef"
<uni-easyinput v-model="ebikeInfo.bikeNumber" placeholder="请输入车牌号" /> />
</uni-forms-item> </uni-forms-item>
</uni-section> <uni-forms-item
<uni-section title="中控" type="line"> label="车辆型号"
<uni-forms-item label="中控IMEI" required :name="['ebikeEcuInfo','ecuCode']" required
:rules="[{ required: true, errorMessage: '请扫描或输入中控IMEI' }]"> name="bikeModel"
<ecuCodeScan @scan-change="ecuCodeScanChange" :codeValue="ebikeInfo.ebikeEcuInfo.ecuCode" :rules="[{ required: true, errorMessage: '请输入车辆型号' }]"
ref="ecuCodeScan_zk" /> >
</uni-forms-item> <uni-easyinput
<uni-forms-item label="中控SN" required :name="['ebikeEcuInfo','ecuSn']" v-model="ebikeInfo.bikeModel"
:rules="[{ required: true, errorMessage: '请输入中控SN' }]"> placeholder="请输入车辆型号"
<uni-easyinput v-model="ebikeInfo.ebikeEcuInfo.ecuSn" placeholder="请输入中控SN" /> />
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="中控品牌" required :name="['ebikeEcuInfo','ecuModel']" <uni-forms-item label="车牌号" name="bikeNumber">
:rules="[{ required: true, errorMessage: '请选择中控品牌' }]"> <uni-easyinput
<uni-data-select v-model="ebikeInfo.ebikeEcuInfo.ecuModel" :localdata="ecuModelRange" v-model="ebikeInfo.bikeNumber"
@change="ecuModelChange" placeholder="请选择中控品牌"></uni-data-select> placeholder="请输入车牌号"
</uni-forms-item> />
</uni-section> </uni-forms-item>
<uni-section title="电池" type="line"> </uni-section>
<uni-forms-item label="电池编号" required :name="['ebikeBatteryInfo','batteryCode']" <uni-section title="中控" type="line">
:rules="[{ required: true, errorMessage: '请扫描或输入电池编号' }]"> <uni-forms-item
<scanCode @scan-change="batteryCodeScanChange" label="中控IMEI"
:codeValue="ebikeInfo.ebikeBatteryInfo.batteryCode" ref="scanCode_dc" /> required
</uni-forms-item> :name="['ebikeEcuInfo', 'ecuCode']"
</uni-section> :rules="[{ required: true, errorMessage: '请扫描或输入中控IMEI' }]"
<uni-section title="头盔" type="line"> >
<uni-forms-item label="头盔编号" :name="['ebikeHelmetInfo','helmetCode']"> <ecuCodeScan
<scanCode @scan-change="helmetCodeScanChange" :codeValue="ebikeInfo.ebikeHelmetInfo.helmetCode" @scan-change="ecuCodeScanChange"
ref="scanCode_tk" /> :codeValue="ebikeInfo.ebikeEcuInfo.ecuCode"
</uni-forms-item> ref="ecuCodeScan_zk"
</uni-section> />
</uni-forms> </uni-forms-item>
</view> <uni-forms-item
</view> label="中控SN"
<view class="nav-panel"> required
<c-uni-goods-nav :fill="true" :options="[]" :buttonGroup="navButtonGroup" @buttonClick="navButtonClick" /> :name="['ebikeEcuInfo', 'ecuSn']"
</view> :rules="[{ required: true, errorMessage: '请输入中控SN' }]"
>
<uni-easyinput
v-model="ebikeInfo.ebikeEcuInfo.ecuSn"
placeholder="请输入中控SN"
/>
</uni-forms-item>
<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>
</uni-forms-item>
</uni-section>
<uni-section title="电池" type="line">
<uni-forms-item
label="电池编号"
required
:name="['ebikeBatteryInfo', 'batteryCode']"
:rules="[{ required: true, errorMessage: '请扫描或输入电池编号' }]"
>
<scanCode
@scan-change="batteryCodeScanChange"
:codeValue="ebikeInfo.ebikeBatteryInfo.batteryCode"
ref="scanCode_dc"
/>
</uni-forms-item>
</uni-section>
<uni-section title="头盔" type="line">
<uni-forms-item
label="头盔编号"
:name="['ebikeHelmetInfo', 'helmetCode']"
>
<scanCode
@scan-change="helmetCodeScanChange"
:codeValue="ebikeInfo.ebikeHelmetInfo.helmetCode"
ref="scanCode_tk"
/>
</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> </template>
<script setup> <script setup>
import { import { ref, reactive } from "vue";
ref, import * as api from "@/utils/api.js";
reactive import { showModelMessage } from "@/utils/tools";
} from 'vue'; const ebikeInfoForm = ref(null);
import * as api from '@/utils/api.js'; const bikeCodeScanRef = ref(null);
import { const ecuCodeScan_zk = ref(null);
showModelMessage const scanCode_dc = ref(null);
} from '@/utils/tools'; const scanCode_tk = ref(null);
const ebikeInfoForm = ref(null);
const bikeCodeScanRef = ref(null);
const ecuCodeScan_zk = ref(null);
const scanCode_dc = ref(null);
const scanCode_tk = ref(null);
const ebikeInfo = ref({ const ebikeInfo = ref({
bikeCode: '', bikeCode: "",
bikeModel: '', bikeModel: "",
bikeNumber: '', bikeNumber: "",
ebikeEcuInfo: { ebikeEcuInfo: {
ecuCode: '', ecuCode: "",
ecuSn: '', ecuSn: "",
ecuModel: '' ecuModel: "",
}, },
ebikeBatteryInfo: { ebikeBatteryInfo: {
batteryCode: '' batteryCode: "",
}, },
ebikeHelmetInfo: { ebikeHelmetInfo: {
helmetCode: '' helmetCode: "",
} },
}); });
const ecuModelRange = [{ const ecuModelRange = [
value: "乐摇摇", {
text: "乐摇摇" value: "乐摇摇",
}, text: "乐摇摇",
{ },
value: "美团", {
text: "美团" value: "美团",
} text: "美团",
] },
];
const navButtonGroup = reactive([{ const navButtonGroup = reactive([
text: '入库', {
backgroundColor: '#0078D4', text: "入库",
color: '#fff', backgroundColor: "#0078D4",
disable: false color: "#fff",
}]); disable: false,
},
]);
const navButtonClick = (e) => { const navButtonClick = (e) => {
const index = e.index; const index = e.index;
//navButtonGroup[index].disable = true; //navButtonGroup[index].disable = true;
if (index == 0) { if (index == 0) {
if (ebikeInfoForm.value) { // if (ebikeInfoForm.value) {
ebikeInfoForm.value.validate().then((res) => { //
handleSubmit(); ebikeInfoForm.value
}).catch((err) => { .validate()
//console.log('err', err); .then((res) => {
}); handleSubmit();
} else { })
//console.error('Form element is not available'); // .catch((err) => {
} //console.log('err', err);
} });
} } else {
//console.error('Form element is not available'); //
}
}
};
const ecuModelChange = (value) => { const ecuModelChange = (value) => {
ebikeInfo.value.ebikeEcuInfo.ecuModel = value; ebikeInfo.value.ebikeEcuInfo.ecuModel = value;
}; };
const handleSubmit = () => { const handleSubmit = () => {
const params = ebikeInfo.value; const params = ebikeInfo.value;
api.callEbikeInfo("saveEbikeInfo", params).then((res) => { api
uni.showToast({ .callEbikeInfo("saveEbikeInfo", params)
title: "入库成功", .then((res) => {
icon: 'success', uni.showToast({
duration: 5000, title: "入库成功",
success: (res) => { icon: "success",
setTimeout(function() { duration: 5000,
uni.navigateBack(); success: (res) => {
}, 5000); setTimeout(function () {
} uni.navigateBack();
}); }, 5000);
}).catch((err) => { },
uni.showToast({ });
title: "入库失败", })
icon: 'error', .catch((err) => {
duration: 5000 uni.showToast({
}); title: "入库失败",
}); icon: "error",
}; duration: 5000,
});
});
};
let timer; let timer;
const bikeCodeScanChange = (data) => { const bikeCodeScanChange = (data) => {
// clearTimeout(timer); // clearTimeout(timer);
ebikeInfo.value.bikeCode = data; ebikeInfo.value.bikeCode = data;
if (!data) return; if (!data) return;
// timer = setTimeout(function() { // timer = setTimeout(function() {
api.callEbikeInfo("getBikeINfoData?bikeCode=" + data).then((res) => { api
if (res.code == 200 && res.data && res.data.bikeId) { .callEbikeInfo("getBikeINfoData?bikeCode=" + data)
showModelMessage("车辆信息已存在!") .then((res) => {
ebikeInfo.value.bikeCode = ""; if (res.code == 200 && res.data && res.data.bikeId) {
bikeCodeScanRef.value.onSetValue(""); showModelMessage("车辆信息已存在!");
} else { ebikeInfo.value.bikeCode = "";
api.callOperateApi("ebikeBikeQrcode/checkBikeCodeExistence?bikeCode=" + data, {}, bikeCodeScanRef.value.onSetValue("");
"get").then(res => { } else {
if (res.code == 200) { api
if (res.data > 0) { .callOperateApi(
ebikeInfo.value.bikeCode = data; "ebikeBikeQrcode/checkBikeCodeExistence?bikeCode=" + data,
} else { {},
ebikeInfo.value.bikeCode = ""; "get"
bikeCodeScanRef.value.onSetValue(""); )
showModelMessage("车辆编号二维码未生成,请重新扫码或输入!") .then((res) => {
} if (res.code == 200) {
} if (res.data > 0) {
ebikeInfo.value.bikeCode = data;
} else {
ebikeInfo.value.bikeCode = "";
bikeCodeScanRef.value.onSetValue("");
showModelMessage("车辆编号二维码未生成,请重新扫码或输入!");
}
}
});
}
})
.catch((err) => {
ebikeInfo.value.bikeCode = data;
});
// }, 1000);
};
const ecuCodeScanChange = (data) => {
console.log(data);
let code = data["imei"] || data["sn"];
// if (!data["sn"]) return;
}) const params = {
} componentCode: code,
}).catch((err) => { componentType: "262711452730008", //
ebikeInfo.value.bikeCode = data; };
}); console.log(params);
// }, 1000);
};
const ecuCodeScanChange = (data) => {
if (!data["sn"]) return;
const params = { api
"componentCode": data["sn"], .callOperateApi("ebikeComponent/validateComponentExistence", params)
"componentType": "262711452730008" // .then((res) => {
} if (res.code == 200) {
if (res.data) {
ebikeInfo.value.ebikeEcuInfo.ecuCode = data["imei"];
ebikeInfo.value.ebikeEcuInfo.ecuSn = data["sn"];
} else {
ebikeInfo.value.ebikeEcuInfo.ecuCode = "";
ebikeInfo.value.ebikeEcuInfo.ecuSn = "";
ecuCodeScan_zk.value.onSetValue("");
showModelMessage("中控不在仓库中,请重新扫码或输入!");
}
} else {
ebikeInfo.value.ebikeEcuInfo.ecuCode = "";
ebikeInfo.value.ebikeEcuInfo.ecuSn = "";
ecuCodeScan_zk.value.onSetValue("");
showModelMessage("操作失败!");
}
});
};
api.callOperateApi("ebikeComponent/validateComponentExistence", params).then(res => { const batteryCodeScanChange = (data) => {
if (res.code == 200) { if (!data) return;
if (res.data) { const params = {
ebikeInfo.value.ebikeEcuInfo.ecuCode = data["imei"]; componentCode: data,
ebikeInfo.value.ebikeEcuInfo.ecuSn = data["sn"]; componentType: "262711452730000", //
} else { };
ebikeInfo.value.ebikeEcuInfo.ecuCode = ""; api
ebikeInfo.value.ebikeEcuInfo.ecuSn = ""; .callOperateApi("ebikeComponent/validateComponentExistence", params)
ecuCodeScan_zk.value.onSetValue(""); .then((res) => {
showModelMessage("中控不在仓库中,请重新扫码或输入!"); if (res.code == 200) {
} if (res.data) {
} else { ebikeInfo.value.ebikeBatteryInfo.batteryCode = data;
ebikeInfo.value.ebikeEcuInfo.ecuCode = ""; } else {
ebikeInfo.value.ebikeEcuInfo.ecuSn = ""; ebikeInfo.value.ebikeBatteryInfo.batteryCode = "";
ecuCodeScan_zk.value.onSetValue(""); scanCode_dc.value.onSetValue("");
showModelMessage("操作失败!"); showModelMessage("电池不在仓库中,请重新扫码或输入!");
} }
} else {
scanCode_dc.value.onSetValue("");
ebikeInfo.value.ebikeBatteryInfo.batteryCode = "";
showModelMessage("操作失败!");
}
});
};
}) const helmetCodeScanChange = (data) => {
}; if (!data) return;
const params = {
const batteryCodeScanChange = (data) => { componentCode: data,
if (!data) return; componentType: "262711452730001", //
const params = { };
"componentCode": data, api
"componentType": "262711452730000" // .callOperateApi("ebikeComponent/validateComponentExistence", params)
} .then((res) => {
api.callOperateApi("ebikeComponent/validateComponentExistence", params).then(res => { if (res.code == 200) {
if (res.code == 200) { if (res.data > 0) {
if (res.data) { ebikeInfo.value.ebikeHelmetInfo.helmetCode = data;
ebikeInfo.value.ebikeBatteryInfo.batteryCode = data; } else {
} else { ebikeInfo.value.ebikeHelmetInfo.helmetCode = "";
ebikeInfo.value.ebikeBatteryInfo.batteryCode = ""; scanCode_tk.value.onSetValue("");
scanCode_dc.value.onSetValue(""); // bikeCodeScanRef.value.onSetValue("");
showModelMessage("电池不在仓库中,请重新扫码或输入!"); showModelMessage("头盔不在仓库中,请重新扫码或输入!");
} }
} else { } else {
scanCode_dc.value.onSetValue(""); scanCode_tk.value.onSetValue("");
ebikeInfo.value.ebikeBatteryInfo.batteryCode = ""; ebikeInfo.value.ebikeHelmetInfo.helmetCode = "";
showModelMessage("操作失败!"); showModelMessage("操作失败!");
} }
});
}) };
};
const helmetCodeScanChange = (data) => {
if (!data) return;
const params = {
"componentCode": data,
"componentType": "262711452730001" //
}
api.callOperateApi("ebikeComponent/validateComponentExistence", params).then(res => {
if (res.code == 200) {
if (res.data > 0) {
ebikeInfo.value.ebikeHelmetInfo.helmetCode = data;
} else {
ebikeInfo.value.ebikeHelmetInfo.helmetCode = "";
scanCode_tk.value.onSetValue("");
// bikeCodeScanRef.value.onSetValue("");
showModelMessage("头盔不在仓库中,请重新扫码或输入!")
}
} else {
scanCode_tk.value.onSetValue("");
ebikeInfo.value.ebikeHelmetInfo.helmetCode = "";
showModelMessage("操作失败!");
}
})
};
</script> </script>
<style> <style>
.container { .container {
padding: 15px; padding: 15px;
background-color: #fff; background-color: #fff;
} }
/* 全局样式 */ /* 全局样式 */
/* .uni-forms .uni-forms-item__label { /* .uni-forms .uni-forms-item__label {
width: 100px !important; width: 100px !important;
} */ } */
.form-panel { .form-panel {
padding-bottom: 55px; padding-bottom: 55px;
} }
.nav-panel { .nav-panel {
position: fixed; position: fixed;
bottom: 0rpx; bottom: 0rpx;
width: 100%; width: 100%;
padding-bottom: 10px; padding-bottom: 10px;
z-index: 999; z-index: 999;
background-color: #fff; background-color: #fff;
} }
</style> </style>