准备联调抄表记录

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

View File

@@ -0,0 +1,122 @@
// pages/workBench/components/tenement/components/bindMeter/index.js
// 0015980101
import { bindMeter, } from "../../../../../../service/tenement"
import { getWorkMeterDetail } from "../../../../../../service/meter"
import { alertInfo, alertSuccess } from "../../../../../../utils/index";
import request from "../../../../../../utils/request"
import dayjs from "../../../../../../utils/dayjs"
const { OK } = request
Component({
/**
* 组件的属性列表
*/
properties: {
tenement: String,
tenementName: String,
park: String,
visible: Boolean,
meterId: String,
},
/**
* 组件的初始数据
*/
data: {
dateTimeShow: false,
},
/**
* 组件的方法列表
*/
methods: {
onMeterFocus(e) {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "电表",
type: 'meter'
})
},
onCancel() {
this.setData({
show: false,
title: "",
type: "",
})
// this.triggerEvent("close")
},
onClose() {
this.setData({
show: false,
title: "",
type: "",
})
},
onChange(e) {
const { name } = e.currentTarget.dataset;
this.setData({
[name]: e.detail
})
},
async onSubmit() {
const { overall, critical, peak, valley, park, tenement, meter, readAt } = this.data;
const { code, message } = await bindMeter(
park,
tenement,
{
code: meter,
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
valley : valley ? Number(valley) : valley,
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
}
)
if (code !== OK) {
alertInfo(message)
return;
}
alertSuccess("绑定成功")
this.triggerEvent("ok")
},
onConfirm(e) {
const { type, data } = e.detail;
const that = this;
switch(type) {
case "meter":
this.setData({
meter: data.id,
meterName: data.address,
show: false,
})
this.getMeterDetail(data.id);
break;
}
},
async getMeterDetail(id) {
const { code, message, data } = await getWorkMeterDetail(id)
if (code !== OK) {
alertInfo(message)
return;
}
this.setData({
overall: Number(data?.overall || 0),
status: data?.breakType ? '合闸' : "分闸"
})
},
dateTimeConfirm(e) {
this.setData({ readAt: e.detail.time, dateTimeShow: false })
},
dateTimeCancal(e) {
this.setData({ dateTimeShow: false })
},
onTimeFocus() {
this.setData({ dateTimeShow: true })
}
}
})

View File

@@ -0,0 +1,10 @@
{
"component": true,
"usingComponents": {
"van-dialog": "@vant/weapp/dialog/index",
"search-select": "/components/searchSelect/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"date-time-picker": "/components/DateTimePicker/index"
}
}

View File

@@ -0,0 +1,121 @@
<!--pages/workBench/components/tenement/components/bindMeter/index.wxml-->
<van-dialog
use-slot
title="绑定表计"
show="{{ visible }}"
show-cancel-button
bind:confirm="onSubmit"
bind:close="onClose"
>
<view class="modalContentWrapper">
<van-field
value="{{tenementName}}"
label="商户名称"
readonly
type="textarea"
autosize="{{true}}"
title-width="132rpx"
border="{{false}}"
/>
<van-field
value="{{ meterName }}"
placeholder="请选择电表"
label="电表"
readonly
border="{{ false }}"
use-button-slot
title-width="100rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onMeterFocus">
选择
</van-button>
</van-field>
<van-field
value="{{ status }}"
label="状态"
title-width="132rpx"
border="{{false}}"
readonly
type="digit"
/>
<van-field
value="{{ readAt }}"
placeholder="请选择绑定时间"
label="时间"
readonly
border="{{ false }}"
use-button-slot
title-width="100rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onTimeFocus">
选择
</van-button>
</van-field>
<van-field
value="{{ overall }}"
label="表字"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="overall"
placeholder="请输入表字"
type="digit"
/>
<van-field
value="{{ critical }}"
label="尖"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="critical"
placeholder="请输入有功(尖)"
type="digit"
/>
<van-field
value="{{ peak }}"
label="峰"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="peak"
placeholder="请输入有功(峰)"
type="digit"
/>
<van-field
value="{{ overall }}"
label="平"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="overall"
placeholder="请输入有功(平)"
type="digit"
/>
<van-field
value="{{ valley }}"
label="谷"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="valley"
type="digit"
placeholder="请输入有功(谷)"
/>
</view>
</van-dialog>
<search-select
show="{{show}}"
title="{{title}}"
type="{{type}}"
park="{{park}}"
bindconfirm="onConfirm"
bindcancel="onCancel"
/>
<date-time-picker
show="{{dateTimeShow}}"
bind:confirm="dateTimeConfirm"
bind:cancel="dateTimeCancal"
/>

View File

@@ -0,0 +1 @@
/* pages/workBench/components/tenement/components/bindMeter/index.wxss */

View File

