155 lines
4.7 KiB
Markdown
155 lines
4.7 KiB
Markdown
# 個人費用彙整表 - 實施指南
|
||
|
||
## 概述
|
||
已完成「個人費用彙整表」的前端和框架實施。本文檔說明需要用戶完成的後端邏輯部分。
|
||
|
||
## 完成的工作
|
||
|
||
### 1. 前端 UI (Forms\領據系統\財稅作業與領據關帳.aspx)
|
||
✅ **完成內容:**
|
||
- Tab 0 查詢表單 (起日、迄日、身分別、付款方式)
|
||
- 查詢/匯出按鈕
|
||
- 查詢結果表格 (9 個欄位)
|
||
- 完整的 CSS 樣式
|
||
|
||
### 2. Vue.js 邏輯 (Scripts\財稅作業與領據關帳.js)
|
||
✅ **完成內容:**
|
||
- summaryTable 資料物件初始化
|
||
- 下拉清單加載邏輯 (`loadSummaryTableDropdowns`)
|
||
- 查詢方法 (`searchSummaryTable`)
|
||
- 匯出方法 (`exportSummaryTable`)
|
||
- 輔助方法 (`parseDate`, `formatCurrency`, `downloadExcel`)
|
||
|
||
### 3. WebService 方法簽名 (Services\領據處理.asmx.cs)
|
||
✅ **完成內容:**
|
||
- `SearchSummaryTable` 方法框架
|
||
- `個人費用彙整表Item` 資料模型類
|
||
|
||
## 需要用戶完成的工作
|
||
|
||
### 1. SearchSummaryTable 後端實現
|
||
|
||
**位置:** `Services\領據處理.asmx.cs` - `SearchSummaryTable` 方法
|
||
|
||
**需要實現:**
|
||
```csharp
|
||
// 在此處替換 TODO 註解的部分
|
||
|
||
// 根據查詢參數取得資料:
|
||
using (var conn = DAC.NewConnection())
|
||
{
|
||
// 你的查詢邏輯應該:
|
||
// 1. 根據 startDate (起日), endDate (迄日) 篩選日期範圍
|
||
// 2. 如果 身分別 有值,篩選身分別
|
||
// 3. 如果 付款方式 有值,篩選付款方式
|
||
// 4. 返回 List<個人費用彙整表Item>
|
||
|
||
// 查詢應該返回以下欄位:
|
||
var summaryData = new List<個人費用彙整表Item>();
|
||
|
||
// TODO: 實現查詢邏輯
|
||
// var result = dac.SearchSummaryTable(startDate, endDate, 身分別, 付款方式);
|
||
// summaryData = result.ToList();
|
||
|
||
return summaryData;
|
||
}
|
||
```
|
||
|
||
**輸出欄位 (9 個):**
|
||
1. `領款人姓名` (string) - 講師/非講師姓名
|
||
2. `身分證字號` (string)
|
||
3. `堂數` (string) - 格式:「數量 + 單位」,例如「5堂」
|
||
4. `扣繳類別` (string)
|
||
5. `帳戶名` (string)
|
||
6. `付款金額` (decimal)
|
||
7. `匯款帳號` (string)
|
||
8. `銀行分行代碼` (string)
|
||
9. `銀行分行` (string)
|
||
|
||
**參數:**
|
||
- `startDate` (DateTime?) - 起日
|
||
- `endDate` (DateTime?) - 迄日
|
||
- `身分別` (string) - 身分別 (可空)
|
||
- `付款方式` (string) - 付款方式 (可空)
|
||
|
||
### 2. Excel 匯出實現
|
||
|
||
**位置:** `Services\領據處理.asmx.cs` - `SearchSummaryTable` 方法中的 EXPORT 部分
|
||
|
||
**需要實現:**
|
||
```csharp
|
||
if (輸出方式 == "EXPORT")
|
||
{
|
||
// TODO: 實現 Excel 匯出邏輯
|
||
// 1. 使用相同的查詢取得 summaryData
|
||
// 2. 生成 Excel 檔案 (使用 NPOI 或其他庫)
|
||
// 3. 將 Excel 檔案轉換為 Base64 編碼
|
||
// 4. 返回 excelData (Base64) 和 fileName
|
||
|
||
var excelResult = new
|
||
{
|
||
excelData = excelBase64String, // Base64 編碼的 Excel 檔案內容
|
||
fileName = $"講師個人費用彙整表_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx"
|
||
};
|
||
|
||
return ServiceResponse.CreateSuccess("匯出成功", excelResult);
|
||
}
|
||
```
|
||
|
||
## 測試檢查清單
|
||
|
||
- [ ] 在 Visual Studio 中構建項目 (確無編譯錯誤)
|
||
- [ ] 在瀏覽器中開啟財稅作業與領據關帳頁面
|
||
- [ ] 驗證 Tab 0 個人費用彙整表是否顯示正確
|
||
- [ ] 驗證下拉清單是否正確加載身分別和付款方式
|
||
- [ ] 點擊查詢按鈕,驗證是否呼叫後端 `SearchSummaryTable` 方法
|
||
- [ ] 驗證查詢結果表格是否正確顯示 (如有 TODO 實現)
|
||
- [ ] 點擊匯出按鈕,驗證是否下載 Excel 檔案 (如有 TODO 實現)
|
||
|
||
## 後續建議
|
||
|
||
1. **數據庫查詢**
|
||
- 建立 DAC 類別 `DAC_個人費用彙整` 或在現有 DAC 中添加查詢方法
|
||
- 優化 SQL 查詢效能 (考慮分組、合計等)
|
||
|
||
2. **Excel 匯出**
|
||
- 建議使用 NPOI 庫生成 Excel
|
||
- 可參考現有的 `Report.領據列印` 實現方式
|
||
|
||
3. **數據驗證**
|
||
- 驗證日期範圍的合理性
|
||
- 驗證身分別和付款方式的有效值
|
||
|
||
4. **錯誤處理**
|
||
- 新增更詳細的錯誤訊息
|
||
- 記錄查詢日誌用於除錯
|
||
|
||
## 技術棧
|
||
|
||
- **前端:** Vue.js 2.x, HTML5, CSS3
|
||
- **後端:** ASP.NET (C#), WebService
|
||
- **資料庫:** SQL Server (假設)
|
||
- **.NET 版本:** Framework 3.5
|
||
|
||
## 支援的瀏覽器
|
||
|
||
- Chrome (推薦)
|
||
- Firefox
|
||
- Edge
|
||
- Safari
|
||
|
||
## 常見問題
|
||
|
||
**Q: 如何修改查詢結果欄位?**
|
||
A: 修改 `個人費用彙整表Item` 類別的屬性,並更新前端表格 HTML。
|
||
|
||
**Q: 如何添加更多查詢條件?**
|
||
A:
|
||
1. 在 ASPX 中添加新的表單控制項
|
||
2. 在 Vue data 中添加新屬性
|
||
3. 在 `searchSummaryTable` 方法中傳遞新參數
|
||
4. 在後端 `SearchSummaryTable` 方法中處理新參數
|
||
|
||
**Q: 如何修改 Excel 匯出格式?**
|
||
A: 在 EXPORT 邏輯中自訂 Excel 生成代碼,調整欄寬、字體、顏色等。
|