let app = getApp(); import Notify from '@vant/weapp/notify/notify'; import { selfFormatTimeYMDHMS, repairAttachUpload, uploadVoice } from "../../../utils/util.js" import { deviceTypeListRq, deviceListRq, selectAddressListRq, selectRoomListRq, repairSaveRq, } from "../../../api/repair/repair.js" Page({ /** * 页面的初始数据 */ data: { IMG_NAME: app.IMG_NAME, id: null, title: null, userDetail: {}, recorderManager: null, // 录音对象 voiceObj: {}, // 录音文件对象 innerAudioContext: null, // 音频对象 innerAudioContextIsPlay: false, // 音频对象-是否播放 faultLevelShow: false, faultLevelList: [{ name: '一级', }, { name: '二级', }, { name: '三级', }, ], repairTimeVisible: false, // 故障时间show repairTime: new Date().getTime(), // 故障时间-当前 typeVisible: false, typeColumns: [{ values: [], className: 'column1', }, { values: [], className: 'column2', }, ], addressVisible: false, addressColumns: [{ values: [], className: 'column1', }, { values: [], className: 'column2', }, ], fileList: [], // 上传文件 detail: { "repairName": "", //维修名称 "repairLevel": "", //维修等级 "repairTime": null, //故障时间 "typeId": null, //故障类型 "typeName": "", //故障名称 "deviceId": null, //设备 "deviceName": "", //设备名称 "name": "", //用户名 "phone": "", //手机号码 "addressId": null, // 地点id "address": null, // 地点 "floorId": null, // 楼层id "floor": null, // 楼层id "room": "", // 门牌号 "explain": "", // 描述 }, }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { console.log('onLoad', options) let _this = this; let userDetail = wx.getStorageSync('user') // let detail = _this.data.detail; detail.phone = userDetail.mobile _this.setData({ ...options, userDetail, detail }) // 页面初始化 options为页面跳转所带来的参数 wx.setNavigationBarTitle({ title: options.title }) // 初始化录音 _this.initRecording() // 查询设备类型 _this.queryDeviceType() // 查询地点 _this.queryAddress() }, // 显示-故障等级 showFaultLevel() { let _this = this; _this.setData({ faultLevelShow: true }) }, // 选择-故障等级 selectFaultLevel(e) { console.log('selectFaultLevel', e); let _this = this; let detail = _this.data.detail; detail.repairLevel = e.detail.name; _this.setData({ faultLevelShow: false, detail }) }, // 关闭-故障等级 closeFaultLevel() { let _this = this; _this.setData({ faultLevelShow: false }) }, // 显示-故障时间 showRepairTime() { let _this = this; _this.setData({ repairTimeVisible: true }) }, // 关闭-故障时间 hideRepairTime() { let _this = this; _this.setData({ repairTimeVisible: false }) }, // 确认-故障时间 confirmRepairTime(e) { console.log('confirmRepairTime', e); let _this = this; let detail = _this.data.detail; detail.repairTime = selfFormatTimeYMDHMS(e.detail); _this.setData({ repairTimeVisible: false, repairTime: e.detail, detail }) }, showType() { this.setData({ typeVisible: true, }) }, hideType() { this.setData({ typeVisible: false, }) }, // 查询设备类型 queryDeviceType() { let _this = this deviceTypeListRq().then(res => { console.log('deviceTypeListRq', res); let list = res.rows.map(item => { return { id: item.id, text: item.name } }) let typeColumns = _this.data.typeColumns typeColumns[0].values = list _this.setData({ typeColumns }) // 查询设备 _this.queryDevice(list[0].id) }) }, // 查询设备 queryDevice(id) { let _this = this deviceListRq({ typeId: id }).then(res => { console.log('deviceListRq', res); let list = res.rows.map(item => { return { id: item.id, text: item.name } }) let typeColumns = _this.data.typeColumns typeColumns[1].values = list _this.setData({ typeColumns }) }) }, // 选择设备类型 typeColumnsChange(e) { console.log('typeColumnsChange', e.detail); let _this = this const { picker, value, index } = e.detail; if (index == 0) { // 选择类型 let obj = value[index] _this.queryDevice(obj.id) } else if (index == 1) { // 选择设备 let obj = value[index] } }, // 确认设备 typeColumnsConfirm(e) { console.log('typeColumnsConfirm', e.detail); let _this = this const { picker, value, index } = e.detail; let detail = _this.data.detail detail.typeId = value[0].id detail.typeName = value[0].text detail.deviceId = value[1].id detail.deviceName = value[1].text _this.setData({ detail, typeVisible: false }) }, showAddress() { this.setData({ addressVisible: true, }) }, hideAddress() { this.setData({ addressVisible: false, }) }, // 查询地点 queryAddress() { let _this = this selectAddressListRq().then(res => { console.log('selectAddressListRq', res); let list = res.rows.map(item => { return { id: item.id, text: item.name } }) let addressColumns = _this.data.addressColumns addressColumns[0].values = list _this.setData({ addressColumns }) // 查询楼层 _this.queryRoom(list[0].id) }) }, // 查询楼层 queryRoom(id) { let _this = this selectRoomListRq({ addressId: id }).then(res => { console.log('selectRoomListRq', res); let list = res.rows.map(item => { return { id: item.id, text: item.name } }) let addressColumns = _this.data.addressColumns addressColumns[1].values = list _this.setData({ addressColumns }) }) }, // 选择地点 addressColumnsChange(e) { console.log('addressColumnsChange', e.detail); let _this = this const { picker, value, index } = e.detail; if (index == 0) { // 选择地点 let obj = value[index] _this.queryRoom(obj.id) } else if (index == 1) { // 选择楼层 let obj = value[index] } }, // 确认地点 addressColumnsConfirm(e) { console.log('addressColumnsConfirm', e.detail); let _this = this const { picker, value, index } = e.detail; let detail = _this.data.detail detail.addressId = value[0].id detail.address = value[0].text detail.floorId = value[1].id detail.floor = value[1].text _this.setData({ detail, addressVisible: false }) }, initRecording() { let _this = this let recorderManager = wx.getRecorderManager() recorderManager.onStart(() => { console.log('recorder start') }) recorderManager.onStop((res) => { console.log('recorder stop', res) res.duration = parseInt(parseInt(res.duration) / 10) / 100 _this.setData({ voiceObj: res, innerAudioContext: null, // 音频对象 innerAudioContextIsPlay: false, // 音频对象-是否播放 }) }) _this.setData({ recorderManager }) }, // 开始录音 startRecording() { this.data.recorderManager.start({ duration: 60000, sampleRate: 16000, //采样率,有效值 8000/16000/44100 numberOfChannels: 1, //录音通道数,有效值 1/2 encodeBitRate: 96000, //编码码率 format: 'mp3', //音频格式,有效值 aac/mp3 frameSize: 50, //指定帧大小 // audioSource: 'auto' //指定录音的音频输入源,可通过 wx.getAvailableAudioSources() 获取 }) }, // 停止录音 stopRecording() { this.data.recorderManager.stop() }, // 播放语音 startAudio() { console.log('startAudio'); let _this = this // 获取innerAudioContext实例 let innerAudioContext = _this.data.innerAudioContext let innerAudioContextIsPlay = _this.data.innerAudioContextIsPlay if (!innerAudioContext) { // 全局设置播放声音 wx.setInnerAudioOption({ obeyMuteSwitch: false }); innerAudioContext = wx.createInnerAudioContext() // 设置音频文件的路径 innerAudioContext.src = _this.data.voiceObj.tempFilePath innerAudioContextIsPlay = false innerAudioContext.onEnded(() => { _this.setData({ innerAudioContextIsPlay: false }) }) } if (innerAudioContextIsPlay) { // 播放中 innerAudioContext.stop() innerAudioContextIsPlay = false } else { // 未播放 innerAudioContext.play() innerAudioContextIsPlay = true } // _this.setData({ innerAudioContext, innerAudioContextIsPlay }) }, // 停止语音 stopAudio() { _this.data.innerAudioContext.stop() }, // 清楚语音 clearAudio() { this.setData({ innerAudioContext: null, // 音频对象 innerAudioContextIsPlay: false, // 音频对象-是否播放 voiceObj: {}, // 录音文件对象 }) }, // 图片-上传前校验 beforeRead(event) { // const { // file, // callback // } = event.detail; // callback(file.type === 'image'); }, // 文件-上传后 async fileAfterRead(event) { let _this = this; console.log('fileAfterRead', event); // 上传完成需要更新 fileList let fileList = _this.data.fileList; // const { file } = event.detail; // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式 for (let i = 0; i < file.length; i++) { let url = file[i].url; await repairAttachUpload({ url, operate: 'repair' }).then(res => { console.log('upload file ', res); fileList.push({ id: res.id, relativeUrl: res.url, url: app.IMG_NAME + res.url, deletable: true, }) }) } _this.setData({ fileList }) }, // 删除图片 deleteImg(event) { console.log('deleteImg', event); let _this = this; let fileList = _this.data.fileList; fileList.splice(event.detail.index, 1); _this.setData({ fileList }) }, // input输入内容监听 fieldInput(e) { console.log('fieldInput', e); let _this = this; let detail = _this.data.detail; detail[e.currentTarget.dataset.name] = e.detail _this.setData({ detail }) }, // 提交数据 async submitData() { let _this = this; // 上传文件列表 let fileList = _this.data.fileList; // 音频 let voiceObj = _this.data.voiceObj; // 数据 let detail = _this.data.detail; // // // 校验数据 // // 报修名称 if (!detail.repairName) { _this.showErrMsg('输入报修名称!') return; } // 故障等级 if (!detail.repairLevel) { _this.showErrMsg('请选择故障等级!') return; } // 故障时间 if (!detail.repairTime) { _this.showErrMsg('请选择故障时间!') return; } // 故障类型 if (!detail.typeId) { _this.showErrMsg('请选择故障类型!') return; } // 故障地点 if (!detail.addressId) { _this.showErrMsg('请选择故障地点!') return; } // 门牌号 if (!detail.room) { _this.showErrMsg('请输入门牌号!') return; } // 联系电话 if (detail.phone) { if (detail.phone.length != 11) { _this.showErrMsg('请输入11位联系电话!') return; } } else { _this.showErrMsg('请输入联系电话!') return; } // 报修人姓名 if (!detail.name) { _this.showErrMsg('请输入报修人姓名!') return; } // 故障描述 if (!detail.explain) { _this.showErrMsg('请输入故障描述!') return; } // let fileIdList = [] // 图片上传 if (fileList && fileList.length > 0) { fileIdList = fileList.map(item => item.id) } // 音频 if (voiceObj && voiceObj.tempFilePath) { await uploadVoice(voiceObj.tempFilePath).then(res => { console.log('uploadVoice', res); fileIdList.push(res.id) }) } // // 添加数据 repairSaveRq({ repair: detail, files: fileIdList }).then(res => { console.log('visitorPersonRq', res); // if (res.code == 0) { wx.navigateBack() } else { _this.showErrMsg(res.msg) } }) }, // 显示错误消息 showErrMsg(msg) { Notify({ type: 'danger', message: msg }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })