鸿蒙标签云展示(动态标签分类与筛选)

举报
鱼弦 发表于 2025/09/16 17:22:40 2025/09/16
【摘要】 1. 引言在移动应用开发中,​​标签云(Tag Cloud)​​ 是一种直观且高效的信息分类与展示方式,广泛应用于内容聚合、商品筛选、兴趣标签等场景。通过动态调整标签的 ​​大小、颜色、字体​​ 等视觉属性,标签云能够突出 ​​高频或重要标签​​,同时支持用户通过 ​​点击筛选​​ 快速定位目标内容(如筛选特定分类的文章、商品或兴趣点)。鸿蒙(HarmonyOS)基于 ​​ArkUI框架​​...


1. 引言

在移动应用开发中,​​标签云(Tag Cloud)​​ 是一种直观且高效的信息分类与展示方式,广泛应用于内容聚合、商品筛选、兴趣标签等场景。通过动态调整标签的 ​​大小、颜色、字体​​ 等视觉属性,标签云能够突出 ​​高频或重要标签​​,同时支持用户通过 ​​点击筛选​​ 快速定位目标内容(如筛选特定分类的文章、商品或兴趣点)。

鸿蒙(HarmonyOS)基于 ​​ArkUI框架​​ 提供了灵活的 ​TextColumnGrid 等基础组件​​,结合 ​​状态管理(@State)​​ 和 ​​事件监听(onClick)​​,开发者可以轻松构建 ​​动态标签云​​,并实现 ​​分类展示、筛选交互、动态数据更新​​ 等核心功能。本文将深入探讨鸿蒙标签云的实现方案,聚焦 ​​动态标签分类、筛选交互、动态数据绑定​​ 等典型场景,通过 ​​详细的代码示例(ArkTS/ArkUI)​​ 展示具体实现,并分析其技术特性与挑战,帮助开发者掌握鸿蒙标签云开发的核心技能。


2. 技术背景

​2.1 标签云的核心概念​

标签云(Tag Cloud)是一组 ​​带有权重(如出现频率、重要性)的标签集合​​,通过 ​​视觉属性(如字体大小、颜色、透明度)​​ 的差异直观反映标签的权重差异。用户可通过 ​​点击标签​​ 实现内容筛选(如仅显示带有该标签的内容),或通过 ​​分类导航​​ 快速定位目标标签组。

在鸿蒙中,标签云的核心技术要点包括:

  • ​动态数据绑定​​:标签数据(如标签名称、权重、分类)通过 @State 或外部数据源(如API)动态管理;
  • ​视觉属性映射​​:根据标签权重(如出现次数)动态计算字体大小(如高频标签字体更大)、颜色(如重要标签高亮);
  • ​交互逻辑​​:通过 onClick 监听标签点击事件,触发筛选逻辑(如更新显示的内容列表);
  • ​布局适配​​:标签云通常采用 ​​网格布局(Grid)或流式布局(Flex)​​,确保标签在不同屏幕尺寸下均匀分布。

​2.2 鸿蒙实现标签云的优势​

  • ​ArkUI组件化​​:通过基础组件(如 TextColumnGrid)灵活组合,快速构建标签云的UI结构;
  • ​状态驱动​​:@State 管理标签的选中状态和筛选条件,实现数据与视图的实时同步;
  • ​事件监听​​:onClick 等事件监听器支持用户交互(如点击筛选),无需复杂的手势处理;
  • ​跨设备适配​​:鸿蒙的响应式布局(如 FlexGrid)自动适配不同屏幕尺寸(手机/平板),确保标签云的展示效果一致。

​2.3 典型应用场景​

  • ​内容平台​​:文章/博客标签云(如“技术”“生活”“旅行”),用户点击标签筛选相关文章;
  • ​电商平台​​:商品分类标签云(如“服装”“数码”“家居”),支持多标签组合筛选;
  • ​兴趣社区​​:用户兴趣标签云(如“摄影”“音乐”“运动”),用于个性化推荐;
  • ​知识管理​​:笔记/文档标签云(如“工作”“学习”“项目”),快速定位目标内容。

3. 应用使用场景

