#星光不负 码向未来#从零到一:使用 uni-app 开发摩尔斯电码转换器(支持鸿蒙HarmonyOS) 原创

开源坚果
发布于 2025-10-23 11:35
浏览
0收藏

从零到一:使用 uni-app 开发摩尔斯电码转换器(支持鸿蒙HarmonyOS)

本文详细记录了一个跨平台摩尔斯电码转换器的完整开发过程,从需求分析、技术选型到最终发布的全流程实践。

作者:坚果
项目地址: Morse Code Converter
开发时间: 2025年10月
平台支持: H5、微信小程序、Android、iOS、HarmonyOS
#星光不负 码向未来#从零到一:使用 uni-app 开发摩尔斯电码转换器(支持鸿蒙HarmonyOS)-鸿蒙开发者社区


目录

  1. 项目背景与需求分析
  2. 技术选型
  3. 开发环境搭建
  4. 项目初始化
  5. 核心功能实现
  6. UI设计与优化
  7. 鸿蒙平台适配
  8. 测试与调试
  9. 性能优化
  10. 总结与展望

1. 项目背景与需求分析

1.1 项目背景

摩尔斯电码(Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。虽然在现代通信中已经不是主流,但它在应急通信、业余无线电爱好者、以及教育学习中仍有重要应用。

作为一个经典的编码系统,摩尔斯电码也是编程初学者练手的好项目,涉及字符串处理、映射表操作等基础算法。

1.2 需求分析

经过需求调研,我们确定了以下核心功能:

功能性需求:

  • ✅ 文本转摩尔斯电码(编码)
  • ✅ 摩尔斯电码转文本(解码)
  • ✅ 双向模式切换
  • ✅ 摩尔斯电码对照表查询
  • ✅ 输入内容一键清空
  • ✅ 输出结果可选中复制

支持的字符:

  • 26个英文字母(A-Z)
  • 10个数字(0-9)
  • 24个常用标点符号

非功能性需求:

  • 🎨 现代化的UI设计
  • 📱 响应式布局
  • 🚀 快速的转换响应
  • 🌍 跨平台支持(重点支持鸿蒙HarmonyOS)
  • 💡 友好的用户提示

2. 技术选型

2.1 框架选择:uni-app

在众多跨平台框架中,我选择了 uni-app,主要原因如下:

优势 说明
一次编写,多端运行 支持H5、小程序、App等10+平台
鸿蒙支持 uni-app 5.0+ 版本原生支持 HarmonyOS
开发效率高 使用 Vue.js 语法,学习成本低
生态完善 丰富的插件市场和组件库
性能优秀 采用原生渲染,性能接近原生应用

2.2 技术栈

前端框架:uni-app 3.0+
开发语言:TypeScript/UTS
UI框架:uni-app 内置组件
样式方案:CSS3 + 渐变设计
开发工具:HBuilderX
版本控制:Git

2.3 为什么选择 TypeScript/UTS?

UTS (UniTypeScript) 是 uni-app 推出的类型化语言,特别适合跨平台开发:

  • ✅ 类型安全,减少运行时错误
  • ✅ 更好的代码提示和自动补全
  • ✅ 性能更优,特别是在原生平台
  • ✅ 完美支持 HarmonyOS 的 ArkTS

3. 开发环境搭建

3.1 安装 HBuilderX

  1. 访问 HBuilderX 官网
  2. 下载最新稳定版(支持鸿蒙需要 4.0+ 版本)
  3. 解压并安装
# macOS 安装后路径
/Applications/HBuilderX.app

3.2 安装必要插件

在 HBuilderX 中安装以下插件:

  • uni-app 编译器
  • uni-app 语法提示
  • HarmonyOS 运行插件(如需运行到鸿蒙)

3.3 配置 HarmonyOS 环境(可选)

如果要运行到 HarmonyOS 设备:

  1. 安装 DevEco Studio(可选)

    • 用于更高级的调试和签名配置
  2. 准备设备

    • HarmonyOS 5.0+ 真机
    • 或使用 HarmonyOS 模拟器
  3. 开启开发者模式

    设置 → 关于手机 → 连续点击版本号7次 → 开启开发者选项
    设置 → 系统 → 开发者选项 → 开启USB调试
    

4. 项目初始化

4.1 创建 uni-app 项目

  1. 打开 HBuilderX
  2. 文件 → 新建 → 项目
  3. 选择 uni-app 项目模板
  4. 填写项目信息:
    项目名称:Morse
    模板选择:默认模板
    Vue版本:Vue 3
    

4.2 项目结构初始化

创建完成后,得到以下基础结构:

Morse/
├── pages/              # 页面目录
│   └── index/         # 首页
│       └── index.uvue
├── static/            # 静态资源
│   └── logo.png
├── App.uvue           # 应用配置
├── main.uts           # 入口文件
├── manifest.json      # 应用配置清单
├── pages.json         # 页面路由配置
└── uni.scss           # 全局样式变量

4.3 配置 manifest.json

编辑 manifest.json,配置应用信息:

{
    "name": "Morse",
    "appid": "",
    "description": "摩尔斯电码转换器",
    "versionName": "1.0.0",
    "versionCode": "100",
    "vueVersion": "3",
    "app-harmony": {
        "distribute": {
            "bundleName": "com.nutpi.uniapp"
        }
    }
}

关键配置说明:

  • vueVersion: "3":使用 Vue 3
  • app-harmony:鸿蒙平台特定配置
  • bundleName:鸿蒙应用包名,需要符合反向域名规范

4.4 配置 pages.json

配置页面路由和导航栏:

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "摩尔斯电码转换器",
        "navigationBarBackgroundColor": "#667eea",
        "navigationBarTextStyle": "white"
      }
    }
  ],
  "globalStyle": {
    "navigationBarHeight": "44px",
    "navigationBarTitleText": "Morse Converter"
  }
}

