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] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E8=81=94=E8=B0=83=E8=A3=85?= =?UTF-8?q?=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