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: { async more() { if (this.data.saving) return; try { const result = await wx.showActionSheet({ itemList: ["编辑档案", "保存身份卡到相册"], itemColor: "#795a4b", }); if (result.tapIndex === 0) this.edit(); else if (result.tapIndex === 1) await this.save(); } catch (error) { if (!/cancel/.test(error.errMsg || "")) toast(error); } }, 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 }); } }, }, });