Support #1435
進行中[2026-CR] 學員的基本資料填寫介面移除部份欄位
是由 陳國瑋 於 約 2 個月 前加入. 於 約 1 個月 前更新.
0%
概述
學員的基本資料填寫介面移除以下欄位:
- 是否有慢性疾病或其他疾病
- 目前使用藥物
- 曾經使用的減重方式及成效
- 想減肥的原因
- 職業
- 教育程度
- 工作時間
- 工作時間補充說明
- 方便連絡的時間
- 連絡Email
僅在UI上移除,model欄位不移除,db欄位不移除,後台介面上的欄位也不移除。
是由 陳國瑋 於 約 1 個月 前更新
- 被分派者 從 陳國瑋 變更為 鍾正剛
Backend 已確認,本需求不需調整 API、DTO、entity 或 DB schema,後續請由 FE 處理。
【FE 實作範圍】
學員前台基本資料填寫/編輯介面移除以下 10 個輸入欄位:
- 是否有慢性疾病或其他疾病(chronic)
- 目前使用藥物(usingMedicine)
- 曾經使用的減重方式及成效(slimExperience)
- 想減肥的原因(motivation)
- 職業(job)
- 教育程度(eduLevel)
- 工作時間(workTime)
- 工作時間補充說明(workTimeDesc)
- 方便連絡的時間(contactTime)
- 連絡 Email(email)
【重要資料保留規則】
- 僅移除 UI 控制項,不可移除上述欄位的 form model/API payload。
- 編輯既有會員資料時,需保留 GET /api/user/{lineid} 回傳的原值,並於 POST /api/user/save 時原樣帶回。
- 現行 Backend save API 採整份資料覆寫;若 payload 省略上述欄位,會被反序列化為 null,造成既有資料被清除。
- 不調整 Backend model、DB 欄位與後台基本資料介面。
【驗收條件】
- 學員前台不再顯示上述 10 個欄位。
- 新會員及既有會員皆可正常儲存基本資料。
- 既有會員儲存其他欄位後,上述隱藏欄位的原資料不可被清除或改動。
- 後台仍可正常顯示及編輯上述欄位。
是由 鍾正剛 於 約 1 個月 前更新
【開發完成】
branch: feature/issue-1435-remove-profile-form-fields(base: develop,尚未合併)
一、實作內容
- 學員前台「基本資料」介面已移除指定的 10 個欄位控制項(chronic、usingMedicine、slimExperience、motivation、job、eduLevel、workTime、workTimeDesc、contactTime、email)。保留:真實姓名、聯絡手機、出生年月日、性別、身高、體重、連絡電話。
- 依【重要資料保留規則】,送出時不依賴 react-hook-form 對已卸載欄位的隱性保留,改為在 onSubmit 明確地把 GET /api/user/{lineid} 回傳的原值原樣併回 POST /api/user/save 的 payload。
- null 值原樣送 null,不轉為空字串;僅在 API 未回傳該 key(新會員無資料)時才補空字串,維持與欄位仍在畫面上時相同的 payload 形狀。eduLevel/workTime 仍以 { id: value } 形式送出,空值維持 { id: "" },與變更前一致。
- 未更動 Backend model、DB 欄位、後台介面,亦未更動任何 API 呼叫路徑(驗收條件 4 不受影響)。
二、與實作方針的差異
無。範疇僅限 react/web 兩個檔案:
- src/app/member/components/profile-form.js
- src/app/member/profile/edit-profile.js
三、後續事項
- 建議實機(LINE APP)驗證:既有會員只改體重後儲存,回後台確認 10 個欄位原資料未被清除或改動;新會員可正常完成首次填寫。此為 LIFF 環境相依行為,無法在一般瀏覽器完整驗證。
- 本專案無自動化測試,僅執行 yarn lint(通過,改動檔案無新增警告)。
- 既有弱點提醒(非本次變更造成,未處理):若 GET /api/user/{lineid} 失敗,表單仍會渲染,此時送出會將這 10 個欄位寫成空值。欄位移除前使用者至少能從畫面上看出資料是空的,移除後則無法察覺。是否要加上「使用者資料載入失敗即不允許送出」的保護,請指示,我再另行處理。
是由 鍾正剛 於 約 1 個月 前更新
【補充:一處文案異動,請確認】
commit: 20848fd(同 branch feature/issue-1435-remove-profile-form-fields)
「方便連絡的時間(contactTime)」欄位移除後,該區塊原本的說明文案:
請告訴我們方便的時間,會有專人主動與您聯繫。
前半句要求的資訊已經沒有欄位可填,該段下方只剩「連絡電話」一欄,因此調整為:
請留下方便聯繫的電話,會有專人主動與您聯繫。
保留「會有專人主動與您聯繫」的期待設定,只把索取的資訊對齊實際還在的欄位。此為超出本票字面範疇的文案異動,若希望改為整段移除、或改用其他措辭,請告知,我再調整。
是由 鍾正剛 於 約 1 個月 前更新
【補充:新增載入失敗保護,超出本票原範疇】
commit: 644b7e4(同 branch feature/issue-1435-remove-profile-form-fields)
原先回報的既有弱點已一併處理:隱藏欄位的原值全靠 GET /api/user/{lineid} 帶回,該請求失敗時送出會把 10 個欄位寫成空值,且欄位已從畫面移除,使用者無從察覺。
處理方式:
- 判定為載入失敗時,跳出提示「目前無法取得您已填寫的資料,為避免覆蓋原本的內容,請稍後再重新開啟本頁面。」並停用「儲存送出」按鈕,onSubmit 另有一道防護。
- 重要例外:查無此會員時後端拋 ObjectNotFoundException,經 ExceptionHandlingController 對應為 HTTP 404。這是新會員第一次填寫的正常情況,明確排除在「載入失敗」之外,不會擋住首次建檔(驗收條件 2 不受影響)。
備註:目前新會員進入本頁時,因該 404 仍會先跳出既有的錯誤提示(useGetUser 的 onError),此為本次變更前就有的行為,未一併調整。若希望新會員不要看到這個提示,請告知,我可另開處理。
此保護超出本票字面範疇,若不需要可直接回覆,我再移除該 commit。