【HarmonyOS NEXT】实战——登录页面

【HarmonyOS NEXT】实战——登录页面

在本文中,我们将深入探讨如何使用HarmonyOS NEXT来实现一个功能完备的登录页面。通过这个实战案例,你将结合页面布局、数据本地化存储、网络请求等多方面了解到HarmonyOS NEXT在构建现代应用时的强大能力和灵活性。
在这里插入图片描述

目录

  • 【HarmonyOS NEXT】实战——登录页面
      • 1. 整体结构
      • 2. 状态变量
      • 3. 方法
      • 4. 代码解析
        • 4.1 `aboutToAppear` 方法
        • 4.2 `build` 方法
          • 4.2.1 总体结构
          • 4.2.2 根部局
          • 4.2.3 顶部的欢迎文字
          • 4.2.4 用户名和密码输入框
          • 4.2.5 记住密码与忘记密码行
          • 4.2.6 登录按钮
          • 4.2.7 底部图片
          • 4.2.8 加载进度条(可选)
        • 4.3 `handleLogin` 方法
        • 4.4 `handleForgotPassword` 方法
      • 5. 关键函数
      • 7. 页面效果
      • 6. 总结

1. 整体结构

定义了一个 LoginPage 组件,该组件使用了 @Entry@Component 装饰器来标记它是一个入口组件和可复用的 UI 组件。LoginPage 组件包含了一些状态变量(@State)和方法(buildhandleLoginhandleForgotPassword)。

2. 状态变量

  • account: 用户名输入框的值,默认为空字符串。
  • password: 密码输入框的值,默认为空字符串。
  • text: 顶部的欢迎文字,默认为空字符串。
  • loading: 是否正在加载,默认为 false
  • rememberPassword: 是否记住密码,默认为 false
  • stopLogin: 是否停止自动登录,默认为 false

3. 方法

  • aboutToAppear: 组件即将显示时的生命周期方法,用于初始化状态变量。
  • build: 组件的构建方法,定义了页面的布局和组件。
  • handleLogin: 处理登录逻辑的方法。
  • handleForgotPassword: 处理忘记密码逻辑的方法。

4. 代码解析

4.1 aboutToAppear 方法
async aboutToAppear() {const params = router.getParams() as JumpParams;this.stopLogin = params.stopLogin || false;this.rememberPassword = await PreferencesUtils.get('rememberPassword') as boolean;if (this.rememberPassword) {this.account = await PreferencesUtils.get("account") as string;this.password = await PreferencesUtils.get("password") as string;}if (this.account && this.password && !this.stopLogin) {this.handleLogin();}
}
  • router.getParams(): 获取路由传递的参数,类型为 JumpParams。这里主要是为了通过路由获取参数,来判断是否进行自动登录操作。默认用户正常进入登陆页的时候需要自动登录,但是如果是点击了退出登录来到了登陆页则不进行自动登录。或许还有更多的特殊情况,这一点可以通过路由传参实现。
  • PreferencesUtils.get: 从本地存储中获取数据,这里主要是获取用户是否记住密码的状态,还有记录下的账户与密码。
  • 条件判断:
    • 如果用户选择了记住密码,从本地存储中读取用户名和密码。
    • 如果用户名和密码都已存在且 路由参数stopLoginfalse,自动调用 handleLogin 方法进行登录。
