chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
@@ -0,0 +1,151 @@
# 扣繳明細及寄發通知 - 實現指南
## 概述
此文檔說明如何完成 "扣繳明細及寄發通知" 功能的後端實現。前端 UI 與基本服務框架已完成,需要實現核心的業務邏輯。
## 已實現的部分
### 1. 前端 (ASPX + Vue.js)
- ✅ Tab 1 UI 布局完整,包括:
- 查詢條件輸入欄位
- 查詢結果表格(支持展開/收合明細)
- 郵件設定區塊
- 郵件預覽與發送功能
- ✅ JavaScript 邏輯框架:
- `loadDetailTableDropdowns()` - 加載下拉清單
- `searchDetailTable()` - 查詢資料
- `exportDetailTable()` - 匯出 Excel
- `previewEmail()` - 預覽郵件
- `sendEmail()` - 發送郵件
- `toggleSelectAll()` - 全選/反選
### 2. 後端服務基框架 (Services/領據處理.asmx.cs)
已新增三個服務方法,框架完整但需實現 SQL 邏輯:
- `SearchDetailTable()` - 扣繳明細查詢與匯出
- `SendEmail()` - 郵件發送與預覽
- `GetDropdownLists()` - 已存在,返回下拉清單
## 需要實現的部分
### 1. SearchDetailTable 方法 (Services/領據處理.asmx.cs)
**位置**: 約 900 行
**任務**:
- 根據查詢條件查詢扣繳明細資料
- 支持 DATA(回傳資料)和 EXPORT(匯出 Excel)兩種模式
**返回資料結構**DATA 模式):
```csharp
List<dynamic> DataTable
{
( ID/no) -
(boolean) -
- List<dynamic> nested DataTable
{
(/)
}
}
```
**實現建議**:
1. 使用 DAC_領據 與相關 DAC 類別查詢
2. 按日期與身分別條件篩選
3. 使用講師非講師編號進行分組
4. 對於 EXPORT 模式,可建立新的 Report 類別或使用現有的 Excel 工具
### 2. SendEmail 方法 (Services/領據處理.asmx.cs)
**位置**: 約 950 行
**任務**:
- PREVIEW 模式:組織郵件預覽資料
- SENDMAIL 模式:實際發送郵件
**實現建議**:
1. PREVIEW 模式:返回將發送的郵件預覽,供確認
2. SENDMAIL 模式:
- 遍歷 `講師非講師編號` 列表
- 根據編號查詢收件者郵箱地址
- 使用 .NET 的 SmtpClient 或郵件服務發送
- 記錄發送時間至資料庫(更新「已發送」欄位)
- 返回成功/失敗統計
**注意**:
- 需要配置 SMTP 服務設定(郵件伺服器、帳號密碼等)
- 考慮錯誤處理:單個郵件失敗不應中斷整個流程
- 建議記錄郵件發送日誌
### 3. 資料庫相關
**需要確認**:
- 講師/非講師資料表中是否有郵箱欄位
- 是否有「郵件發送記錄」表來追蹤已發送狀態
- 領據資料表的結構與關聯
### 4. DAC 擴展(如需要)
**可能需要新增方法**:
- `DAC_領據.SelectDetailByDate()` - 按日期範圍查詢明細
- 郵件發送記錄相關的 DAC 操作
- 收件者郵箱查詢方法
## 前端資料綁定說明
### ASPX 欄位映射
查詢結果表格預期從後端接收以下欄位:
| 前端顯示 | 資料欄位 | 說明 |
|---------|--------|------|
| 要發送勾選 | item.selected | Vue.js 雙向綁定 |
| 已發送 | item.已發送 | boolean |
| 領款人姓名 | item.領款人姓名 | string |
| 身分證字號 | item.身分證字號 | string |
| 戶籍地址 | item.戶籍地址 | string |
| 扣繳類別 | item.扣繳類別 | string |
| 合計金額 | item.合計金額 | decimal |
| 應扣繳稅額 | item.應扣繳稅額 | decimal |
| 服務費 | item.服務費 | decimal |
| 明細展開 | item.showDetail | Vue.js 控制 |
| 明細列表 | item.明細 | List<dynamic> |
## 編號欄位處理
JavaScript 代碼支持多種 ID 欄位名稱:
```javascript
item.ID || item.編號 || item.no
```
**選擇一個作為主要欄位即可**
## 測試檢查清單
- [ ] GetDropdownLists 能正確返回身分別與憑證類別
- [ ] SearchDetailTable(DATA) 返回結構化的查詢結果
- [ ] SearchDetailTable(EXPORT) 能成功匯出 Excel
- [ ] SendEmail(PREVIEW) 能正確組織郵件預覽資料
- [ ] SendEmail(SENDMAIL) 能正確發送郵件
- [ ] 郵件發送後,已發送欄位應更新為是
## 相關檔案
- 前端: `Forms\領據系統\財稅作業與領據關帳.aspx`
- JavaScript: `Scripts\財稅作業與領據關帳.js`
- 後端服務: `Services\領據處理.asmx.cs`
- 資料存取: `DAC\領據系統\DAC_領據2.cs`
- 文件: `DOC\扣繳明細及寄發通知.md`