常见问题
模板错误修复
修复 FLO.W 模板中可能出现的错误
由于 FLO.W 系统的体量过于庞大,因此有可能在各种细节角落存在一些错误,本文档即为修复这些错误而建。
剪藏完成按钮错误修复
Important
如果您的模板是在 2025.11.03 之后复制的,则不需要处理本条修复
问题表现
在剪藏文章中,点击【完成】按钮,无法将阅读状态改为【已完成】

解决方法
点击【完成】这个字段,会弹出如下提示

然后再点击【编辑属性 - 编辑自动化】,然后点击出现错误的地方

把【已删除选项】改成【已完成】

最后点击保存按钮即可

习惯打卡热力图的错误修复
Important
如果您的模板是在 2025.11.03 之后复制的,则不需要处理本条修复
问题表现
当月份来到 11 月或者 12 月的时候,热力图的显示就会无法正确对齐,如下图所示:

解决方法
复制下面这段代码,然后覆盖原有的代码即可
/* ========== 打卡统计看板 (基于当前月份) - 集成习惯分类和月度目标 ========== */
lets(
/* --- 核心变量 --- */
boardReferenceDate, now(), /* 看板始终基于当前日期和时间 */
currentYear, boardReferenceDate.formatDate("YYYY"), /* 当前年份字符串 */
currentMonth, boardReferenceDate.formatDate("MM"), /* 当前月份字符串 */
boardYearMonth, currentYear + "/" + currentMonth, /* 当前年月,例如 "2025/05" */
/* --- 今日打卡状态 --- */
todayDateText, now().formatDate("YYYY/MM/DD"),
allRecords, prop("打卡记录"), /* 所有打卡记录 */
isCheckedInToday, allRecords.filter(current.prop("日期").formatDate("YYYY/MM/DD") == todayDateText).length() > 0,
todayCheckInStatusText, if(isCheckedInToday, "✅ 今天已打卡", "❌ 今天未打卡"),
habitCategory, prop("习惯分类"), /* 获取习惯分类 */
monthlyLimitTarget, prop("目标/上限"), /* 获取每月上限或下限目标值 */
/* 根据习惯分类调整标记和颜色 */
triggerMark, if(habitCategory == "好习惯", "✓", "x"),
userDefinedColorForHabit, prop("习惯颜色"),
triggerColor, if(
habitCategory == "好习惯",
"green",
empty(userDefinedColorForHabit) ? "red" : userDefinedColorForHabit
),
/* --- 1. 计算当月触发/完成次数 --- */
/* allRecords 已在上方定义 */
monthlyTriggers,
allRecords.filter(
current.prop("日期").formatDate("YYYY/MM") == boardYearMonth
).length(),
/* --- 2. 构建第一行显示的习惯信息字符串 (对好坏习惯均显示) --- */
habitInfo,
lets(
baseText, format("本月 ") + monthlyTriggers + " 次",
actualSuffixText, /* 初始化后缀文本 */
if(empty(monthlyLimitTarget),
"", /* 如果没有设置目标/上限,则后缀为空 */
if(habitCategory == "好习惯",
lets(
neededForTarget, monthlyLimitTarget - monthlyTriggers,
if(neededForTarget <= 0,
"|已达标",
"|还需 " + format(neededForTarget) + " 次"
)
),
/* 当为坏习惯时 */
lets(
remainingCount, monthlyLimitTarget - monthlyTriggers,
if(remainingCount >= 0,
"|剩余 " + format(remainingCount) + " 次",
"|已超额 " + format(abs(remainingCount)) + " 次"
)
)
)
),
(baseText + actualSuffixText).style("b", "u") /* 组合并应用样式 */
),
/* --- 3. 月份和星期表头 --- */
monthHeader,
lets(
monthNum, boardReferenceDate.formatDate("MM").toNumber(),
monthText, if(monthNum >= 11,
boardReferenceDate.formatDate("MMM"), /* 11、12月用缩写 */
boardReferenceDate.formatDate("MM") + "月" /* 1-10月用数字 */
),
monthText.style(
triggerColor + "_background", "c", "b", triggerColor
)
),
dayAbbreviations, ["M", "T", "W", "T", "F", "S", "S"],
weekHeader, dayAbbreviations.map(
lets(
dayAbbr, current,
dayIndex, index,
systemToday, now().day(),
isToday, (systemToday == 0 && dayIndex == 6) || (systemToday != 0 && systemToday - 1 == dayIndex),
dayAbbr.style(
triggerColor + "_background", "c", "b",
isToday ? ((triggerColor == "yellow" || triggerColor == "pink" || triggerColor == "green" || triggerColor == "gray") ? "brown" : "white") : triggerColor
)
)
).join(" "),
fullHeader, monthHeader + " " + weekHeader,
/* --- 4. 每周打卡热图 --- */
firstDayOfBoardMonth, parseDate(currentYear + "-" + currentMonth),
startDayOfWeekForBoardMonth, firstDayOfBoardMonth.day(),
week1StartDate, firstDayOfBoardMonth.dateSubtract((startDayOfWeekForBoardMonth + 6) % 7, "days"),
weekDaysOffsets, [0, 1, 2, 3, 4, 5, 6],
weekOffsetsForMap, [0, 7, 14, 21, 28, 35],
allWeekViewsRendered, weekOffsetsForMap.map(
lets(
daysToAdd, current,
currentWeekStartDate, week1StartDate.dateAdd(daysToAdd, "days"),
currentWeekIndex, index,
isThisWeekPotentiallyRelevant, currentWeekStartDate.formatDate("YYYY/MM") == boardYearMonth || currentWeekStartDate.dateAdd(6, "days").formatDate("YYYY/MM") == boardYearMonth,
displayThisWeek, (currentWeekIndex < 5) || (currentWeekIndex == 5 && isThisWeekPotentiallyRelevant),
weekViewContent, displayThisWeek ? (
(currentWeekStartDate.formatDate("WW") + "周").style(
currentWeekStartDate.formatDate("YYYY/WW") == now().formatDate("YYYY/WW") ? triggerColor + "_background" : "",
"c", "b", triggerColor
) + " " +
weekDaysOffsets.map(
lets(
dayOffset, current,
currentDayInGrid, currentWeekStartDate.dateAdd(dayOffset, "days"),
isCurrentDisplayMonth, currentDayInGrid.formatDate("YYYY/MM") == boardYearMonth,
dailyTriggersCount, isCurrentDisplayMonth ?
allRecords.filter(
current.prop("日期").formatDate("YYYY/MM/DD") == currentDayInGrid.formatDate("YYYY/MM/DD")
).length() : 0,
isActualToday, currentDayInGrid.formatDate("YYYY/MM/DD") == todayDateText, /* 使用 todayDateText 比较 */
(dailyTriggersCount > 0 ? triggerMark : (isCurrentDisplayMonth ? "·" : " ")).style(
dailyTriggersCount > 0 ? triggerColor + "_background" : (isActualToday && isCurrentDisplayMonth ? "blue_background" : ""),
"c", "b",
dailyTriggersCount > 0 ? triggerColor : (isCurrentDisplayMonth ? (isActualToday ? "white" : "gray") : "")
)
)
).join(" ")
) : "",
weekViewContent
)
).filter(current != "").join("\n"),
/* --- 构建本月目标/上限的文本行 (for summary) --- */
monthlyTargetDisplayLine,
if(empty(monthlyLimitTarget),
"", /* 如果目标/上限为空,则此行为空 */
if(habitCategory == "好习惯",
format("本月目标 ") + format(monthlyLimitTarget) + " 次",
format("本月上限 ") + format(monthlyLimitTarget) + " 次"
)
),
/* --- 计算上个月和年度统计 (for summary) --- */
dateForLastMonth, boardReferenceDate.dateSubtract(1, "months"),
lastMonthYearMonth, dateForLastMonth.formatDate("YYYY/MM"),
lastMonthTriggers, allRecords.filter(
current.prop("日期").formatDate("YYYY/MM") == lastMonthYearMonth
).length(),
percentageChangeText, /* 调整 "从0增加" 的措辞 */
if(lastMonthTriggers == 0,
/* 当上个月为0次时 */
if(monthlyTriggers > 0,
"本月增加 " + format(monthlyTriggers) + " 次", /* 修正:去掉重复的 "上个月 0" */
"无变化" /* 如果本月也为0次,则为无变化 */
),
/* 当上个月不为0次时,计算百分比 */
lets(
diff, monthlyTriggers - lastMonthTriggers,
percentage, round(diff / lastMonthTriggers * 100),
if(percentage == 0,
"无变化",
if(percentage > 0,
"增加 " + format(percentage) + "%",
"下降 " + format(abs(percentage)) + "%"
)
)
)
),
lastMonthSummary, "上个月 " + format(lastMonthTriggers) + " 次|" + percentageChangeText,
thisYearTriggers, allRecords.filter(
current.prop("日期").formatDate("YYYY") == currentYear
).length(),
thisYearSummary, "今年总计 " + format(thisYearTriggers) + " 次",
/* --- 5. 最终拼接所有部分 --- */
finalOutput,
todayCheckInStatusText + "\n" +
habitInfo + "\n" +
fullHeader + "\n" +
allWeekViewsRendered + "\n\n" +
if(empty(monthlyTargetDisplayLine), "", monthlyTargetDisplayLine + "\n") +
lastMonthSummary + "\n" +
thisYearSummary + "\n",
finalOutput
)剪藏 - 关联字段最后编辑时间
Important
如果您的模板是在 2025.11.02 之后复制的,则不需要处理本条修复
问题表现
打开剪藏模块中的文章,找到【关联字段最后编辑时间】这个字段,点击之后发现如下图所示的错误:

