| | |
| | | } |
| | | |
| | | // 获取设备类型名称 |
| | | function presenceState(device: Device): 'online' | 'offline' | 'unknown' { |
| | | if (device.online === true) |
| | | return 'online' |
| | | if (device.online === false) |
| | | return 'offline' |
| | | return 'unknown' |
| | | } |
| | | |
| | | function getDeviceTypeName(boardKey: string): string { |
| | | const firmwareType = firmwareTypes.value.find(type => type.key === boardKey) |
| | | return firmwareType?.name || boardKey |
| | |
| | | const errorMessage = error?.message || t('device.bindFailed') |
| | | toast.error(errorMessage) |
| | | } |
| | | } |
| | | |
| | | function goToParentTasks(device: Device) { |
| | | if (!currentAgentId.value || !device?.macAddress) { |
| | | toast.warning(t('parentTask.bindDeviceFirst')) |
| | | return |
| | | } |
| | | uni.navigateTo({ |
| | | url: `/pages/parent-task/index?agentId=${encodeURIComponent(currentAgentId.value)}&macAddress=${encodeURIComponent(device.macAddress)}`, |
| | | }) |
| | | } |
| | | |
| | | // 打开绑定设备对话框 |
| | |
| | | <view class="cursor-pointer bg-[#fbfbfb] p-[32rpx] transition-all duration-200 active:bg-[#f8f9fa]"> |
| | | <view class="flex items-start justify-between"> |
| | | <view class="flex-1"> |
| | | <view class="mb-[16rpx] flex items-center justify-between"> |
| | | <text class="max-w-[60%] break-all text-[32rpx] text-[#232338] font-semibold"> |
| | | <view class="mb-[16rpx] flex items-start justify-between gap-[16rpx]"> |
| | | <text class="max-w-[52%] break-all text-[32rpx] text-[#232338] font-semibold"> |
| | | {{ getDeviceTypeName(device.board) }} |
| | | </text> |
| | | <view |
| | | class="shrink-0 rounded-[24rpx] px-[16rpx] py-[6rpx]" |
| | | :class="{ |
| | | 'bg-[#e8f8ef]': presenceState(device) === 'online', |
| | | 'bg-[#fff1f0]': presenceState(device) === 'offline', |
| | | 'bg-[#f5f7fb]': presenceState(device) === 'unknown', |
| | | }" |
| | | > |
| | | <text |
| | | class="text-[24rpx] font-bold" |
| | | :class="{ |
| | | 'text-[#146c36]': presenceState(device) === 'online', |
| | | 'text-[#d4380d]': presenceState(device) === 'offline', |
| | | 'text-[#65686f]': presenceState(device) === 'unknown', |
| | | }" |
| | | > |
| | | {{ presenceState(device) === 'online' ? t('device.online') : (presenceState(device) === 'offline' ? t('device.offline') : t('device.checkingOnline')) }} |
| | | </text> |
| | | </view> |
| | | </view> |
| | | <view |
| | | class="mb-[16rpx] flex items-start gap-[12rpx] rounded-[16rpx] p-[16rpx]" |
| | | :class="{ |
| | | 'bg-[#e8f8ef]': presenceState(device) === 'online', |
| | | 'bg-[#fff1f0]': presenceState(device) === 'offline', |
| | | 'bg-[#f5f7fb]': presenceState(device) === 'unknown', |
| | | }" |
| | | > |
| | | <view |
| | | class="mt-[8rpx] h-[16rpx] w-[16rpx] shrink-0 rounded-full" |
| | | :class="{ |
| | | 'bg-[#1aa34a]': presenceState(device) === 'online', |
| | | 'bg-[#d4380d]': presenceState(device) === 'offline', |
| | | 'bg-[#c0c4cc]': presenceState(device) === 'unknown', |
| | | }" |
| | | /> |
| | | <text |
| | | class="text-[24rpx] leading-[1.45]" |
| | | :class="{ |
| | | 'text-[#2f6f45]': presenceState(device) === 'online', |
| | | 'text-[#a8071a]': presenceState(device) === 'offline', |
| | | 'text-[#65686f]': presenceState(device) === 'unknown', |
| | | }" |
| | | > |
| | | {{ presenceState(device) === 'online' ? t('device.onlineHint') : (presenceState(device) === 'offline' ? t('device.offlineHint') : t('device.checkingOnline')) }} |
| | | </text> |
| | | </view> |
| | | |
| | |
| | | @change="toggleAutoUpdate(device)" |
| | | /> |
| | | </view> |
| | | <view |
| | | class="mt-[16rpx] flex items-center justify-between border-[1rpx] border-[#d6e4ff] rounded-[12rpx] bg-[#f5f8ff] p-[16rpx_20rpx]" |
| | | @click.stop="goToParentTasks(device)" |
| | | > |
| | | <text class="text-[28rpx] text-[#336cff] font-medium"> |
| | | {{ t('parentTask.pageTitle') }} |
| | | </text> |
| | | <wd-icon name="arrow-right" size="16" color="#336cff" /> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |