v91 观影/任务卡加 4x4/6x4(滚动列表+新建+卡上完成任务);修任务卡无数据(解析器用错:看板嵌套需 parseTasks)
This commit is contained in:
@@ -24,7 +24,7 @@ import { FormExtensionAbility, formBindingData, formProvider, formInfo } from '@
|
||||
import { Want } from '@kit.AbilityKit';
|
||||
import { BusinessError } from '@kit.BasicServicesKit';
|
||||
import { hilog } from '@kit.PerformanceAnalysisKit';
|
||||
import { fbCardDataByKind } from '../data/FbCardMediaData';
|
||||
import { fbCardDataByKind, fbTaskCardComplete, FbTaskCardData } from '../data/FbCardMediaData';
|
||||
import { FB_CARD_FORMS } from '../data/FbCardForms';
|
||||
import { FB_BG_SYNC } from '../common/FbBackgroundSync';
|
||||
|
||||
@@ -147,13 +147,49 @@ export default class FbFormAbility extends FormExtensionAbility {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 🔴 v91:任务卡上点「完成」—— 把任务标成 done,重算后**推给所有任务卡**。
|
||||
*
|
||||
* ⚠️ 推所有任务卡而不是只推这一张:还有别的任务卡(2×2 的待办数、别的 4×4)
|
||||
* 也显示这条任务,只推一张会出现"这张没了、那张还挂着"。
|
||||
* ⚠️ message 里的 id 用正则抠:`{"taskDone":"12"}` / 嵌套 `{params:{…}}`
|
||||
* 两种形态都能命中(与既有"子串匹配"取舍一致)。
|
||||
*/
|
||||
private markTaskDone(formId: string, message: string): void {
|
||||
const m: RegExpMatchArray | null = message.match(/"taskDone"\s*:\s*"?(\d+)/);
|
||||
const id: number = m !== null ? parseInt(m[1], 10) : 0;
|
||||
if (id <= 0 || isNaN(id)) {
|
||||
hilog.warn(DOMAIN, TAG, '任务卡「完成」消息里没有可用 id:%{public}s', message);
|
||||
return;
|
||||
}
|
||||
fbTaskCardComplete(this.context, id).then((data: FbTaskCardData): void => {
|
||||
const binding: formBindingData.FormBindingData = formBindingData.createFormBindingData(data);
|
||||
// 先回这张卡(用户手指点的那张,必须立刻看到变化)
|
||||
formProvider.updateForm(formId, binding).catch((err: BusinessError): void => {
|
||||
hilog.warn(DOMAIN, TAG, '任务卡 %{public}s 回推失败:%{public}s', formId, err.message);
|
||||
});
|
||||
// 其余任务卡重算重推(数量不多,构建走同一份缓存口径)
|
||||
FB_CARD_FORMS.pushAll(this.context).catch((err: BusinessError): void => {
|
||||
hilog.warn(DOMAIN, TAG, '任务完成后全量重推失败:%{public}s', err.message);
|
||||
});
|
||||
}).catch((err: BusinessError): void => {
|
||||
hilog.error(DOMAIN, TAG, '完成任务 %{public}d 流程失败:%{public}s', id, err.message);
|
||||
});
|
||||
}
|
||||
|
||||
onFormEvent(formId: string, message: string): void {
|
||||
/* 卡片上的按钮都走 `action: 'message'`,`message` 是 JSON 字符串。
|
||||
⚠️ 不解析 JSON:不同版本系统给的形态可能是 `{params:{...}}` 或直接 `{...}`,
|
||||
子串匹配更稳(与 SyncCalendar 同一个取舍)。
|
||||
⚠️ v90:只有日程卡有 ‹ / › / 今 三个按钮;观影/任务卡不发 message 事件,
|
||||
收到也直接忽略(不把 message 撞进偏移量里)。 */
|
||||
收到也直接忽略(不把 message 撞进偏移量里)。
|
||||
🔴 v91:任务卡多了「完成」按钮(`taskDone`),**必须最先分流**——
|
||||
它不认卡片类型也不认偏移量,认不出类型时也不能丢。 */
|
||||
hilog.info(DOMAIN, TAG, '卡片事件:%{public}s %{public}s', formId, message);
|
||||
if (message.indexOf('taskDone') >= 0) {
|
||||
this.markTaskDone(formId, message);
|
||||
return;
|
||||
}
|
||||
FB_CARD_FORMS.kindOf(this.context, formId).then((kind: string): void => {
|
||||
if (kind !== 'calendar') {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user