忘記密碼

輸入您的帳號名稱,我們會將重設密碼連結寄到您綁定的 email。不知道帳號名稱請洽管理員。

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

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

管理員與資處登入一定要雙重驗證(Google Authenticator)。完成設定前,其他功能都無法使用。

LIFF 牧養同工系統目前暫停中

同工打開 LIFF 只會看到「整理中」說明(連結管理員帳號的會友例外);LINE 推播與 Bot 的同工功能也暫停。點這裡到開關。

前往開關

線上聚會的 YouTube 網址還沒貼

{{ streamMissing.map(m => m.name + '(' + m.date.slice(5).replace('-', '/') + (m.opened ? ',已經開放' : '') + ')').join('、') }}。會友點連結時會看到「網址還沒準備好」。點這裡去貼。

前往貼上

總覽

{{ todayDateStr }}・本週 {{ dashboardData.week_label }}

登記會友
{{ userList.length.toLocaleString() }}
已綁定 LINE {{ userList.filter(u => u.line_id).length }} 人
本週主日
{{ dashboardData ? ((dashboardData.week_summary['主日'] || {}).person_times ?? '—') : '—' }}
不重複 {{ (dashboardData.week_summary['主日'] || {}).unique ?? 0 }} 人・新朋友 {{ dashboardData.new_visitors ? dashboardData.new_visitors.count : 0 }}
人次
今日簽到
{{ todayAttendancePeopleCount }}
共 {{ attendanceList.length }} 筆紀錄
待我簽核
{{ (isAdmin || isDataOp) ? wfB.inbox.length : '—' }}
{{ dashTodo.failed ? '另有 ' + dashTodo.failed + ' 張執行失敗' : '申請與簽核' }}

待辦

近 12 週主日人數

手機版
{{ dashTrendLoading ? '載入中…' : '尚無資料' }}
{{ dashTrend[dashTrend.length - 1].v }} 比上週 {{ dashTrendDelta >= 0 ? '+' : '' }}{{ dashTrendDelta }} 人次・含線上
{{ w.short }}

今日簽到清單

{{ 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 }}
可使用自助簽到

會友名單

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

找不到符合條件的會友

# 姓名 電話 LINE 綁定 操作

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

簽到系統

啟動各堂次簽到機台、取得 LINE 簽到連結,並查看今日名單

聚會排程
{{ gatheringList.length }}
可啟動簽到機台
今日簽到
{{ todayAttendancePeopleCount }}
共 {{ attendanceList.length }} 筆簽到紀錄

各堂次簽到工具

啟動現場機台或取得 LINE 自助簽到連結・共 {{ gatheringList.length }} 堂
聚會排程載入失敗(不是沒有聚會)。請重新整理,若持續發生請重新登入。
尚無聚會排程
{{ g.category || '主日' }} {{ g.name }} {{ g.date }} {{ g.start_time }}–{{ g.end_time }} ・{{ g.location }}

今日即時名單

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

今日尚無簽到紀錄

線上簽到待確認

{{ 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 || '待確認' }}
待管理同工處理

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

點名補登

為各小組成員補登出席紀錄

跨小組搜尋成員 輸入名字直接定位到他所屬的小組
搜尋中…
找不到符合「{{ memberSearchQuery }}」的成員
{{ rollCallRoster ? rollCallRoster.week_label : rollCallWeekLabel }}

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

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

本週沒有排定的聚會

已選 {{ rollCallPendingCount }} 筆補登

成功補登 {{ rollCallResult.created }} 筆 ({{ rollCallResult.skipped }} 筆重複略過) ({{ rollCallResult.future_skipped }} 筆聚會尚未開始,略過) ({{ rollCallResult.closed_skipped }} 筆聚會已停用或不在那一天,未補登;請重新整理名單)

聚會排程

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

開放中的聚會
{{ gatheringList.length }}
{{ closedGatheringCount ? '另有 ' + closedGatheringCount + ' 場已結束/停用' : '目前可用排程' }}
例行聚會
{{ gatheringList.filter(g => g.gathering_type === 'routine').length }}
每週固定排程
單次活動
{{ gatheringList.filter(g => g.gathering_type === 'one_off').length }}
特別聚會與活動

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

單次聚會過了日期會自動「已結束」;固定聚會不再舉行時請按「停用」。收起來的聚會,出席紀錄與統計都照常保留。

載入中…

聚會排程載入失敗(不是沒有聚會)。請重新整理,若持續發生請重新登入。

{{ closedGatheringCount && !showClosedGatherings ? '目前沒有開放中的聚會(勾選上方「顯示已結束/停用」可查看收起來的)' : '尚無聚會排程,點右上角「新增聚會」開始安排' }}

名稱 日期 時間 地點 類別 類型 接續聚會 操作
{{ g.name }} 兒童聚會 {{ g.status_label }}

停用原因:{{ g.deactivated_reason }}({{ g.deactivated_by }})

{{ g.attendance_count }} 筆出席紀錄(保留)

{{ 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 }}

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

LIFF 故障備援(試算表)

LIFF 小組回報整個無法使用時,改用 Google 試算表補填出席

什麼時候用:只有在 LIFF(小組長手機上的回報頁)整個無法使用時——例如 LINE 或 LIFF 服務中斷、網路問題。平常的回報請小組長照常用 LIFF。

步驟:① 下方選週次、按「產生」,每個小組產生一份試算表(已簽到的自動打勾)→ ② 把連結傳給小組長補填 → ③ 填完後按「回收」,結果寫回正式出席紀錄。

限制:產生時只列出「當下已經開始」的聚會;回收時,聚會開始時間晚於回收當下的勾選一律不寫入(結果會列出)。試算表不帶任何敏感註記;回收時若某位會友同一週已有 LIFF 寫的註記,不會被覆寫(會列出衝突)。

只是要補幾個人的出席,用「點名補登」比較快。

步驟一:產生小組長報表

