忘記密碼

輸入您的帳號名稱,我們會將重設密碼連結寄到您綁定的 email。

{{ forgotPwModal.error }}
{{ forgotPwModal.message }}
教會牧養系統

您的帳號尚未啟用雙重驗證 (2FA)

為保護系統與會友資料,管理員/牧者角色強烈建議立即啟用 Google Authenticator 兩步驟驗證。

總覽儀表板

{{ todayDateStr }}

登記會友人數

{{ userList.length }}

系統內總人數

今日簽到人數

{{ todayAttendancePeopleCount }}

共 {{ attendanceList.length }} 筆簽到紀錄

LINE 綁定人數

{{ userList.filter(u => u.line_id).length }}

已綁定 LINE 帳號

今日簽到清單

{{ todayAttendancePeopleCount }} 人 共 {{ attendanceList.length }} 筆
# 姓名 電話 活動 簽到時間
{{ index + 1 }} {{ row.user_name }} {{ row.user_phone }} {{ row.event_name }} {{ formatTime(row.check_in_time) }}

今日尚無簽到紀錄

RPG禱告 數據

只算 rpg 型;「已辨識」=對到會友+已標非會友。 本區間已辨識 {{ Math.round(prayerNetwork.matched_ratio * 100) }}%({{ prayerNetwork.node_count }} 人、{{ prayerNetwork.total_reports }} 組,含非會友 {{ prayerNetwork.non_member_count }} 位);尚未辨識的請到「設定 → 禱告回報」指派或標非會友,數據才會完整。

每日禱告組數 / 參與人數
某日明細
這天沒有 RPG 回報。
  • {{ g.reporter ? g.reporter.name : '(回報者未對到)' }} {{ p.matched_user ? p.matched_user.name : (p.display_name || p.name_text) }}(非) 一起禱告
個人檢視
選一個人,看他跟誰一起禱告過。
  • {{ pe.label }} · {{ pe.count }} 次
  • 這個人在此區間沒有共同禱告紀錄。
常一起禱告的配對
尚無配對資料。
  • {{ e.label_a }} — {{ e.label_b }} {{ e.count }} 次
關係網路圖 {{ rg.region }} 無牧區 非會友 未辨識
尚無資料。

點人=星狀聚焦(只亮他的連線)、拖曳節點移動、滾輪縮放、空白拖曳平移、點空白取消聚焦。

會友管理

查看會友資料;資料管理角色可新增與編輯

會友總數

{{ userList.length }}

目前系統建檔人數

目前篩選

{{ filteredUserList.length }}

符合搜尋條件

LINE 綁定

{{ userList.filter(u => u.line_id).length }}

可使用自助簽到

新增會友

主要名字語言 *
{{ composeName(newUser.primary_name_lang, newUser.last_name, newUser.first_name, newUser.en_last_name, newUser.en_first_name, newUser.en_middle_name) || '(請填寫姓名)' }}

基本個資

民國 {{ newUser.birth_year - 1911 }} 年 約 {{ computeAgeFromParts(newUser.birth_year) }} 歲 月/日不詳,不觸發生日提醒

聯絡地址

新增牧養紀錄

記錄初次接觸、邀請來源、會籍狀態與後續牧養備註

受洗資訊

受洗狀態
嬰兒洗禮
堅信禮
信徒受洗

社會生活

教育程度

職業狀態設為「學生」才可填

牧養組織

尚未啟用任何組織層級,請至「系統設定 › 牧養組織」頁面設定。

壘圖進度

{{ userAlert.type === 'success' ? '建立成功!' : '建立失敗' }}

{{ userAlert.message }}

會友 ID: {{ userAlert.uuid }}

會友名單

{{ filteredUserList.length }} / {{ userList.length }} 人

找不到符合條件的會友

# 姓名 電話 LINE 綁定 操作

{{ canEditMember ? '尚無會友資料,請點選上方「新增會友」' : '尚無可檢視的會友資料' }}

簽到系統

開啟獨立頁面以供現場使用

聚會排程

{{ gatheringList.length }}

可啟動簽到機台

待確認線上簽到

{{ onlinePending.length }}

需要同工處理

今日簽到

{{ todayAttendancePeopleCount }}

共 {{ attendanceList.length }} 筆簽到紀錄

各堂次簽到工具

啟動現場機台或取得 LINE 自助簽到連結
尚無聚會排程
{{ g.category || '主日' }} {{ g.name }} {{ g.start_time }}–{{ g.end_time }} ・{{ g.location }}

快速簽到

將 QR Code 對準框內,手機號碼將自動填入

支援手機號碼 QR Code 與條碼格式掃描

系統依當下時間自動帶入聚會名稱

{{ checkInAlert.type === 'success' ? '簽到成功!' : '簽到失敗' }}

{{ checkInAlert.message }}

{{ cardCheckInLoading ? '讀取中…' : '請感應卡片或輸入卡號後按 Enter' }}

點選上方區域後感應,或手動輸入卡號並按 Enter

{{ cardCheckInAlert.type === 'success' ? '簽到成功!' : '簽到失敗' }}

{{ cardCheckInAlert.message }}

線上簽到待確認

