From 37bc7f4fc1a7515d4f2b10bdea9aa5811f48e949 Mon Sep 17 00:00:00 2001 From: junwei Date: Wed, 4 Feb 2026 15:37:22 +0400 Subject: [PATCH 1/4] feat(Signature): add undo functionality --- packages/vant/src/locale/lang/ar-SA.ts | 15 ++++-- packages/vant/src/locale/lang/bg-BG.ts | 1 + packages/vant/src/locale/lang/bn-BD.ts | 1 + packages/vant/src/locale/lang/da-DK.ts | 1 + packages/vant/src/locale/lang/de-DE-formal.ts | 1 + packages/vant/src/locale/lang/de-DE.ts | 1 + packages/vant/src/locale/lang/el-GR.ts | 1 + packages/vant/src/locale/lang/en-US.ts | 1 + packages/vant/src/locale/lang/eo-EO.ts | 1 + packages/vant/src/locale/lang/es-ES.ts | 1 + packages/vant/src/locale/lang/fa-IR.ts | 1 + packages/vant/src/locale/lang/fr-FR.ts | 1 + packages/vant/src/locale/lang/he-IL.ts | 1 + packages/vant/src/locale/lang/hi-IN.ts | 1 + packages/vant/src/locale/lang/id-ID.ts | 1 + packages/vant/src/locale/lang/is-IS.ts | 1 + packages/vant/src/locale/lang/it-IT.ts | 1 + packages/vant/src/locale/lang/ja-JP.ts | 1 + packages/vant/src/locale/lang/kk-KZ.ts | 1 + packages/vant/src/locale/lang/km-KH.ts | 1 + packages/vant/src/locale/lang/ko-KR.ts | 1 + packages/vant/src/locale/lang/la-LA.ts | 1 + packages/vant/src/locale/lang/mm-MN.ts | 1 + packages/vant/src/locale/lang/nb-NO.ts | 1 + packages/vant/src/locale/lang/nl-NL.ts | 1 + packages/vant/src/locale/lang/pl-PL.ts | 1 + packages/vant/src/locale/lang/pt-BR.ts | 1 + packages/vant/src/locale/lang/ro-RO.ts | 1 + packages/vant/src/locale/lang/ru-RU.ts | 1 + packages/vant/src/locale/lang/sr-RS.ts | 1 + packages/vant/src/locale/lang/sv-SE.ts | 1 + packages/vant/src/locale/lang/th-TH.ts | 1 + packages/vant/src/locale/lang/tr-TR.ts | 1 + packages/vant/src/locale/lang/uk-UA.ts | 1 + packages/vant/src/locale/lang/vi-VN.ts | 1 + packages/vant/src/locale/lang/zh-CN.ts | 1 + packages/vant/src/locale/lang/zh-HK.ts | 1 + packages/vant/src/locale/lang/zh-TW.ts | 1 + packages/vant/src/signature/README.md | 2 + packages/vant/src/signature/README.zh-CN.md | 2 + packages/vant/src/signature/Signature.tsx | 34 +++++++++++++ .../test/__snapshots__/demo-ssr.spec.ts.snap | 48 +++++++++++++++++++ .../test/__snapshots__/demo.spec.ts.snap | 40 ++++++++++++++++ .../test/__snapshots__/index.spec.ts.snap | 20 ++++++++ .../test/__snapshots__/ssr.spec.ts.snap | 12 +++++ .../vant/src/signature/test/index.spec.ts | 15 ++++++ packages/vant/src/signature/types.ts | 1 + 47 files changed, 223 insertions(+), 3 deletions(-) diff --git a/packages/vant/src/locale/lang/ar-SA.ts b/packages/vant/src/locale/lang/ar-SA.ts index 8b93c061e7c..9529bb18ad1 100644 --- a/packages/vant/src/locale/lang/ar-SA.ts +++ b/packages/vant/src/locale/lang/ar-SA.ts @@ -3,6 +3,7 @@ export default { tel: 'الهاتف', save: 'حفظ', clear: 'مسح', + undo: 'تراجع', cancel: 'إلغاء', confirm: 'تأكيد', delete: 'حذف', @@ -15,9 +16,17 @@ export default { end: 'نهاية', start: 'بداية', title: 'التقويم', - weekdays: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + weekdays: [ + 'الأحد', + 'الاثنين', + 'الثلاثاء', + 'الأربعاء', + 'الخميس', + 'الجمعة', + 'السبت', + ], monthTitle: (year: number, month: number) => `${year}/${month}`, - rangePrompt: (maxRange: number) => `اختر لا يزيد عن ${maxRange} أيام` + rangePrompt: (maxRange: number) => `اختر لا يزيد عن ${maxRange} أيام`, }, vanCascader: { select: 'اختر', @@ -59,4 +68,4 @@ export default { vanAddressList: { add: 'إضافة عنوان جديد', }, -}; \ No newline at end of file +}; diff --git a/packages/vant/src/locale/lang/bg-BG.ts b/packages/vant/src/locale/lang/bg-BG.ts index 08b3f1b4ad4..b6defcc7674 100644 --- a/packages/vant/src/locale/lang/bg-BG.ts +++ b/packages/vant/src/locale/lang/bg-BG.ts @@ -3,6 +3,7 @@ export default { tel: 'Телефон', save: 'Запазване', clear: 'ясно', + undo: 'Отмени', cancel: 'Отказ', confirm: 'Потвърди', delete: 'Изтриване', diff --git a/packages/vant/src/locale/lang/bn-BD.ts b/packages/vant/src/locale/lang/bn-BD.ts index 39ddbafb1f8..2894c8a188f 100644 --- a/packages/vant/src/locale/lang/bn-BD.ts +++ b/packages/vant/src/locale/lang/bn-BD.ts @@ -3,6 +3,7 @@ export default { tel: 'ফোন', save: 'সংরক্ষণ করুন', clear: 'পরিষ্কার', + undo: 'পূর্বাবস্থা', cancel: 'বাতিল', confirm: 'নিশ্চিত করুন', delete: 'মুছুন', diff --git a/packages/vant/src/locale/lang/da-DK.ts b/packages/vant/src/locale/lang/da-DK.ts index 7cd2549595e..2d72fde735a 100644 --- a/packages/vant/src/locale/lang/da-DK.ts +++ b/packages/vant/src/locale/lang/da-DK.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Gem', clear: 'Klar', + undo: 'Fortryd', cancel: 'Annuller', confirm: 'Bekræft', delete: 'Slet', diff --git a/packages/vant/src/locale/lang/de-DE-formal.ts b/packages/vant/src/locale/lang/de-DE-formal.ts index 28b4431d37a..710727624f0 100644 --- a/packages/vant/src/locale/lang/de-DE-formal.ts +++ b/packages/vant/src/locale/lang/de-DE-formal.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Speichern', clear: 'Klar', + undo: 'Rückgängig', cancel: 'Abbrechen', confirm: 'Bestätigen', delete: 'Löschen', diff --git a/packages/vant/src/locale/lang/de-DE.ts b/packages/vant/src/locale/lang/de-DE.ts index aaea6e3b1fb..32f7465fe1f 100644 --- a/packages/vant/src/locale/lang/de-DE.ts +++ b/packages/vant/src/locale/lang/de-DE.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Speichern', clear: 'Klar', + undo: 'Rückgängig', cancel: 'Abbrechen', confirm: 'Bestätigen', delete: 'Löschen', diff --git a/packages/vant/src/locale/lang/el-GR.ts b/packages/vant/src/locale/lang/el-GR.ts index 7e2512aa979..a7addb1236f 100644 --- a/packages/vant/src/locale/lang/el-GR.ts +++ b/packages/vant/src/locale/lang/el-GR.ts @@ -3,6 +3,7 @@ export default { tel: 'Τηλέφωνο', save: 'Αποθήκευση', clear: 'Σαφή', + undo: 'Αναίρεση', cancel: 'Ακύρωση', confirm: 'Επιβεβαίωση', delete: 'Διαγραφή', diff --git a/packages/vant/src/locale/lang/en-US.ts b/packages/vant/src/locale/lang/en-US.ts index 9f637ee4c77..d32adff8eb6 100644 --- a/packages/vant/src/locale/lang/en-US.ts +++ b/packages/vant/src/locale/lang/en-US.ts @@ -3,6 +3,7 @@ export default { tel: 'Phone', save: 'Save', clear: 'Clear', + undo: 'Undo', cancel: 'Cancel', confirm: 'Confirm', delete: 'Delete', diff --git a/packages/vant/src/locale/lang/eo-EO.ts b/packages/vant/src/locale/lang/eo-EO.ts index bd657e961d5..f56a6ff0cbc 100644 --- a/packages/vant/src/locale/lang/eo-EO.ts +++ b/packages/vant/src/locale/lang/eo-EO.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefonnumero', save: 'Konservi', clear: 'Klara', + undo: 'Malfari', cancel: 'Rezigni', confirm: 'Konfirmi', delete: 'Forigi', diff --git a/packages/vant/src/locale/lang/es-ES.ts b/packages/vant/src/locale/lang/es-ES.ts index e476a7a83aa..c41ed8e97ab 100644 --- a/packages/vant/src/locale/lang/es-ES.ts +++ b/packages/vant/src/locale/lang/es-ES.ts @@ -3,6 +3,7 @@ export default { tel: 'Teléfono', save: 'Guardar', clear: 'Claro', + undo: 'Deshacer', cancel: 'Cancelar', confirm: 'Confirmar', delete: 'Eliminar', diff --git a/packages/vant/src/locale/lang/fa-IR.ts b/packages/vant/src/locale/lang/fa-IR.ts index 017d652c89d..8ad2a7ff35c 100644 --- a/packages/vant/src/locale/lang/fa-IR.ts +++ b/packages/vant/src/locale/lang/fa-IR.ts @@ -3,6 +3,7 @@ export default { tel: 'تلفن', save: 'ذخیره', clear: 'پاک کردن', + undo: 'واگرد', cancel: 'انصراف', confirm: 'تایید', delete: 'حذف', diff --git a/packages/vant/src/locale/lang/fr-FR.ts b/packages/vant/src/locale/lang/fr-FR.ts index f196f48149f..c0edbdca573 100644 --- a/packages/vant/src/locale/lang/fr-FR.ts +++ b/packages/vant/src/locale/lang/fr-FR.ts @@ -3,6 +3,7 @@ export default { tel: 'Telephone', save: 'Sauvegarder', clear: 'Clair', + undo: 'Annuler', cancel: 'Annuler', confirm: 'Confirmer', delete: 'Suprimer', diff --git a/packages/vant/src/locale/lang/he-IL.ts b/packages/vant/src/locale/lang/he-IL.ts index e6412f496a6..5ad8b511eb5 100644 --- a/packages/vant/src/locale/lang/he-IL.ts +++ b/packages/vant/src/locale/lang/he-IL.ts @@ -3,6 +3,7 @@ export default { tel: 'טלפון', save: 'שמור', clear: 'ברור', + undo: 'בטל', cancel: 'ביטול', confirm: 'אישור', delete: 'מחיקה', diff --git a/packages/vant/src/locale/lang/hi-IN.ts b/packages/vant/src/locale/lang/hi-IN.ts index 9d5ffa56a43..5e3afca7155 100644 --- a/packages/vant/src/locale/lang/hi-IN.ts +++ b/packages/vant/src/locale/lang/hi-IN.ts @@ -3,6 +3,7 @@ export default { tel: 'फ़ोन', save: 'सहेजें', clear: 'साफ़', + undo: 'पूर्ववत', cancel: 'रद्द करें', confirm: 'पुष्टि करना', delete: 'हटाएं', diff --git a/packages/vant/src/locale/lang/id-ID.ts b/packages/vant/src/locale/lang/id-ID.ts index a6d17d92b0f..7463d615641 100644 --- a/packages/vant/src/locale/lang/id-ID.ts +++ b/packages/vant/src/locale/lang/id-ID.ts @@ -3,6 +3,7 @@ export default { tel: 'Telepon', save: 'Simpan', clear: 'Jernih', + undo: 'Batalkan', cancel: 'Batal', confirm: 'Konfirmasi', delete: 'Hapus', diff --git a/packages/vant/src/locale/lang/is-IS.ts b/packages/vant/src/locale/lang/is-IS.ts index efefa06aa5d..3f578a0d2a7 100644 --- a/packages/vant/src/locale/lang/is-IS.ts +++ b/packages/vant/src/locale/lang/is-IS.ts @@ -3,6 +3,7 @@ export default { tel: 'Sími', save: 'Vista', clear: 'Hreinsa', + undo: 'Afturkalla', cancel: 'hætta við', confirm: 'Staðfesta', delete: 'Eyða', diff --git a/packages/vant/src/locale/lang/it-IT.ts b/packages/vant/src/locale/lang/it-IT.ts index 37d15e0a604..bea30fef3b8 100644 --- a/packages/vant/src/locale/lang/it-IT.ts +++ b/packages/vant/src/locale/lang/it-IT.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefono', save: 'Salva', clear: 'Chiaro', + undo: 'Annulla', cancel: 'Annulla', confirm: 'Conferma', delete: 'Elimina', diff --git a/packages/vant/src/locale/lang/ja-JP.ts b/packages/vant/src/locale/lang/ja-JP.ts index 8be452a66a2..01e8b655849 100644 --- a/packages/vant/src/locale/lang/ja-JP.ts +++ b/packages/vant/src/locale/lang/ja-JP.ts @@ -3,6 +3,7 @@ export default { tel: '電話番号', save: 'セーブ', clear: 'クリア', + undo: '元に戻す', cancel: 'キャンセル', confirm: '確認', delete: '削除', diff --git a/packages/vant/src/locale/lang/kk-KZ.ts b/packages/vant/src/locale/lang/kk-KZ.ts index ce062756664..2ac5463c98b 100644 --- a/packages/vant/src/locale/lang/kk-KZ.ts +++ b/packages/vant/src/locale/lang/kk-KZ.ts @@ -3,6 +3,7 @@ export default { tel: 'Телефон', save: 'Сақтау', clear: 'Тазарту', + undo: 'Болдырмау', cancel: 'Бастарту', confirm: 'Растау', delete: 'Жою', diff --git a/packages/vant/src/locale/lang/km-KH.ts b/packages/vant/src/locale/lang/km-KH.ts index c4508b8be95..c2969c0deba 100644 --- a/packages/vant/src/locale/lang/km-KH.ts +++ b/packages/vant/src/locale/lang/km-KH.ts @@ -3,6 +3,7 @@ export default { tel: 'ទូរស័ព្ទ', save: 'រក្សាទុក', clear: 'ច្បាស់', + undo: 'មិនធ្វើវិញ', cancel: 'បោះបង់', confirm: 'យល់ព្រម', delete: 'លុប', diff --git a/packages/vant/src/locale/lang/ko-KR.ts b/packages/vant/src/locale/lang/ko-KR.ts index 6134a6af827..ebc118bad59 100644 --- a/packages/vant/src/locale/lang/ko-KR.ts +++ b/packages/vant/src/locale/lang/ko-KR.ts @@ -3,6 +3,7 @@ export default { tel: '핸드폰', save: '구하다', clear: '분명한', + undo: '실행 취소', cancel: '취소', confirm: '확인', delete: '삭제', diff --git a/packages/vant/src/locale/lang/la-LA.ts b/packages/vant/src/locale/lang/la-LA.ts index 0c8db1e9c85..e30d0d80707 100644 --- a/packages/vant/src/locale/lang/la-LA.ts +++ b/packages/vant/src/locale/lang/la-LA.ts @@ -3,6 +3,7 @@ export default { tel: 'ໂທລະສັບ', save: 'ບັນທຶກ', clear: 'ຈະແຈ້ງ', + undo: 'ຍົກເລີກ', cancel: 'ຍົກເລີກ', confirm: 'ຢຶນຢັນ', delete: 'ລືບ', diff --git a/packages/vant/src/locale/lang/mm-MN.ts b/packages/vant/src/locale/lang/mm-MN.ts index ae695b42954..a212826d413 100644 --- a/packages/vant/src/locale/lang/mm-MN.ts +++ b/packages/vant/src/locale/lang/mm-MN.ts @@ -3,6 +3,7 @@ export default { tel: 'Утас', save: 'Хадгалах', clear: 'Тодорхой', + undo: 'Буцаах', cancel: 'Цуцлах', confirm: 'Баталгаажуулах', delete: 'Устгах', diff --git a/packages/vant/src/locale/lang/nb-NO.ts b/packages/vant/src/locale/lang/nb-NO.ts index 6cb2b954e7b..412d24f49cf 100644 --- a/packages/vant/src/locale/lang/nb-NO.ts +++ b/packages/vant/src/locale/lang/nb-NO.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Lagre', clear: 'Klar', + undo: 'Angre', cancel: 'Avbryt', confirm: 'Bekreft', delete: 'Slett', diff --git a/packages/vant/src/locale/lang/nl-NL.ts b/packages/vant/src/locale/lang/nl-NL.ts index 35a06eee921..ed5ba2c9e5c 100644 --- a/packages/vant/src/locale/lang/nl-NL.ts +++ b/packages/vant/src/locale/lang/nl-NL.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefoon', save: 'Opslaan', clear: 'Duidelijk', + undo: 'Ongedaan maken', cancel: 'Annuleren', confirm: 'Bevestigen', delete: 'Verwijderen', diff --git a/packages/vant/src/locale/lang/pl-PL.ts b/packages/vant/src/locale/lang/pl-PL.ts index 770d267264e..a6b3388b65f 100644 --- a/packages/vant/src/locale/lang/pl-PL.ts +++ b/packages/vant/src/locale/lang/pl-PL.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Zapisz', clear: 'Wyczyść', + undo: 'Cofnij', cancel: 'Anuluj', confirm: 'Potwierdź', delete: 'Usuń', diff --git a/packages/vant/src/locale/lang/pt-BR.ts b/packages/vant/src/locale/lang/pt-BR.ts index a702bfbceff..fd388d726fa 100644 --- a/packages/vant/src/locale/lang/pt-BR.ts +++ b/packages/vant/src/locale/lang/pt-BR.ts @@ -3,6 +3,7 @@ export default { tel: 'Fone', save: 'Salvar', clear: 'Claro', + undo: 'Desfazer', cancel: 'Cancelar', confirm: 'Confirmar', delete: 'Excluir', diff --git a/packages/vant/src/locale/lang/ro-RO.ts b/packages/vant/src/locale/lang/ro-RO.ts index d4ff7edb230..75a4981ca0b 100644 --- a/packages/vant/src/locale/lang/ro-RO.ts +++ b/packages/vant/src/locale/lang/ro-RO.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Salvează', clear: 'Clar', + undo: 'Anulează', cancel: 'Anulează', confirm: 'Confirmă', delete: 'Șterge', diff --git a/packages/vant/src/locale/lang/ru-RU.ts b/packages/vant/src/locale/lang/ru-RU.ts index a0f3e7bfe97..edb885aeebe 100644 --- a/packages/vant/src/locale/lang/ru-RU.ts +++ b/packages/vant/src/locale/lang/ru-RU.ts @@ -3,6 +3,7 @@ export default { tel: 'Телефон', save: 'Сохранить', clear: 'Прозрачный', + undo: 'Отменить', cancel: 'Отмена', confirm: 'Подтвердить', delete: 'Удалить', diff --git a/packages/vant/src/locale/lang/sr-RS.ts b/packages/vant/src/locale/lang/sr-RS.ts index 9da11e011b4..c7023a4e8ca 100644 --- a/packages/vant/src/locale/lang/sr-RS.ts +++ b/packages/vant/src/locale/lang/sr-RS.ts @@ -3,6 +3,7 @@ export default { tel: 'Broj telefona', save: 'Sačuvaj', clear: 'Prazno', + undo: 'Поништи', cancel: 'Otkaži', confirm: 'Potvrdi', delete: 'Brisanje', diff --git a/packages/vant/src/locale/lang/sv-SE.ts b/packages/vant/src/locale/lang/sv-SE.ts index 24b1bf535db..89320c47e9b 100644 --- a/packages/vant/src/locale/lang/sv-SE.ts +++ b/packages/vant/src/locale/lang/sv-SE.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Spara', clear: 'Klar', + undo: 'Ångra', cancel: 'Avbryt', confirm: 'Bekräfta', delete: 'Radera', diff --git a/packages/vant/src/locale/lang/th-TH.ts b/packages/vant/src/locale/lang/th-TH.ts index 3c4ad6a89ba..432e1e7fd24 100644 --- a/packages/vant/src/locale/lang/th-TH.ts +++ b/packages/vant/src/locale/lang/th-TH.ts @@ -3,6 +3,7 @@ export default { tel: 'โทรศัพท์', save: 'บันทึก', clear: 'ชัดเจน', + undo: 'เลิกทำ', cancel: 'ยกเลิก', confirm: 'ยืนยัน', delete: 'ลบ', diff --git a/packages/vant/src/locale/lang/tr-TR.ts b/packages/vant/src/locale/lang/tr-TR.ts index 35c146c83b8..0de91211fe1 100644 --- a/packages/vant/src/locale/lang/tr-TR.ts +++ b/packages/vant/src/locale/lang/tr-TR.ts @@ -3,6 +3,7 @@ export default { tel: 'Telefon', save: 'Kaydet', clear: 'Temizlemek', + undo: 'Geri Al', cancel: 'İptal', confirm: 'Onayla', delete: 'Sil', diff --git a/packages/vant/src/locale/lang/uk-UA.ts b/packages/vant/src/locale/lang/uk-UA.ts index caadba7e9af..cafe1e3d394 100644 --- a/packages/vant/src/locale/lang/uk-UA.ts +++ b/packages/vant/src/locale/lang/uk-UA.ts @@ -3,6 +3,7 @@ export default { tel: 'Телефон', save: 'Зберегти', clear: 'ясно', + undo: 'Скасувати', cancel: 'Скасувати', confirm: 'Підтвердити', delete: 'Видалити', diff --git a/packages/vant/src/locale/lang/vi-VN.ts b/packages/vant/src/locale/lang/vi-VN.ts index a793df6e1f5..1e288522b82 100644 --- a/packages/vant/src/locale/lang/vi-VN.ts +++ b/packages/vant/src/locale/lang/vi-VN.ts @@ -3,6 +3,7 @@ export default { tel: 'Điện thoại', save: 'Cứu', clear: 'Thông thoáng', + undo: 'Hoàn tác', cancel: 'Hủy bỏ', confirm: 'Xác nhận', delete: 'Xóa', diff --git a/packages/vant/src/locale/lang/zh-CN.ts b/packages/vant/src/locale/lang/zh-CN.ts index 1eb47140e9a..68a5ab44764 100644 --- a/packages/vant/src/locale/lang/zh-CN.ts +++ b/packages/vant/src/locale/lang/zh-CN.ts @@ -3,6 +3,7 @@ export default { tel: '电话', save: '保存', clear: '清空', + undo: '撤销', cancel: '取消', confirm: '确认', delete: '删除', diff --git a/packages/vant/src/locale/lang/zh-HK.ts b/packages/vant/src/locale/lang/zh-HK.ts index d6132ca0f1a..570017a9bc9 100644 --- a/packages/vant/src/locale/lang/zh-HK.ts +++ b/packages/vant/src/locale/lang/zh-HK.ts @@ -3,6 +3,7 @@ export default { tel: '電話', save: '保存', clear: '清空', + undo: '撤銷', cancel: '取消', confirm: '確認', delete: '刪除', diff --git a/packages/vant/src/locale/lang/zh-TW.ts b/packages/vant/src/locale/lang/zh-TW.ts index 5535b5972ae..cf7e6988d74 100644 --- a/packages/vant/src/locale/lang/zh-TW.ts +++ b/packages/vant/src/locale/lang/zh-TW.ts @@ -3,6 +3,7 @@ export default { tel: '電話', save: '儲存', clear: '清空', + undo: '復原', cancel: '取消', confirm: '確認', delete: '刪除', diff --git a/packages/vant/src/signature/README.md b/packages/vant/src/signature/README.md index 01c28d34254..f4b8bdf379f 100644 --- a/packages/vant/src/signature/README.md +++ b/packages/vant/src/signature/README.md @@ -87,6 +87,7 @@ Use `background-color` prop to set the color of the background. | background-color | Background color | _string_ | - | | tips | Text that appears when Canvas is not supported | _string_ | - | | clear-button-text | Clear button text | _string_ | `Clear` | +| undo-button-text | Undo button text | _string_ | `Undo` | | confirm-button-text | Confirm button text | _string_ | `Confirm` | ### Events @@ -114,6 +115,7 @@ Use [ref](https://vuejs.org/guide/essentials/template-refs.html) to get Signatur | resize `v4.7.3` | Resize Signature when container element resized or visibility changed | - | - | | clear `v4.8.6` | Can be called to clear the signature | - | - | | submit `v4.8.6` | Trigger the `submit` event, which is equivalent to clicking the confirm button. | - | - | +| undo | Undo the last stroke | - | - | ### Types diff --git a/packages/vant/src/signature/README.zh-CN.md b/packages/vant/src/signature/README.zh-CN.md index e76422c9e38..cf449b42b55 100644 --- a/packages/vant/src/signature/README.zh-CN.md +++ b/packages/vant/src/signature/README.zh-CN.md @@ -87,6 +87,7 @@ export default { | background-color | 背景颜色 | _string_ | - | | tips | 当不支持 Canvas 的时候出现的提示文案 | _string_ | - | | clear-button-text | 清除按钮文案 | _string_ | `清空` | +| undo-button-text | 撤销按钮文案 | _string_ | `撤销` | | confirm-button-text | 确认按钮文案 | _string_ | `确认` | ### Events @@ -114,6 +115,7 @@ export default { | resize `v4.7.3` | 外层元素大小或组件显示状态变化时,可以调用此方法来触发重绘 | - | - | | clear `v4.8.6` | 可调用此方法来清除签名 | - | - | | submit `v4.8.6` | 触发 `submit` 事件,与点击确认按钮的效果等价 | - | - | +| undo | 撤销上一次笔画 | - | - | ### 类型定义 diff --git a/packages/vant/src/signature/Signature.tsx b/packages/vant/src/signature/Signature.tsx index 390f66befdc..21b1cb4aa0f 100644 --- a/packages/vant/src/signature/Signature.tsx +++ b/packages/vant/src/signature/Signature.tsx @@ -34,6 +34,7 @@ export const signatureProps = { type: makeStringProp('png'), penColor: makeStringProp('#000'), lineWidth: makeNumberProp(3), + undoButtonText: String, clearButtonText: String, backgroundColor: makeStringProp(''), confirmButtonText: String, @@ -66,6 +67,16 @@ export default defineComponent({ let canvasHeight = 0; let canvasRect: DOMRect; + const history = ref([]); + + const saveState = () => { + if (ctx.value && canvasWidth && canvasHeight) { + history.value.push( + ctx.value.getImageData(0, 0, canvasWidth, canvasHeight), + ); + } + }; + const touchStart = () => { if (!ctx.value) { return false; @@ -100,6 +111,7 @@ export default defineComponent({ const touchEnd = (event: TouchEvent) => { preventDefault(event); + saveState(); emit('end'); }; @@ -152,9 +164,27 @@ export default defineComponent({ ctx.value.closePath(); setCanvasBgColor(ctx.value); } + history.value = []; emit('clear'); }; + const undo = () => { + if (history.value.length) { + history.value.pop(); + if (ctx.value) { + ctx.value.clearRect(0, 0, canvasWidth, canvasHeight); + setCanvasBgColor(ctx.value); + if (history.value.length) { + ctx.value.putImageData( + history.value[history.value.length - 1], + 0, + 0, + ); + } + } + } + }; + const initialize = () => { if (isRenderCanvas && canvasRef.value) { const canvas = canvasRef.value; @@ -183,6 +213,7 @@ export default defineComponent({ resize, clear, submit, + undo, }); return () => ( @@ -205,6 +236,9 @@ export default defineComponent({ + diff --git a/packages/vant/src/signature/test/__snapshots__/demo-ssr.spec.ts.snap b/packages/vant/src/signature/test/__snapshots__/demo-ssr.spec.ts.snap index dd60dc4a2ee..352e79bb62b 100644 --- a/packages/vant/src/signature/test/__snapshots__/demo-ssr.spec.ts.snap +++ b/packages/vant/src/signature/test/__snapshots__/demo-ssr.spec.ts.snap @@ -22,6 +22,18 @@ exports[`should render demo and match snapshot 1`] = ` + + + + + + + + + + + -