feat: 优化BLVRQ页面功能标签和样式
This commit is contained in:
2
app.json
2
app.json
@@ -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",
|
||||||
|
|||||||
@@ -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' })
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user