const { profile, renderCard, saveToAlbum } = require("../../utils/pet-card"); const { toast } = require("../../utils/api"); Component({ properties: { pet: { type: Object, value: {} } }, data: { card: {}, saving: false }, observers: { pet(value) { this.setData({ card: profile(value || {}) }); }, }, methods: { edit() { this.triggerEvent("edit", { id: this.data.pet.id }); }, async generate() { const canvas = await new Promise((resolve, reject) => this.createSelectorQuery() .select("#card-canvas") .fields({ node: true, size: true }) .exec((result) => result[0] && result[0].node ? resolve(result[0].node) : reject(new Error("卡片还未准备好,请重试")), ), ); return renderCard(canvas, this.data.pet); }, async save() { if (this.data.saving) return; this.setData({ saving: true }); try { const path = await this.generate(); if (await saveToAlbum(path)) wx.showToast({ title: "身份卡已保存到相册", icon: "success" }); } catch (error) { toast(error); } finally { this.setData({ saving: false }); } }, }, });