20251105 工號設定

更新 發佈閱讀 21 分鐘

這是一個很棒的個人化功能。要實現「根據工號保存設定」,我們需要將架構從「純前端 (JavaScript)」擴展為「前端 + 後端 (資料庫)」。 核心思路是: * 後端 (資料庫): 建立一個資料表,用來儲存 EmployeeID 和他勾選的欄位字串 (例如:"col-pdid,col-weight,col-tam")。 * 後端 (Controller): * Index 載入時:抓取目前工號 -> 查詢資料庫 -> 取得該工號的設定字串 -> 將字串傳給 View。 * 新增一個 SavePreferences Action:接收前端傳來的設定字串 -> 存入/更新資料庫。 * 前端 (View/JavaScript): * 頁面載入時:接收 Controller 傳來的設定字串,如果字串為空(預設空白),則不勾選任何項目。如果 有字串,則解析字串並自動勾選對應欄位。 * 新增「保存設定」按鈕:點擊時,蒐集當前所有勾選的欄位,透過 AJAX 傳給後端的 SavePreferences Action。 步驟 1:資料庫 (概念) 您需要在資料庫中建立一個簡單的資料表,例如: Table: UserColumnPreferences | ColumnName | DataType | Notes | | :--- | :--- | :--- | | EmployeeID | nvarchar(50) | 主索引鍵 (Primary Key) | | VisibleColumns | nvarchar(MAX) | 儲存逗號分隔的 class 名稱 | 步驟 2:Controller (VB.NET) 假設您已經有方法可以取得「目前登入者的工號」(例如 Session("EmployeeID") 或 User.Identity.Name)。 ' 假設您使用 Entity Framework 或 ADO.NET ' Public db As New MyDbContext() Public Class HomeController Inherits Controller ' GET: Home Public Function Index() As ActionResult Dim employeeID As String = "EMP001" ' 範例:您需要替換成真實的工號取得方式 ' 1. 取得產品資料 (與之前相同) Dim products As New List(Of Product) From { ... } ' 您的產品資料 ' 2. 查詢使用者的欄位偏好設定 ' ----------------------------------------------------- Dim savedPrefs As String = "" ' 預設為空白 ' *** 假設您有一個資料庫服務來抓取資料 *** ' Dim preferenceEntry = db.UserColumnPreferences.Find(employeeID) ' If preferenceEntry IsNot Nothing Then ' savedPrefs = preferenceEntry.VisibleColumns ' End If ' ----------------------------------------------------- ' 3. 將設定傳遞給 View ViewBag.SavedPreferences = savedPrefs Return View(products) End Function ' POST: Home/SavePreferences <HttpPost> Public Function SavePreferences(preferences As String) As ActionResult Dim employeeID As String = "EMP001" ' 範例:您需要替換成真實的工號取得方式 ' *** 儲存到資料庫 (UPSERT 邏輯) *** ' ----------------------------------------------------- ' Dim preferenceEntry = db.UserColumnPreferences.Find(employeeID) ' If preferenceEntry IsNot Nothing Then ' ' 更新 ' preferenceEntry.VisibleColumns = preferences ' Else ' ' 新增 ' db.UserColumnPreferences.Add(New UserColumnPreferences With { ' .EmployeeID = employeeID, ' .VisibleColumns = preferences ' }) ' End If ' db.SaveChanges() ' ----------------------------------------------------- ' 回傳成功訊息給 AJAX Return Json(New With {.success = True, .message = "設定已保存"}) End Function End Class 步驟 3:View (Index.vbhtml) 這是變更的關鍵。我們需要: * 移除所有 Checkbox 上的預設 checked 屬性 (以符合「預設為空白」)。 * 新增「保存設定」按鈕。 * 大幅修改 JavaScript 邏輯。 <!-- end list --> @ModelType IEnumerable(Of MvcVbApp.Product) ' 替換成你的專案命名空間 <h2>產品列表</h2> <div class="panel panel-default" style="margin-bottom: 20px;"> <div class="panel-heading"> <strong>顯示欄位</strong> </div> <div class="panel-body"> <div class="checkbox"> <label> <input type="checkbox" id="checkAll" /> <strong>全部選取</strong> </label> </div> <hr style="margin-top: 10px; margin-bottom: 20px;"> <div class="row"> <div class="col-md-3 col-sm-6"> <div class="checkbox"> <label> <input type="checkbox" class="column-toggle" data-column="col-pdid" /> PDID </label> </div> </div> <div class="col-md-3 col-sm-6"> <div class="checkbox"> <label> <input type="checkbox" class="column-toggle" data-column="col-qty" /> QTY </label> </div> </div> </div> <hr style="margin-top: 20px; margin-bottom: 10px;"> <button id="btnSavePrefs" class="btn btn-primary"> <span class="glyphicon glyphicon-floppy-disk"></span> 保存我的勾選 </button> <span id="saveStatus" style="margin-left: 10px; color: green;"></span> </div> </div> <table class="table table-bordered table-striped" id="productTable"> </table> @Section Scripts <script> $(document).ready(function () { // ------------------------------------------------- // 函式 1: 根據子項目,更新 "全部選取" 的狀態 // ------------------------------------------------- function updateCheckAllState() { var allChecked = $(".column-toggle:checked").length === $(".column-toggle").length; $("#checkAll").prop("checked", allChecked); } // ------------------------------------------------- // 函式 2: 根據勾選狀態,切換欄位顯示/隱藏 // ------------------------------------------------- function toggleColumn(columnClass, isChecked) { $("." + columnClass).toggle(isChecked); } // ------------------------------------------------- // 頁面載入時:套用保存的設定 // ------------------------------------------------- var savedPrefs = "@(ViewBag.SavedPreferences)"; if (savedPrefs) { // 如果有保存設定 var prefList = savedPrefs.split(','); $(".column-toggle").each(function () { var col = $(this).data("column"); if (prefList.includes(col)) { $(this).prop("checked", true); } }); } // 如果 savedPrefs 為空 (預設空白),則不執行任何操作,保持全部未勾選 // 載入後,立即根據 "預設勾選" (來自DB) 執行一次欄位隱藏 $(".column-toggle").each(function () { toggleColumn($(this).data("column"), $(this).prop("checked")); }); updateCheckAllState(); // 更新 "全部選取" 按鈕狀態 // ------------------------------------------------- // 事件綁定 1: "全部選取" // ------------------------------------------------- $("#checkAll").click(function () { var isChecked = $(this).prop("checked"); $(".column-toggle").prop("checked", isChecked); // 觸發 change (會執行下面的 toggleColumn) $(".column-toggle").trigger("change"); }); // ------------------------------------------------- // 事件綁定 2: "單一欄位勾選" // ------------------------------------------------- $(".column-toggle").change(function () { var columnClass = $(this).data("column"); var isChecked = $(this).prop("checked"); toggleColumn(columnClass, isChecked); updateCheckAllState(); // 更新 "全部選取" }); // ------------------------------------------------- // 事件綁定 3: "保存設定" 按鈕 (AJAX) // ------------------------------------------------- $("#btnSavePrefs").click(function () { var selectedCols = []; // 蒐集所有 "已勾選" 的欄位 $(".column-toggle:checked").each(function () { selectedCols.push($(this).data("column")); }); // 將陣列轉為字串 var prefsString = selectedCols.join(','); $("#saveStatus").text("保存中..."); // 使用 AJAX 傳送到 Controller $.ajax({ url: "@Url.Action("SavePreferences", "Home")", type: "POST", data: { preferences: prefsString }, success: function (response) { if (response.success) { $("#saveStatus").text(response.message).fadeIn().delay(3000).fadeOut(); } }, error: function () { $("#saveStatus").text("保存失敗").css("color", "red").fadeIn().delay(3000).fadeOut(); } }); }); }); </script> End Section

