water_sh/pages/report/index.js

411 lines
9.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// index.js
var myRequest = require("../../utils/api.js");
var utils = require("../../utils/util.js");
const recorderManager = wx.getRecorderManager()
const innerAudioContext = wx.createInnerAudioContext({
useWebAudioImplement: false // 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项
})
let timer = null
Page({
data: {
value: '',
show: false,
autosize: {
minHeight: 70
},
repairSceneId: '',
repairSceneName: '',
repairScene: {},
iswarrantyPeriod: false,
faultImg: [],
list: [],
faultDesc: '',
address: '',
cascaderValue: '',
devicePhonenumber: '',
deviceId: '',
contactName: '',
warrantyPeriod: '',
contactPhone: '',
remark: '',
recorderManager: recorderManager,
curTime: 0,
recorder: {
status: 'ready', // 'ready' | 'recording'
text: '开始录音',
},
isPlay: false,
secondes: 0,
startTimestamp: 0,
isupload: false,
filePath: '',
},
onLoad() {
let user = wx.getStorageSync('userInfo')
this.getDefaultDevice(user.devicePhonenumber || user.phonenumber)
this.setData({
contactPhone: user.phonenumber
})
},
actionRecoder() {
if (this.data.recorder.status == 'ready') {
this._startRecord()
} else if (this.data.recorder.status == 'recording') {
this._endRecord()
} else if (this.data.recorder.status == 'recorded') {
console.log('删除')
clearInterval(timer)
this.setData({
curTime: 0,
isPlay: false,
secondes: 0,
filePath: '',
recorder: {
status: 'ready', // 'ready' | 'recording'
text: '开始录音',
},
})
}
},
//开始录音的时候
_startRecord() {
this.data.startTimestamp = Date.now();
const options = {
duration: 600000, //指定录音的时长,单位 ms最大为10分钟600000默认为1分钟60000
sampleRate: 16000, //采样率
numberOfChannels: 1, //录音通道数
encodeBitRate: 96000, //编码码率
format: 'mp3', //音频格式,有效值 aac/mp3
frameSize: 50, //指定帧大小,单位 KB
}
this.setData({
recorder: {
status: 'recording', // 'ready' | 'recording'
text: '结束录音',
},
})
//点击录制
this.data.recorderManager.start(options);
//开始录音计时
this.countDown();
this.data.recorderManager.onStart(() => {
console.log('点击录制...')
})
//错误回调
this.data.recorderManager.onError((res) => {
console.log('录音失败', res);
})
},
countDown() {
timer = setInterval(() => {
this.data.secondes++;
console.log('倒计时中')
this.setData({
curTime: this.data.secondes
});
}, 1000);
},
//停止录音
_endRecord() {
clearInterval(timer);
this.data.recorderManager.stop();
this.data.recorderManager.onStop((res) => {
console.log('停止录音', res)
let filePath = res.tempFilePath;
let duration = res.duration;
if ((Date.now() - this.data.startTimestamp) / 1000 < 2) {
wx.showToast({
title: '录音时间太短!',
icon: 'none',
duration: 1500
})
this.setData({
curTime: 0,
recorder: {
status: 'ready', // 'ready' | 'recording'
text: '开始录音',
},
})
return
} else {
this.setData({
recorder: {
status: 'recorded', // 'ready' | 'recording'
text: '清除录音',
},
})
this.uploadFile(filePath).then(res => {
this.setData({
filePath: res.url
})
})
}
})
},
//播放声音
playCorder: function () {
if (!this.data.filePath) {
wx.showToast({
title: '请录音后播放!',
icon: 'none',
duration: 1500
})
return
}
if (this.data.isPlay) {
wx.showToast({
title: '播放中。。。。',
icon: 'none',
duration: 1500
})
return
}
innerAudioContext.src = this.data.filePath,
innerAudioContext.play()
this.countDown()
innerAudioContext.onPlay(() => {
console.log('开始播放')
this.setData({
curTime: 0,
secondes: 0,
isPlay: true,
})
})
innerAudioContext.onEnded(() => {
clearInterval(timer);
this.setData({
isPlay: false,
// curTime:0
})
console.log('结束播放')
})
innerAudioContext.onError((res) => {
console.log(res.errMsg)
console.log(res.errCode)
})
},
onChangedevice(e) {
console.log(e)
if (e.detail.length == 11) {
this.getDefaultDevice(e.detail)
} else {
this.setData({
deviceId: '',
devciceName: "",
contactName: "",
address: ""
})
}
},
getDefaultDevice(devicePhonenumber) {
myRequest.myRequest('deviceRepairOrder/customer/deviceInfo', {
phonenumber: devicePhonenumber
}, 'get').then(res => {
console.log(res)
if (res.data) {
this.setData({
deviceId: res.data.id,
iswarrantyPeriod: utils.DataCompare(res.data.warrantyPeriod, new Date()),
devicePhonenumber,
warrantyPeriod: res.data.warrantyPeriod.substring(0, 10),
devciceName: res.data.name,
contactName: res.data.ownerName,
address: res.data.provinceName + res.data.cityName + res.data.areaName + res.data.townName + res.data.community
})
this.getRepairScene(res.data.deviceVersion)
} else {
wx.showToast({
title: '当前登录手机号无设备绑定信息,请输入',
icon: 'none'
})
}
})
},
getRepairScene(deviceVersion) {
myRequest.myRequest('deviceRepairOrder/customer/repairScene', {
deviceVersion,
sceneName: ''
}, 'get').then(res => {
console.log(res)
this.setData({
list: res.data
})
})
},
setDialog() {
this.setData({
show: true
})
},
selectItem(e) {
let {
item
} = e.currentTarget.dataset
console.log(item)
this.setData({
show: false,
repairSceneId: item.sceneId,
repairSceneName: item.sceneName,
repairScene: item
})
},
onChange(event) {
console.log(event)
// event.detail 的值为当前选中项的索引
let key = event.target.dataset.key
this.setData({
[key]: event.detail
});
},
bindDel(e) {
console.log(e)
let faultImg = this.data.faultImg
let delList = faultImg.splice(e.detail.index, 1)
myRequest.myRequest('wx/oss/' + delList[0].ossId, {}, 'delete').then(res => {
this.setData({
faultImg
})
})
},
saveDetail() {
if (!this.data.repairSceneId) {
wx.showToast({
title: '请选择维修类型',
icon: 'none'
})
return
}
if (this.data.faultImg.length < 3) {
wx.showToast({
title: '请上传3张以上图片',
icon: 'none'
})
return
}
if (!this.data.devciceName) {
wx.showToast({
title: '请输入正确的设备手机号',
icon: 'none'
})
return
}
if (this.data.faultDesc == '' || this.data.contactName == '') {
wx.showToast({
title: '请输入报修详情',
icon: 'none'
})
return
}
let {
deviceId,
contactName,
contactPhone,
faultDesc,
devicePhonenumber,
faultImg,
repairSceneId,
filePath
} = this.data
let img = faultImg.map(res => {
return res.url
})
let data = {
deviceId,
contactName,
repairSceneId,
contactPhone,
faultDesc,
"faultImg": img,
"remark": "",
devicePhonenumber,
faultVoice: filePath
}
wx.showLoading({
title: '加载中..',
mask: true
})
myRequest.myRequest('deviceRepairOrder/customer/create', data, 'post').then(res => {
wx.hideLoading()
wx.showToast({
title: '报修成功,等待维修人员上门维修',
icon: 'none'
})
setTimeout(() => {
wx.navigateBack()
}, 1000);
})
},
beforeRead(event) {
const {
file,
callback
} = event.detail;
console.log(event, callback)
let flag = file.every(res => {
return res.type === 'image' || res.type == "video"
})
callback(flag);
},
uploadFile(url) {
return new Promise((resolve, reject) => {
myRequest.updateImg({
file: url
}).then(res => {
resolve(res)
})
})
},
afterRead(event) {
const {
file
} = event.detail;
let that = this;
let upload = []
file.forEach(element => {
upload.push(this.uploadFile(element.url))
})
Promise.all(upload).then(res => {
let faultImg = that.data.faultImg
faultImg=[...faultImg,...res]
that.setData({
faultImg
});
})
},
})