diff --git a/src/components/PinPuYi/Helvetica.css b/src/components/PinPuYi/Helvetica.css index 8616de7..67ec674 100644 --- a/src/components/PinPuYi/Helvetica.css +++ b/src/components/PinPuYi/Helvetica.css @@ -1,12 +1,13 @@ @font-face { - font-family: 'Helvetica Custom'; - src: url('fonts/Helvetica-Light-05.eot'); - src: url('fonts/Helvetica-Light-05.eot?#iefix') format('embedded-opentype'), - url('fonts/Helvetica-Light-05.woff2') format('woff2'), - url('fonts/Helvetica-Light-05.woff') format('woff'), - url('fonts/Helvetica-Light-05.ttf') format('truetype'), - url('fonts/Helvetica-Light-05.svg#Helvetica') format('svg'); - font-weight: 400; /* 400 通常代表 'normal' 或 'regular' */ - font-style: normal; - font-display: swap; /* 推荐 */ -} \ No newline at end of file + font-family: 'Helvetica Custom'; + src: url('fonts/Helvetica-Light-05.eot'); + src: + url('fonts/Helvetica-Light-05.eot?#iefix') format('embedded-opentype'), + url('fonts/Helvetica-Light-05.woff2') format('woff2'), + url('fonts/Helvetica-Light-05.woff') format('woff'), + url('fonts/Helvetica-Light-05.ttf') format('truetype'), + url('fonts/Helvetica-Light-05.svg#Helvetica') format('svg'); + font-weight: 400; /* 400 通常代表 'normal' 或 'regular' */ + font-style: normal; + font-display: swap; /* 推荐 */ +} diff --git a/src/components/PinPuYi/PinPuYi.vue b/src/components/PinPuYi/PinPuYi.vue index 848feda..017a0b2 100644 --- a/src/components/PinPuYi/PinPuYi.vue +++ b/src/components/PinPuYi/PinPuYi.vue @@ -4,62 +4,263 @@ import { $enum } from 'ts-enum-util'; import DeviceImage from './pin-pu-yi-bg.png'; -enum 选项卡菜单 { +enum E_选项卡菜单 { Freq菜单列表 = 'Freq菜单列表', Freq单位列表 = 'Freq单位列表', } -enum 选项卡菜单Freq菜单列表的项目 { - CenterFreq = 'CenterFreq', - StartFreq = 'StartFreq', - StopFreq = 'StopFreq', +/* 值是在屏幕上显示的值。 */ +enum E_选项卡菜单Freq菜单列表的项目 { + CenterFreq = 'Center', + StartFreq = 'Start', + StopFreq = 'Stop', // CFStep = 'CFStep', // FreqOffset = 'FreqOffset', // SingnalTrack = 'SingnalTrack', // ScaleType = 'ScaleType', } -enum Freq单位 { +enum E_Freq单位 { GHz = 'GHz', MHz = 'MHz', kHz = 'kHz', Hz = 'Hz', } +enum E_数字键盘按键 { + Num7 = 7, + Num8 = 8, + Num9 = 9, + Num4 = 4, + Num5 = 5, + Num6 = 6, + Num1 = 1, + Num2 = 2, + Num3 = 3, + Num0 = 0, + Dot = '.', + PlusMinus = '+/-', +} + const state = reactive({ - 选项卡当前显示: 选项卡菜单.Freq菜单列表, + 选项卡当前显示: E_选项卡菜单.Freq菜单列表, Freq状态: { 输入状态: { - 选中的Freq菜单列表的项目: null as null | 选项卡菜单Freq菜单列表的项目, - 输入的值: null as null | number, - 选中的单位: null as null | Freq单位, + 选中的Freq菜单列表的项目: null as null | E_选项卡菜单Freq菜单列表的项目, + 输入的值临时输入字符串: null as null | string, // 用于暂存用户输入 + 选中的单位: null as null | E_Freq单位, }, center: { - value: 1.5, - unit: Freq单位.GHz, + value: 0, + unit: E_Freq单位.Hz, }, start: { value: 0, - unit: Freq单位.Hz, + unit: E_Freq单位.Hz, }, stop: { - value: 3, - unit: Freq单位.MHz, + value: 0, + unit: E_Freq单位.Hz, }, }, }); const 选项卡标题 = computed(() => $enum.mapValue(state.选项卡当前显示).with({ - [选项卡菜单.Freq菜单列表]: 'Freq/Channel', - [选项卡菜单.Freq单位列表]: '', + [E_选项卡菜单.Freq菜单列表]: 'Freq/Channel', + [E_选项卡菜单.Freq单位列表]: '', }), ); + +function 执行点击屏幕右边的按钮(按钮序号: number) { + console.group('🔘 点击屏幕右边的按钮', { 按钮序号 }); + if (state.选项卡当前显示 === E_选项卡菜单.Freq菜单列表) { + switch (按钮序号) { + case 1: { + state.Freq状态.输入状态.选中的Freq菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.CenterFreq; + console.debug('设置 Freq 输入状态为 CenterFreq'); + break; + } + case 2: { + state.Freq状态.输入状态.选中的Freq菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StartFreq; + console.debug('设置 Freq 输入状态为 StartFreq'); + break; + } + case 3: { + state.Freq状态.输入状态.选中的Freq菜单列表的项目 = E_选项卡菜单Freq菜单列表的项目.StopFreq; + console.debug('设置 Freq 输入状态为 StopFreq'); + break; + } + default: { + console.debug('这个按键还没有实现'); + break; + } + } + } + + if (state.选项卡当前显示 === E_选项卡菜单.Freq单位列表) { + 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; + } // 不处理无效按钮 (5, 6, 7) + } + + const tempInputString = state.Freq状态.输入状态.输入的值临时输入字符串; + const selectedFreqItem = state.Freq状态.输入状态.选中的Freq菜单列表的项目; + + // 必须有临时输入值和选中的 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.Freq状态.center.value = inputValue; + state.Freq状态.center.unit = selectedUnit; + console.debug('更新 CenterFreq:', state.Freq状态.center); + break; + } + case E_选项卡菜单Freq菜单列表的项目.StartFreq: { + state.Freq状态.start.value = inputValue; + state.Freq状态.start.unit = selectedUnit; + console.debug('更新 StartFreq:', state.Freq状态.start); + break; + } + case E_选项卡菜单Freq菜单列表的项目.StopFreq: { + state.Freq状态.stop.value = inputValue; + state.Freq状态.stop.unit = selectedUnit; + console.debug('更新 StopFreq:', state.Freq状态.stop); + break; + } + } + + // 重置整个输入状态,为下一次输入做准备 + state.Freq状态.输入状态.选中的Freq菜单列表的项目 = null; + state.Freq状态.输入状态.输入的值临时输入字符串 = null; + state.Freq状态.输入状态.选中的单位 = null; // 清除旧的确认单位 + console.debug('输入状态已重置'); + + // 操作完成,切换回 Freq 菜单列表 + state.选项卡当前显示 = E_选项卡菜单.Freq菜单列表; + console.debug('切换回 Freq 菜单列表'); + } + console.groupEnd(); +} + +function 执行点击数字按钮(按钮值: E_数字键盘按键) { + console.group('🔢 点击数字按钮', { 按钮值 }); + + // 检查是否已选择 Freq 菜单项 + if (!state.Freq状态.输入状态.选中的Freq菜单列表的项目) { + console.warn('请先选择一个 Freq 菜单项 (Center, Start, Stop)'); + console.groupEnd(); + return; + } + + // 使用 临时输入字符串,如果为 null 则视为空字符串 + const 当前临时输入 = state.Freq状态.输入状态.输入的值临时输入字符串 ?? ''; + + switch (按钮值) { + case E_数字键盘按键.Dot: { + // 只有在当前临时输入不包含小数点时才允许添加 + if (当前临时输入.includes('.')) { + console.debug('已存在小数点,忽略本次输入'); + } else { + // 如果当前为空,则为 '0.',否则追加 '.' + state.Freq状态.输入状态.输入的值临时输入字符串 = 当前临时输入 ? 当前临时输入 + '.' : '0.'; + console.debug('输入小数点,临时字符串:', state.Freq状态.输入状态.输入的值临时输入字符串); + } + break; + } + + case E_数字键盘按键.Num0: + case E_数字键盘按键.Num1: + case E_数字键盘按键.Num2: + case E_数字键盘按键.Num3: + case E_数字键盘按键.Num4: + case E_数字键盘按键.Num5: + case E_数字键盘按键.Num6: + case E_数字键盘按键.Num7: + case E_数字键盘按键.Num8: + case E_数字键盘按键.Num9: { + // 直接拼接数字到临时字符串 + // 特殊处理:如果当前是 '0',则替换为新数字;如果是 '-0',则替换为 '-'+新数字 + if (当前临时输入 === '0') { + state.Freq状态.输入状态.输入的值临时输入字符串 = String(按钮值); + } else if (当前临时输入 === '-0') { + state.Freq状态.输入状态.输入的值临时输入字符串 = '-' + String(按钮值); + } else { + state.Freq状态.输入状态.输入的值临时输入字符串 = 当前临时输入 + String(按钮值); + } + console.debug('输入数字,临时字符串:', state.Freq状态.输入状态.输入的值临时输入字符串); + break; + } + case E_数字键盘按键.PlusMinus: { + // +/- 逻辑操作临时字符串 + if (当前临时输入.startsWith('-')) { + // 如果已经是负数,移除负号 + state.Freq状态.输入状态.输入的值临时输入字符串 = 当前临时输入.slice(1); + } else if (当前临时输入 && 当前临时输入 !== '0' && 当前临时输入 !== '0.') { + // 如果是正数且不为0或0.,添加负号 + state.Freq状态.输入状态.输入的值临时输入字符串 = '-' + 当前临时输入; + } else if (当前临时输入 === '' || 当前临时输入 === '0' || 当前临时输入 === '0.') { + // 如果是空或0或0.,变成负号开头 + state.Freq状态.输入状态.输入的值临时输入字符串 = '-'; + } else { + // 其他情况(例如只有一个'-')不允许切换 + console.debug('无法切换正负号'); + } + console.debug('切换正负号,临时字符串:', state.Freq状态.输入状态.输入的值临时输入字符串); + break; + } + default: { + // 处理未预期的按钮值(理论上不应发生) + console.warn('未知的数字键盘按键:', 按钮值); + } + } + state.选项卡当前显示 = E_选项卡菜单.Freq单位列表; + + console.groupEnd(); +}