@@ -0,0 +1,103 @@
// pages/workBench/components/tenement/components/createTenement/index.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData(options)
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
onBuildingFocus() {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "建筑",
type: 'building'
})
},
onFeeTypeFocus() {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "建筑",
type: 'building'
})
},
beforeBack() {
let pages = getCurrentPages(); // 获取当前页面栈
let prevPage = pages[pages.length - 2]; // 获取上一页
const { tenement = '', tenementName = '', park = '', parkName = '' } = this.data;
// 修改上一页的数据
prevPage.setData({
needBackShow: true,
tenement,
tenementName,
park,
parkName
});
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@@ -0,0 +1,8 @@
{
"usingComponents": {
"search-select": "/components/searchSelect/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"navigator": "/components/navigator/index"
}
}

View File

@@ -0,0 +1,74 @@
<!--pages/workBench/components/tenement/components/createTenement/index.wxml-->
<navigator title="开户" canBack="{{true}}" beforeBack="beforeBack" />
<view class="modalContentWrapper">
<van-field
value=""
label="商户全称"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value=""
label="商户简称"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
/>
<van-field
value=""
label="联系地址"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value=""
label="联系人"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value=""
label="联系电话"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value="{{ meterName }}"
placeholder="请选择建筑"
label="建筑"
use-button-slot
title-width="120rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onBuildingFocus">
选择
</van-button>
</van-field>
<van-field
value="{{ meterName }}"
placeholder="请选择收费类型"
label="收费类型"
use-button-slot
title-width="120rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onFeeTypeFocus">
选择
</van-button>
</van-field>
</view>
<search-select
show="{{show}}"
title="{{title}}"
type="{{type}}"
park="{{park}}"
bindconfirm="onConfirm"
bindcancel="onCancel"
/>

View File

@@ -0,0 +1 @@
/* pages/workBench/components/tenement/components/createTenement/index.wxss */

View File

@@ -0,0 +1,124 @@
// pages/workBench/components/tenement/components/kaihu/index.js
import { alertInfo, alertSuccess } from "../../../../../../utils/index"
import { createBackTenement, updateTenementBackInfo } from "../../../../../../service/tenement"
import request from "../../../../../../utils/request"
import { payWays, feeType as feeTypeList } from "../../../../../../utils/data";
const { OK } = request;
Component({
/**
* 组件的属性列表
*/
properties: {
park: String,
visible: Boolean,
defaultValue: Object,
editType: String,
title: String,
},
observers: {
'defaultValue': function(defaultValue) {
const { fullName, shortName, phone, id, feeType, address, building, buildingName, contact,} = defaultValue;
this.setData({
name: fullName,
shortName,
phone, id, feeType, address, building, buildingName, contact,
feeTypeName: feeTypeList[feeType]
})
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
onBuildingFocus() {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "建筑",
type: 'building'
})
},
onFeeTypeFocus() {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "收费类型",
type: 'feeType'
})
},
onConfirm(e) {
const { type, data, way } = e.detail;
switch(type) {
case "building":
this.setData({
building: data.id,
buildingName: data.name,
show: false,
})
return;
case "feeType":
this.setData({
feeTypeName: data,
feeType: way,
show: false,
})
}
},
onCancel() {
this.setData({ show: false })
},
onClose() {
this.triggerEvent("close")
},
onChange(e) {
const { name } = e.currentTarget.dataset;
this.setData({
[name]: e.detail
})
},
clear() {
this.setData({
name: "", shortName: "", address: "", contact: "", phone: "",
building: "", feeType: "", buildingName: "", feeTypeName: "", id,
})
},
async onSubmit() {
const { name, shortName, address, contact, phone, building, feeType, park, editType, id } = this.data;
if (editType === "add") {
const { code, message } = await createBackTenement(park, { name, shortName, address, contact, phone, building, feeType })
if (code !== OK) {
alertInfo(message)
return
}
alertSuccess("开户成功")
this.triggerEvent("ok")
return;
}
const { code, message } = await updateTenementBackInfo(park, id, { name, shortName, address, contact, phone, building, feeType })
if (code !== OK) {
alertInfo(message)
return;
}
alertSuccess("编辑成功")
this.triggerEvent("ok")
}
},
})

View File

@@ -0,0 +1,10 @@
{
"component": true,
"usingComponents": {
"search-select": "/components/searchSelect/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"navigator": "/components/navigator/index",
"van-dialog": "@vant/weapp/dialog/index"
}
}

View File

@@ -0,0 +1,100 @@
<!--pages/workBench/components/tenement/components/kaihu/index.wxml-->
<van-dialog
use-slot
title="{{title}}"
show="{{ visible }}"
show-cancel-button
bind:close="onClose"
bind:confirm="onSubmit"
>
<view class="modalContentWrapper">
<van-field
value="{{name}}"
data-name="name"
bind:change="onChange"
label="商户全称"
type="textarea"
placeholder="请输入商户全称"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value="{{shortName}}"
data-name="shortName"
bind:change="onChange"
label="商户简称"
placeholder="请输入商户简称"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
/>
<van-field
value="{{address}}"
data-name="address"
bind:change="onChange"
label="联系地址"
placeholder="请输入联系地址"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value="{{contact}}"
data-name="contact"
bind:change="onChange"
label="联系人"
placeholder="请输入联系人"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value="{{phone}}"
data-name="phone"
bind:change="onChange"
label="联系电话"
placeholder="请输入联系电话"
type="textarea"
autosize="{{true}}"
title-width="132rpx"
required
/>
<van-field
value="{{ buildingName }}"
placeholder="请选择建筑"
label="建筑"
use-button-slot
readonly
title-width="120rpx"
required
>
<van-button slot="button" size="small" type="info" bind:click="onBuildingFocus">
选择
</van-button>
</van-field>
<van-field
value="{{ feeTypeName }}"
placeholder="请选择收费类型"
label="收费类型"
readonly
use-button-slot
title-width="120rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onFeeTypeFocus">
选择
</van-button>
</van-field>
</view>
</van-dialog>
<search-select
show="{{show}}"
title="{{title}}"
type="{{type}}"
park="{{park}}"
bindconfirm="onConfirm"
bindcancel="onCancel"
/>

