|
|
- <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>
|