{{ onlinePending.length }} 筆
{{ onlinePendingError }}
送出時間 聚會 姓名 電話 小組 生日 原因 處理
{{ formatUtcDateTime(row.created_at) }} {{ row.event_name }} {{ row.submitted_name }} {{ row.submitted_phone || '—' }} {{ row.org_unit_label || row.group_query || '—' }} {{ row.birth_month && row.birth_day ? `${row.birth_month}/${row.birth_day}` : '—' }} {{ row.reason || '待確認' }}
待管理同工處理

目前沒有待確認的線上簽到

今日即時名單

{{ todayAttendancePeopleCount }} 人 共 {{ attendanceList.length }} 筆
# 姓名 電話 活動 簽到時間
{{ index + 1 }} {{ row.user_name }} {{ row.user_phone }} {{ row.event_name }} {{ formatTime(row.check_in_time) }}

今日尚無簽到紀錄

點名補登

為兒童班或各小組成員補登出席紀錄

跨班級搜尋成員 輸入名字直接定位到他所屬的班級
搜尋中…
找不到符合「{{ memberSearchQuery }}」的成員
{{ rollCallRoster ? rollCallRoster.week_label : '—' }}
{{ rollCallRoster ? rollCallRoster.unit.name : unitLabelById(currentUnitIds[0]) }}

此帳號尚未指派班級,請聯絡管理員設定

名單人數

{{ rollCallRoster ? rollCallRoster.members.length : 0 }}

目前載入班級 / 小組

本週聚會日

{{ rollCallRoster ? rollCallRoster.days.length : 0 }}

可補登日期

待送出補登

{{ rollCallPendingCount }}

尚未寫入的選取項目

{{ rollCallRoster.unit.code }} {{ rollCallRoster.unit.name }}

{{ rollCallRoster.week_label }}・共 {{ rollCallRoster.members.length }} 人

本週沒有排定的聚會

已選 {{ rollCallPendingCount }} 筆補登

成功補登 {{ rollCallResult.created }}({{ rollCallResult.skipped }} 筆重複略過) ({{ rollCallResult.future_skipped }} 筆聚會尚未開始,略過)

聚會排程

管理聚會時程,並啟動對應的簽到機台

聚會總數

{{ gatheringList.length }}

目前可用排程

例行聚會

{{ gatheringList.filter(g => g.gathering_type === 'routine').length }}

每週固定排程

單次活動

{{ gatheringList.filter(g => g.gathering_type === 'one_off').length }}

特別聚會與活動

{{ editingGatheringId ? '編輯聚會' : '新增聚會' }}

載入中…

尚無聚會排程,點右上角「新增聚會」開始安排

名稱 日期 時間 地點 類別 類型 接續聚會 操作
{{ g.name }} {{ g.gathering_type === 'routine' ? ['週日','週一','週二','週三','週四','週五','週六'][g.weekday] ?? '—' : (g.date || '—') }} {{ g.start_time }} – {{ g.end_time }} {{ g.location || '—' }} {{ g.category || '主日' }} {{ g.gathering_type === 'routine' ? '例行' : '單次' }} 接續 {{ gatheringMap[g.follow_up_gathering_id].name }}

節期活動

復活節、聖誕節、營會等推動回報項目;新增後會出現在小組長週報表中

活動總數

{{ campaignList.length }}

建立過的全部活動

啟用中

{{ campaignList.filter(c => c.is_active).length }}

會出現在小組長報表

推動中

{{ activeCampaignCount }}

本週位於推動期間內

{{ editingCampaignId ? '編輯節期活動' : '新增節期活動' }}

追蹤項目

每個項目會在小組長 Sheet 對應一欄;選項即下拉選單值

尚未設定追蹤項目,點上方「新增項目」加入第一個。

載入中…

尚無節期活動,點右上角「新增活動」開始建立

名稱 推動期間 追蹤項目 狀態 操作
{{ c.name }}

{{ c.description }}

{{ c.start_week }} ~ {{ c.end_week }}
{{ it.label }}
啟用 停用

{{ (campaignDashData && campaignDashData.campaign.name) || '推動儀表板' }}

推動期間:{{ campaignDashData.campaign.start_week }} ~ {{ campaignDashData.campaign.end_week }}

載入中…
{{ campaignDashError }}

新朋友名單

小組長透過 LIFF 邀請的對象、以及資處從紙本新人留名卡建檔的自己到訪者

本頁筆數

{{ inviteeList.length }}

邀約中

{{ inviteeList.filter(i => i.status === 'active').length }}

已合併

{{ inviteeList.filter(i => i.status === 'merged').length }}

歸檔/封存

{{ inviteeList.filter(i => i.status === 'archived' || i.status === 'dismissed').length }}

載入中…
沒有資料
顯示名稱 / 真名 關係 電話 邀請者 所屬單位 狀態 建立日 操作

{{ iv.display_name }}

{{ iv.real_name }}

{{ INVITEE_RELATION_LABEL[iv.relation_type] || iv.relation_type || '—' }} · {{ iv.related_user_name }} {{ iv.phone || '—' }} {{ iv.inviter_name || '—' }} {{ iv.unit_label || '—' }} {{ inviteeStatusLabel(iv.status) }} {{ formatInviteeDate(iv.created_at) }}