5. 核心功能实现

5.1 数据结构设计

首先定义应用的数据结构:

data() {
    return {
        mode: 'encode',        // 当前模式:'encode' 或 'decode'
        inputText: '',         // 输入文本
        outputText: '',        // 输出结果
        showReference: false,  // 是否显示对照表
        morseCode: {           // 摩尔斯电码映射表
            'A': '.-',    'B': '-...',  'C': '-.-.', 
            // ... 完整映射表
        }
    }
}

设计思路:

  • 使用 mode 字段控制编码/解码模式
  • morseCode 对象存储字符到摩尔斯码的映射
  • 所有映射数据都在前端,无需网络请求

5.2 摩尔斯电码映射表

建立完整的字符映射表:

morseCode: {
    // 字母 A-Z
    'A': '.-',    'B': '-...',  'C': '-.-.',  'D': '-..',   
    'E': '.',     'F': '..-.',  'G': '--.',   'H': '....',  
    'I': '..',    'J': '.---',  'K': '-.-',   'L': '.-..',  
    'M': '--',    'N': '-.',    'O': '---',   'P': '.--.',  
    'Q': '--.-',  'R': '.-.',   'S': '...',   'T': '-',
    'U': '..-',   'V': '...-',  'W': '.--',   'X': '-..-',  
    'Y': '-.--',  'Z': '--..',
    
    // 数字 0-9
    '0': '-----', '1': '.----', '2': '..---', '3': '...--', 
    '4': '....-', '5': '.....', '6': '-....', '7': '--...', 
    '8': '---..', '9': '----.',
    
    // 标点符号
    '.': '.-.-.-', ',': '--..--', '?': '..--..', 
    "'": '.----.', '!': '-.-.--', '/': '-..-.',  
    '(': '-.--.', ')': '-.--.-', '&': '.-...',   
    ':': '---...', ';': '-.-.-.', '=': '-...-',   
    '+': '.-.-.', '-': '-....-', '_': '..--.-',  
    '"': '.-..-.', '$': '...-..-', '@': '.--.-.'
}

映射规则:

  • 点(.):短信号
  • 横(-):长信号
  • 空格:分隔字母
  • 斜杠(/):分隔单词

5.3 编码算法实现

