准备联调抄表记录

This commit is contained in:
2025-09-16 17:35:49 +08:00
194 changed files with 6560 additions and 1095 deletions

View File

@@ -5,7 +5,7 @@ Component({
* 组件的属性列表
*/
properties: {
meterInfo: Object,
},
/**

View File

@@ -21,37 +21,46 @@
编号
</view>
<view>
1202312423524
{{meterInfo.meterSn}}
</view>
</view>
</van-col>
<van-col span="12">
<view class="text">
<view>
编号
类型
</view>
<view>
1202312423524
<view wx:if="{{meterInfo.meterBelongType === 0}}">
商户电表
</view>
<view wx:elif="{{meterInfo.meterBelongType === 1}}">
公区电表
</view>
<view wx:elif="{{meterInfo.meterBelongType === 2}}">
公摊电表
</view>
</view>
</van-col>
<van-col span="12">
<view class="text">
<view>
编号
状态
</view>
<view>
1202312423524
<view wx:if="{{meterInfo.enabled}}">
正常
</view>
<view wx:else>
停用
</view>
</view>
</van-col>
<van-col span="12">
<view class="text">
<view>
编号
读数
</view>
<view>
1202312423524
{{meterInfo.overall}}
</view>
</view>
</van-col>

View File

@@ -6,6 +6,7 @@ Component({
*/
properties: {
active: Boolean,
meter: Object
},
observers: {
"active": function (newValue) {

View File

@@ -1,4 +1,4 @@
<!--pages/writeReading/components/meterList/components/meterItem/index.wxml-->
<view class="wrapper {{isDeep ? 'deepBg' : ''}}" bind:tap="onClick">
标1东-3071312452636756756857
{{meter.meterAddress}}
</view>

View File

@@ -14,6 +14,8 @@
height: 150rpx;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.deepBg {

View File

@@ -1,13 +1,37 @@
// pages/writeReading/components/meterList/index.js
import { getMeterReadingRouteMeterDetail } from "../../../../service/workBench"
import request from "../../../../utils/request"
import { alertInfo, alertSuccess, alertError } from "../../../../utils/index"
const { OK } = request;
Component({
/**
* 组件的属性列表
*/
properties: {
list: Array,
active: Number,
meterInfo: Object
},
observers: {
"active,list": function(newActive, newList) {
if (newActive >= 0 && newList.length) {
this.getMeterInfo(newList?.[newActive]?.meterId, newActive, true)
}
if (newActive === 0) {
this.setData({ scrollLeft: 0 })
} else if (newActive > 0) {
this.setData({ scrollLeft: 220 * newList.length - 20 })
}
const { scrollWidth } = this.data;
if (scrollWidth) {
this.setData({
maxScrollLeft: newList?.length ? 220 * newList.length - (scrollWidth || 0) - 20 : 0,
})
}
}
},
/**
* 组件的初始数据
*/
@@ -15,16 +39,22 @@ Component({
animationData: {}, // 存储动画数据
position: 0,
scrollLeft: 0, // 当前滚动位置
maxScrollLeft: 0 // 最大可滚动距离
maxScrollLeft: 0, // 最大可滚动距离
},
lifetimes: {
attached() {
const that = this;
const query = this.createSelectorQuery();
// query.select('.scroll-content').boundingClientRect();
console.log("query", query)
query.select('.meterListScrollView').boundingClientRect((rect) => {
console.log("rect", rect)
});
query.select('.meterListScrollView').boundingClientRect()
query.exec(function(res){
const { list } = that.data;
const length = that.data.list?.length || 0;
that.setData({
maxScrollLeft:length ? 220 * list.length - (res?.[0]?.width || 0) - 20 : 0,
scrollWidth: res?.[0]?.width || 0
})
})
}
},
@@ -61,15 +91,29 @@ Component({
});
},
onChangeMeter() {
console.log("---------------")
handleSelect(e) {
const { id, index } = e.currentTarget.dataset;
this.getMeterInfo(id, index)
},
onScroll(e) {
// 实时更新当前滚动位置,可用于更复杂的边界判断
this.setData({
scrollLeft: e.detail.scrollLeft
});
async getMeterInfo(id, index, noChange) {
const { code, message, data } = await getMeterReadingRouteMeterDetail(id)
if (code !== OK) {
alertError(message)
return;
}
if (noChange) {
this.triggerEvent("changeMeter", { meter: data })
return;
}
this.triggerEvent("changeMeterAndIndex", { index: index, meter: data })
},
// onScroll(e) {
// // 实时更新当前滚动位置,可用于更复杂的边界判断
// console.log("e", e)
// this.setData({
// scrollLeft: e.detail.scrollLeft
// });
// },
scrollLeft() {
// 向左滚动:减少 scrollLeft但不能小于0

View File

@@ -14,16 +14,15 @@
scroll-with-animation="true"
>
<view style="display: flex;" class="scroll-content">
<meter-item active="{{true}}" />
<meter-item active="{{false}}" bind:click="onChangeMeter" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item active="{{false}}" />
<meter-item
active="{{active === index}}"
wx:for="{{list}}"
wx:key="id"
meter="{{item}}"
bind:click="handleSelect"
data-index="{{index}}"
data-id="{{item.meterId}}"
/>
</view>
</scroll-view>
<van-icon name="arrow" size="50rpx" bind:tap="scrollRight" />

View File

@@ -1,18 +1,26 @@
// pages/writeReading/components/readingInfo/index.js
import { createReading } from "../../../../service/workBench"
import { alertError, alertInfo, alertSuccess } from "../../../../utils/index"
import request from "../../../../utils/request"
const { OK } = request
Component({
/**
* 组件的属性列表
*/
properties: {
meterInfo: Object,
showLeft: Boolean,
showRight: Boolean,
},
/**
* 组件的初始数据
*/
data: {
currentNumber: null
},
/**
@@ -20,9 +28,79 @@ Component({
*/
methods: {
jumpToHistory() {
const { meterInfo } = this.data;
wx.navigateTo({
url: '/pages/readingHistory/index',
url: `/pages/readingHistory/index?meter=${meterInfo?.id}&park=${meterInfo?.park}`,
})
},
handlePrev() {
this.triggerEvent("prev")
},
handleNext() {
this.triggerEvent("next")
},
onChange(e) {
this.setData({
currentNumber: e.detail ? Number(e.detail) : 0
})
},
handleClear() {
this.setData({
currentNumber: null,
})
},
async onSubmit() {
const { meterInfo, currentNumber } = this.data;
const { parkId, id } = meterInfo;
const { code, message } = await createReading(parkId, id, {
overall: `${currentNumber}`,
flat: `${currentNumber}`
})
if (code !== OK) {
alertError(message)
return
}
alertSuccess("录入成功")
this.handleNext()
this.handleClear()
},
handleCreateReading() {
const { meterInfo, currentNumber } = this.data;
if (currentNumber == null || currentNumber == undefined) {
alertInfo("请填写本次表字后保存")
return;
}
const that = this;
wx.showModal({
title: '提示',
content: '确定要录入吗?',
complete: (res) => {
if (res.cancel) {
}
if (res.confirm) {
if (meterInfo.consumption < currentNumber) {
wx.showModal({
title: '提示',
content: '本次用电量已抄过历史平均水平的100%,是否确认录入?',
complete: (res) => {
if (res.cancel) {
}
if (res.confirm) {
that.onSubmit()
}
}
})
} else {
that.onSubmit()
}
}
}
})
}
}
})

View File

@@ -3,8 +3,8 @@
"usingComponents": {
"van-button": "@vant/weapp/button/index",
"van-divider": "@vant/weapp/divider/index",
"custom-input": "/components/input/index",
"van-icon": "@vant/weapp/icon/index",
"photo": "../photo/index"
"photo": "../photo/index",
"van-field": "@vant/weapp/field/index"
}
}

View File

@@ -16,12 +16,20 @@
当前电表
</view>
<view class="address">
标1东-307
{{meterInfo.address}}
</view>
</view>
<view class="change">
<van-button type="info" size="small"> <van-icon name="arrow-left" /> 上一块</van-button>
<van-button type="info" size="small" >下一块 <van-icon name="arrow" /> </van-button>
<van-button wx:if="{{showLeft}}" type="info" size="small" bind:click="handlePrev">
<van-icon name="arrow-left" />
上一块
</van-button>
<view wx:else></view>
<van-button wx:if="{{showRight}}" type="info" size="small" bind:click="handleNext">
下一块
<van-icon name="arrow" />
</van-button>
<view wx:else></view>
</view>
<van-divider />
<view class="readingNumber">
@@ -30,11 +38,11 @@
上次表字
</view>
<view class="number">
3318
{{meterInfo.overall}}
</view>
</view>
<view class="lastTime">
2025年08月12日
{{meterInfo.readAt}}
</view>
</view>
<view class="nextReadingNumber">
@@ -42,8 +50,15 @@
<view class="title">
本次表字
</view>
<view class="number">
<custom-input />
<van-field
value="{{currentNumber}}"
placeholder="请输入本次读数"
bind:change="onChange"
border="{{false}}"
custom-style="border: 1rpx solid #ccc; padding: 2px 14rpx; font-size: 32rpx; border-radius: 10rpx;"
/>
</view>
</view>
<view class="photo">
@@ -54,19 +69,19 @@
<view class="title">
表字差
</view>
<view class="rightNumber">
0
<view class="rightNumber" wx:if="{{currentNumber - meterInfo.overall >= 0}}">
{{(currentNumber || 0) - meterInfo.overall}}
</view>
<view class="wrongNumber">
0
<view class="wrongNumber" wx:else>
{{(currentNumber || 0) - meterInfo.overall}}
</view>
</view>
<view class="operate">
<view style="flex: 1;">
<van-button size="small" type="info" block> 确定录入 </van-button>
<van-button size="small" type="info" block bind:click="handleCreateReading"> 确定录入 </van-button>
</view>
<view style="flex: 1; margin-left: 20rpx;">
<van-button size="small" block> 清除记录 </van-button>
<van-button size="small" block bind:click="handleClear"> 清除记录 </van-button>
</view>
</view>
</view>