View File

@@ -0,0 +1 @@
/* pages/workBench/components/tenement/components/kaihu/index.wxss */

View File

@@ -0,0 +1,101 @@
// pages/workBench/components/tenement/components/bindMeter/index.js
import { unbindMeter, } from "../../../../../../service/tenement"
import request from "../../../../../../utils/request"
import { alertInfo, alertSuccess } from "../../../../../../utils/index";
const { OK } = request
import { getWorkMeterDetail } from "../../../../../../service/meter"
import dayjs from "../../../../../../utils/dayjs"
Component({
/**
* 组件的属性列表
*/
properties: {
tenement: String,
park: String,
tenementName: String,
meterId: String,
meterAddress: String,
visible:Boolean,
},
observers: {
"meterId": function(newValue) {
this.getMeterDetail(newValue)
}
},
/**
* 组件的初始数据
*/
data: {
dateTimeShow: false
},
/**
* 组件的方法列表
*/
methods: {
onMeterFocus(e) {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "电表",
type: 'meter'
})
},
async getMeterDetail(id) {
const { code, message, data } = await getWorkMeterDetail(id)
if (code !== OK) {
alertInfo(message)
return;
}
this.setData({
overall: Number(data?.overall || 0),
status: data?.breakType ? '合闸' : "分闸"
})
},
onClose() {
this.triggerEvent("close")
},
onChange(e) {
const { name } = e.currentTarget.dataset;
this.setData({
[name]: e.detail
})
},
async onSubmit() {
const { overall, critical, peak, valley, park, tenement, meterId,readAt } = this.data;
const { code, message, } = await unbindMeter(
park,
tenement,
meterId,
{
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
valley : valley ? Number(valley) : valley,
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
});
if (code !== OK) {
alertInfo(message)
return
}
alertSuccess("解绑成功")
this.triggerEvent("ok")
},
dateTimeConfirm(e) {
this.setData({ readAt: e.detail.time, dateTimeShow: false })
},
dateTimeCancal(e) {
this.setData({ dateTimeShow: false })
},
onTimeFocus() {
this.setData({ dateTimeShow: true })
}
}
})

View File

@@ -0,0 +1,10 @@
{
"component": true,
"usingComponents": {
"van-dialog": "@vant/weapp/dialog/index",
"search-select": "/components/searchSelect/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"date-time-picker": "/components/DateTimePicker/index"
}
}

View File

@@ -0,0 +1,100 @@
<!--pages/workBench/components/tenement/components/bindMeter/index.wxml-->
<van-dialog
use-slot
title="解绑电表"
show="{{ visible }}"
show-cancel-button
bind:confirm="onSubmit"
bind:close="onClose"
>
<view class="modalContentWrapper">
<van-field
value="{{tenementName}}"
label="商户名称"
readonly
type="textarea"
autosize="{{true}}"
title-width="132rpx"
border="{{false}}"
/>
<van-field
value="{{meterAddress}}"
label="电表地址"
readonly
type="textarea"
autosize="{{true}}"
title-width="132rpx"
border="{{false}}"
/>
<van-field
value="{{ readAt }}"
placeholder="请选择解绑时间"
label="时间"
readonly
border="{{ false }}"
use-button-slot
title-width="100rpx"
>
<van-button slot="button" size="small" type="info" bind:click="onTimeFocus">
选择
</van-button>
</van-field>
<van-field
value="{{ overall }}"
label="表字"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="overall"
placeholder="请输入表字"
type="number"
/>
<van-field
value="{{ critical }}"
label="尖"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="critical"
placeholder="请输入有功(尖)"
type="number"
/>
<van-field
value="{{ peak }}"
label="峰"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="peak"
placeholder="请输入有功(峰)"
type="number"
/>
<van-field
value="{{ overall }}"
label="平"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="overall"
type="number"
placeholder="请输入有功(平)"
/>
<van-field
value="{{ valley }}"
label="谷"
type="number"
title-width="132rpx"
border="{{false}}"
bind:change="onChange"
data-name="valley"
placeholder="请输入有功(谷)"
/>
</view>
</van-dialog>
<date-time-picker
show="{{dateTimeShow}}"
bind:confirm="dateTimeConfirm"
bind:cancel="dateTimeCancal"
/>

View File

@@ -0,0 +1 @@
/* pages/workBench/components/tenement/components/bindMeter/index.wxss */