系統會依最低啟用的組織層級(小組)分組,每個小組產生一份試算表,已簽到者自動打勾,發給小組長補填漏掉的人。只會列出「產生當下已經開始」的聚會,也不會帶任何敏感註記。

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

步驟二:回收報表

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

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

{{ singleSyncNote.unit_name }} 回收完成 —— 新增 {{ singleSyncNote.added }} 筆出席紀錄

聚會還沒開始,沒有寫入:{{ b.gathering_name }}({{ b.count }} 筆,{{ b.starts_at.replace('T', ' ') }} 開始)

這幾位本週已有 LIFF 寫的註記,試算表裡的註記沒有覆寫:{{ singleSyncNote.note_conflicts.map(c => c.user_name).join('、') }}

{{ e }}

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

    {{ r.unit_name }}

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

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

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

{{ syncSheetError }}

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

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

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

聚會還沒開始,沒有寫入:{{ b.gathering_name }}({{ b.count }} 筆,{{ b.starts_at.replace('T', ' ') }} 開始)

這幾位本週已有 LIFF 寫的註記,試算表裡的註記沒有覆寫:{{ syncSheetResult.note_conflicts.map(c => c.user_name).join('、') }}

警告:

・{{ 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 }}
載入中…

—

這一週早於出席資料的起點({{ dashboardData.data_start || '—' }}),沒有資料可以計算,所以不顯示數字。

{{ pastoralMetricsError }}
載入中…

—

這一週早於出席資料的起點({{ pastoralMetrics.data_start || '—' }}),沒有資料可以計算,所以不顯示數字。

牧養摘要

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

{{ 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 || '—' }}

{{ n.author }} 寫

# 姓名 小組 操作
{{ 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 }}

{{ row.label }} {{ row.text }}

標「含推定」的週:有幾位會友是哪一週換組還沒確認,確認之後數字可能會變;人數在 5/15 之後是當時記下的,不會因為確認而變,會變的是這幾個人是誰,連帶的出席、活躍。

出席趨勢圖

單位:人

{{ w.week_label }}{{ woAdminTag(trendData, w.week_start) }}▲ 組織調整 {{ w.categories[cat].attendees }} ({{ (w.categories[cat].rate*100).toFixed(0) }}%) —

系統 {{ trendData.activity_from }} 上線之前的週只有出席人數,沒有活躍會友的計算(活躍率不顯示)。

載入中…

時間矩陣

聚會列數

{{ trendMatrixData.summary.gathering_row_count }}

小組列數

{{ trendMatrixData.summary.group_row_count }}

各堂平均週出席

{{ trendMatrixData.summary.gathering_weekly_avg }}

小組平均週出席

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

{{ region.label }} {{ region.leaders_text }}

{{ region.group_count }} 組 · 活躍 {{ region.active_members ?? '—' }} / 總 {{ region.total_members }}

小組 {{ compactWeekLabel(w.week_label) }}{{ woAdminTag(trendMatrixData, w.week_start) }}▲ 組織調整 平均 最近 vs上週
{{ region.groups.length ? (region.level_name || '') + '小計' : '本單位' }} {{ v }} — {{ region.avg }} {{ region.last || '—' }} {{ wowLabel(region.values) }}

{{ g.label }} {{ g.leaders_text }}

活躍 {{ g.active_members ?? '—' }} / 總 {{ g.total_members }}

{{ v }} — {{ g.avg }} {{ g.last || '—' }} {{ wowLabel(g.values) }}
{{ trendMatrixView === 'gatherings' ? '聚會' : '小組' }} {{ compactWeekLabel(w.week_label) }}{{ woAdminTag(trendMatrixData, w.week_start) }}▲ 組織調整 平均 最近 vs上週

{{ row.label }}

{{ v }} — {{ row.avg }} {{ row.last || '—' }} {{ wowLabel(row.values) }}

上色規則:僅當該格偏離該列近期平均 ±15%(且差距 ≥3)才標色——紅=明顯偏低、綠=明顯偏高,其餘留白。

此區間沒有可顯示的資料

歷週指標比較 僅標示偏離該列近期平均 ±15% 的週(缺席、資料缺口等指標紅綠方向相反)