​3.1 典型场景(需标签云的鸿蒙应用)​

场景类型 需求描述 核心目标
文章标签云 博客首页展示热门文章标签(如“鸿蒙开发”“前端技术”),点击标签筛选相关文章 快速定位兴趣内容,提升阅读效率
商品分类筛选 电商商品列表页顶部展示分类标签(如“手机”“电脑”“家电”),支持多标签筛选 精准筛选目标商品,优化购物体验
兴趣标签管理 用户个人中心展示兴趣标签(如“摄影”“音乐”“旅行”),点击标签查看相关动态 个性化内容推荐,增强用户粘性
知识库标签云 笔记应用展示笔记标签(如“工作”“学习”“项目”),点击标签过滤笔记列表 高效检索知识,提升查找速度

4. 不同场景下的详细代码实现

​4.1 环境准备​

  • ​开发工具​​:DevEco Studio(鸿蒙官方IDE,支持ArkTS开发);
  • ​核心技术​​:
    • Text 组件​​:用于展示单个标签;
    • Grid/Flex 布局​​:实现标签的网格或流式排列;
    • ​状态管理(@State)​​:绑定标签的选中状态(如是否被点击筛选)和数据源;
    • ​事件监听(onClick)​​:监听标签点击事件,触发筛选逻辑;
  • ​关键概念​​:
    • ​标签权重​​:通过出现频率、重要性等指标决定标签的视觉属性(如字体大小);
    • ​筛选逻辑​​:根据用户点击的标签,过滤显示的内容(如仅显示带有该标签的文章);
    • ​动态数据​​:标签数据可通过本地静态数组或远程API动态加载。

​4.2 典型场景1:基础标签云(静态数据,点击筛选)​

​4.2.1 场景描述​

一个H5应用首页展示技术相关的标签云(如“鸿蒙开发”“前端技术”“后端架构”“数据库”“UI设计”),标签的字体大小根据“权重”动态调整(如“鸿蒙开发”权重最高,字体最大),用户点击标签后,页面显示“已选择:[标签名]”,并模拟筛选对应内容(如显示该标签相关的文章列表)。

​4.2.2 代码实现(ArkTS)​

// pages/TagCloudBasic.ets
@Entry
@Component
struct TagCloudBasic {
  // 标签数据(名称 + 权重)
  @State tags: { name: string, weight: number }[] = [
    { name: '鸿蒙开发', weight: 5 },
    { name: '前端技术', weight: 4 },
    { name: '后端架构', weight: 3 },
    { name: '数据库', weight: 3 },
    { name: 'UI设计', weight: 2 },
    { name: '算法', weight: 2 },
    { name: '项目管理', weight: 1 }
  ];

  // 当前选中的标签(用于筛选)
  @State selectedTag: string = '未选择';

  // 根据权重计算字体大小(权重越高,字体越大)
  private getFontSize(weight: number): number {
    return 16 + (weight * 2); // 基础16px,每权重+2px(如权重5→26px)
  }

  // 处理标签点击事件
  private onTagClick(tagName: string) {
    this.selectedTag = tagName;
    console.log(`用户点击了标签:${tagName}`); // 实际项目中可触发内容筛选逻辑
  }

  build() {
    Column({ space: 20 }) {
      // 标题
      Text('技术标签云')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .alignSelf(ItemAlign.Start)

      // 当前选中标签显示
      Text(`已选择:${this.selectedTag}`)
        .fontSize(16)
        .fontColor(Color.Blue)
        .alignSelf(ItemAlign.Start)

      // 标签云容器(流式布局,通过Flex实现)
      Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Start }) {
        ForEach(this.tags, (tag: { name: string, weight: number }) => {
          Text(tag.name)
            .fontSize(this.getFontSize(tag.weight)) // 动态字体大小
            .fontColor(this.selectedTag === tag.name ? Color.Red : Color.Black) // 选中标签高亮
            .fontWeight(this.selectedTag === tag.name ? FontWeight.Bold : FontWeight.Normal)
            .padding({ top: 5, bottom: 5, left: 10, right: 10 })
            .backgroundColor(this.selectedTag === tag.name ? '#FFF0F0' : '#F5F5F5') // 选中标签背景色
            .borderRadius(15)
            .onClick(() => this.onTagClick(tag.name)) // 点击事件
        })
      }
      .width('100%')
      .padding(10)
    }
    .width('100%')
    .padding(20)
    .justifyContent(FlexAlign.Start)
  }
}