解决方法
复制以下代码,然后完整覆盖即可
lets(
project,prop("关联项目").map(current.prop("上次编辑时间")),
task,prop("关联任务").map(current.prop("上次编辑时间")),
extract,prop("关联摘录").map(current.prop("Last Edited Time")),
author,prop("出自").map(current.prop("Last Edited Time")),
category,prop("书单分类").map(current.prop("Last Edited Time")),
subArea,prop("次级领域").map(current.prop("Last Edited Time")),
note,prop("关联笔记").map(current.prop("上次编辑时间")),
Area,prop("一级领域").map(current.prop("Last Edited Time")),
content,prop("Last Edited Time"),
[Area,note,subArea,category,author,author,extract,task,project,content].flat().unique().sort().reverse().first()
)这次改动不影响任何功能,只是删去了一段无用的代码。
主页导航错误修复
Important
如果您的模板是在 2025.09.14 之后复制的,则不需要处理本条修复
问题表现
在某些情况下,如果你打开数据库,点击顶部的【主页】按钮
却跳转到了网页的某个地方
请按照以下方式进行修复。
解决方法
愿望按钮修复
Important
如果您的模板是在 2025.09.14 之后复制的,则不需要处理本条修复
问题表现
在【生活 - 愿望】模块中,存在一个【加入已购买】的按钮
如果你点击这个按钮出现错误,可能是个这个按钮中的某个步骤出现了错误
解决办法
按照下图所示方法,重新编辑一下这个按钮即可

FLO.W 文档