# 活動管理 ## 畫面檔: ~/Forms/ClassesList.aspx ## 資料存取類別 ~/Models/DAC_Classes1.cs(自動產生,勿修改) ~/Models/DAC_Classes2.cs(自訂擴充) - DAC_Classes:資料處理類別 - ClassesList:資料集類別 - ClassesItem:資料項目類別 ## 畫面排列: 上方:搜尋列 - 使用 CourseCode、CourseName、CourseDate_1(CourseDate 起)、CourseDate_2(CourseDate 迄)、CourseLocation 為查詢條件 下方:搜尋結果列表 - 顯示欄位為 CourseCode、CourseName、CourseDate、CourseLocation、操作 - 新增按鈕放置在表頭的操作欄 - 更正、刪除按鈕放置在操作欄 - CourseCode、CourseDate 向中對齊,其餘向左對齊 ## UI 規範: - 小窗尺寸:700x500px - 搜尋結果每頁顯示 20 筆 - 操作按鈕使用 Bootstrap 樣式 ## 錯誤處理: - 使用系統共用的 $message 來顯示 ## 新增更正: - 新增更正時彈出小窗 - 新增有兩個存檔按鈕 存檔:存檔後關閉小窗 存檔後繼續新增:存檔後清除輸入內容重新進入新增模式 - 更正存檔後關閉小窗 ## 刪除: - 彈 confirm 確認後刪除 ## 資料輸入: - CourseCode 不可輸入,不可修改,自動編號(BeforeInsertOne 處理) - CourseName 必填,可輸入,可修改,單行文字框,最長 100 Unicode 字元 - CourseDate 必填,可輸入,可修改,日期輸入框,YYYY-MM-DD 格式,不必驗證是否晚於今天 - CourseLocation 非必填,可輸入,可修改,單行文字框 - NotificationTitle 非必填,可輸入,可修改,單行文字框,最長 100 Unicode 字元 - NotificationTemplate 非必填,可輸入,可修改,多行文字框,最長 500 Unicode 字元 NotificationTemplate 插入規則: - 插入格式:{活動日期}、{活動名稱}、{活動地點} - 插入位置:游標當前位置 - 範例:「提醒您,{活動名稱}將於{活動日期}在{活動地點}舉行」 - AgreedTerms 非必填 ## 前端程式碼: - 使用 Vue.js 實現動態資料綁定與操作。 - 不使用 Server control ## 後端程式碼: - 使用 WebService 實現非同步資料交換。 ## WebService 端點: Services/ClassesService.asmx - EnableSession(True) - SearchClasses(int pageIndex, int pageSize, string courseCode, string courseName, DateTime? courseDate1, DateTime? courseDate2, string courseLocation, bool? closed, string projectID):搜尋活動 - pageIndex 從 1 開始 - 查詢 function 用 DAC_Classes.SelectPage(bool noInputReturnAll, int startRowIndex, int maximumRows, string CourseCode, string CourseName, DateTime? CourseDate_1, DateTime? CourseDate_2, string CourseLocation, bool? Closed, string ProjectID, string orderBy = "") - 筆數 function 用 DAC_Classes.SelectCount(bool noInputReturnAll, string CourseCode, string CourseName, DateTime? CourseDate_1, DateTime? CourseDate_2, string CourseLocation, bool? Closed, string ProjectID, string orderBy = "") - 查詢條件為 AND 關係 - 空白條件視為不限制(noInputReturnAll = true) - CourseDate 為範圍查詢 - 每筆結果補填 ProjectName(由 DAC_BPAA.SelectProjectName 查詢) - 回傳:BaseResponse(Success, Message, Data: ClassesList.ToDict(), TotalCount: 總筆數) - SaveClasses(bool isNew, ClassesItem item):存檔 - isNew:是否為新增 - item:新增或更正的活動資料(型別 ClassesItem) - 回傳:BaseResponse(Success, Message, Data: 儲存後的 ClassesItem) - DeleteClasses(int id, int dbAppNo):刪除活動 - 呼叫 DAC_Classes.DeleteOne(int ID, int DB_APPNO) - 回傳:BaseResponse(Success, Message) - SearchProjects(string keyword):搜尋計畫(用於自動完成) - 呼叫 DAC_BPAA.Select(keyword) - 回傳:BaseResponse(Success, Message, Data: NameValueList) - ExportClassesReport(int classesID, string timeFormat = "datetime"):匯出學員簽到表 - 輸入參數:classesID(課程 ID)、timeFormat(時間格式,"datetime" 或 "time") - 查詢課程及參加人員資料,使用 NPOI 產生 Excel - 回傳:BaseResponse(Success, Message, Data: { FileName, FileBase64, FileSize, DataCount }) - ExportClassesList(DateTime? courseDate1, DateTime? courseDate2, string projectID):匯出課程清單 - 輸入參數:courseDate1(課程日期起)、courseDate2(課程日期迄)、projectID(計畫代號) - 查詢課程清單及各課程的參加人員統計,使用 NPOI 產生 Excel - 回傳:BaseResponse(Success, Message, Data: { FileName, FileBase64, FileSize })