​4.2.3 代码解析​

  • ​标签数据​​:通过 @State 管理标签数组,每个标签包含 name(名称)和 weight(权重);
  • ​动态字体大小​​:getFontSize(weight) 方法根据权重计算字体大小(如权重5的标签字体为26px,权重1的标签字体为18px);
  • ​选中状态​​:selectedTag 记录用户点击的标签,选中标签通过 ​​红色字体、加粗、浅红色背景​​ 高亮显示;
  • ​交互逻辑​​:点击标签时,更新 selectedTag 并打印日志(实际项目中可触发内容筛选,如请求API获取该标签相关的文章)。

​4.2.4 运行结果​

  • 页面加载时,标签云展示所有技术标签,字体大小根据权重差异显示(如“鸿蒙开发”字体最大,“项目管理”字体最小);
  • 用户点击某个标签(如“前端技术”)后,页面顶部显示“已选择:前端技术”,该标签变为红色高亮;
  • 未点击时,所有标签为黑色普通样式。

​4.3 典型场景2:多分类标签云(动态分组,联动筛选)​

​4.3.1 场景描述​

一个电商应用的商品标签云包含 ​​多级分类​​(如“手机”“电脑”“家电”为一级分类,每个一级分类下包含子标签(如“手机”下有“华为”“苹果”“小米”)),用户可点击一级分类展开/收起子标签,或直接点击子标签筛选商品。要求:一级分类标签字体较大,子标签字体较小,点击子标签后显示“已选择:[一级分类]-[子标签]”。

​4.3.2 代码实现(ArkTS)​

// pages/TagCloudMultiCategory.ets
@Entry
@Component
struct TagCloudMultiCategory {
  // 多级标签数据(一级分类 + 子标签)
  @State categories: { 
    name: string, 
    children: { name: string }[], 
    isExpanded: boolean 
  }[] = [
    { 
      name: '手机', 
      children: [
        { name: '华为' }, { name: '苹果' }, { name: '小米' }, { name: 'OPPO' }
      ], 
      isExpanded: false 
    },
    { 
      name: '电脑', 
      children: [
        { name: '笔记本' }, { name: '台式机' }, { name: '平板电脑' }
      ], 
      isExpanded: false 
    },
    { 
      name: '家电', 
      children: [
        { name: '冰箱' }, { name: '洗衣机' }, { name: '空调' }
      ], 
      isExpanded: false 
    }
  ];

  // 当前选中的标签(一级+子标签)
  @State selectedTag: string = '未选择';

  // 切换一级分类的展开/收起状态
  private toggleCategory(index: number) {
    this.categories[index].isExpanded = !this.categories[index].isExpanded;
  }

  // 处理子标签点击事件
  private onSubTagClick(categoryName: string, subTagName: string) {
    this.selectedTag = `${categoryName}-${subTagName}`;
    console.log(`用户选择了:${this.selectedTag}`); // 实际项目中可触发商品筛选
  }