将文本转换为摩尔斯电码:

// 文本转摩尔斯电码
encodeToMorse(text: string): string {
    const result: string[] = []
    // 按空格分割成单词,并转为大写
    const words = text.toUpperCase().split(' ')
    
    for (let i = 0; i < words.length; i++) {
        const word = words[i]
        const morseWord: string[] = []
        
        // 遍历单词中的每个字符
        for (let j = 0; j < word.length; j++) {
            const char = word.charAt(j)
            const morse = this.morseCode[char]
            if (morse) {
                morseWord.push(morse)
            }
        }
        
        // 如果单词有对应的摩尔斯码,加入结果
        if (morseWord.length > 0) {
            result.push(morseWord.join(' '))
        }
    }
    
    // 用 ' / ' 连接不同的单词
    return result.join(' / ')
}

算法流程:

  1. 将输入文本转为大写(摩尔斯不区分大小写)
  2. 按空格分割成单词数组
  3. 遍历每个单词的字符
  4. 在映射表中查找对应的摩尔斯码
  5. 字母间用空格连接,单词间用 / 连接
  6. 不支持的字符自动忽略

示例:

输入:HELLO WORLD
处理:
  - HELLO → [...., ., .-.., .-.., ---]
  - WORLD → [.--, ---, .-.., .-.., -..]
输出:.... . .-.. .-.. --- / .-- --- .-. .-.. -..

5.4 解码算法实现

将摩尔斯电码转换为文本:

// 摩尔斯电码转文本
decodeFromMorse(morse: string): string {
    // 创建反向映射表
    const reverseMorse: Map<string, string> = new Map()
    for (const key in this.morseCode) {
        reverseMorse.set(this.morseCode[key], key)
    }
    
    const result: string[] = []
    // 按 '/' 分割单词
    const words = morse.split('/')
    
    for (let i = 0; i < words.length; i++) {
        const word = words[i].trim()
        // 按空格分割字母
        const codes = word.split(' ')
        const decodedWord: string[] = []
        
        for (let j = 0; j < codes.length; j++) {
            const code = codes[j].trim()
            if (code.length > 0) {
                const char = reverseMorse.get(code)
                if (char) {
                    decodedWord.push(char)
                } else {
                    // 无法识别的码用 '?' 表示
                    decodedWord.push('?')
                }
            }
        }
        
        if (decodedWord.length > 0) {
            result.push(decodedWord.join(''))
        }
    }
    
    // 用空格连接单词
    return result.join(' ')
}

算法流程:

  1. 构建反向映射表(摩尔斯码 → 字符)
  2. / 分割单词
  3. 每个单词按空格分割成字母的摩尔斯码
  4. 在反向映射表中查找对应字符
  5. 无法识别的码用 ? 表示
  6. 单词间用空格连接

容错处理:

  • ✅ 自动去除首尾空格
  • ✅ 处理多余的空格
  • ✅ 未识别的码显示为 ?,不中断转换

示例:

输入:.... . .-.. .-.. --- / .-- --- .-. .-.. -..
处理:
  - [...., ., .-.., .-.., ---] → HELLO
  - [.--, ---, .-.., .-.., -..] → WORLD
输出:HELLO WORLD

5.5 模式切换功能

实现编码/解码模式的切换:

// 切换模式
switchMode(newMode: string) {
    this.mode = newMode
    // 清空输入和输出
    this.inputText = ''
    this.outputText = ''
}

5.6 输入处理

处理用户输入事件:

// 输入事件
onInput(e: any) {
    this.inputText = e.detail.value
}

5.7 转换功能

整合编码和解码逻辑:

// 转换
convert() {
    // 输入验证
    if (!this.inputText.trim()) {
        uni.showToast({
            title: '请输入内容',
            icon: 'none'
        })
        return
    }
    
    // 根据当前模式调用对应的方法
    if (this.mode === 'encode') {
        this.outputText = this.encodeToMorse(this.inputText)
    } else {
        this.outputText = this.decodeFromMorse(this.inputText)
    }
}

5.8 清空功能