留言
avatar-img
Pocheng Chiu的沙龍
0會員
24內容數
Pocheng Chiu的沙龍的其他內容
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。 在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。 我
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。 在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。 我
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。 核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。 1. 欄位勾選區 (更新) 請將 Views/Home/I
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。 核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。 1. 欄位勾選區 (更新) 請將 Views/Home/I
2025/10/13
好的,理解您的需求。這是一份標準作業流程 (SOP) 格式的知識操作文件,旨在引導初學者一步步使用 Azure DevOps Boards 進行專案管理。 Azure DevOps Boards 專案管理標準作業流程 (SOP) 1. 文件目的 (Objective) 本文件旨在提供一份清晰、可執行
2025/10/13
好的,理解您的需求。這是一份標準作業流程 (SOP) 格式的知識操作文件,旨在引導初學者一步步使用 Azure DevOps Boards 進行專案管理。 Azure DevOps Boards 專案管理標準作業流程 (SOP) 1. 文件目的 (Objective) 本文件旨在提供一份清晰、可執行
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
多國呼籲於2030年前全面禁用含汞的牙科填充物 葉騰可望成為荷蘭最年輕總理 秘魯與墨西哥斷交 TikTok遭指控助長脆弱群體尋短 歐盟多位官員的手機定位資料遭公開販售
Thumbnail
多國呼籲於2030年前全面禁用含汞的牙科填充物 葉騰可望成為荷蘭最年輕總理 秘魯與墨西哥斷交 TikTok遭指控助長脆弱群體尋短 歐盟多位官員的手機定位資料遭公開販售
Thumbnail
20251105 「護法總說」課程後問題回覆 20251018「護法總說」課後,同學陸續提出問題,彙整後回覆如下。 1、滿願童子相關: 1-1 家裡已有滿願童子,還可以供養荷莉蒂姆和冰羯羅童子的護子母唐卡嗎? A:可以供養荷莉蒂姆+滿願童子護子母唐卡,也可以用原來的滿願童子
Thumbnail
20251105 「護法總說」課程後問題回覆 20251018「護法總說」課後,同學陸續提出問題,彙整後回覆如下。 1、滿願童子相關: 1-1 家裡已有滿願童子,還可以供養荷莉蒂姆和冰羯羅童子的護子母唐卡嗎? A:可以供養荷莉蒂姆+滿願童子護子母唐卡,也可以用原來的滿願童子
Thumbnail
川習會圓滿落幕 這週川習會順利結束,正如我們先前預期的風平浪靜。沒有外界想像中的變數,雙方僅談了一個多小時就結束,整體氣氛平和,像是一場形式性的對話。 達成的協議也如我們在上一篇專欄所預料,美國暫緩實施 100% 的新關稅,並將部分對中關稅從 57% 降至 47%,中國則恢復採購美國大豆,並延長
Thumbnail
川習會圓滿落幕 這週川習會順利結束,正如我們先前預期的風平浪靜。沒有外界想像中的變數,雙方僅談了一個多小時就結束,整體氣氛平和,像是一場形式性的對話。 達成的協議也如我們在上一篇專欄所預料,美國暫緩實施 100% 的新關稅,並將部分對中關稅從 57% 降至 47%,中國則恢復採購美國大豆,並延長
Thumbnail
當前美股受到幾個重大因素的影響,導致市場呈現觀望的現象。隨著美國總統大選和聯邦公開市場委員會(FOMC)貨幣政策會議的臨近,投資者的觀望態度日益明顯。專家預測,選舉將帶來較高的波動性,但CFRA策略師強調,企業財報和美聯儲政策的影響更為深遠。波動率指數(VIX)僅小幅上漲,顯示市場恐慌情緒有限。
Thumbnail
當前美股受到幾個重大因素的影響,導致市場呈現觀望的現象。隨著美國總統大選和聯邦公開市場委員會(FOMC)貨幣政策會議的臨近,投資者的觀望態度日益明顯。專家預測,選舉將帶來較高的波動性,但CFRA策略師強調,企業財報和美聯儲政策的影響更為深遠。波動率指數(VIX)僅小幅上漲,顯示市場恐慌情緒有限。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News