P/
PromptTools
選單
資產庫
指令組合
產生指令包
管理資料
Instruction asset
編輯一般指令
共用內容只保存一份;工具差異放在專用補充,下載時才組合。
基本資料
01
名稱
唯一代稱
小寫英文、數字與連字號;建立後仍可修改但不可重複。
簡短說明
主要分類
未分類
預設排序
標籤
尚無標籤,可先到「分類與標籤」建立。
共用 Markdown 與即時預覽
02
共用指令內容
--- applyTo: '**' --- # [全域指令] 專案通用術語對應 When outputing any text, use the following term mappings: create = 建立, object = 物件, queue = 佇列, stack = 堆疊, information = 資訊, invocation = 呼叫, code = 程式碼, running = 執行, library = 函式庫, schematics = 原理圖, building = 建構, Setting up = 設定, package = 套件, video = 影片, for loop = for 迴圈, class = 類別, Concurrency = 平行處理, Transaction = 交易, Transactional = 交易式, Code Snippet = 程式碼片段, Code Generation = 程式碼產生器, Any Class = 任意類別, Scalability = 延展性, Dependency Package = 相依套件, Dependency Injection = 相依性注入, Reserved Keywords = 保留字, Metadata = Metadata, Clone = 複製, Memory = 記憶體, Built-in = 內建, Global = 全域, Compatibility = 相容性, Function = 函式, Refresh = 重新整理, document = 文件, example = 範例, demo = 展示, quality = 品質, tutorial = 指南, recipes = 秘訣, byte = 位元組, bit = 位元 Always response in #zh-tw. --- ## 1. 核心專案架構與全域限制 (Core Project Architecture & Global Constraints) 這是整個專案的最高指導原則,所有產出的程式碼都必須嚴格遵守。 - **專案模型**: **ASP.NET 網站專案 (Web Site Project, 不是 MVC, 不是 .NET Core)**。 - **Framework**: **.NET Framework 4.7.2**。 - **雙重三層式架構 (Dual 3-Tier Architecture - CRITICAL)**: 系統採模組化設計,分為「共用核心」與「特定應用」兩部分,兩者皆具備三層式架構 (BLL/DAL/DTO): - **共用核心函式庫 (Core Library Project)**:獨立的 Class Library 專案,編譯為 DLL 供 Web 專案參考。負責全域共用邏輯與資料存取(如員工主檔讀取、權限驗證、共用日誌)。 - **特定應用模組 (Web Site App_Code)**:存放於 Web 專案的 `App_Code` 資料夾中。負責僅屬於該 Web 專案的專屬商業邏輯與資料存取。 - **依賴方向限制**:依賴必須是單向的。Web 專案 (`App_Code`) 可以呼叫 Core Library 的物件與方法,但 Core Library **絕對禁止**反向參考或呼叫 Web 專案的任何程式碼。 - **資料庫**: **Sybase ASE**,並透過 `CHMC.DLL` 內的 `DbHelperSQL` 類別進行存取。 - **多機負載平衡與檔案存取規範 (Load Balancing & Shared Storage - CRITICAL)**: - **環境架構**: 系統執行於兩台 Web 伺服器,透過負載平衡器運作,共用檔案存取採 **UNC 路徑** 方案。 - **實作方式**: 在網域內建立一台檔案伺服器,並開放在共用資料夾(例如:`\\FileServer\Uploads`)。兩台主機的 IIS 中均已建立「虛擬目錄 (Virtual Directory)」,並將其指向該 UNC 路徑。 - **程式碼規範**: **絕對禁止**使用本機絕對路徑。**必須**統一使用 `Server.MapPath("~/Uploads")` 來取得實體路徑(系統會自動對應到共用伺服器),確保兩台伺服器在執行時能讀寫同一份資訊與資源。 - ** Sybase ASE DDL 語法規範 (CRITICAL)**: - **IDENTITY 欄位**:必須使用 `INT IDENTITY`。IDENTITY 已隱含 NOT NULL,不可重複宣告。建表後必須加発 `sp_chgattribute '表名', 'identity_gap', 100` 以設定跳號間距。 - **DEFAULT 語序**:正確寫法為 `DEFAULT <value> NOT NULL`(DEFAULT 在前,NOT NULL 在後)。禁止寫成 `NOT NULL DEFAULT <value>`。 - **小範圍整數**:資料量小的整數欄位(如 `sort_order`)應使用 `TINYINT`,而非 `INT`。 - **CREATE INDEX 不支援 DESC**:索引欄位不可指定排序方向,排序由查詢的 `ORDER BY` 控制。 - **外鍵欄位型別一致性**:參考 IDENTITY PK 的 FK 欄位,型別必須與 PK 一致,使用 `INT`。 - ** 資料庫規範 (Database Standards - CRITICAL)**: ### Table 命名規範 **限制:** 1. 命名原則在資料庫 SYBASE / SQL SERVER / DB2 等皆一致。 2. 僅可使用 26 個英文字母(**小寫**)、數字 0-9 及底線 `_`,長度**不超過 30 碼**。 3. 前綴為主系統代號,**不可超過 5 位**(如門診使用 `opd_` 開頭,護理站使用 `nus_` 開頭)。 4. 格式:`{主系統代號}_{table_name}_m`。Log 檔及異動紀錄一律在最後加上 `_l`;歷史檔一律在最後加上 `_h`。 **建議:** 在不超過長度限制的前提下,應避免使用縮寫,以免未來判別困難。縮寫字元需為廣泛可接受之名稱(辨識度需高)。 ### 欄位設計規範 **限制:** 1. 使用英數字單詞組合,長度在 30 個字元以內;需使用特殊字元時,只能使用 `_`。 2. 資料表與資料表之間的相關聯欄位,必須使用統一名稱。 3. **禁止使用 SQL 保留字**作為欄位名稱(如 `EXEC`, `AS`, `ASC`, `FIRST` 等,完整清單請參考附錄 B)。 4. 每筆資料大小上限:MSSQL 為 **8060 Bytes**;Sybase 目前每頁 2K 為 **1960 Bytes**。 5. Table 應有欄位紀錄**資料寫入日期時間**及**人員 ID**,欄位命名強制規則如下: - **日期時間欄**:統一使用 `data_dt`(DATETIME 類型)。若同一表需區分建立時間與更新時間,則命名為 `create_dt` 與 `data_dt`。 - **人員 ID 欄**:統一使用 `data_op`(VARCHAR 類型)。若同一表需區分建立人與更新人,則命名為 `create_op` 與 `data_op`。 6. 欄位註解需註明此欄位關聯的 `Table.欄位名` 或詳細代碼名稱(例如:`Sex 性別 0=女 1=男`)。 **建議:** 1. 使用最小足夠的資料型態來儲存欄位資料。 2. 欄位長度較大時,建議由固定長度改為彈性長度。 3. 新增的 Table,非必要情況下欄位**禁止允許 NULL**;舊 Table 新增欄位,需要允許為 `NULL`。 ### Stored Procedure 命名規範 **限制:** 1. 以系統簡碼帶頭,如:`med_idu_drug_bag_num`,長度**少於 30 字元**。 2. 使用多段式命名方式,可加上系統代碼及對資料庫做的主要動作代碼:`i` = INSERT、`d` = DELETE、`u` = UPDATE。 ### 主鍵規範 **限制:** 1. **每張表必須建立主鍵**。 2. 單表只能有一個主鍵,且不允許為空值及重複數值。 3. 主鍵資料不可任意變更、刪除。 **建議:** 1. 儘量使用單欄位主鍵。 2. 複合式主鍵欄位儘量使用相同資料型態。 3. 儘量使用最小資料型態作為主鍵。 ### 主鍵生成策略:Identity vs GUID 本專案為**單一 Sybase ASE 關聯式資料庫**架構,採 **Identity 自動遞增整數**作為預設主鍵策略。 #### Identity(預設策略)— 適用本專案所有情境 - **型別**:`INT IDENTITY`,建表後加発 `sp_chgattribute '表名', 'identity_gap', 100`。 - **效能**:連續遞增數字使 B-Tree 索引直接附加,避免 Page Split,讀寫速度最佳。 - **儲存**:佔用 4 Bytes,遠優於 GUID 字串的 36 Bytes;在大資料量情境下可顯著降低記憶體快取成本。 - **可讀性**:天然具備建立先後順序,`ORDER BY pk DESC` 即可取得最新資料。 - **gap 100**:設定跳號間距 100,在伺服器重啟等極端情況下降低號碼跳空幅度。 #### GUID(備選策略)— 僅在以下情境才考慮採用 | 情境 | 說明 | |---|---| | 分散式 / 微服務 | 多資料庫同時寫入,需避免不同節點產生相同 ID | | 離線後同步 | 行動裝置離線建立資料,連線後同步至伺服器 | | 防商業機密探測 | 對外公開的 URL 含有 ID,需防止規律遞增被推算業務量 | | 多庫合併遷移 | 公司併購後合併兩個獨立資料庫,歷史資料 ID 不可衝突 | > **本專案目前不存在上述情境,因此所有資料表主鍵一律使用 Identity,禁止建立 GUID 型別主鍵。** ### 索引設計準則 **限制:** 1. 以唯一值當索引。 2. PK / Index 或需查詢使用的資料**不可為 NULL 值**。 **建議:** 1. `WHERE` 子句中經常使用的欄位應建立索引。 2. 經常用於連接 (`JOIN`) 條件的欄位應建立索引。 3. `ORDER BY` 子句中經常使用的欄位應建立索引。 4. 組合索引的原則:過濾性越好的欄位越靠前。 5. 選擇性低的欄位不建立單欄索引。 ### SQL 查詢設計規範 **限制:** 1. 使用二段式命名格式:`表名.欄位名` 或 `別名.欄位名`;有 `JOIN` 關係時,欄位**必須指明所屬的表**。 2. `WHERE` 條件設計應將索引欄位值擺前頭,辨識度越高越前。 **建議:** 1. 避免在索引欄位上使用函式或計算。 2. 避免在 `LIKE` 條件前使用萬用字元(如 `LIKE '%keyword'`)。 ### 附錄 B:SQL 保留字清單 > 以下關鍵字**禁止**作為資料表名稱或欄位名稱使用。 `ADD`, `DROP`, `MERGE`, `SCROLL`, `XML`, `ALL`, `DYNAMIC`, `MESSAGE`, `SELECT`, `ALTER`, `ELSE`, `MODE`, `SENSITIVE`, `AND`, `ELSEIF`, `MODIFY`, `SESSION`, `ANY`, `ENCRYPTED`, `NATURAL`, `SET`, `ARRAY`, `END`, `NCHAR`, `SETUSER`, `AS`, `ENDIF`, `NEW`, `SHARE`, `ASC`, `ESCAPE`, `NO`, `SMALLINT`, `ATTACH`, `EXCEPT`, `NOHOLDLOCK`, `SOME`, `BACKUP`, `EXCEPTION`, `NOT`, `SPATIAL`, `BEGIN`, `EXEC`, `NOTIFY`, `SQLCODE`, `BETWEEN`, `EXECUTE`, `NULL`, `SQLSTATE`, `BIGINT`, `EXISTING`, `NUMERIC`, `START`, `BINARY`, `EXISTS`, `NVARCHAR`, `STOP`, `BIT`, `EXTERNLOGIN`, `OF`, `SUBTRANS`, `BOTTOM`, `FETCH`, `OFF`, `SUBTRANSACTION`, `BREAK`, `FIRST`, `ON`, `SYNCHRONIZE`, `BY`, `FLOAT`, `OPEN`, `TABLE`, `CALL`, `FOR`, `OPENSTRING`, `TEMPORARY`, `CAPABILITY`, `FORCE`, `OPENXML`, `THEN`, `CASCADE`, `FOREIGN`, `OPTION`, `TIME`, `CASE`, `FORWARD`, `OPTIONS`, `TIMESTAMP`, `CAST`, `FROM`, `OR`, `TINYINT`, `CHAR`, `FULL`, `ORDER`, `TO`, `CHAR_CONVERT`, `GOTO`, `OTHERS`, `TOP`, `CHARACTER`, `GRANT`, `OUT`, `TRAN`, `CHECK`, `GROUP`, `OUTER`, `TREAT`, `CHECKPOINT`, `HAVING`, `OVER`, `TRIGGER`, `CLOSE`, `HOLDLOCK`, `PASSTHROUGH`, `TRUNCATE`, `COMMENT`, `IDENTIFIED`, `PRECISION`, `TSEQUAL`, `COMMIT`, `IF`, `PREPARE`, `UNBOUNDED`, `COMPRESSED`, `IN`, `PRIMARY`, `UNION`, `CONFLICT`, `INDEX`, `PRINT`, `UNIQUE`, `CONNECT`, `INNER`, `PRIVILEGES`, `UNIQUEIDENTIFIER`, `CONSTRAINT`, `INOUT`, `PROC`, `UNKNOWN`, `CONTAINS`, `INSENSITIVE`, `PROCEDURE`, `UNNEST`, `CONTINUE`, `INSERT`, `PUBLICATION`, `UNSIGNED`, `CONVERT`, `INSERTING`, `RAISERROR`, `UPDATE`, `CREATE`, `INSTALL`, `READTEXT`, `UPDATING`, `CROSS`, `INSTEAD`, `REAL`, `USER`, `CUBE`, `INT`, `REFERENCE`, `USING`, `CURRENT`, `INTEGER`, `REFERENCES`, `VALIDATE`, `CURRENT_TIMESTAMP`, `INTEGRATED`, `REFRESH`, `VALUES`, `CURRENT_USER`, `INTERSECT`, `RELEASE`, `VARBINARY`, `CURSOR`, `INTO`, `REMOTE`, `VARBIT`, `DATE`, `IS`, `REMOVE`, `VARCHAR`, `DATETIMEOFFSET`, `ISOLATION`, `RENAME`, `VARIABLE`, `DBSPACE`, `JOIN`, `REORGANIZE`, `VARRAY`, `DEALLOCATE`, `JSON`, `RESOURCE`, `VARYING`, `DEC`, `KERBEROS`, `RESTORE`, `VIEW`, `DECIMAL`, `KEY`, `RESTRICT`, `WAIT`, `DECLARE`, `LATERAL`, `RETURN`, `WAITFOR`, `DEFAULT`, `LEFT`, `REVOKE`, `WHEN`, `DELETE`, `LIKE`, `RIGHT`, `WHERE`, `DELETING`, `LIMIT`, `ROLLBACK`, `WHILE`, `DESC`, `LOCK`, `ROLLUP`, `WINDOW`, `DETACH`, `LOGIN`, `ROW`, `WITH`, `DISTINCT`, `LONG`, `ROWTYPE`, `WITHIN`, `DO`, `MATCH`, `SAVE`, `WORK`, `DOUBLE`, `MEMBERSHIP`, `SAVEPOINT`, `WRITETEXT` - ** DbHelperSQL 方法簽章 (CRITICAL)**: `DbHelperSQL` 的方法不接受省略參數,必須傳入完整簽章: - `FillDataSet(string sql, CommandType, IDataParameter[], string tableName)` — 4 個參數 - `ExecuteNonQuery(string sql, CommandType, IDataParameter[])` — 3 個參數 - 無參數查詢時 `IDataParameter[]` 傳 `null`,`tableName` 傳 DAL 類別的 `TableName` 常數。 - ** BLL 層 DataRow 映射 DBNull 防護 (CRITICAL)**:BLL 將 `DataRow` 映射至 DTO 時,所有資料庫中允許 `NULL` 的欄位(特別是 `data_dt`、`data_op`,或同時記錄建立時間的 `create_dt`、`create_op` 等),**必須**先檢查 `DBNull.Value` 再進行型別轉換,否則會拋出「物件無法從 DBNull 轉型」執行階段例外。 - **DateTime? 欄位**:`q["col"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(q["col"])` - **可 NULL 字串欄位**:`q["col"] == DBNull.Value ? null : Convert.ToString(q["col"])` - **Int32? 欄位**:`q["col"] == DBNull.Value ? (Int32?)null : Convert.ToInt32(q["col"])` - **禁止**對可能為 NULL 的欄位直接使用 `Convert.ToDateTime()`、`Convert.ToInt32()`,這會在資料為 `DBNull` 時拋出 `InvalidCastException`。 - ** DAL 回傳型別雙模式 (CRITICAL)**:DAL 支援兩種 SELECT 回傳模式,依使用情境選擇: - **DTO 映射模式 (主流)**:回傳 `IEnumerable<DtoXxx>`,使用 `yield return` + `DTO.GetSingleData(DataRow)` 完成映射。BLL 端呼叫 `.ToList()` 取得 `List<DtoXxx>`。適用於一般業務 CRUD 查詢。 - **DataSet 直通模式**:回傳 `DataSet`。BLL 自行遍歷 `DataRow` 做映射。適用於系統基礎設施查詢 (權限、員工)、報表匯出。 - **禁止**在 DAL 內部 `new List<Dto>()` 並手動 Add 回傳。`List<T>` 的具現化由 BLL 的 `.ToList()` 負責。 - **`yield return` 限制**:使用 `yield return` 的方法不可包覆 `try-catch` 區塊。 - **核心架構**: **三層式架構**,資料流嚴格遵循 `Presentation Layer (ASPX/ASMX) -> Business Logic Layer (BLL) -> Data Access Layer (DAL) -> Data Transfer Object (DTO)`。 - **前端**: - 使用 Bootstrap (RWD)。 - 使用 jQuery 3.7.2 進行 DOM 操作與 AJAX 呼叫。 - 禁止使用伺服器端控制項 (Server Controls) 的 PostBack 事件。 - 使用 WebMethod + jQuery AJAX。 - **日誌記錄**: 全專案使用 `CHMC.Log.WriteLog(ex)` 作為唯一的錯誤記錄方法,參考 `CHMC.dll`。 - **命名規範**: 嚴格遵守 C# 命名慣例,並參考專案內的既有程式碼風格。 - **程式碼風格**: - 註解需使用中文撰寫,並保持清晰易懂。 - 方法與變數命名需具描述性且符合 C# 命名慣例。 - 每個方法前需有 XML 註解,說明方法功能、參數與回傳值。 - 方法間需有一行空白分隔。 --- ## 2. 介面與前端開發指引 - **UI/UX 佈局**: - **框架**: 參考 CHGH_UI 設計,如果找不到就必須使用 Bootstrap 5.2.3 組件來建構 UI,並確保響應式設計。 - **表格**: 使用 DataTables.js 來顯示和操作資料表格。 - ** DataTables 中文語系載入規範 (CRITICAL)**: 專案的語系檔 `/App_JS/datatables-zh-TW.js` 是 **JS 變數宣告**(`var dtZhTW = {...}`),**不是純 JSON**。必須用 `<script src="/App_JS/datatables-zh-TW.js"></script>` 引入,再以 `language: dtZhTW` 使用。**絕對禁止**使用 `language: { url: '/App_JS/datatables-zh-TW.js' }` 方式載入,該方式會以 AJAX 抓取並解析為 JSON,導致 `SyntaxError: Unexpected token ':'` 與 `ReferenceError: dtZhTW is not defined`。 - **圖表**: 使用 Chart.js 來呈現數據圖表。 - **字體與圖示**: 使用「芫荽字體」`Assets/fonts/iansui.css`, `Assets/fonts/Iansui-Regular.ttf` 和 FontAwesome 圖示庫。 - **離線化**: 專案為完全離線化,不可使用 CDN 引用任何外部函式庫。 - ** ASPX Code-Behind (CRITICAL)**: - 每一個 `.aspx` 頁面**必須**同時建立對應的 `.aspx.cs` code-behind 檔案,且類別**必須繼承 `BasePage`**。 - `.aspx` 的 `<%@ Page %>` 指令**必須**包含 `CodeFile` 與 `Inherits` 屬性。 - 後台 Admin 頁面必須在 `OnPreInit` 設定 `CheckAuthorization = true`;前台頁面維持預設 `false`。 - **禁止**建立沒有 code-behind 的 `.aspx` 頁面——這等於繞過 `BasePage` 的 SSO 驗證與權限機制,是嚴重資安漏洞。 - **JavaScript 開發**: - **函式庫**: 使用 jQuery 3.7.2 作為主要的 DOM 操作和 Ajax 函式庫。 - **事件綁定**: 使用 `$(document).ready()` 或 `$(function() { ... });` 來確保頁面載入完成後才執行腳本。事件應使用 `.on()` 方法進行綁定。 - **Ajax 呼叫**: 必須使用統一的 Ajax 呼叫模式與 WebService (.asmx) 進行通訊。 - **新增檔案**: - ** 檔案編碼 (CRITICAL)**: - 所有新增的 `.aspx`、`.asmx`、`.master`、`.ascx`、`.cs` 檔案**必須**使用 **UTF-8 編碼並包含 BOM (Byte Order Mark, 即檔首 EF BB BF)**。 - **原因**: .NET Framework 4.7.2 的 C# 編譯器在檔案缺少 BOM 時,會使用系統預設編碼(Windows 繁體中文環境為 Big5)讀取檔案,導致中文字元(如 `「」`、`()`、中文字串)被錯誤解析,產生大量 CS1010 / CS1026 / CS1002 編譯錯誤。 - **工具限制**: VS Code 的 `create_file` 工具預設建立的 UTF-8 檔案**不含 BOM**。建立含中文字元的檔案後,**必須**立即執行以下 PowerShell 指令補加 BOM: ```powershell $utf8BOM = New-Object System.Text.UTF8Encoding $true $utf8NoBOM = New-Object System.Text.UTF8Encoding $false $content = [System.IO.File]::ReadAllText("檔案路徑", $utf8NoBOM) [System.IO.File]::WriteAllText("檔案路徑", $content, $utf8BOM) ``` - **批次處理**: 若一次建立多個檔案,可用管線批次處理: ```powershell @("file1.cs", "file2.cs") | ForEach-Object { $c = [System.IO.File]::ReadAllText($_, $utf8NoBOM) [System.IO.File]::WriteAllText($_, $c, $utf8BOM) } ``` - **檔案命名**: 檔案命名需具描述性且符合 C# 命名慣例,避免使用縮寫或不明確的名稱。 - **目錄結構**: 新增的檔案必須參考專案既有的目錄結構進行放置,確保專案組織清晰有序。 - **資安規範 (Security Baseline)**: - **例外處理 (Exception Handling)**:禁止在 Catch 區塊中直接將 `Exception.Message` 或 Stack Trace 輸出至前端頁面。所有未捕捉的例外皆依賴全域設定導向 `~/Error.aspx`,並於後端使用 `CHMC.Log.WriteLog(ex)` 記錄。 - **內容安全策略 (CSP)**:嚴格遵守現有配置。禁止引入外部 CDN 腳本。樣式與字型僅限同源 (`self`) 或受信任網域 (`https://resource.chgh.org.tw`)。 - **防範注入與跨站攻擊 (XSS/Clickjacking)**: - 系統已全域啟用 `X-Xss-Protection: 1; mode=block` 與 `X-Frame-Options: SAMEORIGIN`。 - 若需於後端動態生成 HTML 並回傳前端,必須經過嚴格的 Encode 處理 (如 `HttpUtility.HtmlEncode`)。 - **狀態與快取管理**:全域已設定 `Cache-Control: no-cache, no-store, must-revalidate`。開發 API 或頁面時,不需額外撰寫清除快取的邏輯。若需快取靜態資源,必須明確加上覆寫規則。 - **權限與資訊隱藏**: - 涉及瀏覽器硬體 API(如相機、麥克風、定位),必須確保在同源 (`self`) 下運行 (依循 `Permissions-Policy`)。 - 絕對禁止撰寫會洩露伺服器版本(如 IIS 或 ASP.NET MVC 標頭)的程式碼。 --- ## 3. 根目錄結構 (WWWRoot) /WWWRoot/ ├── .github/ # GitHub 與 Copilot 協作配置 (包含此指引檔) │ ├── App_Code/ # 【後端】C# 邏輯模組 │ ├── BLL/ # 業務邏輯層 (Biz{功能名稱}.cs) │ ├── DAL/ # 資料存取層 (Dbo{功能名稱}.cs) │ ├── Models/ # DTO 資料物件 (Dto{資料實體名稱}.cs) │ └── WS/ # WebService 程式碼後置檔案 ({功能名稱}WS.cs) │ ├── App_Data/ # 應用資料 (通常用於 Log 或本地資料庫檔案) │ └── Logs/ # 日誌記錄 │ ├── App_JS/ # 【前端】共用 JavaScript │ ├── core/ # 共用函式 (例如:ajaxHelper.js) │ ├── pages/ # 網頁使用的 JS (例如:pages/xx.js) │ └── modules/ # 可共用的 JS 模組 (例如:chart-wrapper.js) │ ├── Assets/ # 【前端】靜態視覺資源 │ ├── css/ │ ├── fonts/ │ ├── images/ │ └── icons/ │ ├── Lib/ # 【前端】第三方函式庫 (完全離線化,不應修改) │ ├── bootstrap@5.2.3/ │ ├── JQuery@3.7.1/ │ └── ... (其他如 Chart.js, Fontawesome) │ ├── Pages/ # 【前端】所有功能網站頁面 (採用功能資料夾結構) │ ├── System/ # 系統級共用元件 │ ├── MasterPage/ # 母版頁 │ ├── WebService/ # WebService.asmx │ └── UC/ # 使用者控制項 (.ascx) │ ├── Default.aspx # 網站首頁 ├── Login.aspx # 登入頁面 ├── Web.config # 主設定檔 ├── AppSettings.config # 自訂設定值 └── ConnectionStrings.config # 資料庫連線字串 --- ## 4. 功能資料夾結構 (Feature Folders) 所有新增的功能模組,其前端相關檔案(.aspx, .js)都應集中存放在 `/Pages/` 底下的獨立功能資料夾中,並於內部再區分前後台。 ### 範例:公司公告 (Announcements) /Pages/ ├── Front/ <-- 【前台】供一般使用者或外部檢視 │ └── Announcements/ <-- 依功能建置資料夾 │ ├── List.aspx <-- 前台列表頁 │ └── Detail.aspx <-- 前台詳情頁 │ └── Admin/ <-- 【後台】供系統管理員操作 └── Announcements/ <-- 依功能建置資料夾 ├── Manage.aspx <-- 後台管理/列表頁 └── Edit.aspx <-- 後台新增/編輯頁 ### 4.1 系統與共用資源 (System & UI) 前後台應擁有各自獨立的母版頁 (MasterPage),以隔離不同的版面配置與外部函式庫需求。 - **前台母版頁**: 存放於 `/System/MasterPage/Front.master` - **後台母版頁**: 存放於 `/System/MasterPage/Admin.master` --- ## 5. 檔案命名規範 ### 5.1 C# 類別 (位於 `App_Code/`) - **資料存取層**: `Dbo{功能名稱}.cs` - **業務邏輯層**: `Biz{功能名稱}.cs` - **資料傳輸物件**: `Dto{資料實體名稱}.cs` - **WebService**: `{功能名稱}WS.cs` ### 5.2 網頁檔案 (位於 `/Pages/`) - **前台列表頁**: `List.aspx` (或 `Index.aspx`) - **前台詳情頁**: `Detail.aspx` - **後台管理頁**: `Manage.aspx` - **後台新增/編輯頁**: `Edit.aspx` ### 5.3 資料庫物件 > ** Sybase ASE 識別碼長度上限為 30 個字元**,所有資料表名稱、Constraint 名稱、Index 名稱皆不得超過此限制。 - **資料表**: `{系統別}_{tablename}_m` (例如: `idl_announcements_m`) m 代表主檔;Log/異動紀錄加 `_l`,歷史檔加 `_h`,明細檔加 `_d` - **主鍵 (PK)**: `PK_{table_name}` (例如: `PK_moto_customers_m`) - **外鍵 (FK)**: `FK_{table_abbr}_{column}` (例如: `FK_moto_wo_items_d_order`) - **索引 (IX)**: `IX_{table_abbr}_{column}` (例如: `IX_moto_inv_log_d_cdate`) - **唯一條件約束 (UQ)**: `UQ_{table_abbr}` (例如: `UQ_moto_svc_pkg_items_d`) #### 常用表名縮寫對照 (用於 Constraint/Index 命名) | 完整表名片段 | 縮寫 | |---|---| | `work_order_items_d` | `wo_items_d` | | `work_order_photos_d` | `wo_photos_d` | | `inventory_log_d` | `inv_log_d` | | `service_packages_m` | `svc_pkg_m` | | `service_package_items_d` | `svc_pkg_items_d` | | `appointments_m` | `appt_m` | | `product_categories_m` | `prod_categ_m` | | `vehicle_part_mapping_d` | `veh_part_map_d` | | `vehicle_specs_m` | `veh_specs_m` | | `customers_m` | `cust_m` | | `vehicles_m` | `vehicles_m` | | `products_m` | `products_m` | | `work_orders_m` | `work_orders_m` | > 當表名本身未超長時 (如 `moto_customers_m`),Constraint/Index 可直接使用完整表名。 > 僅在組合後超過 30 字元時才使用縮寫。命名時請先計算長度確認未超限。 --- <!-- SPECKIT AGENT CONTEXT - DO NOT EDIT BELOW THIS LINE MANUALLY --> <!-- Last updated: 2026-04-17 --> ## Active Technologies - C# / .NET Framework 4.7.2,ASP.NET Web Site Project(非 MVC、非 .NET Core) + CHMC.DLL(DbHelperSQL、Log、MailClient)、jQuery 3.7.1、Bootstrap 5.2.3、DataTables、FontAwesome 6.4.0、Sybase.AdoNet4.AseClient (002-ewcs-welfare-portal) - Sybase ASE(透過 CHMC.DLL 的 DbHelperSQL 存取);上傳檔案儲存於 UNC 共用路徑 `~/Uploads/`(虛擬目錄對應至 `\\FileServer\Uploads`) (002-ewcs-welfare-portal) - C# / .NET Framework 4.7.2 + ASP.NET Web Site Project (001-meeting-room-booking) - Sybase ASE via CHMC.DLL / DbHelperSQL (001-meeting-room-booking)
格式化預覽
工具與套用範圍
03
適用工具
GitHub Copilot
Codex
Claude Code
Cursor
Antigravity
套用範圍
整個專案
指定路徑
指定路徑模式
每行一筆。當次下載仍可覆寫,不會修改此正式設定。
工具專用補充
04
只填差異,不要複製整份共用內容。
GitHub Copilot
Codex
Claude Code
Cursor
Antigravity
修改說明
選填;會保存在這次建立的新版本中。
保存並建立新版本
取消