You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
7.0 KiB

<template>
<view class="content">
<headerTopsTips></headerTopsTips>
<uni-nav-bar left-icon="left" title="故障上报" backgroundColor="#e6eafa" @clickLeft="handlegoback" />
<view class="tips">
<!-- <u-icon name="list"></u-icon> -->
<text class="icon iconfont icon-guzhang"></text>
<text style="margin-left: 10rpx;">请选择故障类型</text>
</view>
<view class="main_form">
<view class="choose_list">
<view v-for="(item,index) in choose_list" :key="index" @click="handle_choose(index)"
:class="item.check? 'ischeck_choose': '' ">
{{item.label}}
</view>
</view>
<!-- -->
</view>
<view class="tips">
<!-- <u-icon name="list"></u-icon> -->
<text class="icon iconfont icon-paizhao"></text>
<text style="margin-left: 10rpx;">拍摄单车周围环境,便于维修师傅找车</text>
</view>
<view class="upload_imgs">
<!-- <u-upload :action="action" :file-list="fileList"></u-upload> -->
<!-- <uni-file-picker limit="1" title="最多选择1张图片" @select="select_image"></uni-file-picker> -->
<view class="item_up">
<uni-icons type="plusempty" size="30" @click="select_image"></uni-icons>
</view>
<view class="imgs_item" v-for="(item,index) in upload_imgs_list" :key="index">
<image :src="item" mode="aspectFill"></image>
<uni-icons type="closeempty" size="20" class="close_imgs" @click="remove_imgs(index)"></uni-icons>
</view>
</view>
<view class="scan_code">
<input type="text" placeholder="车牌号(车牌损坏不用填)" style="font-size: 12px; letter-spacing: 3rpx; height: 70rpx;"
v-model="car_no" />
<view style=" height: 1px; background: #d9d9d9;"></view>
<input type="text" placeholder="备注" style="font-size: 12px; letter-spacing: 3rpx; height: 60rpx;"
v-model="remark" />
</view>
<view style="margin-top: 20rpx; display: flex;
justify-content: center;">
<button class="submit_clas" @click="submit_rush"></button>
</view>
</view>
</template>
<script setup>
import headerTopsTips from '@/pages/components/header_tops_tips.vue'
import {
baseUrl,
apiPath
} from '@/sheep/config';
import roastApi from '@/sheep/api/emergent/index'
import {
ref
} from 'vue'
const choose_list = ref([{
label: '私锁私用',
check: false,
id: 0
},
{
label: '车牌缺损',
check: false,
id: 1
},
{
label: '轮胎坏了',
check: false,
id: 2
},
{
label: '车锁坏了',
check: false,
id: 3
},
{
label: '违规乱停',
check: false,
id: 4
},
{
label: '密码不对',
check: false,
id: 5
},
{
label: '刹车坏了',
check: false,
id: 6
},
{
label: '其他',
check: false,
id: 7
},
])
const car_no = ref('')
const remark = ref('')
const fault_choose = ref(0)
const upload_imgs_list = ref([])
function handle_choose(index) {
for (var i = 0; i < choose_list.value.length; i++) {
if (index == i) {
choose_list.value[i].check = true
} else {
choose_list.value[i].check = false
}
}
fault_choose.value = index
}
function handlegoback() {
uni.navigateBack()
}
async function submit_rush() {
let data = {
type: fault_choose.value,
picture: upload_img.value.toString(),
no: car_no.value,
remark: remark.value
}
// console.log(data,'上传参数')
const response = await roastApi.addCart(data)
if (response.code == 0) {
uni.showModal({
title: '提交成功',
content: '您的故障上报已成功提交',
success: (res) => {
uni.navigateBack()
}
});
} else {
uni.showModal({
title: '提交失败',
content: '您的故障上报失败,请稍后重试',
success: (res) => {
uni.navigateBack()
}
});
}
}
function select_image() {
// console.log(data.tempFilePaths, 'data')
uni.chooseImage({
count: 4, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function(img) {
// console.log(img.tempFilePaths, 'img')
upload_img.value = []
upload_imgs_list.value = img.tempFilePaths
for(var i = 0; i < img.tempFilePaths.length; i++) {
handle_upload_images(img.tempFilePaths[i])
}
// if (upload_imgs_list.value.length == 0) {
// upload_imgs_list.value = img.tempFilePaths
// } else {
// for (var i = 0; i < img.tempFilePaths.length; i++) {
// if (upload_imgs_list.value.length >= 3) {
// return
// } else {
// upload_imgs_list.value.push(img.tempFilePaths[i])
// }
// }
// }
}
})
}
const upload_img = ref([])
function handle_upload_images(data) {
// console.log(data[0], '上传的文件')
uni.uploadFile({
url: `${baseUrl + apiPath}/infra/file/upload`,
filePath: data,
name: 'file',
method: 'post',
header: {
'tenant-id': 1,
'Authorization': uni.getStorageSync('token')
},
success: (res) => {
const data_inter = JSON.parse(res.data)
// console.log(data_inter, '上传成功')
upload_img.value.push(data_inter.data)
}
})
}
// 删除上传的照片
function remove_imgs(index) {
upload_imgs_list.value.splice(index,1)
}
</script>
<style lang="scss" scoped>
.content {
height: 100vh;
background: #f8f8f8;
// padding: 20rpx;
// box-sizing: border-box;
}
.submit_clas {
width: 500rpx;
color: #fff;
background: #000;
}
.main_form {
// height: 700rpx;
background: #ffffff;
width: 100%;
border-radius: 10rpx;
padding: 40rpx 20rpx;
box-sizing: border-box;
font-size: 14px;
font-weight: 600;
color: #202020;
}
.phone {
color: #44c159;
font-size: 12px;
text-decoration: underline;
}
.tips {
// margin-top: 30rpx;
// color: #b6b6b6;
padding: 20rpx 0 20rpx 40rpx;
font-size: 12px;
}
.scan_code {
margin-top: 20rpx;
background: #fff;
padding: 20rpx 40rpx;
}
.choose_list {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-evenly;
>view {
width: 45%;
line-height: 60rpx;
border-radius: 8rpx;
font-size: 12px;
border: 1px solid #d8d8d8;
text-align: center;
margin-bottom: 20rpx;
}
>view:nth-child(7),
>view:nth-child(8) {
margin-bottom: unset;
}
}
.ischeck_choose {
background: #000;
color: #fff;
opacity: 0.8;
}
.submit_btn {
line-height: 80rpx;
width: 80%;
margin: 20rpx auto;
background: #44c159;
color: #fff;
font-size: 14px;
text-align: center;
border-radius: 40rpx;
}
.upload_imgs {
width: 100%;
height: 150rpx;
padding: 20rpx 40rpx;
background: #fff;
// padding: 10rpx;
box-sizing: border-box;
display: flex;
align-items: center;
.item_up {
width: 100rpx;
height: 100rpx;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #ccc;
}
.imgs_item {
width: 100rpx;
height: 100rpx;
margin: 0 10rpx;
position: relative;
image {
width: 100%;
height: 100%;
}
.close_imgs {
position: absolute;
right: -5rpx;
top: -5rpx;
}
}
}
</style>