feat: 优化BLVRQ页面功能标签和样式

This commit is contained in:
2026-03-26 11:11:30 +08:00
parent f94cf21e7a
commit c03f7b47d0
5 changed files with 206 additions and 81 deletions

View File

@@ -3,8 +3,6 @@
"pages/autho/index", "pages/autho/index",
"pages/basics/BluetoothDebugging/BLVRQPage/BLVRQPage", "pages/basics/BluetoothDebugging/BLVRQPage/BLVRQPage",
"pages/basics/BluetoothDebugging/B13page/B13page", "pages/basics/BluetoothDebugging/B13page/B13page",
"pages/login/login", "pages/login/login",
"pages/index/index", "pages/index/index",

View File

@@ -1,5 +1,22 @@
const app = getApp() const app = getApp()
const FUNCTION_LABELS = Array.from({ length: 16 }, (_, i) => {
switch (i) {
case 0x00:
return '不设置'
case 0x01:
return '普通按键'
case 0x02:
return '清理按键'
case 0x03:
return '投诉按键'
default:
return `功能${i}`
}
})
const KEY_BITMAPS = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80]
function ab2hex(buffer) { function ab2hex(buffer) {
const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer || []) const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer || [])
return Array.from(view).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' ') return Array.from(view).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' ')
@@ -78,18 +95,18 @@ function formatBleError(err) {
} }
function createFunctionOptions() { function createFunctionOptions() {
const names = {
0x00: '不设置',
0x01: '普通按键功能',
0x02: '清理按键',
0x03: '投诉按键'
}
return Array.from({ length: 16 }, (_, i) => ({ return Array.from({ length: 16 }, (_, i) => ({
code: i, code: i,
label: `${i}: ${names[i] || '无效'}` label: `${i}: ${FUNCTION_LABELS[i] || '无效'}`
})) }))
} }
function getFunctionOptionIndex(functionCode) {
const code = Number(functionCode || 0) & 0x0F
const index = createFunctionOptions().findIndex(item => item.code === code)
return index >= 0 ? index : 0
}
function createKeys(count) { function createKeys(count) {
return Array.from({ length: count }, (_, i) => ({ return Array.from({ length: count }, (_, i) => ({
hwIndex: i + 1, hwIndex: i + 1,
@@ -97,7 +114,10 @@ function createKeys(count) {
mappedKeyIndex: i + 1, mappedKeyIndex: i + 1,
originalMappedKey: i + 1, originalMappedKey: i + 1,
functionCode: 0x01, functionCode: 0x01,
functionIndex: 1 functionIndex: 1,
functionOptionIndex: getFunctionOptionIndex(0x01),
functionLabel: FUNCTION_LABELS[1],
mappedKeyLabel: `键值${i + 1}`
})) }))
} }
@@ -136,6 +156,7 @@ Page({
}, },
bleNameInput: '', bleNameInput: '',
canSetBleName: false, canSetBleName: false,
bleNameFeatureEnabled: true,
deviceInfo: { deviceInfo: {
model: 'BLV_RQ', model: 'BLV_RQ',
softwareVersion: '-', softwareVersion: '-',
@@ -192,7 +213,7 @@ Page({
canOperateKeyConfig: false canOperateKeyConfig: false
}) })
this.appendLog('CFG', `进入BLV_RQ页面${devName}`) this.appendLog('CFG', `进入BLV_RQ页面${devName}`)
this.updateSetBleNameState('') this.updateSetBleNameState(devName)
if (app.globalData && app.globalData.pendingBleNavigation && app.globalData.pendingBleNavigation.target === 'BLV_RQ') { if (app.globalData && app.globalData.pendingBleNavigation && app.globalData.pendingBleNavigation.target === 'BLV_RQ') {
app.globalData.pendingBleNavigation = null app.globalData.pendingBleNavigation = null
} }
@@ -249,7 +270,7 @@ Page({
}, },
updateSetBleNameState(value) { updateSetBleNameState(value) {
const can = /^[A-Za-z0-9]{1,8}$/.test(value || '') && !!this.data.bleInfo.connected const can = !!this.data.bleNameFeatureEnabled && /^[A-Za-z0-9]{1,8}$/.test(value || '') && !!this.data.bleInfo.connected
this.setData({ bleNameInput: value, canSetBleName: can }) this.setData({ bleNameInput: value, canSetBleName: can })
}, },
@@ -278,7 +299,9 @@ Page({
const keys = [...this.data.keyConfig.keys] const keys = [...this.data.keyConfig.keys]
if (!keys[index]) return if (!keys[index]) return
keys[index].functionIndex = value keys[index].functionIndex = value
keys[index].functionOptionIndex = value
keys[index].functionCode = this.data.functionOptions[value].code keys[index].functionCode = this.data.functionOptions[value].code
keys[index].functionLabel = FUNCTION_LABELS[this.data.functionOptions[value].code] || FUNCTION_LABELS[0]
this.setData({ 'keyConfig.keys': keys, 'keyConfig.keySlots': createKeySlots(keys) }) this.setData({ 'keyConfig.keys': keys, 'keyConfig.keySlots': createKeySlots(keys) })
}, },
@@ -290,6 +313,10 @@ Page({
}, },
async onSetBleName() { async onSetBleName() {
if (!this.data.bleNameFeatureEnabled) {
wx.showToast({ title: '功能暂未开放', icon: 'none' })
return
}
if (!this.data.canSetBleName) { if (!this.data.canSetBleName) {
wx.showToast({ title: '名称不合法', icon: 'none' }) wx.showToast({ title: '名称不合法', icon: 'none' })
return return
@@ -350,8 +377,8 @@ Page({
async onTriggerKey(e) { async onTriggerKey(e) {
const index = Number(e.currentTarget.dataset.index) const index = Number(e.currentTarget.dataset.index)
const item = this.data.keyConfig.keys[index] const item = this.data.keyConfig.keys[index]
if (!item || !item.mappedKey) { if (!item) {
wx.showToast({ title: '当前按键未配置映射', icon: 'none' }) wx.showToast({ title: '当前按键不存在', icon: 'none' })
return return
} }
const keyCount = Number(this.data.keyConfig.selectedKeyCount || 0) const keyCount = Number(this.data.keyConfig.selectedKeyCount || 0)
@@ -359,9 +386,9 @@ Page({
wx.showToast({ title: '请先选择按键类型', icon: 'none' }) wx.showToast({ title: '请先选择按键类型', icon: 'none' })
return return
} }
const bitmap = 1 << (item.mappedKey - 1) const bitmap = KEY_BITMAPS[item.hwIndex - 1] || (1 << (item.hwIndex - 1))
this.setData({ keySendingIndex: index }) this.setData({ keySendingIndex: index })
await this.sendCommand(0x06, [keyCount, bitmap], `触发按键${item.hwIndex} -> 键值${item.mappedKey}${keyCount}键)`) await this.sendCommand(0x06, [1, bitmap], `点按按键${item.hwIndex} -> P1=0x${bitmap.toString(16).toUpperCase().padStart(2, '0')}`)
this.setData({ keySendingIndex: -1 }) this.setData({ keySendingIndex: -1 })
}, },
@@ -702,24 +729,39 @@ Page({
const count = Number(params[0] || 0) const count = Number(params[0] || 0)
const safeCount = count > 0 && count <= 8 ? count : this.data.keyConfig.selectedKeyCount const safeCount = count > 0 && count <= 8 ? count : this.data.keyConfig.selectedKeyCount
const keys = createKeys(safeCount) const keys = createKeys(safeCount)
const slotPatch = {}
for (let i = 0; i < safeCount; i += 1) { for (let i = 0; i < safeCount; i += 1) {
const cfg = params[i + 1] || 0 const cfg = params[i + 1] || 0
const mappedKey = cfg & 0x0F const mappedKey = i + 1
const functionCode = (cfg >> 4) & 0x0F const functionCode = cfg & 0x0F
const functionOptionIndex = getFunctionOptionIndex(functionCode)
keys[i].mappedKey = mappedKey || null keys[i].mappedKey = mappedKey || null
keys[i].originalMappedKey = mappedKey || null keys[i].originalMappedKey = mappedKey || null
keys[i].mappedKeyIndex = mappedKey || 0 keys[i].mappedKeyIndex = mappedKey || 0
keys[i].functionCode = functionCode keys[i].functionCode = functionCode
keys[i].functionIndex = functionCode keys[i].functionIndex = functionOptionIndex
keys[i].functionOptionIndex = functionOptionIndex
keys[i].functionLabel = FUNCTION_LABELS[functionCode] || FUNCTION_LABELS[0]
keys[i].mappedKeyLabel = mappedKey ? `键值${mappedKey}` : '未配置'
slotPatch[`keyConfig.keySlots[${i}].functionIndex`] = functionOptionIndex
slotPatch[`keyConfig.keySlots[${i}].functionOptionIndex`] = functionOptionIndex
slotPatch[`keyConfig.keySlots[${i}].functionLabel`] = FUNCTION_LABELS[functionCode] || FUNCTION_LABELS[0]
slotPatch[`keyConfig.keySlots[${i}].mappedKey`] = mappedKey || null
slotPatch[`keyConfig.keySlots[${i}].mappedKeyIndex`] = mappedKey || 0
slotPatch[`keyConfig.keySlots[${i}].mappedKeyLabel`] = mappedKey ? `键值${mappedKey}` : '未配置'
} }
const keyTypeIndex = this.data.keyConfig.keyCountValues.indexOf(safeCount) const keyTypeIndex = this.data.keyConfig.keyCountValues.indexOf(safeCount)
const nextKeyTypeIndex = keyTypeIndex >= 0 ? keyTypeIndex : 0
const nextKeyCount = safeCount
const nextKeySlots = createKeySlots(keys)
this.setData({ this.setData({
readingKeyConfig: false, readingKeyConfig: false,
'keyConfig.selectedKeyTypeIndex': keyTypeIndex >= 0 ? keyTypeIndex : 0, 'keyConfig.selectedKeyTypeIndex': nextKeyTypeIndex,
'keyConfig.selectedKeyCount': safeCount, 'keyConfig.selectedKeyCount': nextKeyCount,
'keyConfig.keys': keys, 'keyConfig.keys': keys,
'keyConfig.keySlots': createKeySlots(keys), 'keyConfig.keySlots': nextKeySlots,
canOperateKeyConfig: true canOperateKeyConfig: nextKeyCount > 0,
...slotPatch
}) })
if (count && count !== this.data.keyConfig.selectedKeyCount) { if (count && count !== this.data.keyConfig.selectedKeyCount) {
wx.showToast({ title: `已按设备返回${count}键修正`, icon: 'none' }) wx.showToast({ title: `已按设备返回${count}键修正`, icon: 'none' })

View File

@@ -2,6 +2,7 @@
"navigationBarBackgroundColor": "#fff", "navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black", "navigationBarTextStyle": "black",
"navigationStyle": "custom", "navigationStyle": "custom",
"disableScroll": true,
"usingComponents": { "usingComponents": {
"cu-custom": "/colorui/components/cu-custom" "cu-custom": "/colorui/components/cu-custom"
} }

View File

@@ -10,8 +10,8 @@
<view class="console-row name-action-row keep-inline-row"> <view class="console-row name-action-row keep-inline-row">
<view class="console-cell device-name-cell"> <view class="console-cell device-name-cell">
<text class="device-icon">🔵</text> <text class="device-icon">🔵</text>
<text class="cell-label">蓝牙名称:</text> <text class="cell-label field-label-lg">蓝牙名称:</text>
<text class="cell-value">{{bleInfo.devName || '-'}}</text> <text class="cell-value field-value-lg">{{bleInfo.devName || '-'}}</text>
</view> </view>
<view class="console-cell action-cell"> <view class="console-cell action-cell">
<button class="action-btn {{bleInfo.connected ? 'warn' : 'primary'}} full-btn" bindtap="onConnectionAction" disabled="{{isConnecting || !bleInfo.mac}}">{{isConnecting ? '连接中...' : (bleInfo.connected ? '断开连接' : '重新连接')}}</button> <button class="action-btn {{bleInfo.connected ? 'warn' : 'primary'}} full-btn" bindtap="onConnectionAction" disabled="{{isConnecting || !bleInfo.mac}}">{{isConnecting ? '连接中...' : (bleInfo.connected ? '断开连接' : '重新连接')}}</button>
@@ -20,12 +20,12 @@
<view class="console-row status-signal-row keep-inline-row"> <view class="console-row status-signal-row keep-inline-row">
<view class="console-cell status-cell"> <view class="console-cell status-cell">
<text class="cell-label">连接状态:</text> <text class="cell-label field-label-lg">连接状态:</text>
<view class="status-chip {{isConnecting ? 'pending' : (bleInfo.connected ? 'online' : 'offline')}}">{{isConnecting ? '连接中' : (bleInfo.connected ? '已连接' : '未连接')}}</view> <view class="status-chip {{isConnecting ? 'pending' : (bleInfo.connected ? 'online' : 'offline')}}">{{isConnecting ? '连接中' : (bleInfo.connected ? '已连接' : '未连接')}}</view>
</view> </view>
<view class="console-cell signal-cell"> <view class="console-cell signal-cell">
<text class="cell-label">信号强度:</text> <text class="cell-label field-label-lg">信号强度:</text>
<text class="cell-value">{{bleInfo.signalText || '-'}}</text> <text class="cell-value field-value-lg">{{bleInfo.signalText || '-'}}</text>
</view> </view>
</view> </view>
@@ -38,8 +38,8 @@
<view class="console-row rename-console-row keep-inline-row"> <view class="console-row rename-console-row keep-inline-row">
<view class="console-cell input-cell wide"> <view class="console-cell input-cell wide">
<text class="cell-label">蓝牙名称:</text> <text class="cell-label field-label-lg">蓝牙名称:</text>
<input class="name-input {{bleInfo.connected ? '' : 'is-disabled'}}" placeholder="输入1-8位英文或数字" maxlength="8" value="{{bleNameInput}}" bindinput="onBleNameInput" disabled="{{!bleInfo.connected || settingBleName}}" /> <input class="name-input" placeholder="输入1-8位英文或数字" maxlength="8" value="{{bleNameInput}}" bindinput="onBleNameInput" disabled="{{!bleInfo.connected || settingBleName}}" />
</view> </view>
<view class="console-cell button-cell"> <view class="console-cell button-cell">
<button class="action-btn primary full-btn" bindtap="onSetBleName" loading="{{settingBleName}}" disabled="{{!canSetBleName || settingBleName}}">设置名称</button> <button class="action-btn primary full-btn" bindtap="onSetBleName" loading="{{settingBleName}}" disabled="{{!canSetBleName || settingBleName}}">设置名称</button>
@@ -52,12 +52,12 @@
<view class="console-row firmware-row keep-inline-row"> <view class="console-row firmware-row keep-inline-row">
<view class="console-cell firmware-cell software-version-cell"> <view class="console-cell firmware-cell software-version-cell">
<text class="cell-label">软件版本:</text> <text class="cell-label field-label-lg">软件版本:</text>
<text class="cell-value">{{deviceInfo.softwareVersion}}</text> <text class="cell-value field-value-lg">{{deviceInfo.softwareVersion}}</text>
</view> </view>
<view class="console-cell firmware-cell hardware-version-cell"> <view class="console-cell firmware-cell hardware-version-cell">
<text class="cell-label">硬件版本:</text> <text class="cell-label field-label-lg">硬件版本:</text>
<text class="cell-value">{{deviceInfo.hardwareVersion}}</text> <text class="cell-value field-value-lg">{{deviceInfo.hardwareVersion}}</text>
</view> </view>
<view class="console-cell action-cell-inline read-version-cell"> <view class="console-cell action-cell-inline read-version-cell">
<button class="action-btn default full-btn" bindtap="onReadVersion" loading="{{readingVersion}}" disabled="{{!bleInfo.connected || readingVersion || readingKeyConfig || writingKeyConfig}}">读取版本</button> <button class="action-btn default full-btn" bindtap="onReadVersion" loading="{{readingVersion}}" disabled="{{!bleInfo.connected || readingVersion || readingKeyConfig || writingKeyConfig}}">读取版本</button>
@@ -83,11 +83,15 @@
<view class="key-grid strict-grid"> <view class="key-grid strict-grid">
<view class="key-card-inline {{item.isPlaceholder ? 'reserve-card' : (bleInfo.connected ? '' : 'is-disabled')}}" wx:for="{{keyConfig.keySlots}}" wx:key="slotIndex"> <view class="key-card-inline {{item.isPlaceholder ? 'reserve-card' : (bleInfo.connected ? '' : 'is-disabled')}}" wx:for="{{keyConfig.keySlots}}" wx:key="slotIndex">
<view wx:if="{{!item.isPlaceholder}}" class="key-card-content"> <view wx:if="{{!item.isPlaceholder}}" class="key-card-content">
<view class="inline-key-label">按键{{item.hwIndex}}</view> <view class="key-card-top-row">
<picker class="inline-key-picker" mode="selector" range="{{functionOptionLabels}}" value="{{item.functionIndex}}" bindchange="onFunctionChange" data-index="{{index}}" disabled="{{!bleInfo.connected || writingKeyConfig}}"> <view class="inline-key-label">按键{{item.hwIndex}}</view>
<view class="picker-view compact {{bleInfo.connected ? '' : 'is-disabled'}}">{{functionOptionLabels[item.functionIndex] || '请选择功能'}}</view> <button class="action-btn default inline-send-btn" bindtap="onTriggerKey" data-index="{{index}}" loading="{{keySendingIndex === index}}" disabled="{{!bleInfo.connected || keySendingIndex === index}}">{{keySendingIndex === index ? '点按中...' : '点按'}}</button>
</picker> </view>
<button class="action-btn default inline-send-btn" bindtap="onTriggerKey" data-index="{{index}}" loading="{{keySendingIndex === index}}" disabled="{{!bleInfo.connected || !item.mappedKey || keySendingIndex === index}}">{{keySendingIndex === index ? '发送中...' : '发送'}}</button> <view class="key-card-bottom-row">
<picker class="inline-key-picker" mode="selector" range="{{functionOptionLabels}}" value="{{item.functionOptionIndex}}" bindchange="onFunctionChange" data-index="{{index}}" disabled="{{!bleInfo.connected || writingKeyConfig}}">
<view class="picker-view compact {{bleInfo.connected ? '' : 'is-disabled'}}">{{functionOptionLabels[item.functionOptionIndex] || '请选择功能'}}</view>
</picker>
</view>
</view> </view>
<view wx:if="{{item.isPlaceholder}}" class="reserve-card-empty"> <view wx:if="{{item.isPlaceholder}}" class="reserve-card-empty">
<text class="reserve-card-text">预留{{item.hwIndex}}</text> <text class="reserve-card-text">预留{{item.hwIndex}}</text>

View File

@@ -71,7 +71,7 @@ page {
} }
.panel-title { .panel-title {
font-size: 30rpx; font-size: 34rpx;
font-weight: 700; font-weight: 700;
color: #0f172a; color: #0f172a;
line-height: 1.2; line-height: 1.2;
@@ -113,6 +113,34 @@ page {
flex: 1; flex: 1;
} }
.status-signal-row {
justify-content: space-between;
}
.status-signal-row .status-cell,
.status-signal-row .signal-cell {
min-width: 0;
}
.status-signal-row .status-cell {
flex: 0 0 180rpx;
width: 180rpx;
}
.status-signal-row .signal-cell {
flex: 0 0 auto;
width: auto;
margin-left: auto;
justify-content: flex-end;
}
.status-signal-row .signal-cell .cell-value.field-value-lg {
flex: 0 0 96rpx;
width: 96rpx;
min-width: 96rpx;
text-align: left;
}
.action-cell, .action-cell,
.button-cell, .button-cell,
.action-cell-inline { .action-cell-inline {
@@ -147,9 +175,36 @@ page {
flex-shrink: 0; flex-shrink: 0;
} }
.software-version-cell .cell-value, .field-label-lg {
.hardware-version-cell .cell-value { font-size: 34rpx;
font-size: 24rpx; }
.field-value-lg {
font-size: 35rpx;
}
.software-version-cell .cell-label.field-label-lg,
.hardware-version-cell .cell-label.field-label-lg,
.name-action-row .cell-label.field-label-lg,
.status-signal-row .cell-label.field-label-lg,
.firmware-row .cell-label.field-label-lg {
font-size: 34rpx;
}
.software-version-cell .cell-value.field-value-lg,
.hardware-version-cell .cell-value.field-value-lg,
.name-action-row .cell-value.field-value-lg,
.status-signal-row .cell-value.field-value-lg,
.firmware-row .cell-value.field-value-lg {
font-size: 35rpx;
}
.status-signal-row .cell-label.field-label-lg {
font-size: 32rpx;
}
.status-signal-row .cell-value.field-value-lg {
font-size: 33rpx;
} }
.key-type-cell { .key-type-cell {
@@ -157,11 +212,11 @@ page {
} }
.device-icon { .device-icon {
font-size: 30rpx; font-size: 34rpx;
} }
.cell-label { .cell-label {
font-size: 26rpx; font-size: 30rpx;
color: #606266; color: #606266;
white-space: nowrap; white-space: nowrap;
display: inline-flex; display: inline-flex;
@@ -171,7 +226,7 @@ page {
.cell-value { .cell-value {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
font-size: 27rpx; font-size: 31rpx;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
white-space: nowrap; white-space: nowrap;
@@ -184,14 +239,14 @@ page {
.status-chip { .status-chip {
min-width: 120rpx; min-width: 120rpx;
height: 100%; height: 100%;
min-height: 48rpx; min-height: 56rpx;
align-self: stretch; align-self: stretch;
padding: 0 12rpx; padding: 0 12rpx;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 10rpx; border-radius: 10rpx;
font-size: 24rpx; font-size: 32rpx;
font-weight: 700; font-weight: 700;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -218,13 +273,13 @@ page {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
height: 100%; height: 100%;
min-height: 48rpx; min-height: 56rpx;
align-self: stretch; align-self: stretch;
padding: 0 12rpx; padding: 0 12rpx;
background: #f7f8fa; background: #f7f8fa;
border: 1rpx solid #e5e9f2; border: 1rpx solid #e5e9f2;
border-radius: 10rpx; border-radius: 10rpx;
font-size: 24rpx; font-size: 32rpx;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -233,9 +288,9 @@ page {
font-weight: 600; font-weight: 600;
white-space: nowrap; white-space: nowrap;
padding: 0 12rpx; padding: 0 12rpx;
font-size: 28rpx; font-size: 32rpx;
height: 100%; height: 100%;
min-height: 52rpx; min-height: 60rpx;
align-self: stretch; align-self: stretch;
line-height: 1.2; line-height: 1.2;
display: flex; display: flex;
@@ -246,7 +301,7 @@ page {
} }
.read-version-cell .action-btn { .read-version-cell .action-btn {
font-size: 26rpx; font-size: 30rpx;
padding: 0 8rpx; padding: 0 8rpx;
} }
@@ -287,7 +342,7 @@ page {
} }
.picker-view { .picker-view {
min-height: 48rpx; min-height: 56rpx;
height: 100%; height: 100%;
align-self: stretch; align-self: stretch;
padding: 0 12rpx; padding: 0 12rpx;
@@ -296,7 +351,7 @@ page {
background: #f7f8fa; background: #f7f8fa;
border: 1rpx solid #e5e9f2; border: 1rpx solid #e5e9f2;
border-radius: 10rpx; border-radius: 10rpx;
font-size: 23rpx; font-size: 27rpx;
color: #0f172a; color: #0f172a;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -338,10 +393,10 @@ page {
gap: 0; gap: 0;
padding: 0; padding: 0;
background: #ffffff; background: #ffffff;
border: none; border: 2rpx solid #cbd5e1;
border-radius: 14rpx; border-radius: 14rpx;
box-sizing: border-box; box-sizing: border-box;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.04); box-shadow: 0 6rpx 14rpx rgba(15, 23, 42, 0.08);
} }
.reserve-card { .reserve-card {
@@ -357,11 +412,26 @@ page {
.key-card-content { .key-card-content {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; flex-direction: column;
gap: 6rpx; align-items: stretch;
gap: 8rpx;
min-width: 0; min-width: 0;
} }
.key-card-top-row {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
gap: 8rpx;
}
.key-card-bottom-row {
width: 100%;
display: flex;
align-items: stretch;
}
.reserve-card-empty { .reserve-card-empty {
width: 100%; width: 100%;
min-height: 86rpx; min-height: 86rpx;
@@ -371,21 +441,27 @@ page {
} }
.reserve-card-text { .reserve-card-text {
font-size: 24rpx; font-size: 28rpx;
color: #94a3b8; color: #94a3b8;
letter-spacing: 2rpx; letter-spacing: 2rpx;
} }
.inline-key-label { .inline-key-label {
min-width: 70rpx; flex: 1;
font-size: 22rpx; min-width: 0;
font-size: 26rpx;
font-weight: 700; font-weight: 700;
color: #0f172a; color: #0f172a;
white-space: nowrap; white-space: nowrap;
} }
.inline-send-btn { .inline-send-btn {
min-width: 104rpx; min-width: 124rpx;
flex: 0 0 124rpx;
}
.key-card-bottom-row .inline-key-picker {
width: 100%;
} }
.dialog-btn { .dialog-btn {
@@ -446,14 +522,14 @@ page {
.log-time { .log-time {
color: #9aa0a6; color: #9aa0a6;
font-size: 22rpx; font-size: 26rpx;
font-family: inherit; font-family: inherit;
white-space: nowrap; white-space: nowrap;
min-width: 78rpx; min-width: 78rpx;
} }
.log-dir { .log-dir {
font-size: 22rpx; font-size: 26rpx;
font-family: inherit; font-family: inherit;
font-weight: 700; font-weight: 700;
white-space: nowrap; white-space: nowrap;
@@ -485,7 +561,7 @@ page {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
color: #333333; color: #333333;
font-size: 24rpx; font-size: 28rpx;
line-height: 1.35; line-height: 1.35;
word-break: break-all; word-break: break-all;
font-family: inherit; font-family: inherit;
@@ -493,7 +569,7 @@ page {
.log-text.packet { .log-text.packet {
color: #333333; color: #333333;
font-size: 24rpx; font-size: 28rpx;
line-height: 1.45; line-height: 1.45;
font-family: inherit; font-family: inherit;
word-break: break-all; word-break: break-all;
@@ -505,7 +581,7 @@ page {
.log-text.plain { .log-text.plain {
color: #333333; color: #333333;
font-size: 24rpx; font-size: 28rpx;
line-height: 1.45; line-height: 1.45;
font-family: inherit; font-family: inherit;
word-break: break-all; word-break: break-all;
@@ -531,14 +607,14 @@ page {
} }
.dialog-title { .dialog-title {
font-size: 32rpx; font-size: 36rpx;
font-weight: 700; font-weight: 700;
color: #1f2d3d; color: #1f2d3d;
margin-bottom: 12rpx; margin-bottom: 12rpx;
} }
.dialog-content { .dialog-content {
font-size: 26rpx; font-size: 30rpx;
color: #475467; color: #475467;
line-height: 1.7; line-height: 1.7;
margin-bottom: 16rpx; margin-bottom: 16rpx;
@@ -583,14 +659,14 @@ page {
} }
.keep-inline-row .cell-label { .keep-inline-row .cell-label {
font-size: 20rpx; font-size: 24rpx;
} }
.keep-inline-row .cell-value, .keep-inline-row .cell-value,
.keep-inline-row .name-input, .keep-inline-row .name-input,
.keep-inline-row .picker-view, .keep-inline-row .picker-view,
.keep-inline-row .inline-key-label { .keep-inline-row .inline-key-label {
font-size: 20rpx; font-size: 24rpx;
} }
.name-action-row .device-name-cell { .name-action-row .device-name-cell {
@@ -645,16 +721,20 @@ page {
} }
.status-signal-row .status-cell { .status-signal-row .status-cell {
flex: 0 0 230rpx; flex: 0 0 190rpx;
width: 190rpx;
} }
.status-signal-row .signal-cell { .status-signal-row .signal-cell {
flex: 1; flex: 0 0 auto;
width: auto;
margin-left: auto;
min-width: 0;
} }
.keep-inline-row .action-btn, .keep-inline-row .action-btn,
.keep-inline-actions .action-btn { .keep-inline-actions .action-btn {
font-size: 24rpx; font-size: 28rpx;
} }
.name-action-row .action-btn, .name-action-row .action-btn,
@@ -669,7 +749,7 @@ page {
} }
.keep-inline-head .panel-title { .keep-inline-head .panel-title {
font-size: 30rpx; font-size: 34rpx;
} }
.read-version-cell { .read-version-cell {
@@ -677,7 +757,7 @@ page {
} }
.read-version-cell .action-btn { .read-version-cell .action-btn {
font-size: 24rpx; font-size: 28rpx;
padding: 0; padding: 0;
} }
@@ -706,10 +786,10 @@ page {
} }
.log-time { .log-time {
min-width: 74rpx; min-width: 78rpx;
} }
.log-dir { .log-dir {
min-width: 50rpx; min-width: 54rpx;
} }
} }