|
|
@ -92,7 +92,9 @@ |
|
|
|
border="none" |
|
|
|
:disabled="item.isSystemElectricMeterNumber" |
|
|
|
:custom-style=" |
|
|
|
item.isSystemElectricMeterNumber ? 'background:#fff;color:#666;' : '' |
|
|
|
item.isSystemElectricMeterNumber |
|
|
|
? 'background:#fff;color:#666;' |
|
|
|
: '' |
|
|
|
" |
|
|
|
/> |
|
|
|
</view> |
|
|
@ -131,6 +133,37 @@ |
|
|
|
border="none" |
|
|
|
/> |
|
|
|
</view> |
|
|
|
<view class="meter-row" @click="showTimePicker(index)"> |
|
|
|
<view class="meter-label"> |
|
|
|
<view style="color: #f93838; margin-right: 4rpx; font-size: 24rpx" |
|
|
|
>*</view |
|
|
|
> |
|
|
|
<text>抄表时间</text> |
|
|
|
</view> |
|
|
|
<view class="picker-label"> |
|
|
|
<u-datetime-picker |
|
|
|
:ref="`datetimePicker${index}`" |
|
|
|
:show="form[index].showTimePicker" |
|
|
|
v-model="form[index].meterReadingTime" |
|
|
|
mode="datetime" |
|
|
|
@cancel="closeTimePicker(index)" |
|
|
|
@confirm="(e) => onTimeConfirm(e, index)" |
|
|
|
:min-date="minDate" |
|
|
|
:max-date="maxDate" |
|
|
|
></u-datetime-picker> |
|
|
|
<view class="time-display"> |
|
|
|
{{ |
|
|
|
formatDisplayTime(form[index].meterReadingTime) || |
|
|
|
"请选择抄表时间" |
|
|
|
}} |
|
|
|
</view> |
|
|
|
<image |
|
|
|
class="arrow-r" |
|
|
|
src="/static/img/arrow-right.png" |
|
|
|
mode="aspectFill" |
|
|
|
></image> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="imeter-row"> |
|
|
|
<view class="meter-label"> |
|
|
|
<view style="color: #f93838; margin-right: 4rpx; font-size: 24rpx" |
|
|
@ -212,11 +245,16 @@ export default { |
|
|
|
remark: "", |
|
|
|
electricMeterNumber: "", |
|
|
|
isSystemElectricMeterNumber: false, // 是否为系统预设的电表号 |
|
|
|
meterReadingTime: "", // this.formatDateTime(new Date())新增抄表时间字段,默认为当前时间 |
|
|
|
showTimePicker: false, // 新增控制时间选择器显示的变量 |
|
|
|
}, |
|
|
|
// 可以有多个水表对象 |
|
|
|
], |
|
|
|
energyMeterConfig: "", |
|
|
|
waterMeterConfig: "", |
|
|
|
minDate: new Date(new Date().getFullYear() - 5, 0, 1).getTime(), // 最小日期:当前时间之前的5年(时间戳) |
|
|
|
maxDate: new Date(new Date().getFullYear() + 1, 11, 31).getTime(), // 最大日期:一年后(时间戳) |
|
|
|
defaultTime: new Date(), // 默认时间 |
|
|
|
}; |
|
|
|
}, |
|
|
|
watch: { |
|
|
@ -238,8 +276,42 @@ export default { |
|
|
|
}, |
|
|
|
onLoad() { |
|
|
|
this.getTree(); |
|
|
|
// this.initMeterReadingTime(); |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
// 初始化抄表时间 |
|
|
|
initMeterReadingTime() { |
|
|
|
const currentTime = this.formatDateTime(new Date()); |
|
|
|
console.log("初始化时间:", currentTime); |
|
|
|
console.log("当前时间Date对象:", new Date()); |
|
|
|
|
|
|
|
this.form.forEach((item, index) => { |
|
|
|
item.meterReadingTime = currentTime; |
|
|
|
item.showTimePicker = false; // 确保时间选择器关闭 |
|
|
|
console.log(`表单项${index}的时间:`, item.meterReadingTime); |
|
|
|
console.log(`表单项${index}的时间类型:`, typeof item.meterReadingTime); |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 格式化时间为 YYYY-MM-DD hh:mm 格式 |
|
|
|
formatDateTime(date) { |
|
|
|
const year = date.getFullYear(); |
|
|
|
const month = String(date.getMonth() + 1).padStart(2, "0"); |
|
|
|
const day = String(date.getDate()).padStart(2, "0"); |
|
|
|
const hours = String(date.getHours()).padStart(2, "0"); |
|
|
|
const minutes = String(date.getMinutes()).padStart(2, "0"); |
|
|
|
return `${year}-${month}-${day} ${hours}:${minutes}`; |
|
|
|
}, |
|
|
|
// 格式化时间显示,例如 "2023-10-27 10:30" 转换为 "2023年10月27日 10:30" |
|
|
|
formatDisplayTime(time) { |
|
|
|
if (!time) return ""; |
|
|
|
const date = new Date(time); |
|
|
|
const year = date.getFullYear(); |
|
|
|
const month = String(date.getMonth() + 1).padStart(2, "0"); |
|
|
|
const day = String(date.getDate()).padStart(2, "0"); |
|
|
|
const hours = String(date.getHours()).padStart(2, "0"); |
|
|
|
const minutes = String(date.getMinutes()).padStart(2, "0"); |
|
|
|
return `${year}-${month}-${day} ${hours}:${minutes}`; |
|
|
|
}, |
|
|
|
//图片超过大小时取消上传 |
|
|
|
oversize(e) { |
|
|
|
this.$u.toast("请传10MB以内大小的图片/视频!"); |
|
|
@ -247,22 +319,12 @@ export default { |
|
|
|
}, |
|
|
|
getTree() { |
|
|
|
getdeptList().then(async (res) => { |
|
|
|
this.deptOptions = this.handleTree( |
|
|
|
res.data, |
|
|
|
"deptId", |
|
|
|
"parentId", |
|
|
|
"children", |
|
|
|
2 |
|
|
|
); |
|
|
|
// const deptInfo = this.deptOptions[0].children.filter( |
|
|
|
// (item) => item.deptName == "城阳区" |
|
|
|
// )[0]; |
|
|
|
// 直接使用返回的数据,不使用未定义的handleTree方法 |
|
|
|
this.deptOptions = res.data || []; |
|
|
|
|
|
|
|
const newArr = this.deptOptions.map((item) => ({ |
|
|
|
name: item.deptName, |
|
|
|
})); |
|
|
|
// this.deptOptions = newArr |
|
|
|
// this.deptOptions = await this.getListByParentId("1", deptInfo.deptId); |
|
|
|
// const array = JSON.parse(JSON.stringify(this.deptOptions)); |
|
|
|
this.deptNames = newArr.map((item) => item.name); |
|
|
|
}); |
|
|
|
}, |
|
|
@ -326,7 +388,6 @@ export default { |
|
|
|
console.warn("未获取到户信息"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
this.houseOptions = houseArray; |
|
|
|
const houseNames = houseArray.map((item) => item.name); |
|
|
|
this.blockForm.houseId = houseArray[0].id; |
|
|
@ -506,26 +567,49 @@ export default { |
|
|
|
|
|
|
|
this.form = [ |
|
|
|
{ |
|
|
|
electricMeterNumber: res.data.electricMeterNumber && res.data.electricMeterNumber.trim() !== '' ? res.data.electricMeterNumber : "", |
|
|
|
isSystemElectricMeterNumber: !!(res.data.electricMeterNumber && res.data.electricMeterNumber.trim() !== ''), |
|
|
|
electricMeterNumber: |
|
|
|
res.data.electricMeterNumber && |
|
|
|
res.data.electricMeterNumber.trim() !== "" |
|
|
|
? res.data.electricMeterNumber |
|
|
|
: "", |
|
|
|
isSystemElectricMeterNumber: !!( |
|
|
|
res.data.electricMeterNumber && |
|
|
|
res.data.electricMeterNumber.trim() !== "" |
|
|
|
), |
|
|
|
meterReadingTime: this.formatDateTime(new Date()), // 设置默认抄表时间(格式化字符串) |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
}, |
|
|
|
]; |
|
|
|
} else if (this.energyMeterConfig == 2) { |
|
|
|
this.form = this.form.map((item) => ({ |
|
|
|
...item, |
|
|
|
electricMeterNumber: res.data.electricMeterNumber && res.data.electricMeterNumber.trim() !== '' ? res.data.electricMeterNumber : "", |
|
|
|
isSystemElectricMeterNumber: !!(res.data.electricMeterNumber && res.data.electricMeterNumber.trim() !== ''), |
|
|
|
electricMeterNumber: |
|
|
|
res.data.electricMeterNumber && |
|
|
|
res.data.electricMeterNumber.trim() !== "" |
|
|
|
? res.data.electricMeterNumber |
|
|
|
: "", |
|
|
|
isSystemElectricMeterNumber: !!( |
|
|
|
res.data.electricMeterNumber && |
|
|
|
res.data.electricMeterNumber.trim() !== "" |
|
|
|
), |
|
|
|
meterReadingTime: |
|
|
|
item.meterReadingTime || this.formatDateTime(new Date()), // 确保有抄表时间(格式化字符串) |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
})); |
|
|
|
} |
|
|
|
|
|
|
|
// 只有当电表号存在时才调用获取上次读数 |
|
|
|
if (res.data.electricMeterNumber && res.data.electricMeterNumber.trim() !== '') { |
|
|
|
if ( |
|
|
|
res.data.electricMeterNumber && |
|
|
|
res.data.electricMeterNumber.trim() !== "" |
|
|
|
) { |
|
|
|
this.getLastMeter(res.data.electricMeterNumber); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
// 获取上次抄表 |
|
|
|
async getLastMeter(item) { |
|
|
|
this.initMeterReadingTime(); |
|
|
|
let roomId = ""; |
|
|
|
if (this.waterMeterConfig == 1) { |
|
|
|
roomId = this.form[0].id; |
|
|
@ -551,7 +635,12 @@ export default { |
|
|
|
...item, |
|
|
|
lastMeterReading: res.data[0].thisMeterReading || 0, |
|
|
|
electricMeterNumber: res.data[0].meterNumber || "", |
|
|
|
isSystemElectricMeterNumber: !!(res.data[0].meterNumber && res.data[0].meterNumber.trim() !== ''), |
|
|
|
isSystemElectricMeterNumber: !!( |
|
|
|
res.data[0].meterNumber && res.data[0].meterNumber.trim() !== "" |
|
|
|
), |
|
|
|
meterReadingTime: |
|
|
|
item.meterReadingTime || this.formatDateTime(new Date()), // 保留抄表时间 |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
})); |
|
|
|
} else if (this.energyMeterConfig == 2) { |
|
|
|
this.form = this.form.map((item) => { |
|
|
@ -565,7 +654,12 @@ export default { |
|
|
|
...item, |
|
|
|
lastMeterReading: meter.thisMeterReading || 0, |
|
|
|
electricMeterNumber: meter.meterNumber || "", |
|
|
|
isSystemElectricMeterNumber: !!(meter.meterNumber && meter.meterNumber.trim() !== ''), |
|
|
|
isSystemElectricMeterNumber: !!( |
|
|
|
meter.meterNumber && meter.meterNumber.trim() !== "" |
|
|
|
), |
|
|
|
meterReadingTime: |
|
|
|
item.meterReadingTime || this.formatDateTime(new Date()), // 保留抄表时间 |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
}; |
|
|
|
} |
|
|
|
return item; |
|
|
@ -585,9 +679,16 @@ export default { |
|
|
|
this.form = this.form.map((item) => ({ |
|
|
|
...item, |
|
|
|
id: res.data[0].id || "", |
|
|
|
meterReadingTime: |
|
|
|
item.meterReadingTime || this.formatDateTime(new Date()), // 确保有抄表时间 |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
})); |
|
|
|
} else if (this.energyMeterConfig == 2) { |
|
|
|
this.form = res.data; |
|
|
|
this.form = res.data.map((item) => ({ |
|
|
|
...item, |
|
|
|
meterReadingTime: this.formatDateTime(new Date()), // 为每个房间设置默认抄表时间 |
|
|
|
showTimePicker: false, // 确保时间选择器关闭 |
|
|
|
})); |
|
|
|
this.getLastMeter(); |
|
|
|
} |
|
|
|
} |
|
|
@ -629,6 +730,13 @@ export default { |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!item.meterReadingTime) { |
|
|
|
uni.showToast({ |
|
|
|
title: `第${i + 1}个房间请选择抄表时间`, |
|
|
|
icon: "none", |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!item.fileList || item.fileList.length === 0) { |
|
|
|
uni.showToast({ |
|
|
|
title: `第${i + 1}个房间请上传图片/视频`, |
|
|
@ -658,6 +766,13 @@ export default { |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!item.meterReadingTime) { |
|
|
|
uni.showToast({ |
|
|
|
title: `请选择抄表时间`, |
|
|
|
icon: "none", |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!item.fileList || item.fileList.length === 0) { |
|
|
|
uni.showToast({ |
|
|
|
title: `请上传图片/视频`, |
|
|
@ -688,21 +803,31 @@ export default { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let params = this.form.map((item) => { |
|
|
|
let params = this.form |
|
|
|
.map((item) => { |
|
|
|
// 验证每个表单项 |
|
|
|
if (!item) { |
|
|
|
console.warn("表单项数据无效:", item); |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
// 验证时间格式 |
|
|
|
console.log(`表单项时间:`, item.meterReadingTime); |
|
|
|
console.log(`表单项时间类型:`, typeof item.meterReadingTime); |
|
|
|
|
|
|
|
return { |
|
|
|
meterNumber: item.electricMeterNumber || "", |
|
|
|
meterType: 1, |
|
|
|
houseId: this.blockForm.houseId, |
|
|
|
roomId: item.id || "", |
|
|
|
// lastMeterReading: isNaN(parseFloat(item.lastMeterReading)) ? '' : parseFloat(item.lastMeterReading).toFixed(4), |
|
|
|
lastMeterReading: item.lastMeterReading ? item.lastMeterReading : item.thisMeterReading, |
|
|
|
lastMeterReading: item.lastMeterReading |
|
|
|
? item.lastMeterReading |
|
|
|
: item.thisMeterReading, |
|
|
|
thisMeterReading: parseFloat(item.thisMeterReading || 0).toFixed(4), |
|
|
|
inputTime: item.meterReadingTime |
|
|
|
? new Date(item.meterReadingTime.length === 16 ? item.meterReadingTime + ":00" : item.meterReadingTime).getTime() |
|
|
|
: "", // 改为时间戳 |
|
|
|
images: (item.fileList || []).map((f) => ({ |
|
|
|
url: f.url || "", |
|
|
|
name: f.name || "", |
|
|
@ -711,7 +836,8 @@ export default { |
|
|
|
})), |
|
|
|
remark: item.remark || "", |
|
|
|
}; |
|
|
|
}).filter(item => item !== null); // 过滤掉无效的项 |
|
|
|
}) |
|
|
|
.filter((item) => item !== null); // 过滤掉无效的项 |
|
|
|
|
|
|
|
// 验证处理后的参数 |
|
|
|
if (params.length === 0) { |
|
|
@ -755,6 +881,72 @@ export default { |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
onTimeConfirm(e, index) { |
|
|
|
console.log("时间选择器返回值:", e); |
|
|
|
|
|
|
|
// 处理时间选择器的返回值 |
|
|
|
let selectedDate; |
|
|
|
if (e.value) { |
|
|
|
// 如果返回的是时间戳 |
|
|
|
selectedDate = new Date(e.value); |
|
|
|
} else if (e.year && e.month && e.day) { |
|
|
|
// 如果返回的是年月日时分对象 |
|
|
|
selectedDate = new Date( |
|
|
|
e.year, |
|
|
|
e.month - 1, |
|
|
|
e.day, |
|
|
|
e.hour || 0, |
|
|
|
e.minute || 0 |
|
|
|
); |
|
|
|
} else { |
|
|
|
// 其他情况,使用当前时间 |
|
|
|
selectedDate = new Date(); |
|
|
|
} |
|
|
|
|
|
|
|
// 格式化并保存时间(存储为格式化的字符串) |
|
|
|
const formattedTime = this.formatDateTime(selectedDate); |
|
|
|
this.form[index].meterReadingTime = formattedTime; |
|
|
|
this.form[index].showTimePicker = false; // 关闭时间选择器 |
|
|
|
|
|
|
|
console.log("选择的时间戳:", e.value); |
|
|
|
console.log("转换后的Date对象:", selectedDate); |
|
|
|
console.log("格式化后的时间字符串:", formattedTime); |
|
|
|
console.log("表单中存储的时间:", this.form[index].meterReadingTime); |
|
|
|
}, |
|
|
|
showTimePicker(index) { |
|
|
|
this.form[index].showTimePicker = true; // 打开时间选择器 |
|
|
|
|
|
|
|
// 微信小程序需要用此写法设置格式化器 |
|
|
|
this.$nextTick(() => { |
|
|
|
const pickerRef = this.$refs[`datetimePicker${index}`]; |
|
|
|
if (pickerRef && pickerRef.setFormatter) { |
|
|
|
pickerRef.setFormatter(this.formatter); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
closeTimePicker(index) { |
|
|
|
console.log("关闭时间选择器", index); |
|
|
|
this.form[index].showTimePicker = false; // 关闭时间选择器 |
|
|
|
}, |
|
|
|
// 时间格式化器 |
|
|
|
formatter(type, value) { |
|
|
|
if (type === "year") { |
|
|
|
return `${value}年`; |
|
|
|
} |
|
|
|
if (type === "month") { |
|
|
|
return `${value}月`; |
|
|
|
} |
|
|
|
if (type === "day") { |
|
|
|
return `${value}日`; |
|
|
|
} |
|
|
|
if (type === "hour") { |
|
|
|
return `${value}时`; |
|
|
|
} |
|
|
|
if (type === "minute") { |
|
|
|
return `${value}分`; |
|
|
|
} |
|
|
|
return value; |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |
|
|
@ -912,6 +1104,17 @@ export default { |
|
|
|
font-size: 24rpx; |
|
|
|
margin-top: 8rpx; |
|
|
|
} |
|
|
|
.time-display { |
|
|
|
color: #222; |
|
|
|
font-size: 28rpx; |
|
|
|
min-width: 200rpx; |
|
|
|
text-align: right; |
|
|
|
padding: 8rpx 0; |
|
|
|
border: 1px solid transparent; |
|
|
|
border-radius: 8rpx; |
|
|
|
background: #fff; |
|
|
|
padding: 8rpx 16rpx; |
|
|
|
} |
|
|
|
.u-upload__wrap { |
|
|
|
display: flex; |
|
|
|
flex-wrap: wrap; |
|
|
|