You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

531 lines
17 KiB

// package/report/report.js
import { getPointList,getPointInfoAll,getPatrolTemplates,getPatrolTemplate,getTemplates,reportQuest,getPatrolPlan,getStructuresList,getDetail } from "../../utils/getApiUrl";
import {Request} from "../../common";
const moment = require("../../utils/moment");
Page({
data: {
sms:'',//设备号
sList:[],//根据sn号查询的结构物列表
structListIndex: undefined,//结构物id
struct:'',//结构物
pointList:[],//点位列表
pointIndex:undefined,//点位索引
list:[],//初始数据
pointVis:false,//点位输入框的可见性
formVis:false,//表单项可见性
handleObj:'',//处理对象
handleGoal:'',//处理目的
installLocation:'',//安装位置
rtuNo:'',//RTU编号
isPlanState: false,
structList: [],//结构物列表
data:[],//巡检计划的数据(包括点位,设备等等)
patrolTemplate:[],//巡检模板
templateData:[],//巡检模板总数居
patrolTemplateIndex:undefined,//巡检模板索引
itemData: '', // 点位
address: '', // 当前位置
imgUrl: getApp().globalData.imgUrl,
checkItems: [], // 检查项
inspectContentArr: [], // 巡检内容
isCommitting: false,
},
//卡号接收
onInputChange(e){
this.setData({
sms:e.detail,
sList:[]
})
},
//根据sn号搜索
searchDetail(){
const id=this.data.sms
if(id){
Request.get(getDetail(id)).then(res => {
if(res){
//结构物
if(!res.length){
wx.showToast({
title: '未查询到相关数据',
icon: 'none',
duration: 1500
})
return;
}
const uniqueResults = res.reduce((acc, item) => {
const existingItem = acc.find(project => project.id === item.project.id);
if (!existingItem) {
acc.push({
id: item.project.id,
name: item.project.name
});
}
return acc
}, [])
this.setData({
sList:uniqueResults,
list:res
})
}
})
}
},
//点位改变函数
pointChange(e){
const that = this
// that.getPatrolTemplate()
Request.get(getPatrolTemplates()).then(res=>{
if(res.rows.length){
//只需要地灾的相关模板
const rlst=res.rows?.filter(q=>q.name.includes('地灾'))?.map(item=>{return {
id:item.id,
name:item.name
}})
that.setData({patrolTemplate:rlst,templateData:res.rows,
pointIndex:e.detail.value,
formVis:true,
inspectContentArr:[],
patrolTemplateIndex:null
})
}
})
},
//整理设备和检查项
getPatrolTemplate(templateId,pointDevices=[]) {
const that=this
Request.get(getPatrolTemplate(templateId)).then(res => {
const checkItems = res.rows[0].checkItems;
let inspectContentArr = [];
// 有绑定设备的点位,每个设备都要检查各个检查项
if (pointDevices.length) {
pointDevices.forEach(device => {
inspectContentArr.push({
deviceName: device.name,
deviceId: device.id,
checkItems: checkItems.map(c => ({
id: `${device.id}-${c.id}`,
name: c.name,
isNormal: true,
msgInp: null,
level: null,
imgs: [],
}))
})
});
} else {
inspectContentArr.push({
checkItems: checkItems.map(c => ({
id: c.id,
name: c.name,
isNormal: true,
msgInp: null,
level: null,
imgs: [],
}))
})
}
this.setData({
checkItems,
inspectContentArr: inspectContentArr,
})
})
},
//收集输入框的值
input1Change(e){
const that = this
that.setData({handleObj:e.detail})
},
input2Change(e){
const that = this
that.setData({handleGoal:e.detail})
},
input3Change(e){
const that = this
that.setData({installLocation:e.detail})
},
input4Change(e){
const that = this
that.setData({rtuNo:e.detail})
},
// 预览图片
previewImg: function (e) {
const { deviceidx, itemidx, index } = e.currentTarget.dataset;
// 所有图片
const imgs = this.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
const newImgs = imgs.map(i => this.data.imgUrl + i);
wx.previewImage({
// 当前显示图片
current: newImgs[index],
// 所有图片
urls: newImgs
})
},
//结构物改变函数
structChange(event) {
const that = this
const projectId=that.data.sList.find(item=>item.id==that.data?.sList[Number(event.detail.value)].id)?.id
const query={projectId}
Request.get(getPointInfoAll(query)).then(res => {
if(res){
that.setData({data:res})
}
})
that.setData({
pointVis:false,
pointList:[],//选择结构物后先置空先前的点位列表
formVis:false,
pointIndex:null,
inspectContentArr:[]
})
const rlst=that.data.list?.filter(item=>item.project.id==projectId)?.map(item=>{
return {
id: item.id,
name: item.name
}
})
that.setData({
structListIndex:event.detail.value,
pointList:rlst,
pointVis:true
})
},
//选择异常或者正常
handleChangeTwo(e) {
const { deviceidx, itemidx } = e.currentTarget.dataset;
let nextInspectContentArr = this.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].isNormal = e.detail;
if (e.detail) { // 清除异常数据
nextInspectContentArr[deviceidx].checkItems[itemidx].msgInp = null;
nextInspectContentArr[deviceidx].checkItems[itemidx].level = null;
nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = [];
}
this.setData({ inspectContentArr: nextInspectContentArr })
},
//返回前一页
bindCancel() {
wx.navigateBack();
},
// 开始巡检录入
addPatrolRecord: function () {
const that = this;
if (that.data.isCommitting) { return }
let {
rtuNo,
installLocation,
handleGoal,
handleObj,
patrolTemplate,
patrolTemplateIndex,
structListIndex,
pointIndex,
inspectContentArr,
pointList,
sList
} = that.data;
let alarm = false;
if (!patrolTemplateIndex) {
wx.showToast({
title: '请选择模板',
icon: 'none',
duration: 1500
})
return;
}
if (!pointIndex) {
wx.showToast({
title: '请选择点位',
icon: 'none',
duration: 1500
})
return;
}
let reportArr = inspectContentArr.map(d => ({ ...d, alarm:d.checkItems.some(q=>q.isNormal==false)?true:false }))
for (const d of reportArr[0]?.checkItems) {
if (d.isNormal === null) {
wx.showToast({
title: '请填写完整',
icon: 'none',
duration: 1500
})
return
}
if ((!d.isNormal) && (!d.level || !d.msgInp)) {
wx.showToast({
title: '异常项必须输入巡查详情和选择严重等级',
icon: 'none',
duration: 2000
})
return
}
if (d.isNormal === false) {
alarm = true; // 巡检记录异常
}
}
const { id, name, departmentId, deptName } = wx.getStorageSync('userInfo');
const newData = that.data.data.map((item) => {
// let pointDevices=[]
// item.devices.map(child=>{
// const {pointDevice,...newItem } = child;
// pointDevices.push({device:newItem,deviceId:pointDevice.deviceId})
// })
// 使用对象的解构赋值去掉 project 和 devices 属性
const { project, devices, ...newItem } = item;
// return {...newItem,pointDevices}
return {...newItem}
});
const nextItemData=newData.find(item=>item.id===pointList[pointIndex].id)
let datas = {
patrolPlanId: -1,
pointId: sList[pointIndex].id,
inspectionTime: moment().format('YYYY-MM-DD HH:mm:ss'),
points: {
user: { id, name, department: { id: departmentId, name: deptName } },
project: sList[structListIndex],
itemData:nextItemData,
inspectContent: reportArr,
aboutDisaster:{ rtuNo,
installLocation,
handleGoal,
handleObj}
},
alarm,
projectId: sList[structListIndex].id
}
wx.showLoading({ title: '提交中...' });
that.setData({ isCommitting: true });
Request.post(reportQuest(), datas).then(res => {
wx.hideLoading();
that.setData({ isCommitting: false });
wx.showToast({
title: '提交成功',
icon: 'success'
})
setTimeout(() => {
that.bindCancel();
}, 1500)
})
},
//多张图片上传
uploadImg: function (data, deviceidx, itemidx) {
wx.showLoading({
title: '上传中...',
mask: true,
})
let that = this,
i = data.i ? data.i : 0,
success = data.success ? data.success : 0,
fail = data.fail ? data.fail : 0;
let imgs = that.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
wx.uploadFile({
url: data.url,
filePath: data.path[i],
name: 'file',
success: (resp) => {
wx.hideLoading();
success++;
let str = JSON.parse(resp.data) // 返回的结果,可能不同项目结果不一样
str = str.uploaded
if (imgs.length >= 20) {
let nextInspectContentArr = that.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
that.setData({ inspectContentArr: nextInspectContentArr });
return false;
} else {
imgs.push(str);
let nextInspectContentArr = that.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
that.setData({ inspectContentArr: nextInspectContentArr });
}
},
fail: (res) => {
fail++;
console.log('fail:' + i + "fail:" + fail);
},
complete: () => {
i++;
if (i == data.path.length) { // 当图片传完时,停止调用
console.log('执行完毕');
console.log('成功:' + success + " 失败:" + fail);
} else { // 若图片还没有传完,则继续调用函数
data.i = i;
data.success = success;
data.fail = fail;
that.uploadImg(data, deviceidx, itemidx); // 递归,回调自己
}
}
});
},
// 上传图片
chooseImg: function (e) { // 这里是选取图片的方法
const { deviceidx, itemidx } = e.currentTarget.dataset;
const that = this;
let pics = [];
const detailPics = that.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
if (detailPics.length >= 20) {
wx.showToast({
title: '最多选择20张图片上传',
icon: 'none'
});
return;
}
wx.chooseMedia({
count: 20, // 基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件
mediaType: ['image'], // 文件类型
sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
success: function (res) {
const imgs = res.tempFiles;
for (let i = 0; i < imgs.length; i++) {
if (res.tempFiles[i].size > 15728640) {
wx.showToast({ title: '图片大于15M,不可上传', icon: 'none' });
return;
}
const fileNameArr = res.tempFiles[i].tempFilePath.split('.');
const extension = res.tempFiles[i].tempFilePath.split('.')[fileNameArr.length - 1];
if (extension !== 'jpg' && extension !== 'png' && extension !== 'jpeg') {
wx.showToast({ title: '只能上传jpg、jpeg、png格式的图片', icon: 'none' });
return;
}
pics.push(imgs[i].tempFilePath)
}
that.uploadImg({
url: getApp().globalData.webUrl + '_upload/attachments/project', // 图片上传的接口
path: pics, // 选取的图片的地址数组
}, deviceidx, itemidx);
},
})
},
// 删除图片
deleteImg: function (e) {
const { deviceidx, itemidx, index } = e.currentTarget.dataset;
let imgs = this.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
imgs.splice(index, 1);
let nextInspectContentArr = this.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
this.setData({ inspectContentArr: nextInspectContentArr })
},
// 巡查详情
bindInput: function (e) {
const { deviceidx, itemidx } = e.currentTarget.dataset;
let nextInspectContentArr = this.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].msgInp = e.detail.value;
this.setData({ inspectContentArr: nextInspectContentArr })
},
handleChangeThree(e) {
const { deviceidx, itemidx } = e.currentTarget.dataset;
let nextInspectContentArr = this.data.inspectContentArr;
nextInspectContentArr[deviceidx].checkItems[itemidx].level = e.detail;
this.setData({ inspectContentArr: nextInspectContentArr })
},
//巡检模板改变
patrolTemplateChange(e){
const that=this
that.getPatrolTemplate(that.data.patrolTemplate[e.detail.value].id)
that.setData({
patrolTemplateIndex:e.detail.value
})
},
bindShowMsg() {
this.setData({
select: !this.data.select
})
},
mySelect(e) {
var name = e.currentTarget.dataset.name
this.setData({
tihuoWay: name,
select: false
})
},
/**
* 页面的初始数据
*/
// data: {
// },
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const that=this
wx.setNavigationBarTitle({
title: options.key,
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})