flying-monkey/pages/repairsPage/repairsPage.vue

473 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="content">
<status-nav navBarTitle="添加报修" returnColor="#c2c2c2"></status-nav>
<container-subgroup>
<view slot="content" style="margin: 0 -30rpx;">
<view class="repairs-nav" style="margin-top: -30rpx;">
<view :key="index" class="li" @click="repairsNavFun(index)" :class="item.state?'on':''"
v-for="(item,index) in navDataState">
{{item.title}}
</view>
</view>
<view class="repairs-hint padding">
<image class="icon" src="../../static/iocn/lp.png" mode="aspectFill"></image>
<view class="text">
请务必拍好维保照片或视频上传,便于技术工程师作为判断依据,带齐 相关维保设备。高效为您提供服务。
</view>
</view>
<view class="fault-type-title padding">维保类型:</view>
<view class="padding fault-type-content">
<view class="li" @click="repairsTypeFun(index)" :class="index==indexType?'on':''"
v-for="(item,index) in faultTypeData">
{{item.name}}
</view>
</view>
<view class="padding">
<view class="devicename" @click="scanCodeFun()" v-if="navDataState[0].state">
<view class="">请填写设备名称和型号或扫描二维码</view>
<image class="sm" src="../../static/iocn/sm.png" lazy-load mode=""></image>
</view>
<input v-model="data.device_name" class="devicename" placeholder="请填写设备名称和型号(例:华为LED" v-else />
<view class="fault-pictures radius10" @click="chooseImg">
<image class="fault-pictures-img" v-if="imgsrcArr.length>=1" :src="imgsrcArr[0]"
mode="aspectFill"></image>
<view class="fault-pictures-con" v-else>
<image class="img" src="../../static/iocn/gz.png" lazy-load mode="aspectFill"></image>
<view class="text">添加维保图片</view>
</view>
</view>
<textarea v-model="data.fault_describe" class="fault-description radius10" placeholder="维保情况描述"
placeholder-class="fault-description-text" />
<view class="detailed-address inputCss">
<input type="text" v-model="data.service_address" class="fon26 width100"
placeholder="请输入详细的上门服务地址" placeholder-class="inputCss-input" />
<image @click="mapFun()" src="../../static/iocn/map.png" class="map flexs" mode="aspectFill">
</image>
</view>
<input type="text" class="inputCss" v-model="data.username" placeholder="请填写您的姓名"
placeholder-class="inputCss-input" />
<input type="text" class="inputCss" v-model="data.phone" placeholder="请填写联系电话"
placeholder-class="inputCss-input" />
<input type="text" class="inputCss" @tap="openDatetimePicker" disabled v-model="data.visit_time"
placeholder="请选择上门时间" placeholder-class="inputCss-input" />
<yy-mm-dd-hh-ss ref="myPicker" @submit="handleSubmit" :start-year="2022" :end-year="2122">
</yy-mm-dd-hh-ss>
<button class="submit-button" @click="submitButton()" type="default"></button>
</view>
</view>
</container-subgroup>
</view>
</template>
<script>
import yyMmDdHhSs from '@/components/dates/yy-mm-dd-hh-ss.vue';
import {
uploadImg
} from '@/jsFile/public-api.js';
export default {
components: {
yyMmDdHhSs
},
data() {
return {
single: "2021-04-3",
data: {
is_device: 0,
fault_type: "",
device_name: "",
project_number: "",
service_address: "",
username: "",
fault_picture: "",
fault_describe: "",
phone: "",
visit_time: ""
},
imgsrcArr: [],
indexType: 0,
navDataState: [{
title: "有设备",
state: false,
is_device: 1
},
{
title: "无设备",
state: true,
is_device: 0
}
],
faultTypeData: []
}
},
onLoad() {
this.getType()
},
methods: {
// 获取维保类型
getType() {
// /universal/api.order/fault_type
this.$requst.post('/universal/api.work_order/fault_type').then(res => {
// this.$toolAll.tools.showToast(res.msg);
if (res.code == 1) {
this.faultTypeData = [...res.data]
} else {
}
})
},
openDatetimePicker() {
this.$refs.myPicker.show();
},
handleSubmit(e) {
// {year: "2019", month: "07", day: "17", hour: "15", minute: "21"}
console.log(e)
this.data.visit_time = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}`;
},
change(e) {
this.single = e;
console.log("-change事件:", e);
},
// 获取图片
chooseImg() {
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: (res) => {
this.imgsrcArr = []
let imgsrc = res.tempFilePaths;
imgsrc.forEach(item => {
this.imgsrcArr.push(item);
})
uploadImg({
path: res.tempFilePaths[0]
}).then(res => {
if (res.code) {
console.log(res.data.id)
this.$toolAll.tools.showToast('上传成功');
this.data.fault_picture = res.data.id
}
})
}
})
},
// 获取日期
dateFun(data) {
},
timeFun() {},
scanCodeFun() {
uni.scanCode({
success: function(res) {
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
}
});
},
submitButton() {
this.data.fault_type = this.faultTypeData[this.indexType].id
if (this.data.is_device == 0) {
if (!this.data.device_name) {
this.$toolAll.tools.showToast("请填写设备名称或型号");
return
}
} else {
if (!this.data.project_number) {
this.$toolAll.tools.showToast("请扫描设备二维码");
return
}
}
if (!this.data.username) {
this.$toolAll.tools.showToast("请填写您的姓名");
return
}
var reg_tel =
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/; //11位手机号码正则
if (!reg_tel.test(this.data.phone)) {
this.$toolAll.tools.showToast("请正确填写您的电话");
return
}
console.log(this.data)
this.$requst.post('/universal/api.work_order/repair', this.data).then(res => {
if (res.code == 1) {
console.log(res)
} else {
}
})
console.log(this.data)
},
mapFun() {
const that = this
uni.getLocation({
type: 'gcj02', //返回可以用于uni.openLocation的经纬度
success: function(res) {
const latitude = res.latitude;
const longitude = res.longitude;
uni.chooseLocation({
success: function(res) {
that.data.service_address = res.address
}
});
// uni.openLocation({
// latitude: latitude,
// longitude: longitude,
// success: function () {
// console.log('success');
// }
// });
}
});
},
repairsNavFun(index) {
for (var i = 0; i < this.navDataState.length; i++) {
this.navDataState[i].state = false
}
this.navDataState[index].state = true
console.log(this.navDataState[index].is_device)
this.data.is_device = this.navDataState[index].is_device
},
repairsTypeFun(index) {
this.indexType = index
},
}
}
</script>
<style>
.repairs-nav {
display: flex;
background-color: #FFFFFF;
justify-content: space-between;
}
.repairs-nav .li {
width: 50%;
padding: 30rpx 0rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #343536;
border-bottom: 2rpx solid rgba(0, 0, 0, 0);
}
.repairs-nav .on {
color: #00a2ea;
border-bottom: 2rpx solid #00a2ea;
}
.content {
background-color: #F7F7F7;
min-height: 100vh;
}
.repairs-hint {
width: 100%;
height: 123rpx;
background-color: #FFFFFF;
display: flex;
padding-top: 20rpx;
box-sizing: border-box;
margin-top: 23rpx;
border-top: 2rpx solid #e7e7e7;
border-bottom: 2rpx solid #e7e7e7;
}
.repairs-hint .icon {
width: 30rpx;
height: 27rpx;
margin-right: 15rpx;
margin-top: 8rpx;
}
.repairs-hint .text {
flex: 1;
color: #5e5e5e;
font-size: 22rpx;
line-height: 40rpx;
}
.fault-type-title {
margin-top: 14rpx;
width: 100%;
line-height: 80rpx;
margin-bottom: 13rpx;
border-top: 2rpx solid #e7e7e7;
border-bottom: 2rpx solid #e7e7e7;
height: 80rpx;
background-color: #FFFFFF;
color: #434242;
}
.fault-type-content {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.fault-type-content .li {
width: 160rpx;
height: 59rpx;
background-color: #FFFFFF;
font-size: 26rpx;
color: #5e5e5e;
box-sizing: border-box;
text-align: center;
line-height: 59rpx;
border-radius: 22rpx;
border: 2rpx solid #eeeeee;
margin-bottom: 15rpx;
}
.fault-type-content .on {
color: #FFFFFF;
border: none;
background-color: #00a2ea;
}
.information {}
.devicename {
width: 100%;
height: 78rpx;
border-radius: 10rpx;
background-color: #FFFFFF;
padding: 0 16rpx;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
color: #9f9898;
font-size: 26rpx;
line-height: 78rpx;
}
.fault-pictures {
display: flex;
align-items: center;
justify-content: center;
margin-top: 18rpx;
height: 320rpx;
box-sizing: border-box;
width: 100%;
background-color: #FFFFFF;
flex-direction: column;
}
.fault-pictures-con {
display: flex;
flex-direction: column;
align-items: center;
}
.fault-pictures .img {
width: 87rpx;
margin-bottom: 27rpx;
height: 87rpx;
}
.fault-pictures .text {
font-size: 30rpx;
color: #9f9898;
}
.fault-description {
height: 193rpx;
width: 100%;
box-sizing: border-box;
margin-top: 23rpx;
padding: 23rpx 19rpx;
background-color: #FFFFFF;
}
.fault-description-text {
color: #9f9898;
font-size: 26rpx
}
.inputCss {
height: 78rpx;
width: 100%;
box-sizing: border-box;
padding: 0rpx 17rpx;
font-size: 26rpx;
border-radius: 10rpx;
background-color: #FFFFFF;
color: #000000;
display: flex;
margin-top: 20rpx;
align-items: center;
}
.detailed-address {
justify-content: space-between;
}
.inputCss-input-input {
font-size: 26rpx;
color: #9f9898;
}
.detailed-address .map {
width: 151rpx;
height: 59rpx;
background-color: #F7F7F7;
}
.uni-datetime-pickerCss {
margin-top: 20rpx;
}
.submit-button {
width: 100%;
margin-top: 44rpx;
border-radius: 50rpx;
height: 90rpx;
background-color: #02A2ea;
line-height: 90rpx;
color: #FFFFFF;
text-align: center;
font-size: 30rpx;
}
.devicename .sm {
width: 42rpx;
height: 36rpx;
}
.fault-pictures-img {
width: 100%;
height: 100%;
}
</style>