411 lines
9.2 KiB
JavaScript
411 lines
9.2 KiB
JavaScript
|
// 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
|
|||
|
});
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
},
|
|||
|
})
|