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.

289 lines
6.7 KiB

2 months ago
<template>
<view class="mybaoxiu-container">
<u-navbar bgColor="#ffffff" :placeholder="true" titleStyle="font-weight:600" title="我的报修" :autoBack="true">
</u-navbar>
<uni-forms :model="mybaoxiuForm" ref="mybaoxiuForm" :rules="rules" :errShowType="errorType">
<uni-forms-item name="question">
<view class="top-search">
<view class="top-search-prefix">报修原因</view>
<u-input ref="input" :focus="isfocus" clearable v-model="mybaoxiuForm.question" placeholder="请输入报修原因" fontSize="13px" @blur="onblur"></u-input>
</view>
</uni-forms-item>
<uni-forms-item>
<view class="upload-img">
<view class="upload-img-title">上传图片</view>
<u-line color="#E6E6E6"></u-line>
<view class="upload-img-box"><u-upload :fileList="fileList" auto-upload @delete="deletePic" @afterRead="getImage"></u-upload></view>
</view>
</uni-forms-item>
<!-- <uni-forms-item>
<view class="dispose-person">
<view class="dispose-item" @click="openPicker">
<view class="dispose-item-left">处理人</view>
<view class="dispose-item-right">
<view style="margin-right: 20rpx">请选择处理人</view>
<u-icon name="arrow-right"></u-icon>
</view>
</view>
</view>
</uni-forms-item> -->
</uni-forms>
<view class="submit" @click="addFrom()"></view>
<u-picker :show="personPopupShow" :columns="columns" @confirm="personPopupConfirm" @cancel="personPopupClose"></u-picker>
</view>
</template>
<script>
import config from '@/config.js';
import { getToken } from '@/utils/auth.js';
import { addFacilitiesRepair } from '@/api/indexpage/implement/index.js';
export default {
data() {
return {
errorType: 'toast',
mybaoxiuForm: { question: '', pic: '' },
fileList: [],
ssid: '',
columns: [],
isfocus: false,
rules: {
// 对name字段进行必填验证
question: {
rules: [
{
required: true,
errorMessage: '请输入报修原因',
trigger: ['blur', 'change']
}
]
}
},
personPopupShow: false
};
},
onLoad(options) {
this.ssid = options.ssId;
},
methods: {
onblur() {
this.isfocus = false;
},
addFocus() {
this.isfocus = true;
},
personPopupConfirm() {
this.personPopupShow = false;
},
openPicker() {
this.personPopupShow = true;
},
personPopupClose() {
this.personPopupShow = false;
},
//确定提交
addFrom() {
this.$refs.mybaoxiuForm
.validate()
.then(res => {
//把图片数组对象中的id转成逗号隔开的字符串,赋值给from表单
this.mybaoxiuForm.pic = this.fileList
.map(item => {
return item.id;
})
.join(',');
let params = {
facilitiesId: this.ssid,
...this.mybaoxiuForm
};
addFacilitiesRepair(params).then(res => {
this.mybaoxiuForm = { question: '', pic: '' };
this.fileList = [];
uni.navigateBack({
delta: 1
});
this.$modal.msg('提交成功');
});
})
.catch(err => {
this.$modal.msg(err);
});
},
// 删除图片
deletePic(event) {
//删除本地
this[`fileList${event.name}`].splice(event.index, 1);
},
// 图片上传结果
async getImage(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file);
let fileListLen = this[`fileList${event.name}`].length;
lists.map(item => {
this[`fileList${event.name}`].push({
...item,
status: 'uploading',
message: '上传中'
});
});
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url);
let item = this[`fileList${event.name}`][fileListLen];
this[`fileList${event.name}`].splice(
fileListLen,
1,
Object.assign(item, {
status: 'success',
message: '',
id: result
})
);
fileListLen++;
}
},
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: `${config.baseUrlImg}/filemanage/upload1`, // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
header: {
Authorization: 'Bearer ' + getToken()
},
formData: {
isFullDir: false,
classify: '1',
dir: '/inspectionPic'
},
success: res => {
let result = JSON.parse(res.data);
console.log('result', result);
setTimeout(() => {
resolve(result.data.id);
}, 1000);
}
});
});
}
}
};
</script>
<style lang="scss" scoped>
.mybaoxiu-container {
// #ifndef APP-PLUS
height: calc(100vh - 44px);
// #endif
// #ifdef APP-PLUS
height: calc(100vh);
// #endif
background-color: #fff;
overflow-y: auto;
font-family: Noto Sans S Chinese;
/deep/ .uni-forms-item {
margin-bottom: 0;
}
.top-search {
height: 134rpx;
box-sizing: border-box;
padding: 20rpx 28rpx 28rpx;
display: flex;
align-items: center;
/deep/ .input-placeholder {
text-align: right !important;
color: red;
}
::v-deep .u-input {
height: 100%;
border-radius: 0 9px 9px 0;
background-color: #f8f9fb;
border: none;
}
/deep/ .uni-input-placeholder {
text-align: right;
}
.top-search-prefix {
font-weight: 400;
height: 100%;
display: flex;
justify-content: center;
width: 140rpx;
background-color: #f8f9fb;
align-items: center;
border-radius: 9px 0 0 9px;
font-size: 13px;
color: #666666;
}
.top-search-suffix {
width: 100px;
font-weight: 400;
font-size: 13px;
color: #999999;
line-height: 19px;
}
}
.upload-img {
width: calc(100% - 56rpx);
margin: 0 auto;
box-sizing: border-box;
padding: 28rpx 28rpx 42rpx 28rpx;
background-color: #f8f9fb;
border-radius: 18rpx;
.upload-img-title {
width: 100%;
font-weight: 400;
font-size: 13px;
color: #666666;
margin-bottom: 20rpx;
}
.upload-img-box {
margin-top: 34rpx;
}
}
.dispose-person {
height: 134rpx;
box-sizing: border-box;
padding: 30rpx 28rpx 28rpx;
.dispose-item {
width: 100%;
border-radius: 18rpx;
height: 42px;
background: #f8f9fb;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0 26rpx;
.dispose-item-left {
font-weight: 400;
font-size: 13px;
color: #666666;
}
.dispose-item-right {
display: flex;
align-items: center;
font-weight: 400;
font-size: 13px;
color: #999999;
line-height: 19px;
}
}
}
.submit {
height: 94rpx;
background: linear-gradient(0deg, #2a86ff, #8fbcff);
line-height: 94rpx;
width: calc(100% - 140rpx);
text-align: center;
margin: 0 auto;
margin-top: 200rpx;
border-radius: 50rpx;
color: #fff;
font-size: 30rpx;
}
}
</style>