water_sh/pages/report/index.js

411 lines
9.2 KiB
JavaScript
Raw Normal View History

2025-04-15 15:48:57 +08:00
// 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
});
})
},
})