Files
delivery_admin_app/pages/index/addHandDelivery.vue
2026-03-11 14:52:32 +08:00

190 lines
5.4 KiB
Vue

<template>
<view class="container">
<uv-form labelPosition="top" style="margin-bottom: 20rpx;" labelWidth="100" :model="item" :rules="deliveryRules" :ref="(el) => el && (deliveryFormRef[index] = el)" v-for="(item, index) in listData" :key="index">
<view class="formContent">
<uv-form-item label="订单编号:" prop="sapNo">
<uv-input placeholder="请输入内容" v-model="item.sapNo" clearable />
</uv-form-item>
<uv-form-item label="项目描述:" prop="xmMs">
<uv-input placeholder="请输入内容" v-model="item.xmMs" clearable />
</uv-form-item>
<uv-form-item label="项目号:" prop="xmNo">
<uv-input placeholder="请输入内容" v-model="item.xmNo" clearable />
</uv-form-item>
<uv-form-item label="物料号:" prop="wlNo">
<uv-input placeholder="请输入内容" v-model="item.wlNo" clearable />
</uv-form-item>
<uv-form-item label="物料描述:" prop="wlMs">
<uv-input placeholder="请输入内容" v-model="item.wlMs" clearable />
</uv-form-item>
<uv-form-item label="配送数量:" prop="realQty">
<uv-input placeholder="请输入内容" type="digit" v-model="item.realQty" clearable />
</uv-form-item>
<uv-form-item label="单位" prop="dw">
<uv-input placeholder="请输入内容" v-model="item.dw" clearable />
</uv-form-item>
<uv-form-item label="供应商名称:" prop="gysMc">
<uv-input placeholder="请输入内容" v-model="item.gysMc" clearable />
</uv-form-item>
<uv-form-item label="备注:" prop="remark">
<uv-input placeholder="请输入内容" v-model="item.remark" clearable />
</uv-form-item>
<template v-if="index !== 0">
<view style="display: flex; justify-content: flex-end;">
<uv-button type="error" text="删除" style="width: 200rpx;" @tap="removeForm(index)"> </uv-button>
</view>
</template>
</view>
</uv-form>
<view style="display: flex; justify-content: flex-end;margin-right: 20rpx;">
<uv-button type="primary" text="添加" style="width: 200rpx;" @tap="addForm"> </uv-button>
</view>
<view class="btn">
<uv-button type="primary" text="确定" size="large" style="width: 100%;" class="mainBtn" @tap="submitForm">
</uv-button>
</view>
</view>
</template>
<script setup>
import { ref, computed } from "vue";
import { onLoad, onShow, onPageScroll } from "@dcloudio/uni-app";
import { getGoodsDict } from "@/api/index.js";
const listData = ref([
{
sapNo: "",
xmMs: "",
xmNo: "",
wlNo: "",
wlMs: "",
realQty: null,
dw: "",
gysMc: "",
remark: ""
}
])
const deliveryFormRef = ref([])
const deliveryRules = ref({
sapNo: [
{ required: true, message: "请输入订单编号", trigger: "blur" }
],
xmMs: [
{ required: true, message: "请输入项目描述", trigger: "blur" }
],
xmNo: [
{ required: true, message: "请输入项目号", trigger: "blur" }
],
wlNo: [
{ required: true, message: "请输入物料号", trigger: "blur" }
],
wlMs: [
{ required: true, message: "请输入物料描述", trigger: "blur" }
],
realQty: [
{ required: true, type: 'float', message: "请输入配送数量", trigger: "blur" }
],
dw: [
{ required: true, message: "请输入单位", trigger: "blur" }
],
gysMc: [
{ required: true, message: "请输入供应商名称", trigger: "blur" }
],
})
const removeForm = (index) => {
listData.value.splice(index, 1)
}
const addForm = () => {
listData.value.push({
sapNo: "",
xmMs: "",
xmNo: "",
wlNo: "",
wlMs: "",
realQty: "",
dw: "",
gysMc: "",
remark: ""
})
}
const submitForm = async () => {
try {
// 遍历所有表单实例,逐个校验
for (const formRef of deliveryFormRef.value) {
if (formRef) {
// 等待单个表单校验完成,失败则抛出异常
await formRef.validate();
}
}
// 所有表单校验通过后的逻辑
uni.$uv.toast('校验通过,准备提交');
console.log("提交数据:", listData.value);
// 这里写你的提交逻辑
let arr = listData.value.map(item => {
return {
wlNo: item.wlNo,
qty: item.realQty,
}
})
getGoodsDict({ items: arr }).then(res => {
console.log(res)
uni.navigateTo({
url: '/pages/index/addDeliveryInfo',
success: function(res1) {
// 通过eventChannel向被打开页面传送数据
res1.eventChannel.emit('acceptData', { data: {detailList: listData.value}, totalWeightKg: res.data.totalWeightKg, goodsSize: res.data.totalVolumeM3 })
}
})
})
} catch (errors) {
// 校验失败的处理
console.log("校验失败:", errors);
uni.$uv.toast('请完善必填项后提交');
}
}
onLoad(() => {
})
</script>
<style scoped lang="scss">
.container {
padding: 32rpx;
background-color: #F6F8FA;
padding-bottom: 160rpx;
.formContent {
background-color: white;
border-radius: 20rpx;
padding: 0 20rpx 20rpx;
}
.btn {
position: fixed;
width: calc(100vw - 64rpx);
bottom: 0;
left: 32rpx;
z-index: 99;
display: flex;
align-items: center;
justify-content: space-between;
}
}
::v-deep uni-toast {
z-index: 30000 !important;
}
</style>