Files
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

4.7 KiB
Raw Permalink Blame History

活動管理

畫面檔:

~/Forms/ClassesList.aspx

資料存取類別

~/Models/DAC_Classes1.cs(自動產生,勿修改) ~/Models/DAC_Classes2.cs(自訂擴充)

  • DAC_Classes:資料處理類別
  • ClassesList:資料集類別
  • ClassesItem:資料項目類別

畫面排列:

上方:搜尋列

  • 使用 CourseCode、CourseName、CourseDate_1CourseDate 起)、CourseDate_2CourseDate 迄)、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 查詢)
    • 回傳:BaseResponseSuccess, Message, Data: ClassesList.ToDict(), TotalCount: 總筆數)
  • SaveClasses(bool isNew, ClassesItem item):存檔

    • isNew:是否為新增
    • item:新增或更正的活動資料(型別 ClassesItem
    • 回傳:BaseResponseSuccess, Message, Data: 儲存後的 ClassesItem
  • DeleteClasses(int id, int dbAppNo):刪除活動

    • 呼叫 DAC_Classes.DeleteOne(int ID, int DB_APPNO)
    • 回傳:BaseResponseSuccess, Message
  • SearchProjects(string keyword):搜尋計畫(用於自動完成)

    • 呼叫 DAC_BPAA.Select(keyword)
    • 回傳:BaseResponseSuccess, Message, Data: NameValueList
  • ExportClassesReport(int classesID, string timeFormat = "datetime"):匯出學員簽到表

    • 輸入參數:classesID(課程 ID)、timeFormat(時間格式,"datetime" 或 "time"
    • 查詢課程及參加人員資料,使用 NPOI 產生 Excel
    • 回傳:BaseResponseSuccess, Message, Data: { FileName, FileBase64, FileSize, DataCount }
  • ExportClassesList(DateTime? courseDate1, DateTime? courseDate2, string projectID):匯出課程清單

    • 輸入參數:courseDate1(課程日期起)、courseDate2(課程日期迄)、projectID(計畫代號)
    • 查詢課程清單及各課程的參加人員統計,使用 NPOI 產生 Excel
    • 回傳:BaseResponseSuccess, Message, Data: { FileName, FileBase64, FileSize }