  build() {
    Column({ space: 20 }) {
      // 标题
      Text('商品分类标签云')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .alignSelf(ItemAlign.Start)

      // 当前选中标签显示
      Text(`已选择:${this.selectedTag}`)
        .fontSize(16)
        .fontColor(Color.Blue)
        .alignSelf(ItemAlign.Start)

      // 多级标签云容器
      ForEach(this.categories, (category: { name: string, children: { name: string }[], isExpanded: boolean }, index: number) => {
        Column({ space: 10 }) {
          // 一级分类标签(大字体,可点击展开/收起)
          Text(category.name)
            .fontSize(18)
            .fontWeight(FontWeight.Medium)
            .padding({ top: 8, bottom: 8, left: 12, right: 12 })
            .backgroundColor('#E0E0E0')
            .borderRadius(8)
            .onClick(() => this.toggleCategory(index)) // 点击切换展开状态

          // 子标签(仅当一级分类展开时显示)
          if (category.isExpanded) {
            Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Start }) {
              ForEach(category.children, (subTag: { name: string }) => {
                Text(subTag.name)
                  .fontSize(14) // 子标签字体较小
                  .fontColor(Color.Black)
                  .padding({ top: 4, bottom: 4, left: 8, right: 8 })
                  .backgroundColor('#F0F0F0')
                  .borderRadius(6)
                  .onClick(() => this.onSubTagClick(category.name, subTag.name)) // 点击子标签
              })
            }
            .width('100%')
            .padding(5)
          }
        }
        .width('100%')
        .alignItems(HorizontalAlign.Start)
      })
    }
    .width('100%')
    .padding(20)
    .justifyContent(FlexAlign.Start)
  }
}

