已修改21个文件
已删除123个文件
已添加2个文件
| | |
| | | // export const BASE_URL = 'http://113.250.189.120:8037' |
| | | // export const BASE_URL = 'http://192.168.0.105:8031' |
| | | // export const BASE_URL = 'https://www.huiwuyuntong.com/water-drinking-beta' |
| | | export const BASE_URL = 'http://192.168.0.200:8037' |
| | | export const BASE_URL = 'https://www.huiwuyuntong.com/sxwl-data-beta' |
| | | // export const BASE_URL = 'http://192.168.0.200:8037' |
| | |
| | | "appid" : "wx2ed2d90c4a3a52a9", |
| | | "setting" : { |
| | | "urlCheck" : false, |
| | | "minified" : false |
| | | "minified" : true |
| | | }, |
| | | "usingComponents" : true |
| | | }, |
| | |
| | | <view class="content"> |
| | | <!-- 顶部品牌区 --> |
| | | <view class="brand-section"> |
| | | <image class="logo" src="../../static/images/login/logo.png" mode="aspectFit"></image> |
| | | <text class="brand-name">首熙物联</text> |
| | | <text class="brand-subtitle">智能物联平台</text> |
| | | <image class="logo" src="../../static/images/login/sxwllogo.png" mode="aspectFit"></image> |
| | | <text class="brand-name">智能物联平台</text> |
| | | <!-- <text class="brand-subtitle"></text> --> |
| | | </view> |
| | | |
| | | <!-- 登录主体 --> |
| | |
| | | const flag = ref(false); |
| | | // 定义一个变量来存储定时器ID |
| | | let positionInterval; |
| | | // 控制 toast 是否已经显示的标志 |
| | | let toastShown = false; |
| | | |
| | | |
| | | // 生命周期钩子 - 相当于 Vue 2 的 onLoad |
| | | onMounted(async () => { |
| | |
| | | console.error('Failed to fetch device info:', error); |
| | | } |
| | | }, ); |
| | | |
| | | const startGetPosition = () => { |
| | | uni.showLoading({ |
| | | title: "正在操作设备", |
| | | mask: true |
| | | }) |
| | | // 如果定时器已经存在,则先清除它 |
| | | 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来清除定时器 |
| | | uni.hideLoading(); // 隐藏加载框 |
| | | } |
| | | }).catch((error) => { |
| | | console.error('Error fetching control info:', error); // 错误处理 |
| | |
| | | state.facilityCode = temp.DeviceName; |
| | | state.productId = temp.ProductId; |
| | | state.signature = temp.Signature; |
| | | console.log(state); |
| | | // console.log(state); |
| | | bindDevice(state).then((res) => { |
| | | if (res.code === 200) { |
| | | uni.showToast({ |
| | |
| | | {"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":[]} |
| | | {"version":3,"names":["state","common_vendor","ref","controlValue","logEntry","temp","controInfo","flag","positionInterval","onMounted","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","option","deviceInfo","res","wrap","_callee$","_context","prev","next","getCurrentPages","length","options","JSON","parse","decodeURIComponent","device","value","getOpeHistory","getControlData","api_index","getDeviceInfoByDeviceId","facilityCode","sent","_objectSpread2","data","t0","index","__f__","stop","startGetPosition","showLoading","title","mask","clearInterval","setInterval","getControlInfo","then","position","hideLoading","catch","error","removeSharedDevice","_ref2","_callee2","_callee2$","_context2","deleteDevice","code","redirectTo","url","showToast","icon","apply","arguments","handleControlChange","e","sn","destinationPosition","detail","deviceControlInfo","getOpeInfo","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/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 \" \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\t// 控制 toast 是否已经显示的标志\r\n\tlet toastShown = false;\r\n\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\tuni.showLoading({\r\n\t\t\ttitle: \"正在操作设备\",\r\n\t\t\tmask:true\r\n\t\t})\r\n\t\t// 如果定时器已经存在,则先清除它\r\n\t\tif (positionInterval) {\r\n\t\t\tclearInterval(positionInterval);\r\n\t\t}\r\n\t\t// 设置定时器\r\n\t\tpositionInterval = setInterval(() => {\r\n\t\t\t// 后面需要改if里面的条件\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\tuni.hideLoading(); // 隐藏加载框\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)"],"mappings":"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","ignoreList":[]} |
| | |
| | | {"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":[]} |
| | | {"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","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/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\t// console.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;UAEvBzB,SAAA,CAAA0B,UAAA,CAAW/B,KAAK,EAAES,IAAA,CAAK,UAACuB,IAAA,EAAQ;YAC/B,IAAIA,IAAA,CAAIC,IAAA,KAAS,KAAK;cACrBnC,aAAA,CAAAS,KAAA,CAAI2B,SAAA,CAAU;gBACZC,KAAA,EAAO;gBACPC,IAAA,EAAM;cACd,CAAQ;cAAA;cAEDtC,aAAA,CAAAS,KAAA,CAAI8B,UAAA,CAAW;gBACdrB,GAAA,EAAK;cACb,CAAQ;YACR,OAAY;cACNlB,aAAA,CAAAS,KAAA,CAAI2B,SAAA,CAAU;gBACbC,KAAA,EAAO;gBACPC,IAAA,EAAM;cACb,CAAO;YACD;UACN,CAAK;QACD;QACDE,IAAA,EAAM,SAANA,KAAeC,GAAA,EAAK;UAEnBzC,aAAA,CAAAS,KAAA,CAAI2B,SAAA,CAAU;YACbC,KAAA,EAAO;YACPC,IAAA,EAAM;UACX,CAAK;QACD;MACJ,CAAG;IACD;IAEDtC,aAAA,CAAA0C,SAAA,CAAU,YAAM;MACfpC,cAAA;IACF,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;AChGFqC,EAAA,CAAGC,eAAA,CAAgBC,SAAS","ignoreList":[]} |
| | |
| | | {"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;;;;"} |
| | | {"version":3,"file":"assets.js","sources":["static/images/login/sxwllogo.png","static/images/login/wx.png","assets/device.png"],"sourcesContent":["export default \"__VITE_ASSET__38360ff7__\"","export default \"__VITE_ASSET__5fb9601d__\"","export default \"__VITE_ASSET__5a6420f4__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;"} |
| | |
| | | {"version":3,"file":"config.js","sources":["config/config.js"],"sourcesContent":["// export const BASE_URL = 'http://113.250.189.120:8037'\n// export const BASE_URL = 'http://192.168.0.105:8031'\n// export const BASE_URL = 'https://www.huiwuyuntong.com/water-drinking-beta'\r\nexport const BASE_URL = 'http://192.168.0.200:8037'"],"names":[],"mappings":";AAGY,MAAC,WAAW;;"} |
| | | {"version":3,"file":"config.js","sources":["config/config.js"],"sourcesContent":["// export const BASE_URL = 'http://113.250.189.120:8037'\n// export const BASE_URL = 'http://192.168.0.105:8031'\nexport const BASE_URL = 'https://www.huiwuyuntong.com/sxwl-data-beta'\r\n// export const BASE_URL = 'http://192.168.0.200:8037'"],"names":[],"mappings":";AAEY,MAAC,WAAW;;"} |
| | |
| | | {"version":3,"file":"index.js","sources":["pages/login/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbG9naW4vaW5kZXgudnVl"],"sourcesContent":["<script setup>\r\n\timport {\r\n\t\twxLoginApi\r\n\t} from '@/api/index.js'\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue'\r\n\timport {\r\n\t\tBASE_URL\r\n\t} from '@/config/config.js';\r\n\tconst baseUrl = ref(BASE_URL)\r\n\r\n\r\n\t//用户点击微信登录默认授权\r\n\tfunction wxLogin() {\r\n\t\tif (!uni.getStorageSync('openId') || !uni.getStorageSync('token')) {\r\n\t\t\twx.login({\r\n\t\t\t\tsuccess: async (res1) => {\r\n\t\t\t\t\t//存储微信登录的code,调用后端接口传递code参数,返回openid(也就是userId)存储到本地,通过判断本地是否存在openId,存在表示已登录\r\n\t\t\t\t\tuni.setStorageSync('code', res1.code)\r\n\t\t\t\t\tawait wxLoginApi({\r\n\t\t\t\t\t\tcode: res1.code\r\n\t\t\t\t\t}).then((res2) => {\r\n\t\t\t\t\t\tif (res2.code == 200) {\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\t\tuni.setStorageSync('openId', res2.data.userId)\r\n\t\t\t\t\t\t\tuni.setStorageSync('token', res2.data.token)\r\n\t\t\t\t\t\t} else {\r\n\t\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: 'none',\r\n\t\t\t\t\t\t\t})\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\tfail: (e) => {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '微信登录失败,请退出重试!',\r\n\t\t\t\t\t\tduration: 2000,\r\n\t\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tuni.redirectTo({\r\n\t\t\t\turl: '/pages/layout/index'\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"content\">\r\n\t\t\t<!-- 顶部品牌区 -->\r\n\t\t\t<view class=\"brand-section\">\r\n\t\t\t\t<image class=\"logo\" src=\"../../static/images/login/logo.png\" mode=\"aspectFit\"></image>\r\n\t\t\t\t<text class=\"brand-name\">首熙物联</text>\r\n\t\t\t\t<text class=\"brand-subtitle\">智能物联平台</text>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 登录主体 -->\r\n\t\t\t<view class=\"auth-section\">\r\n\t\t\t\t<view class=\"welcome-text\">\r\n\t\t\t\t\t<text class=\"welcome-ch\">欢迎登录</text>\r\n\t\t\t\t\t<text class=\"welcome-en\">Welcome Back</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<!-- 微信登录按钮 -->\r\n\t\t\t\t<view class=\"wx-login-btn\" @click=\"wxLogin\">\r\n\t\t\t\t\t<image class=\"wx-icon\" src=\"../../static/images/login/wx.png\"></image>\r\n\t\t\t\t\t<text class=\"btn-text\">微信一键登录</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<!-- 底部装饰 -->\r\n\t\t<view class=\"decor-circle circle-1\"></view>\r\n\t\t<view class=\"decor-circle circle-2\"></view>\r\n\t</view>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t.container {\r\n\t\theight: 100vh;\r\n\t\tbackground: linear-gradient(135deg, #4a90e2 0%, #5bc0de 100%);\r\n\t\tposition: relative;\r\n\t\toverflow: hidden;\r\n\r\n\t\t.content {\r\n\t\t\tpadding: 0 40rpx;\r\n\t\t\tposition: relative;\r\n\t\t\tz-index: 2;\r\n\t\t}\r\n\r\n\t\t/* 品牌标识 */\r\n\t\t.brand-section {\r\n\t\t\tpadding-top: 120rpx;\r\n\t\t\ttext-align: center;\r\n\r\n\t\t\t.logo {\r\n\t\t\t\twidth: 160rpx;\r\n\t\t\t\theight: 160rpx;\r\n\t\t\t\tborder-radius: 24rpx;\r\n\t\t\t\tbox-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.1);\r\n\t\t\t}\r\n\r\n\t\t\t.brand-name {\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tfont-size: 48rpx;\r\n\t\t\t\tcolor: #fff;\r\n\t\t\t\tmargin: 40rpx 0 16rpx;\r\n\t\t\t\tletter-spacing: 2rpx;\r\n\t\t\t\tfont-weight: 500;\r\n\t\t\t}\r\n\r\n\t\t\t.brand-subtitle {\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: rgba(255, 255, 255, 0.9);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* 登录区域 */\r\n\t\t.auth-section {\r\n\t\t\tmargin-top: 120rpx;\r\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\r\n\t\t\tborder-radius: 40rpx;\r\n\t\t\tpadding: 60rpx 40rpx;\r\n\t\t\tbox-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.1);\r\n\r\n\t\t\t.welcome-text {\r\n\t\t\t\ttext-align: center;\r\n\t\t\t\tmargin-bottom: 80rpx;\r\n\r\n\t\t\t\t.welcome-ch {\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\tfont-size: 44rpx;\r\n\t\t\t\t\tcolor: #333;\r\n\t\t\t\t\tfont-weight: 500;\r\n\t\t\t\t\tmargin-bottom: 16rpx;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.welcome-en {\r\n\t\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\t\tcolor: #888;\r\n\t\t\t\t\tletter-spacing: 2rpx;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* 微信登录按钮 */\r\n\t\t\t.wx-login-btn {\r\n\t\t\t\tbackground: #07c160;\r\n\t\t\t\theight: 96rpx;\r\n\t\t\t\tborder-radius: 48rpx;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\t\t\t\tjustify-content: center;\r\n\t\t\t\ttransition: all 0.2s;\r\n\r\n\t\t\t\t&:active {\r\n\t\t\t\t\ttransform: scale(0.98);\r\n\t\t\t\t\topacity: 0.9;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wx-icon {\r\n\t\t\t\t\twidth: 48rpx;\r\n\t\t\t\t\theight: 48rpx;\r\n\t\t\t\t\tmargin-right: 20rpx;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.btn-text {\r\n\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t\tfont-size: 34rpx;\r\n\t\t\t\t\tfont-weight: 500;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* 分隔线 */\r\n\t\t\t.divider {\r\n\t\t\t\tmargin: 60rpx 0;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t.divider-line {\r\n\t\t\t\t\tflex: 1;\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\tbackground: #eee;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.divider-text {\r\n\t\t\t\t\tpadding: 0 30rpx;\r\n\t\t\t\t\tcolor: #999;\r\n\t\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/login/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","BASE_URL","uni","wx","wxLoginApi"],"mappings":";;;;;;;;AAWiBA,kBAAAA,IAAIC,cAAAA,QAAQ;AAI5B,aAAS,UAAU;AAClB,UAAI,CAACC,cAAAA,MAAI,eAAe,QAAQ,KAAK,CAACA,oBAAI,eAAe,OAAO,GAAG;AAClEC,sBAAAA,KAAG,MAAM;AAAA,UACR,SAAS,OAAO,SAAS;AAExBD,0BAAAA,MAAI,eAAe,QAAQ,KAAK,IAAI;AACpC,kBAAME,qBAAW;AAAA,cAChB,MAAM,KAAK;AAAA,YACjB,CAAM,EAAE,KAAK,CAAC,SAAS;AACjB,kBAAI,KAAK,QAAQ,KAAK;AACrBF,8BAAAA,MAAI,WAAW;AAAA,kBACd,KAAK;AAAA,gBACb,CAAQ;AACDA,8BAAAA,MAAI,eAAe,UAAU,KAAK,KAAK,MAAM;AAC7CA,8BAAAA,MAAI,eAAe,SAAS,KAAK,KAAK,KAAK;AAAA,cAClD,OAAa;AACNA,8BAAAA,MAAI,UAAU;AAAA,kBACb,OAAO;AAAA,kBACP,MAAM;AAAA,gBACd,CAAQ;AAAA,cACD;AAAA,YACP,CAAM;AAAA,UACD;AAAA,UACD,MAAM,CAAC,MAAM;AACZA,0BAAAA,MAAI,UAAU;AAAA,cACb,OAAO;AAAA,cACP,UAAU;AAAA,cACV,MAAM;AAAA,YACZ,CAAM;AAAA,UACD;AAAA,QACL,CAAI;AAAA,MACJ,OAAO;AACJA,sBAAAA,MAAI,WAAW;AAAA,UACd,KAAK;AAAA,QACT,CAAI;AAAA,MACD;AAAA,IACD;;;;;;;;;;;AClDF,GAAG,WAAW,eAAe;"} |
| | | {"version":3,"file":"index.js","sources":["pages/login/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbG9naW4vaW5kZXgudnVl"],"sourcesContent":["<script setup>\r\n\timport {\r\n\t\twxLoginApi\r\n\t} from '@/api/index.js'\r\n\timport {\r\n\t\tonMounted,\r\n\t\tref\r\n\t} from 'vue'\r\n\timport {\r\n\t\tBASE_URL\r\n\t} from '@/config/config.js';\r\n\tconst baseUrl = ref(BASE_URL)\r\n\r\n\r\n\t//用户点击微信登录默认授权\r\n\tfunction wxLogin() {\r\n\t\tif (!uni.getStorageSync('openId') || !uni.getStorageSync('token')) {\r\n\t\t\twx.login({\r\n\t\t\t\tsuccess: async (res1) => {\r\n\t\t\t\t\t//存储微信登录的code,调用后端接口传递code参数,返回openid(也就是userId)存储到本地,通过判断本地是否存在openId,存在表示已登录\r\n\t\t\t\t\tuni.setStorageSync('code', res1.code)\r\n\t\t\t\t\tawait wxLoginApi({\r\n\t\t\t\t\t\tcode: res1.code\r\n\t\t\t\t\t}).then((res2) => {\r\n\t\t\t\t\t\tif (res2.code == 200) {\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\t\tuni.setStorageSync('openId', res2.data.userId)\r\n\t\t\t\t\t\t\tuni.setStorageSync('token', res2.data.token)\r\n\t\t\t\t\t\t} else {\r\n\t\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: 'none',\r\n\t\t\t\t\t\t\t})\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\tfail: (e) => {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '微信登录失败,请退出重试!',\r\n\t\t\t\t\t\tduration: 2000,\r\n\t\t\t\t\t\ticon: 'fail'\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tuni.redirectTo({\r\n\t\t\t\turl: '/pages/layout/index'\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"content\">\r\n\t\t\t<!-- 顶部品牌区 -->\r\n\t\t\t<view class=\"brand-section\">\r\n\t\t\t\t<image class=\"logo\" src=\"../../static/images/login/sxwllogo.png\" mode=\"aspectFit\"></image>\r\n\t\t\t\t<text class=\"brand-name\">智能物联平台</text>\r\n<!-- \t\t\t\t<text class=\"brand-subtitle\"></text> -->\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 登录主体 -->\r\n\t\t\t<view class=\"auth-section\">\r\n\t\t\t\t<view class=\"welcome-text\">\r\n\t\t\t\t\t<text class=\"welcome-ch\">欢迎登录</text>\r\n\t\t\t\t\t<text class=\"welcome-en\">Welcome Back</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<!-- 微信登录按钮 -->\r\n\t\t\t\t<view class=\"wx-login-btn\" @click=\"wxLogin\">\r\n\t\t\t\t\t<image class=\"wx-icon\" src=\"../../static/images/login/wx.png\"></image>\r\n\t\t\t\t\t<text class=\"btn-text\">微信一键登录</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<!-- 底部装饰 -->\r\n\t\t<view class=\"decor-circle circle-1\"></view>\r\n\t\t<view class=\"decor-circle circle-2\"></view>\r\n\t</view>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t.container {\r\n\t\theight: 100vh;\r\n\t\tbackground: linear-gradient(135deg, #4a90e2 0%, #5bc0de 100%);\r\n\t\tposition: relative;\r\n\t\toverflow: hidden;\r\n\r\n\t\t.content {\r\n\t\t\tpadding: 0 40rpx;\r\n\t\t\tposition: relative;\r\n\t\t\tz-index: 2;\r\n\t\t}\r\n\r\n\t\t/* 品牌标识 */\r\n\t\t.brand-section {\r\n\t\t\tpadding-top: 120rpx;\r\n\t\t\ttext-align: center;\r\n\r\n\t\t\t.logo {\r\n\t\t\t\twidth: 160rpx;\r\n\t\t\t\theight: 160rpx;\r\n\t\t\t\tborder-radius: 24rpx;\r\n\t\t\t\tbox-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.1);\r\n\t\t\t}\r\n\r\n\t\t\t.brand-name {\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tfont-size: 48rpx;\r\n\t\t\t\tcolor: #fff;\r\n\t\t\t\tmargin: 40rpx 0 16rpx;\r\n\t\t\t\tletter-spacing: 2rpx;\r\n\t\t\t\tfont-weight: 500;\r\n\t\t\t}\r\n\r\n\t\t\t.brand-subtitle {\r\n\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\tcolor: rgba(255, 255, 255, 0.9);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* 登录区域 */\r\n\t\t.auth-section {\r\n\t\t\tmargin-top: 120rpx;\r\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\r\n\t\t\tborder-radius: 40rpx;\r\n\t\t\tpadding: 60rpx 40rpx;\r\n\t\t\tbox-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.1);\r\n\r\n\t\t\t.welcome-text {\r\n\t\t\t\ttext-align: center;\r\n\t\t\t\tmargin-bottom: 80rpx;\r\n\r\n\t\t\t\t.welcome-ch {\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\tfont-size: 44rpx;\r\n\t\t\t\t\tcolor: #333;\r\n\t\t\t\t\tfont-weight: 500;\r\n\t\t\t\t\tmargin-bottom: 16rpx;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.welcome-en {\r\n\t\t\t\t\tfont-size: 28rpx;\r\n\t\t\t\t\tcolor: #888;\r\n\t\t\t\t\tletter-spacing: 2rpx;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* 微信登录按钮 */\r\n\t\t\t.wx-login-btn {\r\n\t\t\t\tbackground: #07c160;\r\n\t\t\t\theight: 96rpx;\r\n\t\t\t\tborder-radius: 48rpx;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\t\t\t\tjustify-content: center;\r\n\t\t\t\ttransition: all 0.2s;\r\n\r\n\t\t\t\t&:active {\r\n\t\t\t\t\ttransform: scale(0.98);\r\n\t\t\t\t\topacity: 0.9;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wx-icon {\r\n\t\t\t\t\twidth: 48rpx;\r\n\t\t\t\t\theight: 48rpx;\r\n\t\t\t\t\tmargin-right: 20rpx;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.btn-text {\r\n\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t\tfont-size: 34rpx;\r\n\t\t\t\t\tfont-weight: 500;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* 分隔线 */\r\n\t\t\t.divider {\r\n\t\t\t\tmargin: 60rpx 0;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t.divider-line {\r\n\t\t\t\t\tflex: 1;\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\tbackground: #eee;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.divider-text {\r\n\t\t\t\t\tpadding: 0 30rpx;\r\n\t\t\t\t\tcolor: #999;\r\n\t\t\t\t\tfont-size: 26rpx;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</style>","import MiniProgramPage from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/login/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","BASE_URL","uni","wx","wxLoginApi"],"mappings":";;;;;;;;AAWiBA,kBAAAA,IAAIC,cAAAA,QAAQ;AAI5B,aAAS,UAAU;AAClB,UAAI,CAACC,cAAAA,MAAI,eAAe,QAAQ,KAAK,CAACA,oBAAI,eAAe,OAAO,GAAG;AAClEC,sBAAAA,KAAG,MAAM;AAAA,UACR,SAAS,OAAO,SAAS;AAExBD,0BAAAA,MAAI,eAAe,QAAQ,KAAK,IAAI;AACpC,kBAAME,qBAAW;AAAA,cAChB,MAAM,KAAK;AAAA,YACjB,CAAM,EAAE,KAAK,CAAC,SAAS;AACjB,kBAAI,KAAK,QAAQ,KAAK;AACrBF,8BAAAA,MAAI,WAAW;AAAA,kBACd,KAAK;AAAA,gBACb,CAAQ;AACDA,8BAAAA,MAAI,eAAe,UAAU,KAAK,KAAK,MAAM;AAC7CA,8BAAAA,MAAI,eAAe,SAAS,KAAK,KAAK,KAAK;AAAA,cAClD,OAAa;AACNA,8BAAAA,MAAI,UAAU;AAAA,kBACb,OAAO;AAAA,kBACP,MAAM;AAAA,gBACd,CAAQ;AAAA,cACD;AAAA,YACP,CAAM;AAAA,UACD;AAAA,UACD,MAAM,CAAC,MAAM;AACZA,0BAAAA,MAAI,UAAU;AAAA,cACb,OAAO;AAAA,cACP,UAAU;AAAA,cACV,MAAM;AAAA,YACZ,CAAM;AAAA,UACD;AAAA,QACL,CAAI;AAAA,MACJ,OAAO;AACJA,sBAAAA,MAAI,WAAW;AAAA,UACd,KAAK;AAAA,QACT,CAAI;AAAA,MACD;AAAA,IACD;;;;;;;;;;;AClDF,GAAG,WAAW,eAAe;"} |
| | |
| | | {"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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"} |
| | | {"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\t// 控制 toast 是否已经显示的标志\r\n\tlet toastShown = false;\r\n\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\tconst startGetPosition = () => {\r\n\t\tuni.showLoading({\r\n\t\t\ttitle: \"正在操作设备\",\r\n\t\t\tmask: true\r\n\t\t})\r\n\t\t// 如果定时器已经存在,则先清除它\r\n\t\tif (positionInterval) {\r\n\t\t\tclearInterval(positionInterval);\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\tuni.hideLoading(); // 隐藏加载框\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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"} |
| | |
| | | {"version":3,"file":"index.js","sources":["pages/router/header/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3h3bC13eC1kZXYvcGFnZXMvcm91dGVyL2hlYWRlci9pbmRleC52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"title\">我的设备</view>\r\n\t\t<uni-icons type=\"plusempty\" size=\"50\" style=\"margin-left: auto;\r\n\t\tborder:1rpx black solid;\r\n\t\tborder-radius:50%;\r\n\t\t\" @click=\"scanDevice\"></uni-icons>\r\n\t\t<uni-icons type=\"person-filled\" size=\"70\" style=\"margin-right: 30rpx;\"></uni-icons>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tbindDevice\r\n\t} from '@/api/index.js'\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// 扫描设备获取sn\r\n\tconst scanDevice = () => {\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\t// console.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\t// 刷新页面\r\n\t\t\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\t\t\turl:\"/pages/layout/index\"\r\n\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</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\ttemplate {\r\n\t\tfont-size: 16px; // 设置根字体大小\r\n\t}\r\n\r\n\t.container {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 20px;\r\n\t\tbackground-color: #d5d5d5;\r\n\t\twidth: 100%; // 确保容器宽度占满整个屏幕宽度\r\n\r\n\t\t.title {\r\n\t\t\tflex-grow: 1; // 让标题元素占据剩余空间\r\n\t\t\ttext-align: center;\r\n\t\t\tfont-size: 1.125rem; // 使用rem单位定义字体大小\r\n\t\t\tfont-weight: bold;\r\n\t\t\ttext-align: left;\r\n\t\t\tcolor: #000000;\r\n\t\t\twhite-space: nowrap; // 防止文本换行\r\n\t\t\toverflow: hidden; // 隐藏溢出文本\r\n\t\t\ttext-overflow: ellipsis; // 使用省略号表示溢出文本\r\n\t\t}\r\n\r\n\t\t// 可以添加媒体查询来调整不同屏幕尺寸下的样式\r\n\t\t@media (max-width: 600px) {\r\n\t\t\t.title {\r\n\t\t\t\tfont-size: 1rem; // 在小屏幕上减小字体大小\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/header/index.vue'\nwx.createComponent(Component)"],"names":["uni","bindDevice","res"],"mappings":";;;;;;;;;;;;;;AAmBC,UAAM,QAAQ;AAAA,MACb,WAAU;AAAA,MACV,cAAa;AAAA,MACb,WAAU;AAAA,IACV;AAED,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,eAAa,KAAK;AACxB,gBAAM,YAAU,KAAK;AACrB,gBAAM,YAAU,KAAK;AAErBC,oBAAAA,WAAW,KAAK,EAAE,KAAK,CAACC,SAAM;AAC7B,gBAAGA,KAAI,SAAS,KAAI;AAEnBF,4BAAAA,MAAI,WAAW;AAAA,gBACd,KAAI;AAAA,cACX,CAAO;AAAA,YACP,OAAU;AACJA,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;;;;;;;;;;;;;;;;;ACxDF,GAAG,gBAAgB,SAAS;"} |
| | | {"version":3,"file":"index.js","sources":["pages/router/header/index.vue","../../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/QzovVXNlcnMvZWxrZXJzL0Rlc2t0b3AvZmlybS9kZXYvc3h3bC13eC1kZXYvcGFnZXMvcm91dGVyL2hlYWRlci9pbmRleC52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<view class=\"title\">我的设备</view>\r\n\t\t<uni-icons type=\"plusempty\" size=\"50\" style=\"margin-left: auto;\r\n\t\tborder:1rpx black solid;\r\n\t\tborder-radius:50%;\r\n\t\t\" @click=\"scanDevice\"></uni-icons>\r\n\t\t<uni-icons type=\"person-filled\" size=\"70\" style=\"margin-right: 30rpx;\"></uni-icons>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref\r\n\t} from 'vue';\r\n\timport {\r\n\t\tbindDevice\r\n\t} from '@/api/index.js'\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// 扫描设备获取sn\r\n\tconst scanDevice = () => {\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\tbindDevice(state).then((res)=>{\r\n\t\t\t\t\tif(res.code === 200){\r\n\t\t\t\t\t\t// 刷新页面\r\n\t\t\t\t\t\tuni.redirectTo({\r\n\t\t\t\t\t\t\turl:\"/pages/layout/index\"\r\n\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</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\ttemplate {\r\n\t\tfont-size: 16px; // 设置根字体大小\r\n\t}\r\n\r\n\t.container {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 20px;\r\n\t\tbackground-color: #d5d5d5;\r\n\t\twidth: 100%; // 确保容器宽度占满整个屏幕宽度\r\n\r\n\t\t.title {\r\n\t\t\tflex-grow: 1; // 让标题元素占据剩余空间\r\n\t\t\ttext-align: center;\r\n\t\t\tfont-size: 1.125rem; // 使用rem单位定义字体大小\r\n\t\t\tfont-weight: bold;\r\n\t\t\ttext-align: left;\r\n\t\t\tcolor: #000000;\r\n\t\t\twhite-space: nowrap; // 防止文本换行\r\n\t\t\toverflow: hidden; // 隐藏溢出文本\r\n\t\t\ttext-overflow: ellipsis; // 使用省略号表示溢出文本\r\n\t\t}\r\n\r\n\t\t// 可以添加媒体查询来调整不同屏幕尺寸下的样式\r\n\t\t@media (max-width: 600px) {\r\n\t\t\t.title {\r\n\t\t\t\tfont-size: 1rem; // 在小屏幕上减小字体大小\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</style>","import Component from 'C:/Users/elkers/Desktop/firm/dev/sxwl-wx-dev/pages/router/header/index.vue'\nwx.createComponent(Component)"],"names":["uni","bindDevice","res"],"mappings":";;;;;;;;;;;;;;AAmBC,UAAM,QAAQ;AAAA,MACb,WAAU;AAAA,MACV,cAAa;AAAA,MACb,WAAU;AAAA,IACV;AAED,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,eAAa,KAAK;AACxB,gBAAM,YAAU,KAAK;AACrB,gBAAM,YAAU,KAAK;AACrBC,oBAAAA,WAAW,KAAK,EAAE,KAAK,CAACC,SAAM;AAC7B,gBAAGA,KAAI,SAAS,KAAI;AAEnBF,4BAAAA,MAAI,WAAW;AAAA,gBACd,KAAI;AAAA,cACX,CAAO;AAAA,YACP,OAAU;AACJA,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;;;;;;;;;;;;;;;;;ACvDF,GAAG,gBAAgB,SAAS;"} |
| | |
| | | {"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;"} |
| | | {"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\t// console.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;AAEvBC,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;"} |
| | |
| | | "use strict"; |
| | | const _imports_0$1 = "/static/images/login/logo.png"; |
| | | const _imports_0$1 = "/static/images/login/sxwllogo.png"; |
| | | const _imports_1 = "/static/images/login/wx.png"; |
| | | const _imports_0 = "/assets/device.5a6420f4.png"; |
| | | exports._imports_0 = _imports_0$1; |
| | |
| | | function initRuntimeSocketService() { |
| | | const hosts = "192.168.0.114,127.0.0.1"; |
| | | const port = "8090"; |
| | | const id = "mp-weixin_YTr4BK"; |
| | | const id = "mp-weixin_PubjDz"; |
| | | const lazy = typeof swan !== "undefined"; |
| | | let restoreError = lazy ? () => { |
| | | } : initOnError(); |
| | |
| | | "use strict"; |
| | | const BASE_URL = "http://192.168.0.200:8037"; |
| | | const BASE_URL = "https://www.huiwuyuntong.com/sxwl-data-beta"; |
| | | exports.BASE_URL = BASE_URL; |
| | | //# sourceMappingURL=../../.sourcemap/mp-weixin/config/config.js.map |
| | |
| | | <view class="container data-v-d08ef7d4"><view class="content data-v-d08ef7d4"><view class="brand-section data-v-d08ef7d4"><image class="logo data-v-d08ef7d4" src="{{a}}" mode="aspectFit"></image><text class="brand-name data-v-d08ef7d4">首熙物联</text><text class="brand-subtitle data-v-d08ef7d4">智能物联平台</text></view><view class="auth-section data-v-d08ef7d4"><view class="welcome-text data-v-d08ef7d4"><text class="welcome-ch data-v-d08ef7d4">欢迎登录</text><text class="welcome-en data-v-d08ef7d4">Welcome Back</text></view><view class="wx-login-btn data-v-d08ef7d4" bindtap="{{c}}"><image class="wx-icon data-v-d08ef7d4" src="{{b}}"></image><text class="btn-text data-v-d08ef7d4">微信一键登录</text></view></view></view><view class="decor-circle circle-1 data-v-d08ef7d4"></view><view class="decor-circle circle-2 data-v-d08ef7d4"></view></view> |
| | | <view class="container data-v-d08ef7d4"><view class="content data-v-d08ef7d4"><view class="brand-section data-v-d08ef7d4"><image class="logo data-v-d08ef7d4" src="{{a}}" mode="aspectFit"></image><text class="brand-name data-v-d08ef7d4">智能物联平台</text></view><view class="auth-section data-v-d08ef7d4"><view class="welcome-text data-v-d08ef7d4"><text class="welcome-ch data-v-d08ef7d4">欢迎登录</text><text class="welcome-en data-v-d08ef7d4">Welcome Back</text></view><view class="wx-login-btn data-v-d08ef7d4" bindtap="{{c}}"><image class="wx-icon data-v-d08ef7d4" src="{{b}}"></image><text class="btn-text data-v-d08ef7d4">微信一键登录</text></view></view></view><view class="decor-circle circle-1 data-v-d08ef7d4"></view><view class="decor-circle circle-2 data-v-d08ef7d4"></view></view> |
| | |
| | | ...deviceInfo |
| | | }; |
| | | } catch (error) { |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:92", "Failed to fetch device info:", error); |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:95", "Failed to fetch device info:", error); |
| | | } |
| | | }); |
| | | const startGetPosition = () => { |
| | | common_vendor.index.showLoading({ |
| | | title: "正在操作设备", |
| | | mask: true |
| | | }); |
| | | 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); |
| | | common_vendor.index.hideLoading(); |
| | | } |
| | | }).catch((error) => { |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:115", "Error fetching control info:", error); |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:116", "Error fetching control info:", error); |
| | | clearInterval(positionInterval); |
| | | }); |
| | | }, 2e3); |
| | |
| | | }); |
| | | } |
| | | } catch (error) { |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:144", "Failed to delete device:", error); |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:145", "Failed to delete device:", error); |
| | | } |
| | | }; |
| | | const handleControlChange = (e) => { |
| | |
| | | startGetPosition(); |
| | | } |
| | | }).catch((error) => { |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:161", "Failed to control device:", error); |
| | | common_vendor.index.__f__("error", "at pages/router/deviceInfo/index.vue:162", "Failed to control device:", error); |
| | | }); |
| | | }; |
| | | const getOpeHistory = () => { |
| | |
| | | logEntry.value = res.data; |
| | | } |
| | | }).catch((e) => { |
| | | common_vendor.index.__f__("log", "at pages/router/deviceInfo/index.vue:175", "fail info", e); |
| | | common_vendor.index.__f__("log", "at pages/router/deviceInfo/index.vue:176", "fail info", e); |
| | | }); |
| | | }; |
| | | const getControlData = () => { |
| | |
| | | state.facilityCode = temp.DeviceName; |
| | | state.productId = temp.ProductId; |
| | | state.signature = temp.Signature; |
| | | common_vendor.index.__f__("log", "at pages/router/main/index.vue:67", state); |
| | | api_index.bindDevice(state).then((res2) => { |
| | | if (res2.code === 200) { |
| | | common_vendor.index.showToast({ |
| | |
| | | "urlCheck": false, |
| | | "es6": true, |
| | | "postcss": false, |
| | | "minified": false, |
| | | "minified": true, |
| | | "newFeature": true, |
| | | "bigPackageSizeSupport": true, |
| | | "babelSetting": { |
| | |
| | | "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", |
| | | "projectname": "szwl-wx-dev", |
| | | "setting": { |
| | | "compileHotReLoad": true |
| | | "compileHotReLoad": true, |
| | | "urlCheck": false |
| | | } |
| | | } |