From fe590353df94fe2da575c7a4ef09ce3a40424c35 Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Tue, 28 Oct 2025 14:25:59 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=A3=E7=BB=91?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E6=97=B6=E5=80=99=E8=AF=BB=E6=95=B0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=8A=84=E8=A1=A8=E8=B7=AF=E7=BA=BF=E7=9A=84?= =?UTF-8?q?=E6=8A=84=E8=A1=A8=E8=AE=B0=E5=BD=95=E5=8F=AF=E4=BB=A5=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/searchSelect/index.js | 9 +-- .../components/detailModal/index.js | 30 +++++++++ .../components/detailModal/index.json | 9 +++ .../components/detailModal/index.wxml | 64 +++++++++++++++++++ .../components/detailModal/index.wxss | 1 + pages/readingHistory/index.js | 7 ++ pages/readingHistory/index.json | 3 +- pages/readingHistory/index.wxml | 14 ++-- .../components/workBenchReading/index.js | 38 ++++++++++- .../components/bindMeter/index.js | 10 +-- .../components/bindMeter/index.wxml | 1 + .../components/unBindMeter/index.js | 10 +-- pages/writeReading/components/photo/index.js | 4 +- .../components/readingInfo/index.js | 8 ++- project.private.config.json | 14 ++++ service/meter.js | 4 +- 16 files changed, 197 insertions(+), 29 deletions(-) create mode 100644 pages/readingHistory/components/detailModal/index.js create mode 100644 pages/readingHistory/components/detailModal/index.json create mode 100644 pages/readingHistory/components/detailModal/index.wxml create mode 100644 pages/readingHistory/components/detailModal/index.wxss diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index c75c854..b17ab7f 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -18,9 +18,10 @@ Component({ show: Boolean, park: String, isBack: Boolean, + filterBind: Boolean, }, observers: { - "show,type": function(newShow, newType) { + "show,type,filterBind": function(newShow, newType) { if (newShow && newType) { this.onSearch() } @@ -96,7 +97,7 @@ Component({ this.triggerEvent("confirm", { data: item, way: index, type } ); }, onSearch() { - const { type } = this.data; + const { type, bind, filterBind } = this.data; switch(type) { case "park": this.onSearchPark(); @@ -125,8 +126,8 @@ Component({ }) }, async onSearchMeter() { - const { searchText = "", park } = this.data; - const { code, message, data: parks = [] } = await getParkSimpleMeterList({keyword: searchText, park}); + const { searchText = "", park, filterBind } = this.data; + const { code, message, data: parks = [] } = await getParkSimpleMeterList({keyword: searchText, park, isNeedBind: !filterBind}); if (code !== OK) { alertInfo(message) return diff --git a/pages/readingHistory/components/detailModal/index.js b/pages/readingHistory/components/detailModal/index.js new file mode 100644 index 0000000..b634b90 --- /dev/null +++ b/pages/readingHistory/components/detailModal/index.js @@ -0,0 +1,30 @@ +// pages/readingHistory/components/detailModal/index.js +Component({ + + /** + * 组件的属性列表 + */ + properties: { + visible: Boolean, + detail: Object, + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + showImage() { + this.setData({ show: true }) + }, + onClose() { + this.setData({ show: false }) + } + } +}) \ No newline at end of file diff --git a/pages/readingHistory/components/detailModal/index.json b/pages/readingHistory/components/detailModal/index.json new file mode 100644 index 0000000..e3239c8 --- /dev/null +++ b/pages/readingHistory/components/detailModal/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "van-dialog": "@vant/weapp/dialog/index", + "van-field": "@vant/weapp/field/index", + "van-image": "@vant/weapp/image/index", + "van-popup": "@vant/weapp/popup/index" + } +} \ No newline at end of file diff --git a/pages/readingHistory/components/detailModal/index.wxml b/pages/readingHistory/components/detailModal/index.wxml new file mode 100644 index 0000000..18e1335 --- /dev/null +++ b/pages/readingHistory/components/detailModal/index.wxml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/readingHistory/components/detailModal/index.wxss b/pages/readingHistory/components/detailModal/index.wxss new file mode 100644 index 0000000..4da0fd5 --- /dev/null +++ b/pages/readingHistory/components/detailModal/index.wxss @@ -0,0 +1 @@ +/* pages/readingHistory/components/detailModal/index.wxss */ \ No newline at end of file diff --git a/pages/readingHistory/index.js b/pages/readingHistory/index.js index f118ece..69586c7 100644 --- a/pages/readingHistory/index.js +++ b/pages/readingHistory/index.js @@ -104,6 +104,13 @@ Page({ type: "edit", }) }, + handleDetail(e) { + const { data } = e.currentTarget.dataset; + this.setData({ + detail: data, + detailVisible: true + }) + }, handleDelete(e) { const { data } = e.currentTarget.dataset; const that = this; diff --git a/pages/readingHistory/index.json b/pages/readingHistory/index.json index ea7b734..aed3603 100644 --- a/pages/readingHistory/index.json +++ b/pages/readingHistory/index.json @@ -6,7 +6,8 @@ "van-icon": "@vant/weapp/icon/index", "editModal": "./components/editModal/index", "pagination": "/components/pagination/index", - "empty": "/components/empty/index" + "empty": "/components/empty/index", + "detailModal": "./components/detailModal/index" }, "navigationStyle": "custom" } \ No newline at end of file diff --git a/pages/readingHistory/index.wxml b/pages/readingHistory/index.wxml index 3fb5403..e005fff 100644 --- a/pages/readingHistory/index.wxml +++ b/pages/readingHistory/index.wxml @@ -14,8 +14,8 @@ 抄表时间 - 抄表读数 - 操作 + 抄表读数 + 操作 @@ -23,13 +23,14 @@ {{ item.readAt }} - + {{ item.overall }} - + + @@ -58,4 +59,9 @@ bind:ok="onEditFinish" startTime="{{startTime}}" routeId="{{routeId}}" +/> + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchReading/index.js b/pages/workBenchNew/components/workBenchReading/index.js index 6f02a68..b19578d 100644 --- a/pages/workBenchNew/components/workBenchReading/index.js +++ b/pages/workBenchNew/components/workBenchReading/index.js @@ -1,5 +1,5 @@ // pages/workBenchNew/components/workBenchReading/index.js -import { getMeterReadingRouteList, changeMeterRouteStatus } from "../../../../service/workBench" +import { getMeterReadingRouteList, changeMeterRouteStatus, checkReadingFinish } from "../../../../service/workBench" import { alertError, alertSuccess, loadingFunc } from "../../../../utils/index" import request from "../../../../utils/request" const { OK } = request @@ -72,6 +72,10 @@ Page({ that.jumpToReading({ currentTarget: { dataset: { id } } }) }, 500) }, + // async checkFinish(id) { + + // return {data, num}; + // }, async changeEndStatus(e) { const that = this; wx.showModal({ @@ -83,10 +87,38 @@ Page({ } if (res.confirm) { - const { id, routeid: routeId } = e.currentTarget.dataset; - const { code, message } = await changeMeterRouteStatus({ id, status: 0, routeId }) + const { id, routeid: routeId } = e.currentTarget.dataset; + const { code, message, data, num } = await checkReadingFinish(id || this.data.routeId); if (code !== OK) { alertError(message) + return; + } + console.log("data", data, "num", num) + if (!data) { + wx.showModal({ + title: '提示', + content: `该路线还有${num}块电表还没有抄完,是否确认结束结束抄表?`, + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + const { code: cd, message } = await changeMeterRouteStatus({ id, status: 0, routeId }) + if (cd !== OK) { + alertError(message) + return + } + alertSuccess("操作成功") + that.init() + } + } + }) + return + } + const { code: c, message: m } = await changeMeterRouteStatus({ id, status: 0, routeId }) + if (c !== OK) { + alertError(m) return } alertSuccess("操作成功") diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js index caba95d..e95ab06 100644 --- a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js @@ -106,11 +106,11 @@ Component({ return; } this.setData({ - overall: Number(data?.overall || 0), - critical: Number(data?.sharp || 0), - peak: Number(data?.peak || 0), - flat: Number(data?.flat || 0), - valley: Number(data?.valley || 0), + overall: data?.overall ? Number(data?.overall || 0) : null, + critical: data?.overall ? Number(data?.sharp || 0) : null, + peak: data?.overall ? Number(data?.peak || 0) : null, + flat: data?.overall ? Number(data?.flat || 0) : null, + valley: data?.overall ? Number(data?.valley || 0) : null, meter04kvType: data?.meter04kvType, status: data?.breakType ? '合闸' : "分闸", }) diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml index 42bd669..e194707 100644 --- a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml @@ -112,6 +112,7 @@ park="{{park}}" bindconfirm="onConfirm" bindcancel="onCancel" + filterBind="{{true}}" /> { - const { code, message, data } = await uploadOcrFile(tempFilePaths) + const { code, message, data, url } = await uploadOcrFile(tempFilePaths) if (code !== OK) { alertError(message) return } setTimeout(() => { - that.triggerEvent("finish", { number: data?.integer + "." + data?.decimal || 0, success: data?.integer != null && data?.integer !== "" }) + that.triggerEvent("finish", { number: data?.integer + "." + data?.decimal || 0, success: data?.integer != null && data?.integer !== "", url }) }, 100) }) diff --git a/pages/writeReading/components/readingInfo/index.js b/pages/writeReading/components/readingInfo/index.js index bd56a56..95fcfa4 100644 --- a/pages/writeReading/components/readingInfo/index.js +++ b/pages/writeReading/components/readingInfo/index.js @@ -72,13 +72,14 @@ Component({ wx.navigateBack() }, onPhotoFinish(e) { - const { number, success } = e.detail; + const { number, success, url } = e.detail; const { meterInfo } = this.data; if (success) { this.setData({ currentNumber: `${Number(number)}`, calcNumber: isNaN(Number(number)) ? 0 : Number(number), - diff: isNaN(Number(number)) ? "-" : (Number(number || 0) - Number(meterInfo.overall)).toFixed(2) + diff: isNaN(Number(number)) ? "-" : (Number(number || 0) - Number(meterInfo.overall)).toFixed(2), + url, }) alertSuccess("获取成功") } else { @@ -86,13 +87,14 @@ Component({ } }, async onSubmit() { - const { meterInfo, currentNumber, routeId } = this.data; + const { meterInfo, currentNumber, routeId, url } = this.data; const { parkId, id } = meterInfo; const { code, message } = await createReading(parkId, id, routeId, { overall: `${currentNumber}`, flat: `${currentNumber}`, readAt: dayjs().format("YYYY-MM-DD HH:mm:ss"), source: 1, + url }) if (code !== OK) { alertError(message) diff --git a/project.private.config.json b/project.private.config.json index c2f655c..424d3b1 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -23,6 +23,20 @@ "condition": { "miniprogram": { "list": [ + { + "name": "pages/readingHistory/index", + "pathName": "pages/readingHistory/index", + "query": "meter=METER00114674412879874&park=P00114672412196865&routeId=PR00121172392214529&disabled=false", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/workBenchNew/components/workBenchTenement/index", + "pathName": "pages/workBenchNew/components/workBenchTenement/index", + "query": "", + "launchMode": "default", + "scene": null + }, { "name": "pages/workBenchNew/components/workBenchReading/index", "pathName": "pages/workBenchNew/components/workBenchReading/index", diff --git a/service/meter.js b/service/meter.js index 14d3b57..eb864da 100644 --- a/service/meter.js +++ b/service/meter.js @@ -23,8 +23,8 @@ export const getParkMeterList = async function({park = "", keyword = "", page = } // 获取某一园区下的简洁电表列表 -export const getParkSimpleMeterList = async function({park = "", keyword = "", page = 1}) { - return await GET(`/work/getWorkMeter?page=${page}&park=${park}&keyword=${replaceSpecialIcon(keyword)}`); +export const getParkSimpleMeterList = async function({park = "", keyword = "", page = 1, isNeedBind}) { + return await GET(`/work/getWorkMeter?page=${page}&park=${park}&keyword=${replaceSpecialIcon(keyword)}&isNeedBind=${isNeedBind}`); } From 15393049996de97c590e5a13c3e66e27d16938ea Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Mon, 3 Nov 2025 16:26:30 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E8=81=94=E8=B0=83?= =?UTF-8?q?=E8=A3=85=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 6 +- components/searchSelect/index.js | 76 +++- components/searchSelect/index.wxml | 10 + components/searchSelectWrapper/index.js | 6 +- components/searchSelectWrapper/index.wxml | 9 +- components/searchSelectWrapper/index.wxss | 11 +- .../components/installMeter/index.js | 379 ++++++++++++++++++ .../components/installMeter/index.json | 12 + .../components/installMeter/index.wxml | 181 +++++++++ .../components/installMeter/index.wxss | 15 + .../components/operateButton/index.js | 27 ++ .../components/operateButton/index.json | 4 + .../components/operateButton/index.wxml | 2 + .../components/operateButton/index.wxss | 12 + .../workBenchNew/components/recharge/index.js | 192 +++++++++ .../components/recharge/index.json | 11 + .../components/recharge/index.wxml | 51 +++ .../components/recharge/index.wxss | 1 + .../components/uninstallMeter/index.js | 173 ++++++++ .../components/uninstallMeter/index.json | 11 + .../components/uninstallMeter/index.wxml | 75 ++++ .../components/uninstallMeter/index.wxss | 15 + .../components/workBenchApprove/index.wxml | 9 +- pages/workBenchNew/index.js | 15 + pages/workBenchNew/index.json | 3 +- pages/workBenchNew/index.wxml | 59 ++- pages/workBenchNew/index.wxss | 2 +- pages/workBenchTodoList/index.js | 66 +++ pages/workBenchTodoList/index.json | 13 + pages/workBenchTodoList/index.wxml | 12 + pages/workBenchTodoList/index.wxss | 1 + project.private.config.json | 85 +--- service/meter.js | 27 ++ service/public.js | 20 + utils/data.js | 4 +- 35 files changed, 1495 insertions(+), 100 deletions(-) create mode 100644 pages/workBenchNew/components/installMeter/index.js create mode 100644 pages/workBenchNew/components/installMeter/index.json create mode 100644 pages/workBenchNew/components/installMeter/index.wxml create mode 100644 pages/workBenchNew/components/installMeter/index.wxss create mode 100644 pages/workBenchNew/components/operateButton/index.js create mode 100644 pages/workBenchNew/components/operateButton/index.json create mode 100644 pages/workBenchNew/components/operateButton/index.wxml create mode 100644 pages/workBenchNew/components/operateButton/index.wxss create mode 100644 pages/workBenchNew/components/recharge/index.js create mode 100644 pages/workBenchNew/components/recharge/index.json create mode 100644 pages/workBenchNew/components/recharge/index.wxml create mode 100644 pages/workBenchNew/components/recharge/index.wxss create mode 100644 pages/workBenchNew/components/uninstallMeter/index.js create mode 100644 pages/workBenchNew/components/uninstallMeter/index.json create mode 100644 pages/workBenchNew/components/uninstallMeter/index.wxml create mode 100644 pages/workBenchNew/components/uninstallMeter/index.wxss create mode 100644 pages/workBenchTodoList/index.js create mode 100644 pages/workBenchTodoList/index.json create mode 100644 pages/workBenchTodoList/index.wxml create mode 100644 pages/workBenchTodoList/index.wxss diff --git a/app.json b/app.json index eb05e51..3d9a873 100644 --- a/app.json +++ b/app.json @@ -42,7 +42,11 @@ "pages/workBenchNew/components/workBenchTenement/index", "pages/workBenchNew/components/workBenchApprove/index", "pages/workBenchNew/components/workBenchWxUser/index", - "pages/workBenchNew/components/workBenchReading/index" + "pages/workBenchNew/components/workBenchReading/index", + "pages/workBenchNew/components/recharge/index", + "pages/workBenchNew/components/installMeter/index", + "pages/workBenchNew/components/uninstallMeter/index", + "pages/workBenchTodoList/index" ], "subPackages": [ { diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index b17ab7f..65f64df 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -1,8 +1,8 @@ import { getLoginParkList, getParkBuildingList } from "../../service/park" -import { getParkSimpleMeterList } from "../../service/meter" +import { getParkSimpleMeterList, getParkBoxList, getCardList, getCollectionList, getInventoryMeter } from "../../service/meter" import { alertInfo } from "../../utils/index"; import request from "../../utils/request" -import { payWays, feeType } from "../../utils/data"; +import { payWays, feeType, meterType } from "../../utils/data"; import { getTenementList, getWxTenementList } from "../../service/tenement"; const { OK } = request; @@ -35,6 +35,7 @@ Component({ searchText: "", payWays, feeType, + meterType }, lifetimes: { attached() { @@ -96,6 +97,17 @@ Component({ }) this.triggerEvent("confirm", { data: item, way: index, type } ); }, + onMeterTypeConfirm(event) { + const { index } = event.detail; + const { meterType = [], type } = this.data; + const item = meterType[index]; + this.setData({ + columns: [], + list: [], + searchText: "" + }) + this.triggerEvent("confirm", { data: item, way: index, type } ); + }, onSearch() { const { type, bind, filterBind } = this.data; switch(type) { @@ -105,12 +117,24 @@ Component({ case "meter": this.onSearchMeter(); return + case "inventoryMeter": + this.onSearchInventoryMeter(); + return case "tenement": this.onSearchTenement(); return; case "building": this.onSearchBuilding(); return; + case "meterBox": + this.onSearchMeterBox(); + return; + case "card": + this.onSearchCard(); + return; + case "collection": + this.onSearchCollection(); + return; } }, async onSearchPark() { @@ -125,6 +149,18 @@ Component({ list: parks, }) }, + async onSearchCollection() { + const { searchText = "" } = this.data; + const { code, message, data: parks = [] } = await getCollectionList({keyword: searchText, page: 1}); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: parks?.map(item => item?.name), + list: parks, + }) + }, async onSearchMeter() { const { searchText = "", park, filterBind } = this.data; const { code, message, data: parks = [] } = await getParkSimpleMeterList({keyword: searchText, park, isNeedBind: !filterBind}); @@ -137,6 +173,18 @@ Component({ list: parks || [], }) }, + async onSearchInventoryMeter() { + const { searchText = "", park, filterBind } = this.data; + const { code, message, data: parks = [] } = await getInventoryMeter({keyword: searchText, park, isNeedBind: !filterBind}); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: parks?.map(item => `${item.sn}`) || [], + list: parks || [], + }) + }, async onSearchTenement() { const { searchText = "", park, isBack } = this.data; const { code, message, data = [] } = isBack ? await getWxTenementList({keyword: searchText, park}) : await getTenementList({keyword: searchText, park}); @@ -161,6 +209,30 @@ Component({ list: data, }) }, + async onSearchMeterBox() { + const { park } = this.data; + const { code, message, data = [] } = await getParkBoxList({park}); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: data?.length ? data?.map(item => item?.address) : [], + list: data, + }) + }, + async onSearchCard() { + const { park } = this.data; + const { code, message, data = [] } = await getCardList({park}); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: data?.length ? data?.map(item => item?.sim_number) : [], + list: data, + }) + } } }) diff --git a/components/searchSelect/index.wxml b/components/searchSelect/index.wxml index 6f4c8bc..55957fe 100644 --- a/components/searchSelect/index.wxml +++ b/components/searchSelect/index.wxml @@ -26,6 +26,16 @@ bind:confirm="onFeeTypeConfirm" /> + + + - {{ label }} + *{{ label }} {{placeholder}} {{text}} @@ -32,4 +32,11 @@ custom-style="padding: 0;font-size: 30rpx;line-height: 32rpx;" /> + + + + {{ label }} + + + \ No newline at end of file diff --git a/components/searchSelectWrapper/index.wxss b/components/searchSelectWrapper/index.wxss index cd7bdc4..523629c 100644 --- a/components/searchSelectWrapper/index.wxss +++ b/components/searchSelectWrapper/index.wxss @@ -8,7 +8,7 @@ .content { flex: 1; - margin-left: 30rpx; + margin-left: 20rpx; margin-right: 30rpx; display: flex; padding: 10rpx 20rpx; @@ -19,7 +19,7 @@ .inputContent { flex: 1; - margin-left: 30rpx; + margin-left: 20rpx; margin-right: 30rpx; display: flex; padding: 0 20rpx; @@ -33,5 +33,10 @@ } .label { - width: 120rpx; + width: 130rpx; +} + +.required { + color: rgb(209, 83, 25); + font-size: 30rpx; } \ No newline at end of file diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js new file mode 100644 index 0000000..48fc9e5 --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.js @@ -0,0 +1,379 @@ +// pages/workBenchNew/components/createMeter/index.js +import dayjs from "../../../../utils/dayjs" +import { alertInfo, alertSuccess, loadingFunc } from "../../../../utils/index" +import { uploadInstallMeter } from "../../../../service/public" +import request from "../../../../utils/request" +import { installMeter } from "../../../../service/meter" +const { OK } = request + +Page({ + + /** + * 页面的初始数据 + */ + data: { + time: "", + area: "", + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.setData({ + time: dayjs().format("YYYY-MM-DD HH:mm:ss") + }) + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'inventoryMeter' + }) + }, + onBuildingFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "建筑", + type: 'building' + }) + }, + clearImage() { + this.setData({ + url: "" + }) + }, + onMeterBoxFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表箱", + type: 'meterBox' + }) + }, + onMeterTypeFocus() { + this.setData({ + show: true, + title: "电表类型", + type: 'meterType' + }) + }, + onBindCard() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "卡", + type: 'card' + }) + }, + onBindCollectionA() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "采集器A", + type: 'collection', + collection: "A" + }) + }, + onBindCollectionB() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "采集器B", + type: 'collection', + collection: "B" + }) + }, + onBindCollectionC() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "采集器C", + type: 'collection', + collection: "C" + }) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(res) { + console.log("res", res) + const path = res.tempFiles?.[0]?.tempFilePath.toLowerCase() + if (!/(\.jpg|\.png|\.jpeg)$/.test(path)) { + wx.showToast({ + title: '请上传jpg、png或jpeg格式的图片', + icon: 'none', + }); + return; + } + var tempFilePaths = path; + loadingFunc(async () => { + const { code, message, url } = await uploadInstallMeter(tempFilePaths) + if (code !== OK) { + alertError(message) + return + } + that.setData({ + url: url + }) + }) + } + }) + }, + onConfirm(e) { + const { type, data = {} } = e.detail; + const {collection} = this.data; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + }) + break; + case "inventoryMeter": + this.setData({ + meter: data.id, + meterName: data?.sn, + }) + break; + case "building": + this.setData({ + building: data.id, + buildingName: data.name, + }); + break; + case "meterBox": + this.setData({ + meterBox: data.id, + meterBoxName: data.address, + }); + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + }) + break; + case "meterType": + this.setData({ + meterType: data.way, + meterTypeName: data, + }); + break; + case "meter": + this.setData({ + meter: data.id, + meterName: data.address, + }); + break; + case "card": + this.setData({ + card: data.id, + cardName: data.sim_number, + }); + break; + case "collection": + let newData = {} + if (collection === "A") { + newData = { + collectionA: data.id, + collectionAName: data.name, + } + } + if (collection === "B") { + newData = { + collectionB: data.id, + collectionBName: data.name, + } + } + if (collection === "C") { + newData = { + collectionC: data.id, + collectionCName: data.name, + } + } + this.setData(newData); + break; + } + this.onCancel(); + }, + changeAddress(e) { + this.setData({ + address: e.detail + }) + }, + changeArea(e) { + this.setData({ + area: e.detail + }) + }, + changeOverall(e) { + this.setData({ + overall: e.detail + }) + }, + changeSharp(e) { + this.setData({ + sharp: e.detail + }) + }, + changePeak(e) { + this.setData({ + sharp: e.detail + }) + }, + changeFlat(e) { + this.setData({ + flat: e.detail + }) + }, + changeValley(e) { + this.setData({ + valley: e.detail + }) + }, + changeRatio(e) { + this.setData({ + ratio: e.detail, + }) + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + onTenementFocus(e) { + const { park } = this.data; + const that = this; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "商户", + type: 'tenement' + }) + }, + async handleSubmit() { + const { + park, meter, address, building, meterBox, meterType, + ratio, area, card, collectionA, collectionB, collectionC, + tenement, sharp, peak, flat, valley, overall, url + } = this.data; + if (!park || !meter || !address) { + alertInfo("请填写必填项后保存") + return; + } + console.log("data", this.data) + const { code, data, message } = await installMeter({ + park, meter, address, building, meterBox, meterType, + ratio, area, card, collectionA, collectionB, collectionC, + tenement, sharp, peak, flat, valley, overall, url + }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("新增成功") + }, + goback() { + wx.navigateBack() + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/installMeter/index.json b/pages/workBenchNew/components/installMeter/index.json new file mode 100644 index 0000000..e28e099 --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.json @@ -0,0 +1,12 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-popup": "@vant/weapp/popup/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "van-image": "@vant/weapp/image/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/installMeter/index.wxml b/pages/workBenchNew/components/installMeter/index.wxml new file mode 100644 index 0000000..1390b99 --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.wxml @@ -0,0 +1,181 @@ + + + + + + {{time}} + + + + + + + + + + + + + + + + + + + + + + + + + 上传 + + 清除 + + + + + + + + 提交 + 返回 + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/installMeter/index.wxss b/pages/workBenchNew/components/installMeter/index.wxss new file mode 100644 index 0000000..9af2e92 --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.wxss @@ -0,0 +1,15 @@ +/* pages/workBenchNew/components/createMeter/index.wxss */ + +.operate { + display: flex; + padding-top: 24rpx; + padding-bottom: 36rpx; +} + +.submit, .cancel { + flex: 1; +} + +.submit { + margin-right: 30rpx; +} \ No newline at end of file diff --git a/pages/workBenchNew/components/operateButton/index.js b/pages/workBenchNew/components/operateButton/index.js new file mode 100644 index 0000000..8ad1d7e --- /dev/null +++ b/pages/workBenchNew/components/operateButton/index.js @@ -0,0 +1,27 @@ +// pages/workBenchNew/components/operateButton/index.js +Component({ + + /** + * 组件的属性列表 + */ + properties: { + text: String, + style: String, + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + handleClick() { + this.triggerEvent("click") + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/operateButton/index.json b/pages/workBenchNew/components/operateButton/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/pages/workBenchNew/components/operateButton/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/workBenchNew/components/operateButton/index.wxml b/pages/workBenchNew/components/operateButton/index.wxml new file mode 100644 index 0000000..e58adc9 --- /dev/null +++ b/pages/workBenchNew/components/operateButton/index.wxml @@ -0,0 +1,2 @@ + + {{ text }} \ No newline at end of file diff --git a/pages/workBenchNew/components/operateButton/index.wxss b/pages/workBenchNew/components/operateButton/index.wxss new file mode 100644 index 0000000..9691159 --- /dev/null +++ b/pages/workBenchNew/components/operateButton/index.wxss @@ -0,0 +1,12 @@ +/* pages/workBenchNew/components/operateButton/index.wxss */ + +.buttonWrapper { + height: 100rpx; + display: flex; + justify-content: center; + align-items: center; + border: 1rpx solid #ccc; + border-radius: 10rpx; + margin-bottom: 24rpx; + margin-top: 24rpx; +} \ No newline at end of file diff --git a/pages/workBenchNew/components/recharge/index.js b/pages/workBenchNew/components/recharge/index.js new file mode 100644 index 0000000..6c39e8e --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.js @@ -0,0 +1,192 @@ +// pages/workBenchNew/components/recharge/index.js +import { handleRecharge } from "../../../../service/recharge"; +import { alertInfo, alertSuccess, loadingFunc } from "../../../../utils/index"; +import request from '../../../../utils/request' +const { OK } = request; +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + onParkFocus() { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onMeterFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onConfirm(e) { + const { data, type, way } = e.detail; + switch(type) { + case "park": + this.setData({ + parkName: data.name, + park: data.id, + }) + break; + case "meter": + this.setData({ + meterName: `${data.meterNo}-${data.address}${data.tenement?.name ? '-' + data.tenement?.name : ''}`, + meter: data.id, + }) + break; + case "pay": + this.setData({ + payName: data, + way: way, + }); + break; + } + this.onCancel(); + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + onPayFocus() { + this.setData({ + show: true, + title: "付款方式", + type: 'pay' + }) + }, + onChangeMoney(e) { + this.setData({ money: e.detail }) + }, + onChangeVoucherNo(e) { + this.setData({ voucherNo: e.detail }) + }, + handleClear() { + this.setData({ + park: "", + parkName: "", + meter: "", + meterName: "", + way: "", + payName: "", + show: false, + title: "", + type: "", + money: null, + voucherNo: null + }) + }, + async handleSubmit() { + const that = this; + const { park, meter, money, way, voucherNo } = this.data; + if (!park) { + alertInfo("请选择园区"); + return; + } + if (!meter) { + alertInfo("请选择电表") + return; + } + if (!money) { + alertInfo("请输入金额") + return + } + if (!way && way !== 0) { + alertInfo("请选择付款方式") + return + } + if (!voucherNo) { + alertInfo("请输入凭证号") + return + } + loadingFunc(async () => { + const { code, message } = await handleRecharge(park, { + amount: `${money || ''}`, + meter, + paymentType: way, + voucherNo, + type: 0 + }) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("充值成功") + setTimeout(() => { + that.handleClear() + that.setData({ + + }) + }, 500) + }) + + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/recharge/index.json b/pages/workBenchNew/components/recharge/index.json new file mode 100644 index 0000000..4e12d5e --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.json @@ -0,0 +1,11 @@ +{ + "usingComponents": { + "van-popup": "@vant/weapp/popup/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "navigator": "/components/navigator" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/recharge/index.wxml b/pages/workBenchNew/components/recharge/index.wxml new file mode 100644 index 0000000..868329b --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.wxml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + 确认 + 清空 + + \ No newline at end of file diff --git a/pages/workBenchNew/components/recharge/index.wxss b/pages/workBenchNew/components/recharge/index.wxss new file mode 100644 index 0000000..b1ed3a3 --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.wxss @@ -0,0 +1 @@ +/* pages/workBenchNew/components/recharge/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.js b/pages/workBenchNew/components/uninstallMeter/index.js new file mode 100644 index 0000000..0ae2e6a --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.js @@ -0,0 +1,173 @@ +// pages/workBenchNew/components/uninstallMeter/index.js +import dayjs from "../../../../utils/dayjs" +import { alertInfo, } from "../../../../utils/index" +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onConfirm(e) { + const { type, data = {} } = e.detail; + const {collection} = this.data; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + }) + break; + case "building": + this.setData({ + building: data.id, + buildingName: data.name, + }); + break; + case "meterBox": + this.setData({ + meterBox: data.id, + meterBoxName: data.address, + }); + break; + case "meterType": + this.setData({ + meterType: data.way, + meterTypeName: data, + }); + break; + case "meter": + this.setData({ + meter: data.id, + meterName: data.address, + }); + break; + case "card": + this.setData({ + card: data.id, + cardName: data.sim_number, + }); + break; + case "collection": + let newData = {} + if (collection === "A") { + newData = { + collectionA: data.id, + collectionAName: data.name, + } + } + if (collection === "B") { + newData = { + collectionB: data.id, + collectionBName: data.name, + } + } + if (collection === "C") { + newData = { + collectionC: data.id, + collectionCName: data.name, + } + } + this.setData(newData); + break; + } + this.onCancel(); + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + goback() { + wx.navigateBack() + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.setData({ + time: dayjs().format("YYYY-MM-DD HH:mm:ss") + }) + }, + changeReason(e) { + this.setData({ + reason: e.detail, + }) + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.json b/pages/workBenchNew/components/uninstallMeter/index.json new file mode 100644 index 0000000..a676309 --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.json @@ -0,0 +1,11 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-popup": "@vant/weapp/popup/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.wxml b/pages/workBenchNew/components/uninstallMeter/index.wxml new file mode 100644 index 0000000..8941895 --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.wxml @@ -0,0 +1,75 @@ + + + + + + {{time}} + + + + + + + 上传 + + + + 提交 + 返回 + + + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.wxss b/pages/workBenchNew/components/uninstallMeter/index.wxss new file mode 100644 index 0000000..7d468e2 --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.wxss @@ -0,0 +1,15 @@ +/* pages/workBenchNew/components/uninstallMeter/index.wxss */ + +.operate { + display: flex; + padding-top: 24rpx; + padding-bottom: 36rpx; +} + +.submit, .cancel { + flex: 1; +} + +.submit { + margin-right: 30rpx; +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/index.wxml b/pages/workBenchNew/components/workBenchApprove/index.wxml index 1339053..66420fb 100644 --- a/pages/workBenchNew/components/workBenchApprove/index.wxml +++ b/pages/workBenchNew/components/workBenchApprove/index.wxml @@ -1,17 +1,14 @@ - + - + 待审核 - + 已审核 - - 充值 - diff --git a/pages/workBenchNew/index.js b/pages/workBenchNew/index.js index a5333ab..12c5b47 100644 --- a/pages/workBenchNew/index.js +++ b/pages/workBenchNew/index.js @@ -61,6 +61,21 @@ Page({ url: '/pages/home/index', }) }, + jumpToRecharge() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/recharge/index', + }) + }, + jumpToInstallMeter() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/installMeter/index', + }) + }, + jumpToUninstallMeter() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/uninstallMeter/index', + }) + }, /** * 生命周期函数--监听页面初次渲染完成 */ diff --git a/pages/workBenchNew/index.json b/pages/workBenchNew/index.json index de4f579..abce341 100644 --- a/pages/workBenchNew/index.json +++ b/pages/workBenchNew/index.json @@ -3,7 +3,8 @@ "navigator": "/components/navigator/index", "van-row": "@vant/weapp/row/index", "van-col": "@vant/weapp/col/index", - "van-button": "@vant/weapp/button/index" + "van-button": "@vant/weapp/button/index", + "operate-button": "./components/operateButton/index" }, "navigationStyle": "custom" } \ No newline at end of file diff --git a/pages/workBenchNew/index.wxml b/pages/workBenchNew/index.wxml index 3bc02fb..8b8c62a 100644 --- a/pages/workBenchNew/index.wxml +++ b/pages/workBenchNew/index.wxml @@ -2,7 +2,7 @@ - + + + 通用操作 + + + + + + + + + + + + + + + + + + + + + + + 现场操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 回到首页 diff --git a/pages/workBenchNew/index.wxss b/pages/workBenchNew/index.wxss index 421c238..c220f08 100644 --- a/pages/workBenchNew/index.wxss +++ b/pages/workBenchNew/index.wxss @@ -1,7 +1,7 @@ /* pages/workBench/index.wxss */ .wrapper { - margin: 20rpx 0rpx; + margin:20rpx 0rpx; } .contentWrapper { diff --git a/pages/workBenchTodoList/index.js b/pages/workBenchTodoList/index.js new file mode 100644 index 0000000..4b9ffea --- /dev/null +++ b/pages/workBenchTodoList/index.js @@ -0,0 +1,66 @@ +// pages/workBenchTodoList/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchTodoList/index.json b/pages/workBenchTodoList/index.json new file mode 100644 index 0000000..aff1cbd --- /dev/null +++ b/pages/workBenchTodoList/index.json @@ -0,0 +1,13 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-popup": "@vant/weapp/popup/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchTodoList/index.wxml b/pages/workBenchTodoList/index.wxml new file mode 100644 index 0000000..8603edb --- /dev/null +++ b/pages/workBenchTodoList/index.wxml @@ -0,0 +1,12 @@ + + + + + + 1 + + + 2 + + + \ No newline at end of file diff --git a/pages/workBenchTodoList/index.wxss b/pages/workBenchTodoList/index.wxss new file mode 100644 index 0000000..f05fa3a --- /dev/null +++ b/pages/workBenchTodoList/index.wxss @@ -0,0 +1 @@ +/* pages/workBenchTodoList/index.wxss */ \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json index 424d3b1..422eecd 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -24,22 +24,15 @@ "miniprogram": { "list": [ { - "name": "pages/readingHistory/index", - "pathName": "pages/readingHistory/index", - "query": "meter=METER00114674412879874&park=P00114672412196865&routeId=PR00121172392214529&disabled=false", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/workBenchNew/components/workBenchTenement/index", - "pathName": "pages/workBenchNew/components/workBenchTenement/index", + "name": "pages/workBenchTodoList/index", + "pathName": "pages/workBenchTodoList/index", "query": "", "launchMode": "default", "scene": null }, { - "name": "pages/workBenchNew/components/workBenchReading/index", - "pathName": "pages/workBenchNew/components/workBenchReading/index", + "name": "pages/workBenchNew/components/uninstallMeter/index", + "pathName": "pages/workBenchNew/components/uninstallMeter/index", "query": "", "launchMode": "default", "scene": null @@ -50,76 +43,6 @@ "query": "", "launchMode": "default", "scene": null - }, - { - "name": "pages/writeReading/index", - "pathName": "pages/writeReading/index", - "query": "id=PR00118027286020097", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/readingHistory/index", - "pathName": "pages/readingHistory/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "childPackage/pages/electricQuery/index", - "pathName": "childPackage/pages/electricQuery/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "childPackage/pages/electricQuery/index", - "pathName": "childPackage/pages/electricQuery/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "childPackage/pages/electricQuery/index", - "pathName": "childPackage/pages/electricQuery/index", - "query": "", - "launchMode": "default", - "scene": null - }, - { - "name": "childPackage/pages/electricQuery/index", - "pathName": "childPackage/pages/electricQuery/index", - "query": "", - "launchMode": "default", - "scene": null } ] } diff --git a/service/meter.js b/service/meter.js index eb864da..a610bcd 100644 --- a/service/meter.js +++ b/service/meter.js @@ -40,4 +40,31 @@ export const handleOperateMeterSwitch = async function({ ids = [], status }) { // 绑定时获取电表的最新信息 export const getWorkMeterDetail = async function(code = '') { return await GET(`/vx/getWorkMeterDetail?code=${code}`); +} + +// 获取某一园区下的电表箱列表 +export const getParkBoxList = async function({park = "", keyword = "", page = 1}) { + return await GET(`/box/${park}?page=${page}&keyword=${replaceSpecialIcon(keyword)}`); +} + +// 获取卡列表 +export const getCardList = async function({park = "", keyword = "", page = 1}) { + return await GET(`/equipment/getCardList?page=${page}&park=${park}&keyword=${replaceSpecialIcon(keyword)}`); +} + + +// 获取互感器列表 +export const getCollectionList = async function({park = "", keyword = "", page = 1}) { + return await GET(`/transformer/list/select?page=${page}&park=${park}&transformerId=${replaceSpecialIcon(keyword)}`); +} + + +// 获取库存电表列表 +export const getInventoryMeter = async function({park = "", keyword = "", page = 1}) { + return await GET(`/electricity/list?page=${page}&park=${park}&keyword=${replaceSpecialIcon(keyword)}`); +} + +// 新装电表 +export const installMeter = async function(data) { + return await POST(`/wx/workBench/installMeter`, data); } \ No newline at end of file diff --git a/service/public.js b/service/public.js index 4b9d431..9a40ece 100644 --- a/service/public.js +++ b/service/public.js @@ -43,6 +43,26 @@ export const uploadOcrFile = (filePath) => { }) } +export const uploadInstallMeter = (filePath) => { + const { api } = getConfigByEnv(); + return new Promise((resolve, reject) => { + wx.uploadFile({ + filePath: filePath, + name: 'data', + url: `${api}/image/meter/reading`, + header: { + authorization: 'Bearer ' + wx.getStorageSync("token") + }, + success: (res) => { + resolve(res?.data ? JSON.parse(res?.data) : res?.data); + }, + fail: (err) => { + reject(err); + } + }) + }) +} + export const uploadPublicFile = (filePath) => { const { api } = getConfigByEnv(); return new Promise((resolve, reject) => { diff --git a/utils/data.js b/utils/data.js index 22c17b0..2156c41 100644 --- a/utils/data.js +++ b/utils/data.js @@ -9,4 +9,6 @@ export const getRechargeOperateWay = (num) => { return payWays[num]; } -export const feeType = ['华昌宝能收费', "物业代收1", "物业代收2", "物业代收线损"] \ No newline at end of file +export const feeType = ['华昌宝能收费', "物业代收1", "物业代收2", "物业代收线损"] + +export const meterType = ['商户电表', '园区电表', '公摊电表'] \ No newline at end of file From 750f2d8d39360476170f057bfdf70d4d2c98191d Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Tue, 4 Nov 2025 15:24:33 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A3=85=E8=A1=A8?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=9A=84=E6=97=B6=E5=80=99=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E4=BA=92=E6=84=9F=E5=99=A8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/searchSelect/index.js | 3 ++- components/searchSelectWrapper/index.wxml | 6 +++--- pages/workBenchNew/components/installMeter/index.js | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index 65f64df..c30dd46 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -156,8 +156,9 @@ Component({ alertInfo(message) return } + console.log("parks", parks) this.setData({ - columns: parks?.map(item => item?.name), + columns: parks?.map(item => `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`), list: parks, }) }, diff --git a/components/searchSelectWrapper/index.wxml b/components/searchSelectWrapper/index.wxml index 94888c1..cfcece7 100644 --- a/components/searchSelectWrapper/index.wxml +++ b/components/searchSelectWrapper/index.wxml @@ -8,7 +8,7 @@ - {{ label }} + *{{ label }} 搜索 - {{ label }} + *{{ label }} - {{ label }} + *{{ label }} diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js index 48fc9e5..8118ae9 100644 --- a/pages/workBenchNew/components/installMeter/index.js +++ b/pages/workBenchNew/components/installMeter/index.js @@ -237,19 +237,19 @@ Page({ if (collection === "A") { newData = { collectionA: data.id, - collectionAName: data.name, + collectionAName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, } } if (collection === "B") { newData = { collectionB: data.id, - collectionBName: data.name, + collectionBName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, } } if (collection === "C") { newData = { collectionC: data.id, - collectionCName: data.name, + collectionCName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, } } this.setData(newData); @@ -323,7 +323,7 @@ Page({ ratio, area, card, collectionA, collectionB, collectionC, tenement, sharp, peak, flat, valley, overall, url } = this.data; - if (!park || !meter || !address) { + if (!park || !meter || !address || !meterType) { alertInfo("请填写必填项后保存") return; } From 5573c78b23f86fa4c3ef710aab65c60ef91c6468 Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Tue, 4 Nov 2025 16:00:47 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/installMeter/index.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js index 8118ae9..f53ca81 100644 --- a/pages/workBenchNew/components/installMeter/index.js +++ b/pages/workBenchNew/components/installMeter/index.js @@ -176,13 +176,25 @@ Page({ }, onConfirm(e) { const { type, data = {} } = e.detail; - const {collection} = this.data; + const {collection, park, tenement} = this.data; switch(type) { case "park": this.setData({ park: data.id, parkName: data.name, }) + if (park !== data.id) { + this.setData({ + tenement: null, + tenementName: null, + building: null, + buildingName: null, + meterBox: null, + meterBoxName: null, + meter: null, + meterName: null, + }) + } break; case "tenement": this.setData({ @@ -323,7 +335,7 @@ Page({ ratio, area, card, collectionA, collectionB, collectionC, tenement, sharp, peak, flat, valley, overall, url } = this.data; - if (!park || !meter || !address || !meterType) { + if (!park || !meter || !address || meterType == null) { alertInfo("请填写必填项后保存") return; } From c5a8bdfd8120625f7680698ede3875f8695be123 Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Tue, 4 Nov 2025 17:14:04 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E6=96=B0=E8=A3=85=E7=94=B5=E8=A1=A8?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/searchSelect/index.js | 4 +- .../components/installMeter/index.js | 60 +++++++++++++++---- .../components/installMeter/index.wxml | 17 ++++-- 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index c30dd46..88d9507 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -62,6 +62,7 @@ Component({ }, onConfirm(event) { const { index } = event.detail; + console.log("index", index) const { list = [], type } = this.data; const item = list[index]; if (!item) { @@ -73,7 +74,7 @@ Component({ list: [], searchText: "" }) - this.triggerEvent("confirm", { data: item, type } ); + this.triggerEvent("confirm", { data: item, type, index } ); }, onPayConfirm(event) { const { index } = event.detail; @@ -156,7 +157,6 @@ Component({ alertInfo(message) return } - console.log("parks", parks) this.setData({ columns: parks?.map(item => `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`), list: parks, diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js index f53ca81..8fa9355 100644 --- a/pages/workBenchNew/components/installMeter/index.js +++ b/pages/workBenchNew/components/installMeter/index.js @@ -174,14 +174,21 @@ Page({ } }) }, + changeSn(e) { + this.setData({ + sn: e.detail, + }) + }, onConfirm(e) { - const { type, data = {} } = e.detail; + console.log("e", e) + const { type, data = {}, way } = e.detail; const {collection, park, tenement} = this.data; switch(type) { case "park": this.setData({ park: data.id, parkName: data.name, + selfManagement: data.selfManagement, }) if (park !== data.id) { this.setData({ @@ -193,6 +200,20 @@ Page({ meterBoxName: null, meter: null, meterName: null, + card: null, + cardName: null, + collectionA: null, + collectionAName: null, + collectionB: null, + collectionBName: null, + collectionB: null, + collectionBName: null, + address: null, + sharp: null, + peak: null, + flat: null, + valley: null, + area: null, }) } break; @@ -228,7 +249,7 @@ Page({ break; case "meterType": this.setData({ - meterType: data.way, + meterType: way, meterTypeName: data, }); break; @@ -249,19 +270,22 @@ Page({ if (collection === "A") { newData = { collectionA: data.id, - collectionAName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, + collectionAName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionARatio: data.ratio, } } if (collection === "B") { newData = { collectionB: data.id, - collectionBName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, + collectionBName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionBRatio: data.ratio, } } if (collection === "C") { newData = { collectionC: data.id, - collectionCName: `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`, + collectionCName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionCRatio: data.ratio, } } this.setData(newData); @@ -291,7 +315,7 @@ Page({ }, changePeak(e) { this.setData({ - sharp: e.detail + peak: e.detail }) }, changeFlat(e) { @@ -333,17 +357,33 @@ Page({ const { park, meter, address, building, meterBox, meterType, ratio, area, card, collectionA, collectionB, collectionC, - tenement, sharp, peak, flat, valley, overall, url + tenement, sharp, peak, flat, valley, overall, url, sn, + collectionARatio, collectionBRatio, collectionCRatio } = this.data; - if (!park || !meter || !address || meterType == null) { + if (!park || !(meter || sn) || !address || meterType == null) { alertInfo("请填写必填项后保存") return; } - console.log("data", this.data) + if ( + (collectionA == collectionB && collectionA != null && collectionB != null) || + (collectionA == collectionC&& collectionA != null && collectionC != null) || + (collectionC == collectionB && collectionB != null && collectionC != null) + ) { + alertInfo("采集器不能重复选择") + return; + } + if ( + (collectionARatio != collectionBRatio && collectionARatio != null && collectionBRatio != null) || + (collectionARatio != collectionCRatio&& collectionARatio != null && collectionCRatio != null) || + (collectionCRatio != collectionBRatio && collectionBRatio != null && collectionCRatio != null) + ) { + alertInfo("采集器倍率不一致") + return; + } const { code, data, message } = await installMeter({ park, meter, address, building, meterBox, meterType, ratio, area, card, collectionA, collectionB, collectionC, - tenement, sharp, peak, flat, valley, overall, url + tenement, sharp, peak, flat, valley, overall, url, sn }) if (code !== OK) { alertInfo(message) diff --git a/pages/workBenchNew/components/installMeter/index.wxml b/pages/workBenchNew/components/installMeter/index.wxml index 1390b99..f01674a 100644 --- a/pages/workBenchNew/components/installMeter/index.wxml +++ b/pages/workBenchNew/components/installMeter/index.wxml @@ -25,8 +25,17 @@ text="{{meterName}}" bind:search="onMeterFocus" required="{{true}}" + wx:if="{{selfManagement === 0}}" +/> + - Date: Thu, 6 Nov 2025 16:15:34 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=96=B0=E8=A3=85=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 3 +- components/searchSelect/index.js | 2 +- .../components/installMeter/index.js | 12 +-- .../components/installMeter/index.wxml | 14 ++-- pages/workBenchNew/components/kaihu/index.js | 66 +++++++++++++++ .../workBenchNew/components/kaihu/index.json | 10 +++ .../workBenchNew/components/kaihu/index.wxml | 83 +++++++++++++++++++ .../workBenchNew/components/kaihu/index.wxss | 1 + pages/workBenchNew/index.js | 5 ++ pages/workBenchNew/index.wxml | 2 +- 10 files changed, 183 insertions(+), 15 deletions(-) create mode 100644 pages/workBenchNew/components/kaihu/index.js create mode 100644 pages/workBenchNew/components/kaihu/index.json create mode 100644 pages/workBenchNew/components/kaihu/index.wxml create mode 100644 pages/workBenchNew/components/kaihu/index.wxss diff --git a/app.json b/app.json index 3d9a873..ffe9845 100644 --- a/app.json +++ b/app.json @@ -46,7 +46,8 @@ "pages/workBenchNew/components/recharge/index", "pages/workBenchNew/components/installMeter/index", "pages/workBenchNew/components/uninstallMeter/index", - "pages/workBenchTodoList/index" + "pages/workBenchTodoList/index", + "pages/workBenchNew/components/kaihu/index" ], "subPackages": [ { diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index 88d9507..3cadbc3 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -152,7 +152,7 @@ Component({ }, async onSearchCollection() { const { searchText = "" } = this.data; - const { code, message, data: parks = [] } = await getCollectionList({keyword: searchText, page: 1}); + const { code, message, data: parks = [] } = await getCollectionList({keyword: searchText, page: 1, status: 1}); if (code !== OK) { alertInfo(message) return diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js index 8fa9355..72b9ae9 100644 --- a/pages/workBenchNew/components/installMeter/index.js +++ b/pages/workBenchNew/components/installMeter/index.js @@ -113,7 +113,7 @@ Page({ } this.setData({ show: true, - title: "采集器A", + title: "互感器A", type: 'collection', collection: "A" }) @@ -126,7 +126,7 @@ Page({ } this.setData({ show: true, - title: "采集器B", + title: "互感器B", type: 'collection', collection: "B" }) @@ -139,7 +139,7 @@ Page({ } this.setData({ show: true, - title: "采集器C", + title: "互感器C", type: 'collection', collection: "C" }) @@ -360,7 +360,7 @@ Page({ tenement, sharp, peak, flat, valley, overall, url, sn, collectionARatio, collectionBRatio, collectionCRatio } = this.data; - if (!park || !(meter || sn) || !address || meterType == null) { + if (!park || !(meter || sn) || !address || meterType == null || !building || !meterBox) { alertInfo("请填写必填项后保存") return; } @@ -369,7 +369,7 @@ Page({ (collectionA == collectionC&& collectionA != null && collectionC != null) || (collectionC == collectionB && collectionB != null && collectionC != null) ) { - alertInfo("采集器不能重复选择") + alertInfo("互感器不能重复选择") return; } if ( @@ -377,7 +377,7 @@ Page({ (collectionARatio != collectionCRatio&& collectionARatio != null && collectionCRatio != null) || (collectionCRatio != collectionBRatio && collectionBRatio != null && collectionCRatio != null) ) { - alertInfo("采集器倍率不一致") + alertInfo("互感器倍率不一致") return; } const { code, data, message } = await installMeter({ diff --git a/pages/workBenchNew/components/installMeter/index.wxml b/pages/workBenchNew/components/installMeter/index.wxml index f01674a..39fc91d 100644 --- a/pages/workBenchNew/components/installMeter/index.wxml +++ b/pages/workBenchNew/components/installMeter/index.wxml @@ -41,6 +41,7 @@ placeholder="请选择建筑" text="{{buildingName}}" bind:search="onBuildingFocus" + required="{{true}}" /> diff --git a/pages/workBenchNew/components/kaihu/index.js b/pages/workBenchNew/components/kaihu/index.js new file mode 100644 index 0000000..6c01e64 --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.js @@ -0,0 +1,66 @@ +// pages/workBenchNew/components/kaihu/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/kaihu/index.json b/pages/workBenchNew/components/kaihu/index.json new file mode 100644 index 0000000..b46458f --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.json @@ -0,0 +1,10 @@ +{ + "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" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/kaihu/index.wxml b/pages/workBenchNew/components/kaihu/index.wxml new file mode 100644 index 0000000..71f2ddd --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.wxml @@ -0,0 +1,83 @@ + + + + + + + + + + + 选择 + + + + + 选择 + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/kaihu/index.wxss b/pages/workBenchNew/components/kaihu/index.wxss new file mode 100644 index 0000000..a604f74 --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.wxss @@ -0,0 +1 @@ +/* pages/workBenchNew/components/kaihu/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/index.js b/pages/workBenchNew/index.js index 12c5b47..aa4fd6b 100644 --- a/pages/workBenchNew/index.js +++ b/pages/workBenchNew/index.js @@ -76,6 +76,11 @@ Page({ url: '/pages/workBenchNew/components/uninstallMeter/index', }) }, + jumpToKaihu() { + wx.navigateTo({ + url: 'pages/workBenchNew/components/kaihu/index', + }) + }, /** * 生命周期函数--监听页面初次渲染完成 */ diff --git a/pages/workBenchNew/index.wxml b/pages/workBenchNew/index.wxml index 8b8c62a..e237b49 100644 --- a/pages/workBenchNew/index.wxml +++ b/pages/workBenchNew/index.wxml @@ -111,7 +111,7 @@ - + From 639f92540f1c88cba7f71883f5079269ef829821 Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Sun, 9 Nov 2025 17:33:32 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 4 +- components/searchSelect/index.js | 44 ++- components/searchSelect/index.wxml | 30 ++ components/searchSelectWrapper/index.wxml | 1 + components/searchSelectWrapper/index.wxss | 5 +- pages/workBenchNew/components/kaihu/index.js | 85 +++++- .../workBenchNew/components/kaihu/index.wxml | 30 +- .../components/uninstallMeter/index.js | 61 +++- .../components/uninstallMeter/index.wxml | 12 +- .../components/workBenchMeterControl/index.js | 276 ++++++++++++++++++ .../workBenchMeterControl/index.json | 20 ++ .../workBenchMeterControl/index.wxml | 163 +++++++++++ .../workBenchMeterControl/index.wxss | 78 +++++ .../components/workBenchTenement/index.js | 12 +- pages/workBenchNew/index.js | 12 +- pages/workBenchNew/index.wxml | 7 +- pages/workBenchTodoList/index.js | 164 ++++++++++- pages/workBenchTodoList/index.json | 12 +- pages/workBenchTodoList/index.wxml | 105 ++++++- pages/workBenchTodoList/index.wxss | 72 ++++- pages/workOrderDetail/index.js | 66 +++++ pages/workOrderDetail/index.json | 3 + pages/workOrderDetail/index.wxml | 2 + pages/workOrderDetail/index.wxss | 1 + service/meter.js | 5 + service/workBench.js | 7 + utils/data.js | 7 +- 27 files changed, 1257 insertions(+), 27 deletions(-) create mode 100644 pages/workBenchNew/components/workBenchMeterControl/index.js create mode 100644 pages/workBenchNew/components/workBenchMeterControl/index.json create mode 100644 pages/workBenchNew/components/workBenchMeterControl/index.wxml create mode 100644 pages/workBenchNew/components/workBenchMeterControl/index.wxss create mode 100644 pages/workOrderDetail/index.js create mode 100644 pages/workOrderDetail/index.json create mode 100644 pages/workOrderDetail/index.wxml create mode 100644 pages/workOrderDetail/index.wxss diff --git a/app.json b/app.json index ffe9845..09a5502 100644 --- a/app.json +++ b/app.json @@ -39,6 +39,7 @@ "pages/billMeterDetail/index", "pages/meterBalanceRecord/index", "pages/workBenchNew/components/workBenchMeter/index", + "pages/workBenchNew/components/workBenchMeterControl/index", "pages/workBenchNew/components/workBenchTenement/index", "pages/workBenchNew/components/workBenchApprove/index", "pages/workBenchNew/components/workBenchWxUser/index", @@ -47,7 +48,8 @@ "pages/workBenchNew/components/installMeter/index", "pages/workBenchNew/components/uninstallMeter/index", "pages/workBenchTodoList/index", - "pages/workBenchNew/components/kaihu/index" + "pages/workBenchNew/components/kaihu/index", + "pages/workOrderDetail/index" ], "subPackages": [ { diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index 3cadbc3..5702dcf 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -2,7 +2,9 @@ import { getLoginParkList, getParkBuildingList } from "../../service/park" import { getParkSimpleMeterList, getParkBoxList, getCardList, getCollectionList, getInventoryMeter } from "../../service/meter" import { alertInfo } from "../../utils/index"; import request from "../../utils/request" -import { payWays, feeType, meterType } from "../../utils/data"; +import { payWays, feeType, meterType, noticeFlowType, noticeFlowStatus, + meterMode +} from "../../utils/data"; import { getTenementList, getWxTenementList } from "../../service/tenement"; const { OK } = request; @@ -23,6 +25,7 @@ Component({ observers: { "show,type,filterBind": function(newShow, newType) { if (newShow && newType) { + console.log("newShow", newShow,"newType", newType) this.onSearch() } } @@ -35,7 +38,10 @@ Component({ searchText: "", payWays, feeType, - meterType + meterType, + noticeFlowType, + noticeFlowStatus, + meterMode, }, lifetimes: { attached() { @@ -76,6 +82,17 @@ Component({ }) this.triggerEvent("confirm", { data: item, type, index } ); }, + onMeterModeConfirm(event) { + const { index } = event.detail; + const { meterMode = [], type } = this.data; + const item = meterMode[index]; + this.setData({ + columns: [], + list: [], + searchText: "" + }) + this.triggerEvent("confirm", { data: item, way: index, type } ); + }, onPayConfirm(event) { const { index } = event.detail; const { payWays = [], type } = this.data; @@ -87,6 +104,29 @@ Component({ }) this.triggerEvent("confirm", { data: item, way: index, type } ); }, + onNoticeFlowTypeConfirm(event) { + const { index } = event.detail; + const { noticeFlowType = [], type } = this.data; + const item = noticeFlowType[index]; + this.setData({ + columns: [], + list: [], + searchText: "" + }) + this.triggerEvent("confirm", { data: item, way: index + 1, type } ); + }, + onNoticeFlowStatusConfirm(event) { + const { index } = event.detail; + const { noticeFlowStatus = [], type } = this.data; + const item = noticeFlowStatus[index]; + this.setData({ + columns: [], + list: [], + searchText: "" + }) + console.log("{ data: item, way: index + 1, type }", { data: item, way: index + 1, type }) + this.triggerEvent("confirm", { data: item, way: index + 1, type } ); + }, onFeeTypeConfirm(event) { const { index } = event.detail; const { feeType = [], type } = this.data; diff --git a/components/searchSelect/index.wxml b/components/searchSelect/index.wxml index 55957fe..bfef00f 100644 --- a/components/searchSelect/index.wxml +++ b/components/searchSelect/index.wxml @@ -36,6 +36,36 @@ bind:confirm="onMeterTypeConfirm" /> + + + + + + + + + {{placeholder}} {{text}} + diff --git a/components/searchSelectWrapper/index.wxss b/components/searchSelectWrapper/index.wxss index 523629c..eafae3e 100644 --- a/components/searchSelectWrapper/index.wxss +++ b/components/searchSelectWrapper/index.wxss @@ -15,6 +15,7 @@ border-radius: 12rpx; border: 1rpx solid #ccc; background-color: #fff; + position: relative; } .inputContent { @@ -26,6 +27,7 @@ border-radius: 12rpx; border: 1rpx solid #ccc; background-color: #fff; + position: relative; } .text { @@ -39,4 +41,5 @@ .required { color: rgb(209, 83, 25); font-size: 30rpx; -} \ No newline at end of file +} + diff --git a/pages/workBenchNew/components/kaihu/index.js b/pages/workBenchNew/components/kaihu/index.js index 6c01e64..264a79b 100644 --- a/pages/workBenchNew/components/kaihu/index.js +++ b/pages/workBenchNew/components/kaihu/index.js @@ -1,4 +1,9 @@ // pages/workBenchNew/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; Page({ /** @@ -7,7 +12,85 @@ Page({ data: { }, - + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onBuildingFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "建筑", + type: 'building' + }) + }, + onChange(e) { + const { name } = e.currentTarget.dataset; + this.setData({ + [name]: e.detail + }) + }, + onFeeTypeFocus() { + this.setData({ + show: true, + title: "收费类型", + type: 'feeType' + }) + }, + onCancel() { + this.setData({ show: false }) + }, + async onSubmit() { + const { name, shortName, address, contact, + phone, building, feeType, park, editType, id, parkName, + + } = this.data; + const { code, message } = await createBackTenement(park, { name, shortName, address, contact, phone, building, feeType }) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("开户成功") + // wx.navigateBack() + wx.redirectTo({ + url: `/pages/workBenchNew/components/workBenchTenement/index?park=${park}&parkName=${parkName}&name=${name}`, + }) + }, + handleBack() { + wx.navigateBack() + }, + onConfirm(e) { + const { type, data, way } = e.detail; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + show: false, + }) + return; + case "building": + this.setData({ + building: data.id, + buildingName: data.name, + show: false, + }) + return; + case "feeType": + this.setData({ + feeTypeName: data, + feeType: way, + show: false, + }) + } + }, /** * 生命周期函数--监听页面加载 */ diff --git a/pages/workBenchNew/components/kaihu/index.wxml b/pages/workBenchNew/components/kaihu/index.wxml index 71f2ddd..ff351a5 100644 --- a/pages/workBenchNew/components/kaihu/index.wxml +++ b/pages/workBenchNew/components/kaihu/index.wxml @@ -1,6 +1,19 @@ + + + 选择 + + - \ No newline at end of file + + + + 保存 + 返回 + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.js b/pages/workBenchNew/components/uninstallMeter/index.js index 0ae2e6a..f785687 100644 --- a/pages/workBenchNew/components/uninstallMeter/index.js +++ b/pages/workBenchNew/components/uninstallMeter/index.js @@ -1,6 +1,11 @@ // pages/workBenchNew/components/uninstallMeter/index.js +import { uninstallMeter } from "../../../../service/meter"; import dayjs from "../../../../utils/dayjs" -import { alertInfo, } from "../../../../utils/index" +import request from "../../../../utils/request" +import { alertInfo, alertSuccess, } from "../../../../utils/index" + +const { OK } = request; + Page({ /** @@ -66,6 +71,7 @@ Page({ this.setData({ meter: data.id, meterName: data.address, + meterInfo: data, }); break; case "card": @@ -106,6 +112,59 @@ Page({ type: "", }) }, + async onSubmit() { + const { meter, } = this.data; + if (!meter) { + alertInfo("请选择表号") + return; + } + const { code, message } = await uninstallMeter(meter) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("拆除成功") + setTimeout(() => { + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', + }) + }, 300) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(res) { + console.log("res", res) + const path = res.tempFiles?.[0]?.tempFilePath.toLowerCase() + if (!/(\.jpg|\.png|\.jpeg)$/.test(path)) { + wx.showToast({ + title: '请上传jpg、png或jpeg格式的图片', + icon: 'none', + }); + return; + } + var tempFilePaths = path; + loadingFunc(async () => { + const { code, message, url } = await uploadInstallMeter(tempFilePaths) + if (code !== OK) { + alertError(message) + return + } + that.setData({ + url: url + }) + }) + } + }) + }, + clearImage() { + this.setData({ + url: "" + }) + }, goback() { wx.navigateBack() }, diff --git a/pages/workBenchNew/components/uninstallMeter/index.wxml b/pages/workBenchNew/components/uninstallMeter/index.wxml index 8941895..91330e9 100644 --- a/pages/workBenchNew/components/uninstallMeter/index.wxml +++ b/pages/workBenchNew/components/uninstallMeter/index.wxml @@ -39,11 +39,19 @@ type="" hideBorder="{{true}}" > - 上传 + + + 上传 + + 清除 + + + + - 提交 + 提交 返回 diff --git a/pages/workBenchNew/components/workBenchMeterControl/index.js b/pages/workBenchNew/components/workBenchMeterControl/index.js new file mode 100644 index 0000000..a148276 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.js @@ -0,0 +1,276 @@ +// pages/workBenchNew/components/workBenchMeter/index.js + +import { alertInfo, alertSuccess, loadingFunc } from "../../../../utils/index"; +import { getParkMeterList, handleOperateMeterSwitch } from "../../../../service/meter" +import request from "../../../../utils/request" +const { OK } = request + +Page({ + + /** + * 页面的初始数据 + */ + data: { + keyword: "", + keywordTemp: "", + page: 1, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onModeFocus(e) { + this.setData({ + show: true, + title: "强控类型", + type: 'meterMode' + }) + }, + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onConfirm(e) { + const { data, type, way } = e.detail; + const that = this; + switch(type) { + case "park": + this.setData({ + parkName: data.name, + park: data.id, + }) + break; + case "meterMode": + this.setData({ + modeName: data, + mode: way, + }) + break; + case "meter": + this.setData({ + meterName: data.address, + meter: data.id, + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + break; + } + + this.onCancel(); + }, + onChangeKeyword(e) { + this.setData({ keywordTemp: e.detail }) + }, + changeDays(e) { + this.setData({ + days: e.detail, + }) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(res) { + console.log("res", res) + const path = res.tempFiles?.[0]?.tempFilePath.toLowerCase() + if (!/(\.jpg|\.png|\.jpeg)$/.test(path)) { + wx.showToast({ + title: '请上传jpg、png或jpeg格式的图片', + icon: 'none', + }); + return; + } + var tempFilePaths = path; + loadingFunc(async () => { + const { code, message, url } = await uploadInstallMeter(tempFilePaths) + if (code !== OK) { + alertError(message) + return + } + that.setData({ + url: url + }) + }) + } + }) + }, + clearImage() { + this.setData({ + url: "" + }) + }, + changeReason(e) { + this.setData({ + reason: e.detail, + }) + }, + onSearch() { + const that = this; + that.setData({ + keyword: that.data.keywordTemp + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + }, + async init() { + const { page, park, meter } = this.data; + if (!park) { + return; + } + const { code, message, data, total } = await getParkMeterList({ park, keyword: meter, page }) + if (code !== OK) { + alertInfo(message); + return; + } + this.setData({ + list: data, + total: total, + totalPage: Math.ceil(total / 20) + }) + }, + async onChangePage(e) { + const page = e.detail.currentIndex; + const that = this; + this.setData({ + page + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + onChangeSelectMeter(e) { + this.setData({ + meter: e.detail + }) + }, + async handleMeterSwitchOn() { + const that = this; + const { meter, meterName } = this.data; + wx.showModal({ + title: '提示', + content: `您确认要对${meterName || 当前电表}进行合闸吗?`, + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + loadingFunc(async () => { + const { code, message } = await handleOperateMeterSwitch({ ids: [meter], status: 0 }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("合闸成功") + that.init(); + }) + + } + } + }) + }, + async handleMeterSwitchOff() { + const that = this; + const { meter, meterName } = this.data; + wx.showModal({ + title: '提示', + content: `您确认要对${meterName || 当前电表}进行拉闸吗?`, + complete: async (res) => { + if (res.cancel) { + return; + } + if (res.confirm) { + loadingFunc(async () => { + const { code, message } = await handleOperateMeterSwitch({ ids: [meter], status: 1 }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("拉闸成功") + that.init(); + }) + } + } + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchMeterControl/index.json b/pages/workBenchNew/components/workBenchMeterControl/index.json new file mode 100644 index 0000000..cf25777 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.json @@ -0,0 +1,20 @@ +{ + "usingComponents": { + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "search-select": "/components/searchSelect/index", + "van-empty": "@vant/weapp/empty/index", + "table": "/components/table/table", + "pagination": "/components/pagination/index", + "empty": "/components/empty/index", + "van-radio": "@vant/weapp/radio/index", + "van-radio-group": "@vant/weapp/radio-group/index", + "van-tag": "@vant/weapp/tag/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/index", + "navigator": "/components/navigator/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "van-popup": "@vant/weapp/popup/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchMeterControl/index.wxml b/pages/workBenchNew/components/workBenchMeterControl/index.wxml new file mode 100644 index 0000000..97a2091 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.wxml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + {{item.tenement.shortName}} + + {{item.tenement.name}} + + + + + + + + + 商户电表 + + 公摊电表 + + 园区电表 + 表号:{{item.meterNo}} + + + + + + + + {{item.address}} + + SN:{{item.meterSn}} + + + + + + + + 表字:{{item.amount}} + + 余额:{{item.money}} + + + + + + + + 合闸 + 拉闸 + + + + 在线 + 预付费 + 强控 + 临时强控 + + + + + 失联 + 预付费 + 强控 + 临时强控 + + + + + + + + + + + + + + + + + 上传 + + 清除 + + + + + + + + 提交 + 返回 + + + + + + + + diff --git a/pages/workBenchNew/components/workBenchMeterControl/index.wxss b/pages/workBenchNew/components/workBenchMeterControl/index.wxss new file mode 100644 index 0000000..d259093 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.wxss @@ -0,0 +1,78 @@ +/* pages/workBench/components/record/index.wxss */ +.table { + width: 890rpx; + +} + +.classWrapper { + width: 100vw; + overflow-x: auto; +} + +.thead { + display: flex; + flex-wrap: nowrap; + border-bottom: 1rpx solid #EEEEEE; +} + +.thead .th { + padding: 20rpx; + white-space: nowrap; + text-align: center; + box-sizing: border-box; + +} + +.tbody { + width: 890rpx; +} + +.tbody .tr { + padding: 20rpx; + border-bottom: 1rpx solid #EEEEEE; + display: flex; + align-items: center; + flex-wrap: nowrap; +} + +.tbody .th { + word-break: break-all; + text-align: center; +} + +.customTable { + margin: 20rpx; +} + +.customTableTile { + background-color: var(--light-green); + padding: 16rpx; + box-sizing: border-box; + font-weight: 700; +} + +.tableRow { + padding: 16rpx; + border: 1rpx solid #ccc; + border-top: 0rpx; +} + +page { + background-color: rgb(228,240,236); + font-size: 32rpx; + } + + + .operate { + display: flex; + padding-top: 24rpx; + padding-bottom: 36rpx; +} + +.submit, .cancel { + flex: 1; +} + +.submit { + margin-right: 30rpx; +} diff --git a/pages/workBenchNew/components/workBenchTenement/index.js b/pages/workBenchNew/components/workBenchTenement/index.js index 59f3cb2..ce91abd 100644 --- a/pages/workBenchNew/components/workBenchTenement/index.js +++ b/pages/workBenchNew/components/workBenchTenement/index.js @@ -20,7 +20,17 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad(options) { - + console.log("options", options) + const { park, parkName, name, id } = options + this.setData({ + park, + parkName, + tenementName: name, + tenement: id + }) + if (id) { + this.getTenementInfo(); + } }, onParkFocus(e) { this.setData({ diff --git a/pages/workBenchNew/index.js b/pages/workBenchNew/index.js index aa4fd6b..dfec314 100644 --- a/pages/workBenchNew/index.js +++ b/pages/workBenchNew/index.js @@ -78,7 +78,17 @@ Page({ }, jumpToKaihu() { wx.navigateTo({ - url: 'pages/workBenchNew/components/kaihu/index', + url: '/pages/workBenchNew/components/kaihu/index', + }) + }, + jumpToMeterControl() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchMeterControl/index', + }) + }, + workOrder() { + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', }) }, /** diff --git a/pages/workBenchNew/index.wxml b/pages/workBenchNew/index.wxml index e237b49..ec91b45 100644 --- a/pages/workBenchNew/index.wxml +++ b/pages/workBenchNew/index.wxml @@ -114,10 +114,13 @@ - + - + + + + diff --git a/pages/workBenchTodoList/index.js b/pages/workBenchTodoList/index.js index 4b9ffea..521b868 100644 --- a/pages/workBenchTodoList/index.js +++ b/pages/workBenchTodoList/index.js @@ -1,18 +1,178 @@ // pages/workBenchTodoList/index.js +import request from "../../utils/request" +import { getWorkOrderList } from "../../service/workBench" +import { alertInfo, loadingFunc } from "../../utils/index"; +import { noticeFlowType } from "../../utils/data" +const { OK } = request Page({ /** * 页面的初始数据 */ data: { - + page: 1, + size: 20, + noticeFlowType, + actionItems: [{ + name: '确认', + value: 'status' + }], }, + showActionMenu(e) { + console.log("e", e) + this.setData({ + currentActionSheet: e.currentTarget.dataset.id + }); +}, +hideActionMenu() { + this.setData({ + currentActionSheet: null + }); +}, +onMenuSelect(e) { + const { + value + } = e.detail; + const id = e.currentTarget.dataset.id; + if (value === 'detail') { + this.jumpToDetail(id); + } +}, + jumpToDetail(id) { + + // 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, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + }) + break; + + case "noticeFlowType": + this.setData({ + noticeFlowType: data, + noticeFlowTypeName: data, + page: 1, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }); + break; + case "noticeFlowStatus": + this.setData({ + noticeFlowStatus: data, + noticeFlowStatusName: data, + page: 1, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }); + break; + case "meter": + this.setData({ + meter: data.id, + meterName: data.address, + meterInfo: data, + page: 1, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }); + break; + } + this.onCancel(); + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onNoticeFlowFocus() { + this.setData({ + show: true, + title: "类型", + type: 'noticeFlowType' + }) + }, + onNoticeFlowStatusFocus() { + this.setData({ + show: true, + title: "确认状态", + type: 'noticeFlowStatus' + }) + }, + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onChangePage(e) { + const that = this; + this.setData({ + page: e.detail.currentIndex, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }) + console.log("e", e) + }, + async init() { + const { page, size, park, tenement, meter, type, time, status } = this.data; + const { code, message, data, total } = await getWorkOrderList({ page, size, park, tenement, meter, type, time, status }) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + list: data?.map(item => { + item.time = item?.created_at?.slice(0, 10) + item.address = item?.target?.meter_data?.address; + return item; + }), + totalPage: Math.ceil(total / size), + }) + }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { - + loadingFunc(async () => { + await this.init() + }) }, /** diff --git a/pages/workBenchTodoList/index.json b/pages/workBenchTodoList/index.json index aff1cbd..ede92dd 100644 --- a/pages/workBenchTodoList/index.json +++ b/pages/workBenchTodoList/index.json @@ -7,7 +7,17 @@ "search-select": "/components/searchSelect/index", "van-field": "@vant/weapp/field/index", "van-button": "@vant/weapp/button/index", - "searchSelectWrapper": "/components/searchSelectWrapper/index" + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "van-empty": "@vant/weapp/empty/index", + "table": "/components/table/table", + "pagination": "/components/pagination/index", + "empty": "/components/empty/index", + "van-radio": "@vant/weapp/radio/index", + "van-radio-group": "@vant/weapp/radio-group/index", + "van-dialog": "@vant/weapp/dialog/index", + "van-icon": "@vant/weapp/icon/index", + "van-action-sheet": "@vant/weapp/action-sheet/index" + }, "navigationStyle": "custom" } \ No newline at end of file diff --git a/pages/workBenchTodoList/index.wxml b/pages/workBenchTodoList/index.wxml index 8603edb..0d26819 100644 --- a/pages/workBenchTodoList/index.wxml +++ b/pages/workBenchTodoList/index.wxml @@ -1,12 +1,99 @@ - - - 1 - - - 2 - - - \ No newline at end of file + + + + + + + + + + + 时间 + 类型 + 电表地址 + 状态 + 操作 + + + + + + + {{ item.time }} + + + {{ noticeFlowType[item.types - 1] }} + + + + {{ item.address }} + + + {{ item.flow_status === 1 ? "处理中" : "已确认" }} + + + + 确认 + + + + + + + + + + + + + + + + + + + + diff --git a/pages/workBenchTodoList/index.wxss b/pages/workBenchTodoList/index.wxss index f05fa3a..ea6fa96 100644 --- a/pages/workBenchTodoList/index.wxss +++ b/pages/workBenchTodoList/index.wxss @@ -1 +1,71 @@ -/* pages/workBenchTodoList/index.wxss */ \ No newline at end of file +/* pages/workBenchTodoList/index.wxss */ + +.table { + width: 500rpx; + +} + +.tableWrapper { + width: 100vw; + overflow-x: auto; +} + +.thead { + + display: flex; + flex-wrap: nowrap; + +} + +.thead .th { + padding: 10rpx; + white-space: nowrap; + text-align: center; + box-sizing: border-box; +} + +.primaryTextBtn { + color: #1989fa; + } + +.tbody { + width: 500rpx; +} + +.tbody .tr { + padding: 10rpx; + border-bottom: 1rpx solid #EEEEEE; + display: flex; + align-items: center; + flex-wrap: nowrap; +} + +.tbody .tr { + word-break: break-all; + text-align: center; +} + +.more-icon { + padding: 20rpx; + color: #1989fa; + display: flex; + justify-content: center; + align-items: center; + } + +/* 基础标签样式 */ +.tag { + display: inline-block; + padding: 4px 5px; + margin-right: 0px; + border-radius: 16px; + background: #07c160; + color: white; + font-size: 25rpx; + } + + /* 激活状态样式 */ + .tag.active { + background: #07c160; + color: white; + } \ No newline at end of file diff --git a/pages/workOrderDetail/index.js b/pages/workOrderDetail/index.js new file mode 100644 index 0000000..9b339ba --- /dev/null +++ b/pages/workOrderDetail/index.js @@ -0,0 +1,66 @@ +// pages/workOrderDetail/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workOrderDetail/index.json b/pages/workOrderDetail/index.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/workOrderDetail/index.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/workOrderDetail/index.wxml b/pages/workOrderDetail/index.wxml new file mode 100644 index 0000000..15d3210 --- /dev/null +++ b/pages/workOrderDetail/index.wxml @@ -0,0 +1,2 @@ + +pages/workOrderDetail/index.wxml \ No newline at end of file diff --git a/pages/workOrderDetail/index.wxss b/pages/workOrderDetail/index.wxss new file mode 100644 index 0000000..d1b82a2 --- /dev/null +++ b/pages/workOrderDetail/index.wxss @@ -0,0 +1 @@ +/* pages/workOrderDetail/index.wxss */ \ No newline at end of file diff --git a/service/meter.js b/service/meter.js index a610bcd..aa8dca4 100644 --- a/service/meter.js +++ b/service/meter.js @@ -67,4 +67,9 @@ export const getInventoryMeter = async function({park = "", keyword = "", page = // 新装电表 export const installMeter = async function(data) { return await POST(`/wx/workBench/installMeter`, data); +} + +// 拆表 +export const uninstallMeter = async function(sn) { + return await DELETE(`/flow/doMeterRemoveApproval?sn=${sn}`); } \ No newline at end of file diff --git a/service/workBench.js b/service/workBench.js index a079d17..61f0169 100644 --- a/service/workBench.js +++ b/service/workBench.js @@ -49,4 +49,11 @@ export const checkReadingFinish = async function(id) { // 获取工作台首页 export const getWorkBenchHome = async function() { return await GET(`/workHome/mainPage`,); +} + +// 获取工单列表 +export const getWorkOrderList = async function({ + page, size, park = "", meter = "", tenement = "", status = "", type = "", time = "" +}) { + return await GET(`/noticeFlow/getDisposeList?page=${page}&size=${size}&park=${park}&meter=${meter}&tenement=${tenement}&status=${status}&type=${type}&time=${time}`,); } \ No newline at end of file diff --git a/utils/data.js b/utils/data.js index 2156c41..b9c09b9 100644 --- a/utils/data.js +++ b/utils/data.js @@ -11,4 +11,9 @@ export const getRechargeOperateWay = (num) => { export const feeType = ['华昌宝能收费', "物业代收1", "物业代收2", "物业代收线损"] -export const meterType = ['商户电表', '园区电表', '公摊电表'] \ No newline at end of file +export const meterType = ['商户电表', '园区电表', '公摊电表'] + +export const noticeFlowType = ['拆表', '装表', '开户', "解绑", "绑定"] +export const noticeFlowStatus = ["已确认", "待确认"] + +export const meterMode = ["预付费", "强控", "临时强控"] \ No newline at end of file From 07add888565b4bbf2c4bf793c42086804c4320c6 Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Mon, 10 Nov 2025 16:09:38 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E8=81=94=E8=B0=83=E6=8B=86=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/uninstallMeter/index.js | 21 ++++++++++++++----- .../components/uninstallMeter/index.json | 3 ++- .../components/uninstallMeter/index.wxml | 2 +- pages/workBenchTodoList/index.js | 5 ++--- service/meter.js | 4 ++-- service/public.js | 20 ++++++++++++++++++ 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/pages/workBenchNew/components/uninstallMeter/index.js b/pages/workBenchNew/components/uninstallMeter/index.js index f785687..62ed294 100644 --- a/pages/workBenchNew/components/uninstallMeter/index.js +++ b/pages/workBenchNew/components/uninstallMeter/index.js @@ -1,8 +1,9 @@ // pages/workBenchNew/components/uninstallMeter/index.js -import { uninstallMeter } from "../../../../service/meter"; +import { uninstallMeter, } from "../../../../service/meter"; import dayjs from "../../../../utils/dayjs" import request from "../../../../utils/request" -import { alertInfo, alertSuccess, } from "../../../../utils/index" +import { alertInfo, alertSuccess, loadingFunc} from "../../../../utils/index" +import { uploadUninstallMeter } from "../../../../service/public" const { OK } = request; @@ -113,12 +114,12 @@ Page({ }) }, async onSubmit() { - const { meter, } = this.data; + const { meter, reason, url, meterInfo } = this.data; if (!meter) { alertInfo("请选择表号") return; } - const { code, message } = await uninstallMeter(meter) + const { code, message } = await uninstallMeter({sn: meterInfo.meterSn, images: url, reason}) if (code !== OK) { alertInfo(message) return @@ -148,7 +149,7 @@ Page({ } var tempFilePaths = path; loadingFunc(async () => { - const { code, message, url } = await uploadInstallMeter(tempFilePaths) + const { code, message, url } = await uploadUninstallMeter(tempFilePaths) if (code !== OK) { alertError(message) return @@ -165,6 +166,16 @@ Page({ url: "" }) }, + showImage() { + this.setData({ + imageShow: true + }) + }, + onClose() { + this.setData({ + imageShow: false + }) + }, goback() { wx.navigateBack() }, diff --git a/pages/workBenchNew/components/uninstallMeter/index.json b/pages/workBenchNew/components/uninstallMeter/index.json index a676309..003c648 100644 --- a/pages/workBenchNew/components/uninstallMeter/index.json +++ b/pages/workBenchNew/components/uninstallMeter/index.json @@ -5,7 +5,8 @@ "search-select": "/components/searchSelect/index", "van-field": "@vant/weapp/field/index", "van-button": "@vant/weapp/button/index", - "searchSelectWrapper": "/components/searchSelectWrapper/index" + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "van-image": "@vant/weapp/image/index" }, "navigationStyle": "custom" } \ No newline at end of file diff --git a/pages/workBenchNew/components/uninstallMeter/index.wxml b/pages/workBenchNew/components/uninstallMeter/index.wxml index 91330e9..a3b5474 100644 --- a/pages/workBenchNew/components/uninstallMeter/index.wxml +++ b/pages/workBenchNew/components/uninstallMeter/index.wxml @@ -46,7 +46,7 @@ 清除 - + diff --git a/pages/workBenchTodoList/index.js b/pages/workBenchTodoList/index.js index 521b868..bedbce6 100644 --- a/pages/workBenchTodoList/index.js +++ b/pages/workBenchTodoList/index.js @@ -148,11 +148,10 @@ onMenuSelect(e) { await that.init() }) }) - console.log("e", e) }, async init() { - const { page, size, park, tenement, meter, type, time, status } = this.data; - const { code, message, data, total } = await getWorkOrderList({ page, size, park, tenement, meter, type, time, status }) + 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) return; diff --git a/service/meter.js b/service/meter.js index aa8dca4..7718f03 100644 --- a/service/meter.js +++ b/service/meter.js @@ -70,6 +70,6 @@ export const installMeter = async function(data) { } // 拆表 -export const uninstallMeter = async function(sn) { - return await DELETE(`/flow/doMeterRemoveApproval?sn=${sn}`); +export const uninstallMeter = async function({sn, reason, images}) { + return await DELETE(`/flow/doMeterRemoveApproval`, { sn, reason, images }); } \ No newline at end of file diff --git a/service/public.js b/service/public.js index 9a40ece..a7c1acd 100644 --- a/service/public.js +++ b/service/public.js @@ -63,6 +63,26 @@ export const uploadInstallMeter = (filePath) => { }) } +export const uploadUninstallMeter = (filePath) => { + const { api } = getConfigByEnv(); + return new Promise((resolve, reject) => { + wx.uploadFile({ + filePath: filePath, + name: 'data', + url: `${api}/image/meter/delete`, + header: { + authorization: 'Bearer ' + wx.getStorageSync("token") + }, + success: (res) => { + resolve(res?.data ? JSON.parse(res?.data) : res?.data); + }, + fail: (err) => { + reject(err); + } + }) + }) +} + export const uploadPublicFile = (filePath) => { const { api } = getConfigByEnv(); return new Promise((resolve, reject) => { From 48f35e2e91b9822a4fec0e182bc9d51040168eee Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Mon, 10 Nov 2025 17:38:06 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E6=8B=86=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/meter.js b/service/meter.js index 7718f03..b1eaa9d 100644 --- a/service/meter.js +++ b/service/meter.js @@ -71,5 +71,5 @@ export const installMeter = async function(data) { // 拆表 export const uninstallMeter = async function({sn, reason, images}) { - return await DELETE(`/flow/doMeterRemoveApproval`, { sn, reason, images }); + return await DELETE(`/flow/doMeterRemoveApproval?sn=${sn}&reason=${reason}&images=${images}`); } \ No newline at end of file From ed5fea105f5521250899a74826568182f5e3723c Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Wed, 12 Nov 2025 08:49:16 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0undef?= =?UTF-8?q?ined=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/meter.js b/service/meter.js index b1eaa9d..276cc0e 100644 --- a/service/meter.js +++ b/service/meter.js @@ -70,6 +70,6 @@ export const installMeter = async function(data) { } // 拆表 -export const uninstallMeter = async function({sn, reason, images}) { +export const uninstallMeter = async function({sn = "", reason = "", images = ""}) { return await DELETE(`/flow/doMeterRemoveApproval?sn=${sn}&reason=${reason}&images=${images}`); } \ No newline at end of file From 8af3586e22a3932e08bde46633086578042dc86c Mon Sep 17 00:00:00 2001 From: qiaomu <3520484422@qq.com> Date: Wed, 12 Nov 2025 08:56:43 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E5=88=A0=E6=8E=89=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/meterBalanceRecord/index.wxml | 40 ------------------- .../components/workBenchMeterControl/index.js | 3 ++ 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/pages/meterBalanceRecord/index.wxml b/pages/meterBalanceRecord/index.wxml index e22637d..81e16b7 100644 --- a/pages/meterBalanceRecord/index.wxml +++ b/pages/meterBalanceRecord/index.wxml @@ -11,46 +11,6 @@ -