236 lines
5.8 KiB
Vue
Raw Normal View History

2025-07-30 17:29:08 +08:00
<template>
<view class="container">
<uni-forms ref="carDispatchByMineRef">
<uni-forms-item label="站点" name="siteId">
<uni-data-select
v-model="customFormData.reginvalue"
:localdata="regindata"
@change="changeZT"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="车辆编号" name="deviceValues">
<view style="display: flex; align-items: center">
<uni-easyinput
v-model="customFormData.deviceValues"
placeholder="请扫描或输入中控编号"
suffixIcon="scan"
@iconClick="handleScan"
>
</uni-easyinput>
<button class="btn-add" @click="addDevice">添加</button>
</view>
</uni-forms-item>
</uni-forms>
<uni-section title="车辆列表" type="line">
<uni-table border stripe emptyText="暂无更多数据">
<!-- 表头行 -->
<uni-tr>
<uni-th align="center">车辆编号</uni-th>
<uni-th align="center">操作</uni-th>
</uni-tr>
<!-- 表格数据行 -->
<uni-tr v-for="(item, index) in carList" :key="item.index">
<uni-td align="center">{{ item.number }}</uni-td>
<uni-td>
<view class="uni-group">
<button
class="uni-button"
size="mini"
type="warn"
@click="handleDel(item)"
>
删除
</button>
</view>
</uni-td>
</uni-tr>
</uni-table>
</uni-section>
</view>
<view class="nav-panel">
<c-uni-goods-nav
:fill="true"
:options="[]"
:buttonGroup="navButtonGroup"
@buttonClick="navButtonClick"
/>
</view>
</template>
<script setup>
import { ref, onMounted, reactive } from "vue";
import { onLoad, onShow } from "@dcloudio/uni-app";
import * as api from "@/utils/api.js";
import { useDispatchScanCodeStore } from "@/stores/scancodeByDispatch.js";
import { showMessage } from "@/utils/tools";
const carDispatchByMineRef = ref(null);
const scanCodeStore = useDispatchScanCodeStore();
const statusZT = ref(1); //0 批量下架 1 批量投放
const regindata = ref([]);
const customFormData = ref({
reginvalue: "",
deviceValues: "",
});
const carList = ref([]);
const navButtonGroup = reactive([
{
text: "创建调度工单",
backgroundColor: "#0078D4",
color: "#fff",
disable: false,
},
]);
onLoad(() => {
scanCodeStore.clearCode();
});
onShow(() => {
setCarList();
});
const navButtonClick = () => {
if (!customFormData.value.reginvalue) {
showMessage("请选择站点", "error", 1000);
return;
}
if (carList.value.length == 0) {
showMessage("请添加车辆编号", "error", 1000);
return;
}
navButtonGroup[0].disable = true; // 禁用按钮,防止重复点击
uni.showLoading({
title: "正在创建调度工单...",
});
const params = {
bikeCodes: scanCodeStore.getCode(),
status: statusZT.value,
siteId: customFormData.value.reginvalue,
dispatchType: "仓库车调度",
};
api.callEbikeInfo("createWorkOrderDispatch", params).then((res) => {
uni.hideLoading(); // 隐藏加载提示
if (res.code == 200) {
// 显示成功提示
uni.showToast({
title: "操作成功",
icon: "success",
duration: 1000,
});
// 延时跳转,确保提示完毕后再跳转
setTimeout(() => {
navButtonGroup[0].disable = false; // 恢复按钮状态
uni.navigateTo({
url: `/pages/warehouse/vehicledispatch/vehicledispatch?orderId=${
res.data
}&page=${3}`,
});
}, 1000); // 跳转延迟与提示时长一致
} else {
// 显示错误提示
uni.showToast({
title: res.message || "操作失败",
icon: "none",
duration: 1000,
});
navButtonGroup[0].disable = false; // 恢复按钮状态
}
});
};
const handleDel = (item) => {
const { number } = item;
scanCodeStore.delCode(number);
setCarList();
};
const handleScan = () => {
uni.navigateTo({
url: `/pages/common/dispatchScancode`,
});
};
function setCarList() {
let list = scanCodeStore.getCode();
if (list.length > 0) {
carList.value = list.map((code, index) => ({
number: code,
index: index + "_" + code,
}));
} else {
carList.value = [];
}
}
const addDevice = () => {
let carCode = customFormData.value.deviceValues;
if (!carCode) {
showMessage("请输入车辆编号", "error", 1000);
return;
}
if (!scanCodeStore.checkCode(carCode)) {
scanCodeStore.addCode(carCode);
customFormData.value.deviceValues = "";
setCarList();
} else {
showMessage("车辆已存在:" + carCode, "none", 1500);
customFormData.value.deviceValues = "";
}
};
onMounted(() => {
let userDefultOperation = uni.getStorageSync("userDefultOperation");
//获取站点信息
api
.callOperateApi(
"ebikeRegion/getRegion?regionId=" + userDefultOperation.operationRegionId,
{},
"get"
)
.then((res) => {
if (res.code == 200) {
res.data.forEach((res) => {
let quyuemap = {
text: res.siteName,
value: res.siteRegionId,
};
regindata.value.push(quyuemap);
});
}
});
});
const changeZT = () => {};
</script>
<style>
.container {
padding: 15px;
background-color: #fff;
}
/* 全局样式 */
.uni-forms .uni-forms-item__label {
/* 或者使用其他单位 */
}
.nav-panel {
position: fixed;
bottom: 0rpx;
width: 100%;
padding-bottom: 10px;
z-index: 999;
background-color: #fff;
}
.btn-add {
margin-left: 30rpx;
font-size: 26rpx;
width: 120rpx;
}
.uni-group {
display: flex;
align-items: center;
}
</style>