diff --git a/app.json b/app.json index 78684f3..09a5502 100644 --- a/app.json +++ b/app.json @@ -23,6 +23,7 @@ "pages/encyclopedia/index", "pages/encyclopediaDetail/index", "pages/workBench/index", + "pages/workBenchNew/index", "pages/webPage/index", "pages/aid/finance/index", "pages/aid/law/index", @@ -36,7 +37,19 @@ "pages/meterList/index", "pages/workBench/components/tenement/components/createTenement/index", "pages/billMeterDetail/index", - "pages/meterBalanceRecord/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", + "pages/workBenchNew/components/workBenchReading/index", + "pages/workBenchNew/components/recharge/index", + "pages/workBenchNew/components/installMeter/index", + "pages/workBenchNew/components/uninstallMeter/index", + "pages/workBenchTodoList/index", + "pages/workBenchNew/components/kaihu/index", + "pages/workOrderDetail/index" ], "subPackages": [ { diff --git a/childPackage/pages/billDetail/index.wxml b/childPackage/pages/billDetail/index.wxml index 443e46a..f69d1a3 100644 --- a/childPackage/pages/billDetail/index.wxml +++ b/childPackage/pages/billDetail/index.wxml @@ -129,6 +129,7 @@ 峰: {{ detail.comprehensive.peakAmount }} 平: {{ detail.comprehensive.flatAmount }} 谷: {{ detail.comprehensive.valleyAmount }} + 深谷: {{ detail.comprehensive.deepValleyAmount }} @@ -141,6 +142,7 @@ 峰: {{ detail.comprehensive.pricePeak }} 平: {{ detail.comprehensive.priceFlat }} 谷: {{ detail.comprehensive.priceValley }} + 深谷: {{ detail.comprehensive.priceDeepValley }} diff --git a/childPackage/pages/electricQuery/components/reading/index.wxml b/childPackage/pages/electricQuery/components/reading/index.wxml index 7aff417..01ca838 100644 --- a/childPackage/pages/electricQuery/components/reading/index.wxml +++ b/childPackage/pages/electricQuery/components/reading/index.wxml @@ -136,6 +136,13 @@ readonly wx:if="{{park.meter04kvType === 1|| park.meter04kvType === 2}}" /> + + 上次抄表记录起,至现在时间内的用电量 diff --git a/childPackage/pages/electricQuery/index.js b/childPackage/pages/electricQuery/index.js index 2e15552..9ae7766 100644 --- a/childPackage/pages/electricQuery/index.js +++ b/childPackage/pages/electricQuery/index.js @@ -41,6 +41,7 @@ Page({ { key: 'peak', title: '峰' }, { key: 'flat', title: '平' }, { key: 'valley', title: '谷' }, + { key: 'deepValley', title: '深谷' }, ], list: [], visible: false, @@ -171,7 +172,7 @@ Page({ const newList = [...times].map(item => { const exist = list.find(ele => ele.time === item) if (exist) { - return Number(exist.critical)+ Number(exist.peak)+Number(exist.flat)+Number(exist.valley); + return Number(exist.critical || 0)+ Number(exist.peak || 0)+Number(exist.flat || 0)+Number(exist.valley || 0)+Number(exist.deepValley || 0); } return null }) diff --git a/components/DateTimePicker/index.js b/components/DateTimePicker/index.js index da3090c..e0d3960 100644 --- a/components/DateTimePicker/index.js +++ b/components/DateTimePicker/index.js @@ -8,8 +8,18 @@ Component({ */ properties: { show: Boolean, + // time: String, }, - + // observers: { + // time: function(newValue) { + // if (!newValue) { + // return; + // } + // this.setData({ + // currentDate: new Date(newValue).getTime(), + // }) + // } + // }, /** * 组件的初始数据 */ @@ -20,7 +30,10 @@ Component({ }, lifetimes: { attached() { - + this.setData({ + maxDate: new Date().getTime(), + currentDate: new Date().getTime(), + }) } }, /** diff --git a/components/searchSelect/index.js b/components/searchSelect/index.js index c75c854..14279c1 100644 --- a/components/searchSelect/index.js +++ b/components/searchSelect/index.js @@ -1,8 +1,15 @@ import { getLoginParkList, getParkBuildingList } from "../../service/park" -import { getParkSimpleMeterList } from "../../service/meter" +import { + getParkSimpleMeterList, getParkBoxList, + getCardList, getCollectionList, + getInventoryMeter, getCollectorList, + getWorkOrderAllMeter, +} from "../../service/meter" import { alertInfo } from "../../utils/index"; import request from "../../utils/request" -import { payWays, feeType } from "../../utils/data"; +import { payWays, feeType, meterType, noticeFlowType, noticeFlowStatus, + meterMode +} from "../../utils/data"; import { getTenementList, getWxTenementList } from "../../service/tenement"; const { OK } = request; @@ -17,10 +24,14 @@ Component({ type: String, show: Boolean, park: String, + building: String, isBack: Boolean, + filterBind: Boolean, + filterData: Array, + filterType: String }, observers: { - "show,type": function(newShow, newType) { + "show,type,filterBind": function(newShow, newType) { if (newShow && newType) { this.onSearch() } @@ -34,6 +45,10 @@ Component({ searchText: "", payWays, feeType, + meterType, + noticeFlowType, + noticeFlowStatus, + meterMode, }, lifetimes: { attached() { @@ -71,7 +86,18 @@ Component({ list: [], searchText: "" }) - this.triggerEvent("confirm", { data: item, type } ); + 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; @@ -84,6 +110,28 @@ 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: "" + }) + this.triggerEvent("confirm", { data: item, way: index + 1, type } ); + }, onFeeTypeConfirm(event) { const { index } = event.detail; const { feeType = [], type } = this.data; @@ -95,8 +143,19 @@ 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 } = this.data; + const { type, bind, filterBind } = this.data; switch(type) { case "park": this.onSearchPark(); @@ -104,14 +163,56 @@ 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; + case "collector": + this.onSearchCollector(); + break; + case "workOrderMeter": + this.onSearchWorkOrderMeter(); + break; } }, + async onSearchCollector() { + const { searchText = "", } = this.data; + const { code, message, data = [] } = await getCollectorList(searchText); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: data?.map(item => `${item.collectorAddress}-${item.manufacturer}`), + list: data, + }) + }, + async onSearchWorkOrderMeter() { + const { searchText = "", park } = this.data; + const { code, message, data = [] } = await getWorkOrderAllMeter({keyword: searchText, park: park, page: 1, size: 20}); + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ + columns: data?.map(item => `${item.address}-${item.meter_no}`), + list: data, + }) + }, async onSearchPark() { const { searchText = "" } = this.data; const { code, message, data: parks = [] } = await getLoginParkList({keyword: searchText}); @@ -124,9 +225,27 @@ Component({ list: parks, }) }, + async onSearchCollection() { + const { searchText = "", filterData, filterType } = this.data; + const { code, message, data: parks = [] } = await getCollectionList({keyword: searchText, page: 1, status: 1}); + if (code !== OK) { + alertInfo(message) + return + } + let columns = parks; + if (filterType === 'collection') { + columns = columns.filter(item => { + return !filterData.includes(item.id) + }) + } + this.setData({ + columns: columns?.map(item => `${item.transformerId}-倍率:${item.ratio}-${item.manufacturer}`), + list: columns, + }) + }, 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 @@ -136,6 +255,18 @@ Component({ list: parks || [], }) }, + async onSearchInventoryMeter() { + const { searchText = "", park, filterBind } = this.data; + const { code, message, data: parks = [] } = await getInventoryMeter({keyword: searchText, park, isNeedBind: !filterBind, status: 1}); + 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}); @@ -160,6 +291,30 @@ Component({ list: data, }) }, + async onSearchMeterBox() { + const { park, building } = this.data; + const { code, message, data = [] } = await getParkBoxList({park, building}); + 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..bfef00f 100644 --- a/components/searchSelect/index.wxml +++ b/components/searchSelect/index.wxml @@ -26,6 +26,46 @@ bind:confirm="onFeeTypeConfirm" /> + + + + + + + + + + + + - {{ label }} - + *{{ label }} + {{placeholder}} {{text}} + - {{ label }} - + *{{ label }} + 搜索 - {{ label }} - + *{{ label }} + + + + + *{{ label }} + + + \ No newline at end of file diff --git a/components/searchSelectWrapper/index.wxss b/components/searchSelectWrapper/index.wxss index cd7bdc4..eafae3e 100644 --- a/components/searchSelectWrapper/index.wxss +++ b/components/searchSelectWrapper/index.wxss @@ -8,24 +8,26 @@ .content { flex: 1; - margin-left: 30rpx; + margin-left: 20rpx; margin-right: 30rpx; display: flex; padding: 10rpx 20rpx; border-radius: 12rpx; border: 1rpx solid #ccc; background-color: #fff; + position: relative; } .inputContent { flex: 1; - margin-left: 30rpx; + margin-left: 20rpx; margin-right: 30rpx; display: flex; padding: 0 20rpx; border-radius: 12rpx; border: 1rpx solid #ccc; background-color: #fff; + position: relative; } .text { @@ -33,5 +35,11 @@ } .label { - width: 120rpx; -} \ No newline at end of file + width: 130rpx; +} + +.required { + color: rgb(209, 83, 25); + font-size: 30rpx; +} + diff --git a/pages/billMeterDetail/index.js b/pages/billMeterDetail/index.js index a768265..6fd67ec 100644 --- a/pages/billMeterDetail/index.js +++ b/pages/billMeterDetail/index.js @@ -13,6 +13,7 @@ Page({ { title: '峰',renderBody: (item) => { return item?.peak } }, { title: '平',renderBody: (item) => { return item?.flat } }, { title: '谷',renderBody: (item) => { return item?.valley } }, + { title: '深谷',renderBody: (item) => { return item?.deepValley } }, ], list: [] }, @@ -25,13 +26,13 @@ Page({ this.setData({ data: data, list: [ - { type: "起码", sharp: data.startSharp, peak: data.startPeak, flat: data.startFlat, valley: data.startValley }, - { type: "止码", sharp: data.endSharp, peak: data.endPeak, flat: data.endFlat, valley: data.endValley }, - { type: "退补电量", sharp: data.refundSharp, peak: data.refundPeak, flat: data.refundFlat, valley: data.refundValley }, - { type: "从表电量", sharp: getRoundNumber(data.nestSharp), peak: getRoundNumber(data.nestPeak), flat: getRoundNumber(data.nestFlat), valley: getRoundNumber(data.nestValley) }, - { type: "电度电量", sharp: getRoundNumber(data?.critical?.amount), peak: getRoundNumber(data.peak?.amount), flat: getRoundNumber(data.flat?.amount), valley: getRoundNumber(data.valley?.amount) }, - { type: "分时单价", sharp: data.critical?.price, peak: data.peak?.price, flat: data.flat?.price, valley: data.valley?.price }, - { type: "电费", sharp: getRoundNumber(data.chargeSharp), peak: getRoundNumber(data.chargePeak), flat: getRoundNumber(data.chargeFlat), valley: getRoundNumber(data.chargeValley) }, + { type: "起码", sharp: data.startSharp, peak: data.startPeak, flat: data.startFlat, valley: data.startValley, deepValley: data.startDeepValley }, + { type: "止码", sharp: data.endSharp, peak: data.endPeak, flat: data.endFlat, valley: data.endValley, deepValley: data.endDeepValley }, + { type: "退补电量", sharp: data.refundSharp, peak: data.refundPeak, flat: data.refundFlat, valley: data.refundValley, deepValley: data.refundDeepValley }, + { type: "从表电量", sharp: getRoundNumber(data.nestSharp), peak: getRoundNumber(data.nestPeak), flat: getRoundNumber(data.nestFlat), valley: getRoundNumber(data.nestValley), deepValley: getRoundNumber(data.nestDeepValley) }, + { type: "电度电量", sharp: getRoundNumber(data?.critical?.amount), peak: getRoundNumber(data.peak?.amount), flat: getRoundNumber(data.flat?.amount), valley: getRoundNumber(data.valley?.amount), deepValley: getRoundNumber(data?.deepValley?.amount) }, + { type: "分时单价", sharp: data.critical?.price, peak: data.peak?.price, flat: data.flat?.price, valley: data.valley?.price , valley: data.valley?.price, deepValley: data.deepValley?.price}, + { type: "电费", sharp: getRoundNumber(data.chargeSharp), peak: getRoundNumber(data.chargePeak), flat: getRoundNumber(data.chargeFlat), valley: getRoundNumber(data.chargeValley), deepValley: getRoundNumber(data.chargeDeepValley) }, ] }) }, diff --git a/pages/home/index.js b/pages/home/index.js index cbea2c1..bcf3e81 100644 --- a/pages/home/index.js +++ b/pages/home/index.js @@ -1,6 +1,8 @@ // pages/home/index.js import { getMeterDetail, getMeterList, getTenementMeterList } from "../../service/meter"; -import { getOwnTenementList, getTenementExceptionalCase } from "../../service/tenement"; +import { getOwnTenementList, getTenementExceptionalCase , + getTenementBackInfo, getTenementDetail, getTenementInfoDetail, +} from "../../service/tenement"; import { alertInfo, alertSuccess } from "../../utils/index"; import request from '../../utils/request'; import { getDot } from "../../utils/system"; @@ -159,6 +161,19 @@ Page({ alertInfo("账号存在异常,无法进行充值,请联系客服处理") return; } + const { + code: tenementDetailCode, + message: tenementDetailMessage, + tenement: tenementDetail, + } = await getTenementBackInfo(park?.id, tenement?.id) + if (tenementDetailCode !== OK) { + alertInfo(tenementDetailMessage) + return + } + if (tenementDetail?.stop_top) { + alertInfo("您暂不可使用此功能,可联系客服处理。") + return; + } const that = this; if (!user || !user.id) { alertInfo("请先登录") diff --git a/pages/invoiceDetail/index.js b/pages/invoiceDetail/index.js index 8414c5c..0a71aa9 100644 --- a/pages/invoiceDetail/index.js +++ b/pages/invoiceDetail/index.js @@ -87,7 +87,6 @@ Page({ }, fail: function (e) { // alertError("打开失败") - // console.log('打开失败错误为', e) wx.showModal({ title: '提示', content: '打开失败,请复制链接后通过浏览器打开', diff --git a/pages/invoiceList/components/notyet/index.js b/pages/invoiceList/components/notyet/index.js index aa9fe41..6c10e41 100644 --- a/pages/invoiceList/components/notyet/index.js +++ b/pages/invoiceList/components/notyet/index.js @@ -1,5 +1,6 @@ // pages/invoiceList/components/notyet/index.js import { getInvoiceList } from '../../../../service/invoice'; +import { getTenementBackInfo } from '../../../../service/tenement'; import { alertInfo, loadingFunc } from '../../../../utils/index'; import request from '../../../../utils/request'; const { OK } = request; @@ -69,7 +70,18 @@ Component({ selectMoney: Number(selectMoney.toFixed(2)) }) }, - next() { + async next() { + const park = wx.getStorageSync("park") + const tenement = wx.getStorageSync("tenement") + const { code: detailCode, message: detailMessage, tenement: Detail } = await getTenementBackInfo(park?.id, tenement?.id) + if (detailCode !== OK) { + alertInfo(detailMessage) + return; + } + if (Detail?.stop_invoice) { + alertInfo("您暂不可使用此功能,可联系客服处理。") + return + } const { selectList, list, selectMoney, selectCount } = this.data; let tenementID = ""; let tenementName = ""; diff --git a/pages/login/index.js b/pages/login/index.js index 13b8484..5e6b8c5 100644 --- a/pages/login/index.js +++ b/pages/login/index.js @@ -58,6 +58,12 @@ Page({ const { token, ...user } = data wx.setStorageSync('user', user) wx.setStorageSync('token', data?.token) + if (user.workStatus) { + wx.redirectTo({ + url: '/pages/workBenchNew/index', + }) + return + } wx.switchTab({ url: '/pages/home/index', }) 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 @@ - + + + + + + + + + + + + + + + + + + \ 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/components/editModal/index.js b/pages/readingHistory/components/editModal/index.js index f066012..4511a8b 100644 --- a/pages/readingHistory/components/editModal/index.js +++ b/pages/readingHistory/components/editModal/index.js @@ -1,8 +1,8 @@ // pages/workBench/components/tenement/components/bindMeter/index.js // 0015980101 -import { bindMeter, } from "../../../../service/tenement" +import { createReading, updateReading } from "../../../../service/workBench" import { getWorkMeterDetail } from "../../../../service/meter" -import { alertInfo, alertSuccess } from "../../../../utils/index"; +import { alertInfo, alertSuccess, alertError } from "../../../../utils/index"; import request from "../../../../utils/request" import dayjs from "../../../../utils/dayjs" const { OK } = request @@ -16,12 +16,16 @@ Component({ title: String, timeProps: String, numberProps: String, - id: String + idProps: String, + meter: String, + park: String, + routeId: String, }, observers: { "timeProps": function(newValue) { this.setData({ - time: newValue + time: newValue, + // startTime: newValue }) }, "numberProps": function(newValue) { @@ -63,12 +67,40 @@ Component({ }) }, async onSubmit() { - const { time, number } = this.data; + const { time, number, idProps, park, meter, timeProps, routeId } = this.data; if (time == null || number == null) { alertInfo("请正确填写后保存") return; } - this.triggerEvent("ok") + if (!idProps) { + const { code, message } = await createReading(park, meter, routeId, { + overall: `${number}`, + flat: `${number}`, + readAt: time, + source: 1, + }) + if (code !== OK) { + alertError(message) + return + } + alertSuccess("录入成功") + this.setData({ number: null, time: null, startTime: null }) + } else { + const { code, message } = await updateReading(park, meter, new Date(timeProps).getTime() * 1000, { + overall: `${number}`, + flat: `${number}`, + }) + if (code !== OK) { + alertError(message) + return + } + alertSuccess("录入成功") + this.setData({ number: null, time: null, startTime: null }) + } + const that = this; + setTimeout(() => { + that.triggerEvent("ok") + }, 300) }, dateTimeConfirm(e) { diff --git a/pages/readingHistory/components/editModal/index.wxml b/pages/readingHistory/components/editModal/index.wxml index 12356ca..ba9fcf0 100644 --- a/pages/readingHistory/components/editModal/index.wxml +++ b/pages/readingHistory/components/editModal/index.wxml @@ -17,14 +17,16 @@ use-button-slot title-width="100rpx" > - + diff --git a/pages/readingHistory/components/meterInfo/index.wxss b/pages/readingHistory/components/meterInfo/index.wxss index c257812..b7f616d 100644 --- a/pages/readingHistory/components/meterInfo/index.wxss +++ b/pages/readingHistory/components/meterInfo/index.wxss @@ -19,4 +19,8 @@ justify-content: space-between; font-size: 30rpx; margin-bottom: 20rpx; +} + +.status { + font-size: 30rpx; } \ No newline at end of file diff --git a/pages/readingHistory/index.js b/pages/readingHistory/index.js index 792222d..69586c7 100644 --- a/pages/readingHistory/index.js +++ b/pages/readingHistory/index.js @@ -1,28 +1,54 @@ // pages/readingHistory/index.js -import { getMeterReadingRouteMeterDetail } from "../../service/workBench" +import { getMeterReadingRouteMeterDetail, getReadingList, deleteReading } from "../../service/workBench" import request from "../../utils/request" -import { alertInfo, alertSuccess, alertError } from "../../utils/index" +import { alertInfo, alertSuccess, alertError, loadingFunc } from "../../utils/index" const { OK } = request; +import dayjs from "../../utils/dayjs" Page({ /** * 页面的初始数据 */ data: { - list: [{time: "2025-05-05 14:10:09", number: 90803.87}] + list: [], + page: 1, + size: 20, }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { - const { meter, park } = options; + const { meter, park, routeId, disabled } = options; + const that = this; this.setData({ meter, - park + park, + routeId, + disabled + }, () => { + that.refresh(); }) this.getMeterInfo(meter); }, + refresh() { + const that = this; + loadingFunc(async () => { + await that.getList(); + }) + }, + onEditFinish() { + this.setData({ + title: null, + visible: null, + time: null, + number: null, + id: null, + readAtTimestamp: null, + type: null, + }) + this.refresh() + }, async getMeterInfo(id) { const { code, message, data } = await getMeterReadingRouteMeterDetail(id) if (code !== OK) { @@ -31,6 +57,27 @@ Page({ } this.setData({ meterInfo: data }) }, + async getList() { + const { meter, park, page, size } = this.data; + const { code, message, records: data } = await getReadingList(park, meter, page) + if (code !== OK) { + alertError(message) + return; + } + this.setData({ + list: data, + totalPage: Math.ceil(data?.length / size) + }) + }, + async onChangePage(e) { + const newPage = e.detail.currentIndex; + const that = this; + this.setData({ + page: newPage + }, () => { + that.getList(); + }) + }, /** * 生命周期函数--监听页面初次渲染完成 */ @@ -40,30 +87,51 @@ Page({ handleCreate() { this.setData({ title: "新增记录", - visible: true + visible: true, + type: "create", + time: dayjs().format("YYYY-MM-DD HH:mm:ss") }) }, - handleUpdate() { + handleUpdate(e) { + const { data } = e.currentTarget.dataset; this.setData({ title: "编辑记录", visible: true, - time: "2025-09-11", - number: 100, - id: "" + time: data.readAt, + number: data.overall, + id: data.id, + readAtTimestamp: data.readAtTimestamp, + type: "edit", + }) + }, + handleDetail(e) { + const { data } = e.currentTarget.dataset; + this.setData({ + detail: data, + detailVisible: true }) }, handleDelete(e) { - const { id } = e.currentTarget.dataset; + const { data } = e.currentTarget.dataset; + const that = this; wx.showModal({ title: '删除确认', content: '确认要删除这一项记录吗?', - complete: (res) => { + complete: async (res) => { if (res.cancel) { } if (res.confirm) { - + const { code, message } = await deleteReading(data?.id, data?.overall) + if (code !== OK) { + alertError(message) + return + } + alertSuccess("删除成功") + setTimeout(() => { + that.refresh() + }, 300) } } }) diff --git a/pages/readingHistory/index.json b/pages/readingHistory/index.json index f773837..aed3603 100644 --- a/pages/readingHistory/index.json +++ b/pages/readingHistory/index.json @@ -4,7 +4,10 @@ "meterInfo": "./components/meterInfo/index", "van-button": "@vant/weapp/button/index", "van-icon": "@vant/weapp/icon/index", - "editModal": "./components/editModal/index" + "editModal": "./components/editModal/index", + "pagination": "/components/pagination/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 664201d..e005fff 100644 --- a/pages/readingHistory/index.wxml +++ b/pages/readingHistory/index.wxml @@ -1,13 +1,12 @@ - 抄表记录历史 - 新增记录 + 新增记录 @@ -15,22 +14,23 @@ 抄表时间 - 抄表读数 - 操作 + 抄表读数 + 操作 - {{ item.time }} + {{ item.readAt }} - - {{ item.number }} + + {{ item.overall }} - - - + + + + @@ -41,9 +41,27 @@ - + - \ No newline at end of file + + + \ No newline at end of file diff --git a/pages/readingHistory/index.wxss b/pages/readingHistory/index.wxss index b5113d5..ba36133 100644 --- a/pages/readingHistory/index.wxss +++ b/pages/readingHistory/index.wxss @@ -11,6 +11,11 @@ page { .historyTitle { display: flex; justify-content: space-between; + align-items: center; +} + +.historyTitle .text { + font-size: 32rpx; } .table { diff --git a/pages/workBench/components/reading/index.js b/pages/workBench/components/reading/index.js index 45709a1..0002a79 100644 --- a/pages/workBench/components/reading/index.js +++ b/pages/workBench/components/reading/index.js @@ -20,7 +20,13 @@ Component({ park: "", parkName: "" }, - + lifetimes: { + attached() { + if (this.data.parkName) { + this.init(); + } + } + }, /** * 组件的方法列表 */ @@ -80,7 +86,7 @@ Component({ alertSuccess("操作成功") this.init() setTimeout(() => { - that.jumpToReading() + that.jumpToReading({ currentTarget: { dataset: { id } } }) }, 500) }, async changeEndStatus(e) { diff --git a/pages/workBench/components/reading/index.wxml b/pages/workBench/components/reading/index.wxml index 31f4711..ede8f2c 100644 --- a/pages/workBench/components/reading/index.wxml +++ b/pages/workBench/components/reading/index.wxml @@ -25,37 +25,40 @@ - - - 开始抄表 - 去抄表 - 结束抄表 - - + + + + 开始抄表 + 去抄表 + 结束抄表 + + + + diff --git a/pages/workBench/components/tenement/components/bindMeter/index.js b/pages/workBench/components/tenement/components/bindMeter/index.js index 0ad9d61..9710e08 100644 --- a/pages/workBench/components/tenement/components/bindMeter/index.js +++ b/pages/workBench/components/tenement/components/bindMeter/index.js @@ -64,16 +64,17 @@ Component({ }) }, async onSubmit() { - const { overall, critical, peak, valley, park, tenement, meter, readAt } = this.data; + const { overall, critical, peak, valley, park, tenement, meter, readAt, deepValley } = this.data; const { code, message } = await bindMeter( park, tenement, { code: meter, - overall:overall? Number(overall) : overall, - critical : critical ? Number(critical) : critical, - peak: peak ? Number(peak) : peak, - valley : valley ? Number(valley) : valley, + overall:overall? Number(overall) : (overall === "" ? null : overall), + critical : critical ? Number(critical) : (critical === "" ? null : critical), + peak: peak ? Number(peak) : (peak === "" ? null : peak), + valley : valley ? Number(valley) : (valley === "" ? null : valley), + deepValley : deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley), readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss') } ) diff --git a/pages/workBench/components/tenement/components/bindMeter/index.wxml b/pages/workBench/components/tenement/components/bindMeter/index.wxml index 0e2ed30..159812d 100644 --- a/pages/workBench/components/tenement/components/bindMeter/index.wxml +++ b/pages/workBench/components/tenement/components/bindMeter/index.wxml @@ -101,6 +101,16 @@ type="digit" placeholder="请输入有功(谷)" /> + diff --git a/pages/workBench/components/tenement/components/unBindMeter/index.js b/pages/workBench/components/tenement/components/unBindMeter/index.js index ebdda83..87b9868 100644 --- a/pages/workBench/components/tenement/components/unBindMeter/index.js +++ b/pages/workBench/components/tenement/components/unBindMeter/index.js @@ -69,16 +69,17 @@ Component({ }) }, async onSubmit() { - const { overall, critical, peak, valley, park, tenement, meterId,readAt } = this.data; + const { overall, critical, peak, valley, deepValley, park, tenement, meterId,readAt } = this.data; const { code, message, } = await unbindMeter( park, tenement, meterId, { - overall:overall? Number(overall) : overall, - critical : critical ? Number(critical) : critical, - peak: peak ? Number(peak) : peak, - valley : valley ? Number(valley) : valley, + overall:overall? Number(overall) : (overall === "" ? null : overall), + critical : critical ? Number(critical) : (critical === "" ? null : critical), + peak: peak ? Number(peak) : (peak === "" ? null : peak), + valley : valley ? Number(valley) : (valley === "" ? null : valley), + deepValley: deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley), readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss') }); if (code !== OK) { diff --git a/pages/workBench/components/tenement/components/unBindMeter/index.wxml b/pages/workBench/components/tenement/components/unBindMeter/index.wxml index 7a9952f..9a5ac1e 100644 --- a/pages/workBench/components/tenement/components/unBindMeter/index.wxml +++ b/pages/workBench/components/tenement/components/unBindMeter/index.wxml @@ -89,6 +89,16 @@ data-name="valley" placeholder="请输入有功(谷)" /> + diff --git a/pages/workBench/index.js b/pages/workBench/index.js index 0480db6..b2de2eb 100644 --- a/pages/workBench/index.js +++ b/pages/workBench/index.js @@ -5,14 +5,14 @@ Page({ * 页面的初始数据 */ data: { - active: 4 + active: 0 }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { - + }, onTabChange(e) { this.setData({ active: e.detail.index }) diff --git a/pages/workBenchNew/components/installMeter/index.js b/pages/workBenchNew/components/installMeter/index.js new file mode 100644 index 0000000..d9ebac9 --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.js @@ -0,0 +1,541 @@ +// 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: "", + placeholder: "", + collections: [], + }, + + /** + * 生命周期函数--监听页面加载 + */ + 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" + }) + }, + onBindCollector() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "采集器", + type: 'collector', + }) + }, + clearCollector() { + this.setData({ + show: false, + title: "", + type: 'collector', + collector: null, + collectorName: null, + }) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(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 + }) + }) + } + }) + }, + changeSn(e) { + this.setData({ + sn: e.detail, + }) + }, + clearData() { + this.setData({ + tenement: null, + tenementName: null, + building: null, + buildingName: null, + meterBox: null, + 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, + deepValley: null, + area: null, + collector: null, + collectorName: null, + collections: [], + }) + }, + onConfirm(e) { + console.log("e", e) + const { type, data = {}, way } = e.detail; + const {collection, park, meterType, tenement, tenementName, overall, sharp, flat, peak, valley, deepValley} = this.data; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + selfManagement: data.selfManagement, + }) + if (park !== data.id) { + this.clearData() + } + 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": + let newMeterData = {}; + if (way !== 0) { + newMeterData = { + tenement: null, + tenementName: null, + overall: null, + sharp: null, + peak: null, + flat: null, + valley: null, + deepValley: null, + } + } + this.setData({ + meterType: way, + meterTypeName: data, + ...newMeterData, + }); + break; + case "collector": + this.setData({ + collector: data?.id, + collectorName: `${data.collectorAddress}-${data.manufacturer}`, + }); + break; + case "meter": + this.setData({ + meter: data.id, + meterName: data.address, + }); + break; + case "card": + this.setData({ + card: data.id, + cardName: data.sim_number, + }); + break; + case "collection": + const newCollects = this.data.collections; + let newData = {} + if (collection === "A") { + newCollects[0] = data.id + newData = { + collectionA: data.id, + collectionAName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionARatio: data.ratio, + collections: newCollects + } + } + if (collection === "B") { + newCollects[1] = data.id + newData = { + collectionB: data.id, + collectionBName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionBRatio: data.ratio, + collections: newCollects + } + } + if (collection === "C") { + newCollects[2] = data.id + newData = { + collectionC: data.id, + collectionCName: `${data.transformerId}-倍率:${data.ratio}-${data.manufacturer}`, + collectionCRatio: data.ratio, + collections: newCollects + } + } + this.setData(newData); + break; + } + this.onCancel(); + }, + clearCard() { + this.setData({ + card: null, + cardName: null, + }) + }, + clearCollectionA() { + const newCollects = this.data.collections; + newCollects[0] = null; + this.setData({ + collectionA: null, + collectionAName: null, + collections: newCollects, + }) + }, + clearCollectionB() { + const newCollects = this.data.collections; + newCollects[1] = null; + this.setData({ + collectionB: null, + collectionBName: null, + collections: newCollects, + }) + }, + clearCollectionC() { + const newCollects = this.data.collections; + newCollects[2] = null; + this.setData({ + collectionC: null, + collectionCName: null, + collections: newCollects, + }) + }, + 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({ + peak: e.detail + }) + }, + changeFlat(e) { + this.setData({ + flat: e.detail + }) + }, + changeValley(e) { + this.setData({ + valley: e.detail + }) + }, + changeDeepValley(e) { + this.setData({ + deepValley: 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, deepValley, overall, url, sn, + collectionARatio, collectionBRatio, collectionCRatio, collector, + } = this.data; + if (!park || !(meter || sn) || !address || meterType == null || !building || !meterBox || ratio == null) { + alertInfo("请填写必填项后保存") + return; + } + 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, meterSn: meter, address, building, meterBox, meterType, + ratio, area, card, collectionA, collectionB, collectionC, + tenement, + sharp: sharp === "" ? null : sharp, + peak: peak === "" ? null : peak, + flat: flat === "" ? null : flat, + valley: valley === "" ? null : valley, + overall: overall === "" ? null : overall, + deepValley: deepValley == "" ? null : deepValley, + + url, sn, collector + }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("新增成功") + this.setData({ + park: null, + parkName: null, + }) + this.clearData() + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', + }) + }, + 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..bde7fde --- /dev/null +++ b/pages/workBenchNew/components/installMeter/index.wxml @@ -0,0 +1,227 @@ + + + + + + {{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/kaihu/index.js b/pages/workBenchNew/components/kaihu/index.js new file mode 100644 index 0000000..71d2b19 --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.js @@ -0,0 +1,149 @@ +// 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({ + + /** + * 页面的初始数据 + */ + 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, tenement } = 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}&id=${tenement}`, + }) + }, + 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, + }) + } + }, + /** + * 生命周期函数--监听页面加载 + */ + 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..ff351a5 --- /dev/null +++ b/pages/workBenchNew/components/kaihu/index.wxml @@ -0,0 +1,111 @@ + + + + + + 选择 + + + + + + + + + + 选择 + + + + + 选择 + + + + + + 保存 + 返回 + + + + \ 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/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..71d0d16 --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.js @@ -0,0 +1,194 @@ +// 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, + meterInfo: data, + }) + 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, meterInfo } = 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 , + tenement: meterInfo?.tenement, + }) + 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..ec5e587 --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.wxml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + 确认 + 清空 + + \ 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..c7e9761 --- /dev/null +++ b/pages/workBenchNew/components/recharge/index.wxss @@ -0,0 +1,17 @@ +/* pages/workBenchNew/components/recharge/index.wxss */ + + +.inputContent { + flex: 1; + margin-right: 10rpx; + display: flex; + padding: 0 20rpx; + border-radius: 12rpx; + border: 1rpx solid #ccc; + background-color: #fff; + position: relative; +} + +.text { + flex: 1; +} \ 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..5ee1d46 --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.js @@ -0,0 +1,302 @@ +// pages/workBenchNew/components/uninstallMeter/index.js +import { uninstallMeter, } from "../../../../service/meter"; +import dayjs from "../../../../utils/dayjs" +import request from "../../../../utils/request" +import { alertInfo, alertSuccess, loadingFunc, wxModal} from "../../../../utils/index" +import { uploadUninstallMeter } from "../../../../service/public" + +const { OK } = request; + +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, + meter: null, + meterInfo: null, + meterName: null, + }) + 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, + meterInfo: data, + }); + 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: "", + }) + }, + changeCritical(e) { + this.setData({ + critical: e.detail, + }) + }, + changePeak(e) { + this.setData({ + peak: e.detail, + }) + }, + changeFlat(e) { + this.setData({ + flat: e.detail, + }) + }, + changeValley(e) { + this.setData({ + valley: e.detail, + }) + }, + changeOverall(e) { + this.setData({ + overall: e.detail, + }) + }, + changeDeppValley(e) { + this.setData({ + deepOverall: e.detail, + }) + }, + async onSubmit() { + const { meter, reason, url, meterInfo, critical, peak, flat, valley, overall, deepOverall } = this.data; + if (!meter) { + alertInfo("请选择表号") + return; + } + if (!meterInfo?.tenement) { + const { code, message } = await uninstallMeter({sn: meter, images: url, reason, tenement: meterInfo.tenement, critical, peak, flat, valley, overall, deepOverall}) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("拆除成功") + setTimeout(() => { + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', + }) + }, 300) + return; + } + wx.showModal({ + title: '提示', + content: '拆出后电表和商户关系,电表和卡的关系会自动解绑,是否拆出', + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + const { code, message } = await uninstallMeter({sn: meter, images: url, reason, tenement: meterInfo.tenement, critical, peak, flat, valley, overall, deepOverall}) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("拆除成功") + setTimeout(() => { + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', + }) + }, 300) + return; + } + } + }) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(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 uploadUninstallMeter(tempFilePaths) + if (code !== OK) { + alertError(message) + return + } + that.setData({ + url: url + }) + }) + } + }) + }, + clearImage() { + this.setData({ + url: "" + }) + }, + showImage() { + this.setData({ + imageShow: true + }) + }, + onClose() { + this.setData({ + imageShow: false + }) + }, + 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..003c648 --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/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", + "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 new file mode 100644 index 0000000..a1bb62c --- /dev/null +++ b/pages/workBenchNew/components/uninstallMeter/index.wxml @@ -0,0 +1,125 @@ + + + + + + {{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/components/approve/index.js b/pages/workBenchNew/components/workBenchApprove/components/approve/index.js new file mode 100644 index 0000000..0a156f7 --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/approve/index.js @@ -0,0 +1,279 @@ +// pages/workBench/components/recharge/components/waitApprove/index.js +import { + alertInfo, + alertSuccess, + loadingFunc +} from "../../../../../../utils/index"; +import { + getRechargeApproveList, + rechargeApprove +} from "../../../../../../service/recharge" +import request from "../../../../../../utils/request" +import dayjs from "../../../../../../utils/dayjs" +const { + OK +} = request + +// pages/workBench/components/record/index.js +Component({ + + /** + * 组件的属性列表 + */ + properties: { + status: Number + }, + + /** + * 组件的初始数据 + */ + data: { + keyword: "", + keywordTemp: "", + page: 1, + currentActionSheet: null, + actionItems: [{ + name: '查看详细', + value: 'detail' + }], + }, + + lifetimes: { + attached() { + loadingFunc(async () => { + await this.init(); + }) + } + }, + /** + * 组件的方法列表 + */ + methods: { + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onConfirm(e) { + const { + data + } = e.detail; + const that = this; + this.setData({ + parkName: data.name, + park: data.id, + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + this.onCancel(); + }, + onSearchKeyword(e) { + const that = this; + that.setData({ + keyword: e.detail + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + }, + onChangeKeyword(e) { + this.setData({ + keywordTemp: e.detail + }) + }, + onSearch() { + const that = this; + that.setData({ + keyword: that.data.keywordTemp + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + }, + async init() { + const { + page, + keyword, + park, + status + } = this.data; + const { + code, + message, + data, + total + } = await getRechargeApproveList({ + park, + page, + keyword, + status + }) + if (code !== OK) { + alertInfo(message); + return; + } + this.setData({ + list: data.map(item => { + item.topTime = dayjs(item.topTime).format("MM-DD") + return item + }), + total: total, + totalPage: Math.ceil(total / 20) + }) + }, + onChangeReason(e) { + this.setData({ + reason: e.detail, + }) + }, + onApproveClose() { + this.setData({ + reason: "", + approveShow: false, + }) + }, + onApproveConfirm() { + const { + reason, + record + } = this.data; + const that = this; + if (!reason) { + alertInfo("请输入拒绝理由") + return; + } + loadingFunc(async () => { + const { + code, + message + } = await rechargeApprove({ + id: record, + status: 1, + reason + }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("已拒绝") + that.init(); + that.setData({ + reason: "", + approveShow: false, + record: "", + }) + }) + + }, + handleApprove(e) { + const status = e.currentTarget.dataset.status; + const that = this; + if (status === '1') { + this.setData({ + approveShow: true + }) + return; + } + const { + record, + list + } = this.data; + const item = list.find(ele => ele.id === record) + + wx.showModal({ + title: '提示', + content: `您确认要同意${item?.tenement?.shortName || 当前记录}吗?`, + complete: async (res) => { + if (res.cancel) { + + } + if (res.confirm) { + loadingFunc(async () => { + const { + code, + message + } = await rechargeApprove({ + id: record, + status: 0, + }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("已同意") + that.init(); + }) + + } + } + }) + }, + + showActionMenu(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({ + currentTarget: { + dataset: { + id + } + } + }); + } + }, + + jumpToDetail(e) { + const { + id + } = e.currentTarget.dataset; + wx.navigateTo({ + url: '/pages/rechargeDetail/index?id=' + id, + }) + }, + 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: "", + }) + }, + onChangeSelectRecharge(e) { + this.setData({ + record: e.detail + }) + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/components/approve/index.json b/pages/workBenchNew/components/workBenchApprove/components/approve/index.json new file mode 100644 index 0000000..145ec1b --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/approve/index.json @@ -0,0 +1,18 @@ +{ + "component": true, + "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-dialog": "@vant/weapp/dialog/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "van-icon": "@vant/weapp/icon/index", + "van-action-sheet": "@vant/weapp/action-sheet/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxml b/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxml new file mode 100644 index 0000000..6e2a30a --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxml @@ -0,0 +1,66 @@ + + + + + + + + + 同意 + 拒绝 + + + + + + + + 商户名字 + 充值金额 + 状态 + 提交时间 + 操作 + + + + + + + + + + {{ item.tenement.shortName }} + + + {{ item.money }} + + + {{item.orderStatus}} + + + {{item.topTime}} + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxss b/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxss new file mode 100644 index 0000000..641964d --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/approve/index.wxss @@ -0,0 +1,70 @@ +/* pages/workBench/components/recharge/components/waitApprove/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/workBenchNew/components/workBenchApprove/components/reharge/index.js b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.js new file mode 100644 index 0000000..c6ccf9b --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.js @@ -0,0 +1,152 @@ +// pages/workBench/components/recharge/components/reharge/index.js + +import { handleRecharge } from "../../../../../../service/recharge"; +import { alertInfo, alertSuccess, loadingFunc } from "../../../../../../utils/index"; +import request from '../../../../../../utils/request' +const { OK } = request; + +Component({ + + /** + * 组件的属性列表 + */ + properties: { + + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + 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) + }) + + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/components/reharge/index.json b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.json new file mode 100644 index 0000000..b387e17 --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "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" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxml b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxml new file mode 100644 index 0000000..c300e2b --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxml @@ -0,0 +1,50 @@ + + + + + + + + + + + + 确认 + 清空 + + diff --git a/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxss b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxss new file mode 100644 index 0000000..c33c12d --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/components/reharge/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/recharge/components/reharge/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/index.js b/pages/workBenchNew/components/workBenchApprove/index.js new file mode 100644 index 0000000..b2ba3c8 --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/index.js @@ -0,0 +1,72 @@ +// pages/workBenchNew/components/workBenchApprove/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + active: 0, + segmentedList: ['待审核', '已审核', '充值'], + }, + changeQueryType(e) { + const { type } = e.currentTarget.dataset; + this.setData({ + active: type + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/index.json b/pages/workBenchNew/components/workBenchApprove/index.json new file mode 100644 index 0000000..b9fefcf --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/index.json @@ -0,0 +1,12 @@ +{ + "usingComponents": { + "van-button": "@vant/weapp/button/index", + "segmented": "/components/Segmented/index", + "recharge": "./components/reharge/index", + "approve": "./components/approve/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/index", + "navigator": "/components/navigator/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/index.wxml b/pages/workBenchNew/components/workBenchApprove/index.wxml new file mode 100644 index 0000000..66420fb --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/index.wxml @@ -0,0 +1,18 @@ + + + + + + + 待审核 + + + 已审核 + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchApprove/index.wxss b/pages/workBenchNew/components/workBenchApprove/index.wxss new file mode 100644 index 0000000..cf8d8a0 --- /dev/null +++ b/pages/workBenchNew/components/workBenchApprove/index.wxss @@ -0,0 +1,27 @@ +/* pages/workBench/components/recharge/index.wxss */ +page { + background-color: rgb(228,240,236); + font-size: 32rpx; + } + + + .query { + margin: 20rpx 0rpx; + } + + .typeQueryText { + text-align: center; + padding: 20rpx; + background-color: var(--light-green); + font-size: 32rpx; + } + + .select { + border: 1rpx solid #ccc; + padding: 12rpx; + border-radius: 12rpx; + flex: 1; + display: flex; + justify-content: space-between; + font-size: 30rpx; + } \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchMeter/index.js b/pages/workBenchNew/components/workBenchMeter/index.js new file mode 100644 index 0000000..43e759e --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeter/index.js @@ -0,0 +1,218 @@ +// 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' + }) + }, + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onConfirm(e) { + const { data, type } = e.detail; + const that = this; + switch(type) { + case "park": + this.setData({ + parkName: data.name, + park: data.id, + }) + 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 }) + }, + 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/workBenchMeter/index.json b/pages/workBenchNew/components/workBenchMeter/index.json new file mode 100644 index 0000000..62b403a --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeter/index.json @@ -0,0 +1,19 @@ +{ + "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" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchMeter/index.wxml b/pages/workBenchNew/components/workBenchMeter/index.wxml new file mode 100644 index 0000000..37b1e35 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeter/index.wxml @@ -0,0 +1,102 @@ + + + + + + + + + + + 合闸 + 拉闸 + + + + + + + {{item.tenement.shortName}} + + {{item.tenement.name}} + + + + + + + + + 商户电表 + + 公摊电表 + + 园区电表 + 表号:{{item.meterNo}} + + + + + + + + {{item.address}} + + SN:{{item.meterSn}} + + + + + + + + 表字:{{item.amount}} + + 余额:{{item.money}} + + + + + + + + 合闸 + 拉闸 + 在线 + 失联 + + + + + + + + + + + + diff --git a/pages/workBenchNew/components/workBenchMeter/index.wxss b/pages/workBenchNew/components/workBenchMeter/index.wxss new file mode 100644 index 0000000..59a86ed --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeter/index.wxss @@ -0,0 +1,63 @@ +/* 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; + } diff --git a/pages/workBenchNew/components/workBenchMeterControl/index.js b/pages/workBenchNew/components/workBenchMeterControl/index.js new file mode 100644 index 0000000..9a5fe6d --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.js @@ -0,0 +1,267 @@ +// pages/workBenchNew/components/workBenchMeter/index.js + +import { alertInfo, alertSuccess, loadingFunc } from "../../../../utils/index"; +import { getParkMeterList, handleOperateMeterMode } from "../../../../service/meter" +import { uploadMeterForce } from "../../../../service/public" +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, + }) + }, + handleSubmit() { + const that = this; + const { mode, days, reason, meter, meterName, url } = this.data; + if (mode === 2 && days == null) { + alertInfo("请填写天数") + return; + } + wx.showModal({ + title: '提示', + content: `确定要对${meterName}进行${["预付费", "强控", "临时强控"][mode]}操作吗?`, + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + loadingFunc(async () => { + const { code, message } = await handleOperateMeterMode({ ids: [meter], mode, days: days == null ? undefined : Number(days), reason, images: url }) + if (code !== OK) { + alertInfo(message) + await that.init(); + return + } + alertSuccess("操作成功") + + await that.init(); + this.setData({ + mode: null, + modeName: null, + days: null, + reason: null, + url: null, + }) + }) + } + } + }) + }, + uploadImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(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 uploadMeterForce(tempFilePaths) + if (code !== OK) { + alertError(message) + return + } + that.setData({ + url: url + }) + }) + } + }) + }, + goback() { + wx.navigateBack(); + }, + 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 + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + 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..01fad66 --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.json @@ -0,0 +1,21 @@ +{ + "usingComponents": { + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "search-select": "/components/searchSelect/index", + "van-empty": "@vant/weapp/empty/index", + "van-image": "@vant/weapp/image/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..c057ffe --- /dev/null +++ b/pages/workBenchNew/components/workBenchMeterControl/index.wxml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + {{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/workBenchReading/index.js b/pages/workBenchNew/components/workBenchReading/index.js new file mode 100644 index 0000000..7cda274 --- /dev/null +++ b/pages/workBenchNew/components/workBenchReading/index.js @@ -0,0 +1,185 @@ +// pages/workBenchNew/components/workBenchReading/index.js +import { getMeterReadingRouteList, changeMeterRouteStatus, checkReadingFinish } from "../../../../service/workBench" +import { alertError, alertSuccess, loadingFunc } from "../../../../utils/index" +import request from "../../../../utils/request" +const { OK } = request + + +Page({ + + /** + * 页面的初始数据 + */ + data: { + park: "", + parkName: "", + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + async init() { + const { parkName, park } = this.data; + const { code, message, data } = await getMeterReadingRouteList(parkName) + if (code !== OK) { + alertError(message) + return + } + this.setData({ + list: data + }) + }, + onConfirm(e) { + const { data } = e.detail; + const that = this; + this.setData({ + parkName: data.name, + park: data.id, + }, () => { + loadingFunc(async () => { + await that.init(); + }) + }) + this.onConcal(); + }, + onConcal() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + jumpToReading(e) { + const { id, type } = e.currentTarget.dataset; + wx.navigateTo({ + url: `/pages/writeReading/index?id=${id}&type=${type}`, + }) + }, + async changeStartStatus(e) { + const that = this; + const { id, routeid: routeId } = e.currentTarget.dataset; + const { code, message } = await changeMeterRouteStatus({ id, status: 1, routeId }) + if (code !== OK) { + alertError(message) + return + } + alertSuccess("操作成功") + this.init() + setTimeout(() => { + that.jumpToReading({ currentTarget: { dataset: { id } } }) + }, 500) + }, + // async checkFinish(id) { + + // return {data, num}; + // }, + async changeEndStatus(e) { + const that = this; + wx.showModal({ + title: '提示', + content: '确认要结束吗?', + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + const { id, routeid: routeId } = e.currentTarget.dataset; + const { code, message, data, num } = await checkReadingFinish(id || this.data.routeId); + if (code !== OK) { + alertError(message) + return; + } + 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("操作成功") + that.init() + } + } + }) + + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.init() + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchReading/index.json b/pages/workBenchNew/components/workBenchReading/index.json new file mode 100644 index 0000000..d707c66 --- /dev/null +++ b/pages/workBenchNew/components/workBenchReading/index.json @@ -0,0 +1,17 @@ +{ + "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-dialog": "@vant/weapp/dialog/index", + "van-cell": "@vant/weapp/cell/index", + "navigator": "/components/navigator/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchReading/index.wxml b/pages/workBenchNew/components/workBenchReading/index.wxml new file mode 100644 index 0000000..f153059 --- /dev/null +++ b/pages/workBenchNew/components/workBenchReading/index.wxml @@ -0,0 +1,71 @@ + + + + + 选择 + + + + + + + + + + + 开始抄表 + 去抄表 + 结束抄表 + + + + + diff --git a/pages/workBenchNew/components/workBenchReading/index.wxss b/pages/workBenchNew/components/workBenchReading/index.wxss new file mode 100644 index 0000000..c6d9511 --- /dev/null +++ b/pages/workBenchNew/components/workBenchReading/index.wxss @@ -0,0 +1 @@ +/* pages/workBenchNew/components/workBenchReading/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js new file mode 100644 index 0000000..086d5a5 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.js @@ -0,0 +1,130 @@ +// pages/workBench/components/tenement/components/bindMeter/index.js +// 0015980101 +import { bindMeter, } from "../../../../../../service/tenement" +import { getWorkMeterDetail } from "../../../../../../service/meter" +import { alertInfo, alertSuccess } from "../../../../../../utils/index"; +import request from "../../../../../../utils/request" +import dayjs from "../../../../../../utils/dayjs" +const { OK } = request +Component({ + + /** + * 组件的属性列表 + */ + properties: { + tenement: String, + tenementName: String, + park: String, + visible: Boolean, + meterId: String, + }, + + /** + * 组件的初始数据 + */ + data: { + dateTimeShow: false, + }, + + /** + * 组件的方法列表 + */ + methods: { + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + onCancel() { + this.setData({ + show: false, + title: "", + type: "", + }) + // this.triggerEvent("close") + }, + onClose() { + this.setData({ + show: false, + title: "", + type: "", + }) + }, + onChange(e) { + const { name } = e.currentTarget.dataset; + this.setData({ + [name]: e.detail + }) + }, + async onSubmit() { + const { overall, critical, peak, valley, deepValley, park, tenement, meter, readAt, flat } = this.data; + const { code, message } = await bindMeter( + park, + tenement, + { + code: meter, + overall:overall? Number(overall) : (overall === "" ? null : overall), + critical : critical ? Number(critical) : (critical === "" ? null : critical), + peak: peak ? Number(peak) : (peak === "" ? null : peak), + flat: flat ? Number(flat) : (flat === "" ? null : flat), + valley : valley ? Number(valley) : (valley === "" ? null : valley), + deepValley: deepValley ? Number(deepValley) : (deepValley === "" ? null : deepValley), + readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss') + } + ) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("绑定成功") + this.triggerEvent("ok") + }, + onConfirm(e) { + const { type, data } = e.detail; + const that = this; + switch(type) { + case "meter": + this.setData({ + meter: data.id, + meterName: data.address, + show: false, + }) + this.getMeterDetail(data.id); + break; + } + }, + async getMeterDetail(id) { + const { code, message, data } = await getWorkMeterDetail(id) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + overall: 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, + deepValley: data?.deepValley ? Number(data?.deepValley || 0) : null, + meter04kvType: data?.meter04kvType, + status: data?.breakType ? '合闸' : "分闸", + }) + }, + dateTimeConfirm(e) { + this.setData({ readAt: e.detail.time, dateTimeShow: false }) + }, + dateTimeCancal(e) { + this.setData({ dateTimeShow: false }) + }, + onTimeFocus() { + this.setData({ dateTimeShow: true }) + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.json b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.json new file mode 100644 index 0000000..3c2b870 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "van-dialog": "@vant/weapp/dialog/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "date-time-picker": "/components/DateTimePicker/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml new file mode 100644 index 0000000..96d2d15 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxml @@ -0,0 +1,132 @@ + + + + + + + 选择 + + + + + + 选择 + + + + + + + + + + + + + + + diff --git a/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxss b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxss new file mode 100644 index 0000000..3fb490f --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/bindMeter/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/tenement/components/bindMeter/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.js b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.js new file mode 100644 index 0000000..da2774b --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.js @@ -0,0 +1,103 @@ +// pages/workBench/components/tenement/components/createTenement/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData(options) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + onBuildingFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "建筑", + type: 'building' + }) + }, + onFeeTypeFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "建筑", + type: 'building' + }) + }, + beforeBack() { + let pages = getCurrentPages(); // 获取当前页面栈 + let prevPage = pages[pages.length - 2]; // 获取上一页 + const { tenement = '', tenementName = '', park = '', parkName = '' } = this.data; + // 修改上一页的数据 + prevPage.setData({ + needBackShow: true, + tenement, + tenementName, + park, + parkName + }); + + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.json b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.json new file mode 100644 index 0000000..b97afff --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.json @@ -0,0 +1,8 @@ +{ + "usingComponents": { + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "navigator": "/components/navigator/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxml b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxml new file mode 100644 index 0000000..e1f06bb --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxml @@ -0,0 +1,74 @@ + + + + + + + + + + + 选择 + + + + + 选择 + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxss b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxss new file mode 100644 index 0000000..45f4ed9 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/createTenement/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/tenement/components/createTenement/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.js b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.js new file mode 100644 index 0000000..f51c36d --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.js @@ -0,0 +1,124 @@ +// pages/workBench/components/tenement/components/kaihu/index.js +import { alertInfo, alertSuccess } from "../../../../../../utils/index" +import { createBackTenement, updateTenementBackInfo } from "../../../../../../service/tenement" +import request from "../../../../../../utils/request" +import { payWays, feeType as feeTypeList } from "../../../../../../utils/data"; +const { OK } = request; +Component({ + + /** + * 组件的属性列表 + */ + properties: { + park: String, + visible: Boolean, + defaultValue: Object, + editType: String, + title: String, + }, + observers: { + 'defaultValue': function(defaultValue) { + const { fullName, shortName, phone, id, feeType, address, building, buildingName, contact,} = defaultValue; + this.setData({ + name: fullName, + shortName, + phone, id, feeType, address, building, buildingName, contact, + feeTypeName: feeTypeList[feeType] + }) + } + }, + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + onBuildingFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "建筑", + type: 'building' + }) + }, + onFeeTypeFocus() { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "收费类型", + type: 'feeType' + }) + }, + onConfirm(e) { + const { type, data, way } = e.detail; + switch(type) { + case "building": + this.setData({ + building: data.id, + buildingName: data.name, + show: false, + }) + return; + case "feeType": + this.setData({ + feeTypeName: data, + feeType: way, + show: false, + }) + } + }, + + onCancel() { + this.setData({ show: false }) + }, + onClose() { + this.triggerEvent("close") + }, + onChange(e) { + const { name } = e.currentTarget.dataset; + this.setData({ + [name]: e.detail + }) + }, + clear() { + this.setData({ + name: "", shortName: "", address: "", contact: "", phone: "", + building: "", feeType: "", buildingName: "", feeTypeName: "", id, + }) + }, + async onSubmit() { + const { name, shortName, address, contact, phone, building, feeType, park, editType, id } = this.data; + if (editType === "add") { + const { code, message } = await createBackTenement(park, { name, shortName, address, contact, phone, building, feeType }) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("开户成功") + this.triggerEvent("ok") + return; + } + const { code, message } = await updateTenementBackInfo(park, id, { name, shortName, address, contact, phone, building, feeType }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("编辑成功") + this.triggerEvent("ok") + } + }, + +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.json b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.json new file mode 100644 index 0000000..f5d5fc8 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "navigator": "/components/navigator/index", + "van-dialog": "@vant/weapp/dialog/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxml b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxml new file mode 100644 index 0000000..04ff43a --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxml @@ -0,0 +1,100 @@ + + + + + + + + + + + 选择 + + + + + 选择 + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxss b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxss new file mode 100644 index 0000000..d4caef1 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/kaihu/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/tenement/components/kaihu/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.js b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.js new file mode 100644 index 0000000..883c9e5 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.js @@ -0,0 +1,109 @@ +// pages/workBench/components/tenement/components/bindMeter/index.js + +import { unbindMeter, } from "../../../../../../service/tenement" +import request from "../../../../../../utils/request" +import { alertInfo, alertSuccess } from "../../../../../../utils/index"; +const { OK } = request +import { getWorkMeterDetail } from "../../../../../../service/meter" +import dayjs from "../../../../../../utils/dayjs" + +Component({ + + /** + * 组件的属性列表 + */ + properties: { + tenement: String, + park: String, + tenementName: String, + meterId: String, + meterAddress: String, + visible:Boolean, + }, + observers: { + "meterId": function(newValue) { + this.getMeterDetail(newValue) + } + }, + /** + * 组件的初始数据 + */ + data: { + dateTimeShow: false + }, + + /** + * 组件的方法列表 + */ + methods: { + onMeterFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "电表", + type: 'meter' + }) + }, + async getMeterDetail(id) { + const { code, message, data } = await getWorkMeterDetail(id) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + overall: 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, + deepValley: data?.deepValley ? Number(data?.deepValley || 0) : null, + meter04kvType: data?.meter04kvType, + status: data?.breakType ? '合闸' : "分闸" + }) + }, + onClose() { + this.triggerEvent("close") + }, + onChange(e) { + const { name } = e.currentTarget.dataset; + this.setData({ + [name]: e.detail + }) + }, + async onSubmit() { + const { overall, critical, peak, valley, deepValley, park, tenement, meterId,readAt, flat } = this.data; + const { code, message, } = await unbindMeter( + park, + tenement, + meterId, + { + overall:overall? Number(overall) : (overall === "" ? null : overall), + critical : critical ? Number(critical) : (critical === "" ? null : critical), + peak: peak ? Number(peak) : (peak === "" ? null : peak), + flat: flat ? Number(flat) : (flat === "" ? null : flat), + valley : valley ? Number(valley) : (valley === "" ? null : valley), + deepValley: deepValley ? Number(deepValley) : (deepValley === null ? "" : deepValley), + readAt: readAt || dayjs().format('YYYY-MM-DD HH:mm:ss') + }); + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("解绑成功") + this.triggerEvent("ok") + }, + dateTimeConfirm(e) { + this.setData({ readAt: e.detail.time, dateTimeShow: false }) + }, + dateTimeCancal(e) { + this.setData({ dateTimeShow: false }) + }, + onTimeFocus() { + this.setData({ dateTimeShow: true }) + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.json b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.json new file mode 100644 index 0000000..3c2b870 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "van-dialog": "@vant/weapp/dialog/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "date-time-picker": "/components/DateTimePicker/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxml b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxml new file mode 100644 index 0000000..4c225f3 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxml @@ -0,0 +1,110 @@ + + + + + + + + 选择 + + + + + + + + + + + + + diff --git a/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxss b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxss new file mode 100644 index 0000000..3fb490f --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/components/unBindMeter/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/tenement/components/bindMeter/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/index.js b/pages/workBenchNew/components/workBenchTenement/index.js new file mode 100644 index 0000000..99faf2e --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/index.js @@ -0,0 +1,242 @@ +// pages/workBenchNew/components/workBenchTenement/index.js +import { alertInfo, alertSuccess } from "../../../../utils/index"; +import { getTenementBackInfo, unbindMeter, } from "../../../../service/tenement" +import { getBackTenementMeters, } from "../../../../service/meter" +import request from "../../../../utils/request" +const { OK } = request + +Page({ + + /** + * 页面的初始数据 + */ + data: { + defaultValue: {}, + editType: "", + meterList: [], + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + const { park, parkName, name, id } = options + this.setData({ + park, + parkName, + tenementName: name, + tenement: id + }) + if (id) { + this.getTenementInfo(); + } + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onTenementFocus(e) { + const { park } = this.data; + const that = this; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "商户", + type: 'tenement' + }) + }, + async init() { + + }, + async getTenementInfo() { + const { tenement, park } = this.data; + if (!tenement || !park) { + return; + } + const { code, message, tenement: data } = await getTenementBackInfo(park, tenement) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + tenementInfo: data, + }) + }, + onConfirm(e) { + const { type, data } = e.detail; + const that = this; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + show: false, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + show: false, + } , () => { + that.getTenementInfo(); + that.getTenementMeters(); + }) + break; + } + }, + onCancel() { + this.setData({ + show: false, + }) + }, + startKh() { + this.setData({ + kaihuVisible: true, + editType: "add", + title: "开户", + defaultValue: { feeType: 0, feeTypeName: "华昌宝能收费" } + }) + }, + startUpdateInfo() { + const { tenementInfo } = this.data; + this.setData({ + kaihuVisible: true, + defaultValue: tenementInfo, + editType: "update", + title: "开户" + }) + }, + async getTenementMeters() { + const { park, tenement } = this.data; + const { code, message, data } = await getBackTenementMeters(park, tenement) + if (code !== OK) { + alertInfo(message) + return + } + this.setData({ meterList: data }); + }, + onKaihuClose() { + this.setData({ + kaihuVisible: false, + defaultValue: {}, + title: "编辑", + editType: "", + }) + }, + onBindClose() { + this.setData({ + bindVisible: false, + }) + }, + async onKaihuConfirm() { + this.getTenementInfo(); + this.onKaihuClose(); + }, + unbind(e) { + const that = this; + const { park, tenement } = this.data; + const { address, id } = e.currentTarget.dataset; + this.setData({ + unbindVisible: true, + meterId: id, + meterAddress: address + }) + // wx.showModal({ + // title: '提示', + // content: `确认要解绑${address}吗?`, + // complete: async (res) => { + // if (res.cancel) { + + // } + + // if (res.confirm) { + // const { code, message, } = await unbindMeter(park, tenement, id); + // if (code !== OK) { + // alertInfo(message) + // return + // } + // alertSuccess("解绑成功") + // that.getTenementMeters(); + // return + // } + // } + // }) + }, + onUnbindOk() { + this.setData({ + unbindVisible: false, + meterId: "", + meterAddress: "", + }) + this.getTenementMeters(); + }, + startBind() { + this.setData({ + bindVisible: true + }) + }, + onBindOk() { + this.setData({ + bindVisible: false, + }) + this.getTenementMeters(); + }, + onTimeConfirm(e) { + + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/index.json b/pages/workBenchNew/components/workBenchTenement/index.json new file mode 100644 index 0000000..b965871 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/index.json @@ -0,0 +1,16 @@ +{ + "usingComponents": { + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "search-select": "/components/searchSelect/index", + "van-empty": "@vant/weapp/empty/index", + "kaihu": "./components/kaihu/index", + "bindMeter": "./components/bindMeter/index", + "unBindMeter": "./components/unBindMeter/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/index", + "navigator": "/components/navigator/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchTenement/index.wxml b/pages/workBenchNew/components/workBenchTenement/index.wxml new file mode 100644 index 0000000..bf34e00 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/index.wxml @@ -0,0 +1,138 @@ + + + + + + + + + 绑定电表 + 修改信息 + + 开户 + + + + + + + + + + + {{tenementInfo.shortName}} + {{tenementInfo.fullName}} + + + 华昌宝能收费 + 物业代收1 + 物业代收2 + 物业代收线损 + {{tenementInfo.contact}} {{tenementInfo.phone}} + + + + + + + + + + + + + + + + + + + {{ item.address }} + {{ item.meterSn }} + + + 解绑 + + + + + + + + + + + + + + + + diff --git a/pages/workBenchNew/components/workBenchTenement/index.wxss b/pages/workBenchNew/components/workBenchTenement/index.wxss new file mode 100644 index 0000000..09f3390 --- /dev/null +++ b/pages/workBenchNew/components/workBenchTenement/index.wxss @@ -0,0 +1,70 @@ +/* pages/workBench/components/tenement/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 .tr { + padding: 20rpx; + box-sizing: border-box; + display: flex; + align-items: center; + flex-wrap: nowrap; +} + +.tbody .th { + word-break: break-all; + text-align: center; +} + +.primaryTextBtn { + color: #1989fa; +} + + +.customTable { + margin: 20rpx; + font-size: 32rpx; +} + +.customTableTile { + background-color: var(--light-green); + box-sizing: border-box; + font-weight: 700; +} + +.tableTitleRow { + padding: 16rpx; +} + +.tableRow { + + padding: 16rpx; + border: 1rpx solid #ccc; + border-top: 0rpx; + font-size: 32rpx; +} + +page { + background-color: rgb(228,240,236); + font-size: 32rpx; + } \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.js b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.js new file mode 100644 index 0000000..3fcc8dd --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.js @@ -0,0 +1,74 @@ +import { alertInfo, alertSuccess } from "../../../../../../utils/index"; +import { createTenementWxUser } from "../../../../../../service/tenement"; +import request from "../../../../../../utils/request" +const { OK } = request +// pages/workBench/components/account/components/editModal/index.js +Component({ + + /** + * 组件的属性列表 + */ + properties: { + type: String, + title: String, + visible: Boolean, + onCancel: Function, + park: String, + tenement: String, + parentPhone:String, + parentName:String, + parentId:String, + }, + observers: { + "parentName,parentId,parentPhone": function(newName, newId, newPhone) { + this.setData({ data: { name: newName, id: newId, phone: newPhone } }) + }, + }, + /** + * 组件的初始数据 + */ + data: { + data: { name: "", phone: "", id: "" } + }, + + /** + * 组件的方法列表 + */ + methods: { + async onSubmit() { + const { data = {}, tenement, park, type } = this.data; + if (!data.phone) { + alertInfo("请输入手机号") + return + } + if (!data.name) { + alertInfo("请输入昵称") + return + } + const { code, message } = await createTenementWxUser({ ...data, tenement, park }) + if (code !== OK) { + alertInfo(message) + this.triggerEvent("cancel") + return; + } + alertSuccess("操作成功") + this.triggerEvent("ok") + this.setData({ data: {} }) + return; + + + }, + onChange(e) { + const { name } = e.currentTarget.dataset; + const newData = this.data.data; + newData[name] = e.detail; + this.setData({ + data: newData, + }) + }, + onCancel() { + this.setData({ data: {} }) + this.triggerEvent("cancel") + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.json b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.json new file mode 100644 index 0000000..953d7ac --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-dialog": "@vant/weapp/dialog/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxml b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxml new file mode 100644 index 0000000..cbf0761 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxml @@ -0,0 +1,34 @@ + + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxss b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxss new file mode 100644 index 0000000..5ddf238 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/editModal/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/account/components/editModal/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.js b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.js new file mode 100644 index 0000000..6c15979 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.js @@ -0,0 +1,68 @@ +// pages/workBench/components/account/components/updatePhoneModa/index.js +import { alertInfo, alertSuccess } from "../../../../../../utils/index"; +import { updateAdminPhone } from "../../../../../../service/tenement"; +import request from "../../../../../../utils/request" +const { OK } = request +Component({ + + /** + * 组件的属性列表 + */ + properties: { + type: String, + title: String, + visible: Boolean, + onCancel: Function, + park: String, + tenement: String, + parentPhone:String, + parentName:String, + parentId:String, + }, + observers: { + "parentPhone": function (newPhone) { + this.setData({ phone: newPhone }) + } + }, + /** + * 组件的初始数据 + */ + data: { + phone: "", + }, + + /** + * 组件的方法列表 + */ + methods: { + async onSubmit() { + const { phone, tenement, park, type } = this.data; + if (!phone) { + alertInfo("请输入手机号") + return + } + const { code, message } = await updateAdminPhone({tenement, phone: phone }) + if (code !== OK) { + alertInfo(message) + this.triggerEvent("cancel") + return; + } + alertSuccess("操作成功") + this.triggerEvent("ok") + this.setData({ phone: "" }) + return; + + + }, + onChange(e) { + + this.setData({ + phone: e.detail, + }) + }, + onCancel() { + this.setData({ phone: "" }) + this.triggerEvent("cancel") + } + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.json b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.json new file mode 100644 index 0000000..953d7ac --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-dialog": "@vant/weapp/dialog/index", + "search-select": "/components/searchSelect/index", + "van-field": "@vant/weapp/field/index" + } +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxml b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxml new file mode 100644 index 0000000..b222848 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxss b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxss new file mode 100644 index 0000000..d296a65 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/components/updatePhoneModal/index.wxss @@ -0,0 +1 @@ +/* pages/workBench/components/account/components/updatePhoneModa/index.wxss */ \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/index.js b/pages/workBenchNew/components/workBenchWxUser/index.js new file mode 100644 index 0000000..7525b41 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/index.js @@ -0,0 +1,224 @@ +// pages/workBenchNew/components/workBenchWxUser/index.js +import request from "../../../../utils/request" +import { getTenementBackInfo, updateUserApp} from "../../../../service/tenement" +import { getBackApproveList, removeUser } from "../../../../service/user" +import { alertInfo, alertSuccess, wxModal } from "../../../../utils/index" +const { OK } = request + +Page({ + + /** + * 页面的初始数据 + */ + data: { + list: [], + tenementInfo: {}, + }, + onParkFocus(e) { + this.setData({ + show: true, + title: "园区", + type: 'park' + }) + }, + onTenementFocus(e) { + const { park } = this.data; + if (!park) { + alertInfo("请先选择园区") + return; + } + this.setData({ + show: true, + title: "商户", + type: 'tenement' + }) + }, + onConfirm(e) { + const that = this; + const { type, data } = e.detail; + switch(type) { + case "park": + this.setData({ + park: data.id, + parkName: data.name, + show: false, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + show: false, + }, () => { + that.initUserList(); + that.getTenementInfo(); + }) + break; + } + }, + async setAdmin(e) { + const { id, name } = e.currentTarget.dataset; + const { tenement } = this.data; + await wxModal({ content: `确认要将${name}设置为管理吗?` }) + const { code, message } = await updateUserApp({ userId: id, type: 2, tenement: tenement }) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("转交成功") + this.initUserList(); + this.getTenementInfo(); + }, + onCancel() { + this.setData({ + show: false, + }) + }, + handleDelete(e) { + const { id, name } = e.currentTarget.dataset; + const { tenement } = this.data; + const that = this; + wx.showModal({ + title: '提示', + content: `确认要移除${name}吗?`, + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + const { code, message } = await removeUser(id, tenement) + if (code !== OK) { + alertInfo(message) + return; + } + alertSuccess("删除成功") + that.initUserList(); + } + } + }) + }, + onEditConfirm() { + this.initUserList() + this.handleCancel(); + }, + onUpdatePhoneConfirm() { + this.setData({ parentPhone: "", phone: "", type: "", title: "" }) + this.getTenementInfo(); + this.initUserList() + }, + async getTenementInfo() { + const { tenement, park } = this.data; + const { code, message, tenement: data } = await getTenementBackInfo(park, tenement) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + tenementInfo: data, + }) + }, + async initUserList() { + const { tenement } = this.data; + const { code, message, data } = await getBackApproveList(tenement, 1); + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + list: data, + }) + }, + handleAddSon() { + this.setData({ + visible: true, + type: "add", + title: "新建子账号" + }) + }, + handleChangeMain() { + const { tenementInfo = {} } = this.data; + this.setData({ + updatePhoneVisible: true, + type: "update", + title: "编辑管理员", + parentPhone: tenementInfo.phone, + // name: main.WechatUserName, + // id: main.WechatUserID, + }) + }, + handleUpdatePhoneCancel() { + this.setData({ + updatePhoneVisible: false, + type: "", + phone: "", + parentPhone: "", + name: "", + id: "", + }) + }, + handleCancel() { + this.setData({ + visible: false, + type: "", + phone: "", + name: "", + id: "", + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/index.json b/pages/workBenchNew/components/workBenchWxUser/index.json new file mode 100644 index 0000000..654f431 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/index.json @@ -0,0 +1,22 @@ +{ + "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", + "edit-modal": "./components/editModal/index", + "updatePhoneModal": "./components/updatePhoneModal/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/index", + "searchSelectWrapper": "/components/searchSelectWrapper/index", + "van-image": "@vant/weapp/image/index", + "navigator": "/components/navigator/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/index.wxml b/pages/workBenchNew/components/workBenchWxUser/index.wxml new file mode 100644 index 0000000..3e43d29 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/index.wxml @@ -0,0 +1,143 @@ + + + + + + + + + + 添加子账号 + 修改主账号 + + + + + + + + + + {{tenementInfo.shortName}} + {{tenementInfo.fullName}} + + + + + + + + + + 华昌宝能收费 + 物业代收1 + 物业代收2 + 物业代收线损 + {{tenementInfo.contact}} {{tenementInfo.phone}} + + + + + + + + + + + + + + + {{ item.WechatUserName }} + {{ item.WechatPhone }} + + + + + + + + + + + + 管理员 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/workBenchNew/components/workBenchWxUser/index.wxss b/pages/workBenchNew/components/workBenchWxUser/index.wxss new file mode 100644 index 0000000..007d999 --- /dev/null +++ b/pages/workBenchNew/components/workBenchWxUser/index.wxss @@ -0,0 +1,71 @@ +/* pages/workBench/components/account/index.wxss */ + +.operateBox { + margin: 20rpx; +} + +.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; + +} + + +.tr { + display: flex; + align-items: center; + flex-wrap: nowrap; +} + +.tbody .th { + word-break: break-all; + text-align: center; +} +.primaryTextBtn { + color: #1989fa; + display: inline-block; +} + +.customTable { + margin: 20rpx; + font-size: 32rpx; +} + +.customTableTile { + background-color: var(--light-green); + box-sizing: border-box; +} + +.tableTitleRow { + padding: 16rpx; + font-weight: 700; +} + +.tableRow { + padding: 16rpx; + border: 1rpx solid #ccc; + border-top: 0rpx; +} + +page { + background-color: rgb(228,240,236); + font-size: 32rpx; + } \ No newline at end of file diff --git a/pages/workBenchNew/index.js b/pages/workBenchNew/index.js new file mode 100644 index 0000000..dfec314 --- /dev/null +++ b/pages/workBenchNew/index.js @@ -0,0 +1,142 @@ +// pages/workBench/index.js +import { getWorkBenchHome } from "../../service/workBench" +import { alertError, alertSuccess, loadingFunc } from "../../utils/index" +import request from "../../utils/request" +const { OK } = request + +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.init() + const user = wx.getStorageSync('user') + this.setData({ + workStatus: !!user.workStatus + }) + }, + async init() { + const { code, message, data } = await getWorkBenchHome() + if (code !== OK) { + alertError(message) + return + } + this.setData({ data }) + }, + jumpToMeter() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchMeter/index', + }) + }, + jumpToTenement() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchTenement/index', + }) + }, + jumpToPay() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchApprove/index', + }) + }, + jumpToWxUser() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchWxUser/index', + }) + }, + jumpToRoute() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchReading/index', + }) + }, + jumpToHome() { + wx.switchTab({ + 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', + }) + }, + jumpToKaihu() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/kaihu/index', + }) + }, + jumpToMeterControl() { + wx.navigateTo({ + url: '/pages/workBenchNew/components/workBenchMeterControl/index', + }) + }, + workOrder() { + wx.navigateTo({ + url: '/pages/workBenchTodoList/index', + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/workBenchNew/index.json b/pages/workBenchNew/index.json new file mode 100644 index 0000000..abce341 --- /dev/null +++ b/pages/workBenchNew/index.json @@ -0,0 +1,10 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-row": "@vant/weapp/row/index", + "van-col": "@vant/weapp/col/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 new file mode 100644 index 0000000..ec91b45 --- /dev/null +++ b/pages/workBenchNew/index.wxml @@ -0,0 +1,138 @@ + + + + + + + 通用操作 + + + + + + + + + + + + + + + + + + + + + + + 现场操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 回到首页 + + \ No newline at end of file diff --git a/pages/workBenchNew/index.wxss b/pages/workBenchNew/index.wxss new file mode 100644 index 0000000..c220f08 --- /dev/null +++ b/pages/workBenchNew/index.wxss @@ -0,0 +1,48 @@ +/* pages/workBench/index.wxss */ + +.wrapper { + margin:20rpx 0rpx; +} + +.contentWrapper { + background-color: white; + width: 100%; + margin-bottom: 24rpx; +} + +.image { + padding: 50rpx 0; + display: flex; + justify-content: center; +} + +.title { + font-size: 32rpx; + font-weight: 600; + /* margin-top: 30rpx; */ + margin-bottom: 20rpx; + text-align: center; +} + +.number { + font-size: 40rpx; + font-weight: 700; + color: var(--deep-green); + text-align: center; + padding-bottom: 30rpx; +} + +.imageContent { + width: 100rpx; + height: 100rpx; + border-radius: 12rpx; + background-color: var(--light-green); +} + +page { + background-color: rgb(242,243,245); +} + +.operate { + padding-bottom: 24rpx; +} \ No newline at end of file diff --git a/pages/workBenchTodoList/index.js b/pages/workBenchTodoList/index.js new file mode 100644 index 0000000..51ea683 --- /dev/null +++ b/pages/workBenchTodoList/index.js @@ -0,0 +1,295 @@ +// pages/workBenchTodoList/index.js +import request from "../../utils/request" +import { getWorkOrderList, doNoticeFlow } from "../../service/workBench" +import { alertInfo, alertSuccess, loadingFunc } from "../../utils/index"; +import { noticeFlowType as noticeFlowTypeList } from "../../utils/data" +const { OK } = request +Page({ + + /** + * 页面的初始数据 + */ + data: { + page: 1, + size: 20, + noticeFlowTypeList, + actionItems: [{ + name: '详情', + value: 'detail' + }], + }, + showActionMenu(e) { + const { id, status } = e.currentTarget.dataset; + this.setData({ + currentActionSheet: id, + actionItems: status === 0 ? [{ + name: '详情', + value: 'detail' + }, { + name: '确认', + value: 'ok' + }] : [{ + name: '详情', + value: 'detail' + }] + }); +}, +onClearPark() { + const that = this; + this.setData({ park: "", parkName: "", meter: "", meterName: "" }, () => { + loadingFunc(async () => { + await that.init() + }) + }) +}, +onClearMeter() { + const that = this; + this.setData({ meter: "", meterName: "" }, () => { + loadingFunc(async () => { + await that.init() + }) + }) +}, +onClearType() { + const that = this; + this.setData({ noticeFlowType: "", noticeFlowTypeName: "" }, () => { + loadingFunc(async () => { + await that.init() + }) + }) +}, +onClearStatus() { + const that = this; + this.setData({ noticeFlowStatus: "", noticeFlowStatusName: "" }, () => { + loadingFunc(async () => { + await that.init() + }) + }) +}, +hideActionMenu() { + this.setData({ + currentActionSheet: "" + }); +}, +onMenuSelect(e) { + const { + value + } = e.detail; + const id = e.currentTarget.dataset.id; + + switch(value) { + case "detail": + this.jumpToDetail(id); + break; + case "ok": + this.handleDoNotice(id); + break; + } +}, +handleDoNoticeBtn(e) { + const id = e.currentTarget.dataset.id; + this.handleDoNotice(id) +}, + async handleDoNotice(id) { + const { code, message } = await doNoticeFlow(id) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("确认成功") + const that = this; + setTimeout(() => { + that.init(); + }, 300) + }, + jumpToDetail(id) { + + wx.navigateTo({ + url: '/pages/workOrderDetail/index?id=' + id, + }) + }, + listJumpToDetail(e) { + const { id } = e.currentTarget.dataset; + wx.navigateTo({ + url: '/pages/workOrderDetail/index?id=' + id, + }) + }, + onConfirm(e) { + const { type, data = {}, way } = e.detail; + const that = this; + switch(type) { + case "park": + this.setData({ + park: data?.id, + parkName: data?.name, + }) + break; + case "tenement": + this.setData({ + tenement: data.id, + tenementName: data.name, + }) + break; + + case "noticeFlowType": + this.setData({ + noticeFlowType: way, + noticeFlowTypeName: data, + page: 1, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }); + break; + case "noticeFlowStatus": + this.setData({ + noticeFlowStatus: way, + noticeFlowStatusName: data, + page: 1, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }); + break; + case "workOrderMeter": + this.setData({ + meter: data?.meter_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: 'workOrderMeter' + }) + }, + onChangePage(e) { + const that = this; + this.setData({ + page: e.detail.currentIndex, + }, () => { + loadingFunc(async () => { + await that.init() + }) + }) + }, + async init() { + 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; + } + this.setData({ + list: Array.isArray(data) ? 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) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + loadingFunc(async () => { + await this.init() + }) + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + 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..8705131 --- /dev/null +++ b/pages/workBenchTodoList/index.json @@ -0,0 +1,23 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-field": "@vant/weapp/field/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-button": "@vant/weapp/button/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 new file mode 100644 index 0000000..7cdcb55 --- /dev/null +++ b/pages/workBenchTodoList/index.wxml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + 时间 + 类型 + 电表地址 + 状态 + 操作 + + + + + + + {{ item.time }} + + + {{ noticeFlowTypeList[item.types - 1] }} + + + + {{ item.address }} + + + 确认 + 已确认 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages/workBenchTodoList/index.wxss b/pages/workBenchTodoList/index.wxss new file mode 100644 index 0000000..ea6fa96 --- /dev/null +++ b/pages/workBenchTodoList/index.wxss @@ -0,0 +1,71 @@ +/* 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..f6e279e --- /dev/null +++ b/pages/workOrderDetail/index.js @@ -0,0 +1,119 @@ +import { loadingFunc, alertSuccess, alertInfo } from "../../utils/index"; +import request from "../../utils/request" +import { getNoticeFlowDetail, doNoticeFlow } from "../../service/workBench" + +const { OK } = request; + +// pages/workOrderDetail/index.js +Page({ + /** + * 页面的初始数据 + */ + data: { + detail: {}, + header: [ + // { key: 'address', title: '电表地址', renderBody: (item) => item.meter?.address }, + { title: '操作人',renderBody: (item) => { return item.user_name } }, + { title: '状态',renderBody: (item) => { return item.status === 0 ? "未确认" : "已确认" } }, + ], + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + const { id } = options; + const that = this; + loadingFunc(async () => { + that.getDetail(id) + }) + }, + showImage() { + this.setData({ + imageShow: true + }) + }, + onClose() { + this.setData({ + imageShow: false + }) + }, + goback() { + wx.navigateBack(); + }, + async onSubmit() { + const {detail} = this.data; + const {id} = detail; + const { code, message } = await doNoticeFlow(id) + if (code !== OK) { + alertInfo(message) + return + } + alertSuccess("确认成功") + const that = this; + setTimeout(() => { + loadingFunc(async () => { + await that.getDetail(id) + }) + }, 300) + + }, + async getDetail(id) { + const { code, data ,message } = await getNoticeFlowDetail(id) + if (code !== OK) { + alertInfo(message) + return; + } + this.setData({ + detail: data + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + 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..653d399 --- /dev/null +++ b/pages/workOrderDetail/index.json @@ -0,0 +1,11 @@ +{ + "usingComponents": { + "navigator": "/components/navigator/index", + "van-popup": "@vant/weapp/popup/index", + "van-field": "@vant/weapp/field/index", + "van-button": "@vant/weapp/button/index", + "custom-table": "/components/table/table", + "van-image": "@vant/weapp/image/index" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/workOrderDetail/index.wxml b/pages/workOrderDetail/index.wxml new file mode 100644 index 0000000..cedf8dc --- /dev/null +++ b/pages/workOrderDetail/index.wxml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + - + + + + + + + + + + + + + 确认 + 返回 + + + + + + + + \ No newline at end of file diff --git a/pages/workOrderDetail/index.wxss b/pages/workOrderDetail/index.wxss new file mode 100644 index 0000000..112aa5a --- /dev/null +++ b/pages/workOrderDetail/index.wxss @@ -0,0 +1,16 @@ +/* pages/workOrderDetail/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/writeReading/components/meterInfo/index.js b/pages/writeReading/components/meterInfo/index.js index 355005b..be37581 100644 --- a/pages/writeReading/components/meterInfo/index.js +++ b/pages/writeReading/components/meterInfo/index.js @@ -6,6 +6,8 @@ Component({ */ properties: { meterInfo: Object, + routeId: String, + disabled: Boolean, }, /** @@ -19,6 +21,11 @@ Component({ * 组件的方法列表 */ methods: { - + jumpToHistory() { + const { meterInfo, routeId, disabled } = this.data; + wx.navigateTo({ + url: `/pages/readingHistory/index?meter=${meterInfo?.id}&park=${meterInfo?.parkId}&routeId=${routeId}&disabled=${disabled}`, + }) + }, } }) \ No newline at end of file diff --git a/pages/writeReading/components/meterInfo/index.json b/pages/writeReading/components/meterInfo/index.json index 5ec888c..8fe022d 100644 --- a/pages/writeReading/components/meterInfo/index.json +++ b/pages/writeReading/components/meterInfo/index.json @@ -3,6 +3,7 @@ "usingComponents": { "van-tag": "@vant/weapp/tag/index", "van-row": "@vant/weapp/row/index", - "van-col": "@vant/weapp/col/index" + "van-col": "@vant/weapp/col/index", + "van-button": "@vant/weapp/button/index" } } \ No newline at end of file diff --git a/pages/writeReading/components/meterInfo/index.wxml b/pages/writeReading/components/meterInfo/index.wxml index 8321adf..ee25922 100644 --- a/pages/writeReading/components/meterInfo/index.wxml +++ b/pages/writeReading/components/meterInfo/index.wxml @@ -1,15 +1,24 @@ - - 电表列表 + + 电表详情 + + + + 历史记录 + + - 标1东-307 + {{ meterInfo.address }} - 华昌宝能收费 + 物业代收1 + 物业代收2 + 物业代收线损 + 华昌宝能收费 @@ -17,7 +26,7 @@ - + 编号 @@ -27,7 +36,7 @@ - + 类型 @@ -43,24 +52,26 @@ - - 状态 + + 建筑 - + + {{ meterInfo.buildingName || "-" }} - - 读数 + + 楼层 - {{meterInfo.overall}} + {{ meterInfo.floor || "-" }} + diff --git a/pages/writeReading/components/meterInfo/index.wxss b/pages/writeReading/components/meterInfo/index.wxss index 311201b..acbe1a1 100644 --- a/pages/writeReading/components/meterInfo/index.wxss +++ b/pages/writeReading/components/meterInfo/index.wxss @@ -20,6 +20,15 @@ .info .title .address { font-size: 36rpx; font-weight: 800; + flex: 1; + margin-right: 24rpx; + word-break: break-all; +} + +.info .title .meterType { + display: flex; + justify-content: end; + width: 180rpx; } .info .detail { @@ -30,4 +39,12 @@ display: flex; justify-content: space-between; font-size: 30rpx; +} + +.wrapper > .title { + font-size: 32rpx; +} + +.titleText { + color: rgb(150, 137, 137); } \ No newline at end of file diff --git a/pages/writeReading/components/meterList/components/meterItem/index.js b/pages/writeReading/components/meterList/components/meterItem/index.js index 8295f38..a34d5fa 100644 --- a/pages/writeReading/components/meterList/components/meterItem/index.js +++ b/pages/writeReading/components/meterList/components/meterItem/index.js @@ -6,7 +6,8 @@ Component({ */ properties: { active: Boolean, - meter: Object + meter: Object, + status: Number, }, observers: { "active": function (newValue) { diff --git a/pages/writeReading/components/meterList/components/meterItem/index.wxml b/pages/writeReading/components/meterList/components/meterItem/index.wxml index e097bcc..bc1bf49 100644 --- a/pages/writeReading/components/meterList/components/meterItem/index.wxml +++ b/pages/writeReading/components/meterList/components/meterItem/index.wxml @@ -1,4 +1,4 @@ - + {{meter.meterAddress}} \ No newline at end of file diff --git a/pages/writeReading/components/meterList/components/meterItem/index.wxss b/pages/writeReading/components/meterList/components/meterItem/index.wxss index c0decfc..f39e216 100644 --- a/pages/writeReading/components/meterList/components/meterItem/index.wxss +++ b/pages/writeReading/components/meterList/components/meterItem/index.wxss @@ -19,6 +19,10 @@ } .deepBg { - background-color: var(--deep-green); + background-color: var(--deep-green) !important; color: white; +} + +.done { + background-color: #ccc; } \ No newline at end of file diff --git a/pages/writeReading/components/meterList/index.js b/pages/writeReading/components/meterList/index.js index c63547a..9c42753 100644 --- a/pages/writeReading/components/meterList/index.js +++ b/pages/writeReading/components/meterList/index.js @@ -12,7 +12,8 @@ Component({ properties: { list: Array, active: Number, - meterInfo: Object + meterInfo: Object, + finishNumber: Number, }, observers: { "active,list": function(newActive, newList) { @@ -22,7 +23,7 @@ Component({ if (newActive === 0) { this.setData({ scrollLeft: 0 }) } else if (newActive > 0) { - this.setData({ scrollLeft: 220 * newList.length - 20 }) + this.setData({ scrollLeft: (220 * (newActive) - 20) + "rpx" }) } const { scrollWidth } = this.data; if (scrollWidth) { @@ -30,7 +31,7 @@ Component({ maxScrollLeft: newList?.length ? 220 * newList.length - (scrollWidth || 0) - 20 : 0, }) } - } + }, }, /** * 组件的初始数据 @@ -53,9 +54,7 @@ Component({ maxScrollLeft:length ? 220 * list.length - (res?.[0]?.width || 0) - 20 : 0, scrollWidth: res?.[0]?.width || 0 }) - }) - - + }) } }, /** @@ -109,13 +108,12 @@ Component({ }, // onScroll(e) { // // 实时更新当前滚动位置,可用于更复杂的边界判断 - // console.log("e", e) // this.setData({ // scrollLeft: e.detail.scrollLeft // }); // }, - scrollLeft() { + handleScrollLeft() { // 向左滚动:减少 scrollLeft,但不能小于0 const newScrollLeft = Math.max(0, this.data.scrollLeft - 200); this.setData({ @@ -123,7 +121,7 @@ Component({ }); }, - scrollRight() { + handleScrollRight() { // 向右滚动:增加 scrollLeft,但不能超过 maxScrollLeft const newScrollLeft = Math.min(this.data.maxScrollLeft, this.data.scrollLeft + 200); this.setData({ diff --git a/pages/writeReading/components/meterList/index.wxml b/pages/writeReading/components/meterList/index.wxml index e0929e8..151514e 100644 --- a/pages/writeReading/components/meterList/index.wxml +++ b/pages/writeReading/components/meterList/index.wxml @@ -2,16 +2,16 @@ - 电表列表 + 电表列表 (总计{{list.length}}块,已抄{{list.length - finishNumber}}块) - + - + - diff --git a/pages/writeReading/components/meterList/index.wxss b/pages/writeReading/components/meterList/index.wxss index 17aa19c..4195376 100644 --- a/pages/writeReading/components/meterList/index.wxss +++ b/pages/writeReading/components/meterList/index.wxss @@ -6,6 +6,7 @@ .title { margin-top: 20rpx; + font-size: 32rpx; } .meterListScrollView { diff --git a/pages/writeReading/components/photo/index.js b/pages/writeReading/components/photo/index.js index 08c7f28..dc6a657 100644 --- a/pages/writeReading/components/photo/index.js +++ b/pages/writeReading/components/photo/index.js @@ -1,4 +1,8 @@ // pages/writeReading/components/photo/index.js +import { uploadOcrFile } from "../../../../service/public" +import request from "../../../../utils/request" +import { alertError, alertInfo, alertSuccess, loadingFunc } from "../../../../utils/index" +const { OK } = request; Component({ /** @@ -19,6 +23,53 @@ Component({ * 组件的方法列表 */ methods: { - + chooseImage() { + const that = this; + wx.chooseMedia({ + count: 1, + mediaType: ['image'], + sourceType: ['album', 'camera'], + success: async function(res) { + wx.cropImage({ + src: res.tempFiles[0].tempFilePath, // 图片路径 + cropScale: '16:9', // 裁剪比例 + success: function (res) { + if (!/(\.jpg|\.png|\.jpeg)$/.test(res.tempFilePath.toLowerCase())) { + wx.showToast({ + title: '请上传jpg、png或jpeg格式的图片', + icon: 'none', + }); + return; + } + var tempFilePaths = res.tempFilePath; + loadingFunc(async () => { + 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 !== "", url }) + }, 100) + }) + + } + + }) + + // loadingFunc(async () => { + // const { code, message, data } = await uploadOcrFile(res.tempFiles[0].tempFilePath) + // if (code !== OK) { + // alertError(message) + // return + // } + // setTimeout(() => { + // that.triggerEvent("finish", { number: data?.integer, success: data?.integer != null && data?.integer !== "" }) + // }, 100) + // }) + + } + }) + } } }) \ No newline at end of file diff --git a/pages/writeReading/components/photo/index.json b/pages/writeReading/components/photo/index.json index e8cfaaf..3b51cdc 100644 --- a/pages/writeReading/components/photo/index.json +++ b/pages/writeReading/components/photo/index.json @@ -1,4 +1,6 @@ { "component": true, - "usingComponents": {} + "usingComponents": { + "van-button": "@vant/weapp/button/index" + } } \ No newline at end of file diff --git a/pages/writeReading/components/photo/index.wxml b/pages/writeReading/components/photo/index.wxml index 1f539de..e4e2fe4 100644 --- a/pages/writeReading/components/photo/index.wxml +++ b/pages/writeReading/components/photo/index.wxml @@ -1,4 +1,8 @@ - 拍照 + 拍照 \ No newline at end of file diff --git a/pages/writeReading/components/readingInfo/index.js b/pages/writeReading/components/readingInfo/index.js index 5271828..95fcfa4 100644 --- a/pages/writeReading/components/readingInfo/index.js +++ b/pages/writeReading/components/readingInfo/index.js @@ -1,8 +1,9 @@ // pages/writeReading/components/readingInfo/index.js -import { createReading } from "../../../../service/workBench" -import { alertError, alertInfo, alertSuccess } from "../../../../utils/index" +import { createReading, checkReadingFinish, changeMeterRouteStatus } from "../../../../service/workBench" +import { alertError, alertInfo, alertSuccess, wxModal } from "../../../../utils/index" import request from "../../../../utils/request" +import dayjs from "../../../../utils/dayjs" const { OK } = request Component({ @@ -14,25 +15,34 @@ Component({ meterInfo: Object, showLeft: Boolean, showRight: Boolean, + routeId: String, + disabled: Boolean, + }, + observers: { + "routeId": function(newValue) { + if (!newValue) { + return; + } + this.checkFinish(newValue) + }, }, - /** * 组件的初始数据 */ data: { - currentNumber: null + currentNumber: null, + diff: "-" + }, + lifetimes: { + attached() { + + } }, - /** * 组件的方法列表 */ methods: { - jumpToHistory() { - const { meterInfo } = this.data; - wx.navigateTo({ - url: `/pages/readingHistory/index?meter=${meterInfo?.id}&park=${meterInfo?.park}`, - }) - }, + handlePrev() { this.triggerEvent("prev") }, @@ -41,7 +51,9 @@ Component({ }, onChange(e) { this.setData({ - currentNumber: e.detail ? Number(e.detail) : 0 + currentNumber: e.detail, + calcNumber: isNaN(Number(e.detail)) ? 0 : Number(e.detail), + diff: isNaN(Number(e.detail)) ? "-" : (Number(e.detail) - this.data.meterInfo?.overall).toFixed(2) }) }, handleClear() { @@ -49,20 +61,91 @@ Component({ currentNumber: null, }) }, + async changeEndStatus() { + const { routeId: id } = this.data; + const { code, message } = await changeMeterRouteStatus({ id, status: 0 }) + if (code !== OK) { + alertError(message) + return + } + alertSuccess("操作成功") + wx.navigateBack() + }, + onPhotoFinish(e) { + 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), + url, + }) + alertSuccess("获取成功") + } else { + alertInfo("未能识别数字") + } + }, async onSubmit() { - const { meterInfo, currentNumber } = this.data; + const { meterInfo, currentNumber, routeId, url } = this.data; const { parkId, id } = meterInfo; - const { code, message } = await createReading(parkId, id, { + const { code, message } = await createReading(parkId, id, routeId, { overall: `${currentNumber}`, - flat: `${currentNumber}` + flat: `${currentNumber}`, + readAt: dayjs().format("YYYY-MM-DD HH:mm:ss"), + source: 1, + url }) if (code !== OK) { alertError(message) return } + this.setData({ + currentNumber: null, + calcNumber: null, + diff: "-" + }) alertSuccess("录入成功") - this.handleNext() - this.handleClear() + const that = this; + that.triggerEvent("onSubmit") + setTimeout(async () => { + const isFinished = await that.checkFinish() + if (isFinished) { + + wx.showModal({ + title: '提示', + content: '所有电表都已抄完,是否返回?', + complete: async (res) => { + if (res.cancel) { + + } + + if (res.confirm) { + // await that.changeEndStatus() + wx.navigateBack() + // const pages = getCurrentPages(); + // const prevPage = pages[pages.length - 2]; + // if (prevPage.init){ + // prevPage.init() + // } + } + } + }) + } else { + that.handleNext() + that.handleClear() + } + }, 300) + + }, + async checkFinish(id) { + const { code, message, data, num } = await checkReadingFinish(id || this.data.routeId); + if (code !== OK) { + alertError(message) + return; + } + this.triggerEvent("finishNumber", num) + return data; }, handleCreateReading() { const { meterInfo, currentNumber } = this.data; @@ -80,7 +163,7 @@ Component({ } if (res.confirm) { - if (meterInfo.consumption < currentNumber) { + if (meterInfo.consumption < currentNumber - meterInfo.overall) { wx.showModal({ title: '提示', content: '本次用电量已抄过历史平均水平的100%,是否确认录入?', diff --git a/pages/writeReading/components/readingInfo/index.wxml b/pages/writeReading/components/readingInfo/index.wxml index 83ff7f5..2233074 100644 --- a/pages/writeReading/components/readingInfo/index.wxml +++ b/pages/writeReading/components/readingInfo/index.wxml @@ -1,24 +1,21 @@ - + - - - 历史记录 - - + + --> - + + @@ -31,7 +28,7 @@ - + @@ -52,36 +49,41 @@ - + + + + + - - - + 表字差 - - {{(currentNumber || 0) - meterInfo.overall}} + + {{diff}} - {{(currentNumber || 0) - meterInfo.overall}} + {{diff}} - 确定录入 + 确定录入 - 清除记录 + 清除记录 diff --git a/pages/writeReading/components/readingInfo/index.wxss b/pages/writeReading/components/readingInfo/index.wxss index 7278d2c..55f709c 100644 --- a/pages/writeReading/components/readingInfo/index.wxss +++ b/pages/writeReading/components/readingInfo/index.wxss @@ -46,8 +46,8 @@ } .change { - margin-top: 20rpx; - margin-bottom: 20rpx; + margin-top: 10rpx; + /* margin-bottom: 10rpx; */ display: flex; justify-content: space-between; } @@ -65,6 +65,7 @@ font-size: 42rpx; font-weight: 800; margin-top: 12rpx; + margin-bottom: 12rpx; } .readingNumber .lastTime { font-size: 32rpx; @@ -72,7 +73,7 @@ .nextReadingNumber { display: flex; - align-items: bottom; + } .nextReadingNumber .title { @@ -81,12 +82,19 @@ .nextReadingNumber .number { margin-top: 12rpx; + display: flex; + align-items: center; + flex: 1; } .currentNumber { flex: 1; } +.currentNumber .title { + margin-bottom: 24rpx; +} + .calc { margin-top: 24rpx; } diff --git a/pages/writeReading/index.js b/pages/writeReading/index.js index eb45049..fd3ed2a 100644 --- a/pages/writeReading/index.js +++ b/pages/writeReading/index.js @@ -18,7 +18,8 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad(options) { - const { id } = options; + const { id, type } = options; + this.setData({ id, type }) this.getMeterList(id) }, async getMeterList(id) { @@ -29,7 +30,8 @@ Page({ } this.setData({ meterList: data?.meterRouteDetail || [], - meterInfo: data?.meterRouteDetail?.[0] || {} + meterInfo: data?.meterRouteDetail?.[0] || {}, + routeId: id }) }, changeMeter(e) { @@ -43,14 +45,17 @@ Page({ active: e.detail.index, }) }, + onSubmit() { + this.getMeterList(this.data.routeId) + }, handleNext() { const { active = 0, meterList } = this.data; let newIndex = active + 1 - if (active > meterList?.length - 1) { + if (newIndex > meterList?.length - 1) { newIndex = meterList?.length - 1 } this.setData({ - active: newIndex + active: newIndex, }) }, handlePrev() { @@ -58,6 +63,11 @@ Page({ active: this.data.active === 0 ? 0 : this.data.active - 1 }) }, + onSetFinishNumber(e) { + this.setData({ + finishNumber: e.detail, + }) + }, /** * 生命周期函数--监听页面初次渲染完成 */ diff --git a/pages/writeReading/index.wxml b/pages/writeReading/index.wxml index 5d4aabe..faa425a 100644 --- a/pages/writeReading/index.wxml +++ b/pages/writeReading/index.wxml @@ -6,12 +6,22 @@ bind:changeMeterAndIndex="changeMeterAndIndex" active="{{active}}" meterInfo="{{meterInfo}}" + finishNumber="{{finishNumber}}" /> - + + \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json index f3e205e..edd72a1 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -24,71 +24,50 @@ "miniprogram": { "list": [ { - "name": "pages/writeReading/index", - "pathName": "pages/writeReading/index", - "query": "id=PR00117566262804481", - "launchMode": "default", - "scene": null - }, - { - "name": "pages/readingHistory/index", - "pathName": "pages/readingHistory/index", + "name": "pages/invoiceList/index", + "pathName": "pages/invoiceList/index", "query": "", "launchMode": "default", "scene": null }, { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", + "name": "pages/workBenchNew/components/installMeter/index", + "pathName": "pages/workBenchNew/components/installMeter/index", "query": "", "launchMode": "default", "scene": null }, { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", + "name": "pages/workBenchTodoList/index", + "pathName": "pages/workBenchTodoList/index", "query": "", "launchMode": "default", "scene": null }, { - "name": "childPackage/pages/electricQuery/index", - "pathName": "childPackage/pages/electricQuery/index", + "name": "pages/workOrderDetail/index", + "pathName": "pages/workOrderDetail/index", + "query": "id=NM00123091982548993", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/workBenchTodoList/index", + "pathName": "pages/workBenchTodoList/index", "query": "", "launchMode": "default", "scene": null }, { - "name": "pages/workBench/index", - "pathName": "pages/workBench/index", + "name": "pages/workBenchNew/components/uninstallMeter/index", + "pathName": "pages/workBenchNew/components/uninstallMeter/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", + "name": "pages/workBenchNew/index", + "pathName": "pages/workBenchNew/index", "query": "", "launchMode": "default", "scene": null diff --git a/service/meter.js b/service/meter.js index 14d3b57..e5ed6af 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}`); } @@ -37,7 +37,55 @@ export const getBackTenementMeters = async function(park, tenement) { export const handleOperateMeterSwitch = async function({ ids = [], status }) { return await PUT(`/equipment/batchSwtich`, { ids, status }); } + +// 预付费模式 +export const handleOperateMeterMode = async function({ ids = [], mode, days, images, reason }) { + return await PUT(`/equipment/batchSetMode`, { ids, mode, days, images, reason }); +} + // 绑定时获取电表的最新信息 export const getWorkMeterDetail = async function(code = '') { return await GET(`/vx/getWorkMeterDetail?code=${code}`); +} + +// 获取某一园区下的电表箱列表 +export const getParkBoxList = async function({park = "", keyword = "", page = 1, building =- ""}) { + return await GET(`/box/${park}?page=${page}&keyword=${replaceSpecialIcon(keyword)}&building=${building}`); +} + +// 获取卡列表 +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, status = 1}) { + return await GET(`/electricity/list?page=${page}&park=${park}&keyword=${replaceSpecialIcon(keyword)}&status=${status}`); +} + +// 新装电表 +export const installMeter = async function(data) { + return await POST(`/wx/workBench/installMeter`, data); +} + +// 拆表 +export const uninstallMeter = async function(data) { + return await POST(`/flow/doMeterRemoveApproval`, data); +} + +// 获取商户下的电表,后台 +export const getCollectorList = async function(keyword) { + return await GET(`/collector/list?collectorAddress=${replaceSpecialIcon(keyword)}`); +} + +// 微信工单列表查询所有电表 +export const getWorkOrderAllMeter = async function({ keyword, park, page = 1, size = 20 }) { + return await GET(`/vx/getAllMeter?keyword=${replaceSpecialIcon(keyword)}&pid=${park}&page=${page}&size=${size}`,); } \ No newline at end of file diff --git a/service/public.js b/service/public.js index 54e2045..731f413 100644 --- a/service/public.js +++ b/service/public.js @@ -22,6 +22,86 @@ export const uploadFile = (filePath) => { }) } +export const uploadOcrFile = (filePath) => { + const { api } = getConfigByEnv(); + return new Promise((resolve, reject) => { + wx.uploadFile({ + + filePath: filePath, + name: 'data', + url: `${api}/image/to/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 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 uploadMeterForce = (filePath) => { + const { api } = getConfigByEnv(); + return new Promise((resolve, reject) => { + wx.uploadFile({ + filePath: filePath, + name: 'data', + url: `${api}/image/meter/force`, + header: { + authorization: 'Bearer ' + wx.getStorageSync("token") + }, + success: (res) => { + resolve(res?.data ? JSON.parse(res?.data) : res?.data); + }, + fail: (err) => { + reject(err); + } + }) + }) +} +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) => { diff --git a/service/workBench.js b/service/workBench.js index d9a6032..e52212a 100644 --- a/service/workBench.js +++ b/service/workBench.js @@ -22,6 +22,49 @@ export const getMeterReadingRouteMeterDetail = async function(id) { } // 新建一条抄表记录 -export const createReading = async function(park, code, data) { - return await POST(`/reading/${park}/${code}`, data); -} \ No newline at end of file +export const createReading = async function(park, code, routeId, data) { + return await POST(`/reading/hand/${park}/${code}?parkRouteId=${routeId}`, data); +} + + +// 查询符合指定条件的抄表记录 +export const getReadingList = async function(park, keyword, page) { + return await GET(`/reading/${park}?keyword=${keyword}&page=${page}`,); +} + +// 删除抄表记录 +export const deleteReading = async function(id, overall) { + return await DELETE(`/meter/delete/records/${id}`, { overall }); +} + +// 修改抄表记录 +export const updateReading = async function(park, code, read_at, data) { + return await PUT(`/reading/${park}/${code}/${read_at}`, data); +} +// 检查是否抄表完全 +export const checkReadingFinish = async function(id) { + return await GET(`/park/meter/${id}/route/status`,); +} + +// 获取工作台首页 +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}`,); +} + +// 确认当前流程 +export const doNoticeFlow = async function(id) { + return await PUT(`/noticeFlow/${id}/meter/dispose`,); +} + +// 当前流程详情 +export const getNoticeFlowDetail = async function(id) { + return await GET(`/noticeFlow/${id}/detail`,); +} + diff --git a/utils/data.js b/utils/data.js index 22c17b0..b9c09b9 100644 --- a/utils/data.js +++ b/utils/data.js @@ -9,4 +9,11 @@ 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 = ['商户电表', '园区电表', '公摊电表'] + +export const noticeFlowType = ['拆表', '装表', '开户', "解绑", "绑定"] +export const noticeFlowStatus = ["已确认", "待确认"] + +export const meterMode = ["预付费", "强控", "临时强控"] \ No newline at end of file diff --git a/utils/index.js b/utils/index.js index 6d79893..dfaec5a 100644 --- a/utils/index.js +++ b/utils/index.js @@ -48,7 +48,7 @@ export function getConfigByEnv() { api = "http://localhost:8000" // api = "https://zgd.hbhcbn.com/api3" // TODO: 发布正式时使用此路径 - // api = "https://zgd.hbhcbn.com/wxApi" + // api = "https://zgd.hbhcbn.com/wxApi" // api = "http://127.0.0.1:4523/m1/4143821-0-default" break; // 体验版 diff --git a/utils/request.js b/utils/request.js index 5418e6f..15be215 100644 --- a/utils/request.js +++ b/utils/request.js @@ -44,7 +44,6 @@ const request = async function (options, config = {}) { const setCookie = response.header['set-cookie'] || response.header['Set-Cookie']; if (setCookie) { const cookieMap = {}; - if (localCookieString) { const localCookies = localCookieString.split('; '); for (const localCookie of localCookies) { @@ -93,7 +92,6 @@ const parseResponse = function (response, url) { alertError("服务错误") return } - console.log('url', url,'statusCode', statusCode, 'response.data', response?.data) if (code === 401) { const currentUrl = getPageUrl() @@ -146,7 +144,6 @@ const CUD = async function (method, uri, data = null) { options.data = data; } const response = await request(options); - console.log("response---------",response) return parseResponse(response); };