feat: 频谱仪: 添加幅度菜单和单位支持
This commit is contained in:
@ -2,6 +2,20 @@ export enum E_选项卡菜单 {
|
||||
频率单位列表 = '频率单位列表',
|
||||
频率菜单列表 = '频率菜单列表',
|
||||
跨度菜单列表 = '跨度菜单列表',
|
||||
幅度菜单列表 = '幅度菜单列表',
|
||||
幅度单位列表 = '幅度单位列表',
|
||||
}
|
||||
|
||||
export enum E_幅度菜单列表的项目 {
|
||||
RefLevel = 'Ref Level',
|
||||
// Attenuation = 'Attenuation', // 如果衰减也需要类似交互,则取消注释
|
||||
}
|
||||
|
||||
export enum E_幅度单位 {
|
||||
dBm = 'dBm',
|
||||
mV = 'mV',
|
||||
uV = 'µV', // 使用 uV 表示微伏
|
||||
uA = 'µA', // 使用 uA 表示微安
|
||||
}
|
||||
|
||||
export enum E_跨度菜单列表的项目 {
|
||||
|
@ -4,6 +4,8 @@ import { $enum } from 'ts-enum-util';
|
||||
|
||||
import {
|
||||
E_Freq单位,
|
||||
E_幅度单位,
|
||||
E_幅度菜单列表的项目,
|
||||
E_数字键盘按键,
|
||||
E_跨度菜单列表的项目,
|
||||
E_选项卡菜单,
|
||||
@ -18,6 +20,15 @@ const state = reactive({
|
||||
选中的频率菜单列表的项目: null as E_选项卡菜单Freq菜单列表的项目 | null,
|
||||
输入的值临时输入字符串: null as null | string, // 用于暂存用户输入
|
||||
},
|
||||
幅度输入状态: {
|
||||
选中的幅度菜单列表的项目: null as E_幅度菜单列表的项目 | null,
|
||||
输入的值临时输入字符串: null as null | string, // 用于暂存用户输入
|
||||
refLevel: {
|
||||
value: 0,
|
||||
unit: E_幅度单位.dBm,
|
||||
},
|
||||
// attenuation: { value: 0, unit: E_幅度单位.dB }, // 如果需要衰减值
|
||||
},
|
||||
center: {
|
||||
value: 0,
|
||||
unit: E_Freq单位.Hz,
|
||||
@ -56,180 +67,261 @@ const 选项卡标题 = computed(() =>
|
||||
[E_选项卡菜单.频率菜单列表]: 'Freq/Channel',
|
||||
[E_选项卡菜单.频率单位列表]: '',
|
||||
[E_选项卡菜单.跨度菜单列表]: 'Span',
|
||||
[E_选项卡菜单.幅度菜单列表]: 'Amplitude',
|
||||
[E_选项卡菜单.幅度单位列表]: '',
|
||||
}),
|
||||
);
|
||||
|
||||
function 执行点击屏幕右边的按钮(按钮序号: number) {
|
||||
console.group('🔘 点击屏幕右边的按钮', { 按钮序号 });
|
||||
if (state.选项卡当前显示 === E_选项卡菜单.频率菜单列表) {
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.CenterFreq;
|
||||
console.debug('设置 Freq 输入状态为 CenterFreq');
|
||||
break;
|
||||
console.group('🔘 点击屏幕右边的按钮', { 按钮序号, 选项卡当前显示: state.选项卡当前显示 });
|
||||
$enum.visitValue(state.选项卡当前显示).with({
|
||||
[E_选项卡菜单.频率菜单列表]: () => {
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.CenterFreq;
|
||||
console.debug('设置 Freq 输入状态为 CenterFreq');
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StartFreq;
|
||||
console.debug('设置 Freq 输入状态为 StartFreq');
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StopFreq;
|
||||
console.debug('设置 Freq 输入状态为 StopFreq');
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.debug('频率菜单列表 - 这个按键还没有实现');
|
||||
break;
|
||||
}
|
||||
}
|
||||
case 2: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StartFreq;
|
||||
console.debug('设置 Freq 输入状态为 StartFreq');
|
||||
break;
|
||||
},
|
||||
[E_选项卡菜单.频率单位列表]: () => {
|
||||
let selectedUnit: E_Freq单位 | null = null;
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
selectedUnit = E_Freq单位.GHz;
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
selectedUnit = E_Freq单位.MHz;
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
selectedUnit = E_Freq单位.kHz;
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
selectedUnit = E_Freq单位.Hz;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.warn('无效的频率单位按钮序号:', 按钮序号);
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
}
|
||||
case 3: {
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StopFreq;
|
||||
console.debug('设置 Freq 输入状态为 StopFreq');
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.debug('这个按键还没有实现');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (state.选项卡当前显示 === E_选项卡菜单.频率单位列表) {
|
||||
let selectedUnit: E_Freq单位 | null = null;
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
selectedUnit = E_Freq单位.GHz;
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
selectedUnit = E_Freq单位.MHz;
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
selectedUnit = E_Freq单位.kHz;
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
selectedUnit = E_Freq单位.Hz;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.warn('无效的单位按钮序号:', 按钮序号);
|
||||
const tempInputString = state.频谱仪状态.频率输入状态.输入的值临时输入字符串;
|
||||
const selectedFreqItem = state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目;
|
||||
// 必须有临时输入值和选中的 Freq 项目才能确认
|
||||
if (!tempInputString || !selectedFreqItem) {
|
||||
console.warn('频率输入未完成或未选择项目,无法确认单位。');
|
||||
console.groupEnd();
|
||||
return;
|
||||
} // 不处理无效按钮 (5, 6, 7)
|
||||
}
|
||||
|
||||
const tempInputString = state.频谱仪状态.频率输入状态.输入的值临时输入字符串;
|
||||
const selectedFreqItem = state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目;
|
||||
|
||||
// 必须有临时输入值和选中的 Freq 项目才能确认
|
||||
if (!tempInputString || !selectedFreqItem) {
|
||||
console.warn('输入未完成或未选择 Freq 项目,无法确认单位。', {
|
||||
tempInputString,
|
||||
selectedFreqItem,
|
||||
});
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
const inputValue = Number.parseFloat(tempInputString);
|
||||
|
||||
// 校验解析结果
|
||||
if (Number.isNaN(inputValue)) {
|
||||
console.warn('无法将临时输入解析为有效数字:', tempInputString);
|
||||
// 暂时不清除临时输入,允许用户修正或重新选择单位
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
console.debug('确认单位:', selectedUnit, '值为:', inputValue);
|
||||
|
||||
// 根据选中的 Freq 项目更新对应的状态
|
||||
switch (selectedFreqItem) {
|
||||
case E_选项卡菜单Freq菜单列表的项目.CenterFreq: {
|
||||
state.频谱仪状态.center.value = inputValue;
|
||||
state.频谱仪状态.center.unit = selectedUnit;
|
||||
console.debug('更新 CenterFreq:', state.频谱仪状态.center);
|
||||
break;
|
||||
}
|
||||
case E_选项卡菜单Freq菜单列表的项目.StartFreq: {
|
||||
state.频谱仪状态.start.value = inputValue;
|
||||
state.频谱仪状态.start.unit = selectedUnit;
|
||||
console.debug('更新 StartFreq:', state.频谱仪状态.start);
|
||||
break;
|
||||
}
|
||||
case E_选项卡菜单Freq菜单列表的项目.StopFreq: {
|
||||
state.频谱仪状态.stop.value = inputValue;
|
||||
state.频谱仪状态.stop.unit = selectedUnit;
|
||||
console.debug('更新 StopFreq:', state.频谱仪状态.stop);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 重置整个输入状态,为下一次输入做准备
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = null;
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = null;
|
||||
console.debug('输入状态已重置');
|
||||
const inputValue = Number.parseFloat(tempInputString);
|
||||
// 校验解析结果
|
||||
if (Number.isNaN(inputValue)) {
|
||||
console.warn('无法将临时输入解析为有效数字 (频率):', tempInputString);
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
// 操作完成,切换回 Freq 菜单列表
|
||||
state.选项卡当前显示 = E_选项卡菜单.频率菜单列表;
|
||||
console.debug('切换回 Freq 菜单列表');
|
||||
}
|
||||
if (state.选项卡当前显示 === E_选项卡菜单.跨度菜单列表) {
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
// Full Span
|
||||
state.频谱仪状态.span.lastSpan.start = state.频谱仪状态.start.value;
|
||||
state.频谱仪状态.span.lastSpan.stop = state.频谱仪状态.stop.value;
|
||||
state.频谱仪状态.span.lastSpan.unit = state.频谱仪状态.stop.unit;
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.span.fullSpan.start;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.span.fullSpan.stop;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.center.value = (state.频谱仪状态.start.value + state.频谱仪状态.stop.value) / 2;
|
||||
state.频谱仪状态.center.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.span.zeroSpan = false;
|
||||
console.debug('设置为 Full Span');
|
||||
break;
|
||||
console.debug('确认频率单位:', selectedUnit, '值为:', inputValue);
|
||||
switch (selectedFreqItem) {
|
||||
case E_选项卡菜单Freq菜单列表的项目.CenterFreq: {
|
||||
state.频谱仪状态.center.value = inputValue;
|
||||
state.频谱仪状态.center.unit = selectedUnit;
|
||||
console.debug('更新 CenterFreq:', state.频谱仪状态.center);
|
||||
break;
|
||||
}
|
||||
case E_选项卡菜单Freq菜单列表的项目.StartFreq: {
|
||||
state.频谱仪状态.start.value = inputValue;
|
||||
state.频谱仪状态.start.unit = selectedUnit;
|
||||
console.debug('更新 StartFreq:', state.频谱仪状态.start);
|
||||
break;
|
||||
}
|
||||
case E_选项卡菜单Freq菜单列表的项目.StopFreq: {
|
||||
state.频谱仪状态.stop.value = inputValue;
|
||||
state.频谱仪状态.stop.unit = selectedUnit;
|
||||
console.debug('更新 StopFreq:', state.频谱仪状态.stop);
|
||||
break;
|
||||
}
|
||||
}
|
||||
case 2: {
|
||||
// Zero Span
|
||||
state.频谱仪状态.span.lastSpan.start = state.频谱仪状态.start.value;
|
||||
state.频谱仪状态.span.lastSpan.stop = state.频谱仪状态.stop.value;
|
||||
state.频谱仪状态.span.lastSpan.unit = state.频谱仪状态.stop.unit;
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.center.value;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.center.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.center.value;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.center.unit;
|
||||
state.频谱仪状态.span.zeroSpan = true;
|
||||
console.debug('设置为 Zero Span');
|
||||
break;
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 = null;
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = null;
|
||||
state.选项卡当前显示 = E_选项卡菜单.频率菜单列表;
|
||||
console.debug('频率输入状态已重置, 切换回频率菜单列表');
|
||||
},
|
||||
[E_选项卡菜单.跨度菜单列表]: () => {
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
// Full Span
|
||||
state.频谱仪状态.span.lastSpan.start = state.频谱仪状态.start.value;
|
||||
state.频谱仪状态.span.lastSpan.stop = state.频谱仪状态.stop.value;
|
||||
state.频谱仪状态.span.lastSpan.unit = state.频谱仪状态.stop.unit;
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.span.fullSpan.start;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.span.fullSpan.stop;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.center.value = (state.频谱仪状态.start.value + state.频谱仪状态.stop.value) / 2;
|
||||
state.频谱仪状态.center.unit = state.频谱仪状态.span.fullSpan.unit;
|
||||
state.频谱仪状态.span.zeroSpan = false;
|
||||
console.debug('设置为 Full Span');
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
// Zero Span
|
||||
state.频谱仪状态.span.lastSpan.start = state.频谱仪状态.start.value;
|
||||
state.频谱仪状态.span.lastSpan.stop = state.频谱仪状态.stop.value;
|
||||
state.频谱仪状态.span.lastSpan.unit = state.频谱仪状态.stop.unit;
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.center.value;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.center.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.center.value;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.center.unit;
|
||||
state.频谱仪状态.span.zeroSpan = true;
|
||||
console.debug('设置为 Zero Span');
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
// Last Span
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.span.lastSpan.start;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.span.lastSpan.stop;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.center.value = (state.频谱仪状态.start.value + state.频谱仪状态.stop.value) / 2;
|
||||
state.频谱仪状态.center.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.span.zeroSpan = false;
|
||||
console.debug('恢复到 Last Span');
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.debug('跨度菜单列表 - 这个按键还没有实现');
|
||||
break;
|
||||
}
|
||||
}
|
||||
case 3: {
|
||||
// Last Span
|
||||
state.频谱仪状态.start.value = state.频谱仪状态.span.lastSpan.start;
|
||||
state.频谱仪状态.start.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.stop.value = state.频谱仪状态.span.lastSpan.stop;
|
||||
state.频谱仪状态.stop.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.center.value = (state.频谱仪状态.start.value + state.频谱仪状态.stop.value) / 2;
|
||||
state.频谱仪状态.center.unit = state.频谱仪状态.span.lastSpan.unit;
|
||||
state.频谱仪状态.span.zeroSpan = false;
|
||||
console.debug('恢复到 Last Span');
|
||||
break;
|
||||
},
|
||||
[E_选项卡菜单.幅度菜单列表]: () => {
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
// Ref Level
|
||||
state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目 = E_幅度菜单列表的项目.RefLevel;
|
||||
state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 = null;
|
||||
console.debug('设置 幅度输入状态为 RefLevel');
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
// Attenuation
|
||||
console.debug('点击了 幅度菜单列表 - Attenuation (功能待实现)');
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.debug('幅度菜单列表 - 这个按键还没有实现');
|
||||
break;
|
||||
}
|
||||
}
|
||||
default: {
|
||||
console.debug('这个按键还没有实现');
|
||||
break;
|
||||
},
|
||||
[E_选项卡菜单.幅度单位列表]: () => {
|
||||
let selectedUnit: E_幅度单位 | null = null;
|
||||
switch (按钮序号) {
|
||||
case 1: {
|
||||
selectedUnit = E_幅度单位.dBm;
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
selectedUnit = E_幅度单位.mV;
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
selectedUnit = E_幅度单位.uV;
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
selectedUnit = E_幅度单位.uA;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.warn('无效的幅度单位按钮序号:', 按钮序号);
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const tempInputString = state.频谱仪状态.幅度输入状态.输入的值临时输入字符串;
|
||||
const selectedAmpItem = state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目;
|
||||
|
||||
if (!tempInputString || !selectedAmpItem) {
|
||||
console.warn('幅度输入未完成或未选择项目,无法确认单位。');
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
const inputValue = Number.parseFloat(tempInputString);
|
||||
if (Number.isNaN(inputValue)) {
|
||||
console.warn('无法将临时输入解析为有效数字 (幅度):', tempInputString);
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
console.debug('确认幅度单位:', selectedUnit, '值为:', inputValue);
|
||||
if (selectedAmpItem === E_幅度菜单列表的项目.RefLevel) {
|
||||
state.频谱仪状态.幅度输入状态.refLevel.value = inputValue;
|
||||
state.频谱仪状态.幅度输入状态.refLevel.unit = selectedUnit;
|
||||
console.debug('更新 RefLevel:', state.频谱仪状态.幅度输入状态.refLevel);
|
||||
}
|
||||
state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目 = null;
|
||||
state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 = null;
|
||||
state.选项卡当前显示 = E_选项卡菜单.幅度菜单列表;
|
||||
console.debug('幅度输入状态已重置, 切换回幅度菜单列表');
|
||||
},
|
||||
});
|
||||
console.groupEnd();
|
||||
}
|
||||
|
||||
function 执行点击数字按钮(按钮值: E_数字键盘按键) {
|
||||
console.group('🔢 点击数字按钮', { 按钮值 });
|
||||
|
||||
// 检查是否已选择 Freq 菜单项
|
||||
if (!state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目) {
|
||||
console.warn('请先选择一个 Freq 菜单项 (Center, Start, Stop)');
|
||||
const isFreqInputActive = !!state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目;
|
||||
const isAmpInputActive = !!state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目;
|
||||
|
||||
if (!isFreqInputActive && !isAmpInputActive) {
|
||||
console.warn('请先选择一个频率或幅度菜单项');
|
||||
console.groupEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
// 使用 临时输入字符串,如果为 null 则视为空字符串
|
||||
const 当前临时输入 = state.频谱仪状态.频率输入状态.输入的值临时输入字符串 ?? '';
|
||||
let 当前临时输入: string;
|
||||
let 更新临时输入回调: (newVal: string | null) => void;
|
||||
let 后续操作菜单: E_选项卡菜单;
|
||||
|
||||
if (isFreqInputActive) {
|
||||
当前临时输入 = state.频谱仪状态.频率输入状态.输入的值临时输入字符串 ?? '';
|
||||
更新临时输入回调 = (newVal) => {
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = newVal;
|
||||
};
|
||||
后续操作菜单 = E_选项卡菜单.频率单位列表;
|
||||
} else {
|
||||
// isAmpInputActive
|
||||
当前临时输入 = state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 ?? '';
|
||||
更新临时输入回调 = (newVal) => {
|
||||
state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 = newVal;
|
||||
};
|
||||
后续操作菜单 = E_选项卡菜单.幅度单位列表;
|
||||
}
|
||||
|
||||
switch (按钮值) {
|
||||
case E_数字键盘按键.Dot: {
|
||||
@ -238,8 +330,13 @@ function 执行点击数字按钮(按钮值: E_数字键盘按键) {
|
||||
console.debug('已存在小数点,忽略本次输入');
|
||||
} else {
|
||||
// 如果当前为空,则为 '0.',否则追加 '.'
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = 当前临时输入 ? `${当前临时输入}.` : '0.';
|
||||
console.debug('输入小数点,临时字符串:', state.频谱仪状态.频率输入状态.输入的值临时输入字符串);
|
||||
更新临时输入回调(当前临时输入 ? `${当前临时输入}.` : '0.');
|
||||
console.debug(
|
||||
'输入小数点,临时字符串:',
|
||||
isFreqInputActive
|
||||
? state.频谱仪状态.频率输入状态.输入的值临时输入字符串
|
||||
: state.频谱仪状态.幅度输入状态.输入的值临时输入字符串,
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -254,42 +351,44 @@ function 执行点击数字按钮(按钮值: E_数字键盘按键) {
|
||||
case E_数字键盘按键.Num7:
|
||||
case E_数字键盘按键.Num8:
|
||||
case E_数字键盘按键.Num9: {
|
||||
// 直接拼接数字到临时字符串
|
||||
// 特殊处理:如果当前是 '0',则替换为新数字;如果是 '-0',则替换为 '-'+新数字
|
||||
if (当前临时输入 === '0') {
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = String(按钮值);
|
||||
更新临时输入回调(String(按钮值));
|
||||
} else if (当前临时输入 === '-0') {
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = `-${String(按钮值)}`;
|
||||
更新临时输入回调(`-${String(按钮值)}`);
|
||||
} else {
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = 当前临时输入 + String(按钮值);
|
||||
更新临时输入回调(当前临时输入 + String(按钮值));
|
||||
}
|
||||
console.debug('输入数字,临时字符串:', state.频谱仪状态.频率输入状态.输入的值临时输入字符串);
|
||||
console.debug(
|
||||
'输入数字,临时字符串:',
|
||||
isFreqInputActive
|
||||
? state.频谱仪状态.频率输入状态.输入的值临时输入字符串
|
||||
: state.频谱仪状态.幅度输入状态.输入的值临时输入字符串,
|
||||
);
|
||||
break;
|
||||
}
|
||||
case E_数字键盘按键.PlusMinus: {
|
||||
// +/- 逻辑操作临时字符串
|
||||
if (当前临时输入.startsWith('-')) {
|
||||
// 如果已经是负数,移除负号
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = 当前临时输入.slice(1);
|
||||
更新临时输入回调(当前临时输入.slice(1));
|
||||
} else if (当前临时输入 && 当前临时输入 !== '0' && 当前临时输入 !== '0.') {
|
||||
// 如果是正数且不为0或0.,添加负号
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = `-${当前临时输入}`;
|
||||
更新临时输入回调(`-${当前临时输入}`);
|
||||
} else if (当前临时输入 === '' || 当前临时输入 === '0' || 当前临时输入 === '0.') {
|
||||
// 如果是空或0或0.,变成负号开头
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 = '-';
|
||||
更新临时输入回调('-');
|
||||
} else {
|
||||
// 其他情况(例如只有一个'-')不允许切换
|
||||
console.debug('无法切换正负号');
|
||||
}
|
||||
console.debug('切换正负号,临时字符串:', state.频谱仪状态.频率输入状态.输入的值临时输入字符串);
|
||||
console.debug(
|
||||
'切换正负号,临时字符串:',
|
||||
isFreqInputActive
|
||||
? state.频谱仪状态.频率输入状态.输入的值临时输入字符串
|
||||
: state.频谱仪状态.幅度输入状态.输入的值临时输入字符串,
|
||||
);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
// 处理未预期的按钮值(理论上不应发生)
|
||||
console.warn('未知的数字键盘按键:', 按钮值);
|
||||
}
|
||||
}
|
||||
state.选项卡当前显示 = E_选项卡菜单.频率单位列表;
|
||||
state.选项卡当前显示 = 后续操作菜单;
|
||||
|
||||
console.groupEnd();
|
||||
}
|
||||
@ -351,7 +450,14 @@ watchEffect(() => {
|
||||
<div class="absolute left-[195px] top-[140px] h-[350px] w-[430px] bg-black" data-box="屏幕">
|
||||
<img :src="屏幕照片" alt="频谱仪屏幕" class="absolute left-0 top-0 !h-[330px] !w-[340px]" />
|
||||
|
||||
<!-- bg-pink -->
|
||||
<!-- -->
|
||||
<!-- 屏幕左上角 Ref Level -->
|
||||
<div class="absolute left-[5px] top-[20px] text-left text-white text-[10px]" data-box="屏幕左上角RefLevel">
|
||||
<span>
|
||||
Ref {{ state.频谱仪状态.幅度输入状态.refLevel.value }} {{ state.频谱仪状态.幅度输入状态.refLevel.unit }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="absolute bottom-0 left-0 right-[85px] flex justify-between text-white" data-box="下面左Start 右Stop">
|
||||
<div class="flex-1 text-left">
|
||||
<span>Start </span>
|
||||
@ -366,24 +472,46 @@ watchEffect(() => {
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目"
|
||||
v-if="
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 ||
|
||||
state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目
|
||||
"
|
||||
class="lh-[1.2] absolute left-[40px] top-[140px] flex flex-col gap-y-[0px] bg-gray-500/100 text-white"
|
||||
data-box="正在输入频率"
|
||||
data-box="正在输入的值"
|
||||
>
|
||||
<!-- 优先显示临时输入字符串,如果为空,则显示默认或已确认的值 -->
|
||||
<div>{{ state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 }}</div>
|
||||
<!-- 标题:显示当前选中的输入项 -->
|
||||
<div v-if="state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目">
|
||||
{{ state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 }}
|
||||
</div>
|
||||
<div v-else-if="state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目">
|
||||
{{ state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目 }}
|
||||
</div>
|
||||
|
||||
<!-- 值:优先显示临时输入字符串,如果为空,则显示已确认的值 -->
|
||||
<div>
|
||||
<template v-if="state.频谱仪状态.频率输入状态.输入的值临时输入字符串 !== null">
|
||||
<template
|
||||
v-if="
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 &&
|
||||
state.频谱仪状态.频率输入状态.输入的值临时输入字符串 !== null
|
||||
"
|
||||
>
|
||||
{{ state.频谱仪状态.频率输入状态.输入的值临时输入字符串 }}
|
||||
<!-- 输入过程中不显示单位,等待单位确认 -->
|
||||
</template>
|
||||
<template
|
||||
v-else-if="
|
||||
state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目 &&
|
||||
state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 !== null
|
||||
"
|
||||
>
|
||||
{{ state.频谱仪状态.幅度输入状态.输入的值临时输入字符串 }}
|
||||
</template>
|
||||
<!-- 已确认的频率值 -->
|
||||
<template
|
||||
v-else-if="
|
||||
state.频谱仪状态.频率输入状态.选中的频率菜单列表的项目 === E_选项卡菜单Freq菜单列表的项目.CenterFreq
|
||||
"
|
||||
>
|
||||
{{ state.频谱仪状态.center.value }}
|
||||
{{ state.频谱仪状态.center.unit }}
|
||||
{{ state.频谱仪状态.center.value }} {{ state.频谱仪状态.center.unit }}
|
||||
</template>
|
||||
<template
|
||||
v-else-if="
|
||||
@ -399,9 +527,15 @@ watchEffect(() => {
|
||||
>
|
||||
{{ state.频谱仪状态.stop.value }} {{ state.频谱仪状态.stop.unit }}
|
||||
</template>
|
||||
<!-- 已确认的幅度值 -->
|
||||
<template
|
||||
v-else-if="state.频谱仪状态.幅度输入状态.选中的幅度菜单列表的项目 === E_幅度菜单列表的项目.RefLevel"
|
||||
>
|
||||
{{ state.频谱仪状态.幅度输入状态.refLevel.value }} {{ state.频谱仪状态.幅度输入状态.refLevel.unit }}
|
||||
</template>
|
||||
<template v-else>
|
||||
<!-- 没有选中项目,也没有临时输入时显示默认 -->
|
||||
0.000000000 Hz
|
||||
0.000000000
|
||||
<!-- 默认或回退显示 -->
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@ -492,6 +626,51 @@ watchEffect(() => {
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
</ul>
|
||||
|
||||
<ul
|
||||
v-if="state.选项卡当前显示 === E_选项卡菜单.幅度菜单列表"
|
||||
class="flex h-[300px] flex-col justify-around gap-y-[4px]"
|
||||
data-box="幅度菜单列表"
|
||||
>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>Ref Level</span>
|
||||
<span>
|
||||
{{ state.频谱仪状态.幅度输入状态.refLevel.value }}
|
||||
{{ state.频谱仪状态.幅度输入状态.refLevel.unit }}
|
||||
</span>
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>#Attenuation</span>
|
||||
<!-- <span>TODO</span> -->
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
</ul>
|
||||
|
||||
<ul
|
||||
v-if="state.选项卡当前显示 === E_选项卡菜单.幅度单位列表"
|
||||
class="flex h-[300px] flex-col justify-around gap-y-[4px]"
|
||||
data-box="幅度单位列表"
|
||||
>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>{{ E_幅度单位.dBm }}</span>
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>{{ E_幅度单位.mV }}</span>
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>{{ E_幅度单位.uV }}</span>
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]">
|
||||
<span>{{ E_幅度单位.uA }}</span>
|
||||
</li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
<li class="menu-item lh-[1.2] flex flex-1 flex-col gap-y-[0px] overflow-hidden bg-[#AFAFAF]"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -504,8 +683,9 @@ watchEffect(() => {
|
||||
<button class="ppy-btn !w-[62px]" @click="state.选项卡当前显示 = E_选项卡菜单.跨度菜单列表">
|
||||
SPAN<br />X Scale
|
||||
</button>
|
||||
<!-- SPAN<br />X Scale -->
|
||||
<button class="ppy-btn !w-[62px] opacity-0">#</button>
|
||||
<button class="ppy-btn !w-[62px]" @click="state.选项卡当前显示 = E_选项卡菜单.幅度菜单列表">
|
||||
AMPLITUDE<br />Y Scale
|
||||
</button>
|
||||
<button class="ppy-btn !w-[62px] opacity-0">#</button>
|
||||
<button class="ppy-btn !w-[62px] opacity-0">#</button>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user