683 lines
21 KiB
Vue
683 lines
21 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="page" :style="formModel.scene == 'COMPLETE' ? '' : 'padding-bottom: 160rpx;'">
|
|||
|
|
<uv-form labelPosition="left" :model="formModel" :rules="deliveryRules" ref="deliveryFormRef">
|
|||
|
|
<!-- 标题 -->
|
|||
|
|
<view class="title">
|
|||
|
|
国网唐山供电公司贾庵子仓库货物配送单
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 副标题/说明 -->
|
|||
|
|
<!-- <view class="subtitle">
|
|||
|
|
现场仓库接物配送单
|
|||
|
|
</view> -->
|
|||
|
|
|
|||
|
|
<!-- 表单整体 -->
|
|||
|
|
<view class="form-box">
|
|||
|
|
|
|||
|
|
<!-- 第一行:配变项目名称、项目编号 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
配送项目名称:{{ goodsData?.[0]?.xmMs }}
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
项目编号:{{ goodsData?.[0]?.xmNo }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 配送地址、配送日期 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
配送地址:{{ goodsData?.[0]?.originName }} → {{ goodsData?.[0]?.destName }}
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
配送日期:{{ goodsData?.[0]?.deliveryDate }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 配送车号、司机签名 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
<uv-form-item label="配送车牌:" prop="plateNo" v-if="formModel.scene == 'ORIGIN'">
|
|||
|
|
<uv-input border="bottom" v-model="formModel.plateNo" />
|
|||
|
|
</uv-form-item>
|
|||
|
|
<text v-else> 配送车号:{{ formModel.plateNo }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
<uv-form-item label="司机签名:" prop="SIGN_DRIVER">
|
|||
|
|
<uv-button type="warning" size="small" text="去签名" v-if="formModel.scene == 'ORIGIN' && !formModel.SIGN_DRIVER.length" @tap="goSign('SIGN_DRIVER')"></uv-button>
|
|||
|
|
<uv-upload :fileList="formModel.SIGN_DRIVER" v-else :maxCount="1" @delete="deleteImg(index, 'SIGN_DRIVER')" :deletable="formModel.scene == 'ORIGIN'" :previewFullImage="true"></uv-upload>
|
|||
|
|
</uv-form-item>
|
|||
|
|
<uv-form-item label="联系方式:" prop="driverPhone" v-if="formModel.scene == 'ORIGIN'">
|
|||
|
|
<uv-input border="bottom" maxlength="11" type="number" v-model="formModel.driverPhone" />
|
|||
|
|
</uv-form-item>
|
|||
|
|
<view v-else>联系方式:{{ formModel.driverPhone }}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 接收单位、配送吨数 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
接收单位:{{ goodsData?.[0]?.receiverOrgName }}
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
配送吨数:{{ goodsData?.[0]?.deliveryTon }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 发货人联系方式 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
发货人/联系方式
|
|||
|
|
<view>{{ goodsData?.[0]?.shipperName }}/{{ goodsData?.[0]?.shipperPhone }}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
制单:{{ goodsData?.[0]?.makerUserName }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 接收人联系方式 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
接收人/联系方式
|
|||
|
|
<view>{{ goodsData?.[0]?.receiverName }}/{{ goodsData?.[0]?.receiverPhone }}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
<uv-form-item label="配送人签名:" prop="SIGN_COURIER">
|
|||
|
|
<uv-button type="warning" text="去签名" size="small" v-if="formModel.scene == 'ORIGIN' && !formModel.SIGN_COURIER.length" @tap="goSign('SIGN_COURIER')"></uv-button>
|
|||
|
|
<uv-upload :fileList="formModel.SIGN_COURIER" v-else :maxCount="1" @delete="deleteImg(index, 'SIGN_COURIER')" :deletable="formModel.scene == 'ORIGIN'" :previewFullImage="true"></uv-upload>
|
|||
|
|
</uv-form-item>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- ======= 可左右滑动的明细表格 ======= -->
|
|||
|
|
<view class="table-scroll">
|
|||
|
|
<view class="table">
|
|||
|
|
<!-- 表头 -->
|
|||
|
|
<view class="table-header">
|
|||
|
|
<view class="th col-seq">序号</view>
|
|||
|
|
<view class="th col-wlno">物料编码</view>
|
|||
|
|
<view class="th col-wlname">物资名称</view>
|
|||
|
|
<view class="th col-qty">数量(单位)</view>
|
|||
|
|
<view class="th col-order">订单号</view>
|
|||
|
|
<view class="th col-supplier">供应商名称</view>
|
|||
|
|
<view class="th col-remark">备注</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 表体 -->
|
|||
|
|
<view class="table-body">
|
|||
|
|
<view class="tr" v-for="(item, index) in goodsData" :key="index">
|
|||
|
|
<view class="td col-seq">{{ index + 1 }}</view>
|
|||
|
|
<view class="td col-wlno">{{ item.wlNo }}</view>
|
|||
|
|
<view class="td col-wlname">{{ item.wlMs }}</view>
|
|||
|
|
<view class="td col-qty">{{ item.realQty }}({{ item.dw }})</view>
|
|||
|
|
<view class="td col-order">{{ item.sapNo }}</view>
|
|||
|
|
<view class="td col-supplier">{{ item.gysMc }}</view>
|
|||
|
|
<view class="td col-remark">{{ item.remark }}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- ======= 明细表格结束 ======= -->
|
|||
|
|
|
|||
|
|
<!-- 收货确认 -->
|
|||
|
|
<view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
<uv-form-item label="接收物资状态:" prop="receiveStatus">
|
|||
|
|
<view style="display: inline-block;">
|
|||
|
|
<uv-radio-group v-model="formModel.receiveStatus">
|
|||
|
|
<uv-radio :name="1" label="数量齐全、状态完好" shape="square" :disabled="formModel.scene !== 'DEST'"></uv-radio>
|
|||
|
|
<span style="vertical-align: middle; font-size: 26rpx;line-height: 14px;"> / </span>
|
|||
|
|
<uv-radio :name="2" label="存在问题" shape="square" :disabled="formModel.scene !== 'DEST'"></uv-radio>
|
|||
|
|
</uv-radio-group>
|
|||
|
|
</view>
|
|||
|
|
</uv-form-item>
|
|||
|
|
<uv-form-item label="" v-if="formModel.scene == 'DEST'" prop="receiveProblem">
|
|||
|
|
<uv-input border="bottom" v-model="formModel.receiveProblem" />
|
|||
|
|
</uv-form-item>
|
|||
|
|
<view v-else>{{ formModel.receiveProblem }}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="row" style="justify-content: space-between;">
|
|||
|
|
<view class="cell" style="border-right: unset;">
|
|||
|
|
<uv-form-item label="接收人签名:" prop="SIGN_RECEIVER">
|
|||
|
|
<uv-button type="warning" text="去签名" size="small" v-if="formModel.scene == 'DEST' && !formModel.SIGN_RECEIVER.length" @tap="goSign('SIGN_RECEIVER')"></uv-button>
|
|||
|
|
<uv-upload :fileList="formModel.SIGN_RECEIVER" v-else-if="formModel.SIGN_RECEIVER.length" :maxCount="1" :deletable="formModel.scene == 'DEST'" @delete="deleteImg(index, 'SIGN_RECEIVER')" :previewFullImage="true"></uv-upload>
|
|||
|
|
<view v-else>——</view>
|
|||
|
|
</uv-form-item>
|
|||
|
|
</view>
|
|||
|
|
<view class="cell">
|
|||
|
|
日期:{{ goodsData?.[0]?.deliveryDate.split("-")[0] }}年{{ goodsData?.[0]?.deliveryDate.split("-")[1] }}月{{ goodsData?.[0]?.deliveryDate.split("-")[2] }}日
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- <view class="row">
|
|||
|
|
<view class="cell">
|
|||
|
|
<uv-form-item label="日期:" prop="SIGN_RECEIVER">
|
|||
|
|
<uv-input border="bottom" type="number" style="width: 120rpx;flex: unset;" readonly="formModel.scene !== 'DEST'" v-model="formModel.receiveYear" />年
|
|||
|
|
<uv-input border="bottom" type="number" style="width: 80rpx;flex: unset;" :readonly="formModel.scene !== 'DEST'" v-model="formModel.receiveMonth" />月
|
|||
|
|
<uv-input border="bottom" type="number" style="width: 80rpx;flex: unset;" :readonly="formModel.scene !== 'DEST'" v-model="formModel.receiveDay" />日
|
|||
|
|
</uv-form-item>
|
|||
|
|
</view>
|
|||
|
|
</view> -->
|
|||
|
|
|
|||
|
|
</view>
|
|||
|
|
<uv-form-item label="开始配送现场照片" prop="ORIGIN_PHOTO_SITE" style="margin-top: 16rpx;" class="form-item">
|
|||
|
|
<uv-upload
|
|||
|
|
:fileList="formModel.ORIGIN_PHOTO_SITE"
|
|||
|
|
name="ORIGIN_PHOTO_SITE"
|
|||
|
|
:maxCount="formModel.scene == 'ORIGIN' ? 10 : formModel.ORIGIN_PHOTO_SITE.length"
|
|||
|
|
:deletable="formModel.scene == 'ORIGIN'"
|
|||
|
|
@afterRead="afterRead($event, 'ORIGIN_PHOTO_SITE')"
|
|||
|
|
@delete="deleteImg(index, 'ORIGIN_PHOTO_SITE')"
|
|||
|
|
></uv-upload>
|
|||
|
|
</uv-form-item>
|
|||
|
|
<uv-form-item label="单据照片" prop="PHOTO_BILL">
|
|||
|
|
<uv-upload
|
|||
|
|
:fileList="formModel.PHOTO_BILL"
|
|||
|
|
name="PHOTO_BILL"
|
|||
|
|
:maxCount="1"
|
|||
|
|
:deletable="formModel.scene == 'ORIGIN'"
|
|||
|
|
@afterRead="afterRead($event, 'PHOTO_BILL')"
|
|||
|
|
@delete="deleteImg(index, 'PHOTO_BILL')"
|
|||
|
|
></uv-upload>
|
|||
|
|
</uv-form-item>
|
|||
|
|
<uv-form-item label="完成配送现场照片" prop="DEST_PHOTO_SITE" v-show="formModel.scene !== 'ORIGIN'" class="form-item">
|
|||
|
|
<uv-upload
|
|||
|
|
:fileList="formModel.DEST_PHOTO_SITE"
|
|||
|
|
:deletable="formModel.scene == 'DEST'"
|
|||
|
|
name="DEST_PHOTO_SITE"
|
|||
|
|
:maxCount="formModel.scene == 'DEST' ? 10 : formModel.DEST_PHOTO_SITE.length"
|
|||
|
|
@afterRead="afterRead($event, 'DEST_PHOTO_SITE')"
|
|||
|
|
@delete="deleteImg(index, 'DEST_PHOTO_SITE')"
|
|||
|
|
></uv-upload>
|
|||
|
|
</uv-form-item>
|
|||
|
|
</uv-form>
|
|||
|
|
<view class="btn" v-show="formModel.scene !== 'COMPLETE'">
|
|||
|
|
<uv-button type="primary" text="确定" size="large" style="width: 100%;" class="mainBtn" @tap="startForm">{{ formModel.scene == 'ORIGIN' ? '开 始 配 送' : '完 成 配 送'}}</uv-button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { ref, onUnmounted } from 'vue'
|
|||
|
|
import { onLoad } from "@dcloudio/uni-app"
|
|||
|
|
import { getOrderDetail, uploadDeliveryAttachment, startOrder } from "@/api/index"
|
|||
|
|
|
|||
|
|
const form = ref({
|
|||
|
|
// projectName: '冀北唐山路南区10kV广鑫环网柜等6座环网柜配电自动化改造工程',
|
|||
|
|
// projectNo: '1801032401LD',
|
|||
|
|
// address: '唐山市路南区女织寨赵田庄村民源电气',
|
|||
|
|
// date: '2025年12月2日',
|
|||
|
|
// carNo: '冀B1947L',
|
|||
|
|
// receiveCompany: '路南供电中心',
|
|||
|
|
// senderName: '林生',
|
|||
|
|
// senderPhone: '15531558587',
|
|||
|
|
// receiverName: '王小强',
|
|||
|
|
// receiverPhone: '18733306661',
|
|||
|
|
// driverSign: '',
|
|||
|
|
// deliveryWeight: '',
|
|||
|
|
// maker: '孟利红',
|
|||
|
|
// checker: '',
|
|||
|
|
|
|||
|
|
// // 明细 items,字段**齐全**:物料编码、名称、数量、单位、订单号、供应商名称、备注
|
|||
|
|
// items: [
|
|||
|
|
// {
|
|||
|
|
// wlNo: '500138342',
|
|||
|
|
// wlName: '二次融合成套环网箱,AC10kV, 630A,固体,二进四出',
|
|||
|
|
// qty: 1,
|
|||
|
|
// unit: '套',
|
|||
|
|
// orderNo: '101378434',
|
|||
|
|
// supplierName: '宁波奥克斯智能科技股份有限公司',
|
|||
|
|
// remark: 'ID: 169736945'
|
|||
|
|
// },
|
|||
|
|
// {
|
|||
|
|
// wlNo: '500138342',
|
|||
|
|
// wlName: '二次融合成套环网箱,AC10kV, 630A,固体,二进四出',
|
|||
|
|
// qty: 1,
|
|||
|
|
// unit: '套',
|
|||
|
|
// orderNo: '101378434',
|
|||
|
|
// supplierName: '宁波奥克斯智能科技股份有限公司',
|
|||
|
|
// remark: 'ID: 169736952'
|
|||
|
|
// }
|
|||
|
|
// ]
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
const formModel = ref({
|
|||
|
|
orderNo: null,
|
|||
|
|
scene: '',
|
|||
|
|
lng: '',
|
|||
|
|
lat: '',
|
|||
|
|
SIGN_DRIVER: [],
|
|||
|
|
SIGN_COURIER: [],
|
|||
|
|
ORIGIN_PHOTO_SITE: [],
|
|||
|
|
PHOTO_BILL: [],
|
|||
|
|
DEST_PHOTO_SITE: [],
|
|||
|
|
SIGN_RECEIVER: [],
|
|||
|
|
receiveStatus: '',
|
|||
|
|
receiveProblem: '',
|
|||
|
|
// SIGN_DRIVER: [{"url":
|
|||
|
|
// "http://192.168.1.5:8087/delivery/2025-12-03/origin/sign_driver/8f5253492a63469a90406fd9c1d702b8.png"}
|
|||
|
|
// ],
|
|||
|
|
})
|
|||
|
|
const deliveryFormRef = ref()
|
|||
|
|
const deliveryRules = ref({
|
|||
|
|
'plateNo': [
|
|||
|
|
{
|
|||
|
|
type: 'string',
|
|||
|
|
required: true,
|
|||
|
|
message: '请输入配送车牌',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
validator: (rule, value, callback) => {
|
|||
|
|
// 自定义校验逻辑
|
|||
|
|
return uni.$uv.test.carNo(value)
|
|||
|
|
},
|
|||
|
|
message: '请输入正确的车牌',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
'driverPhone': [
|
|||
|
|
{
|
|||
|
|
type: 'string',
|
|||
|
|
required: true,
|
|||
|
|
message: '请输入司机电话',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
validator: (rule, value, callback) => {
|
|||
|
|
// 自定义校验逻辑
|
|||
|
|
return uni.$uv.test.mobile(value)
|
|||
|
|
},
|
|||
|
|
message: '请输入正确的手机号',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
'SIGN_DRIVER': {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请司机签名',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
'SIGN_COURIER': {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请配送人签名',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
'ORIGIN_PHOTO_SITE': {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请上传现场照片',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
'PHOTO_BILL': {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请上传单据照片',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
},
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
const bizTypeMap = {
|
|||
|
|
'ORIGIN_PHOTO_SITE': { scene: 'ORIGIN', bizType: 'PHOTO_SITE' },
|
|||
|
|
'DEST_PHOTO_SITE': { scene: 'DEST', bizType: 'PHOTO_SITE' },
|
|||
|
|
'SIGN_DRIVER': { scene: 'ORIGIN', bizType: 'SIGN_DRIVER' },
|
|||
|
|
'SIGN_COURIER': { scene: 'ORIGIN', bizType: 'SIGN_COURIER' },
|
|||
|
|
'PHOTO_BILL': { scene: 'ORIGIN', bizType: 'PHOTO_BILL' },
|
|||
|
|
'SIGN_RECEIVER': { scene: 'DEST', bizType: 'SIGN_RECEIVER' }
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 遍历form中的数组字段
|
|||
|
|
// Object.keys(form).forEach(key => {
|
|||
|
|
// if (Array.isArray(form[key]) && bizTypeMap[key]) {
|
|||
|
|
// const matchRule = bizTypeMap[key];
|
|||
|
|
// // 筛选符合条件的元素并添加
|
|||
|
|
// const matchedItems = arr.filter(item => {
|
|||
|
|
// return item.bizType === matchRule.bizType &&
|
|||
|
|
// (!matchRule.scene || item.scene === matchRule.scene);
|
|||
|
|
// });
|
|||
|
|
// form[key].push(...matchedItems);
|
|||
|
|
// }
|
|||
|
|
// });
|
|||
|
|
|
|||
|
|
const goodsData = ref([])
|
|||
|
|
const getDetail = () => {
|
|||
|
|
getOrderDetail({ orderNo: formModel.value.orderNo }).then(res => {
|
|||
|
|
goodsData.value = res.data
|
|||
|
|
formModel.value.plateNo = res.data[0].plateNo
|
|||
|
|
formModel.value.driverPhone = res.data[0].driverPhone
|
|||
|
|
formModel.value.receiveStatus = res.data[0].receiveStatus
|
|||
|
|
formModel.value.receiveProblem = res.data[0].receiveProblem
|
|||
|
|
// res.data[0].attachments.forEach(item => {
|
|||
|
|
// if (formModel.value.hasOwnProperty(item.bizType) && Array.isArray(formModel.value[item.bizType])) {
|
|||
|
|
// formModel.value[item.bizType].push(item);
|
|||
|
|
// }
|
|||
|
|
// if (item.bizType === 'PHOTO_SITE') {
|
|||
|
|
// const targetKey = item.scene === 'ORIGIN' ? 'ORIGIN_PHOTO_SITE' : 'DEST_PHOTO_SITE';
|
|||
|
|
// if (Array.isArray(formModel.value[targetKey])) {
|
|||
|
|
// formModel.value[targetKey].push(item);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// })
|
|||
|
|
Object.keys(formModel.value).forEach(key => {
|
|||
|
|
if (Array.isArray(formModel.value[key]) && bizTypeMap[key]) {
|
|||
|
|
const matchRule = bizTypeMap[key];
|
|||
|
|
// 筛选符合条件的元素并添加
|
|||
|
|
const matchedItems = res.data[0].attachments.filter(item => {
|
|||
|
|
return item.bizType === matchRule.bizType &&
|
|||
|
|
(!matchRule.scene || item.scene === matchRule.scene);
|
|||
|
|
});
|
|||
|
|
formModel.value[key].push(...matchedItems);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
console.log(formModel.value)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 去签名页面
|
|||
|
|
const goSign = (type) => {
|
|||
|
|
// 移除之前的事件监听器避免重复
|
|||
|
|
uni.$off('getSignImg')
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/index/signature?bizType=' + type + '&scene=' + formModel.value.scene,
|
|||
|
|
success: () => {
|
|||
|
|
// 监听签名返回事件
|
|||
|
|
const eventHandler = (e) => {
|
|||
|
|
console.log('getSignImg', e)
|
|||
|
|
// signBase64.value = e.base64
|
|||
|
|
// signTempimg.value = e.path
|
|||
|
|
formModel.value[type] = [{url: e.url[0], scene: formModel.value.scene, bizType: type}]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 监听一次自定义事件
|
|||
|
|
uni.$once('getSignImg', eventHandler)
|
|||
|
|
|
|||
|
|
// 页面卸载时移除监听(避免内存泄漏)
|
|||
|
|
// uni.$off('getSignImg', eventHandler)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 上传照片
|
|||
|
|
const afterRead = async (event, type) => {
|
|||
|
|
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
|
|||
|
|
console.log(event)
|
|||
|
|
let files = event.file.url
|
|||
|
|
let formData = {
|
|||
|
|
scene: formModel.value.scene,
|
|||
|
|
bizType: type
|
|||
|
|
}
|
|||
|
|
console.log(files)
|
|||
|
|
uploadDeliveryAttachment(files, formData).then(res => {
|
|||
|
|
console.log(res)
|
|||
|
|
if (!formModel.value[type] || formModel.value[type].length == 0) {
|
|||
|
|
formModel.value[type] = []
|
|||
|
|
}
|
|||
|
|
res.data.forEach(item => {
|
|||
|
|
formModel.value[type].push({url: item, scene: formModel.value.scene, bizType: type})
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 删除图片
|
|||
|
|
const deleteImg = (index, type) => {
|
|||
|
|
formModel.value[type].splice(index, 1)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
onLoad((options) => {
|
|||
|
|
formModel.value.orderNo = options.orderNo
|
|||
|
|
formModel.value.scene = options.type
|
|||
|
|
formModel.value.billNoCk = options.billNoCk
|
|||
|
|
if (formModel.value.scene == "DEST") {
|
|||
|
|
deliveryRules.value.receiveStatus = {
|
|||
|
|
type: 'number',
|
|||
|
|
required: true,
|
|||
|
|
validator: (rule, value, callback) => {
|
|||
|
|
if (value > 0) {
|
|||
|
|
callback()
|
|||
|
|
} else {
|
|||
|
|
callback(new Error('请选择接收状态'))
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
message: '请选择接收状态',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
deliveryRules.value.receiveProblem = {
|
|||
|
|
type: 'string',
|
|||
|
|
validator: (rule, value, callback) => {
|
|||
|
|
if (formModel.value.receiveStatus == 2 && value.length == 0) {
|
|||
|
|
callback(new Error('请描述存在问题'))
|
|||
|
|
} else {
|
|||
|
|
callback()
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
message: '请描述存在问题',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
deliveryRules.value.SIGN_RECEIVER = {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请接收人签名',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
deliveryRules.value.DEST_PHOTO_SITE = {
|
|||
|
|
type: 'array',
|
|||
|
|
required: true,
|
|||
|
|
message: '请上传现场照片',
|
|||
|
|
trigger: ['blur', 'change']
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
getDetail()
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
const startForm = () => {
|
|||
|
|
deliveryFormRef.value.validate().then(res => {
|
|||
|
|
console.log("验证通过")
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '正在编辑表单中...'
|
|||
|
|
})
|
|||
|
|
uni.getLocation({
|
|||
|
|
type: 'gcj02', // 高德地图使用gcj02坐标系
|
|||
|
|
success: (res) => {
|
|||
|
|
console.log(res)
|
|||
|
|
// uni.$uv.toast('获取当前位置成功')
|
|||
|
|
formModel.value.lng = res.longitude
|
|||
|
|
formModel.value.lat = res.latitude
|
|||
|
|
let attachments = []
|
|||
|
|
for (const key in bizTypeMap) {
|
|||
|
|
if (bizTypeMap[key].scene === formModel.value.scene) {
|
|||
|
|
const formattedData = formModel.value[key].map(item => ({
|
|||
|
|
...item,
|
|||
|
|
bizType: bizTypeMap[key].bizType,
|
|||
|
|
}))
|
|||
|
|
attachments.push(...formattedData);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
let params = {
|
|||
|
|
...formModel.value,
|
|||
|
|
attachments: attachments,
|
|||
|
|
}
|
|||
|
|
console.log(params)
|
|||
|
|
startOrder(params).then(res => {
|
|||
|
|
console.log(res)
|
|||
|
|
uni.$uv.toast('开始配送')
|
|||
|
|
uni.navigateBack({ delta: 1 })
|
|||
|
|
uni.hideLoading()
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
fail: (err) => {
|
|||
|
|
reject(err);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}).catch(errors => {
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
// 组件卸载时移除事件监听器
|
|||
|
|
onUnmounted(() => {
|
|||
|
|
console.log("协助")
|
|||
|
|
uni.$off('getSignImg')
|
|||
|
|
})
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.page {
|
|||
|
|
padding: 20rpx;
|
|||
|
|
background-color: #fff;
|
|||
|
|
min-height: calc(100vh - 192rpx);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 标题 */
|
|||
|
|
.title {
|
|||
|
|
text-align: center;
|
|||
|
|
font-size: 38rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.subtitle {
|
|||
|
|
text-align: center;
|
|||
|
|
font-size: 30rpx;
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 外框 */
|
|||
|
|
.form-box {
|
|||
|
|
border: 2rpx solid #000;
|
|||
|
|
padding: 20rpx;
|
|||
|
|
font-size: 26rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 每一行 */
|
|||
|
|
.row {
|
|||
|
|
display: flex;
|
|||
|
|
border-bottom: 2rpx solid #000;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.row:last-child {
|
|||
|
|
border-bottom: 0;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-form-item__body) {
|
|||
|
|
padding: 0 !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-border-bottom) {
|
|||
|
|
border-color: #000 !important;
|
|||
|
|
padding: 0 !important;
|
|||
|
|
border-bottom-width: 2rpx !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-form-item__body__left) {
|
|||
|
|
width: unset !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-form-item__body__left__content__label) {
|
|||
|
|
font-size: 26rpx !important;
|
|||
|
|
color: #000 !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-form-item__body__right__message) {
|
|||
|
|
margin-left: 0 !important;
|
|||
|
|
}
|
|||
|
|
:deep(.form-item .uv-form-item__body__left) {
|
|||
|
|
width: 120rpx !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-radio__label-wrap text) {
|
|||
|
|
font-size: 26rpx !important;
|
|||
|
|
color: #000 !important;
|
|||
|
|
}
|
|||
|
|
:deep(.uv-radio__icon-wrap--square) {
|
|||
|
|
width: 30rpx !important;
|
|||
|
|
height: 30rpx !important;
|
|||
|
|
}
|
|||
|
|
.cell {
|
|||
|
|
flex: 1;
|
|||
|
|
padding: 10rpx;
|
|||
|
|
border-right: 2rpx solid #000;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.cell:last-child {
|
|||
|
|
border-right: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* ====== 明细表格滚动区域 ====== */
|
|||
|
|
.table-scroll {
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
border-top: 2rpx solid #000;
|
|||
|
|
overflow-x: auto;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 给表格一个最小宽度,超出屏幕时就可以左右拖动 */
|
|||
|
|
.table {
|
|||
|
|
/* min-width: 2800rpx; */
|
|||
|
|
width: 1700rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 表头 */
|
|||
|
|
.table-header {
|
|||
|
|
display: flex;
|
|||
|
|
border-bottom: 2rpx solid #000;
|
|||
|
|
background-color: #f5f5f5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.th {
|
|||
|
|
padding: 12rpx;
|
|||
|
|
border-right: 2rpx solid #000;
|
|||
|
|
font-weight: bold;
|
|||
|
|
box-sizing: border-box;
|
|||
|
|
}
|
|||
|
|
.th:last-child {
|
|||
|
|
border-right: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 表体 */
|
|||
|
|
.table-body .tr {
|
|||
|
|
display: flex;
|
|||
|
|
border-bottom: 2rpx solid #000;
|
|||
|
|
box-sizing: border-box;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.td {
|
|||
|
|
padding: 12rpx;
|
|||
|
|
border-right: 2rpx solid #000;
|
|||
|
|
box-sizing: border-box;
|
|||
|
|
}
|
|||
|
|
.td:last-child {
|
|||
|
|
border-right: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.col-seq {
|
|||
|
|
width: 80rpx;
|
|||
|
|
}
|
|||
|
|
.col-wlno {
|
|||
|
|
width: 180rpx;
|
|||
|
|
}
|
|||
|
|
.col-wlname {
|
|||
|
|
width: 500rpx;
|
|||
|
|
}
|
|||
|
|
.col-qty {
|
|||
|
|
width: 210rpx;
|
|||
|
|
}
|
|||
|
|
.col-order {
|
|||
|
|
width: 180rpx;
|
|||
|
|
}
|
|||
|
|
.col-supplier {
|
|||
|
|
width: 400rpx;
|
|||
|
|
}
|
|||
|
|
.col-remark {
|
|||
|
|
width: 150rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.btn {
|
|||
|
|
position: fixed;
|
|||
|
|
width: calc(100vw - 64rpx);
|
|||
|
|
bottom: 0;
|
|||
|
|
left: 32rpx;
|
|||
|
|
z-index: 99;
|
|||
|
|
// display: flex;
|
|||
|
|
// align-items: center;
|
|||
|
|
// justify-content: space-between;
|
|||
|
|
}
|
|||
|
|
</style>
|