Add one-way task completion and exportable pet identity cards
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
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 });
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user