新增新朋友

已選:{{ inviteeCreateForm.inviter_user_name }}

合併為正式會友

將「{{ mergeTargetInvitee.display_name }}」連結到已建檔的會友

已選擇:{{ selectedMergeUser.name }}({{ selectedMergeUser.phone || '無電話' }})

區牧儀表板

小組估算完成率與命中率彙整(牧養支持參考,非考核用)

小組數

{{ pdSummary.unit_count }}

平均完成率

{{ pdFmtPct(pdSummary.avg_completion) }}

平均命中率

{{ pdFmtPct(pdSummary.avg_accuracy) }}

需要關心

{{ pdSummary.anomaly_count }}

四象限分布

X 軸=完成率 Y 軸=命中率 虛線=70% 分界

填得勤但不準 理想區 需關心 填得少但準 {{ p.label }}
載入中…
沒有資料
{{ col.label }}
{{ u.district_name || '—' }} {{ u.unit_name }} {{ u.leader_name || '—' }} {{ u.member_count }} {{ pdFmtPct(u.summary.completion_rate) }} {{ pdFmtPct(u.summary.accuracy_rate) }} {{ pdFmtPct(u.summary.attend_hit_rate) }} {{ pdFmtPct(u.summary.absent_hit_rate) }} {{ a.description }}

資料以「週五 → 下週四」為一週;本週未結束,不納入統計。

報表中心

出席紀錄統計與 Google Sheets 報表

步驟一:產生小組長報表

系統會依最低啟用的組織層級(小組)分組,每個小組產生一份試算表,已簽到者自動打勾,發給小組長補填漏掉的人。

使用前請確認 .env 中已設定 GOOGLE_SERVICE_ACCOUNT_JSONGOOGLE_SHEET_TEMPLATE_IDGOOGLE_DRIVE_FOLDER_ID
已封存 {{ archiveOldResult.archived }} 份報表 ({{ archiveOldResult.skipped }} 份不符合封存條件,略過) ;門檻:週次 < {{ archiveOldResult.cutoff_week_start }}
  • {{ err }}
{{ reportError }}

步驟二:回收報表

同步小組長回填結果,轉入正式出席紀錄

{{ bulkSyncResult.total_added > 0 ? '全部回收完成' : '已是最新狀態' }} —— 共新增 {{ bulkSyncResult.total_added }} 筆出席紀錄,回收 {{ bulkSyncResult.synced }} 份報表

載入中…
此週次尚無報表記錄,請先產生報表。
  • {{ r.last_synced_at ? '已回收' : '待回收' }}

    {{ r.unit_name }}

    {{ fmtDatetime(r.last_synced_at) }}・新增 {{ r.sync_added ?? 0 }} 筆

    開啟
手動回收(貼入試算表網址)

若要回收不在上方清單中的試算表,可直接貼入網址手動回收。

{{ syncSheetError }}

{{ syncSheetResult.added > 0 ? '回收完成' : '已是最新狀態' }}

新增出席紀錄:{{ syncSheetResult.added }}

已有紀錄略過:{{ syncSheetResult.skipped }} 筆

警告:

・{{ e }}

小組出席圖

選擇牧區,系統自動產生所有子組的出席表

{{ unitPhotoError }}

此單位下無子組
{{ unit.unit_label }} {{ unitPhotoData.date_from }} ~ {{ unitPhotoData.date_to }}

{{ unit.unit_label }}

{{ unitPhotoData.date_from }} ~ {{ unitPhotoData.date_to }}

此期間無出席紀錄
姓名
{{ s.gathering_name }}
{{ s.date.slice(5) }}
{{ m.name }} {{ m.attended_keys.includes(s.key) ? '是' : '' }}
出席人數 {{ unit.members.filter(m => m.attended_keys.includes(s.key)).length }}

牧養摘要

彙整各小組本週見證、特殊狀況與個別會友回覆
{{ pastoralError }}

出席統計

教會週(五—四)為計算單位

載入中…
{{ pastoralMetricsError }}
載入中…
載入中…

{{ dashModal.title }} 共 {{ dashModal.list.length }} 人

# 姓名 小組 方式 電話末四碼 邀請人
{{ i+1 }} {{ p.name }} {{ p.group || '—' }} {{ p.attendance_mode==='online' ? '線上' : '實體' }} {{ p.phone_tail || '—' }} {{ p.inviter_name || '—' }}
# 姓名 小組 缺席週數 上次出席
{{ i+1 }} {{ p.name }} {{ p.group || '—' }} {{ p.absent_weeks >= 99 ? '從未' : p.absent_weeks + ' 週' }} {{ p.last_seen || '無記錄' }}

{{ pastoralDetailModal.title }} 共 {{ pastoralDetailModal.count }} 筆

{{ pastoralDetailModal.subtitle }}

{{ pastoralDetailModal.error }}
目前沒有資料
# 姓名 小組 狀態 補充 操作
{{ i + 1 }}

{{ p.name || '未命名' }}

末四碼 {{ p.phone_tail }}

{{ p.group || '—' }}
{{ p.attendance_status }} {{ p.membership_status }}
{{ p.reason }} 最後小組 {{ p.last_seen }} 缺席 {{ p.absent_weeks }} 週 初訪 {{ p.first_visit }} 邀請人 {{ p.inviter_name }} {{ need }}

