更新记录

0.1.0(2026-07-24)

  • 首个付费 UTS API MVP。
  • 支持字符串快照脏状态判断、保存基线重置、返回确认、并发去重和确认后单次放行。

平台兼容性

uni-app x(5.15)

Chrome Safari Android iOS 鸿蒙 微信小程序
150 - - - - -

Dirty Guard 表单未保存离开提醒

面向 uni-app x 的 UTS API 插件。业务页面只需提供“已保存快照”和“当前快照”,插件负责脏状态判断、返回确认、并发确认去重和确认后的单次放行。

  • 不联网;
  • 不采集或持久化数据;
  • 不修改业务表单;
  • 无第三方依赖;
  • 确认框文案可配置;
  • 并发返回只弹一次确认;
  • 确认后只放行下一次返回,避免重复弹窗。

使用示例

import {
  dirtyGuardIsDirty,
  dirtyGuardMarkSaved,
  requestDirtyLeave,
  disposeDirtyGuard
} from '@/uni_modules/param-dirtyguard'

const guardKey = 'profile-edit'

export default {
  data() {
    return {
      savedSnapshot: '',
      currentSnapshot: '',
      dirty: false
    }
  },
  onBackPress() {
    return requestDirtyLeave({
      key: guardKey,
      savedSnapshot: this.savedSnapshot,
      currentSnapshot: this.currentSnapshot,
      title: '离开页面',
      content: '当前内容尚未保存,确定离开吗?',
      confirmText: '离开',
      cancelText: '继续编辑',
      onConfirmed: () => uni.navigateBack(),
      onCancelled: () => {}
    })
  },
  onUnload() {
    disposeDirtyGuard(guardKey)
  },
  methods: {
    onInput(value) {
      this.currentSnapshot = value
      this.dirty = dirtyGuardIsDirty(this.savedSnapshot, this.currentSnapshot)
    },
    saveSucceeded() {
      this.savedSnapshot = dirtyGuardMarkSaved(this.currentSnapshot)
      this.dirty = false
    }
  }
}

复杂表单可在业务层生成稳定 JSON 字符串或版本号作为快照。插件刻意不读取业务对象,避免隐式序列化、隐私采集和跨端类型歧义。

支持边界

首版只承诺显式字符串快照、onBackPress 集成和 uni.showModal 确认流程。不承诺微信小程序返回拦截、iOS 侧滑返回、浏览器关闭拦截、自动保存、云同步或表单校验。

插件 ID 为 param-dirtyguard。其中 param 是作者自主选定的英文作者前缀,符合 DCloud“作者 ID 由插件作者自定义”的命名规则和最长20字符限制;最终提交时仍以插件市场的唯一性校验结果为准。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、存储或发送任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。