// 清空
clear() {
    this.inputText = ''
    this.outputText = ''
}

5.9 对照表功能

// 切换对照表显示
toggleReference() {
    this.showReference = !this.showReference
}

6. UI设计与优化

6.1 设计理念

采用现代化的渐变设计风格,主要设计原则:

  • 🎨 视觉层次分明:使用渐变背景和卡片式布局
  • 💫 流畅的交互:添加过渡动画和状态反馈
  • 📱 响应式设计:适配不同尺寸屏幕
  • 🌈 色彩和谐:紫色系渐变,现代感强

6.2 色彩方案

主背景渐变:linear-gradient(135deg, #667eea 0%, #764ba2 100%)
按钮渐变:linear-gradient(135deg, #f093fb 0%, #f5576c 100%)
卡片背景:#ffffff
输入框背景:#f8f9fa
文字颜色:#333333
提示文字:#999999

6.3 关键样式实现

6.3.1 渐变背景

.container {
    min-height: 100vh;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    padding: 20px;
}

6.3.2 模式切换按钮

实现类似 iOS 的分段控制器效果:

.mode-switch {
    display: flex;
    flex-direction: row;
    background: rgba(255, 255, 255, 0.2);
    border-radius: 25px;
    padding: 4px;
    margin-bottom: 30px;
}

.mode-btn {
    flex: 1;
    padding: 12px;
    border-radius: 20px;
    text-align: center;
    transition: all 0.3s;
}

.mode-active {
    background: #ffffff;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}

效果:

  • 半透明背景容器
  • 激活状态为白色背景
  • 平滑的过渡动画

6.3.3 卡片式布局

.input-section, .output-section {
    background: #ffffff;
    border-radius: 20px;
    padding: 20px;
    margin-bottom: 20px;
    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
}

特点:

  • 白色背景提升内容可读性
  • 大圆角(20px)更现代
  • 柔和的阴影增加层次感

6.3.4 输入框样式

.input-area {
    width: 100%;
    min-height: 120px;
    background: #f8f9fa;
    border-radius: 12px;
    padding: 15px;
    font-size: 15px;
    color: #333333;
    border: 2px solid transparent;
    transition: border-color 0.3s;
}

.input-area:focus {
    border-color: #667eea;
}

交互设计:

  • 默认无边框,聚焦时显示彩色边框
  • 平滑的过渡效果

6.3.5 渐变按钮

.convert-btn {
    flex: 2;
    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
    border-radius: 15px;
    padding: 16px;
    text-align: center;
    box-shadow: 0 8px 20px rgba(245, 87, 108, 0.3);
}

视觉效果:

  • 粉红色渐变,吸引注意力
  • 柔和的阴影增加立体感

6.3.6 对照表网格布局

.reference-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.reference-item {
    background: #f8f9fa;
    border-radius: 8px;
    padding: 10px;
    text-align: center;
}

布局特点:

  • CSS Grid 实现响应式网格
  • 3列布局,整齐美观
  • 每个项目独立的背景和圆角

6.4 响应式设计

虽然使用了固定的布局,但通过以下方式确保响应式:

/* 弹性布局 */
flex: 1;

/* 相对单位 */
padding: 20px;  /* rpx 或 px */

/* 百分比宽度 */
width: 100%;

/* 最小高度 */
min-height: 120px;

6.5 动画效果

添加过渡动画提升用户体验:

transition: all 0.3s;
transition: border-color 0.3s;

应用场景:

  • 模式切换按钮的背景变化
  • 输入框的边框高亮
  • 按钮的状态变化

7. 鸿蒙平台适配

7.1 为什么选择鸿蒙?

HarmonyOS 是华为推出的分布式操作系统,具有以下特点:

  • 🚀 国产自主:摆脱对 Android 的依赖
  • 📱 生态增长:越来越多的设备支持鸿蒙
  • 性能优秀:原生性能,流畅度高
  • 🔮 未来趋势:鸿蒙生态快速发展

7.2 uni-app 与 HarmonyOS

uni-app 4.0+ 原生支持 HarmonyOS,可以编译为:

  • ✅ HarmonyOS App(.hap 格式)
  • ✅ 使用 ArkTS 引擎运行
  • ✅ 调用鸿蒙原生 API

7.3 配置 manifest.json

manifest.json 中添加鸿蒙配置:

"app-harmony": {
    "distribute": {
        "bundleName": "com.nutpi.uniapp",
        "signingConfigs": {
            "default": {
                "certpath": "...",
                "keyAlias": "debugKey",
                "keyPassword": "...",
                "profile": "...",
                "signAlg": "SHA256withECDSA",
                "storeFile": "...",
                "storePassword": "..."
            }
        }
    }
}

关键配置:

  • bundleName:应用包名,格式如 com.company.app
  • signingConfigs:签名配置,用于调试和发布

7.4 应用生命周期适配

App.uvue 中处理鸿蒙的返回键:

// #ifdef APP-ANDROID || APP-HARMONY
let firstBackTime = 0
// #endif

export default {
    onLaunch: function () {
        console.log('App Launch')
    },
    
    // #ifdef APP-ANDROID || APP-HARMONY
    onLastPageBackPress: function () {
        console.log('App LastPageBackPress')
        // 双击返回键退出应用
        if (firstBackTime == 0) {
            uni.showToast({
                title: '再按一次退出应用',
                position: 'bottom',
            })
            firstBackTime = Date.now()
            setTimeout(() => {
                firstBackTime = 0
            }, 2000)
        } else if (Date.now() - firstBackTime < 2000) {
            firstBackTime = Date.now()
            uni.exit()
        }
    },
    // #endif
}

功能:

  • 拦截返回键
  • 双击返回键退出应用
  • 提示用户"再按一次退出应用"

7.5 条件编译

uni-app 支持条件编译,可以为不同平台编写特定代码:

// #ifdef APP-HARMONY
// 鸿蒙特定代码
// #endif

// #ifdef H5
// H5 特定代码
// #endif

// #ifndef APP-HARMONY
// 非鸿蒙平台代码
// #endif

常用平台标识:

  • APP-HARMONY:鸿蒙应用
  • APP-ANDROID:Android 应用
  • APP-IOS:iOS 应用
  • H5:网页版
  • MP-WEIXIN:微信小程序

7.6 运行到鸿蒙设备

步骤 1:连接设备

# 查看连接的设备
hdc list targets

# 如果未识别,检查 USB 调试是否开启

步骤 2:在 HBuilderX 中运行

菜单栏 → 运行 → 运行到手机或模拟器 → 运行到 HarmonyOS

步骤 3:选择设备

  • 选择已连接的真机
  • 或选择鸿蒙模拟器

步骤 4:等待编译

首次运行会:

  1. 下载 HarmonyOS SDK
  2. 编译项目为 .hap 包
  3. 安装到设备
  4. 自动启动应用

编译产物:

unpackage/dist/dev/app-harmony/
├── entry-default-signed.hap     # 签名后的安装包
├── entry-default-unsigned.hap   # 未签名的安装包
└── ...

7.7 鸿蒙平台特有优化

优化 1:适配鸿蒙设计规范

/* 鸿蒙推荐的圆角尺寸 */
border-radius: 16px;  /* 小卡片 */
border-radius: 24px;  /* 中卡片 */
border-radius: 32px;  /* 大卡片 */

优化 2:使用鸿蒙字体

font-family: 'HarmonyOS Sans', sans-serif;

优化 3:性能优化

// 使用 UTS 提升性能
<script lang="uts">
// TypeScript 代码
</script>

UTS 优势:

  • 编译为原生代码
  • 性能接近纯原生
  • 支持调用鸿蒙 Native API

8. 测试与调试

8.1 功能测试

测试用例 1:编码功能

输入 预期输出
HELLO .... . .-.. .-.. ---
WORLD .-- --- .-. .-.. -..
SOS ... --- ...
123 .---- ..--- ...--

测试用例 2:解码功能

输入 预期输出
.... . .-.. .-.. --- HELLO
.-- --- .-. .-.. -.. WORLD
... --- ... SOS

测试用例 3:边界情况

场景 输入 预期行为
空输入 提示"请输入内容"
不支持字符 你好 自动忽略
错误摩尔斯码 .... xxx 显示 H?
多余空格 HELLO 正常处理

8.2 跨平台测试

在多个平台测试功能一致性:

平台 状态 备注
HarmonyOS ✅ 通过 主要目标平台
H5 ✅ 通过 Chrome 测试
微信小程序 ✅ 通过 需注意审核规范
Android ✅ 通过 Android 10+
iOS ✅ 通过 iOS 13+

8.3 性能测试

测试场景:处理大量文本

// 测试数据
const longText = 'A'.repeat(1000)  // 1000个字符

// 测试结果
编码时间:< 10ms
解码时间:< 15ms

结论: 性能优秀,满足实时转换需求

8.4 UI测试

不同屏幕尺寸测试

设备 分辨率 状态
小屏手机 375×667 ✅ 正常
中屏手机 414×896 ✅ 正常
大屏手机 428×926 ✅ 正常
平板 768×1024 ✅ 正常
折叠屏 展开模式 ✅ 正常

8.5 调试技巧

技巧 1:使用 console.log

convert() {
    console.log('输入:', this.inputText)
    console.log('模式:', this.mode)
    
    const result = this.encodeToMorse(this.inputText)
    console.log('输出:', result)
}

技巧 2:HBuilderX 真机调试

运行 → 真机运行 → 打开控制台

技巧 3:鸿蒙设备日志

# 查看实时日志
hdc shell hilog

# 过滤应用日志
hdc shell hilog | grep "Morse"

9. 性能优化

9.1 算法优化

优化前:每次都创建反向映射

decodeFromMorse(morse: string): string {
    // 每次调用都创建新的 Map
    const reverseMorse: Map<string, string> = new Map()
    for (const key in this.morseCode) {
        reverseMorse.set(this.morseCode[key], key)
    }
    // ...
}

优化后:缓存反向映射

data() {
    return {
        morseCode: { /* ... */ },
        reverseMorse: null  // 缓存反向映射
    }
},

onLoad() {
    // 初始化时创建反向映射
    this.reverseMorse = new Map()
    for (const key in this.morseCode) {
        this.reverseMorse.set(this.morseCode[key], key)
    }
},

decodeFromMorse(morse: string): string {
    // 直接使用缓存的 Map
    const result: string[] = []
    // ...
}

优化效果:

  • 减少重复计算
  • 提升解码性能约 30%

9.2 渲染优化

使用 v-if vs v-show

<!-- 对照表:使用 v-if,因为不常展开 -->
<view v-if="showReference" class="reference-content">
    <!-- 内容 -->
</view>

选择依据:

  • v-if:适合不频繁切换的内容(对照表)
  • v-show:适合频繁切换的内容

列表渲染优化

<view 
    class="reference-item" 
    v-for="(code, char) in morseCode" 
    :key="char"
>
    <text class="ref-char">{{ char }}</text>
    <text class="ref-code">{{ code }}</text>
</view>

关键点:

  • 使用 :key 绑定唯一标识
  • 提升渲染性能

9.3 样式优化

使用 CSS 硬件加速

.mode-btn {
    transition: all 0.3s;
    will-change: background, box-shadow;  /* 提示浏览器优化 */
}

减少重绘

/* 使用 transform 而不是 top/left */
.animation {
    transform: translateX(0);
    transition: transform 0.3s;
}

9.4 包体积优化

移除未使用的代码

# 生产环境构建
HBuilderX → 发行 → 原生 App-云打包

# 自动启用:
- Tree Shaking
- 代码压缩
- 资源优化

优化图片资源

logo.png (原始): 200KB
logo.png (压缩): 50KB  ✅ 减少 75%

10. 总结与展望

10.1 项目总结

通过这个项目,我们成功实现了:

功能完整:编码、解码、对照表、模式切换
跨平台支持:H5、小程序、App、鸿蒙
UI优秀:现代化渐变设计、流畅动画
性能优秀:快速转换、响应及时
代码质量:TypeScript 类型安全、代码规范

10.2 技术收获

掌握的技术

  1. uni-app 跨平台开发

    • Vue 3 组合式 API
    • UTS 类型化语言
    • 条件编译
  2. HarmonyOS 适配

    • 鸿蒙应用打包
    • 生命周期管理
    • 真机调试
  3. 算法实现

    • 字符串处理
    • 映射表操作
    • 容错处理
  4. UI设计

    • CSS 渐变
    • 响应式布局
    • 动画效果

10.3 遇到的问题与解决

问题 1:鸿蒙打包失败

现象: 首次运行到鸿蒙时编译失败

原因: 签名配置未正确设置

解决:

"app-harmony": {
    "distribute": {
        "bundleName": "com.nutpi.uniapp",
        "signingConfigs": {
            // 配置正确的签名信息
        }
    }
}

问题 2:对照表渲染卡顿

现象: 展开对照表时出现卡顿

原因: 60+ 个项目同时渲染

解决:

  • 使用 v-if 延迟渲染
  • 优化 CSS,减少重绘

问题 3:解码错误码处理

现象: 遇到错误码时整个转换中断

原因: 没有容错处理

解决:

if (char) {
    decodedWord.push(char)
} else {
    decodedWord.push('?')  // 用 ? 表示未识别
}

10.4 未来计划

短期计划(1-3个月)

  • [ ] 音频播放功能

    • 播放摩尔斯电码声音
    • 调整播放速度
    • 支持循环播放
  • [ ] 闪光灯模式

    • 用闪光灯展示摩尔斯电码
    • 调用鸿蒙 Camera API
  • [ ] 振动反馈

    • 鸿蒙振动 API
    • 短振动(点)、长振动(横)

中期计划(3-6个月)

  • [ ] 历史记录

    • 保存转换历史
    • 收藏常用内容
    • 快速重新转换
  • [ ] 学习模式

    • 摩尔斯电码训练
    • 听音识码练习
    • 进度追踪
  • [ ] 更多语言

    • 支持中文电码
    • 支持日文假名

长期计划(6个月以上)

  • [ ] 鸿蒙卡片服务

    • 桌面小组件
    • 快速转换入口
  • [ ] 折叠屏适配

    • 展开时双栏布局
    • 悬停模式优化
  • [ ] 分布式功能

    • 多设备协同
    • 跨设备传输
  • [ ] 社区功能

    • 分享转换结果
    • 摩尔斯电码谜题
    • 用户排行榜

10.5 开发建议

对于想要开发类似项目的朋友,我的建议是:

  1. 选择合适的框架

    • 跨平台需求 → uni-app, React Native
    • 单一平台 → 原生开发
  2. 先实现核心功能

    • MVP(最小可行产品)优先
    • UI 美化可以后续迭代
  3. 重视代码质量

    • 使用 TypeScript 提升可维护性
    • 编写清晰的注释
    • 遵循代码规范
  4. 充分测试

    • 编写测试用例
    • 多平台测试
    • 边界情况测试
  5. 持续优化

    • 收集用户反馈
    • 性能监控
    • 定期更新

10.6 写在最后

这个摩尔斯电码转换器项目虽然功能简单,但涵盖了:

  • ✅ 跨平台开发
  • ✅ 算法实现
  • ✅ UI设计
  • ✅ 鸿蒙适配
  • ✅ 性能优化

希望这篇技术博客能够帮助你:

  • 📚 了解 uni-app 跨平台开发流程
  • 🎯 掌握鸿蒙应用开发方法
  • 💡 学习算法实现思路
  • 🎨 提升 UI 设计能力

如果你有任何问题或建议,欢迎在 GitHub 提 Issue 或 PR!


附录

A. 参考资料

B. 开源协议

本项目采用 MIT 许可证,可自由使用、修改和分发。

C. 联系方式


⭐ 如果这个项目对你有帮助,请给它一个星标!

感谢阅读!祝你编码愉快! 🎉

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
    相关推荐