From d13e470cf0256e3ffbc3b0ad34df27ce0b0b5e5f Mon Sep 17 00:00:00 2001 From: Novecane <2322740715@qq.com> Date: 星期六, 15 二月 2025 15:08:36 +0800 Subject: [PATCH] second commit --- assets/device.png | 0 unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.wxml | 2 unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map | 2 unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.js | 41 +++++++++++++++++--- /dev/null | 0 unpackage/dist/dev/mp-weixin/common/vendor.js | 2 unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/deviceInfo/index.js.map | 2 unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/main/index.js.map | 2 unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/deviceInfo/index.js.map | 2 unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/main/index.js.map | 2 pages/router/deviceInfo/index.vue | 53 +++++++++++++++++++++++--- pages/router/main/index.vue | 2 unpackage/dist/dev/mp-weixin/assets/device.5a6420f4.png | 0 unpackage/dist/dev/mp-weixin/common/assets.js | 2 14 files changed, 90 insertions(+), 22 deletions(-) diff --git a/assets/device.png b/assets/device.png new file mode 100644 index 0000000..d34f261 --- /dev/null +++ b/assets/device.png Binary files differ diff --git a/assets/test.png b/assets/test.png deleted file mode 100644 index ae12aa1..0000000 --- a/assets/test.png +++ /dev/null Binary files differ diff --git a/pages/router/deviceInfo/index.vue b/pages/router/deviceInfo/index.vue index 519a961..ec08cd8 100644 --- a/pages/router/deviceInfo/index.vue +++ b/pages/router/deviceInfo/index.vue @@ -1,7 +1,7 @@ <template> <view class="container"> <view class="info-section"> - <image src="/assets/test.png" mode="aspectFit" class="device-image"></image> + <image src="/assets/device.png" mode="aspectFit" class="device-image"></image> <view class="device-info"> <text class="title">{{state.facilityName}}</text> <text class="sn">SN: {{state.facilityCode}}</text> @@ -24,7 +24,7 @@ <slider @change="handleControlChange" min="100" max="200" step="25" active-color="#007aff" :value="controlValue" style="width: 650rpx; margin-left: 0rpx; - " /> + " :disabled="flag" /> <view class="scale-labels"> <text style="color: #38b231;">开</text> <text>125</text> @@ -68,6 +68,10 @@ const logEntry = ref([]); const temp = ref({}); const controInfo = ref({}); + // 看是否禁止使用滑动条 + const flag = ref(false); + // 定义一个变量来存储定时器ID + let positionInterval; // 生命周期钩子 - 相当于 Vue 2 的 onLoad onMounted(async () => { @@ -89,7 +93,35 @@ } }, ); - // 方法 + const startGetPosition = () => { + // 如果定时器已经存在,则先清除它 + if (positionInterval) { + clearInterval(positionInterval); + } + uni.showToast({ + title:"操作设备中", + icon:"loading", + mask:true, + duration:3500 + }) + // 设置定时器 + positionInterval = setInterval(() => { + getControlInfo(state.value.facilityCode).then((res) => { + if (res.data.position >= 100) { + flag.value = false; + clearInterval(positionInterval); // 使用存储的定时器ID来清除定时器 + } + }).catch((error) => { + console.error('Error fetching control info:', error); // 错误处理 + clearInterval(positionInterval); // 如果请求失败,清除定时器 + }); + }, 2000); + } + + + /** + * 方法 + */ const removeSharedDevice = async () => { temp.value = { facilityCode: state.value.facilityCode @@ -119,11 +151,19 @@ destinationPosition: e.detail.value }; deviceControlInfo(controInfo.value).then((res) => { - //console.log(res); + if (res.code === 200) { + // 禁止使用滑动条 + flag.value = true; + // 启动定时器 + startGetPosition(); + } }).catch((error) => { console.error('Failed to control device:', error); }); + }; + + //操作记录 const getOpeHistory = () => { getOpeInfo(state.value.facilityCode).then((res) => { @@ -136,9 +176,8 @@ }) } // 获取上一次设备的实时控制信息 - const getControlData = ()=>{ - getControlInfo(state.value.facilityCode).then((res)=>{ - // console.log(res.data); + const getControlData = () => { + getControlInfo(state.value.facilityCode).then((res) => { controlValue.value = res.data.position; }) } diff --git a/pages/router/main/index.vue b/pages/router/main/index.vue index 841ca7a..9d87c90 100644 --- a/pages/router/main/index.vue +++ b/pages/router/main/index.vue @@ -8,7 +8,7 @@ </view> <view v-else class="deviceList"> <view v-for="(device, index) in devices" :key="index" class="device-item" @click="editDeviceInfo(device)"> - <img src="/assets/test.png" class="device-image" /> + <img src="/assets/device.png" class="device-image" /> <div class="device-info"> <p class="device-name">{{ device.facilityName }}</p> <p class="device-model">SN:{{ device.facilityCode }}</p> diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/deviceInfo/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/deviceInfo/index.js.map index fc9588a..8a7f3b5 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/deviceInfo/index.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/deviceInfo/index.js.map @@ -1 +1 @@ -{"version":3,"names":["state","common_vendor","ref","onload","option","value","JSON","parse","decodeURIComponent","device","api_index","getDeviceInfoByDeviceId","facilityCode","then","res","Object","assign","data","controlValue","logEntry","temp","controInfo","sn","destinationPosition","removeSharedDevice","deleteDevice","code","index","redirectTo","url","showToast","title","icon","handleControlChange","e","detail","__f__","wx","createPage","MiniProgramPage"],"sources":["index.vue","cGFnZXMvcm91dGVyL2RldmljZUluZm8vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"info-section\">\r\n\t\t\t<image src=\"/assets/test.png\" mode=\"aspectFit\" class=\"device-image\"></image>\r\n\t\t\t<view class=\"device-info\">\r\n\t\t\t\t<text class=\"title\">{{state.facilityName}}</text>\r\n\t\t\t\t<text class=\"sn\">SN: {{state.facilityCode}}</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"status-grid\">\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: #38b231;\" v-if=\"state.isOnLine==1\">在线</text>\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: red;\" v-else>离线</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">太阳能 {{ state.dcInputVolt }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">信号:{{state.rssi}}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<view class=\"control-section\">\r\n\t\t\t<text class=\"section-title\">实时控制</text>\r\n\t\t\t<slider @change=\"handleControlChange\" min=\"100\" max=\"200\" step=\"25\" active-color=\"#007aff\"\r\n\t\t\t\t:value=\"controlValue\" style=\"width: 650rpx;\r\n\t\t\t\t margin-left: 0rpx;\r\n\t\t\t\t \" />\r\n\t\t\t<view class=\"scale-labels\">\r\n\t\t\t\t<text style=\"color: red;\">关</text>\r\n\t\t\t\t<text>125</text>\r\n\t\t\t\t<text>150</text>\r\n\t\t\t\t<text>175</text>\r\n\t\t\t\t<text style=\"color: #38b231;\r\n\t\t\t\tmargin-right: 10rpx;\r\n\t\t\t\t\">开</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"log-section\">\r\n\t\t\t<text class=\"section-title\">设备操作记录</text>\r\n\t\t\t<view class=\"log-box\">\r\n\t\t\t\t<text class=\"log-entry\">{{ logEntry || '2025-01-01 19:06:12 开' }}</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<button class=\"remove-btn\" @click=\"removeSharedDevice\">移除设备</button>\r\n\t</view>\r\n</template>\r\n\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDeviceInfoByDeviceId,\r\n\t\tdeleteDevice,\r\n\t\tdeviceControlInfo\r\n\t} from '@/api/index.js'\r\n\r\n\tconst state = ref({})\r\n\tonload((option) => {\r\n\t\t// 执行根据openId获取设备信息的函数\r\n\t\tstate.value = JSON.parse(decodeURIComponent(option.device));\r\n\t\tgetDeviceInfoByDeviceId(state.value.facilityCode).then((res) => {\r\n\t\t\tstate.value = Object.assign({}, res.data, JSON.parse(decodeURIComponent(option.device)));\r\n\t\t})\r\n\t})\r\n\t// 模拟数据\r\n\tconst controlValue = ref(); // 后面估计会用到 \r\n\tconst solarLevel = ref(100);\r\n\tconst logEntry = ref('暂无操作记录');\r\n\t// 移除用户绑定设备的参数\r\n\tconst temp = {\r\n\t\tfacilityCode: state.value.facilityCode\r\n\t}\r\n\t// 传递实时控制的参数\r\n\tconst controInfo = {\r\n\t\tsn: state.value.facilityCode,\r\n\t\tdestinationPosition: 100\r\n\t}\r\n\r\n\t// 移除用户绑定的设备\r\n\tconst removeSharedDevice = () => {\r\n\t\tdeleteDevice(temp).then((res) => {\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 删除成功 返回首页面\r\n\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\t//删除失败 提示失败信息\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '设备删除失败',\r\n\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t// 实时控制设备状态\r\n\tconst handleControlChange = (e) => {\r\n\t\tcontroInfo.destinationPosition = e.detail.value\r\n\t\tconsole.log(controInfo)\r\n\t\t// deviceControlInfo(controInfo).then((res)=>{\r\n\t\t// \tconsole.log(res);\r\n\t\t// })\r\n\t}\r\n</script>\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n\t.container {\r\n\t\tpadding: 20rpx;\r\n\t\tbackground-color: #f5f5f5;\r\n\t}\r\n\r\n\t.info-section {\r\n\t\tbackground: white;\r\n\t\tborder-radius: 12rpx;\r\n\t\tpadding: 20rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-image {\r\n\t\twidth: 100%;\r\n\t\theight: 300rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\tmargin-bottom: 30rpx;\r\n\r\n\t\t.title {\r\n\t\t\tfont-size: 36rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t\tmargin-bottom: 10rpx;\r\n\t\t}\r\n\r\n\t\t.sn {\r\n\t\t\tfont-size: 28rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t}\r\n\t}\r\n\r\n\t.status-grid {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\r\n\t\t.status-item {\r\n\t\t\tflex: 1;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tmargin: 0 5rpx;\r\n\r\n\t\t\t.status-label {\r\n\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.control-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.scale-labels {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t\tmargin-top: 10rpx;\r\n\t\t\tpadding: 0rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tfont-size: 26rpx;\r\n\t\t}\r\n\t}\r\n\r\n\t.log-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.log-box {\r\n\t\t\theight: 120rpx;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\r\n\t\t\t.log-entry {\r\n\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t\tdisplay: block;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.remove-btn {\r\n\t\tmargin-top: 40rpx;\r\n\t\tbackground: #ff3b30;\r\n\t\tcolor: white;\r\n\t\tborder-radius: 50rpx;\r\n\t\tfont-size: 32rpx;\r\n\t\theight: 80rpx;\r\n\t\tline-height: 80rpx;\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/deviceInfo/index.vue'\nwx.createPage(MiniProgramPage)"],"mappings":";;;;;;;;;IA2DC,IAAMA,KAAA,GAAQC,aAAA,CAAGC,GAAA,CAAC,EAAE;IACpBC,MAAA,CAAO,UAACC,MAAA,EAAW;MAElBJ,KAAA,CAAMK,KAAA,GAAQC,IAAA,CAAKC,KAAA,CAAMC,kBAAA,CAAmBJ,MAAA,CAAOK,MAAM,CAAC;MAC1DC,SAAA,CAAuBC,uBAAA,CAACX,KAAA,CAAMK,KAAA,CAAMO,YAAY,EAAEC,IAAA,CAAK,UAACC,GAAA,EAAQ;QAC/Dd,KAAA,CAAMK,KAAA,GAAQU,MAAA,CAAOC,MAAA,CAAO,IAAIF,GAAA,CAAIG,IAAA,EAAMX,IAAA,CAAKC,KAAA,CAAMC,kBAAA,CAAmBJ,MAAA,CAAOK,MAAM,CAAC,CAAC;MAC1F,CAAG;IACH,CAAE;IAED,IAAMS,YAAA,GAAejB,aAAA,CAAAC,GAAA;IACFD,aAAA,CAAAC,GAAA,CAAI,GAAG;IAC1B,IAAMiB,QAAA,GAAWlB,aAAA,CAAAC,GAAA,CAAI,QAAQ;IAE7B,IAAMkB,IAAA,GAAO;MACZR,YAAA,EAAcZ,KAAA,CAAMK,KAAA,CAAMO;IAC1B;IAED,IAAMS,UAAA,GAAa;MAClBC,EAAA,EAAItB,KAAA,CAAMK,KAAA,CAAMO,YAAA;MAChBW,mBAAA,EAAqB;IACrB;IAGD,IAAMC,kBAAA,GAAqB,SAArBA,mBAAA,EAA2B;MAChCd,SAAA,CAAAe,YAAA,CAAaL,IAAI,EAAEP,IAAA,CAAK,UAACC,GAAA,EAAQ;QAChC,IAAIA,GAAA,CAAIY,IAAA,KAAS,KAAK;UAErBzB,aAAA,CAAA0B,KAAA,CAAIC,UAAA,CAAW;YACdC,GAAA,EAAK;UACV,CAAK;QACL,OAAU;UAEN5B,aAAA,CAAA0B,KAAA,CAAIG,SAAA,CAAU;YACbC,KAAA,EAAO;YACPC,IAAA,EAAM;UACX,CAAK;QACD;MACJ,CAAG;IACD;IAED,IAAMC,mBAAA,GAAsB,SAAtBA,oBAAuBC,CAAA,EAAM;MAClCb,UAAA,CAAWE,mBAAA,GAAsBW,CAAA,CAAEC,MAAA,CAAO9B,KAAA;MAC1CJ,aAAA,CAAA0B,KAAA,CAAAS,KAAA,oDAAYf,UAAU;IAItB;;;;;;;;;;;;;;;;;;;ACxGFgB,EAAA,CAAGC,UAAA,CAAWC,eAAe","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["deviceInfo","common_vendor","ref","controlValue","logEntry","controlInfo","isSliderDisabled","positionInterval","fetchDeviceInfo","_ref","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","deviceCode","res","wrap","_callee$","_context","prev","next","api_index","getDeviceInfoByDeviceId","sent","value","_objectSpread2","data","facilityCode","t0","index","__f__","stop","_x","apply","arguments","initializeData","getOpeHistory","getControlData","startPositionInterval","clearInterval","setInterval","_callee2","_callee2$","_context2","getControlInfo","position","showToast","title","icon","duration","mask","onMounted","_callee3","pageOptions","deviceData","_callee3$","_context3","getCurrentPages","length","options","JSON","parse","decodeURIComponent","device","onUnmounted","removeSharedDevice","_ref4","_callee4","_callee4$","_context4","deleteDevice","code","redirectTo","url","handleControlChange","_ref5","_callee5","e","_callee5$","_context5","sn","destinationPosition","detail","deviceControlInfo","_x2","getOpeInfo","then","catch","wx","createPage","MiniProgramPage"],"sources":["index.vue","cGFnZXMvcm91dGVyL2RldmljZUluZm8vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"info-section\">\r\n\t\t\t<image src=\"/assets/test.png\" mode=\"aspectFit\" class=\"device-image\"></image>\r\n\t\t\t<view class=\"device-info\">\r\n\t\t\t\t<text class=\"title\">{{state.facilityName}}</text>\r\n\t\t\t\t<text class=\"sn\">SN: {{state.facilityCode}}</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"status-grid\">\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: #38b231;\" v-if=\"state.isOnLine==1\">在线</text>\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: red;\" v-else>离线</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">太阳能{{ state.dcInputVolt }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">信号{{state.rssi}}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"control-section\">\r\n\t\t\t<text class=\"section-title\">实时控制</text>\r\n\t\t\t<slider @change=\"handleControlChange\" min=\"100\" max=\"200\" step=\"25\" active-color=\"#007aff\"\r\n\t\t\t\t:value=\"controlValue\" style=\"width: 650rpx;\r\n\t\t\t\t margin-left: 0rpx;\r\n\t\t\t\t \" :disabled=\"isSliderDisabled\" />\r\n\t\t\t<view class=\"scale-labels\">\r\n\t\t\t\t<text style=\"color: #38b231;\">开</text>\r\n\t\t\t\t<text>125</text>\r\n\t\t\t\t<text>150</text>\r\n\t\t\t\t<text>175</text>\r\n\t\t\t\t<text style=\"color: red;\r\n\t\t\t\tmargin-right: 10rpx;\r\n\t\t\t\t\">关</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"log-section\">\r\n\t\t\t<text class=\"section-title\">设备操作记录</text>\r\n\t\t\t<scroll-view class=\"log-box\" scroll-y=\"true\">\r\n\t\t\t\t<view class=\"log-entry\" v-for=\"(item,index) in logEntry\" :key=\"index\">\r\n\t\t\t\t\t<view class=\"opName\">{{item.operateName}}</view>\r\n\t\t\t\t\t<view class=\"opSta\">{{item.operateStatus }}</view>\r\n\t\t\t\t\t<view class=\"opTime\">{{item.createTimeView}}</view>\r\n\t\t\t\t</view>\r\n\t\t\t</scroll-view>\r\n\t\t</view>\r\n\t\t<button class=\"remove-btn\" @click=\"removeSharedDevice\">移除设备</button>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref,\r\n\t\tonMounted,\r\n\t\tonUnmounted\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDeviceInfoByDeviceId,\r\n\t\tdeleteDevice,\r\n\t\tdeviceControlInfo,\r\n\t\tgetOpeInfo,\r\n\t\tgetControlInfo\r\n\t} from '@/api/index.js';\r\n\r\n\tconst deviceInfo = ref({});\r\n\tconst controlValue = ref(100);\r\n\tconst logEntry = ref([]);\r\n\tconst controlInfo = ref({});\r\n\tconst isSliderDisabled = ref(false);\r\n\tlet positionInterval;\r\n\r\n\t// 获取设备信息并初始化\r\n\tconst fetchDeviceInfo = async (deviceCode) => {\r\n\t\ttry {\r\n\t\t\tconst res = await getDeviceInfoByDeviceId(deviceCode);\r\n\t\t\tdeviceInfo.value = {\r\n\t\t\t\t...res.data,\r\n\t\t\t\tfacilityCode: deviceCode\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to fetch device info:', error);\r\n\t\t}\r\n\t};\r\n\r\n\t// 初始化操作记录和实时控制数据\r\n\tconst initializeData = () => {\r\n\t\tgetOpeHistory();\r\n\t\tgetControlData();\r\n\t};\r\n\r\n\t// 启动定时器以获取实时位置\r\n\tconst startPositionInterval = () => {\r\n\t\tif (positionInterval) clearInterval(positionInterval);\r\n\r\n\t\tpositionInterval = setInterval(async () => {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await getControlInfo(deviceInfo.value.facilityCode);\r\n\t\t\t\tif (res.data.position >= 100) {\r\n\t\t\t\t\tisSliderDisabled.value = false;\r\n\t\t\t\t\tclearInterval(positionInterval);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error('Error fetching control info:', error);\r\n\t\t\t\tclearInterval(positionInterval);\r\n\t\t\t}\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: \"操作设备中\",\r\n\t\t\t\ticon: \"loading\",\r\n\t\t\t\tduration: 5000,\r\n\t\t\t\tmask: true\r\n\t\t\t});\r\n\t\t}, 5000);\r\n\t};\r\n\r\n\t// 生命周期钩子\r\n\tonMounted(async () => {\r\n\t\tconst pageOptions = getCurrentPages()[getCurrentPages().length - 1].options;\r\n\t\tconst deviceData = JSON.parse(decodeURIComponent(pageOptions.device));\r\n\t\tdeviceInfo.value = deviceData;\r\n\t\tawait fetchDeviceInfo(deviceData.facilityCode);\r\n\t\tinitializeData();\r\n\t});\r\n\r\n\tonUnmounted(() => {\r\n\t\tclearInterval(positionInterval);\r\n\t});\r\n\r\n\t// 删除设备\r\n\tconst removeSharedDevice = async () => {\r\n\t\ttry {\r\n\t\t\tconst res = await deleteDevice({\r\n\t\t\t\tfacilityCode: deviceInfo.value.facilityCode\r\n\t\t\t});\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '设备删除失败',\r\n\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to delete device:', error);\r\n\t\t}\r\n\t};\r\n\r\n\t// 控制设备\r\n\tconst handleControlChange = async (e) => {\r\n\t\tcontrolInfo.value = {\r\n\t\t\tsn: deviceInfo.value.facilityCode,\r\n\t\t\tdestinationPosition: e.detail.value\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tconst res = await deviceControlInfo(controlInfo.value);\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\tisSliderDisabled.value = true;\r\n\t\t\t\tstartPositionInterval();\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to control device:', error);\r\n\t\t}\r\n\t};\r\n\r\n\t// 获取操作记录\r\n\tconst getOpeHistory = () => {\r\n\t\tgetOpeInfo(deviceInfo.value.facilityCode).then((res) => {\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\tlogEntry.value = res.data;\r\n\t\t\t}\r\n\t\t}).catch((e) => {\r\n\t\t\tconsole.log(\"fail info\", e);\r\n\t\t});\r\n\t};\r\n\r\n\t// 获取实时控制数据\r\n\tconst getControlData = () => {\r\n\t\tgetControlInfo(deviceInfo.value.facilityCode).then((res) => {\r\n\t\t\tcontrolValue.value = res.data.position;\r\n\t\t});\r\n\t};\r\n</script>\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n\t.container {\r\n\t\tpadding: 20rpx;\r\n\t\tbackground-color: #f5f5f5;\r\n\t}\r\n\r\n\t.info-section {\r\n\t\tbackground: white;\r\n\t\tborder-radius: 12rpx;\r\n\t\tpadding: 20rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-image {\r\n\t\twidth: 100%;\r\n\t\theight: 300rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\tmargin-bottom: 30rpx;\r\n\r\n\t\t.title {\r\n\t\t\tfont-size: 36rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t\tmargin-bottom: 10rpx;\r\n\t\t}\r\n\r\n\t\t.sn {\r\n\t\t\tfont-size: 28rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t}\r\n\t}\r\n\r\n\t.status-grid {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\r\n\t\t.status-item {\r\n\t\t\tflex: 1;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tmargin: 0 5rpx;\r\n\r\n\t\t\t.status-label {\r\n\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.control-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.scale-labels {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t\tmargin-top: 10rpx;\r\n\t\t\tpadding: 0rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tfont-size: 26rpx;\r\n\t\t}\r\n\t}\r\n\r\n\t.log-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\theight: 450rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.log-box {\r\n\t\t\theight: 80%;\r\n\t\t\twidth: 95%;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tdisplay: flex;\r\n\t\t\tflex-direction: row;\r\n\r\n\t\t\t.log-entry {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: row;\r\n\t\t\t\tjustify-content: space-between;\r\n\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\tcolor: #333;\r\n\r\n\t\t\t\t.opName {}\r\n\r\n\t\t\t\t.opSta {}\r\n\r\n\t\t\t\t.opTime {}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.remove-btn {\r\n\t\tmargin-top: 40rpx;\r\n\t\tbackground: #ff3b30;\r\n\t\tcolor: white;\r\n\t\tborder-radius: 50rpx;\r\n\t\tfont-size: 32rpx;\r\n\t\theight: 80rpx;\r\n\t\tline-height: 80rpx;\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/deviceInfo/index.vue'\nwx.createPage(MiniProgramPage)"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/main/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/main/index.js.map index 59696e9..02569c1 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/main/index.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin-devtools/pages/router/main/index.js.map @@ -1 +1 @@ -{"version":3,"names":["devices","common_vendor","ref","getDeviceTable","api_index","getDevicesByiOpenId","index","getStorageSync","then","res","value","data","editDeviceInfo","device","navigateTo","url","concat","encodeURIComponent","JSON","stringify","onMounted","wx","createComponent","Component"],"sources":["index.vue","QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3p3bC13eC1kZXYvcGFnZXMvcm91dGVyL21haW4vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"device-page\">\r\n\t\t<view v-if=\"devices.length === 0\" class=\"no-devices\">\r\n\t\t\t暂无设备\r\n\t\t\t<button class=\"add-device-btn\" @click=\"addHandler\">\r\n\t\t\t\t添加设备\r\n\t\t\t</button>\r\n\t\t</view>\r\n\t\t<view v-else class=\"deviceList\">\r\n\t\t\t<view v-for=\"(device, index) in devices\" :key=\"index\" class=\"device-item\" @click=\"editDeviceInfo(device)\">\r\n\t\t\t\t<img src=\"/assets/test.png\" class=\"device-image\" />\r\n\t\t\t\t<div class=\"device-info\">\r\n\t\t\t\t\t<p class=\"device-name\">{{ device.facilityName }}</p>\r\n\t\t\t\t\t<p class=\"device-model\">SN:{{ device.facilityCode }}</p>\r\n\t\t\t\t\t<p v-if=\"device.isOnLine==1\" class=\"device-status_zx\">在线</p>\r\n\t\t\t\t\t<p v-else class=\"device-status_lx\">离线</p>\r\n\t\t\t\t</div>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDevicesByiOpenId\r\n\t} from '@/api/index.js'\r\n\r\n\t// 模拟设备信息\r\n\tconst devices = ref([{}]);\r\n\r\n\t// 获取用户设备table\r\n\tconst getDeviceTable = () => {\r\n\t\tgetDevicesByiOpenId(uni.getStorageSync(\"openId\")).then((res) => {\r\n\t\t\tdevices.value = res.data;\r\n\t\t})\r\n\t}\r\n\tconst editDeviceInfo = (device) => {\r\n\t\t//console.log(facilityCode);\r\n\t\tuni.navigateTo({\r\n\t\t\turl: `/pages/router/deviceInfo/index?device=${encodeURIComponent(JSON.stringify(device))}`,\r\n\t\t})\r\n\t}\r\n\tonMounted(() => {\r\n\t\tgetDeviceTable();\r\n\t})\r\n</script>\r\n\r\n<style scoped>\r\n\t.device-page {\r\n\t\ttext-align: center;\r\n\t\tpadding: 10px;\r\n\t}\r\n\r\n\t.no-devices {\r\n\t\tfont-size: 18px;\r\n\t\tcolor: #666;\r\n\t\tmargin-top: 300rpx;\r\n\t}\r\n\r\n\t.add-device-btn {\r\n\t\tpadding: 10px 20px;\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #fff;\r\n\t\tbackground-color: #007bff;\r\n\t\tborder: none;\r\n\t\tborder-radius: 5px;\r\n\t\tcursor: pointer;\r\n\t\tmargin-top: 10px;\r\n\t}\r\n\r\n\t.deviceList {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tgap: 20px;\r\n\t\t/* 设备项之间的间距 */\r\n\t\tmax-height: calc(100vh - 120px);\r\n\t\t/* 假设你希望为其他内容(如页眉/页脚)留出空间 */\r\n\t\toverflow-y: auto;\r\n\t\t/* 添加垂直滚动条 */\r\n\t\tpadding: 0 10rpx;\r\n\t\t/* 可选:为滚动内容添加一些内边距 */\r\n\t\tbox-sizing: border-box;\r\n\t\t/* 确保内边距和边框不会增加容器的高度 */\r\n\t}\r\n\r\n\t.device-item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\ttext-align: center;\r\n\t\twidth: 100%;\r\n\t\t/* 根据需要调整宽度 */\r\n\t\tmax-width: 600rpx;\r\n\t\t/* 设置最大宽度,以便在桌面端更好地展示 */\r\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n\t\t/* 添加一些阴影效果 */\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 5px;\r\n\t}\r\n\r\n\t/*图片样式*/\r\n\t.device-image {\r\n\t\twidth: 40%;\r\n\t\theight: 250rpx;\r\n\t\tborder-radius: 5px;\r\n\t\tmargin-bottom: 10px;\r\n\t\tmargin-right: 20rpx;\r\n\t\tborder: 1rpx red solid;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\ttext-align: left;\r\n\t\t/* 设备信息左对齐 */\r\n\t}\r\n\r\n\t.device-name {\r\n\t\tmargin: 5rpx 0;\r\n\t\tfont-size:35rpx;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\t.device-model {\r\n\t\tmargin: 5px 0;\r\n\t\tfont-size: small;\r\n\t}\r\n\r\n\t.device-status_zx {\r\n\t\tbackground-color: #4CAF50;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n\t.device-status_lx {\r\n\t\tbackground-color: red;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/szwl-wx-dev/pages/router/main/index.vue'\nwx.createComponent(Component)"],"mappings":";;;;;;;;;IAgCC,IAAMA,OAAA,GAAUC,aAAA,CAAAC,GAAA,CAAI,CAAC,EAAE,CAAC;IAGxB,IAAMC,cAAA,GAAiB,SAAjBA,eAAA,EAAuB;MAC5BC,SAAA,CAAmBC,mBAAA,CAACJ,aAAA,CAAGK,KAAA,CAACC,cAAA,CAAe,QAAQ,CAAC,EAAEC,IAAA,CAAK,UAACC,GAAA,EAAQ;QAC/DT,OAAA,CAAQU,KAAA,GAAQD,GAAA,CAAIE,IAAA;MACvB,CAAG;IACD;IACD,IAAMC,cAAA,GAAiB,SAAjBA,eAAkBC,MAAA,EAAW;MAElCZ,aAAA,CAAAK,KAAA,CAAIQ,UAAA,CAAW;QACdC,GAAA,2CAAAC,MAAA,CAA8CC,kBAAA,CAAmBC,IAAA,CAAKC,SAAA,CAAUN,MAAM,CAAC,CAAC;MAC3F,CAAG;IACD;IACDZ,aAAA,CAAAmB,SAAA,CAAU,YAAM;MACfjB,cAAA;IACF,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CFkB,EAAA,CAAGC,eAAA,CAAgBC,SAAS","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["devices","common_vendor","ref","state","productId","facilityCode","signature","getDeviceTable","api_index","getDevicesByiOpenId","index","getStorageSync","then","res","value","data","editDeviceInfo","device","navigateTo","url","concat","encodeURIComponent","JSON","stringify","addHandler","scanCode","scanType","success","temp","parse","result","DeviceName","ProductId","Signature","__f__","bindDevice","res2","code","showToast","title","icon","redirectTo","fail","err","onMounted","wx","createComponent","Component"],"sources":["index.vue","QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3h3bC13eC1kZXYvcGFnZXMvcm91dGVyL21haW4vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"device-page\">\r\n\t\t<view v-if=\"devices.length === 0\" class=\"no-devices\">\r\n\t\t\t暂无设备\r\n\t\t\t<button class=\"add-device-btn\" @click=\"addHandler\">\r\n\t\t\t\t添加设备\r\n\t\t\t</button>\r\n\t\t</view>\r\n\t\t<view v-else class=\"deviceList\">\r\n\t\t\t<view v-for=\"(device, index) in devices\" :key=\"index\" class=\"device-item\" @click=\"editDeviceInfo(device)\">\r\n\t\t\t\t<img src=\"/assets/test.png\" class=\"device-image\" />\r\n\t\t\t\t<div class=\"device-info\">\r\n\t\t\t\t\t<p class=\"device-name\">{{ device.facilityName }}</p>\r\n\t\t\t\t\t<p class=\"device-model\">SN:{{ device.facilityCode }}</p>\r\n\t\t\t\t\t<p v-if=\"device.isOnLine==1\" class=\"device-status_zx\">在线</p>\r\n\t\t\t\t\t<p v-else class=\"device-status_lx\">离线</p>\r\n\t\t\t\t</div>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDevicesByiOpenId,\r\n\t\tbindDevice\r\n\t} from '@/api/index.js'\r\n\r\n\t// 设备信息\r\n\tconst devices = ref([{}]);\r\n\r\n\t// 传递给后端的参数\r\n\tconst state = {\r\n\t\tproductId: \"\",\r\n\t\tfacilityCode: \"\",\r\n\t\tsignature: \"\"\r\n\t}\r\n\t\r\n\t// 获取用户设备table\r\n\tconst getDeviceTable = () => {\r\n\t\tgetDevicesByiOpenId(uni.getStorageSync(\"openId\")).then((res) => {\r\n\t\t\tdevices.value = res.data;\r\n\t\t})\r\n\t}\r\n\t// 查看设备信息\r\n\tconst editDeviceInfo = (device) => {\r\n\t\t//console.log(facilityCode);\r\n\t\tuni.navigateTo({\r\n\t\t\turl: `/pages/router/deviceInfo/index?device=${encodeURIComponent(JSON.stringify(device))}`,\r\n\t\t})\r\n\t}\r\n\r\n\t//绑定设备\r\n\tconst addHandler = () => {\r\n\t\tuni.scanCode({\r\n\t\t\tscanType: ['qrCode', 'barCode'], // 扫码类型为二维码或条形码\r\n\t\t\tsuccess: function(res) {\r\n\t\t\t\t// 扫码成功后的回调\r\n\t\t\t\tlet temp = JSON.parse(res.result);\r\n\t\t\t\tstate.facilityCode = temp.DeviceName;\r\n\t\t\t\tstate.productId = temp.ProductId;\r\n\t\t\t\tstate.signature = temp.Signature;\r\n\t\t\t\tconsole.log(state);\r\n\t\t\t\tbindDevice(state).then((res) => {\r\n\t\t\t\t\tif (res.code === 200) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '设备绑定成功',\r\n\t\t\t\t\t\t\t\ticon: 'success',\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t// 刷新页面\r\n\t\t\t\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '设备绑定失败',\r\n\t\t\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\tfail: function(err) {\r\n\t\t\t\t// 扫码失败后的回调\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '扫描失败',\r\n\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonMounted(() => {\r\n\t\tgetDeviceTable();\r\n\t})\r\n</script>\r\n\r\n<style scoped>\r\n\t.device-page {\r\n\t\ttext-align: center;\r\n\t\tpadding: 10px;\r\n\t}\r\n\r\n\t.no-devices {\r\n\t\tfont-size: 18px;\r\n\t\tcolor: #666;\r\n\t\tmargin-top: 300rpx;\r\n\t}\r\n\r\n\t.add-device-btn {\r\n\t\tpadding: 10px 20px;\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #fff;\r\n\t\tbackground-color: #007bff;\r\n\t\tborder: none;\r\n\t\tborder-radius: 5px;\r\n\t\tcursor: pointer;\r\n\t\tmargin-top: 10px;\r\n\t}\r\n\r\n\t.deviceList {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tgap: 20px;\r\n\t\t/* 设备项之间的间距 */\r\n\t\tmax-height: calc(100vh - 120px);\r\n\t\t/* 假设你希望为其他内容(如页眉/页脚)留出空间 */\r\n\t\toverflow-y: auto;\r\n\t\t/* 添加垂直滚动条 */\r\n\t\tpadding: 0 10rpx;\r\n\t\t/* 可选:为滚动内容添加一些内边距 */\r\n\t\tbox-sizing: border-box;\r\n\t\t/* 确保内边距和边框不会增加容器的高度 */\r\n\t}\r\n\r\n\t.device-item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\ttext-align: center;\r\n\t\twidth: 100%;\r\n\t\t/* 根据需要调整宽度 */\r\n\t\tmax-width: 600rpx;\r\n\t\t/* 设置最大宽度,以便在桌面端更好地展示 */\r\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n\t\t/* 添加一些阴影效果 */\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 5px;\r\n\t}\r\n\r\n\t/*图片样式*/\r\n\t.device-image {\r\n\t\twidth: 40%;\r\n\t\theight: 250rpx;\r\n\t\t/* \t\tbox-shadow: #666; */\r\n\t\tborder-radius: 5px;\r\n\t\tmargin-bottom: 10px;\r\n\t\tmargin-right: 20rpx;\r\n\t\tborder: 1rpx gray solid;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\ttext-align: left;\r\n\t\t/* 设备信息左对齐 */\r\n\t}\r\n\r\n\t.device-name {\r\n\t\tmargin: 5rpx 0;\r\n\t\tfont-size: 35rpx;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\t.device-model {\r\n\t\tmargin: 5px 0;\r\n\t\tfont-size: small;\r\n\t}\r\n\r\n\t.device-status_zx {\r\n\t\tbackground-color: #4CAF50;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.device-status_lx {\r\n\t\tbackground-color: red;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/main/index.vue'\nwx.createComponent(Component)"],"mappings":";;;;;;;;;IAiCC,IAAMA,OAAA,GAAUC,aAAA,CAAAC,GAAA,CAAI,CAAC,EAAE,CAAC;IAGxB,IAAMC,KAAA,GAAQ;MACbC,SAAA,EAAW;MACXC,YAAA,EAAc;MACdC,SAAA,EAAW;IACX;IAGD,IAAMC,cAAA,GAAiB,SAAjBA,eAAA,EAAuB;MAC5BC,SAAA,CAAmBC,mBAAA,CAACR,aAAA,CAAGS,KAAA,CAACC,cAAA,CAAe,QAAQ,CAAC,EAAEC,IAAA,CAAK,UAACC,GAAA,EAAQ;QAC/Db,OAAA,CAAQc,KAAA,GAAQD,GAAA,CAAIE,IAAA;MACvB,CAAG;IACD;IAED,IAAMC,cAAA,GAAiB,SAAjBA,eAAkBC,MAAA,EAAW;MAElChB,aAAA,CAAAS,KAAA,CAAIQ,UAAA,CAAW;QACdC,GAAA,2CAAAC,MAAA,CAA8CC,kBAAA,CAAmBC,IAAA,CAAKC,SAAA,CAAUN,MAAM,CAAC,CAAC;MAC3F,CAAG;IACD;IAGD,IAAMO,UAAA,GAAa,SAAbA,WAAA,EAAmB;MACxBvB,aAAA,CAAAS,KAAA,CAAIe,QAAA,CAAS;QACZC,QAAA,EAAU,CAAC,UAAU,SAAS;QAAA;QAC9BC,OAAA,EAAS,SAATA,QAAkBd,GAAA,EAAK;UAEtB,IAAIe,IAAA,GAAON,IAAA,CAAKO,KAAA,CAAMhB,GAAA,CAAIiB,MAAM;UAChC3B,KAAA,CAAME,YAAA,GAAeuB,IAAA,CAAKG,UAAA;UAC1B5B,KAAA,CAAMC,SAAA,GAAYwB,IAAA,CAAKI,SAAA;UACvB7B,KAAA,CAAMG,SAAA,GAAYsB,IAAA,CAAKK,SAAA;UACvBhC,aAAA,CAAAS,KAAA,CAAYwB,KAAA,6CAAA/B,KAAK;UACjBK,SAAA,CAAA2B,UAAA,CAAWhC,KAAK,EAAES,IAAA,CAAK,UAACwB,IAAA,EAAQ;YAC/B,IAAIA,IAAA,CAAIC,IAAA,KAAS,KAAK;cACrBpC,aAAA,CAAAS,KAAA,CAAI4B,SAAA,CAAU;gBACZC,KAAA,EAAO;gBACPC,IAAA,EAAM;cACd,CAAQ;cAAA;cAEDvC,aAAA,CAAAS,KAAA,CAAI+B,UAAA,CAAW;gBACdtB,GAAA,EAAK;cACb,CAAQ;YACR,OAAY;cACNlB,aAAA,CAAAS,KAAA,CAAI4B,SAAA,CAAU;gBACbC,KAAA,EAAO;gBACPC,IAAA,EAAM;cACb,CAAO;YACD;UACN,CAAK;QACD;QACDE,IAAA,EAAM,SAANA,KAAeC,GAAA,EAAK;UAEnB1C,aAAA,CAAAS,KAAA,CAAI4B,SAAA,CAAU;YACbC,KAAA,EAAO;YACPC,IAAA,EAAM;UACX,CAAK;QACD;MACJ,CAAG;IACD;IAEDvC,aAAA,CAAA2C,SAAA,CAAU,YAAM;MACfrC,cAAA;IACF,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;AChGFsC,EAAA,CAAGC,eAAA,CAAgBC,SAAS","ignoreList":[]} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map index 3acafb1..8f3ff49 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map @@ -1 +1 @@ -{"version":3,"file":"assets.js","sources":["static/images/login/logo.png","static/images/login/wx.png","assets/test.png"],"sourcesContent":["export default \"__VITE_ASSET__4c22a1c9__\"","export default \"__VITE_ASSET__5fb9601d__\"","export default \"__VITE_ASSET__dfa37654__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;"} \ No newline at end of file +{"version":3,"file":"assets.js","sources":["static/images/login/logo.png","static/images/login/wx.png","assets/device.png"],"sourcesContent":["export default \"__VITE_ASSET__4c22a1c9__\"","export default \"__VITE_ASSET__5fb9601d__\"","export default \"__VITE_ASSET__5a6420f4__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/deviceInfo/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/deviceInfo/index.js.map index 630bc75..be011fe 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/deviceInfo/index.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/deviceInfo/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["pages/router/deviceInfo/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcm91dGVyL2RldmljZUluZm8vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"info-section\">\r\n\t\t\t<image src=\"/assets/test.png\" mode=\"aspectFit\" class=\"device-image\"></image>\r\n\t\t\t<view class=\"device-info\">\r\n\t\t\t\t<text class=\"title\">{{state.facilityName}}</text>\r\n\t\t\t\t<text class=\"sn\">SN: {{state.facilityCode}}</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"status-grid\">\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: #38b231;\" v-if=\"state.isOnLine==1\">在线</text>\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: red;\" v-else>离线</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">太阳能{{ state.dcInputVolt }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">信号{{state.rssi}}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"control-section\">\r\n\t\t\t<text class=\"section-title\">实时控制</text>\r\n\t\t\t<slider @change=\"handleControlChange\" min=\"100\" max=\"200\" step=\"25\" active-color=\"#007aff\"\r\n\t\t\t\t:value=\"controlValue\" style=\"width: 650rpx;\r\n\t\t\t\t margin-left: 0rpx;\r\n\t\t\t\t \" />\r\n\t\t\t<view class=\"scale-labels\">\r\n\t\t\t\t<text style=\"color: #38b231;\">开</text>\r\n\t\t\t\t<text>125</text>\r\n\t\t\t\t<text>150</text>\r\n\t\t\t\t<text>175</text>\r\n\t\t\t\t<text style=\"color: red;\r\n\t\t\t\tmargin-right: 10rpx;\r\n\t\t\t\t\">关</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"log-section\">\r\n\t\t\t<text class=\"section-title\">设备操作记录</text>\r\n\t\t\t<scroll-view class=\"log-box\" scroll-y=\"true\">\r\n\t\t\t\t<view class=\"log-entry\" v-for=\"(item,index) in logEntry\" :key=\"index\">\r\n\t\t\t\t\t<view class=\"opName\">{{item.operateName}}</view>\r\n\t\t\t\t\t<view class=\"opSta\">{{item.operateStatus }}</view>\r\n\t\t\t\t\t<view class=\"opTime\">{{item.createTimeView}}</view>\r\n\t\t\t\t</view>\r\n\t\t\t</scroll-view>\r\n\t\t</view>\r\n\t\t<button class=\"remove-btn\" @click=\"removeSharedDevice\">移除设备</button>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref,\r\n\t\tonMounted,\r\n\t\twatch\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDeviceInfoByDeviceId,\r\n\t\tdeleteDevice,\r\n\t\tdeviceControlInfo,\r\n\t\tgetOpeInfo,\r\n\t\tgetControlInfo\r\n\t} from '@/api/index.js';\r\n\r\n\tconst state = ref({});\r\n\tconst controlValue = ref(100); // 初始化控制值\r\n\tconst logEntry = ref([]);\r\n\tconst temp = ref({});\r\n\tconst controInfo = ref({});\r\n\r\n\t// 生命周期钩子 - 相当于 Vue 2 的 onLoad\r\n\tonMounted(async () => {\r\n\t\tconst option = getCurrentPages()[getCurrentPages().length - 1].options;\r\n\t\tconst deviceInfo = JSON.parse(decodeURIComponent(option.device));\r\n\t\tstate.value = deviceInfo;\r\n\t\t// 获取操作记录\r\n\t\tgetOpeHistory();\r\n\t\t// 获取实时控制数据\r\n\t\tgetControlData();\r\n\t\ttry {\r\n\t\t\tconst res = await getDeviceInfoByDeviceId(deviceInfo.facilityCode);\r\n\t\t\tstate.value = {\r\n\t\t\t\t...res.data,\r\n\t\t\t\t...deviceInfo\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to fetch device info:', error);\r\n\t\t}\r\n\t}, );\r\n\r\n\t// 方法\r\n\tconst removeSharedDevice = async () => {\r\n\t\ttemp.value = {\r\n\t\t\tfacilityCode: state.value.facilityCode\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tconst res = await deleteDevice(temp.value);\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 删除成功 返回首页面\r\n\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// 删除失败 提示失败信息\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '设备删除失败',\r\n\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to delete device:', error);\r\n\t\t}\r\n\t};\r\n\t// 实时控制\r\n\tconst handleControlChange = (e) => {\r\n\t\tcontroInfo.value = {\r\n\t\t\tsn: state.value.facilityCode,\r\n\t\t\tdestinationPosition: e.detail.value\r\n\t\t};\r\n\t\tdeviceControlInfo(controInfo.value).then((res) => {\r\n\t\t\t//console.log(res);\r\n\t\t}).catch((error) => {\r\n\t\t\tconsole.error('Failed to control device:', error);\r\n\t\t});\r\n\t};\r\n\t//操作记录\r\n\tconst getOpeHistory = () => {\r\n\t\tgetOpeInfo(state.value.facilityCode).then((res) => {\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 渲染列表数据到页面上\r\n\t\t\t\tlogEntry.value = res.data\r\n\t\t\t}\r\n\t\t}).catch((e) => {\r\n\t\t\tconsole.log(\"fail info\", e);\r\n\t\t})\r\n\t}\r\n\t// 获取上一次设备的实时控制信息\r\n\tconst getControlData = ()=>{\r\n\t\tgetControlInfo(state.value.facilityCode).then((res)=>{\r\n\t\t\t// console.log(res.data);\r\n\t\t\tcontrolValue.value = res.data.position;\r\n\t\t})\r\n\t}\r\n</script>\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n\t.container {\r\n\t\tpadding: 20rpx;\r\n\t\tbackground-color: #f5f5f5;\r\n\t}\r\n\r\n\t.info-section {\r\n\t\tbackground: white;\r\n\t\tborder-radius: 12rpx;\r\n\t\tpadding: 20rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-image {\r\n\t\twidth: 100%;\r\n\t\theight: 300rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\tmargin-bottom: 30rpx;\r\n\r\n\t\t.title {\r\n\t\t\tfont-size: 36rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t\tmargin-bottom: 10rpx;\r\n\t\t}\r\n\r\n\t\t.sn {\r\n\t\t\tfont-size: 28rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t}\r\n\t}\r\n\r\n\t.status-grid {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\r\n\t\t.status-item {\r\n\t\t\tflex: 1;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tmargin: 0 5rpx;\r\n\r\n\t\t\t.status-label {\r\n\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.control-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.scale-labels {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t\tmargin-top: 10rpx;\r\n\t\t\tpadding: 0rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tfont-size: 26rpx;\r\n\t\t}\r\n\t}\r\n\r\n\t.log-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\theight: 450rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.log-box {\r\n\t\t\theight: 80%;\r\n\t\t\twidth: 95%;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tdisplay: flex;\r\n\t\t\tflex-direction: row;\r\n\r\n\t\t\t.log-entry {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: row;\r\n\t\t\t\tjustify-content: space-between;\r\n\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\tcolor: #333;\r\n\r\n\t\t\t\t.opName {}\r\n\r\n\t\t\t\t.opSta {}\r\n\r\n\t\t\t\t.opTime {}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.remove-btn {\r\n\t\tmargin-top: 40rpx;\r\n\t\tbackground: #ff3b30;\r\n\t\tcolor: white;\r\n\t\tborder-radius: 50rpx;\r\n\t\tfont-size: 32rpx;\r\n\t\theight: 80rpx;\r\n\t\tline-height: 80rpx;\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/deviceInfo/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","onMounted","getDeviceInfoByDeviceId","uni","deleteDevice","deviceControlInfo","getOpeInfo","getControlInfo"],"mappings":";;;;;;;AAiEC,UAAM,QAAQA,kBAAI,CAAA,CAAE;AACpB,UAAM,eAAeA,kBAAI,GAAG;AAC5B,UAAM,WAAWA,kBAAI,CAAA,CAAE;AACvB,UAAM,OAAOA,kBAAI,CAAA,CAAE;AACnB,UAAM,aAAaA,kBAAI,CAAA,CAAE;AAGzBC,kBAAAA,UAAU,YAAY;AACrB,YAAM,SAAS,kBAAkB,gBAAiB,EAAC,SAAS,CAAC,EAAE;AAC/D,YAAM,aAAa,KAAK,MAAM,mBAAmB,OAAO,MAAM,CAAC;AAC/D,YAAM,QAAQ;AAEd;AAEA;AACA,UAAI;AACH,cAAM,MAAM,MAAMC,UAAAA,wBAAwB,WAAW,YAAY;AACjE,cAAM,QAAQ;AAAA,UACb,GAAG,IAAI;AAAA,UACP,GAAG;AAAA,QACP;AAAA,MACG,SAAQ,OAAO;AACfC,sBAAA,MAAA,MAAA,SAAA,2CAAc,gCAAgC,KAAK;AAAA,MACnD;AAAA,IACH;AAGC,UAAM,qBAAqB,YAAY;AACtC,WAAK,QAAQ;AAAA,QACZ,cAAc,MAAM,MAAM;AAAA,MAC7B;AACE,UAAI;AACH,cAAM,MAAM,MAAMC,UAAAA,aAAa,KAAK,KAAK;AACzC,YAAI,IAAI,SAAS,KAAK;AAErBD,wBAAAA,MAAI,WAAW;AAAA,YACd,KAAK;AAAA,UACV,CAAK;AAAA,QACL,OAAU;AAENA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO;AAAA,YACP,MAAM;AAAA,UACX,CAAK;AAAA,QACD;AAAA,MACD,SAAQ,OAAO;AACfA,sBAAA,MAAA,MAAA,SAAA,4CAAc,4BAA4B,KAAK;AAAA,MAC/C;AAAA,IACH;AAEC,UAAM,sBAAsB,CAAC,MAAM;AAClC,iBAAW,QAAQ;AAAA,QAClB,IAAI,MAAM,MAAM;AAAA,QAChB,qBAAqB,EAAE,OAAO;AAAA,MACjC;AACEE,gBAAAA,kBAAkB,WAAW,KAAK,EAAE,KAAK,CAAC,QAAQ;AAAA,MAEpD,CAAG,EAAE,MAAM,CAAC,UAAU;AACnBF,sBAAA,MAAA,MAAA,SAAA,4CAAc,6BAA6B,KAAK;AAAA,MACnD,CAAG;AAAA,IACH;AAEC,UAAM,gBAAgB,MAAM;AAC3BG,gBAAU,WAAC,MAAM,MAAM,YAAY,EAAE,KAAK,CAAC,QAAQ;AAClD,YAAI,IAAI,SAAS,KAAK;AAErB,mBAAS,QAAQ,IAAI;AAAA,QACrB;AAAA,MACJ,CAAG,EAAE,MAAM,CAAC,MAAM;AACfH,sBAAA,MAAA,MAAA,OAAA,4CAAY,aAAa,CAAC;AAAA,MAC7B,CAAG;AAAA,IACD;AAED,UAAM,iBAAiB,MAAI;AAC1BI,gBAAc,eAAC,MAAM,MAAM,YAAY,EAAE,KAAK,CAAC,QAAM;AAEpD,qBAAa,QAAQ,IAAI,KAAK;AAAA,MACjC,CAAG;AAAA,IACD;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IF,GAAG,WAAW,eAAe;"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["pages/router/deviceInfo/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcm91dGVyL2RldmljZUluZm8vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"info-section\">\r\n\t\t\t<image src=\"/assets/device.png\" mode=\"aspectFit\" class=\"device-image\"></image>\r\n\t\t\t<view class=\"device-info\">\r\n\t\t\t\t<text class=\"title\">{{state.facilityName}}</text>\r\n\t\t\t\t<text class=\"sn\">SN: {{state.facilityCode}}</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"status-grid\">\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: #38b231;\" v-if=\"state.isOnLine==1\">在线</text>\r\n\t\t\t\t\t<text class=\"status-label\" style=\"color: red;\" v-else>离线</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">太阳能{{ state.dcInputVolt }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"status-item\">\r\n\t\t\t\t\t<text class=\"status-label\">信号{{state.rssi}}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"control-section\">\r\n\t\t\t<text class=\"section-title\">实时控制</text>\r\n\t\t\t<slider @change=\"handleControlChange\" min=\"100\" max=\"200\" step=\"25\" active-color=\"#007aff\"\r\n\t\t\t\t:value=\"controlValue\" style=\"width: 650rpx;\r\n\t\t\t\t margin-left: 0rpx;\r\n\t\t\t\t \" :disabled=\"flag\" />\r\n\t\t\t<view class=\"scale-labels\">\r\n\t\t\t\t<text style=\"color: #38b231;\">开</text>\r\n\t\t\t\t<text>125</text>\r\n\t\t\t\t<text>150</text>\r\n\t\t\t\t<text>175</text>\r\n\t\t\t\t<text style=\"color: red;\r\n\t\t\t\tmargin-right: 10rpx;\r\n\t\t\t\t\">关</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"log-section\">\r\n\t\t\t<text class=\"section-title\">设备操作记录</text>\r\n\t\t\t<scroll-view class=\"log-box\" scroll-y=\"true\">\r\n\t\t\t\t<view class=\"log-entry\" v-for=\"(item,index) in logEntry\" :key=\"index\">\r\n\t\t\t\t\t<view class=\"opName\">{{item.operateName}}</view>\r\n\t\t\t\t\t<view class=\"opSta\">{{item.operateStatus }}</view>\r\n\t\t\t\t\t<view class=\"opTime\">{{item.createTimeView}}</view>\r\n\t\t\t\t</view>\r\n\t\t\t</scroll-view>\r\n\t\t</view>\r\n\t\t<button class=\"remove-btn\" @click=\"removeSharedDevice\">移除设备</button>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref,\r\n\t\tonMounted,\r\n\t\twatch\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDeviceInfoByDeviceId,\r\n\t\tdeleteDevice,\r\n\t\tdeviceControlInfo,\r\n\t\tgetOpeInfo,\r\n\t\tgetControlInfo\r\n\t} from '@/api/index.js';\r\n\r\n\tconst state = ref({});\r\n\tconst controlValue = ref(100); // 初始化控制值\r\n\tconst logEntry = ref([]);\r\n\tconst temp = ref({});\r\n\tconst controInfo = ref({});\r\n\t// 看是否禁止使用滑动条\r\n\tconst flag = ref(false);\r\n\t// 定义一个变量来存储定时器ID\r\n\tlet positionInterval;\r\n\r\n\t// 生命周期钩子 - 相当于 Vue 2 的 onLoad\r\n\tonMounted(async () => {\r\n\t\tconst option = getCurrentPages()[getCurrentPages().length - 1].options;\r\n\t\tconst deviceInfo = JSON.parse(decodeURIComponent(option.device));\r\n\t\tstate.value = deviceInfo;\r\n\t\t// 获取操作记录\r\n\t\tgetOpeHistory();\r\n\t\t// 获取实时控制数据\r\n\t\tgetControlData();\r\n\t\ttry {\r\n\t\t\tconst res = await getDeviceInfoByDeviceId(deviceInfo.facilityCode);\r\n\t\t\tstate.value = {\r\n\t\t\t\t...res.data,\r\n\t\t\t\t...deviceInfo\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to fetch device info:', error);\r\n\t\t}\r\n\t}, );\r\n\r\n\tconst startGetPosition = () => {\r\n\t\t// 如果定时器已经存在,则先清除它\r\n\t\tif (positionInterval) {\r\n\t\t\tclearInterval(positionInterval);\r\n\t\t}\r\n\t\tuni.showToast({\r\n\t\t\ttitle:\"操作设备中\",\r\n\t\t\ticon:\"loading\",\r\n\t\t\tmask:true,\r\n\t\t\tduration:3500\r\n\t\t})\r\n\t\t// 设置定时器\r\n\t\tpositionInterval = setInterval(() => {\r\n\t\t\tgetControlInfo(state.value.facilityCode).then((res) => {\r\n\t\t\t\tif (res.data.position >= 100) {\r\n\t\t\t\t\tflag.value = false;\r\n\t\t\t\t\tclearInterval(positionInterval); // 使用存储的定时器ID来清除定时器\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error('Error fetching control info:', error); // 错误处理\r\n\t\t\t\tclearInterval(positionInterval); // 如果请求失败,清除定时器\r\n\t\t\t});\r\n\t\t}, 2000);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * 方法\r\n\t */\r\n\tconst removeSharedDevice = async () => {\r\n\t\ttemp.value = {\r\n\t\t\tfacilityCode: state.value.facilityCode\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tconst res = await deleteDevice(temp.value);\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 删除成功 返回首页面\r\n\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// 删除失败 提示失败信息\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '设备删除失败',\r\n\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Failed to delete device:', error);\r\n\t\t}\r\n\t};\r\n\t// 实时控制\r\n\tconst handleControlChange = (e) => {\r\n\t\tcontroInfo.value = {\r\n\t\t\tsn: state.value.facilityCode,\r\n\t\t\tdestinationPosition: e.detail.value\r\n\t\t};\r\n\t\tdeviceControlInfo(controInfo.value).then((res) => {\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 禁止使用滑动条\r\n\t\t\t\tflag.value = true;\r\n\t\t\t\t// 启动定时器\r\n\t\t\t\tstartGetPosition();\r\n\t\t\t}\r\n\t\t}).catch((error) => {\r\n\t\t\tconsole.error('Failed to control device:', error);\r\n\t\t});\r\n\r\n\t};\r\n\r\n\r\n\t//操作记录\r\n\tconst getOpeHistory = () => {\r\n\t\tgetOpeInfo(state.value.facilityCode).then((res) => {\r\n\t\t\tif (res.code === 200) {\r\n\t\t\t\t// 渲染列表数据到页面上\r\n\t\t\t\tlogEntry.value = res.data\r\n\t\t\t}\r\n\t\t}).catch((e) => {\r\n\t\t\tconsole.log(\"fail info\", e);\r\n\t\t})\r\n\t}\r\n\t// 获取上一次设备的实时控制信息\r\n\tconst getControlData = () => {\r\n\t\tgetControlInfo(state.value.facilityCode).then((res) => {\r\n\t\t\tcontrolValue.value = res.data.position;\r\n\t\t})\r\n\t}\r\n</script>\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n\t.container {\r\n\t\tpadding: 20rpx;\r\n\t\tbackground-color: #f5f5f5;\r\n\t}\r\n\r\n\t.info-section {\r\n\t\tbackground: white;\r\n\t\tborder-radius: 12rpx;\r\n\t\tpadding: 20rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-image {\r\n\t\twidth: 100%;\r\n\t\theight: 300rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\tmargin-bottom: 30rpx;\r\n\r\n\t\t.title {\r\n\t\t\tfont-size: 36rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t\tmargin-bottom: 10rpx;\r\n\t\t}\r\n\r\n\t\t.sn {\r\n\t\t\tfont-size: 28rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: center;\r\n\t\t}\r\n\t}\r\n\r\n\t.status-grid {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\r\n\t\t.status-item {\r\n\t\t\tflex: 1;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tmargin: 0 5rpx;\r\n\r\n\t\t\t.status-label {\r\n\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.control-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\tmargin-bottom: 20rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.scale-labels {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t\tmargin-top: 10rpx;\r\n\t\t\tpadding: 0rpx;\r\n\t\t\tcolor: #666;\r\n\t\t\tfont-size: 26rpx;\r\n\t\t}\r\n\t}\r\n\r\n\t.log-section {\r\n\t\tbackground: white;\r\n\t\tpadding: 20rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t\theight: 450rpx;\r\n\r\n\t\t.section-title {\r\n\t\t\tfont-size: 32rpx;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin-bottom: 20rpx;\r\n\t\t}\r\n\r\n\t\t.log-box {\r\n\t\t\theight: 80%;\r\n\t\t\twidth: 95%;\r\n\t\t\tpadding: 15rpx;\r\n\t\t\tbackground: #f8f8f8;\r\n\t\t\tborder-radius: 8rpx;\r\n\t\t\tdisplay: flex;\r\n\t\t\tflex-direction: row;\r\n\r\n\t\t\t.log-entry {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: row;\r\n\t\t\t\tjustify-content: space-between;\r\n\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\tcolor: #333;\r\n\r\n\t\t\t\t.opName {}\r\n\r\n\t\t\t\t.opSta {}\r\n\r\n\t\t\t\t.opTime {}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.remove-btn {\r\n\t\tmargin-top: 40rpx;\r\n\t\tbackground: #ff3b30;\r\n\t\tcolor: white;\r\n\t\tborder-radius: 50rpx;\r\n\t\tfont-size: 32rpx;\r\n\t\theight: 80rpx;\r\n\t\tline-height: 80rpx;\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/deviceInfo/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","onMounted","getDeviceInfoByDeviceId","uni","getControlInfo","deleteDevice","deviceControlInfo","getOpeInfo"],"mappings":"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"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/main/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/main/index.js.map index aeabdc6..20fbe50 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/main/index.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/router/main/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["pages/router/main/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3h3bC13eC1kZXYvcGFnZXMvcm91dGVyL21haW4vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"device-page\">\r\n\t\t<view v-if=\"devices.length === 0\" class=\"no-devices\">\r\n\t\t\t暂无设备\r\n\t\t\t<button class=\"add-device-btn\" @click=\"addHandler\">\r\n\t\t\t\t添加设备\r\n\t\t\t</button>\r\n\t\t</view>\r\n\t\t<view v-else class=\"deviceList\">\r\n\t\t\t<view v-for=\"(device, index) in devices\" :key=\"index\" class=\"device-item\" @click=\"editDeviceInfo(device)\">\r\n\t\t\t\t<img src=\"/assets/test.png\" class=\"device-image\" />\r\n\t\t\t\t<div class=\"device-info\">\r\n\t\t\t\t\t<p class=\"device-name\">{{ device.facilityName }}</p>\r\n\t\t\t\t\t<p class=\"device-model\">SN:{{ device.facilityCode }}</p>\r\n\t\t\t\t\t<p v-if=\"device.isOnLine==1\" class=\"device-status_zx\">在线</p>\r\n\t\t\t\t\t<p v-else class=\"device-status_lx\">离线</p>\r\n\t\t\t\t</div>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDevicesByiOpenId,\r\n\t\tbindDevice\r\n\t} from '@/api/index.js'\r\n\r\n\t// 设备信息\r\n\tconst devices = ref([{}]);\r\n\r\n\t// 传递给后端的参数\r\n\tconst state = {\r\n\t\tproductId: \"\",\r\n\t\tfacilityCode: \"\",\r\n\t\tsignature: \"\"\r\n\t}\r\n\t\r\n\t// 获取用户设备table\r\n\tconst getDeviceTable = () => {\r\n\t\tgetDevicesByiOpenId(uni.getStorageSync(\"openId\")).then((res) => {\r\n\t\t\tdevices.value = res.data;\r\n\t\t})\r\n\t}\r\n\t// 查看设备信息\r\n\tconst editDeviceInfo = (device) => {\r\n\t\t//console.log(facilityCode);\r\n\t\tuni.navigateTo({\r\n\t\t\turl: `/pages/router/deviceInfo/index?device=${encodeURIComponent(JSON.stringify(device))}`,\r\n\t\t})\r\n\t}\r\n\r\n\t//绑定设备\r\n\tconst addHandler = () => {\r\n\t\tuni.scanCode({\r\n\t\t\tscanType: ['qrCode', 'barCode'], // 扫码类型为二维码或条形码\r\n\t\t\tsuccess: function(res) {\r\n\t\t\t\t// 扫码成功后的回调\r\n\t\t\t\tlet temp = JSON.parse(res.result);\r\n\t\t\t\tstate.facilityCode = temp.DeviceName;\r\n\t\t\t\tstate.productId = temp.ProductId;\r\n\t\t\t\tstate.signature = temp.Signature;\r\n\t\t\t\tconsole.log(state);\r\n\t\t\t\tbindDevice(state).then((res) => {\r\n\t\t\t\t\tif (res.code === 200) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '设备绑定成功',\r\n\t\t\t\t\t\t\t\ticon: 'success',\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t// 刷新页面\r\n\t\t\t\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '设备绑定失败',\r\n\t\t\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\tfail: function(err) {\r\n\t\t\t\t// 扫码失败后的回调\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '扫描失败',\r\n\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonMounted(() => {\r\n\t\tgetDeviceTable();\r\n\t})\r\n</script>\r\n\r\n<style scoped>\r\n\t.device-page {\r\n\t\ttext-align: center;\r\n\t\tpadding: 10px;\r\n\t}\r\n\r\n\t.no-devices {\r\n\t\tfont-size: 18px;\r\n\t\tcolor: #666;\r\n\t\tmargin-top: 300rpx;\r\n\t}\r\n\r\n\t.add-device-btn {\r\n\t\tpadding: 10px 20px;\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #fff;\r\n\t\tbackground-color: #007bff;\r\n\t\tborder: none;\r\n\t\tborder-radius: 5px;\r\n\t\tcursor: pointer;\r\n\t\tmargin-top: 10px;\r\n\t}\r\n\r\n\t.deviceList {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tgap: 20px;\r\n\t\t/* 设备项之间的间距 */\r\n\t\tmax-height: calc(100vh - 120px);\r\n\t\t/* 假设你希望为其他内容(如页眉/页脚)留出空间 */\r\n\t\toverflow-y: auto;\r\n\t\t/* 添加垂直滚动条 */\r\n\t\tpadding: 0 10rpx;\r\n\t\t/* 可选:为滚动内容添加一些内边距 */\r\n\t\tbox-sizing: border-box;\r\n\t\t/* 确保内边距和边框不会增加容器的高度 */\r\n\t}\r\n\r\n\t.device-item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\ttext-align: center;\r\n\t\twidth: 100%;\r\n\t\t/* 根据需要调整宽度 */\r\n\t\tmax-width: 600rpx;\r\n\t\t/* 设置最大宽度,以便在桌面端更好地展示 */\r\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n\t\t/* 添加一些阴影效果 */\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 5px;\r\n\t}\r\n\r\n\t/*图片样式*/\r\n\t.device-image {\r\n\t\twidth: 40%;\r\n\t\theight: 250rpx;\r\n\t\t/* \t\tbox-shadow: #666; */\r\n\t\tborder-radius: 5px;\r\n\t\tmargin-bottom: 10px;\r\n\t\tmargin-right: 20rpx;\r\n\t\tborder: 1rpx gray solid;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\ttext-align: left;\r\n\t\t/* 设备信息左对齐 */\r\n\t}\r\n\r\n\t.device-name {\r\n\t\tmargin: 5rpx 0;\r\n\t\tfont-size: 35rpx;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\t.device-model {\r\n\t\tmargin: 5px 0;\r\n\t\tfont-size: small;\r\n\t}\r\n\r\n\t.device-status_zx {\r\n\t\tbackground-color: #4CAF50;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.device-status_lx {\r\n\t\tbackground-color: red;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/main/index.vue'\nwx.createComponent(Component)"],"names":["ref","getDevicesByiOpenId","uni","bindDevice","res","onMounted"],"mappings":";;;;;;;AAiCC,UAAM,UAAUA,cAAAA,IAAI,CAAC,CAAA,CAAE,CAAC;AAGxB,UAAM,QAAQ;AAAA,MACb,WAAW;AAAA,MACX,cAAc;AAAA,MACd,WAAW;AAAA,IACX;AAGD,UAAM,iBAAiB,MAAM;AAC5BC,gBAAmB,oBAACC,cAAG,MAAC,eAAe,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ;AAC/D,gBAAQ,QAAQ,IAAI;AAAA,MACvB,CAAG;AAAA,IACD;AAED,UAAM,iBAAiB,CAAC,WAAW;AAElCA,oBAAAA,MAAI,WAAW;AAAA,QACd,KAAK,yCAAyC,mBAAmB,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,MAC3F,CAAG;AAAA,IACD;AAGD,UAAM,aAAa,MAAM;AACxBA,oBAAAA,MAAI,SAAS;AAAA,QACZ,UAAU,CAAC,UAAU,SAAS;AAAA;AAAA,QAC9B,SAAS,SAAS,KAAK;AAEtB,cAAI,OAAO,KAAK,MAAM,IAAI,MAAM;AAChC,gBAAM,eAAe,KAAK;AAC1B,gBAAM,YAAY,KAAK;AACvB,gBAAM,YAAY,KAAK;AACvBA,wBAAAA,MAAY,MAAA,OAAA,qCAAA,KAAK;AACjBC,oBAAAA,WAAW,KAAK,EAAE,KAAK,CAACC,SAAQ;AAC/B,gBAAIA,KAAI,SAAS,KAAK;AACrBF,4BAAAA,MAAI,UAAU;AAAA,gBACZ,OAAO;AAAA,gBACP,MAAM;AAAA,cACd,CAAQ;AAAA,cAEDA,cAAAA,MAAI,WAAW;AAAA,gBACd,KAAK;AAAA,cACb,CAAQ;AAAA,YACR,OAAY;AACNA,4BAAAA,MAAI,UAAU;AAAA,gBACb,OAAO;AAAA,gBACP,MAAM;AAAA,cACb,CAAO;AAAA,YACD;AAAA,UACN,CAAK;AAAA,QACD;AAAA,QACD,MAAM,SAAS,KAAK;AAEnBA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO;AAAA,YACP,MAAM;AAAA,UACX,CAAK;AAAA,QACD;AAAA,MACJ,CAAG;AAAA,IACD;AAEDG,kBAAAA,UAAU,MAAM;AACf;IACF,CAAE;;;;;;;;;;;;;;;;;;;;;;;AChGF,GAAG,gBAAgB,SAAS;"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["pages/router/main/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3h3bC13eC1kZXYvcGFnZXMvcm91dGVyL21haW4vaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"device-page\">\r\n\t\t<view v-if=\"devices.length === 0\" class=\"no-devices\">\r\n\t\t\t暂无设备\r\n\t\t\t<button class=\"add-device-btn\" @click=\"addHandler\">\r\n\t\t\t\t添加设备\r\n\t\t\t</button>\r\n\t\t</view>\r\n\t\t<view v-else class=\"deviceList\">\r\n\t\t\t<view v-for=\"(device, index) in devices\" :key=\"index\" class=\"device-item\" @click=\"editDeviceInfo(device)\">\r\n\t\t\t\t<img src=\"/assets/device.png\" class=\"device-image\" />\r\n\t\t\t\t<div class=\"device-info\">\r\n\t\t\t\t\t<p class=\"device-name\">{{ device.facilityName }}</p>\r\n\t\t\t\t\t<p class=\"device-model\">SN:{{ device.facilityCode }}</p>\r\n\t\t\t\t\t<p v-if=\"device.isOnLine==1\" class=\"device-status_zx\">在线</p>\r\n\t\t\t\t\t<p v-else class=\"device-status_lx\">离线</p>\r\n\t\t\t\t</div>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tgetDevicesByiOpenId,\r\n\t\tbindDevice\r\n\t} from '@/api/index.js'\r\n\r\n\t// 设备信息\r\n\tconst devices = ref([{}]);\r\n\r\n\t// 传递给后端的参数\r\n\tconst state = {\r\n\t\tproductId: \"\",\r\n\t\tfacilityCode: \"\",\r\n\t\tsignature: \"\"\r\n\t}\r\n\t\r\n\t// 获取用户设备table\r\n\tconst getDeviceTable = () => {\r\n\t\tgetDevicesByiOpenId(uni.getStorageSync(\"openId\")).then((res) => {\r\n\t\t\tdevices.value = res.data;\r\n\t\t})\r\n\t}\r\n\t// 查看设备信息\r\n\tconst editDeviceInfo = (device) => {\r\n\t\t//console.log(facilityCode);\r\n\t\tuni.navigateTo({\r\n\t\t\turl: `/pages/router/deviceInfo/index?device=${encodeURIComponent(JSON.stringify(device))}`,\r\n\t\t})\r\n\t}\r\n\r\n\t//绑定设备\r\n\tconst addHandler = () => {\r\n\t\tuni.scanCode({\r\n\t\t\tscanType: ['qrCode', 'barCode'], // 扫码类型为二维码或条形码\r\n\t\t\tsuccess: function(res) {\r\n\t\t\t\t// 扫码成功后的回调\r\n\t\t\t\tlet temp = JSON.parse(res.result);\r\n\t\t\t\tstate.facilityCode = temp.DeviceName;\r\n\t\t\t\tstate.productId = temp.ProductId;\r\n\t\t\t\tstate.signature = temp.Signature;\r\n\t\t\t\tconsole.log(state);\r\n\t\t\t\tbindDevice(state).then((res) => {\r\n\t\t\t\t\tif (res.code === 200) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '设备绑定成功',\r\n\t\t\t\t\t\t\t\ticon: 'success',\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t// 刷新页面\r\n\t\t\t\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\t\t\t\turl: \"/pages/layout/index\"\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '设备绑定失败',\r\n\t\t\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\tfail: function(err) {\r\n\t\t\t\t// 扫码失败后的回调\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '扫描失败',\r\n\t\t\t\t\ticon: 'fail',\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonMounted(() => {\r\n\t\tgetDeviceTable();\r\n\t})\r\n</script>\r\n\r\n<style scoped>\r\n\t.device-page {\r\n\t\ttext-align: center;\r\n\t\tpadding: 10px;\r\n\t}\r\n\r\n\t.no-devices {\r\n\t\tfont-size: 18px;\r\n\t\tcolor: #666;\r\n\t\tmargin-top: 300rpx;\r\n\t}\r\n\r\n\t.add-device-btn {\r\n\t\tpadding: 10px 20px;\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #fff;\r\n\t\tbackground-color: #007bff;\r\n\t\tborder: none;\r\n\t\tborder-radius: 5px;\r\n\t\tcursor: pointer;\r\n\t\tmargin-top: 10px;\r\n\t}\r\n\r\n\t.deviceList {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tgap: 20px;\r\n\t\t/* 设备项之间的间距 */\r\n\t\tmax-height: calc(100vh - 120px);\r\n\t\t/* 假设你希望为其他内容(如页眉/页脚)留出空间 */\r\n\t\toverflow-y: auto;\r\n\t\t/* 添加垂直滚动条 */\r\n\t\tpadding: 0 10rpx;\r\n\t\t/* 可选:为滚动内容添加一些内边距 */\r\n\t\tbox-sizing: border-box;\r\n\t\t/* 确保内边距和边框不会增加容器的高度 */\r\n\t}\r\n\r\n\t.device-item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\ttext-align: center;\r\n\t\twidth: 100%;\r\n\t\t/* 根据需要调整宽度 */\r\n\t\tmax-width: 600rpx;\r\n\t\t/* 设置最大宽度,以便在桌面端更好地展示 */\r\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n\t\t/* 添加一些阴影效果 */\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 5px;\r\n\t}\r\n\r\n\t/*图片样式*/\r\n\t.device-image {\r\n\t\twidth: 40%;\r\n\t\theight: 250rpx;\r\n\t\t/* \t\tbox-shadow: #666; */\r\n\t\tborder-radius: 5px;\r\n\t\tmargin-bottom: 10px;\r\n\t\tmargin-right: 20rpx;\r\n\t\tborder: 1rpx gray solid;\r\n\t}\r\n\r\n\t.device-info {\r\n\t\ttext-align: left;\r\n\t\t/* 设备信息左对齐 */\r\n\t}\r\n\r\n\t.device-name {\r\n\t\tmargin: 5rpx 0;\r\n\t\tfont-size: 35rpx;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\t.device-model {\r\n\t\tmargin: 5px 0;\r\n\t\tfont-size: small;\r\n\t}\r\n\r\n\t.device-status_zx {\r\n\t\tbackground-color: #4CAF50;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.device-status_lx {\r\n\t\tbackground-color: red;\r\n\t\tcolor: #fff;\r\n\t\tpadding: 4px 12px;\r\n\t\tborder-radius: 12px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/main/index.vue'\nwx.createComponent(Component)"],"names":["ref","getDevicesByiOpenId","uni","bindDevice","res","onMounted"],"mappings":";;;;;;;AAiCC,UAAM,UAAUA,cAAAA,IAAI,CAAC,CAAA,CAAE,CAAC;AAGxB,UAAM,QAAQ;AAAA,MACb,WAAW;AAAA,MACX,cAAc;AAAA,MACd,WAAW;AAAA,IACX;AAGD,UAAM,iBAAiB,MAAM;AAC5BC,gBAAmB,oBAACC,cAAG,MAAC,eAAe,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ;AAC/D,gBAAQ,QAAQ,IAAI;AAAA,MACvB,CAAG;AAAA,IACD;AAED,UAAM,iBAAiB,CAAC,WAAW;AAElCA,oBAAAA,MAAI,WAAW;AAAA,QACd,KAAK,yCAAyC,mBAAmB,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,MAC3F,CAAG;AAAA,IACD;AAGD,UAAM,aAAa,MAAM;AACxBA,oBAAAA,MAAI,SAAS;AAAA,QACZ,UAAU,CAAC,UAAU,SAAS;AAAA;AAAA,QAC9B,SAAS,SAAS,KAAK;AAEtB,cAAI,OAAO,KAAK,MAAM,IAAI,MAAM;AAChC,gBAAM,eAAe,KAAK;AAC1B,gBAAM,YAAY,KAAK;AACvB,gBAAM,YAAY,KAAK;AACvBA,wBAAAA,MAAY,MAAA,OAAA,qCAAA,KAAK;AACjBC,oBAAAA,WAAW,KAAK,EAAE,KAAK,CAACC,SAAQ;AAC/B,gBAAIA,KAAI,SAAS,KAAK;AACrBF,4BAAAA,MAAI,UAAU;AAAA,gBACZ,OAAO;AAAA,gBACP,MAAM;AAAA,cACd,CAAQ;AAAA,cAEDA,cAAAA,MAAI,WAAW;AAAA,gBACd,KAAK;AAAA,cACb,CAAQ;AAAA,YACR,OAAY;AACNA,4BAAAA,MAAI,UAAU;AAAA,gBACb,OAAO;AAAA,gBACP,MAAM;AAAA,cACb,CAAO;AAAA,YACD;AAAA,UACN,CAAK;AAAA,QACD;AAAA,QACD,MAAM,SAAS,KAAK;AAEnBA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO;AAAA,YACP,MAAM;AAAA,UACX,CAAK;AAAA,QACD;AAAA,MACJ,CAAG;AAAA,IACD;AAEDG,kBAAAA,UAAU,MAAM;AACf;IACF,CAAE;;;;;;;;;;;;;;;;;;;;;;;AChGF,GAAG,gBAAgB,SAAS;"} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/assets/device.5a6420f4.png b/unpackage/dist/dev/mp-weixin/assets/device.5a6420f4.png new file mode 100644 index 0000000..d34f261 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/assets/device.5a6420f4.png Binary files differ diff --git a/unpackage/dist/dev/mp-weixin/common/assets.js b/unpackage/dist/dev/mp-weixin/common/assets.js index fe2bc6f..cae1fc9 100644 --- a/unpackage/dist/dev/mp-weixin/common/assets.js +++ b/unpackage/dist/dev/mp-weixin/common/assets.js @@ -1,7 +1,7 @@ "use strict"; const _imports_0$1 = "/static/images/login/logo.png"; const _imports_1 = "/static/images/login/wx.png"; -const _imports_0 = "/assets/test.dfa37654.png"; +const _imports_0 = "/assets/device.5a6420f4.png"; exports._imports_0 = _imports_0$1; exports._imports_0$1 = _imports_0; exports._imports_1 = _imports_1; diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js index ce01922..d8fbcf9 100644 --- a/unpackage/dist/dev/mp-weixin/common/vendor.js +++ b/unpackage/dist/dev/mp-weixin/common/vendor.js @@ -6983,7 +6983,7 @@ function initRuntimeSocketService() { const hosts = "192.168.0.114,127.0.0.1"; const port = "8090"; - const id = "mp-weixin_pVo6MG"; + const id = "mp-weixin_YTr4BK"; const lazy = typeof swan !== "undefined"; let restoreError = lazy ? () => { } : initOnError(); diff --git a/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.js b/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.js index 3308655..22eb8fc 100644 --- a/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.js +++ b/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.js @@ -10,6 +10,8 @@ const logEntry = common_vendor.ref([]); const temp = common_vendor.ref({}); const controInfo = common_vendor.ref({}); + const flag = common_vendor.ref(false); + let positionInterval; common_vendor.onMounted(async () => { const option = getCurrentPages()[getCurrentPages().length - 1].options; const deviceInfo = JSON.parse(decodeURIComponent(option.device)); @@ -23,9 +25,31 @@ ...deviceInfo }; } catch (error) { - common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:88", "Failed to fetch device info:", error); + common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:92", "Failed to fetch device info:", error); } }); + const startGetPosition = () => { + if (positionInterval) { + clearInterval(positionInterval); + } + common_vendor.index.showToast({ + title: "操作设备中", + icon: "loading", + mask: true, + duration: 3500 + }); + positionInterval = setInterval(() => { + api_index.getControlInfo(state.value.facilityCode).then((res) => { + if (res.data.position >= 100) { + flag.value = false; + clearInterval(positionInterval); + } + }).catch((error) => { + common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:115", "Error fetching control info:", error); + clearInterval(positionInterval); + }); + }, 2e3); + }; const removeSharedDevice = async () => { temp.value = { facilityCode: state.value.facilityCode @@ -43,7 +67,7 @@ }); } } catch (error) { - common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:112", "Failed to delete device:", error); + common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:144", "Failed to delete device:", error); } }; const handleControlChange = (e) => { @@ -52,8 +76,12 @@ destinationPosition: e.detail.value }; api_index.deviceControlInfo(controInfo.value).then((res) => { + if (res.code === 200) { + flag.value = true; + startGetPosition(); + } }).catch((error) => { - common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:124", "Failed to control device:", error); + common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:161", "Failed to control device:", error); }); }; const getOpeHistory = () => { @@ -62,7 +90,7 @@ logEntry.value = res.data; } }).catch((e) => { - common_vendor.index.__f__("log", "at pages/router/deviceInfo/index.vue:135", "fail info", e); + common_vendor.index.__f__("log", "at pages/router/deviceInfo/index.vue:175", "fail info", e); }); }; const getControlData = () => { @@ -81,7 +109,8 @@ f: common_vendor.t(state.value.rssi), g: common_vendor.o(handleControlChange), h: controlValue.value, - i: common_vendor.f(logEntry.value, (item, index, i0) => { + i: flag.value, + j: common_vendor.f(logEntry.value, (item, index, i0) => { return { a: common_vendor.t(item.operateName), b: common_vendor.t(item.operateStatus), @@ -89,7 +118,7 @@ d: index }; }), - j: common_vendor.o(removeSharedDevice) + k: common_vendor.o(removeSharedDevice) }); }; } diff --git a/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.wxml b/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.wxml index 0eb4d19..d488716 100644 --- a/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/router/deviceInfo/index.wxml @@ -1 +1 @@ -<view class="container data-v-68c572bb"><view class="info-section data-v-68c572bb"><image src="{{a}}" mode="aspectFit" class="device-image data-v-68c572bb"></image><view class="device-info data-v-68c572bb"><text class="title data-v-68c572bb">{{b}}</text><text class="sn data-v-68c572bb">SN: {{c}}</text></view><view class="status-grid data-v-68c572bb"><view class="status-item data-v-68c572bb"><text wx:if="{{d}}" class="status-label data-v-68c572bb" style="color:#38b231">在线</text><text wx:else class="status-label data-v-68c572bb" style="color:red">离线</text></view><view class="status-item data-v-68c572bb"><text class="status-label data-v-68c572bb">太阳能{{e}}</text></view><view class="status-item data-v-68c572bb"><text class="status-label data-v-68c572bb">信号{{f}}</text></view></view></view><view class="control-section data-v-68c572bb"><text class="section-title data-v-68c572bb">实时控制</text><slider class="data-v-68c572bb" bindchange="{{g}}" min="100" max="200" step="25" active-color="#007aff" value="{{h}}" style="width:650rpx;margin-left:0rpx"/><view class="scale-labels data-v-68c572bb"><text class="data-v-68c572bb" style="color:#38b231">开</text><text class="data-v-68c572bb">125</text><text class="data-v-68c572bb">150</text><text class="data-v-68c572bb">175</text><text class="data-v-68c572bb" style="color:red;margin-right:10rpx">关</text></view></view><view class="log-section data-v-68c572bb"><text class="section-title data-v-68c572bb">设备操作记录</text><scroll-view class="log-box data-v-68c572bb" scroll-y="true"><view wx:for="{{i}}" wx:for-item="item" wx:key="d" class="log-entry data-v-68c572bb"><view class="opName data-v-68c572bb">{{item.a}}</view><view class="opSta data-v-68c572bb">{{item.b}}</view><view class="opTime data-v-68c572bb">{{item.c}}</view></view></scroll-view></view><button class="remove-btn data-v-68c572bb" bindtap="{{j}}">移除设备</button></view> \ No newline at end of file +<view class="container data-v-68c572bb"><view class="info-section data-v-68c572bb"><image src="{{a}}" mode="aspectFit" class="device-image data-v-68c572bb"></image><view class="device-info data-v-68c572bb"><text class="title data-v-68c572bb">{{b}}</text><text class="sn data-v-68c572bb">SN: {{c}}</text></view><view class="status-grid data-v-68c572bb"><view class="status-item data-v-68c572bb"><text wx:if="{{d}}" class="status-label data-v-68c572bb" style="color:#38b231">在线</text><text wx:else class="status-label data-v-68c572bb" style="color:red">离线</text></view><view class="status-item data-v-68c572bb"><text class="status-label data-v-68c572bb">太阳能{{e}}</text></view><view class="status-item data-v-68c572bb"><text class="status-label data-v-68c572bb">信号{{f}}</text></view></view></view><view class="control-section data-v-68c572bb"><text class="section-title data-v-68c572bb">实时控制</text><slider class="data-v-68c572bb" bindchange="{{g}}" min="100" max="200" step="25" active-color="#007aff" value="{{h}}" style="width:650rpx;margin-left:0rpx" disabled="{{i}}"/><view class="scale-labels data-v-68c572bb"><text class="data-v-68c572bb" style="color:#38b231">开</text><text class="data-v-68c572bb">125</text><text class="data-v-68c572bb">150</text><text class="data-v-68c572bb">175</text><text class="data-v-68c572bb" style="color:red;margin-right:10rpx">关</text></view></view><view class="log-section data-v-68c572bb"><text class="section-title data-v-68c572bb">设备操作记录</text><scroll-view class="log-box data-v-68c572bb" scroll-y="true"><view wx:for="{{j}}" wx:for-item="item" wx:key="d" class="log-entry data-v-68c572bb"><view class="opName data-v-68c572bb">{{item.a}}</view><view class="opSta data-v-68c572bb">{{item.b}}</view><view class="opTime data-v-68c572bb">{{item.c}}</view></view></scroll-view></view><button class="remove-btn data-v-68c572bb" bindtap="{{k}}">移除设备</button></view> \ No newline at end of file -- Gitblit v1.9.3