您的帳號尚未啟用雙重驗證 (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 }} 位);尚未辨識的請到「設定 → 禱告回報」指派或標非會友,數據才會完整。
- {{ 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 }} 次
點人=星狀聚焦(只亮他的連線)、拖曳節點移動、滾輪縮放、空白拖曳平移、點空白取消聚焦。
會友管理
查看會友資料;資料管理角色可新增與編輯
會友總數
{{ userList.length }}
目前系統建檔人數
目前篩選
{{ filteredUserList.length }}
符合搜尋條件
LINE 綁定
{{ userList.filter(u => u.line_id).length }}
可使用自助簽到
新增會友
基本個資
聯絡地址
新增牧養紀錄
記錄初次接觸、邀請來源、會籍狀態與後續牧養備註
受洗資訊
社會生活
教育程度
牧養組織
尚未啟用任何組織層級,請至「系統設定 › 牧養組織」頁面設定。
壘圖進度
{{ userAlert.type === 'success' ? '建立成功!' : '建立失敗' }}
{{ userAlert.message }}
{{ userAlert.uuid }}
會友名單
{{ filteredUserList.length }} / {{ userList.length }} 人找不到符合條件的會友
| # | 姓名 | 電話 | LINE 綁定 | 操作 |
|---|---|---|---|---|
| {{ i + 1 }} | {{ u.name }} 安息 #{{ (u.id || '').slice(0,8) }} | {{ u.phone || '—' }} | {{ u.line_id ? '已綁定' : '未綁定' }} |
|
| {{ i + 1 }} | {{ composeName(editForm.primary_name_lang, editForm.last_name, editForm.first_name, editForm.en_last_name, editForm.en_first_name, editForm.en_middle_name) || editForm.name }} (展開下方編輯) | (不變) |
|
|
|
姓名
主要語言
顯示姓名:
{{ composeName(editForm.primary_name_lang, editForm.last_name, editForm.first_name, editForm.en_last_name, editForm.en_first_name, editForm.en_middle_name) || editForm.name || '(請填寫姓名)' }}
基本個資
年
月
日
民國 {{ editForm.birth_year - 1911 }} 年
約 {{ computeAgeFromParts(editForm.birth_year) }} 歲
月/日不詳
聯絡地址 牧養追蹤 受洗資訊
受洗狀態
嬰兒洗禮
堅信禮
信徒受洗
社會生活 教育程度 職業狀態設為「學生」才可填
牧養備註 牧養組織 壘圖進度 |
||||
{{ canEditMember ? '尚無會友資料,請點選上方「新增會友」' : '尚無可檢視的會友資料' }}
簽到系統
開啟獨立頁面以供現場使用
聚會排程
{{ gatheringList.length }}
可啟動簽到機台
待確認線上簽到
{{ onlinePending.length }}
需要同工處理
今日簽到
{{ todayAttendancePeopleCount }}
共 {{ attendanceList.length }} 筆簽到紀錄
各堂次簽到工具
啟動現場機台或取得 LINE 自助簽到連結快速簽到
將 QR Code 對準框內,手機號碼將自動填入
支援手機號碼 QR Code 與條碼格式掃描
系統依當下時間自動帶入聚會名稱
{{ checkInAlert.type === 'success' ? '簽到成功!' : '簽到失敗' }}
{{ checkInAlert.message }}
{{ cardCheckInLoading ? '讀取中…' : '請感應卡片或輸入卡號後按 Enter' }}
點選上方區域後感應,或手動輸入卡號並按 Enter
{{ cardCheckInAlert.type === 'success' ? '簽到成功!' : '簽到失敗' }}
{{ cardCheckInAlert.message }}
線上簽到待確認
{{ onlinePending.length }} 筆| 送出時間 | 聚會 | 姓名 | 電話 | 小組 | 生日 | 原因 | 處理 |
|---|---|---|---|---|---|---|---|
| {{ 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) }} |
今日尚無簽到紀錄
點名補登
為兒童班或各小組成員補登出席紀錄
此帳號尚未指派班級,請聯絡管理員設定
名單人數
{{ rollCallRoster ? rollCallRoster.members.length : 0 }}
目前載入班級 / 小組
本週聚會日
{{ rollCallRoster ? rollCallRoster.days.length : 0 }}
可補登日期
待送出補登
{{ rollCallPendingCount }}
尚未寫入的選取項目
{{ rollCallRoster.unit.code }} {{ rollCallRoster.unit.name }}
{{ rollCallRoster.week_label }}・共 {{ rollCallRoster.members.length }} 人
已選 {{ rollCallPendingCount }} 筆補登
聚會排程
管理聚會時程,並啟動對應的簽到機台
聚會總數
{{ 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 }}
{{ it.label }}
{{ it.filled }} / {{ campaignDashData.total_members }} 人各小組推動進度
填寫率 = 已填寫狀態的人數 / 小組成員數
| 小組 | 成員 | {{ it.label }} |
|---|---|---|
|
{{ g.unit_label }}
{{ g.parent_label }}
|
{{ g.member_count }} |
{{ opt }} {{ stat.by_status[opt] }}
|
| 此週尚無任何小組推動資料 |
新朋友名單
小組長透過 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% 分界
| {{ 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_JSON、
GOOGLE_SHEET_TEMPLATE_ID、
GOOGLE_DRIVE_FOLDER_ID。
- {{ err }}
步驟二:回收報表
同步小組長回填結果,轉入正式出席紀錄
{{ bulkSyncResult.total_added > 0 ? '全部回收完成' : '已是最新狀態' }} —— 共新增 {{ bulkSyncResult.total_added }} 筆出席紀錄,回收 {{ bulkSyncResult.synced }} 份報表
{{ r.unit_name }}:{{ r.error }}
{{ r.unit_name }}:{{ r.errors.join('、') }}
-
{{ r.last_synced_at ? '已回收' : '待回收' }}
{{ r.unit_name }}
{{ fmtDatetime(r.last_synced_at) }}・新增 {{ r.sync_added ?? 0 }} 筆
手動回收(貼入試算表網址)
若要回收不在上方清單中的試算表,可直接貼入網址手動回收。
{{ syncSheetResult.added > 0 ? '回收完成' : '已是最新狀態' }}
新增出席紀錄:{{ syncSheetResult.added }} 筆
已有紀錄略過:{{ syncSheetResult.skipped }} 筆
警告:
・{{ e }}
小組出席圖
選擇牧區,系統自動產生所有子組的出席表{{ unitPhotoError }}
{{ 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 }} |
牧養摘要
彙整各小組本週見證、特殊狀況與個別會友回覆{{ group.testimony }}
{{ group.special_note }}
個別會友回覆
本週關懷名單
出席統計
教會週(五—四)為計算單位
牧養風險
新朋友漏斗
待跟進新人
目前沒有待跟進新人
小組健康表
出席率只計算小組聚會
| 小組 | 活躍 | 小組出席 | 出席率 | 新人 | 風險 | 回覆 | 關懷 |
|---|---|---|---|---|---|---|---|
|
{{ g.label }} {{ g.region }} |
{{ g.active_members }} | {{ (g.small_group_rate*100).toFixed(0) }}% | — | — | — | — | |
|
小組缺席風險
無
本週新人
無
週報回覆 / 關懷 個別回覆 {{ g.member_note_count }} 筆,已關懷 {{ g.care_count }} 人 |
|||||||
牧養待辦
{{ n.unit_name }}
{{ n.note }}
門訓推進
{{ base }}
{{ count }}
{{ step.label }}
資料品質
{{ issue.label }}
各小組出席明細
點擊人數查看名單
| 小組 | 活躍 | 未穩定 | 新人 | 主日(全體) | {{ cat }} | ||||
|---|---|---|---|---|---|---|---|---|---|
| 人數 | 出席 | 出席率 | 人數 | 出席 | 人次 | 出席人數 | |||
| {{ section.region }} {{ section.groups.length }} 組 | {{ section.groups.reduce((s,g)=>s+g.active_members,0) }} | {{ section.groups.reduce((s,g)=>s+(g.sunday_unique||0),0) || '—' }} | {{ (() => { const a = section.groups.reduce((s,g)=>s+g.active_members,0); const u = section.groups.reduce((s,g)=>s+(g.sunday_unique||0),0); return a ? (u/a*100).toFixed(0)+'%' : '—'; })() }} | {{ section.groups.reduce((s,g)=>s+(g.unstable_members||0),0) || '—' }} | {{ section.groups.reduce((s,g)=>s+(g.sunday_unique_unstable||0),0) || '—' }} | {{ section.groups.reduce((s,g)=>s+(g.new_visitors||0),0) || '—' }} | {{ section.groups.reduce((s,g)=>s+(g.sunday_times||0),0) || '—' }} | {{ section.groups.reduce((s,g)=>s+(g.sunday_unique_all||0),0) || '—' }} | {{ section.groups.reduce((s,g)=>s+(g.categories[cat]?.count||0),0) || '—' }} |
| {{ g.label }} | {{ g.active_members }} | — |
|
{{ g.unstable_members || '—' }} | {{ g.sunday_unique_unstable || '—' }} | {{ g.new_visitors || '—' }} | {{ g.sunday_times || '—' }} | {{ g.sunday_unique_all || '—' }} | — |
| 全體合計 | {{ dashboardData.group_matrix.reduce((s,g)=>s+g.active_members,0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.sunday_unique||0),0) }} | {{ (() => { const a = dashboardData.group_matrix.reduce((s,g)=>s+g.active_members,0); const u = dashboardData.group_matrix.reduce((s,g)=>s+(g.sunday_unique||0),0); return a ? (u/a*100).toFixed(0)+'%' : '—'; })() }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.unstable_members||0),0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.sunday_unique_unstable||0),0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.new_visitors||0),0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.sunday_times||0),0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.sunday_unique_all||0),0) }} | {{ dashboardData.group_matrix.reduce((s,g)=>s+(g.categories[cat]?.count||0),0) }} |
{{ 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 }}
| # | 姓名 | 小組 | 狀態 | 補充 | 操作 |
|---|---|---|---|---|---|
| {{ 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 || '—' }} |
{{ catLabel }}交叉出席明細
重複=本堂中曾在前面任一堂出席的人數
| 小組 |
{{ g.name }}
{{ g.date }}
|
合計出席 | |
|---|---|---|---|
| 出席 | 重複 | ||
| {{ section.region }} {{ section.groups.length }} 組 | {{ section.groups.reduce((s,r)=>s+(r.g_stats[g.idx]?.count||0),0) || '—' }} | {{ section.groups.reduce((s,r)=>s+(r.g_stats[g.idx]?.repeat||0),0) }} — | {{ section.groups.reduce((s,r)=>s+crossGatheringsByCategory[catLabel].reduce((ss,g)=>ss+(r.g_stats[g.idx]?.count||0)-(r.g_stats[g.idx]?.repeat||0),0),0) || '—' }} |
| {{ row.label }} | {{ row.g_stats[g.idx]?.count || '—' }} | {{ row.g_stats[g.idx]?.repeat }} — | {{ crossGatheringsByCategory[catLabel].reduce((s,g)=>s+(row.g_stats[g.idx]?.count||0)-(row.g_stats[g.idx]?.repeat||0),0) || '—' }} |
| 全體合計 | {{ crossData.rows.reduce((s,r)=>s+(r.g_stats[g.idx]?.count||0),0) || '—' }} | {{ crossData.rows.reduce((s,r)=>s+(r.g_stats[g.idx]?.repeat||0),0) }} — | {{ crossData.rows.reduce((s,r)=>s+crossGatheringsByCategory[catLabel].reduce((ss,g)=>ss+(r.g_stats[g.idx]?.count||0)-(r.g_stats[g.idx]?.repeat||0),0),0) || '—' }} |
各週聚會人數
以教會週彙整各堂與各小組出席狀況
統計週數
{{ 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 }} {{ row.category }} 牧區小計 · {{ row.group_count }} 組 · 活躍 {{ row.active_members }} / 總 {{ row.total_members }} {{ row.region || '未分牧區' }} · 活躍 {{ row.active_members }} / 總 {{ row.total_members }} |
{{ v }} — | {{ row.avg }} | {{ row.last || '—' }} |
歷週指標比較 數值越深表示該指標歷週相對越高
| 指標 | {{ w.week_label.replace(/^\d{4}\//, '').replace(/(.+)$/, '') }} | 本週 vs 上週 |
|---|---|---|
| {{ g.group }} | ||
| {{ m.label }} | {{ v == null ? '—' : v }} | {{ wowLabel(m.values) }} |
「資料缺口」以「當下使用者欄位」計算,部署前的歷史週可能無記錄而顯示 —。
活躍會員數
{{ 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 }} 人)
診斷指派| 期間 | 出席人數 | 活躍出席率 |
|---|---|---|
| {{ 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 | 操作 | |
|---|---|---|---|---|---|---|---|---|
| {{ u.name }} | {{ u.current_base }} | {{ u.membership_status || '—' }} | {{ u.date_101 ? u.date_101.slice(0,7) : '—' }} | {{ u.date_201 ? u.date_201.slice(0,7) : '—' }} | {{ u.date_301 ? u.date_301.slice(0,7) : '—' }} | {{ u.date_401 ? u.date_401.slice(0,7) : '—' }} | ||
|
{{ u.name }} — 編輯門訓進度 |
||||||||
{{ mentuSearch ? '找不到符合的會友' : '尚無會友資料' }}
系統設定
牧養組織 · 層級與結構設定
此頁管理層級的啟用與命名等結構設定。日常的單位、負責人、同工管理請至左側「牧養組織與職權」。
層級設定
{{ ls.display_name }}
- {{ m.name }} {{ m.phone || '' }}
-
- {{ m.name }} {{ m.phone || '' }}
{{ editingUnit.leader_name }} (已連結){{ u.code }} {{ u.leader_name || u.name }}
-
{{ u.code }} {{ u.leader_name || u.name }}
-
- {{ m.name }} {{ m.phone || '' }}
{{ editingUnit.leader_name }} (已連結){{ u.code }} {{ u.leader_name || u.name }} - 尚無資料
{{ cwPanel.unitName }} · 同工
- 尚無同工,請從下方新增。
-
{{ cw.name }} {{ cw.email }} 無 Email
新增同工
- {{ m.name }} {{ m.phone || '' }}
操作步驟:
- 下載空白 Excel 範本,依說明填寫會友資料
- 上傳填寫完成的 Excel 檔案(.xlsx),系統會自動檢查資料
- 確認預覽無誤後,點選「確認匯入」正式匯入資料庫
步驟一:下載空白範本
步驟二:上傳填寫好的 Excel
步驟三:確認預覽後匯入
{{ ls.display_name }} 代碼比對
系統已有:
{{ (importPreview.org_available_codes[ls.display_name] || []).join(' ') || '(無)' }}
Excel 找不到:
{{ orgUnresolvedCodesByLevel[ls.display_name].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 即可簽到。
注意:若有接續聚會,提前時段不會干擾正在進行中的前一場聚會。
設定教會座標後,LINE LIFF 簽到時系統會驗證會友位置。緯度與經度皆為 0 時不啟用驗證。
地理圍欄已啟用,簽到範圍 {{ 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 中無任何組織歸屬
各層級總筆數:
總會友:{{ debugOrgResult.total_users }} 人
小組指派錯誤修復
掃描並修正:成員的小組(最高層級)與其牧區(次高層級)不符的情況。
同一牧區下若有同代碼的正確小組,系統會自動重新指派。
已成功寫入 {{ repairPreview.fixed_count }} 筆修正
預覽:可修復 {{ repairPreview.fixed_count }} 筆,無法自動修復 {{ repairPreview.skipped_count }} 筆
{{ repairPreview.committed ? '已修復' : '待修復' }}:
無法自動修復(需手動處理):
所有小組指派資料正確,無需修復。
簽到記錄封存
將指定日期前的所有簽到記錄移入封存表,封存後資料仍保留但不參與日常查詢,可大幅提升系統效能。 此操作不可逆,請謹慎操作。
SMTP 信件伺服器
用於寄發密碼重設信、系統通知信。設定後請先測試再啟用。
LINE Messaging API(推播 Bot)
用於主動推播訊息給已加 Bot 好友的會友。與目前 LIFF 簽到使用的 Channel 不同(請在同一 Provider 下另建一個 Messaging API Channel)。
推播場景
每 15 分鐘檢查一次;落在觸發時間 ± 15 分鐘內會推一次。
- 小時
如何取得 Token?
- 進 LINE Developers Console,與 LIFF 同一個 Provider 底下
- 建立新 Channel,類型選「Messaging API」
- 進入新 Channel → Messaging API 分頁 → 點「Issue」產生 Channel Access Token (long-lived)
- 會友需先掃 QR / 加 Bot 好友才能收推播
啟用「自動關聯」功能?請至 LINE OA Manager 設定:
- Webhook URL 填:
https://你的網域/api/line/webhook - 啟用「Use webhook」
- 關閉「自動回應訊息」與「Greeting message」(否則 Bot 會搶在系統前面回固定訊息)
- Channel Secret 也要填入上方欄位(簽章驗證用)
未綁定 LINE 好友
加 Bot 好友但未自動關聯到會友的清單。可由管理員手動指派。
-
{{ link.display_name || '(未取得名稱)' }}{{ link.line_id }}加好友:{{ fmtDatetime(link.first_seen_at) }} → {{ link.matched_user.name }} by {{ link.resolved_by }}已綁定 已略過
LINE 群組綁定
把 Bot 加入「區牧 + 小組長群」,由該單位的負責人在群內傳「綁定 <代號>」自動建立。亦可在此手動編輯。
-
{{ b.group_name || '(未取得群名)' }} [已停用]{{ b.line_group_id }}綁定到:{{ b.org_unit_label || '(單位不存在)' }} {{ fmtDatetime(b.bound_at) }} {{ b.bound_by_label }}
編輯群組綁定
收集 Bot 設定
獨立收集 Bot 的頻道金鑰與 AI 切分設定。各欄位留空=不變更(沿用現值)。儲存後請按「測試 Token」確認有效,確認無誤再清掉 .env 內的舊設定。
回報者特例設定
兩種特例(可獨立勾選):直式錨點=名字逐行單寫、以自己的名字當錨點分組(如李月華); 只回報·不參與=此人只是回報、自己沒一起禱告(如陳芊文回報兒童禱告),統計/網路圖不把他算進去。
- {{ sr.label || '(未命名)' }} 直式錨點 只回報·不參與 #{{ sr.reporter_line_id.slice(1,9) }}
提醒:回報者設定只影響「之後」收到的新回報;既有回報請用每則的「只回報?」開關逐則調整。
禱告收集群
收集 Bot 所在的群會自動登錄;暫停後該群即不再被動解析(不必把 Bot 踢出群)。
-
{{ g.label || '(未命名群)' }} {{ g.line_group_id }}收集中 已暫停
禱告回報
名字對不到會友的標紅;點「指派」搜尋會友手動接上。回報者未對到也可在此指派。
-
{{ r.report_date || '—' }} {{ r.report_type }} 回報:{{ r.reporter.name }} 回報者未對到({{ r.reporter_display_name }}) {{ {parsed:'已完成',needs_review:'待處理',unparsed:'無法解析'}[r.status] || r.status }}{{ p.name_text }} → {{ p.matched_user.name }} {{ p.name_text }} → {{ p.display_name }} 非會友 {{ p.name_text }}(多人同名) |原文:{{ r.raw_text }}
帳號管理
管理系統後台登入帳號與角色權限
所有帳號
| 帳號 {{ 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 }} | {{ accountUnitNames[uid] || `#${uid}` }} 未指派 — 請編輯 — | 停用 啟用 | 已啟用 — |
{{ formatRelativeTime(a.last_login_at) }}
{{ formatDateTime(a.last_login_at) }}
長期未登入
從未登入
|
|
| 載入中… | |||||||
| 沒有符合條件的帳號 | |||||||
{{ accountFormId ? '編輯帳號' : '新增帳號' }}
不點此按鈕、密碼維持不變。
設定新密碼(至少 10 字元,需混合大小寫/數字/符號至少兩類)
兩次密碼輸入不一致
沒有符合的會友
簽到站裝置
用 token 取代密碼共用:每台簽到機獨立 token,可隨時撤銷
| 名稱 | 備註 | 狀態 | 最後使用 | 操作 |
|---|---|---|---|---|
| {{ d.name }} | {{ d.note || '—' }} | 啟用 停用 |
{{ formatRelativeTime(d.last_seen_at) }}
{{ formatDateTime(d.last_seen_at) }} · {{ d.last_seen_ip }}
從未使用
|
|
| 尚無裝置。點「新增裝置」建立第一台簽到站。 | ||||
{{ deviceFormId ? '編輯裝置' : '新增裝置' }}
{{ deviceTokenShow.title }}
建議搭配 QR Code 產生器讓簽到機掃碼開啟。
{{ orgPersonName }}的職權
- {{ p.position_name }} {{ p.unit_code ? (p.unit_code + ' ') : '' }}{{ p.unit_name || '' }} {{ p.department_name }} 全域
教會層級職分
不隸屬單一單位的全域職分。主任牧師/師母、牧師為全教會可視;部門主責掌該部門全教會。
指派職分
- {{ m.name }}{{ m.phone || '' }}
{{ c.name }}
- {{ h.department_name }}
尚無
{{ orgDetailUnit.leader_name || orgDetailUnit.name || '未命名單位' }}
{{ orgLevelName(orgDetailUnit.level) }}- {{ m.name }}{{ m.phone || '' }}
{{ orgLeaderTitle(orgDetailUnit.level) }}
未指定
同工
尚無同工
- {{ orgCoworkerLabel(cw.role) }} · {{ cw.role === 'writer' ? '可編輯' : '可檢視' }}
下層單位 · {{ orgDetailChildren.length }}
- {{ m.name }}{{ m.phone || '' }}
尚無下層單位
牧養組織與職權 · 以人看
以「人」為中心:一個人所有職分(一人可多筆,如同時是小組長與區牧助理)。切「以單位看」則以單位/組織樹檢視。兩者同一份資料、即時同步。
- {{ m.name }} {{ m.phone || '' }}
{{ posSelected.name }}
目前職分
尚無職分。
新增職分
此為全域職分(無需指定單位)。
有職分的會友({{ positionsOverview.length }})
| {{ row.name }} |
{{ p.position_name }}·{{ p.unit_code }}·{{ p.department_name }}
|
修正建議
發現會友個資有誤時,在這裡提報建議;由資處審核後套用。個人資料只有資處能直接修改,其他人透過此管道建議。
提報一筆修正建議
- {{ m.name }} {{ m.phone || '' }}
建議清單({{ corrQueue.length }})
目前沒有此狀態的建議。
原因:{{ 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 || '—' }}