This commit is contained in:
SelfRidicule 2024-08-13 15:00:32 +08:00
parent 02b008b481
commit 8e21c838ae
5 changed files with 161 additions and 101 deletions

View File

@ -40,7 +40,7 @@ export function selectRoomListRq(data) {
// 保存工单 // 保存工单
export function repairSaveRq(data) { export function repairSaveRq(data) {
return request({ return request({
url: '/repair/save', url: '/app/repair/flow/start',
method: "post", method: "post",
data data
}); });

View File

@ -302,21 +302,4 @@ App({
} }
}) })
}, },
selfUploadFile(url) {
let _this = this
return new Promise((resolve, reject) => {
wx.uploadFile({
url: _this.DOMAIN_NAME + '/api/dfs/upload',
filePath: url,
name: 'file',
formData: {},
success: res => {
resolve(JSON.parse(res.data));
},
fail: err => {
reject(err);
}
})
})
},
}) })

View File

@ -3,7 +3,9 @@ let app = getApp();
import Notify from '@vant/weapp/notify/notify'; import Notify from '@vant/weapp/notify/notify';
import { import {
selfFormatTimeYMDHMS selfFormatTimeYMDHMS,
repairAttachUpload,
uploadVoice
} from "../../../utils/util.js" } from "../../../utils/util.js"
import { import {
@ -37,11 +39,9 @@ Page({
}, { }, {
name: '三级', name: '三级',
}, ], }, ],
failureDateShow: false, // 故障时间show repairTimeVisible: false, // 故障时间show
failureDate: new Date().getTime(), // 故障时间-当前 repairTime: new Date().getTime(), // 故障时间-当前
failureMinDate: new Date().getTime(), // 故障时间-最小
typeVisible: false, typeVisible: false,
typeName: '',
typeColumns: [{ typeColumns: [{
values: [], values: [],
className: 'column1', className: 'column1',
@ -52,7 +52,6 @@ Page({
}, },
], ],
addressVisible: false, addressVisible: false,
addressName: '',
addressColumns: [{ addressColumns: [{
values: [], values: [],
className: 'column1', className: 'column1',
@ -66,17 +65,19 @@ Page({
detail: { detail: {
"repairName": "", //维修名称 "repairName": "", //维修名称
"repairLevel": "", //维修等级 "repairLevel": "", //维修等级
"failureDate": null, //故障时间 "repairTime": null, //故障时间
"typeId": null, //故障类型 "typeId": null, //故障类型
"repairDevice": null, //维修设备 "typeName": "", //故障名称
"deviceId": null, //设备
"deviceName": "", //设备名称
"name": "", //用户名 "name": "", //用户名
"phone": "", //手机号码 "phone": "", //手机号码
"addressId": null, // 地点id "addressId": null, // 地点id
"roomId": null, // 楼层id "address": null, // 地点
"area": "", // 门牌号 "floorId": null, // 楼层id
"content": "", // 描述 "floor": null, // 楼层id
"repairVoice": "", // 语音文件 "room": "", // 门牌号
"repairImages": "", //故障图片 "explain": "", // 描述
}, },
}, },
@ -141,30 +142,30 @@ Page({
}, },
// 显示-故障时间 // 显示-故障时间
showFailureDate() { showRepairTime() {
let _this = this; let _this = this;
_this.setData({ _this.setData({
failureDateShow: true repairTimeVisible: true
}) })
}, },
// 关闭-故障时间 // 关闭-故障时间
hideFailureDate() { hideRepairTime() {
let _this = this; let _this = this;
_this.setData({ _this.setData({
failureDateShow: false repairTimeVisible: false
}) })
}, },
// 确认-故障时间 // 确认-故障时间
confirmFailureDate(e) { confirmRepairTime(e) {
console.log('confirmFailureDate', e); console.log('confirmRepairTime', e);
let _this = this; let _this = this;
let detail = _this.data.detail; let detail = _this.data.detail;
detail.failureDate = selfFormatTimeYMDHMS(e.detail); detail.repairTime = selfFormatTimeYMDHMS(e.detail);
_this.setData({ _this.setData({
failureDateShow: false, repairTimeVisible: false,
failureDate: e.detail, repairTime: e.detail,
detail detail
}) })
}, },
@ -253,11 +254,11 @@ Page({
} = e.detail; } = e.detail;
let detail = _this.data.detail let detail = _this.data.detail
detail.typeId = value[0].id detail.typeId = value[0].id
detail.repairDevice = value[1].id detail.typeName = value[0].text
let typeName = value[0].text + '/' + value[1].text detail.deviceId = value[1].id
detail.deviceName = value[1].text
_this.setData({ _this.setData({
detail, detail,
typeName,
typeVisible: false typeVisible: false
}) })
}, },
@ -347,11 +348,11 @@ Page({
} = e.detail; } = e.detail;
let detail = _this.data.detail let detail = _this.data.detail
detail.addressId = value[0].id detail.addressId = value[0].id
detail.roomId = value[1].id detail.address = value[0].text
let addressName = value[0].text + '/' + value[1].text detail.floorId = value[1].id
detail.floor = value[1].text
_this.setData({ _this.setData({
detail, detail,
addressName,
addressVisible: false addressVisible: false
}) })
}, },
@ -453,37 +454,34 @@ Page({
}, },
// 文件-上传后 // 文件-上传后
fileAfterRead(event) { async fileAfterRead(event) {
let _this = this; let _this = this;
console.log('fileAfterRead', event); console.log('fileAfterRead', event);
// 上传完成需要更新 fileList
let fileList = _this.data.fileList;
//
const { const {
file file
} = event.detail; } = event.detail;
// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式 // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
for (let i = 0; i < file.length; i++) { for (let i = 0; i < file.length; i++) {
let url = file[i].url; let url = file[i].url;
wx.uploadFile({ await repairAttachUpload({
url: app.DOMAIN_NAME + '/api/dfs/upload', url,
filePath: url, operate: 'repair'
name: 'file', }).then(res => {
formData: {}, console.log('upload file ', res);
success(res) { fileList.push({
console.log('upload file ', res); id: res.id,
let fileData = JSON.parse(res.data) relativeUrl: res.url,
// 上传完成需要更新 fileList url: app.IMG_NAME + res.url,
let fileList = _this.data.fileList; deletable: true,
fileList.push({ })
relativeUrl: fileData.fileName, })
url: app.IMG_NAME + fileData.fileName,
name: fileData.fileName,
deletable: true,
})
_this.setData({
fileList
})
},
});
} }
_this.setData({
fileList
})
}, },
@ -519,6 +517,7 @@ Page({
// 数据 // 数据
let detail = _this.data.detail; let detail = _this.data.detail;
// //
//
// 校验数据 // 校验数据
// //
// 报修名称 // 报修名称
@ -532,7 +531,7 @@ Page({
return; return;
} }
// 故障时间 // 故障时间
if (!detail.failureDate) { if (!detail.repairTime) {
_this.showErrMsg('请选择故障时间!') _this.showErrMsg('请选择故障时间!')
return; return;
} }
@ -547,7 +546,7 @@ Page({
return; return;
} }
// 门牌号 // 门牌号
if (!detail.area) { if (!detail.room) {
_this.showErrMsg('请输入门牌号!') _this.showErrMsg('请输入门牌号!')
return; return;
} }
@ -567,33 +566,29 @@ Page({
return; return;
} }
// 故障描述 // 故障描述
if (!detail.content) { if (!detail.explain) {
_this.showErrMsg('请输入故障描述!') _this.showErrMsg('请输入故障描述!')
return; return;
} }
//
let fileIdList = []
// 图片上传 // 图片上传
if (fileList && fileList.length > 0) { if (fileList && fileList.length > 0) {
detail.repairImages = JSON.stringify(fileList.map(item => { fileIdList = fileList.map(item => item.id)
return {
name: item.relativeUrl,
url: item.relativeUrl,
uid: item.relativeUrl,
}
}))
} }
// 音频 // 音频
if (voiceObj && voiceObj.tempFilePath) { if (voiceObj && voiceObj.tempFilePath) {
await app.selfUploadFile(voiceObj.tempFilePath).then(res => { await uploadVoice(voiceObj.tempFilePath).then(res => {
console.log('selfUploadFile', res); console.log('uploadVoice', res);
detail.repairVoice = JSON.stringify({ fileIdList.push(res.id)
url: res.fileName,
time: voiceObj.duration
})
}) })
} }
// //
// 添加数据 // 添加数据
repairSaveRq(detail).then(res => { repairSaveRq({
repair: detail,
files: fileIdList
}).then(res => {
console.log('visitorPersonRq', res); console.log('visitorPersonRq', res);
// //
if (res.code == 0) { if (res.code == 0) {

View File

@ -8,21 +8,21 @@
<view class="label must">故障等级</view> <view class="label must">故障等级</view>
<van-field value="{{ detail.repairLevel }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showFaultLevel" /> <van-field value="{{ detail.repairLevel }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showFaultLevel" />
</view> </view>
<view class="rowView" bind:tap="showFailureDate"> <view class="rowView" bind:tap="showRepairTime">
<view class="label must">故障时间</view> <view class="label must">故障时间</view>
<van-field value="{{ detail.failureDate }}" input-class="input" is-link readonly placeholder="请选择" border="{{ false }}" arrow-direction="down" input-align="right" /> <van-field value="{{ detail.repairTime }}" input-class="input" is-link readonly placeholder="请选择" border="{{ false }}" arrow-direction="down" input-align="right" />
</view> </view>
<view class="rowView"> <view class="rowView">
<view class="label must">故障类型</view> <view class="label must">故障类型</view>
<van-field value="{{ typeName }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showType" /> <van-field value="{{ detail.typeName ? detail.typeName + '/' + detail.deviceName : '' }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showType" />
</view> </view>
<view class="rowView"> <view class="rowView">
<view class="label must">故障地点</view> <view class="label must">故障地点</view>
<van-field value="{{ addressName }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showAddress" /> <van-field value="{{ detail.address ? detail.address + '/' + detail.floor : '' }}" input-class="input" is-link readonly placeholder="请选择" arrow-direction="down" border="{{ false }}" input-align="right" bind:tap="showAddress" />
</view> </view>
<view class="rowView"> <view class="rowView">
<view class="label must">门牌号</view> <view class="label must">门牌号</view>
<van-field value="{{ detail.area }}" bind:input="fieldInput" data-name="area" clearable input-class="input" placeholder="请输入" border="{{ false }}" input-align="right" /> <van-field value="{{ detail.room }}" bind:input="fieldInput" data-name="room" clearable input-class="input" placeholder="请输入" border="{{ false }}" input-align="right" />
</view> </view>
<view class="rowView"> <view class="rowView">
<view class="label must">联系电话</view> <view class="label must">联系电话</view>
@ -35,7 +35,7 @@
<view class="rowColumnView"> <view class="rowColumnView">
<view class="label must">故障描述</view> <view class="label must">故障描述</view>
<view class="contentView"> <view class="contentView">
<van-field model:value="{{ detail.content }}" bind:input="fieldInput" data-name="content" type="textarea" clearable placeholder="请输入" maxlength="{{100}}" show-word-limit border="{{false}}" autosize input-class="selfTextarea" /> <van-field model:value="{{ detail.explain }}" bind:input="fieldInput" data-name="explain" type="textarea" clearable placeholder="请输入" maxlength="{{100}}" show-word-limit border="{{false}}" autosize input-class="selfTextarea" />
<view class="voiceView1" bind:touchstart="startRecording" bind:touchend="stopRecording"> <view class="voiceView1" bind:touchstart="startRecording" bind:touchend="stopRecording">
<view class="voiceView2"> <view class="voiceView2">
<view class="voiceImg" style="background: no-repeat center/cover url({{IMG_NAME + '/profile/static/repair/index/voice.png'}});"></view> <view class="voiceImg" style="background: no-repeat center/cover url({{IMG_NAME + '/profile/static/repair/index/voice.png'}});"></view>
@ -71,8 +71,8 @@
<van-action-sheet description="请选择故障等级" close-on-click-overlay="{{true}}" show="{{ faultLevelShow }}" actions="{{ faultLevelList }}" bind:select="selectFaultLevel" bind:close="closeFaultLevel" /> <van-action-sheet description="请选择故障等级" close-on-click-overlay="{{true}}" show="{{ faultLevelShow }}" actions="{{ faultLevelList }}" bind:select="selectFaultLevel" bind:close="closeFaultLevel" />
<!-- 选择-故障时间 --> <!-- 选择-故障时间 -->
<van-popup show="{{ failureDateShow }}" position="bottom" custom-style="height: 50vh;" bind:close="hideFailureDate"> <van-popup show="{{ repairTimeVisible }}" position="bottom" custom-style="height: 50vh;" bind:close="hideRepairTime">
<van-datetime-picker type="datetime" value="{{ failureDate }}" bind:confirm="confirmFailureDate" bind:cancel="hideFailureDate" /> <van-datetime-picker type="datetime" value="{{ repairTime }}" bind:confirm="confirmRepairTime" bind:cancel="hideRepairTime" />
</van-popup> </van-popup>
<!-- 故障类型 --> <!-- 故障类型 -->

View File

@ -1,3 +1,6 @@
let app = getApp();
//返回 例 2017 //返回 例 2017
const formatYear = data => { const formatYear = data => {
var date = data.date; var date = data.date;
@ -220,15 +223,15 @@ function getUrlParamsObj(url) {
// 通过 ? 分割获取后面的参数字符串 // 通过 ? 分割获取后面的参数字符串
let urlStr = url.split('?')[1] let urlStr = url.split('?')[1]
// 创建空对象存储参数 // 创建空对象存储参数
let obj = {}; let obj = {};
// 再通过 & 将每一个参数单独分割出来 // 再通过 & 将每一个参数单独分割出来
let paramsArr = urlStr.split('&') let paramsArr = urlStr.split('&')
for(let i = 0,len = paramsArr.length;i < len;i++){ for (let i = 0, len = paramsArr.length; i < len; i++) {
// 再通过 = 将每一个参数分割为 key:value 的形式 // 再通过 = 将每一个参数分割为 key:value 的形式
let arr = paramsArr[i].split('=') let arr = paramsArr[i].split('=')
obj[arr[0]] = arr[1]; obj[arr[0]] = arr[1];
} }
return obj return obj
} }
// 判断是否是图片 // 判断是否是图片
@ -240,6 +243,82 @@ function checkIsImg(url) {
} }
} }
function uploadFile(url) {
let _this = this
return new Promise((resolve, reject) => {
wx.uploadFile({
url: app.DOMAIN_NAME + '/api/dfs/upload',
filePath: url,
name: 'file',
header: {
"Authorization": 'Bearer ' + wx.getStorageSync('token')
},
formData: {},
success: res => {
resolve(JSON.parse(res.data));
},
fail: err => {
reject(err);
}
})
})
}
// 报修上传图片视频
// url: localhost:9227/app/repairAttach/upload?repairId=&operate=repair\feedback\eval
// repairId : 工单id报修人不传
// operate : repair报修feedback维修eval评价
function repairAttachUpload(data) {
let _this = this
let paramUrl = "?a=a"
if (data.repairId) {
paramUrl = paramUrl + '&repairId=' + data.repairId
}
if (data.operate) {
paramUrl = paramUrl + '&operate=' + data.operate
}
return new Promise((resolve, reject) => {
wx.uploadFile({
url: app.DOMAIN_NAME + '/app/repairAttach/upload' + paramUrl,
filePath: data.url,
name: 'file',
header: {
"Authorization": 'Bearer ' + wx.getStorageSync('token')
},
formData: {},
success: res => {
resolve(JSON.parse(res.data));
},
fail: err => {
reject(err);
}
})
})
}
// 报修上传语音
// url: localhost:9227/app/repairAttach/upload/voice
function uploadVoice(url) {
let _this = this
return new Promise((resolve, reject) => {
wx.uploadFile({
url: app.DOMAIN_NAME + '/app/repairAttach/upload/voice',
filePath: url,
name: 'file',
header: {
"Authorization": 'Bearer ' + wx.getStorageSync('token')
},
formData: {},
success: res => {
resolve(JSON.parse(res.data));
},
fail: err => {
reject(err);
}
})
})
}
module.exports = { module.exports = {
formatTime: formatTime, formatTime: formatTime,
@ -258,5 +337,8 @@ module.exports = {
twoTimeIntervalReturnHours, twoTimeIntervalReturnHours,
selfArrSum, selfArrSum,
getUrlParamsObj, getUrlParamsObj,
checkIsImg checkIsImg,
uploadFile,
repairAttachUpload,
uploadVoice
} }