​4.3.3 代码解析​

  • ​多级数据结构​​:通过 categories 数组管理一级分类,每个分类包含 children(子标签数组)和 isExpanded(展开状态);
  • ​动态展开/收起​​:点击一级分类标签时,切换 isExpanded 状态,控制子标签的显示/隐藏;
  • ​层级样式​​:一级分类标签字体较大(18px)、背景色较深(#E0E0E0),子标签字体较小(14px)、背景色较浅(#F0F0F0);
  • ​筛选逻辑​​:点击子标签时,组合一级分类和子标签名称(如“手机-华为”)作为选中结果,实际项目中可据此筛选对应商品。

​4.3.4 运行结果​

  • 页面加载时,一级分类标签(如“手机”“电脑”“家电”)默认显示,子标签隐藏;
  • 用户点击一级分类标签(如“手机”)后,该分类下的子标签(如“华为”“苹果”“小米”)展开显示;
  • 点击子标签(如“华为”)后,页面顶部显示“已选择:手机-华为”。

5. 原理解释

​5.1 标签云的核心工作流程​

  1. ​初始化阶段​​:

    • 开发者通过 @State 管理标签数据(如标签名称、权重、分类)和筛选状态(如选中的标签);
    • 标签的视觉属性(如字体大小、颜色)根据权重或选中状态动态计算(如高频标签字体更大,选中标签高亮)。
  2. ​数据绑定阶段​​:

    • 使用 ForEach 循环遍历标签数据,为每个标签生成对应的 Text 组件;
    • 标签的布局通过 Flex(流式布局)或 Grid(网格布局)实现,确保标签均匀分布。
  3. ​交互阶段​​:

    • 用户点击标签时,触发 onClick 事件,更新 @State 管理的筛选状态(如选中的标签或展开的分类);
    • 筛选状态的变化通过数据绑定自动更新UI(如显示选中的标签文本、高亮选中的标签)。
  4. ​动态更新阶段​​(可选):

    • 若标签数据来自远程API,可在数据加载完成后更新 @State,触发标签云的重新渲染(如新增热门标签)。

​5.2 核心特性总结​

特性 说明 典型应用场景
​动态视觉属性​ 根据标签权重(如出现频率)动态调整字体大小、颜色 突出重要标签,提升信息层次感
​交互筛选​ 用户点击标签触发筛选逻辑(如显示相关内容),支持单选或多选 快速定位目标内容,优化用户体验
​多级分类​ 支持一级/二级标签的分组展示(如商品分类),可展开/收起子标签 复杂信息分类,提升导航效率
​灵活布局​ 通过 FlexGrid 实现标签的流式或网格排列,适配不同屏幕尺寸 跨设备兼容,确保展示效果一致
​状态驱动​ @State 管理标签的选中状态和筛选条件,实现数据与视图的实时同步 动态交互,响应用户操作

6. 原理流程图及原理解释

​6.1 标签云的完整流程图​

sequenceDiagram
    participant 用户 as 用户
    participant 标签云组件 as 鸿蒙标签云(ArkUI)
    participant 数据管理 as @State标签数据与筛选状态
    participant 交互逻辑 as onClick事件监听

    用户->>标签云组件: 打开页面(初始化)
    数据管理->>标签云组件: 加载标签数据(名称、权重、分类)
    标签云组件->>用户: 渲染标签云(动态字体、颜色)
    用户->>标签云组件: 点击标签(如“鸿蒙开发”)
    交互逻辑->>数据管理: 更新选中状态(selectedTag=“鸿蒙开发”)
    数据管理->>标签云组件: 触发UI更新(高亮选中标签)
    标签云组件->>用户: 显示“已选择:鸿蒙开发”
    
    alt 多级分类场景
      用户->>标签云组件: 点击一级分类(如“手机”)
      交互逻辑->>数据管理: 切换展开状态(isExpanded=true)
      数据管理->>标签云组件: 显示子标签(如“华为”“苹果”)
      用户->>标签云组件: 点击子标签(如“华为”)
      交互逻辑->>数据管理: 更新选中状态(selectedTag=“手机-华为”)
    end

​6.2 原理解释​

  • ​初始化​​:标签云组件加载时,通过 @State 绑定标签数据(如静态数组或API返回的数据),并根据权重计算每个标签的视觉属性(如字体大小);
  • ​渲染阶段​​:使用 ForEach 循环生成每个标签的 Text 组件,通过 FlexGrid 布局实现标签的流式或网格排列;
  • ​交互触发​​:用户点击标签时,onClick 事件监听器捕获点击动作,更新 @State 管理的筛选状态(如选中的标签或展开的分类);
  • ​UI同步​​:筛选状态的变化通过数据绑定自动触发组件重新渲染,更新标签的视觉属性(如高亮选中标签)或显示筛选结果(如“已选择:[标签名]”);
  • ​多级联动​​:对于多级分类标签云,点击一级分类时切换子标签的展开状态,点击子标签时组合一级和子标签名称作为筛选结果。

7. 环境准备

​7.1 开发与测试环境​

  • ​开发工具​​:DevEco Studio(版本需支持ArkTS 3.0+);
  • ​运行环境​​:鸿蒙设备(如Mate 40系列)或模拟器(通过DevEco Studio创建);
  • ​资源准备​​:无需额外资源,TextFlexGrid 等为ArkUI内置组件;
  • ​工具推荐​​:
    • ​日志调试​​:通过DevEco Studio的“Log”面板查看 onClick 事件中的选中标签(如 console.log('选中:${tagName}'));
    • ​真机测试​​:在真机上验证触摸交互的流畅性(特别是多级分类的展开/收起操作)。

8. 实际详细应用代码示例(综合案例:文章标签云+商品分类标签云)

​8.1 场景描述​

一个综合应用包含两个标签云模块:

  1. ​文章标签云​​:展示技术文章标签(如“鸿蒙开发”“前端技术”),点击标签筛选相关文章;
  2. ​商品分类标签云​​:展示电商商品分类(如“手机”“电脑”及其子标签),支持多级筛选。

​8.2 代码实现(ArkTS)​

(代码整合基础标签云与多级分类标签云,实现不同业务场景的需求。)


9. 运行结果

​9.1 文章标签云​

  • 标签根据权重显示不同字体大小(如“鸿蒙开发”最大,“项目管理”最小);
  • 点击标签后显示“已选择:[标签名]”,并高亮该标签。

​9.2 商品分类标签云​

  • 一级分类标签(如“手机”)默认显示,子标签(如“华为”“苹果”)默认隐藏;
  • 点击一级分类展开子标签,点击子标签后显示“已选择:[一级分类]-[子标签]”。

10. 测试步骤及详细代码

​10.1 基础功能测试​

  1. ​标签渲染测试​​:确认标签云正确显示所有标签,字体大小符合权重差异;
  2. ​点击筛选测试​​:点击标签后,确认“已选择”文本更新,且选中标签高亮;
  3. ​多级分类测试​​:点击一级分类,确认子标签展开/收起,点击子标签后确认组合标签正确显示。

​10.2 边界测试​

  1. ​空标签测试​​:若标签数据为空,确认页面显示友好提示(如“暂无标签”);
  2. ​极端权重测试​​:设置极低或极高权重,确认字体大小在合理范围内(如不小于12px,不大于30px)。

11. 部署场景

​11.1 生产环境部署​

  • ​动态数据加载​​:标签数据通过API从服务器获取(如热门文章标签、商品分类),并实时更新 @State
  • ​筛选逻辑扩展​​:点击标签后,实际请求后端接口获取筛选后的内容(如该标签相关的文章列表);
  • ​性能优化​​:对高频访问的标签云数据进行缓存(如本地存储热门标签),减少API请求。

​11.2 适用场景​

  • ​内容平台​​:文章、博客、视频的标签分类与筛选;
  • ​电商平台​​:商品的多级分类(如品类→品牌→型号)与精准筛选;
  • ​兴趣社区​​:用户兴趣标签的管理与个性化内容推荐;
  • ​知识管理​​:笔记、文档的标签分类与快速检索。

12. 疑难解答

​12.1 问题1:标签字体大小未动态调整​

  • ​可能原因​​:getFontSize(weight) 方法未正确计算,或权重值未传递到组件;
  • ​解决方案​​:检查权重数据是否有效(如 weight 为数字且大于0),确认 fontSize 绑定的是计算后的值。

​12.2 问题2:多级分类的子标签未展开​

  • ​可能原因​​:isExpanded 状态未正确切换,或 ForEach 循环未正确渲染子标签;
  • ​解决方案​​:确保点击一级分类时调用 toggleCategory(index) 更新 isExpanded,检查子标签的 Flex 布局是否包裹在条件渲染(if (category.isExpanded))中。

​12.3 问题3:点击标签无响应​

  • ​可能原因​​:onClick 事件监听器未正确绑定,或事件处理函数未更新 @State
  • ​解决方案​​:确认 Text 组件的 onClick 属性绑定了正确的函数(如 () => this.onTagClick(tag.name)),并检查函数内部是否更新了 selectedTag 等状态。

13. 未来展望

​13.1 技术趋势​

  • ​智能权重计算​​:通过机器学习分析用户行为(如点击频率),自动调整标签的权重和视觉属性;
  • ​动画增强​​:标签点击时添加缩放或颜色渐变动画,提升交互体验;
  • ​跨组件联动​​:标签云与内容列表(如文章列表、商品列表)实时联动,筛选结果即时更新;
  • ​3D标签云​​:通过鸿蒙的3D渲染能力,实现立体标签云效果(如标签悬浮在空间中)。

​13.2 挑战​

  • ​性能优化​​:大量标签(如100+)的渲染性能(需优化布局计算和重绘);
  • ​动态数据同步​​:标签数据来自多个接口时,如何保证数据一致性(如文章标签与商品标签的关联);
  • ​无障碍适配​​:为视障用户提供语音标签描述(如“当前选中:鸿蒙开发,权重5”)。

​14. 总结​

鸿蒙的标签云组件(基于ArkUI框架)为开发者提供了 ​​灵活、直观的信息分类与筛选解决方案​​,通过 ​​动态视觉属性(字体大小/颜色)、交互筛选(点击选择)、多级分类(分组展示)​​ 等核心特性,能够快速构建用户友好的标签云界面。本文通过 ​​技术背景、应用场景(文章/商品)、代码示例(基础/多级)、原理解释(流程图)、环境准备及疑难解答​​ 的全面解析,揭示了:

  • ​核心原理​​:标签云通过数据绑定和状态管理实现动态渲染与交互,视觉属性映射标签权重,点击事件触发筛选逻辑;
  • ​最佳实践​​:合理设计标签数据结构(如权重、分类),利用 FlexGrid 布局优化展示效果,通过 @State 管理筛选状态;
  • ​技术扩展​​:通过智能权重计算、动画增强和跨组件联动,打造更智能的标签云体验;
  • ​未来方向​​:关注3D效果和无障碍适配,适应更复杂的用户需求。

掌握鸿蒙标签云的开发技能,开发者能够构建更高效、更直观的内容分类与筛选功能,为用户提供流畅的交互体验。随着鸿蒙生态的成熟,标签云组件将进一步丰富,成为移动应用中不可或缺的信息组织工具。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。