4.2 build 方法
build() {Stack() {Column() {// 顶部的欢迎文字Text(this.text)Column() {RelativeContainer() {Text('您好!').fontSize(24).fontWeight(FontWeight.Bold).fontColor(Color.Red).alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },center: { anchor: '__container__', align: VerticalAlign.Center }}).width('100%');Text('欢迎使用xx系统!').fontSize(22).fontColor(Color.Black).alignRules({bottom: { anchor: '__container__', align: VerticalAlign.Bottom },center: { anchor: '__container__', align: VerticalAlign.Center }}).width('100%').margin({ top: 80 });}.height('30%').width('100%').padding({ left: 32, right: 32 }).backgroundColor(Color.White);// 用户名和密码输入框Column() {// 用户名输入框Column() {TextInput({ placeholder: '请输入用户名', text: this.account }).onChange((value: string) => {this.account = value;}).fontSize(18).fontColor(Color.Black).width('100%').height(50).padding({ left: 10, right: 10 });Divider().height(1).color('#194487fe'); // 下划线}// 密码输入框Column() {TextInput({ placeholder: '请输入密码', text: this.password }).onChange((value: string) => {this.password = value;}).fontSize(18).fontColor(Color.Black).width('100%').height(50).padding({ left: 10, right: 10 }).type(InputType.Password);Divider().height(1).color('#194487fe'); // 下划线}.margin({ top: 32 });}.width('100%').padding({ left: 32, right: 32 }).backgroundColor(Color.White);// 记住密码与忘记密码行Row() {Row() {// 根据用户是否选择记住密码,显示不同的图标Image($r(this.rememberPassword ? 'app.media.radio_normal_checkmark' : 'app.media.radio_normal')).width(20).height(20).onClick(async () => {// 切换记住密码的状态this.rememberPassword = !this.rememberPassword;await PreferencesUtils.put("rememberPassword", this.rememberPassword);});Text('记住密码').fontSize(14).fontColor(Color.Red).margin({ left: 10.5 }).onClick(async () => {// 也可以点击文字时切换记住密码的状态this.rememberPassword = !this.rememberPassword;await PreferencesUtils.put("rememberPassword", this.rememberPassword);if (!this.rememberPassword) {await PreferencesUtils.put("account", '');await PreferencesUtils.put("password", '');}});}Text('忘记密码').fontSize(14).fontColor(Color.Gray).onClick(() => {// 实现忘记密码功能,跳转或弹出窗口this.handleForgotPassword();});}.justifyContent(FlexAlign.SpaceBetween).margin({ top: 21 }).padding({ left: 32, right: 32 }).width('100%');// 登录按钮Button('登 录').width('60%').height(50).backgroundColor(Color.Red).fontSize(18).fontColor(Color.White).onClick(() => {// 处理登录逻辑,并且在用户选择记住密码时保存密码this.handleLogin();}).margin({ top: 56 });// 底部图片Image($r('app.media.login_bottom')).width('100%');}.height('100%').width('100%').backgroundColor(Color.White).justifyContent(FlexAlign.SpaceBetween);if (this.loading) {LoadingProgress().height(180).color('#cd0401');}}}
}
  • Stack: 容器组件,用于堆叠其他组件。
  • Column: 垂直布局组件。
  • Text: 文本组件,用于显示文本内容。
  • RelativeContainer: 相对布局容器,用于精确控制子组件的位置。
  • TextInput: 输入框组件,用于输入用户名和密码。
    • onChange: 当输入框内容发生变化时的回调函数。
    • type(InputType.Password): 设置输入框为密码输入类型。
  • Divider: 分割线组件,用于在输入框下方添加下划线。
  • Row: 水平布局组件。
  • Image: 图像组件,用于显示记住密码的图标。
    • onClick: 点击图标时切换记住密码的状态,并保存到本地存储。
  • Button: 按钮组件,用于触发登录操作。
  • LoadingProgress: 加载进度组件,当 loadingtrue 时显示。
4.2.1 总体结构

这段代码定义了一个 build 方法,用于构建一个登录界面。界面包含以下几个主要部分:

  1. 顶部的欢迎文字
  2. 用户名和密码输入框
  3. 记住密码和忘记密码选项
  4. 登录按钮
  5. 底部图片
  6. 加载进度条(可选)

代码定义了一个登录界面,包含欢迎文字、用户名和密码输入框、记住密码和忘记密码选项、登录按钮和底部图片。通过使用 StackColumnRow 布局组件,以及 TextTextInputImageButton 等 UI 组件,构建了一个功能完整的登录页面。加载进度条部分是可选的,用于在登录过程中显示加载状态。

4.2.2 根部局
build() {Stack() {// 页面内容}
}
  • Stack 是 HarmonyOS 中的一种布局组件,它可以将子组件叠放在一起。
  • Stack 作为根布局,包含整个页面的所有内容。
4.2.3 顶部的欢迎文字
Column() {// 顶部的欢迎文字Text(this.text)Column() {RelativeContainer() {Text('您好!').fontSize(24).fontWeight(FontWeight.Bold).fontColor(Color.Red).alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },center: { anchor: '__container__', align: VerticalAlign.Center }}).width('100%');Text('欢迎使用xx系统!').fontSize(22).fontColor(Color.Black).alignRules({bottom: { anchor: '__container__', align: VerticalAlign.Bottom },center: { anchor: '__container__', align: VerticalAlign.Center }}).width('100%').margin({ top: 80 });}.height('30%').width('100%').padding({ left: 32, right: 32 }).backgroundColor(Color.White);}
}
  • Column 是一个垂直布局组件,用于将子组件垂直排列。
  • Text(this.text) 显示一个变量 this.text,可能是动态的欢迎文字。
  • 内部的 Column 包含一个 RelativeContainer,用于更灵活地对齐子组件。
  • RelativeContainer 是一个相对布局组件,可以使用 alignRules 来指定子组件的对齐方式。
    • Text('您好!') 设置了字体大小、加粗、字体颜色和对齐方式。
    • Text('欢迎使用xx系统!') 设置了字体大小、字体颜色和对齐方式,并且设置了上边距。
  • RelativeContainer 设置了高度、宽度、内边距和背景颜色。
4.2.4 用户名和密码输入框
Column() {// 用户名输入框Column() {TextInput({ placeholder: '请输入用户名', text: this.account }).onChange((value: string) => {this.account = value;}).fontSize(18).fontColor(Color.Black).width('100%').height(50).padding({ left: 10, right: 10 });Divider().height(1).color('#194487fe'); // 下划线}// 密码输入框Column() {TextInput({ placeholder: '请输入密码', text: this.password }).onChange((value: string) => {this.password = value;}).fontSize(18).fontColor(Color.Black).width('100%').height(50).padding({ left: 10, right: 10 }).type(InputType.Password);Divider().height(1).color('#194487fe'); // 下划线}.margin({ top: 32 });
}
.width('100%')
.padding({ left: 32, right: 32 })
.backgroundColor(Color.White);
  • 外部的 Column 包含用户名和密码输入框。
  • 内部的 Column 用于单独包装用户名输入框和密码输入框,以便更好地控制样式。
    • TextInput 是一个输入框组件,用于用户输入文本。
    • placeholder 是输入框的占位符文本。
    • text 是输入框当前显示的文本,绑定到 this.accountthis.password
    • onChange 是输入框的值改变时的回调函数,用于更新 this.accountthis.password
    • fontSizefontColorwidthheightpadding 设置了输入框的样式。
    • type(InputType.Password) 将输入框类型设置为密码输入框。
  • Divider 是一个分隔线组件,用于在输入框下方添加一条线,模拟下划线效果。
4.2.5 记住密码与忘记密码行
Row() {Row() {// 根据用户是否选择记住密码,显示不同的图标Image($r(this.rememberPassword ? 'app.media.radio_normal_checkmark' : 'app.media.radio_normal')).width(20).height(20).onClick(async () => {// 切换记住密码的状态this.rememberPassword = !this.rememberPassword;await PreferencesUtils.put("rememberPassword", this.rememberPassword);});Text('记住密码').fontSize(14).fontColor(Color.Red).margin({ left: 10.5 }).onClick(async () => {// 也可以点击文字时切换记住密码的状态this.rememberPassword = !this.rememberPassword;await PreferencesUtils.put("rememberPassword", this.rememberPassword);if (!this.rememberPassword) {await PreferencesUtils.put("account", '');await PreferencesUtils.put("password", '');}});}Text('忘记密码').fontSize(14).fontColor(Color.Gray).onClick(() => {// 实现忘记密码功能,跳转或弹出窗口this.handleForgotPassword();});
}
.justifyContent(FlexAlign.SpaceBetween)
.margin({ top: 21 })
.padding({ left: 32, right: 32 })
.width('100%');
  • Row 是一个水平布局组件,用于将子组件水平排列。
  • 内部的 Row 包含记住密码的图标和文本。
    • Image 是一个图像组件,根据 this.rememberPassword 的值显示不同的图标。
    • onClick 是点击事件的回调函数,用于切换记住密码的状态并保存到偏好设置中。
    • Text('记住密码') 显示记住密码的文本,设置了字体大小、颜色和左边距,并绑定了点击事件。
  • 外部的 Row 包含忘记密码的文本,设置了字体大小、颜色,并绑定了点击事件。
  • justifyContent(FlexAlign.SpaceBetween) 使子组件在水平方向上均匀分布。
  • marginpadding 设置了外边距和内边距。
  • width 设置了组件的宽度。
4.2.6 登录按钮
Button('登 录').width('60%').height(50).backgroundColor(Color.Red).fontSize(18).fontColor(Color.White).onClick(() => {// 处理登录逻辑,并且在用户选择记住密码时保存密码this.handleLogin();}).margin({ top: 56 });
  • Button 是一个按钮组件,用于触发登录操作。
  • widthheight 设置了按钮的宽度和高度。
  • backgroundColorfontColor 设置了按钮的背景颜色和字体颜色。
  • onClick 是按钮的点击事件回调函数,用于处理登录逻辑。
  • margin 设置了按钮的上边距。
4.2.7 底部图片
Image($r('app.media.login_bottom')).width('100%');
  • Image 是一个图像组件,用于显示底部图片。
  • width 设置了图片的宽度。
  • $r 是资源引用函数,用于引用应用中的资源。
4.2.8 加载进度条(可选)
if (this.loading) {LoadingProgress().height(180).color('#cd0401');
}
  • LoadingProgress 是一个加载进度条组件,用于显示加载状态。
  • heightcolor 设置了进度条的高度和颜色。
  • if (this.loading) 控制加载进度条的显示,只有当 this.loadingtrue 时才会显示加载进度条。
4.3 handleLogin 方法
async handleLogin() {if (this.rememberPassword) {// 如果用户选择了记住密码,保存账户和密码到本地存储await PreferencesUtils.put("account", this.account);await PreferencesUtils.put("password", this.password);}// 执行登录逻辑this.loading = true;Login<LoginResponse>({username: this.account,password: this.password,uuid: '',code: '',}).then(async (res) => {if (res.code !== 0) {promptAction.showToast({message: res.msg,duration: 1000,});this.loading = false;} else {// 保存用户数据和 tokenawait PreferencesUtils.put("userData", res.data);await PreferencesUtils.put("token", res.data.token);// 获取权限const permission = await GetPermission<PermissionResponse>();await PreferencesUtils.put("permission", permission);await PreferencesUtils.put("SystemUser_Permission", permission.data.dataPermission);// 获取菜单权限const menuRes = await GetMenu<PermissionResponse>();await PreferencesUtils.put("User_Manage", menuRes.data || []);// 跳转到主页router.replaceUrl({ url: 'pages/MainPage' }).then(() => {console.info('Succeeded in jumping to the pages/MainPage.');}).catch((err: BusinessError) => {console.error(`Failed to jump to the second page. Code is ${err.code}, message is ${err.message}`);});this.loading = false;}}).catch((err: string) => {promptAction.showToast({message: err,duration: 1000,});this.loading = false;console.error(`Failed to login, message is ${err}`);});
}
  • 保存用户名和密码:
    • 如果用户选择了记住密码,使用 PreferencesUtils.put 方法将用户名和密码保存到本地存储。
  • 执行登录逻辑:
    • 设置 loadingtrue,显示加载进度。
    • 调用 Login API 进行登录,传入用户名、密码、UUID 和验证码。
    • 成功回调:
      • 如果 res.code 不为 0,显示错误提示。
      • 如果 res.code0,保存用户数据和 token 到本地存储。
      • 调用 GetPermission API 获取权限,并保存到本地存储。
      • 调用 GetMenu API 获取菜单权限,并保存到本地存储。
      • 使用 router.replaceUrl 方法跳转到主页,并处理跳转成功和失败的情况。
    • 失败回调:
      • 显示错误提示,并设置 loadingfalse
4.4 handleForgotPassword 方法
handleForgotPassword() {// 前往忘记密码页面router.pushUrl({ url: 'pages/Forgot' });
}
  • 跳转到忘记密码页面:
    • 使用 router.pushUrl 方法跳转到忘记密码页面。

5. 关键函数

  • PreferencesUtils.getPreferencesUtils.put: 用于从本地存储中读取和保存数据。
  • router.getParams: 用于获取路由传递的参数。
  • router.replaceUrlrouter.pushUrl: 用于在页面之间进行跳转。
  • promptAction.showToast: 用于显示短暂的提示信息。

7. 页面效果

进入页面:
在这里插入图片描述
登录接口请求中:
在这里插入图片描述

6. 总结

这段代码实现了一个完整的登录页面,包括用户名和密码的输入、记住密码功能、忘记密码功能以及登录逻辑。它使用了 HarmonyOS NEXT 的组件和 API,通过状态变量管理页面的状态,通过异步方法处理登录、权限获取和页面跳转等操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15947.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

iscc2023

iscc 还没想好名字的塔防游戏 就是那句话首字母&#xff0c;加上玩游戏通关后有提示就是后面的字母 Flask中的pin值计算 先f12&#xff0c;看到base64到路由/getusername 输入app.py&#xff0c;得到路由/crawler 进入后发现是一个计算&#xff0c;写一个python脚本 impor…

力扣-Mysql-3328-查找每个州的城市 II(中等)

一、题目来源 3328. 查找每个州的城市 II - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表&#xff1a;cities ---------------------- | Column Name | Type | ---------------------- | state | varchar | | city | varchar | ----------------…

Vue2:组件

Vue2&#xff1a;组件 非单文件组件定义注册使用 单文件组件 组件是Vue中最核心的内容&#xff0c;在编写页面时&#xff0c;将整个页面视为一个个组件&#xff0c;再把组件拼接起来&#xff0c;这样每个组件之间相互独立&#xff0c;有自己的结构样式&#xff0c;使页面编写思…

力扣 LeetCode 28. 找出字符串中第一个匹配项的下标(Day4:字符串)

解题思路&#xff1a; KMP算法 需要先求得最长相等前后缀&#xff0c;并记录在next数组中&#xff0c;也就是前缀表&#xff0c;前缀表是用来回退的&#xff0c;它记录了模式串与主串(文本串)不匹配的时候&#xff0c;模式串应该从哪里开始重新匹配。 next[ j - 1 ] 记录了 …

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成&#xff0c;这些主机又称为端系统&#xff08;end system&#xff09;。端系统可以是各种类型的计算机设备&#xff0c;如个人电脑、智能手机、网络摄像头等&#xff0c;也可以是大型计算机或服务器。端系…

智慧军营安防方案

1. 引言 智慧安防方案集成高清视频监控、智能分析与大数据管理&#xff0c;打造全方位安全防护体系。通过先进技术&#xff0c;提升预警与应急响应能力&#xff0c;确保安全无死角。 2. 视频监控技术 采用高清摄像设备与智能识别算法&#xff0c;实现全景监控与细节跟踪&#…

ABAP开发学习——ST05 ABAP SQL跟踪工具

操作步骤 第一步使用ST05之前&#xff0c;将要查的程序停留想要看的操作的前一步&#xff0c;这里想看到取数操作&#xff0c;所以停留在选择界面 第二步进入ST05 选择SQL Trace 然后激活 第三步去执行程序 第四步ST05取消激活 第五步查看操作 选完时间直接执行

AtCoder ABC378 A-D题解

比赛链接:ABC378 比较简单的一次 ABC。 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){cin>>A[1]>>A[2]>>A[3]>>A[4];sort(A1,A5);if(A[1]A[2] && A[3]A[4])cout<<2<<endl;else{if(A[1]A[2]…

Windows上安装专业版IDEA2024并激活

1、IDEA官方下载 搜索IDEA官网点击进入&#xff0c;点击Download&#xff08;目前这个激活脚本只能激活2024.1.7&#xff0c;2024.2.x的版本都不能激活&#xff0c;2024.1.7版本已上传资源&#xff09;&#xff0c;如图&#xff1a; 2、开始安装 1&#xff09;、双击下载的.…

表达式求值问题(中缀转后缀,对后缀求值)详解

目录 实验题目 理解中缀和后缀表达式 问题分析 1转化为中缀表达式 2计算后缀表达式 完整代码 运行结果 实验题目 实验题目&#xff1a;表达式求值问题。这里限定的表达式求值问题是&#xff1a; 用户输入一个包含“”、“-”、“*”、“/”、正整数和圆括号的合法数学表…

AD22怎么按照板子形状铺铜

如何按照板子形状来铺铜&#xff1f; 选择铺铜管理器 选择板外形 我这里图里VCC没画就选择VCC&#xff0c; 你选什么层&#xff0c;就勾什么层 死铜移除勾选 效果如下&#xff1a;

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

研发费用资本化的意义

1.更真实地反映企业价值&#xff1a;研发费用是企业为创造未来经济利益而进行的投资&#xff0c;通过将其资本化并作为无形资产计入资产负债表&#xff0c;可以更真实地反映企业的资产总额和长期投资价值。这有助于投资者、债权人和其他利益相关者更准确地评估企业的财务状况、…

Ubuntu24.04安装Anaconda3+Pycharm

一、引言 重装系统已经过去一段时间了&#xff0c;现在安装一下 Anaconda 和 Pycharm。 参考连接&#xff1a; Ubuntu中安装Anaconda3和Pycharm 及其环境搭建Ubuntu18.04安装Pycharm教程ubuntu系统安装Anaconda及Pycharm在移动硬盘上搭建Ubuntu24.04深度学习环境&#xff08;…

稀疏矩阵(Sparse Matrix)及其存储格式详解

稀疏矩阵&#xff08;Sparse Matrix&#xff09;是线性代数和计算机科学中的一个重要概念&#xff0c;广泛应用于科学计算、工程模拟、图像处理、机器学习等多个领域。与稠密矩阵&#xff08;Dense Matrix&#xff09;相比&#xff0c;稀疏矩阵大部分元素为零&#xff0c;仅有少…

操作系统:页表中的页表项

操作系统&#xff1a;页表中的页表项 页表是操作系统用于跟踪进程使用的虚拟地址与系统内存中相应物理地址之间映射的数据结构。 页表项&#xff08;Page Table Entry&#xff0c;PTE&#xff09;是页表中的一个条目&#xff0c;用于存储有关特定内存页的信息。每个页表项包含…

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot

1&#xff0c;创建证书和密钥 需要openssl环境&#xff0c;如果是Window下&#xff0c;下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境&#xff0c;此环境是在jdk环境下 本案例所使用的账号密码均为&#xff1a; ka…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于改进容积卡尔曼滤波的含光伏配电网动态状态估计》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

jenkins使用cli发行uni-app到h5

官网文档HBuilderX 文档 首先确定是否存在环境变量 正常情况cmd中执行cli 如果提示 cli 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。请先配置环境变量 Freestyle Project项目在Build Steps中增加Execute Windows batch command命令如下 d: cd D:\devsof…

FMEA 在新兴技术领域(如量子计算、人工智能芯片等)的应用挑战与机遇

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。】 摘要&#xff1a; 本文深入探讨了 FMEA&#xff08;失效模式及后果分析&#xff09;在如量子计算、人工智能芯片等新兴技术领域的应用所面临的挑战与机遇。随着科技的飞速进步&#xff0c;新兴技…