2025-04-14 10:57:27 +08:00

329 lines
7.3 KiB
Vue

<template>
<view class="container">
<view class="search">
<uni-search-bar radius="5" placeholder="输入电池编号查询" v-model="batteryCode" @blur="searchInfo"
@confirm="searchInfo" />
</view>
<view class="list-panel">
<view class="list-item-title">
<uni-row>
<uni-col :span="18">
电池编号
</uni-col>
<uni-col :span="6">
操作
</uni-col>
</uni-row>
</view>
<view class="list-item" v-for="(item,index) in listBatteryCode" :key="index">
<uni-row>
<view>
<uni-col :span="18">
{{item.batteryCode}}
</uni-col>
<uni-col :span="6">
<uni-icons type="minus-filled" size="28" @click="onBatteryDelClick(item.batteryCode)"></uni-icons>
</uni-col>
</view>
</uni-row>
</view>
</view>
</view>
<view class="nav-panel">
<view class="add-panel" v-if="inputState">
<uni-easyinput class="uni-mt-5" v-model="inputCodeValue" placeholder="请输入电池编号" prefixIcon="down"
suffixIcon="plus" @iconClick="addCodeData">
</uni-easyinput>
</view>
<c-uni-goods-nav :fill="true" :options="navOptions" @click="navOptionsClick" :buttonGroup="navButtonGroup" @buttonClick="navButtonClick" />
</view>
</template>
<script setup>
import {
ref,
reactive
} from 'vue';
import * as api from '@/utils/api.js';
import {
showModelMessage,
isNullOrEmpty,
dataFormat
} from '@/utils/tools.js';
import {onLoad,onShow} from '@dcloudio/uni-app';
import {
useScanCodeStore
} from '@/stores/scancode.js';
const scancode = useScanCodeStore();
const userInfo = ref(null);
const userDefultOperation = ref(null);
const batteryCode = ref("");
const listBatteryCode = ref([]);
const listBatteryData = ref([]);
const inputState = ref(false);
const inputCodeValue = ref("");
const componentOutRecordId = ref("");
onLoad((options)=>{
userInfo.value = uni.getStorageSync('userInfo');
userDefultOperation.value = uni.getStorageSync('userDefultOperation');
});
onShow(() => {
if(!isNullOrEmpty(scancode.code)){
const arr = scancode.code;
for (let i = 0; i < arr.length; i++) {
if(scancode.type == 'pickBattery'){
const exists = listBatteryData.value.some(item => item.batteryCode == arr[i]);
if(!exists){
const oneBattery = {
"batteryCode": arr[i]
}
listBatteryData.value.push(oneBattery);
inputCodeValue.value = '';
batteryCode.value = '';
searchInfo();
}
}
else break;
}
scancode.clearCode();
}
});
const searchInfo =(e) =>{
if(!isNullOrEmpty(batteryCode.value)){
if(listBatteryData.length > 0){
const even = listBatteryData.value.filter(item => item.batteryCode.indexOf(batteryCode.value) > -1);
listBatteryCode.value = even;
}
}
else
{
listBatteryCode.value = listBatteryData.value;
}
}
const navOptions = reactive([{
icon: 'scan',
text: '扫码新增',
disable: false
}, {
icon: 'folder-add',
text: '编号新增',
disable: false
}]);
const navButtonGroup = reactive([{
text: '确认领取',
backgroundColor: '#0078D4',
color: '#fff',
disable: false
}]);
const navOptionsClick =(e) =>{
const index = e.index;
if(index == 0){
uni.navigateTo({
url: `/pages/common/batchscancode?type=pickBattery`, //
});
}
else if(index == 1){
inputState.value = true;
}
}
const navButtonClick = (e) =>{
const index = e.index;
let sucessMsg = "领取成功";
let errorMsg = "领取失败";
if(index == 0){
if(listBatteryData.value.length == 0){
showModelMessage("电池列表不能为空!");
return false;
}
saveBatteryApply((bresult, message) =>{
if(!bresult){
uni.showToast({
title: message,
icon: 'none',
duration: 5000
});
}
else
{
saveBaseInfo((bresult1, message1) =>{
if(!bresult1){
uni.showToast({
title: errorMsg,
icon: 'error',
duration: 5000
});
}
else
{
saveBatteryData((bresult2, message2) =>{
if(!bresult2){
uni.showToast({
title: errorMsg,
icon: 'error',
duration: 5000
});
}
else
{
uni.showToast({
title: sucessMsg,
icon: 'success',
duration: 1000,
success: (res) => {
setTimeout(function () {
uni.navigateBack();
}, 1000);
}
});
}
});
}
})
}
});
}
}
const saveBaseInfo = (callback) =>{
const params = {
"componentOutRecordId": "",
"owningRegion": userDefultOperation.value.regionId,
"componentType": "262711452730000",
"outQuantity": listBatteryData.value.length,
"createdUser": userInfo.value.username,
"createdAt": dataFormat(new Date(),'yyyy-MM-dd HH:mm:ss'),
"state": "1"
};
api.callOperateApi("ebikeComponentOutRecords/save", params).then((res)=>{
if(res.code == '200') {
componentOutRecordId.value = res.data;
callback(true, "");
}
else callback(false, res.message);
});
}
const saveBatteryData = (callback) =>{
const listdatas = [];
listBatteryData.value.forEach((item, index) => {
listdatas.push(item.batteryCode);
});
const params = {
componentOutRecordId: componentOutRecordId.value,
batteryCodes: listdatas
}
api.callOperateApi("ebikeBatteryOutRecords/batchSaveByComponentOutRecordId", params).then((res)=>{
if(res.code == '200'){
callback(true, "");
}
else
{
callback(false, res.message);
}
});
}
const saveBatteryApply = (callback) =>{
const listdatas = [];
listBatteryData.value.forEach((item, index) => {
listdatas.push(item.batteryCode);
});
const params = {
batteryCodes: listdatas
}
api.callMaintenanceApi("ebikeBatteryApply/apply", params).then((res)=>{
if(res.code == '200'){
callback(true, "");
}
else
{
callback(false, res.message);
}
});
}
const onBatteryDelClick =(dbatteryCode) =>{
const index = listBatteryData.value.findIndex(item => item.batteryCode == dbatteryCode);
if(index != -1){
listBatteryData.value.splice(index, 1);
batteryCode.value = '';
searchInfo();
}
}
const addCodeData =(lx) =>{
if(lx == 'suffix'){
if(isNullOrEmpty(inputCodeValue.value)){
showModelMessage("电池编号不能为空!");
return;
}
if(listBatteryData.value.length > 0){
const exists = listBatteryData.value.some(item => item.batteryCode == inputCodeValue.value);
if(exists){
showModelMessage("电池编号重复录入!");
return;
}
}
const oneBattery = {
"batteryCode": inputCodeValue.value
}
listBatteryData.value.push(oneBattery);
inputCodeValue.value = '';
inputState.value = false;
batteryCode.value = '';
searchInfo();
}
else{
inputCodeValue.value = '';
inputState.value = false;
}
}
</script>
<style scoped>
.container {
padding: 15px;
background-color: #fff;
}
.nav-panel{
position: fixed;
bottom: 0rpx;
width: 100%;
padding-bottom: 10px;
z-index: 999;
background-color:#fff;
}
.add-panel{
padding: 0px 25px 10px 25px;
}
.list-panel{
padding: 0px 10px 55px 10px;
}
.list-item-title{
background-color: #f7f7f7;
color: #ababab;
line-height: 40px;
border-radius: 5px;
padding: 0px 15px;
}
.list-item{
line-height: 40px;
padding: 0px 15px;
border-bottom: 1px solid #f7f7f7;
}
</style>