{{ n.unit_name || '未分組' }}

{{ n.user_name }}

小組特殊狀況

{{ n.note || '—' }}

# 姓名 小組 操作
{{ i + 1 }} {{ c.user_name || '未命名' }} {{ c.unit_name || '—' }}
載入中…
本週無主日聚會出席記錄

各週聚會人數

以教會週彙整各堂與各小組出席狀況

統計週數

{{ trendData.weeks.length }}

聚會類別

{{ trendCategories.length }}

最近一週合計

{{ trendData.weeks.length ? trendCategories.reduce((s, cat) => s + (trendData.weeks[trendData.weeks.length - 1].categories[cat]?.attendees || 0), 0) : 0 }}

出席趨勢圖

單位:人

{{ w.week_label }} {{ w.categories[cat].attendees }} ({{ (w.categories[cat].rate*100).toFixed(0) }}%)
載入中…

時間矩陣

聚會列數

{{ trendMatrixData.summary.gathering_row_count }}

小組列數

{{ trendMatrixData.summary.group_row_count }}

各堂平均週出席

{{ trendMatrixData.summary.gathering_weekly_avg }}

小組平均週出席

{{ trendMatrixView === 'groups' ? trendMatrixSelectedGroupAvg : trendMatrixData.summary.group_weekly_avg }}

{{ trendMatrixView === 'gatherings' ? '聚會' : '小組' }} {{ compactWeekLabel(w.week_label) }} 平均 最近

{{ row.label }}

{{ v }} {{ row.avg }} {{ row.last || '—' }}
此區間沒有可顯示的資料

歷週指標比較 數值越深表示該指標歷週相對越高