指標 {{ w.week_label.replace(/^\d{4}\//, '').replace(/(.+)$/, '') }}{{ woAdminTag(pivotData, w.week_start) }}▲ 組織調整 本週 vs 上週

「資料缺口」以「當下使用者欄位」計算,部署前的歷史週可能無記錄而顯示 —。 「久未出席」=狀態為未穩定,但近 90 天沒有出席;「未穩定會友」只算近 90 天有出席的人。 出席資料從 {{ pivotData.data_start }} 才開始,所以 {{ pivotData.dormant_full_from }} 那一週之前,出席資料未滿 90 天,無法區分「未穩定會友」與「久未出席」,這兩列顯示「—」,請看「未穩定合計」。 出席資料從 {{ pivotData.data_start || '—' }} 開始,在那之前的週沒有資料可算,一律顯示 —(不是 0)。 系統 {{ pivotData.activity_from }} 上線之前的週只有出席人數,沒有活躍會友的計算,活躍會友、未穩定、久未出席、小組缺席與狀態流動顯示「—」。

門訓進度

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

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

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

系統設定

{{ cwPanel.unitName }} · 同工

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

新增同工

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

解散「{{ orgDissolveDlg.label }}」

解散後無法恢復。單位會留下紀錄、不再出現在任何清單;負責人、第二位區長、同工與職分一併清掉。

檢查中…

{{ orgDissolveDlg.err }}

操作步驟:

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

步驟一:下載空白範本

步驟二:上傳填寫好的 Excel

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

步驟三:確認預覽後匯入

共 {{ importPreview.total }} 筆 新增 {{ importPreview.new_count }} 筆 更新 {{ importPreview.update_count }} 筆 疑似同一人 {{ importPreview.suspect_count }} 筆(需要選擇,沒選的不會匯入) 有誤 {{ importPreview.invalid_count }} 筆(點此展開) 組織欄位未匹配 {{ orgUnresolvedCount }} 筆(點此展開)

有 {{ importPreview.blocked_count }} 列的手機或卡號已登記在別的會友名下,而且姓名對不上(或沒填姓名)——這些列整列不匯入,不會更新也不會新增,請資處先確認。原因寫在最右邊的「錯誤說明」。

「疑似同一人」=手機和卡號都沒對到任何人,但有下面任一種情形:①姓名和初訪日跟一位既有會友一樣;②姓名跟既有會友一樣,但初訪日不同或沒填;③這個檔案裡前面已經有同一個姓名(分不出是重複的一列,還是剛好同名的兩個人)。請在最右邊逐列選擇:是同一人就更新既有資料(第③種沒有既有會友可以更新,只能選新增),不是就新增一位;兩個都沒選,這一列就不會匯入。

以下牧養組織欄位在 Excel 中未找到,該層級資料將不會匯入: {{ orgColsMissing.join('、') }}。 請確認 Excel 第一列的標題文字與系統設定的顯示名稱完全一致。

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

這些列的牧養歸屬不會寫入(其餘欄位照常匯入)。同代號好幾個而沒填上一層時會顯示「不明確」,請補上牧區再匯。

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

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

第 {{ 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(';') || '' }} 牧養歸屬不會寫入:{{ row.data.org_issue }} 提醒:{{ w }}
{{ suspectLabel(row) }}
還有 {{ importSuspectUnchosen }} 筆疑似同一人沒有選擇,這幾列不會匯入。

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

匯入完成!

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

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

略過 {{ importResult.skipped.length }} 筆(沒有匯入),其中 {{ importResult.blocked_count }} 筆是手機或卡號屬於別人而被整列擋下。

第 {{ sk.row || '?' }} 列:{{ sk.reason }}

疑似同一人沒有選擇:{{ importResult.suspect_unchosen }} 列沒有匯入。

{{ importResult.org_skipped.length }} 列的牧養歸屬沒有寫入(其餘欄位照常匯入):

第 {{ o.row || '?' }} 列:{{ o.reason }}

牧養組織寫入筆數:

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

維護模式

{{ maint.on ? '維護中' : '正常服務' }}

開啟後,教會外的連線只會看到維護頁;教會內網照常可用。維護期間可從維護頁下方的「管理員」連結登入控制台關閉。

維護目錄未掛載到 API,無法從這裡開關。

{{ maint.until ? '預計 ' + maint.until + ' 恢復' : '未填恢復時間' }} 由 {{ maint.by }} 於 {{ (maint.at || '').replace('T', ' ') }} 開啟

LIFF 牧養同工系統

{{ liffOpen.open ? '開放中' : '暫停中' }}

暫停時:同工用 LINE 打開牧養同工系統(含申請與簽核、統計、活動報名、綁定確認頁、兒童堂現場點名、版本紀錄、問題回報)只會看到「整理中」說明,已登入的人下一個動作也會被擋; 連結您的管理員帳號的會友例外,可以照常進去測試(資處不例外)。

暫停期間,所有會把同工帶進牧養同工系統的 LINE 推播(每日待辦彙整、估算提醒、報表與節期提醒、週指標卡、群組估算名單)都不發,主 Bot 對同工的功能(缺席卡、「已關心」、估算名單、回報)只回一句整理中說明。 簽到機、會友 LINE 掃碼簽到、線上簽到、後台、禱告收集 Bot 不受影響。每次切換都會寫入稽核紀錄。

LIFF 身分切換範圍

{{ liffScope.on ? '依身分縮小(正常)' : '已關閉:一律合併範圍' }}

開啟時,同工在手機(LINE)上選的身分會縮小範圍:統計頁、會友資料、彙總卡、我的準確度、新朋友、可提出申請的單位都只算那個身分。 選到只能看的身分(例如牧師)時,估算、節期、新朋友一律不能填。簽核、通知、協助綁定不分身分。

這是緊急開關:如果切換身分後畫面出問題,先在這裡關閉,所有人立刻回到「本人全部職分合併」的範圍(和 P15 之前一樣)。每次切換都會寫入稽核紀錄。

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


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

分鐘(0 = 不提前)

顯示在兩台簽到機、投影 QR 與 LINE 簽到頁的左上角。清空就不顯示那一行(最多 40 字)。


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

已儲存

門訓・事工項目

會友檔案裡「門訓」「事工」「其他紀錄」三個分頁可以記錄的項目。門訓部管門訓、事工部管事工,所以每個項目都屬於一個分頁。已經有紀錄的項目只能停用,不能刪除(停用後只是新增紀錄時選不到,原有的紀錄還在)。你可以看清單,只有管理員能修改。

{{ mrt.error }}

載入中…

這個分頁還沒有任何項目。

新增項目(加到「{{ mrtSectionLabel }}」)

牧養組織診斷

顯示匯入時系統能識別的所有代碼、名稱格式,可與 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.error }}

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 推播用量

牧養助理頻道只推給審核與負責的同工,不推給會友。簽核彙整、線上聚會開放前提醒、新回報通知共用同一份每月預算;預算不夠時越不重要的越先省,改發站內通知。晚上 10 點到早上 7 點不推。

{{ lineBudget.month }}:已推 {{ lineBudget.used }} 則/預算 {{ lineBudget.budget }} 則(還剩 {{ lineBudget.remaining }} 則) LINE 通知額度已用完,本月停推
  • {{ s.label }}:{{ s.count }} 則
  • 本月還沒有推出任何提醒

各類提醒本月最多用到第幾則: {{ t.name }} {{ t.limit }}

方案目前每月 200 則,預設 180(留 20 則給手動測試與意外);改的時候要填原因。
{{ lineBudgetMsg.text }}
載入中…

報名回報群組

把牧養助理拉進 LINE 群組後,那個群組會出現在這裡。按「設為報名回報群組」之後,群組裡任何人打「@牧養助理 報名」,牧養助理就回覆全教會的活動報名統計(和牧養同工系統「複製報名統計」大群組那份一樣,含名字)。用回覆送出,不扣 LINE 推播額度。

還沒有任何群組。把牧養助理拉進群組之後按「重新整理」。

  • {{ g.group_name || '(群組名稱查不到)' }} {{ g.member_count != null ? g.member_count + ' 人' : '' }} {{ g.status_label }}
    加入:{{ fmtRegRptTime(g.joined_at) }} 同意:{{ fmtRegRptTime(g.approved_at) }}{{ g.approved_by ? '(' + g.approved_by + ')' : '' }} 最後一次回覆:{{ fmtRegRptTime(g.last_reply_at) }}
{{ regRptGroupMsg.text }}
載入中…

未綁定 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」確認有效;金鑰只貼在這裡,不要貼到別的地方。

近 24 小時:驗章成功 {{ collectorCfg.webhook_24h.ok }} 則、失敗 {{ collectorCfg.webhook_24h.fail }} 則 (最近一次成功 {{ fmtCollectorTime(collectorCfg.webhook_24h.last_ok_at) }};最近一次失敗 {{ fmtCollectorTime(collectorCfg.webhook_24h.last_fail_at) }})

失敗而沒有任何成功:通常是 Channel Secret 解不開或不對,請在下方重新輸入並儲存。

{{ collectorCfg.last_test_message }} {{ collectorAiMsg }}

回報者特例設定

兩種特例(可獨立勾選):直式錨點=名字逐行單寫、以自己的名字當錨點分組(例如某位同工習慣這樣寫); 只回報·不參與=此人只是回報、自己沒一起禱告(例如某位同工代為回報兒童禱告),統計/網路圖不把他算進去。

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

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

禱告收集群

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

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

匯入 LINE 聊天記錄(補回收集中斷期間的回報)

收集 Bot 沒收到的那段時間,可以把 LINE 群組「傳送聊天記錄」匯出的 .txt 傳上來補回。 檔案只在處理當下存在記憶體,不會存檔、內容不會寫進任何紀錄;匯入不會對 LINE 發出任何訊息。 檔案上限約 {{ prayerImport.maxMb }} MB,太大請在 LINE 縮小日期範圍後分段匯出。

怎麼匯出聊天記錄?
  1. 手機 LINE 進到要補的群組 → 右上角選單 →「其他設定」→「傳送聊天記錄」(電腦版:聊天室選單 →「儲存聊天記錄」;各版本選單名稱略有不同)。
  2. 選「文字檔」,存起來或寄給自己,再拿到這台電腦上傳。
  3. 要補幾個群組就各匯出一個檔,一個一個上傳。

預設範圍:8/07(最後一則正常收到的日子)到 恢復收集日({{ prayerImport.resumedOn }})的前一天 昨天(還沒收到恢復後的新訊息;恢復後會自動改成恢復日的前一天)。

{{ prayerImport.error }}

檔案共 {{ prayerImport.preview.stats.messages_total }} 則訊息({{ prayerImport.preview.stats.first_date || '—' }} ~ {{ prayerImport.preview.stats.last_date || '—' }}); 範圍 {{ prayerImport.preview.date_from }} ~ {{ prayerImport.preview.date_to }} 內 {{ prayerImport.preview.stats.in_range_messages }} 則, 其中 {{ prayerImport.preview.stats.report_messages }} 則是禱告回報(共 {{ prayerImport.preview.stats.reports }} 筆)。
將新增 {{ prayerImport.preview.stats.create.reports }} 筆(來自 {{ prayerImport.preview.stats.create.messages }} 則訊息)。
已經匯入過、不再重複:{{ prayerImport.preview.stats.dup_import.reports }} 筆。
與即時收到的重複、不再重複:{{ prayerImport.preview.stats.dup_webhook.reports }} 筆。
標為「略過此人」:{{ prayerImport.preview.stats.skipped.reports }} 筆。
還沒對應發訊者、暫不能匯入:{{ prayerImport.preview.stats.unmapped.reports }} 筆({{ prayerImport.preview.stats.unmapped.senders }} 位)。
範圍外的 {{ prayerImport.preview.stats.out_of_range_messages }} 則不會處理。
有 {{ prayerImport.preview.stats.unrecognized.count }} 行看不懂,已跳過、沒有猜(請打開原檔對照這些行號):
第 {{ u.line }} 行({{ u.reason }}) ⋯⋯
發訊者對應 (只列出有禱告回報的人;名字和會友或既有回報者一致的已自動對應,不一致的請在這裡選)
  • {{ sd.name }} {{ sd.report_messages }} 則回報・{{ sd.reports }} 筆 ⚠ 還沒對應 略過此人 自動對應:{{ sd.label }} 已對應:{{ sd.label }}
還有發訊者沒對應:請為每一位選擇回報者,或標成「略過此人」。 沒有需要新增的回報。 {{ prayerImport.progress }}
已匯入 {{ prayerImport.done.reports }} 筆回報({{ prayerImport.done.messages }} 則訊息)。 匯入的回報在下方「禱告回報」清單會標「補匯」,名字對不到的在「待辨識名字」處理。

待辨識名字 {{ prayerPendingNames.length }} 個

同一回報者的同名只需處理一次:指派或標非會友後,自動套用到這位回報者所有同名的待審回報。藍色按鈕是系統候選,一鍵完成(×N=歷史上曾指派給他 N 次、★=純歷史紀錄、→=名字命中、*=對照表、≈虛線=相似名請確認);排序已依歷史與情境加權,沒有合適候選再用搜尋框。

目前沒有待辨識的名字 🎉
  • {{ g.reporter_name }} 的 {{ g.name_text }}(多人同名) × {{ g.count }} 則・最近 {{ g.last_date }} |

禱告回報

逐則檢視與處理。名字對不到會友的標紅,可點藍色候選一鍵指派;批次處理請優先用上方「待辨識名字」。

目前沒有「{{ {needs_review:'待處理',parsed:'已完成',unparsed:'無法解析',all:'任何'}[prayerStatusFilter] }}」的回報。
  • {{ r.report_date || '—' }} {{ r.report_type }} 補匯 {{ {parsed:'已完成',needs_review:'待處理',unparsed:'無法解析'}[r.status] || r.status }}
    原文:{{ r.raw_text }}
    已更正:{{ r.corrected_text }}
    改好文字(需含日期與名字、一則一組)再按重新解析;原文永遠保留,名單整批換新、不影響對照表。

名字對照表(自動指派規則)

每次指派或標非會友,系統會記住「這位回報者的這個名字=這個人」,之後自動套用。配錯時在這裡刪除即可撤銷;只影響之後的自動比對,已指派的回報紀錄不會改動。

尚無對照規則(指派過名字後會自動出現)。
  • {{ aliasReporterName(a.reporter_line_id) }}: {{ a.alias_text }} → {{ a.member.name }} 非會友({{ a.display_name }}) 命中 {{ a.hit_count }} 次

帳號管理

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

{{ 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 ? '編輯帳號' : '新增帳號' }}

登入時要輸入的名稱,建立後不能修改。只能用英文字母、數字、底線(_)、點(.)、減號(-),例如 wang_ming。

帳號名稱(登入用,建立後不能修改) {{ accountForm.username }}

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

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

密碼至少 10 個字元,且需混合大寫、小寫、數字、符號中至少兩類。

目前 {{ accountForm.password.length }} 個字元,還差 {{ 10 - accountForm.password.length }} 個。

兩次密碼輸入不一致

小組長、區牧、牧師等牧養同工不需要後台帳號,請他們用 LINE 登入;後台的「小組長」角色目前暫停新增。

已選 {{ 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 產生器讓簽到機掃碼開啟。

連線監控

來源封鎖、登入失敗與掃描探測彙整;教會內網與容器內部永不封鎖

生效中封鎖

{{ connOv.active_blocks }}

{{ securityRangeText }}登入失敗

{{ connOv.login_fails }}

{{ securityRangeText }}掃描命中

{{ connOv.scan_hits }}

{{ securityRangeText }}自動封鎖

{{ connOv.auto_blocks }}

{{ connErr }}

統計範圍是{{ securityRangeText }}(含今天)。掃描命中=探測 .php、.env、WordPress、phpunit、.git 這類本系統不存在的路徑,由 nginx 擋在外面,不進稽核紀錄; 自動封鎖含登入失敗、帳號噴灑與掃描三種原因。同一個來源 10 分鐘內掃描命中 3 次會自動封鎖 24 小時(不寄信)。

封鎖紀錄 共 {{ blocksQ.total }} 筆

{{ securityRangeText }}建立的封鎖,加上目前仍生效的(長期封鎖不會因為超過天數就消失)。

原因 操作
{{ b.ip }} {{ b.kind_label }} {{ blockDetail(b) }} {{ b.reason }} {{ formatDateTime(b.created_at) }} 封鎖中 已解除({{ b.released_by || '—' }}) 已到期
{{ blocksQ.loading ? '載入中…' : (blocksQ.q.trim() ? '找不到符合的封鎖紀錄' : '目前沒有封鎖紀錄') }}
第 {{ blocksQ.page }} / {{ blocksQ.pages }} 頁

來源彙整 共 {{ sourcesQ.total }} 個來源

{{ securityRangeText }}(含今天)出現過的所有來源,不只前 100 個;預設登入失敗多的排前面,點欄位標題可排序。 登入失敗與帳號名來自稽核紀錄;掃描命中與被擋次數是 nginx 與最外層擋下的請求,不寫稽核。 教會內網(192.168.x.x 與本機)和容器內部(172.16.x.x、10.x.x.x:docker 網段,等同主機自己發出的請求)永不封鎖。

操作
{{ s.ip }} 教會內網 容器內部 {{ s.fails }} {{ s.names }} {{ s.scan_hits }} {{ s.blocked_hits }} {{ formatDateTime(s.last_seen) }} 封鎖中 —
{{ sourcesQ.loading ? '載入中…' : (sourcesQ.q.trim() ? '找不到符合的來源' : '這段期間沒有紀錄') }}
第 {{ sourcesQ.page }} / {{ sourcesQ.pages }} 頁

稽核紀錄

誰、何時、做了什麼、對誰。查閱也在內。

{{ chainResult.ok ? '✓ 完整性驗證通過' : '✗ 偵測到異常' }}

串鏈只涵蓋登入安全、資料異動、設定變更三類;查閱紀錄(含「查看會友資料」)因為要定期清理,不入鏈。 能偵測竄改但擋不住有資料庫權限的人,離線備份那份才是最終依據。

牧養組織與職權

點單位看它的負責人、同工與下層;點人看他所有職權。

{{ orgPersonName }}的職權

此人目前沒有任何牧養職權。
  • {{ p.position_name }}(職稱)(第二位)

層級設定

決定組織有哪幾層、各層叫什麼名字(例如牧區、區、小組)。改名在離開輸入框時儲存;啟用或停用層級會影響單位清單、會友歸屬與報表。

已啟用的層級

L{{ ls.level }}

尚未啟用任何層級,請先在下方點「啟用」。

未啟用的層級

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

新增{{ orgTopLevel.display_name }}

最上層單位沒有上層(例如新成立的牧區)。底下的下層單位,請在左側點選它之後再新增。

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

資料一致性

檢查 {{ orgIntegrity.counts.checked }} 位會友的牧養歸屬:一個人只能在一個小組,而且牧區、區、小組要在同一條線上。這裡只列出來,不會自動修改;要更正請到會友檔案編輯他的牧養組織。組長、同工的帶領關係不在這個檢查裡。

上下層不一致(違規)· {{ orgIntegrity.violations.length }}

目前沒有上下層不一致的會友。

  • {{ v.name }} {{ v.id8 }}

    {{ r.text }}

    目前登記:{{ v.units.map(x => x.level_name + '『' + x.path + '』').join(' ') || '(沒有)' }}

沒有編入任何單位(資訊)· {{ orgIntegrity.unassigned.length }}

這不是錯誤,只是還沒編進任何牧區或小組。

  • {{ u.name }}{{ u.id8 }}

未設上層的單位

這些單位沒有掛在任何上層底下,所以不會出現在對應上層的分組裡。點單位可查看、編輯{{ isAdmin ? '或刪除' : '' }}。

目前沒有。

{{ grp.level_name }}(未設所屬{{ grp.parent_name }})· {{ grp.units.length }}

教會層級職分與職稱

不隸屬單一單位的身分。職分帶權限(主任牧師、主任牧師(同權)、牧師為全教會可視;部門主責掌該部門);職稱只是身分標示(主任師母、助理牧師、傳道…),不帶任何權限,需要簽核請到「簽核關卡設定」指定。

職分(帶權限)

指派職分

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

{{ c.name }}

  • {{ h.department_name }}

尚無

部門與關卡

牧宣部是區牧的上級,可以「裁撤」與「恢復」:裁撤中牧宣部的簽核關卡與所有權限都不生效,簽核直接是 區長 → 區牧 → 主任牧師核簽人;恢復只恢復部門的權限,不恢復人,人要在這裡另外指派。機要是主任牧師的機要:存檔備查、歸檔文件、直播網址與提醒、活動設定、協助綁定 LINE、執行失敗的重試(不論牧宣部運作與否都歸機要;機要出缺時由主任牧師核簽人處理;機要沒有任何看牧養內容的權限)。

{{ deptS.err }}

{{ c.slot.name }}

{{ c.active ? '運作中' : '已裁撤' }}

{{ c.slot.dept_note }}

第一位{{ c.slot.user_name || (c.key === 'secretary' ? '尚未指定(存檔備查等事務由主任牧師核簽人處理)' : (c.active ? '尚未指定' : '—(裁撤時人選一律移除)')) }}
第二位{{ c.slot.alt_user_name || '尚未指定(選填,任一位簽就算)' }}
⚠ {{ c.slot.user_name }} 尚未綁定 LINE,必須先綁定才能擔任。
⚠ 第二位 {{ c.slot.alt_user_name }} 尚未綁定 LINE。

牧宣部裁撤中,不能指派人選;要先恢復。

區牧會議的成員

週二晚上的區牧會議,只有名單上的人看得到會議、紀錄與全部交辦;被交辦的人只看得到自己那一件。主任牧師核簽人的兩位人選要在名單上,才能確認完成交辦。這裡不會顯示任何會議內容。名單排序就是畫面上的順序。

{{ pmS.err }}

{{ pmS.msg }}

⚠ 主任牧師核簽人的人選 {{ pmS.missing.map(m => m.name).join('、') }} 還沒在名單上,他們會看不到區牧會議。

⚠ 名單上有機要(沒有牧養職分):{{ pmS.secretary.map(m => m.name).join('、') }}。開會時他也會在「各牧區近況」看到各牧區沒有標敏感的牧養事項內容(標了敏感的只看得到有這一件),也會看到全教會與各牧區的數字(議程「本週數字」,只有數字、沒有名字)。名單是管理員的決定,系統不擋。

  • {{ i + 1 }} {{ m.name }} 未綁 LINE

名單還是空的:還沒有任何人看得到區牧會議。

  • {{ m.name }}{{ m.org }}未綁 LINE

要先寫原因才能儲存。

職稱(只是身分標示,不帶權限)

指派職稱

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

{{ t.name }}已停用

尚無

職稱永遠不帶權限。代碼建立後不能改,也不能和職分的代碼相同。停用的職稱不會出現在指派選單,已經擔任的人不受影響。每個動作都會請你填寫原因並留稽核紀錄。

{{ orgTitleMgr.err }}

  • {{ t.code }} {{ t.holders }} 人

已解散的單位

解散一律留紀錄、無法恢復。這些單位不再出現在任何清單;過去的統計、稽核與歸檔文件仍對得到組名。

載入中…

目前沒有已解散的單位。

  • {{ d.parent_label ? (d.parent_label + '/') : '' }}{{ d.code || d.name || ('#' + d.id) }} {{ orgLevelName(d.level) }} {{ orgFmtDissolvedAt(d.dissolved_at) }}

    誰:{{ d.dissolved_by || '—' }}

    原因:{{ d.reason || '—' }}

    解散前的負責人:{{ [d.leader_name, d.co_leader_name].filter(Boolean).join('、') }}

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

{{ orgLeaderText(orgDetailUnit) || orgDetailUnit.name || '未命名單位' }}

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

{{ orgCoTitle(editingUnit.level) }}(選填;任一位{{ orgCoRoleWord(editingUnit.level) }}簽就算)

權限和區牧完全一樣:看得到整個牧區、區牧報表兩位都能寫。負責人是「代表」——「區牧報表還沒送出」「活動目標還沒訂」這類催寫的提醒只發給代表,其餘提醒兩位都收。

  • {{ m.name }} {{ [m.org_label, m.gender, m.birth_year ? (m.birth_year + '年生') : '', m.phone_tail ? ('手機末 ' + m.phone_tail) : '', m.id_prefix].filter(Boolean).join('・') }}
已連結:{{ editingUnit.co_leader_name }}

{{ editingUnit.coErr }}

兒童小組

不綁牧區、不綁代號;改選或取消就立刻不再適用。

{{ orgLeaderTitle(orgDetailUnit.level) }}

(未連結會友帳號)

未指定

{{ orgCoTitle(orgDetailUnit.level) }}

同工

載入中…

尚無同工

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

協助填寫

{{ rhAText(orgDetailUnit) }}

打開後,這一組所屬牧區的區牧可以指派一位「協助填寫」的人,替組長填這一組的報表。

{{ rhAErr(orgDetailUnit) }}

第二位小組長

{{ coSwText(orgDetailUnit) }}

打開後,這一組的區長(直屬牧區的組則是區牧)可以送申請,設定一位第二位小組長;權限跟組長一樣。有第二位時要先送申請拿掉,才能關掉。

{{ coSwErr(orgDetailUnit) }}

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

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

尚無下層單位

版本紀錄

系統每一版更新了什麼,都條列在這裡;之前跳出來過的也可以再看一次。

{{ relB.err }}

{{ relB.msg }}

活動管理

(原「節慶管理」,P68 起叫活動)建立活動之後,區長報表與區牧報表的填寫人會收到提醒,到卡片裡填總人數與其中新朋友的目標;活動顯示到活動日後 7 天。 選了預估方式的活動,會在同工手機「預估出席」裡出現(開放預估日起到第一場聚會開始)。機要(出缺時是主任牧師核簽人)也可以在手機「活動設定」建立與修改。

{{ fsB.msg }}

{{ fsB.err }}

{{ fsB.form.id ? '編輯活動' : '新增活動' }}

實際人數算哪幾場聚會(簽到;同一人只算一次;日期要在活動日前後 7 天內)

{{ fsB.form.err }}

載入中…

還沒有活動。按右上角「新增活動」建立。

名稱日期預估方式連結的報名活動節期狀態
{{ f.name }} {{ String(f.festival_date || '').slice(0, 10) }} {{ f.estimate_mode_label || '只訂目標' }}{{ f.track_invite ? '+邀約' : '' }}{{ f.gatherings.map(g => String(g.gathering_date).slice(5) + ' ' + g.name).join('、') }} {{ fsEventTitle(f.reg_event_id) }} {{ fsCampaignName(f.campaign_id) }} {{ f.is_active ? '啟用' : '已停用' }}

回報問題/提建議

哪裡怪怪的、或是有想法讓它更好用,跟我們說一聲;處理好會通知你。

活動報名

這裡的資料來自報名系統,保存期限到期會自動刪除;已連結會友的「參加過」紀錄會保留。

新建了會友之後,按「重新比對」讓自動比對重算;你已經確認過的不會被改。

{{ regB.rematch.msg }}

{{ regB.rematch.err }}

{{ regB.err }}

載入中…

離會與個資清理

離會要由資處或管理員逐一標記(沒有批次、沒有自動):標記之後他會從各種名單與目前的統計消失,標記之前每一週的統計數字都不會改變。離會滿 2 年自動清理個資;本人要求刪除則 7 天後自動清理(7 天內可撤回);已安息的會友標記滿 2 年清理。個資清理後無法復原,但出席與統計數字不變,姓名會變成「已清理的會友」。要標記某一位,請先打開他的會友檔案。

{{ dpS.err }}

載入中…

LINE 綁定管理

所有綁定都要經過核准:當面產生一次性 QR(10 分鐘、只能用一次、只能綁指定的那位),本人用自己的 LINE 掃描並按「確認綁定」。這裡處理全部對象,包括簽核關卡人選與沒有區牧的牧區。

{{ lbB.err }}

解除「{{ lbB.ub.name }}」的 LINE 綁定

⚠ 他是「{{ lbB.ub.slots.join('、') }}」關卡的人選,解除後這一關暫時沒有人能簽,請立刻重新產生 QR。

解除後,他舊的 LINE 登入立刻失效;之後要在「待協助綁定」重新產生 QR,由本人用新的 LINE 掃描。這個動作會寫入稽核。

{{ lbB.ub.err }}

{{ lbB.qr.name }}

{{ lbB.qr.roles.join('、') }}

已過期

{{ lbQrLeftText }}

只能用一次

請 {{ lbB.qr.name }} 用自己的 LINE 掃描這個 QR,再按「確認綁定」。
不方便當面時,可複製連結私訊給本人(10 分鐘內有效)。

{{ lbB.qr.msg }}

申請與簽核建置模式中

組織異動等申請的全部紀錄;核准後系統自動執行,結案文件由機要存檔備查。簽核主要由核簽人在 LINE 中完成。

簽核流程建置中,暫停受理組織異動;急件請聯絡資處。(建置期間,管理者直接調整組織與指派關卡人選不留紀錄;資處的調整照常記錄;個資修正不受影響。)

{{ wfB.detail.req_no }}・{{ wfB.detail.type_name }}

{{ wfB.detail.title }}

申請人 {{ wfB.detail.applicant_name }}・{{ (wfB.detail.created_at || '').replace('T', ' ').slice(0, 16) }}

{{ wfB.detail.status_label }}

目前這一關({{ wfB.detail.current_step_label }})已等待 {{ wfB.detail.waiting_days }} 天,超過 7 天;找不到人可簽

理由:{{ wfB.detail.reason }}

{{ row[0] }}{{ row[1] }}

簽核關卡

{{ s.step_no }}.

{{ s.label }}・{{ s.approver_name || (s.decision === 'skipped' ? '—' : '待指定') }}

{{ wfDecLabel(s) }}・{{ s.decided_at.replace('T', ' ').slice(0, 16) }}

系統說明:{{ s.sys_note }}

「{{ s.note }}」

{{ row[0] }}:{{ row[1] }}

執行失敗:{{ wfB.detail.error }}

這張單已核准,但系統執行失敗

已通知 {{ wfB.detail.failed_handler }}({{ wfB.detail.failed_handler_role || '機要' }})處理:可以「重試執行」,或決定不再執行而「結案(放棄執行)」。

文件產生失敗

這張單的歸檔文件沒有產生成功,已通知機要。{{ wfB.detail.can_regenerate ? '請按「重新產生」;成功後再下載、按「已存檔備查」。' : '請機要按「重新產生」。' }}

歸檔檔案不見了

這張單的歸檔檔案找不到了(資料庫還記著,檔案不在)。{{ wfB.detail.can_regenerate ? '請按「重新產生」,會產生新的一版;舊版紀錄保留。' + (wfB.detail.status === 'filing' ? '成功後再下載、按「已存檔備查」。' : '') : '請機要按「重新產生」,或由管理者處理。' }}

這張單是您自己提出的,不能自己確認;請由另一位資處或管理者確認。

{{ wfFilingHint(wfB.detail) }}

文件已更新,請重新下載新版。

{{ wfB.detail.doc_missing ? '重新產生之後,才會出現「下載」。' : '文件產生成功後,才會出現「下載」。' }}

輪到您簽核

結案(放棄執行)

這張單已核准、但系統執行失敗。結案後不會再執行,結果標示「未執行」,沒有任何異動生效;系統會產生文件送機要存檔(下載後按「已存檔備查」),並通知申請人。此動作無法復原。

{{ wfAb.err }}

轉交給別人代簽

關卡:{{ wfB.detail.current_step_label }}(原核簽人:{{ wfB.detail.current_approver || '無,找不到人可簽' }})。轉交後這一關固定由新的核簽人處理,單據與 PDF 會註記「由某某代簽」,並通知原核簽人。

  • {{ h.name }}{{ h.via }}

找不到符合的人(沒綁 LINE 又沒有連結後台帳號的人不會列出;發起人、已簽過的人、您自己都不能接手)。

已選:{{ wfTr.pick.name }}

{{ wfTr.err }}

歷程({{ wfB.detail.events.length }})

{{ (e.created_at || '').replace('T', ' ').slice(0, 16) }} {{ e.event }} {{ e.actor_name }}(後台帳號 {{ e.detail.admin }})

修正建議

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

提報一筆修正建議

  • {{ m.name }} {{ m.phone || '' }}
已送出{{ typeof corrSubmitOk === 'string' ? '(' + corrSubmitOk + ')' : '' }},待資處在「申請與簽核」審核。

個資修正的審核已併入「申請與簽核」,與其他申請同一個待辦清單;同工在 LINE 提出的也在那裡。

2026-10-06 以前的舊紀錄

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

目前沒有此狀態的建議。

{{ c.user_name }} · {{ c.field_label }}
{{ {pending:'待審核',applied:'已套用',rejected:'已駁回',migrated:'已搬到申請與簽核'}[c.status] }}
{{ c.current_value || '(空)' }} → {{ c.proposed_value || '(清空)' }}

原因:{{ c.reason }}

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

直播場次

線上聚會每週有三場:週六堂、週日堂(直播)與週三堂(錄影重播),每一場都要貼上它自己的 YouTube 網址(不公開影片,每一場的網址都不同)。會友在 LINE 點「線上聚會」就簽到並跳到這個網址;機要(出缺時是主任牧師核簽人)也能在手機上貼。

本週與下週的場次

還沒貼網址且快要開放(或已經開放):{{ streamStatus.missing.map(m => m.name + ' ' + m.date.slice(5).replace('-', '/')).join('、') }}

{{ r.name }}({{ r.mode }})

{{ r.date }} {{ r.open.slice(11, 16) }}–{{ r.close.slice(11, 16) }}

{{ r.url_ready ? '已貼網址' : (r.state === 'ended' ? '已結束(沒有貼)' : '還沒貼網址') }}

{{ 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',' ') }}
尚無直播場次。

線上聚會資格

已開通線上聚會的會友名單。

線上聚會申請已併入「申請與簽核」:區牧在 LINE 初審,管理者在那裡終審。

載入中…
目前沒有資料。

{{ a.type_name || a.target_user_name }}

{{ a.org_unit_label }}
{{ a.status === 'approved' ? '✓ 已核准' : ('已退回' + (a.reject_reason ? ':' + a.reject_reason : '')) }}
{{ t.text }}
回報截圖(放大)

請填寫異動原因

{{ reasonDlg.warn }}

{{ reasonDlg.what }}

{{ reasonDlg.note }}

簽到連結

{{ checkinLinkGathering.name }}

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

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

{{ onlineCheckinError }}

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

使用方式

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

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

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

{{ deptS.dlg.kind === 'abolish' ? '裁撤牧宣部' : '恢復牧宣部' }}

恢復之後:簽核回到 區長 → 區牧 → 牧宣部核簽人 → 主任牧師核簽人,運作中的牧宣部是區牧的上級、看得到全部資料(含敏感)。只恢復部門的權限,不恢復人:人要到這裡另外指派(第一位、第二位);指派之前這一關算出缺,由主任牧師核簽人補上。

{{ deptS.dlg.err }}

{{ tfaRequired ? '請先設定雙重驗證' : '設定 Google Authenticator' }}

產生 QR Code 中…

此帳號已啟用雙重驗證

為了保護會友資料,管理員與資處登入一定要雙重驗證

只要 3 個步驟、約 2 分鐘。完成之前,系統的其他功能都無法使用。

  1. 1 手機安裝驗證器 App:到 App Store 或 Google Play 搜尋「Google Authenticator」(Google 驗證器)並安裝。
  2. 2 掃描 QR Code:打開 App,點「+」→「掃描 QR 圖碼」,對準下方的圖。
  3. 3 輸入 6 碼:把 App 上顯示的 6 位數字填進最下面的格子,按「完成綁定」。

步驟說明

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

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

{{ tfaSecret }}

{{ tfaError }}

雙重驗證已啟用!

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

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

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

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

兩次密碼輸入不一致

{{ pwAlert.message }}