diff --git a/pets-fe/pages/idcard/idcard.js b/pets-fe/pages/idcard/idcard.js
index 6eff9ac..43444bf 100644
--- a/pets-fe/pages/idcard/idcard.js
+++ b/pets-fe/pages/idcard/idcard.js
@@ -27,6 +27,8 @@ Page({
saving: false,
needPhone: false, // 没手机号:门槛,先验证才生成
phoneRefused: false, // 用户拒绝了授权
+ manualMode: false, // 手动填手机号(getPhoneNumber 唤不起时的兜底)
+ manualPhone: '',
},
onLoad(q) {
store
@@ -347,6 +349,32 @@ Page({
});
},
+ // 手动填手机号兜底(getPhoneNumber 需企业认证,唤不起时用这个)
+ showManual() {
+ this.setData({ manualMode: true });
+ },
+ onManualPhone(e) {
+ this.setData({ manualPhone: e.detail.value });
+ },
+ submitManual() {
+ const p = (this.data.manualPhone || '').trim();
+ if (!/^1\d{10}$/.test(p)) return wx.showToast({ title: '手机号格式不对', icon: 'none' });
+ wx.showLoading({ title: '保存中…', mask: true });
+ api
+ .updateProfile({ phone: p })
+ .then(() => api.petIDCard(this.data.petId))
+ .then((card) => {
+ wx.hideLoading();
+ if (!card) return;
+ this.setData({ card, qrReady: !!card.qr_ready, needPhone: false, manualMode: false });
+ wx.nextTick(() => this.draw());
+ })
+ .catch((err) => {
+ wx.hideLoading();
+ toastErr(err, '保存失败');
+ });
+ },
+
onSave() {
if (!this.data.cardImg) return wx.showToast({ title: '还在生成,稍等一下', icon: 'none' });
if (this.data.saving) return;
diff --git a/pets-fe/pages/idcard/idcard.wxml b/pets-fe/pages/idcard/idcard.wxml
index 384f591..7e545cb 100644
--- a/pets-fe/pages/idcard/idcard.wxml
+++ b/pets-fe/pages/idcard/idcard.wxml
@@ -7,8 +7,17 @@
生成身份卡需要手机号
身份卡背面的「联系电话」用于走失时联系你,验证后才能生成
-
- 没有手机号,无法生成身份卡
+
+
+
+ 没有手机号,无法生成身份卡
+ 唤不起来?手动填写手机号
+
+
+
+
+
+
diff --git a/pets-fe/pages/idcard/idcard.wxss b/pets-fe/pages/idcard/idcard.wxss
index 93976ed..6cd7fe7 100644
--- a/pets-fe/pages/idcard/idcard.wxss
+++ b/pets-fe/pages/idcard/idcard.wxss
@@ -34,3 +34,5 @@ button.ic-btn::after{border:none}
.ic-gate-p{font-size:var(--fs-sm);color:var(--muted);line-height:1.6;margin:var(--sp-2) 0 var(--sp-5)}
.ic-gate-refuse{color:var(--red-ink);font-weight:var(--fw-b);font-size:var(--fs-md)}
.ic-gate-btn{margin-top:var(--sp-2)}
+.ic-gate-manual{margin-top:var(--sp-4);color:var(--muted);font-size:var(--fs-sm);text-decoration:underline}
+.ic-gate-input{margin-bottom:var(--sp-3);text-align:center}