指標 {{ w.week_label.replace(/^\d{4}\//, '').replace(/(.+)$/, '') }} 本週 vs 上週

「資料缺口」以「當下使用者欄位」計算,部署前的歷史週可能無記錄而顯示 —。

活躍會員數

{{ attChurchData.active_member_count }}

活躍 + 未穩定

{{ attChurchData.active_unstable_count }}

期間 出席人數 活躍出席率 活躍+未穩定出席率
{{ r.period_label }} {{ r.unique_attendees }} {{ (r.rate_active * 100).toFixed(1) }}% {{ (r.rate_with_unstable * 100).toFixed(1) }}%
期間 出席人數 活躍出席率 活躍+未穩定
{{ r.period_label }} {{ r.unique_attendees }} {{ (r.rate_active*100).toFixed(1) }}% {{ (r.rate_with_unstable*100).toFixed(1) }}%

小組

{{ attGroupData.org_unit.name }}

活躍 {{ attGroupData.active_members }} / 總計 {{ attGroupData.total_members }} 人

本組成員(共 {{ attGroupData.members.length }} 人)

診斷指派
{{ m.name }}
期間 出席人數 活躍出席率
{{ r.period_label }} {{ r.unique_attendees }} {{ (r.rate_active*100).toFixed(1) }}%
小組 活躍人數 {{ p }}
{{ g.org_unit.name }} {{ g.active_members }} {{ (attRegionGroupPeriodMap[g.org_unit.id][p].rate*100).toFixed(1) }}% ({{ attRegionGroupPeriodMap[g.org_unit.id][p].count }})

門訓進度

管理每位會友的生命成長壘圖進度

姓名 壘位 會籍 101 201 301 401 操作

{{ mentuSearch ? '找不到符合的會友' : '尚無會友資料' }}

系統設定

牧養組織 · 層級與結構設定

此頁管理層級的啟用與命名等結構設定。日常的單位、負責人、同工管理請至左側「牧養組織與職權」。

層級設定

L{{ ls.level }}
L{{ ls.level }} · {{ ls.display_name }}
(所有層級已啟用)

{{ ls.display_name }}

  • {{ m.name }} {{ m.phone || '' }}
{{ newUnitLeader[ls.level].name }} (已連結會友)
尚未啟用任何層級,請先在「層級設定」中點擊「啟用」。

{{ cwPanel.unitName }} · 同工

載入中…
  • 尚無同工,請從下方新增。
  • {{ cw.name }} {{ cw.email }} 無 Email

新增同工

  • {{ m.name }} {{ m.phone || '' }}
{{ cwPanel.selectedUser.name }} {{ cwPanel.selectedUser.email }} (無 Email,分享時將略過)

操作步驟:

  1. 下載空白 Excel 範本,依說明填寫會友資料
  2. 上傳填寫完成的 Excel 檔案(.xlsx),系統會自動檢查資料
  3. 確認預覽無誤後,點選「確認匯入」正式匯入資料庫

步驟一:下載空白範本

步驟二:上傳填寫好的 Excel

{{ importFileName || '尚未選擇檔案' }}
解析中,請稍候…
{{ importError }}

步驟三:確認預覽後匯入

共 {{ importPreview.total }} 筆 新增 {{ importPreview.new_count }} 筆 更新 {{ importPreview.update_count }} 筆 有誤 {{ importPreview.invalid_count }} 筆(點此展開) 組織欄位未匹配 {{ orgUnresolvedCount }} 筆(點此展開)
以下牧養組織欄位在 Excel 中未找到,該層級資料將不會匯入: {{ orgColsMissing.join('、') }}。 請確認 Excel 第一列的標題文字與系統設定的顯示名稱完全一致。

{{ ls.display_name }} 代碼比對

系統已有:

{{ (importPreview.org_available_codes[ls.display_name] || []).join(' ') || '(無)' }}

Excel 找不到:

{{ orgUnresolvedCodesByLevel[ls.display_name].join(' ') }}


未匹配列表(點選可跳到該列)

第 {{ row.row_num }} 列 {{ row.data._resolved_name || '(無姓名)' }}

錯誤列表(點選可跳到該列)

第 {{ row.row_num }} 列 {{ row.data._resolved_name || '(無姓名)' }} {{ row.errors.join(';') }}

僅顯示本次檔案中有填寫內容的欄位,共 {{ importPreviewColumns.length }} 個欄位。

列號 狀態 {{ col.label }} 錯誤說明
{{ row.row_num }} 更新 新增 {{ formatImportCell(col.key, row.data) }} {{ row.errors.join(';') || '' }}

注意:有誤的 {{ importPreview.invalid_count }} 筆資料將略過,不會匯入。

匯入完成!

新增 {{ importResult.created }} 筆會友資料。

合併更新 {{ importResult.updated }} 筆既有資料。

略過 {{ importResult.skipped.length }} 筆(格式錯誤或空白)。

牧養組織寫入筆數:

{{ ls.display_name }}:{{ importResult.org_written[String(ls.level)] ?? 0 }} 筆

出席報表以此星期為每週起始日計算,例如選「星期五」則週五~下週四為同一週。


聚會開始前幾分鐘可以開始簽到。例如設為 60,表示聚會 10:00 開始,9:00 即可簽到。
注意:若有接續聚會,提前時段不會干擾正在進行中的前一場聚會。

分鐘(0 = 不提前)

設定教會座標後,LINE LIFF 簽到時系統會驗證會友位置。緯度與經度皆為 0 時不啟用驗證。

緯度(Latitude)
經度(Longitude)
允許範圍(公尺)

地理圍欄已啟用,簽到範圍 {{ settingCheckinRadius }} 公尺

未設定座標,地理圍欄不啟用


設定各欄位的最低可見角色,低於此角色的同工查看會友時,該欄位將顯示為空白。

已儲存

牧養組織診斷

顯示匯入時系統能識別的所有代碼、名稱格式,可與 Excel 內容對照

錯誤:{{ debugOrgUnitsResult.error }}

Lv{{ lvl.level }} {{ lvl.display_name }}({{ lvl.units.length }} 個單位)

ID 代碼 名稱 負責人 可比對 key(匯入時用)
{{ u.id }} {{ u.code || '—' }} {{ u.name || '—' }} {{ u.leader_name || '—' }} {{ u.matchable_keys.join('、') }}

錯誤:{{ debugOrgResult.error }}

{{ u.name }} {{ u.user_id.slice(0,8) }}…

DB 中無任何組織歸屬

DB 中無任何組織歸屬

Lv{{ m.level }} {{ m.display_name }}: {{ m.unit_name || '(單位名稱空白)' }} {{ m.unit_code ?? '' }} unit_id={{ m.org_unit_id }}

各層級總筆數:

{{ r.display_name }}(Level {{ r.level }}):{{ r.count }} 筆

總會友:{{ debugOrgResult.total_users }} 人


小組指派錯誤修復

掃描並修正:成員的小組(最高層級)與其牧區(次高層級)不符的情況。
同一牧區下若有同代碼的正確小組,系統會自動重新指派。

已成功寫入 {{ repairPreview.fixed_count }} 筆修正

預覽:可修復 {{ repairPreview.fixed_count }} 筆,無法自動修復 {{ repairPreview.skipped_count }} 筆

{{ repairPreview.committed ? '已修復' : '待修復' }}:

{{ f.user_name }} {{ f.from_unit_label }} {{ f.to_unit_label }}

無法自動修復(需手動處理):

{{ s.user_id.slice(0,8) }}… — {{ s.reason }}

所有小組指派資料正確,無需修復。

簽到記錄封存

將指定日期前的所有簽到記錄移入封存表,封存後資料仍保留但不參與日常查詢,可大幅提升系統效能。 此操作不可逆,請謹慎操作。

{{ archiveResult.error || '已封存 ' + archiveResult.archived + ' 筆記錄(' + archiveResult.before_date + ' 之前)' }}

SMTP 信件伺服器

用於寄發密碼重設信、系統通知信。設定後請先測試再啟用。

{{ emailCfgAlert.message }}
上次測試:{{ fmtDatetime(emailCfg.last_tested_at) }} ({{ emailCfg.last_test_status === 'success' ? '成功' : '失敗' }}) — {{ emailCfg.last_test_message }}
上次更新:{{ fmtDatetime(emailCfg.updated_at) }} by {{ emailCfg.updated_by }}

LINE Messaging API(推播 Bot)

用於主動推播訊息給已加 Bot 好友的會友。與目前 LIFF 簽到使用的 Channel 不同(請在同一 Provider 下另建一個 Messaging API Channel)。

推播場景

推播時程

每 15 分鐘檢查一次;落在觸發時間 ± 15 分鐘內會推一次。

(未設定任何時段。請點「新增時段」加入。)
{{ lineCfgAlert.message }}
上次測試:{{ fmtDatetime(lineCfg.last_tested_at) }} ({{ lineCfg.last_test_status === 'success' ? '成功' : '失敗' }}) — {{ lineCfg.last_test_message }}
上次更新:{{ fmtDatetime(lineCfg.updated_at) }} by {{ lineCfg.updated_by }}

如何取得 Token?

  1. LINE Developers Console與 LIFF 同一個 Provider 底下
  2. 建立新 Channel,類型選「Messaging API」
  3. 進入新 Channel → Messaging API 分頁 → 點「Issue」產生 Channel Access Token (long-lived)
  4. 會友需先掃 QR / 加 Bot 好友才能收推播

啟用「自動關聯」功能?請至 LINE OA Manager 設定:

  1. Webhook URL 填:https://你的網域/api/line/webhook
  2. 啟用「Use webhook」
  3. 關閉「自動回應訊息」與「Greeting message」(否則 Bot 會搶在系統前面回固定訊息)
  4. Channel Secret 也要填入上方欄位(簽章驗證用)

未綁定 LINE 好友

加 Bot 好友但未自動關聯到會友的清單。可由管理員手動指派。

目前沒有「{{ {pending:'待處理',linked:'已綁定',dismissed:'已略過',all:'任何'}[linePendingFilter] }}」的紀錄
  • {{ link.display_name || '(未取得名稱)' }}
    {{ link.line_id }}
    加好友:{{ fmtDatetime(link.first_seen_at) }} → {{ link.matched_user.name }} by {{ link.resolved_by }}
    已綁定 已略過

LINE 群組綁定

把 Bot 加入「區牧 + 小組長群」,由該單位的負責人在群內傳「綁定 <代號>」自動建立。亦可在此手動編輯。

目前沒有任何群組綁定。請把 Bot 加進 LINE 群組,由該單位負責人在群內傳「綁定 <代號>」。
  • {{ b.group_name || '(未取得群名)' }} [已停用]
    {{ b.line_group_id }}
    綁定到:{{ b.org_unit_label || '(單位不存在)' }} {{ fmtDatetime(b.bound_at) }} {{ b.bound_by_label }}

編輯群組綁定

收集 Bot 設定

獨立收集 Bot 的頻道金鑰與 AI 切分設定。各欄位留空=不變更(沿用現值)。儲存後請按「測試 Token」確認有效,確認無誤再清掉 .env 內的舊設定。

{{ collectorCfg.last_test_message }}

回報者特例設定

兩種特例(可獨立勾選):直式錨點=名字逐行單寫、以自己的名字當錨點分組(如李月華); 只回報·不參與=此人只是回報、自己沒一起禱告(如陳芊文回報兒童禱告),統計/網路圖不把他算進去。

目前沒有特例回報者(全部走預設:一行一組、回報者算參與)。
  • {{ sr.label || '(未命名)' }} 直式錨點 只回報·不參與 #{{ sr.reporter_line_id.slice(1,9) }}

提醒:回報者設定只影響「之後」收到的新回報;既有回報請用每則的「只回報?」開關逐則調整。

禱告收集群

收集 Bot 所在的群會自動登錄;暫停後該群即不再被動解析(不必把 Bot 踢出群)。

尚無收集群(Bot 收到第一則群訊息後自動出現)。
  • {{ g.label || '(未命名群)' }} {{ g.line_group_id }}
    收集中 已暫停

禱告回報

名字對不到會友的標紅;點「指派」搜尋會友手動接上。回報者未對到也可在此指派。

目前沒有「{{ {needs_review:'待處理',parsed:'已完成',unparsed:'無法解析',all:'任何'}[prayerStatusFilter] }}」的回報。
  • {{ r.report_date || '—' }} {{ r.report_type }} {{ {parsed:'已完成',needs_review:'待處理',unparsed:'無法解析'}[r.status] || r.status }}
    原文:{{ r.raw_text }}

帳號管理

管理系統後台登入帳號與角色權限

{{ r.l }} {{ r.d }}

所有帳號

共 {{ adminAccountList.length }} 個 顯示 {{ filteredAdminAccounts.length }} / {{ adminAccountList.length }} 個 停用 {{ adminAccountInactiveCount }} ⚠ 長期未登入 {{ adminAccountStaleCount }}
帳號 {{ accountSortIndicator('username') }} 顯示名稱 {{ accountSortIndicator('display_name') }} 角色 {{ accountSortIndicator('role') }} 所屬單位 狀態 2FA 最後登入 {{ accountSortIndicator('last_login_at') }} 操作
{{ a.username }} 代設
{{ a.display_name }}
{{ a.user_name }}[{{ a.user_status }}]
{{ a.user_email }}
{{ {admin:'管理員',pastor:'牧者',leader:'小組長',checkin:'簽到站',teacher:'兒童班老師',dataop:'資處人員'}[a.role] || a.role }} 未指派 — 請編輯 停用 啟用 已啟用
{{ formatRelativeTime(a.last_login_at) }} {{ formatDateTime(a.last_login_at) }} 長期未登入
從未登入
載入中…
沒有符合條件的帳號

{{ accountFormId ? '編輯帳號' : '新增帳號' }}

不點此按鈕、密碼維持不變。

設定新密碼(至少 10 字元,需混合大小寫/數字/符號至少兩類)

兩次密碼輸入不一致

已選 {{ accountForm.unit_ids.length }} 個
尚無組織單位
{{ (accountFormSelectedUserName || '?').slice(0,1) }}
{{ accountFormSelectedUserName || '(已連結會友)' }}

沒有符合的會友

{{ accountFormError }}

簽到站裝置

用 token 取代密碼共用:每台簽到機獨立 token,可隨時撤銷

名稱 備註 狀態 最後使用 操作
{{ d.name }} {{ d.note || '—' }} 啟用 停用
{{ formatRelativeTime(d.last_seen_at) }} {{ formatDateTime(d.last_seen_at) }} · {{ d.last_seen_ip }}
從未使用
尚無裝置。點「新增裝置」建立第一台簽到站。

{{ deviceFormId ? '編輯裝置' : '新增裝置' }}

{{ deviceFormError }}

{{ deviceTokenShow.title }}

此 token 只會顯示這一次。請立即複製或開啟下方配對網址,關閉此視窗後將無法再次取得。

建議搭配 QR Code 產生器讓簽到機掃碼開啟。

{{ orgPersonName }}的職權

此人目前沒有任何牧養職權。
  • {{ p.position_name }}

教會層級職分

不隸屬單一單位的全域職分。主任牧師/師母、牧師為全教會可視;部門主責掌該部門全教會。

指派職分

  • {{ m.name }}{{ m.phone || '' }}

{{ c.name }}

  • {{ h.department_name }}

尚無

← 從左側選擇一個單位,即可看到它的負責人、同工與下層
{{ orgDetailUnit.code }}

{{ orgDetailUnit.leader_name || orgDetailUnit.name || '未命名單位' }}

{{ orgLevelName(orgDetailUnit.level) }}
  • {{ m.name }}{{ m.phone || '' }}
已連結:{{ editingUnit.leader_name }}

{{ orgLeaderTitle(orgDetailUnit.level) }}

(未連結會友帳號)

未指定

同工

載入中…

尚無同工

  • {{ orgCoworkerLabel(cw.role) }} · {{ cw.role === 'writer' ? '可編輯' : '可檢視' }}

下層單位 · {{ orgDetailChildren.length }}

  • {{ m.name }}{{ m.phone || '' }}
負責人:{{ newUnitLeader[orgDetailChildLevel.level].name }}

尚無下層單位

牧養組織與職權 · 以人看

以「人」為中心:一個人所有職分(一人可多筆,如同時是小組長與區牧助理)。切「以單位看」則以單位/組織樹檢視。兩者同一份資料、即時同步。

  • {{ m.name }} {{ m.phone || '' }}

{{ posSelected.name }}

目前職分

尚無職分。

{{ p.position_name }} · {{ p.unit_code }} · {{ p.department_name }}

新增職分

此為全域職分(無需指定單位)。

有職分的會友({{ positionsOverview.length }})

{{ row.name }}
{{ p.position_name }}·{{ p.unit_code }}·{{ p.department_name }}

修正建議

發現會友個資有誤時,在這裡提報建議;由資處審核後套用。個人資料只有資處能直接修改,其他人透過此管道建議。

提報一筆修正建議

  • {{ m.name }} {{ m.phone || '' }}
已送出,待資處審核。

建議清單({{ corrQueue.length }})

目前沒有此狀態的建議。

{{ c.user_name }} · {{ c.field_label }}
{{ {pending:'待審核',applied:'已套用',rejected:'已駁回'}[c.status] }}
{{ c.current_value || '(空)' }} {{ c.proposed_value || '(清空)' }}

原因:{{ c.reason }}

由 {{ c.submitted_by }} 提報 · {{ c.reviewed_by }} 已處理

直播場次

維護每個主日的 YouTube 連結與重播開放區間(供已核准的線上會友觀看與簽到)。

{{ streamForm.id ? '編輯場次' : '新增場次' }}

{{ streamFormError }}

主日 聚會 YouTube 重播區間
{{ s.service_date }} {{ s.gathering_name }} {{ s.youtube_url }} {{ (s.effective_open_at||'').slice(0,16).replace('T',' ') }}
~ {{ (s.effective_close_at||'').slice(0,16).replace('T',' ') }}
尚無直播場次。

線上申請終審

區牧初審通過的線上聚會申請,由管理者做最後核准。

載入中…
目前沒有資料。

{{ a.target_user_name }}

{{ a.org_unit_label }}

範圍:{{ a.gathering_name }} · {{ a.start_date }}{{ a.start_date }} ~ {{ a.end_date }}

原因:{{ a.reason }}

由 {{ a.proposed_by_name }}({{ a.proposer_kind === 'pastor' ? '區牧' : '小組長' }})提出 · 區牧初審:{{ a.pastor_reviewed_by || '—' }}

{{ a.status === 'approved' ? '✓ 已核准' : ('已退回' + (a.reject_reason ? ':' + a.reject_reason : '')) }}

簽到連結

{{ checkinLinkGathering.name }}

現場 LINE 連結給實體聚會會友使用;線上簽到連結可提供給線上會友輸入電話或姓名完成簽到。

尚未設定 LIFF ID(.env 的 LIFF_ID),以上為備用網址格式

{{ onlineCheckinError }}

連結每小時更新一次;電話無法比對或同名時,會進入待確認名單。

使用方式

1. 實體會友使用 LINE LIFF 或現場機台

2. 線上會友使用線上簽到連結

3. 找不到會友或資料不唯一時,到「線上簽到待確認」處理

{{ selectedUserDetail?.name ?? '載入中…' }}

已安息 {{ selectedUserDetail.deceased_date ? formatBirthday(selectedUserDetail.deceased_date) : '' }}

生命成長壘圖

{{ base }}

{{ m.label }}

{{ selectedUserDetail[m.key] ? formatBirthday(selectedUserDetail[m.key]) : '未完成' }}

受洗資訊

受洗狀態 {{ selectedUserDetail.is_baptized ? '已受洗' : '未受洗' }}
嬰兒洗禮 {{ formatBirthday(selectedUserDetail.infant_baptism_date) }} · {{ selectedUserDetail.infant_baptism_church }} 本堂
堅信禮 {{ formatBirthday(selectedUserDetail.confirmation_date) }} · {{ selectedUserDetail.confirmation_church }} 本堂
信徒受洗 {{ formatBirthday(selectedUserDetail.baptism_date) }} {{ selectedUserDetail.baptism_batch }} · {{ selectedUserDetail.baptism_church }} 本堂

基本個資

手機號碼

{{ selectedUserDetail.phone || '—' }}

市話

{{ selectedUserDetail.landline || '—' }}

性別

{{ selectedUserDetail.gender || '—' }}

婚姻狀況

{{ selectedUserDetail.marital_status || '—' }}

生日

{{ formatBirthYMD(selectedUserDetail.birth_year, selectedUserDetail.birth_month, selectedUserDetail.birth_day) }}

年齡族群

{{ selectedUserDetail.age_group || '—' }}

族群

{{ selectedUserDetail.demographic || '—' }}

LINE 綁定

{{ selectedUserDetail.line_id ? '已綁定' : '未綁定' }}

實體卡片

{{ selectedUserDetail.card_id }} 未綁定

累積出席

{{ selectedUserDetail.total_attendance }}

電子郵件

{{ selectedUserDetail.email }}

聯絡地址

{{ selectedUserDetail.address }}

社會生活

職業狀態

{{ selectedUserDetail.life_stage }}

身分類別

{{ selectedUserDetail.identity_type || '—' }}

所屬單位

{{ selectedUserDetail.organization || '—' }}

職稱 / 科系

{{ selectedUserDetail.title_department || '—' }}

牧養組織

{{ (orgLevels.find(l=>l.level===m.level)||{}).display_name || ('L'+m.level) }}

{{ m.unit_code }} {{ m.unit_name || (m.unit_code ? '' : '(未命名單位 #' + m.org_unit_id + ')') }}

牧養追蹤

聚會狀態

{{ selectedUserDetail.attendance_status || '—' }}

固定聚會(統計)

{{ selectedUserDetail.regular_gathering_name || '—' }}

邀請人

{{ selectedUserDetail.inviter || '—' }}

與會日期

{{ formatBirthday(selectedUserDetail.first_visit_date) }}

加入系統日期

{{ formatUtcDate(selectedUserDetail.created_at) }}

取消轉回日

{{ formatBirthday(selectedUserDetail.return_date) }}

牧養記錄

{{ n.unit_name }} · {{ n.week_start }}

{{ n.note }}

關懷記錄

{{ c.week_start }} · {{ c.unit_name }}

簽到紀錄 {{ selectedUserDetail.total_attendance }} 筆

近 12 週出席(由遠至近)

{{ w.count || '' }}
# 活動 日期與時間
{{ idx + 1 }} {{ rec.event_name }} {{ formatDateTime(rec.check_in_time) }}

尚無簽到紀錄

改名歷史

{{ formatBirthday(h.changed_date) }} 曾用名: {{ h.former_name }} ({{ h.note }})

設定 Google Authenticator

產生 QR Code 中…

此帳號已啟用雙重驗證

您的 Google Authenticator 綁定正常,登入時會要求驗證碼。
若更換手機或要重新綁定,請點「重新綁定」——這會作廢目前的綁定,需重新掃碼。

步驟說明

  1. 開啟手機的 Google Authenticator
  2. 點「+」→「掃描 QR Code」
  3. 掃描下方 QR Code
  4. 輸入 App 顯示的 6 位數驗證碼並送出
QR Code

無法掃描?手動輸入金鑰:

{{ tfaSecret }}

{{ tfaError }}

雙重驗證已啟用!

下次登入時需輸入 Google Authenticator 驗證碼。

{{ currentMustChange ? '請先變更密碼' : '修改密碼' }}

此密碼為管理員代設或初始密碼

為保護您的帳號安全,請設定一組僅您本人知道的新密碼後才能繼續使用系統。

兩次密碼輸入不一致

{{ pwAlert.message }}