<template>
|
|
<view class="page">
|
|
<!-- 导航栏 -->
|
|
<navbar title="接车确认" :leftClick="true" @leftClick="goBack" />
|
|
|
|
<view class="content">
|
|
<view class="cr mt40">
|
|
<!-- 仪表盘照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄仪表盘照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one01.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('a', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
请拍摄车辆启动后的仪表 确保柴油油位照片,<text class="highlight">机油压力水温和故障预警,照片清晰无倾斜</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 车身前方照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄车身前方照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one02.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('b', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆前方</text>照片,以保证车辆交车状况。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 车身后方照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄车身后方照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one08.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('c', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆后方</text>照片,以保证车辆交车状况。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 车身左侧方照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄车身左侧方照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one04.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('d', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆左侧方</text>照片,以保证车辆交车状况。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 车身右侧方照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄车身右侧方照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one03.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('e', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆右侧方</text>照片,以保证车辆交车状况。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 当前工作环境 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄当前工作环境</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one07.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('f', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆四周</text>照片,以保证平台任务相符。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 水槽照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄水槽照片</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('g', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆水槽</text>照片,以保证水位能满足车辆降温。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 液压油位照片 -->
|
|
<view class="re-card-p32">
|
|
<view class="flex-sb">
|
|
<view class="re-from-label">请拍摄液压油位照片</view>
|
|
<view class="re-card-show" @tap="clickShowExample('https://relief.oss-cn-hangzhou.aliyuncs.com/one06.png')">查看示例</view>
|
|
</view>
|
|
<input-image
|
|
:height="456"
|
|
@uploadSuccess="handleImageUpload('h', $event)"
|
|
/>
|
|
<view class="re-card-context">
|
|
需拍摄<text class="highlight">车辆液压油位</text>照片,以保证油位满足正常施工。
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 备注 -->
|
|
<view class="re-card-p32">
|
|
<view class="re-from-label">备注<text class="optional">(选填)</text></view>
|
|
<textarea
|
|
class="re-card-textarea"
|
|
placeholder="如在施工过程中发现问题,请用文字描述。"
|
|
v-model="form.remark"
|
|
/>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 提交按钮 -->
|
|
<view class="re-end-pand">
|
|
<button @tap="clickSaveAndBack">提交保存</button>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 示例弹窗 -->
|
|
<show-example
|
|
:show="show"
|
|
:url="url"
|
|
@close="show = false"
|
|
/>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import navbar from '@/components/base/navbar.vue'
|
|
import inputImage from '@/components/base/input-image.vue'
|
|
import showExample from '@/components/base/show-example.vue'
|
|
|
|
export default {
|
|
name: 'UserStep0',
|
|
components: {
|
|
navbar,
|
|
inputImage,
|
|
showExample
|
|
},
|
|
data() {
|
|
return {
|
|
show: false,
|
|
url: '',
|
|
orderId: '',
|
|
form: {
|
|
a: '', // 仪表盘照片
|
|
b: '', // 车身前方照片
|
|
c: '', // 车身后方照片
|
|
d: '', // 车身左侧方照片
|
|
e: '', // 车身右侧方照片
|
|
f: '', // 当前工作环境
|
|
g: '', // 水槽照片
|
|
h: '', // 液压油位照片
|
|
i: '', // 预留字段
|
|
j: '', // 预留字段
|
|
k: '', // 预留字段
|
|
remark: '' // 备注
|
|
}
|
|
}
|
|
},
|
|
onLoad(options) {
|
|
if (options.id) {
|
|
this.orderId = options.id
|
|
}
|
|
},
|
|
methods: {
|
|
// 返回上一页
|
|
goBack() {
|
|
uni.navigateBack()
|
|
},
|
|
|
|
// 显示示例图片
|
|
clickShowExample(url) {
|
|
if (url) {
|
|
this.url = url
|
|
} else {
|
|
this.url = 'https://relief.oss-cn-hangzhou.aliyuncs.com/yx.jpg'
|
|
}
|
|
this.show = true
|
|
},
|
|
|
|
// 处理图片上传成功
|
|
handleImageUpload(field, event) {
|
|
console.log('图片上传成功:', field, event)
|
|
// event 包含 { localPath, ossUrl }
|
|
if (event && event.ossUrl) {
|
|
this.form[field] = event.ossUrl
|
|
} else if (event && event.localPath) {
|
|
// 如果没有OSS地址,使用本地路径(开发模式)
|
|
this.form[field] = event.localPath
|
|
}
|
|
},
|
|
|
|
// 提交保存
|
|
clickSaveAndBack() {
|
|
// 验证必填字段
|
|
if (!this.form.a || !this.form.b || !this.form.c || !this.form.d ||
|
|
!this.form.e || !this.form.f || !this.form.g || !this.form.h) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '请按照要求拍摄上传照片'
|
|
})
|
|
return
|
|
}
|
|
this.doSubmit()
|
|
},
|
|
|
|
// 执行提交
|
|
doSubmit() {
|
|
// 模拟数据提交
|
|
const submitData = {
|
|
id: this.$utils?.generateUUID?.() || Date.now().toString(),
|
|
status: 1,
|
|
step: 1,
|
|
orderId: this.orderId,
|
|
...this.form
|
|
}
|
|
|
|
console.log('提交数据:', submitData)
|
|
|
|
// 模拟提交成功
|
|
uni.showToast({
|
|
icon: 'success',
|
|
title: '提交成功'
|
|
})
|
|
|
|
setTimeout(() => {
|
|
uni.navigateBack({
|
|
delta: 1
|
|
})
|
|
}, 1500)
|
|
|
|
// 实际项目中的API调用示例:
|
|
// this.$httpPost('/api/order/image', submitData, (res) => {
|
|
// console.log('[/order/image]', res)
|
|
// if (res.data && res.data > 0) {
|
|
// this.$httpPost('/api/order/status', submitData, (res2) => {
|
|
// console.log('[/order/status]', res2)
|
|
// if (res2.data) {
|
|
// uni.showToast({ icon: 'success', title: '提交成功' })
|
|
// setTimeout(() => {
|
|
// uni.navigateBack({ delta: 1 })
|
|
// }, 1500)
|
|
// }
|
|
// })
|
|
// } else {
|
|
// uni.showModal({
|
|
// title: '提交失败',
|
|
// content: `本次提交失败,您可以停留在本页面,稍后再次尝试提交,错误码[${res.data}]`
|
|
// })
|
|
// }
|
|
// })
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.page {
|
|
background-color: #F5F5F5;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.content {
|
|
padding-bottom: 120rpx; // 为底部按钮留出空间
|
|
}
|
|
|
|
.cr {
|
|
min-height: calc(88vh);
|
|
}
|
|
|
|
.mt40 {
|
|
margin-top: 40rpx;
|
|
}
|
|
|
|
// 卡片样式
|
|
.re-card-p32 {
|
|
padding: 32rpx;
|
|
margin: 0 32rpx 32rpx 32rpx;
|
|
background-color: #fff;
|
|
border-radius: 16rpx;
|
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
// 弹性布局
|
|
.flex-sb {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
|
|
// 标签样式
|
|
.re-from-label {
|
|
font-size: 32rpx;
|
|
font-weight: 500;
|
|
color: #333;
|
|
line-height: 44rpx;
|
|
}
|
|
|
|
// 查看示例按钮
|
|
.re-card-show {
|
|
font-size: 26rpx;
|
|
color: #007AFF;
|
|
padding: 8rpx 16rpx;
|
|
border: 1rpx solid #007AFF;
|
|
border-radius: 20rpx;
|
|
background-color: rgba(0, 122, 255, 0.1);
|
|
}
|
|
|
|
// 说明文字
|
|
.re-card-context {
|
|
font-size: 26rpx;
|
|
color: #666;
|
|
line-height: 36rpx;
|
|
margin-top: 16rpx;
|
|
padding: 16rpx;
|
|
background-color: #f8f9fa;
|
|
border-radius: 8rpx;
|
|
border-left: 4rpx solid #007AFF;
|
|
}
|
|
|
|
// 高亮文字
|
|
.highlight {
|
|
color: #F40000;
|
|
font-weight: 500;
|
|
}
|
|
|
|
// 可选标识
|
|
.optional {
|
|
color: #999;
|
|
font-weight: normal;
|
|
}
|
|
|
|
// 文本域样式
|
|
.re-card-textarea {
|
|
width: 100%;
|
|
min-height: 120rpx;
|
|
padding: 20rpx;
|
|
border: 1rpx solid #e0e0e0;
|
|
border-radius: 8rpx;
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
background-color: #fafafa;
|
|
margin-top: 16rpx;
|
|
box-sizing: border-box;
|
|
resize: none;
|
|
|
|
&::placeholder {
|
|
color: #999;
|
|
}
|
|
|
|
&:focus {
|
|
border-color: #007AFF;
|
|
background-color: #fff;
|
|
}
|
|
}
|
|
|
|
// 底部按钮区域
|
|
.re-end-pand {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
padding: 24rpx 32rpx;
|
|
padding-bottom: calc(24rpx + env(safe-area-inset-bottom));
|
|
background-color: #fff;
|
|
border-top: 1rpx solid #e0e0e0;
|
|
z-index: 100;
|
|
|
|
button {
|
|
width: 100%;
|
|
height: 88rpx;
|
|
background: linear-gradient(135deg, #007AFF 0%, #0056CC 100%);
|
|
color: #fff;
|
|
font-size: 32rpx;
|
|
font-weight: 500;
|
|
border: none;
|
|
border-radius: 44rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.3);
|
|
transition: all 0.3s ease;
|
|
|
|
&:active {
|
|
transform: translateY(2rpx);
|
|
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.4);
|
|
}
|
|
|
|
&::after {
|
|
border: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 单选框样式覆盖
|
|
/deep/ uni-radio .uni-radio-input {
|
|
background-color: #F40000 !important;
|
|
border-color: #F40000 !important;
|
|
}
|
|
|
|
/deep/ uni-radio .uni-radio-input:empty {
|
|
background-color: #ffffff !important;
|
|
border-color: #d1d1d1 !important;
|
|
}
|
|
|
|
// 车辆图标
|
|
.re-from-car {
|
|
width: 72rpx;
|
|
height: 60rpx;
|
|
margin: 0 16rpx -20rpx 0;
|
|
}
|
|
</style>
|