Compare commits

...

10 Commits

19 changed files with 313 additions and 77 deletions

View File

@@ -1,5 +1,10 @@
import { getLoginParkList, getParkBuildingList } from "../../service/park"
import { getParkSimpleMeterList, getParkBoxList, getCardList, getCollectionList, getInventoryMeter } from "../../service/meter"
import {
getParkSimpleMeterList, getParkBoxList,
getCardList, getCollectionList,
getInventoryMeter, getCollectorList,
getWorkOrderAllMeter,
} from "../../service/meter"
import { alertInfo } from "../../utils/index";
import request from "../../utils/request"
import { payWays, feeType, meterType, noticeFlowType, noticeFlowStatus,
@@ -176,8 +181,38 @@ Component({
case "collection":
this.onSearchCollection();
return;
case "collector":
this.onSearchCollector();
break;
case "workOrderMeter":
this.onSearchWorkOrderMeter();
break;
}
},
async onSearchCollector() {
const { searchText = "", } = this.data;
const { code, message, data = [] } = await getCollectorList(searchText);
if (code !== OK) {
alertInfo(message)
return
}
this.setData({
columns: data?.map(item => `${item.collectorAddress}-${item.manufacturer}`),
list: data,
})
},
async onSearchWorkOrderMeter() {
const { searchText = "", park } = this.data;
const { code, message, data = [] } = await getWorkOrderAllMeter({keyword: searchText, park: park, page: 1, size: 20});
if (code !== OK) {
alertInfo(message)
return
}
this.setData({
columns: data?.map(item => `${item.address}-${item.meter_no}`),
list: data,
})
},
async onSearchPark() {
const { searchText = "" } = this.data;
const { code, message, data: parks = [] } = await getLoginParkList({keyword: searchText});
@@ -222,7 +257,7 @@ Component({
},
async onSearchInventoryMeter() {
const { searchText = "", park, filterBind } = this.data;
const { code, message, data: parks = [] } = await getInventoryMeter({keyword: searchText, park, isNeedBind: !filterBind, a : 1});
const { code, message, data: parks = [] } = await getInventoryMeter({keyword: searchText, park, isNeedBind: !filterBind, status: 1});
if (code !== OK) {
alertInfo(message)
return

View File

@@ -1,6 +1,8 @@
// pages/home/index.js
import { getMeterDetail, getMeterList, getTenementMeterList } from "../../service/meter";
import { getOwnTenementList, getTenementExceptionalCase } from "../../service/tenement";
import { getOwnTenementList, getTenementExceptionalCase ,
getTenementBackInfo, getTenementDetail, getTenementInfoDetail,
} from "../../service/tenement";
import { alertInfo, alertSuccess } from "../../utils/index";
import request from '../../utils/request';
import { getDot } from "../../utils/system";
@@ -159,6 +161,19 @@ Page({
alertInfo("账号存在异常,无法进行充值,请联系客服处理")
return;
}
const {
code: tenementDetailCode,
message: tenementDetailMessage,
tenement: tenementDetail,
} = await getTenementBackInfo(park?.id, tenement?.id)
if (tenementDetailCode !== OK) {
alertInfo(tenementDetailMessage)
return
}
if (tenementDetail?.stop_top) {
alertInfo("您暂不可使用此功能,可联系客服处理。")
return;
}
const that = this;
if (!user || !user.id) {
alertInfo("请先登录")

View File

@@ -1,5 +1,6 @@
// pages/invoiceList/components/notyet/index.js
import { getInvoiceList } from '../../../../service/invoice';
import { getTenementBackInfo } from '../../../../service/tenement';
import { alertInfo, loadingFunc } from '../../../../utils/index';
import request from '../../../../utils/request';
const { OK } = request;
@@ -69,7 +70,18 @@ Component({
selectMoney: Number(selectMoney.toFixed(2))
})
},
next() {
async next() {
const park = wx.getStorageSync("park")
const tenement = wx.getStorageSync("tenement")
const { code: detailCode, message: detailMessage, tenement: Detail } = await getTenementBackInfo(park?.id, tenement?.id)
if (detailCode !== OK) {
alertInfo(detailMessage)
return;
}
if (Detail?.stop_invoice) {
alertInfo("您暂不可使用此功能,可联系客服处理。")
return
}
const { selectList, list, selectMoney, selectCount } = this.data;
let tenementID = "";
let tenementName = "";

View File

@@ -70,11 +70,11 @@ Component({
tenement,
{
code: meter,
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
valley : valley ? Number(valley) : valley,
deepValley : deepValley ? Number(deepValley) : deepValley,
overall:overall? Number(overall) : (overall === "" ? null : overall),
critical : critical ? Number(critical) : (critical === "" ? null : critical),
peak: peak ? Number(peak) : (peak === "" ? null : peak),
valley : valley ? Number(valley) : (valley === "" ? null : valley),
deepValley : deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley),
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
}
)

View File

@@ -75,11 +75,11 @@ Component({
tenement,
meterId,
{
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
valley : valley ? Number(valley) : valley,
deepValley: deepValley ? Number(deepValley) : deepValley,
overall:overall? Number(overall) : (overall === "" ? null : overall),
critical : critical ? Number(critical) : (critical === "" ? null : critical),
peak: peak ? Number(peak) : (peak === "" ? null : peak),
valley : valley ? Number(valley) : (valley === "" ? null : valley),
deepValley: deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley),
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
});
if (code !== OK) {

View File

@@ -146,6 +146,27 @@ Page({
collection: "C"
})
},
onBindCollector() {
const { park } = this.data;
if (!park) {
alertInfo("请先选择园区")
return;
}
this.setData({
show: true,
title: "采集器",
type: 'collector',
})
},
clearCollector() {
this.setData({
show: false,
title: "",
type: 'collector',
collector: null,
collectorName: null,
})
},
uploadImage() {
const that = this;
wx.chooseMedia({
@@ -203,14 +224,17 @@ Page({
peak: null,
flat: null,
valley: null,
deepValley: null,
area: null,
collector: null,
collectorName: null,
collections: [],
})
},
onConfirm(e) {
console.log("e", e)
const { type, data = {}, way } = e.detail;
const {collection, park, tenement} = this.data;
const {collection, park, meterType, tenement, tenementName, overall, sharp, flat, peak, valley, deepValley} = this.data;
switch(type) {
case "park":
this.setData({
@@ -253,11 +277,31 @@ Page({
})
break;
case "meterType":
let newMeterData = {};
if (way !== 0) {
newMeterData = {
tenement: null,
tenementName: null,
overall: null,
sharp: null,
peak: null,
flat: null,
valley: null,
deepValley: null,
}
}
this.setData({
meterType: way,
meterTypeName: data,
...newMeterData,
});
break;
case "collector":
this.setData({
collector: data?.id,
collectorName: `${data.collectorAddress}-${data.manufacturer}`,
});
break;
case "meter":
this.setData({
meter: data.id,
@@ -373,6 +417,11 @@ Page({
valley: e.detail
})
},
changeDeepValley(e) {
this.setData({
deepValley: e.detail
})
},
changeRatio(e) {
this.setData({
ratio: e.detail,
@@ -402,8 +451,8 @@ Page({
const {
park, meter, address, building, meterBox, meterType,
ratio, area, card, collectionA, collectionB, collectionC,
tenement, sharp, peak, flat, valley, overall, url, sn,
collectionARatio, collectionBRatio, collectionCRatio
tenement, sharp, peak, flat, valley, deepValley, overall, url, sn,
collectionARatio, collectionBRatio, collectionCRatio, collector,
} = this.data;
if (!park || !(meter || sn) || !address || meterType == null || !building || !meterBox || ratio == null) {
alertInfo("请填写必填项后保存")
@@ -428,7 +477,15 @@ Page({
const { code, data, message } = await installMeter({
park, meterSn: meter, address, building, meterBox, meterType,
ratio, area, card, collectionA, collectionB, collectionC,
tenement, sharp, peak, flat, valley, overall, url, sn
tenement,
sharp: sharp === "" ? null : sharp,
peak: peak === "" ? null : peak,
flat: flat === "" ? null : flat,
valley: valley === "" ? null : valley,
overall: overall === "" ? null : overall,
deepValley: deepValley == "" ? null : deepValley,
url, sn, collector
})
if (code !== OK) {
alertInfo(message)

View File

@@ -90,6 +90,14 @@
allowClear="{{true}}"
bind:clear="clearCard"
/>
<searchSelectWrapper
label="采集器"
placeholder="请选择采集器绑定"
text="{{collectorName}}"
bind:search="onBindCollector"
allowClear="{{true}}"
bind:clear="clearCollector"
/>
<searchSelectWrapper
label="互感器A"
placeholder="请选择互感器绑定"
@@ -119,36 +127,49 @@
placeholder="请选择商户"
text="{{ tenementName }}"
bind:search="onTenementFocus"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="总"
placeholder="请输入总"
type="input"
bind:changeText="changeOverall"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="尖"
placeholder="请输入尖"
type="input"
bind:changeText="changeSharp"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="峰"
placeholder="请输入峰"
type="input"
bind:changeText="changePeak"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="平"
placeholder="请输入平"
type="input"
bind:changeText="changeFlat"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="谷"
placeholder="请输入谷"
type="input"
bind:changeText="changeValley"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="深谷"
placeholder="请输入深谷"
type="input"
bind:changeText="changeDeepValley"
wx:if="{{meterType === 0}}"
/>
<searchSelectWrapper
label="图片"

View File

@@ -2,7 +2,7 @@
import { uninstallMeter, } from "../../../../service/meter";
import dayjs from "../../../../utils/dayjs"
import request from "../../../../utils/request"
import { alertInfo, alertSuccess, loadingFunc} from "../../../../utils/index"
import { alertInfo, alertSuccess, loadingFunc, wxModal} from "../../../../utils/index"
import { uploadUninstallMeter } from "../../../../service/public"
const { OK } = request;
@@ -152,17 +152,44 @@ Page({
alertInfo("请选择表号")
return;
}
const { code, message } = await uninstallMeter({sn: meter, images: url, reason, tenement: meterInfo.tenement, critical, peak, flat, valley, overall, deepOverall})
if (code !== OK) {
alertInfo(message)
return
if (!meterInfo?.tenement) {
const { code, message } = await uninstallMeter({sn: meter, images: url, reason, tenement: meterInfo.tenement, critical, peak, flat, valley, overall, deepOverall})
if (code !== OK) {
alertInfo(message)
return
}
alertSuccess("拆除成功")
setTimeout(() => {
wx.navigateTo({
url: '/pages/workBenchTodoList/index',
})
}, 300)
return;
}
alertSuccess("拆除成功")
setTimeout(() => {
wx.navigateTo({
url: '/pages/workBenchTodoList/index',
})
}, 300)
wx.showModal({
title: '提示',
content: '拆出后电表和商户关系,电表和卡的关系会自动解绑,是否拆出',
complete: async (res) => {
if (res.cancel) {
}
if (res.confirm) {
const { code, message } = await uninstallMeter({sn: meter, images: url, reason, tenement: meterInfo.tenement, critical, peak, flat, valley, overall, deepOverall})
if (code !== OK) {
alertInfo(message)
return
}
alertSuccess("拆除成功")
setTimeout(() => {
wx.navigateTo({
url: '/pages/workBenchTodoList/index',
})
}, 300)
return;
}
}
})
},
uploadImage() {
const that = this;

View File

@@ -70,12 +70,12 @@ Component({
tenement,
{
code: meter,
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
flat: flat ? Number(flat) : flat,
valley : valley ? Number(valley) : valley,
deepValley: deepValley ? Number(deepValley) : deepValley,
overall:overall? Number(overall) : (overall === "" ? null : overall),
critical : critical ? Number(critical) : (critical === "" ? null : critical),
peak: peak ? Number(peak) : (peak === "" ? null : peak),
flat: flat ? Number(flat) : (flat === "" ? null : flat),
valley : valley ? Number(valley) : (valley === "" ? null : valley),
deepValley: deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley),
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
}
)

View File

@@ -81,12 +81,12 @@ Component({
tenement,
meterId,
{
overall:overall? Number(overall) : overall,
critical : critical ? Number(critical) : critical,
peak: peak ? Number(peak) : peak,
flat: flat ? Number(flat) : flat,
valley : valley ? Number(valley) : valley,
deepValley: deepValley ? Number(deepValley) : deepValley,
overall:overall? Number(overall) : (overall === "" ? null : overall),
critical : critical ? Number(critical) : (critical === "" ? null : critical),
peak: peak ? Number(peak) : (peak === "" ? null : peak),
flat: flat ? Number(flat) : (flat === "" ? null : flat),
valley : valley ? Number(valley) : (valley === "" ? null : valley),
deepValley: deepValley ? Number(deepValley) : (deepValley === null ? "" : deepValley),
readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss')
});
if (code !== OK) {

View File

@@ -2,7 +2,7 @@
import request from "../../utils/request"
import { getWorkOrderList, doNoticeFlow } from "../../service/workBench"
import { alertInfo, alertSuccess, loadingFunc } from "../../utils/index";
import { noticeFlowType } from "../../utils/data"
import { noticeFlowType as noticeFlowTypeList } from "../../utils/data"
const { OK } = request
Page({
@@ -12,7 +12,7 @@ Page({
data: {
page: 1,
size: 20,
noticeFlowType,
noticeFlowTypeList,
actionItems: [{
name: '详情',
value: 'detail'
@@ -36,7 +36,7 @@ Page({
},
onClearPark() {
const that = this;
this.setData({ park: null, parkName: null, meter: null, meterName: null }, () => {
this.setData({ park: "", parkName: "", meter: "", meterName: "" }, () => {
loadingFunc(async () => {
await that.init()
})
@@ -44,7 +44,7 @@ onClearPark() {
},
onClearMeter() {
const that = this;
this.setData({ meter: null, meterName: null }, () => {
this.setData({ meter: "", meterName: "" }, () => {
loadingFunc(async () => {
await that.init()
})
@@ -52,7 +52,7 @@ onClearMeter() {
},
onClearType() {
const that = this;
this.setData({ noticeFlowType: null, noticeFlowTypeName: null }, () => {
this.setData({ noticeFlowType: "", noticeFlowTypeName: "" }, () => {
loadingFunc(async () => {
await that.init()
})
@@ -60,7 +60,7 @@ onClearType() {
},
onClearStatus() {
const that = this;
this.setData({ noticeFlowStatus: null, noticeFlowStatusName: null }, () => {
this.setData({ noticeFlowStatus: "", noticeFlowStatusName: "" }, () => {
loadingFunc(async () => {
await that.init()
})
@@ -68,7 +68,7 @@ onClearStatus() {
},
hideActionMenu() {
this.setData({
currentActionSheet: null
currentActionSheet: ""
});
},
onMenuSelect(e) {
@@ -85,6 +85,10 @@ onMenuSelect(e) {
this.handleDoNotice(id);
break;
}
},
handleDoNoticeBtn(e) {
const id = e.currentTarget.dataset.id;
this.handleDoNotice(id)
},
async handleDoNotice(id) {
const { code, message } = await doNoticeFlow(id)
@@ -104,14 +108,20 @@ onMenuSelect(e) {
url: '/pages/workOrderDetail/index?id=' + id,
})
},
listJumpToDetail(e) {
const { id } = e.currentTarget.dataset;
wx.navigateTo({
url: '/pages/workOrderDetail/index?id=' + id,
})
},
onConfirm(e) {
const { type, data = {}, way } = e.detail;
const that = this;
switch(type) {
case "park":
this.setData({
park: data.id,
parkName: data.name,
park: data?.id,
parkName: data?.name,
})
break;
case "tenement":
@@ -143,10 +153,10 @@ onMenuSelect(e) {
})
});
break;
case "meter":
case "workOrderMeter":
this.setData({
meter: data.id,
meterName: data.address,
meter: data?.meter_id,
meterName: data?.address,
meterInfo: data,
page: 1,
}, () => {
@@ -195,7 +205,7 @@ onMenuSelect(e) {
this.setData({
show: true,
title: "电表",
type: 'meter'
type: 'workOrderMeter'
})
},
onChangePage(e) {
@@ -209,7 +219,8 @@ onMenuSelect(e) {
})
},
async init() {
const { page, size, park, tenement, meter, noticeFlowType, noticeFlowStatus, time } = this.data;
const { page, size, park, tenement = "", meter = "", noticeFlowType, noticeFlowStatus, time } = this.data;
const { code, message, data, total } = await getWorkOrderList({ page, size, park, tenement, meter, type: noticeFlowType, time, status: noticeFlowStatus })
if (code !== OK) {
alertInfo(message)
@@ -228,9 +239,7 @@ onMenuSelect(e) {
* 生命周期函数--监听页面加载
*/
onLoad(options) {
loadingFunc(async () => {
await this.init()
})
},
/**
@@ -244,7 +253,9 @@ onMenuSelect(e) {
* 生命周期函数--监听页面显示
*/
onShow() {
loadingFunc(async () => {
await this.init()
})
},
/**

View File

@@ -46,24 +46,30 @@
<view class="th"style="flex: 0 0 120rpx; justify-content: flex-end; display: flex; align-items: center;"> 操作 </view>
</view>
<view class="tbody">
<van-radio-group value="{{ record }}" bind:change="onChangeSelectRecharge">
<block wx:for="{{list}}" wx:for-index="itemIndex" wx:key="item">
<view wx:for="{{list}}" wx:for-index="itemIndex" wx:key="item" catch:tap="listJumpToDetail" data-id="{{item.id}}">
<view class="tr" style="display: flex; align-items: center; ">
<view class="th" style="flex: 0 0 130rpx;">
{{ item.time }}
</view>
<view class="th" style="flex: 0 0 150rpx;">
{{ noticeFlowType[item.types - 1] }}
{{ noticeFlowTypeList[item.types - 1] }}
</view>
<view class="th" style="flex: 0 0 150rpx;">
{{ item.address }}
</view>
<view class="th" style="flex: 0 0 150rpx;">
{{ item.current_user_audit_status === 0 ? "处理中" : "已确认" }}
<view
class="primaryTextBtn"
wx:if="{{item.current_user_audit_status === 0}}"
data-id="{{item.id}}"
catch:tap="handleDoNoticeBtn"
> 确认 </view>
<view wx:else> 已确认 </view>
</view>
<view class="th" style="flex: 0 0 120rpx; justify-content: flex-end; display: flex; align-items: center;">
<van-icon name="ellipsis" size="24px" bind:tap="showActionMenu" data-id="{{item.id}}" data-data="{{index}}" data-status="{{item.current_user_audit_status}}" class="more-icon" />
<van-icon name="ellipsis" size="24px" catch:tap="showActionMenu" data-id="{{item.id}}" data-data="{{index}}" data-status="{{item.current_user_audit_status}}" class="more-icon" />
<van-action-sheet
show="{{ currentActionSheet === item.id }}"
actions="{{ actionItems }}"
@@ -73,16 +79,11 @@
close-on-click-action
/>
<!-- <view
class="primaryTextBtn"
wx:if="{{item.flow_status === 1}}"
data-id="{{item.id}}"
> 确认 </view> -->
</view>
</view>
</block>
</van-radio-group>
</view>
</view>
</view>
</view>

View File

@@ -6,12 +6,16 @@ const { OK } = request;
// pages/workOrderDetail/index.js
Page({
/**
* 页面的初始数据
*/
data: {
detail: {}
detail: {},
header: [
// { key: 'address', title: '电表地址', renderBody: (item) => item.meter?.address },
{ title: '操作人',renderBody: (item) => { return item.user_name } },
{ title: '状态',renderBody: (item) => { return item.status === 0 ? "未确认" : "已确认" } },
],
},
/**

View File

@@ -3,7 +3,9 @@
"navigator": "/components/navigator/index",
"van-popup": "@vant/weapp/popup/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index"
"van-button": "@vant/weapp/button/index",
"custom-table": "/components/table/table",
"van-image": "@vant/weapp/image/index"
},
"navigationStyle": "custom"
}

View File

@@ -36,6 +36,39 @@
<view wx:else> - </view>
</view>
</van-field>
<van-field
value="{{ detail.created_at || '-' }}"
label="发起时间"
readonly
title-width="132rpx"
/>
<van-field
value="{{ detail.created_name || '-' }}"
label="发起人"
readonly
title-width="132rpx"
/>
<!-- <van-field
value="{{ detail.target.meter_data.meter_sn || '-' }}"
label="电表编号"
readonly
title-width="132rpx"
/> -->
<van-field
value="{{ detail.reason || '-' }}"
label="批注"
readonly
title-width="132rpx"
/>
<van-field
value="{{ detail.current_user_audit_status === 0 ? '未确认' : '已确认' }}"
label="工单状态"
readonly
title-width="132rpx"
/>
<view style="margin: 20rpx;">
<custom-table header="{{header}}" list="{{detail.notifier}}" />
</view>
<view class="wrapper">
<view class="operate">
<view class="submit" wx:if="{{detail.current_user_audit_status === 0}}"> <van-button type="info" block bind:click="onSubmit"> 确认 </van-button> </view>

View File

@@ -23,6 +23,13 @@
"condition": {
"miniprogram": {
"list": [
{
"name": "pages/invoiceList/index",
"pathName": "pages/invoiceList/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "pages/workBenchNew/components/installMeter/index",
"pathName": "pages/workBenchNew/components/installMeter/index",

View File

@@ -78,4 +78,14 @@ export const installMeter = async function(data) {
// 拆表
export const uninstallMeter = async function(data) {
return await POST(`/flow/doMeterRemoveApproval`, data);
}
// 获取商户下的电表,后台
export const getCollectorList = async function(keyword) {
return await GET(`/collector/list?collectorAddress=${replaceSpecialIcon(keyword)}`);
}
// 微信工单列表查询所有电表
export const getWorkOrderAllMeter = async function({ keyword, park, page = 1, size = 20 }) {
return await GET(`/vx/getAllMeter?keyword=${replaceSpecialIcon(keyword)}&pid=${park}&page=${page}&size=${size}`,);
}

View File

@@ -63,7 +63,8 @@ export const doNoticeFlow = async function(id) {
return await PUT(`/noticeFlow/${id}/meter/dispose`,);
}
// 确认当前流程
// 当前流程详情
export const getNoticeFlowDetail = async function(id) {
return await GET(`/noticeFlow/${id}/detail`,);
}

View File

@@ -45,10 +45,10 @@ export function getConfigByEnv() {
switch (envVersion) {
// 开发版
case 'develop':
// api = "http://localhost:8000"
api = "http://localhost:8000"
// api = "https://zgd.hbhcbn.com/api3"
// TODO: 发布正式时使用此路径
api = "https://zgd.hbhcbn.com/wxApi"
// api = "https://zgd.hbhcbn.com/wxApi"
// api = "http://127.0.0.1:4523/m1/4143821-0-default"
break;
// 体验版