VUE3.0+Antdv+Asp.net WebApi開發學生信息管理系統(完)

来源:https://www.cnblogs.com/hsiang/archive/2022/08/30/16634478.html
-Advertisement-
Play Games

在B/S系統開發中,前後端分離開發設計已成為一種標準,而VUE作為前端三大主流框架之一,越來越受到大家的青睞,Antdv是Antd在Vue中的實現。本系列文章主要通過Antdv和Asp.net WebApi開發學生信息管理系統,簡述前後端分離開發的主要相關內容,僅供學習分享使用,如有不足之處,還請指... ...


在B/S系統開發中,前後端分離開發設計已成為一種標準,而VUE作為前端三大主流框架之一,越來越受到大家的青睞,Antdv是Antd在Vue中的實現。本系列文章主要通過Antdv和Asp.net WebApi開發學生信息管理系統,簡述前後端分離開發的主要相關內容,僅供學習分享使用,如有不足之處,還請指正。

在本示例項目中,主要包含兩大部分:1.前端web項目【vsims.web】2.後端webapi項目【vsims.webapi】,經過前四篇文章的講解,已經對前端項目的架構和組成部分,以及後端webapi項目的開發有了大致瞭解,熟悉了學生管理模塊所涉及到的列表,表單開發的相關內容,並且對學生管理其他幾個模塊【如:班級管理,課程管理,成績管理】的講解。今天繼續講解系統管理項目模塊的開發,希望能對大家有所幫助。

整體佈局

系統整體功能分為學生管理【包括:學生管理,成績管理,課程管理,班級管理】和系統管理【包括:個人信息,用戶管理,角色管理,菜單管理】。關於系統管理各個模塊的詳細說明,下麵分別進行講解【由於篇幅有限,僅貼出頁面Html代碼,其他代碼可通過下載源碼進行查看】。整體頁面佈局,如下所示:

個人信息

個人信息主要展示當前登錄用戶的個人信息,包括個人賬戶,昵稱,角色等,如下所示:

 1 <template>
 2     <a-card hoverable style="width: 300px;">
 3         <template #cover>
 4             <img alt="example" src="https://gw.alipayobjects.com/zos/rmsportal/JiqGstEfoWAOHiTxclqi.png" />
 5         </template>
 6         <a-card-meta title="個人信息" description="個人信息展示">
 7             <template #avatar>
 8                 <a-image :width="30" :height="30" src="/images/icon_student.png" />
 9             </template>
10         </a-card-meta>
11         <p>用戶名: {{userName}}</p>
12         <p>&nbsp;&nbsp;稱: {{nickName}}</p>
13         <p>&nbsp;&nbsp;色: {{roleName}}</p>
14     </a-card>
15 </template>

個人信息截圖,如下所示:

 

 用戶管理

用戶管理主要用於創建用戶,修改用戶,及授權角色等功能。具體如下所示:

 1 <template>
 2     <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="用戶管理" sub-title="用戶信息基本操作" />
 3     <a-form :model="formState" name="horizontal_query" layout="inline" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
 4         <a-form-item label="用戶名">
 5             <a-input v-model:value="formState.userName"></a-input>
 6         </a-form-item>
 7         <a-form-item>
 8             <a-button type="primary" html-type="submit">查詢</a-button>
 9         </a-form-item>
10         <a-form-item>
11             <a-button type="primary" @click="add">新增</a-button>
12         </a-form-item>
13     </a-form>
14     <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :row-key="record => record.id">
15         <template #bodyCell="{ column, text, record }">
16             <template v-if="[ 'name','teacher', 'createUser','lastEditUser'].includes(column.dataIndex)">
17                 <div>{{ text }}</div>
18             </template>
19             <template v-else-if="[ 'createTime','lastEditTime'].includes(column.dataIndex)">
20                 <div>{{formatDateString(text)}}</div>
21             </template>
22             <template v-else-if="column.dataIndex === 'operation'">
23                 <div class="editable-row-operations">
24                     <a @click="edit(record.id)">編輯</a>
25                     &nbsp;|&nbsp;
26                     <a @click="edit1(record.id)">授權</a>
27                 </div>
28             </template>
29         </template>
30     </a-table>
31     <a-pagination v-model:current="pagination.current" :total="pagination.total" @change="change" />
32     <a-modal ref="modalUserRef" v-model:visible="visible" okText="保存" cancelText="取消" :wrap-style="{ overflow: 'hidden' }" @ok="handleOk">
33         <div>
34             <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="用戶管理" sub-title="新增或編輯用戶信息" />
35             <br />
36             <a-form :model="addEditFormState">
37                 <a-form-item label="用戶名">
38                     <a-input v-model:value="addEditFormState.userName" />
39                 </a-form-item>
40                 <a-form-item label="昵稱">
41                     <a-input v-model:value="addEditFormState.nickName" />
42                 </a-form-item>
43                 <a-form-item label="密碼">
44                     <a-input-password v-model:value="addEditFormState.password" />
45                 </a-form-item>
46                 <a-form-item label="確認密碼">
47                     <a-input-password v-model:value="addEditFormState.confirmPassword" />
48                 </a-form-item>
49             </a-form>
50         </div>
51     </a-modal>
52     <a-modal ref="modalRoleRef" v-model:visible="visible1" okText="保存" cancelText="取消" :wrap-style="{ overflow: 'hidden' }" @ok="handleOk1">
53         <div class="userrole">
54             <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="用戶授權" sub-title="用戶許可權信息" />
55             <br />
56             <div>
57                 <div style="margin-bottom: 16px">
58                     <span style="margin-left: 8px">
59                         <template v-if="hasSelected">
60                             {{ `選擇了 ${selectedRowKeys.length} 個角色` }}
61                         </template>
62                     </span>
63                 </div>
64                 <a-table :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :columns="columnRoles" :data-source="roleDataSource" :pagination="false" :row-key="record => record.id" />
65             </div>
66         </div>
67     </a-modal>
68 </template>

用戶管理示例截圖

 

角色管理

角色管理主要用於對角色的創建,編輯,查詢,及分配菜單等操作,代碼如下所示:

 1 <template>
 2     <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="角色管理" sub-title="角色信息基本操作" />
 3     <a-form :model="formState" name="horizontal_query" layout="inline" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
 4         <a-form-item label="角色名">
 5             <a-input v-model:value="formState.roleName"></a-input>
 6         </a-form-item>
 7         <a-form-item>
 8             <a-button type="primary" html-type="submit">查詢</a-button>
 9         </a-form-item>
10         <a-form-item>
11             <a-button type="primary" @click="add">新增</a-button>
12         </a-form-item>
13     </a-form>
14     <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :row-key="record => record.id">
15         <template #bodyCell="{ column, text, record }">
16             <template v-if="[ 'name','teacher', 'createUser','lastEditUser'].includes(column.dataIndex)">
17                 <div>{{ text }}</div>
18             </template>
19             <template v-else-if="[ 'createTime','lastEditTime'].includes(column.dataIndex)">
20                 <div>{{formatDateString(text)}}</div>
21             </template>
22             <template v-else-if="column.dataIndex === 'operation'">
23                 <div class="editable-row-operations">
24                     <a @click="edit(record.id)">編輯</a>
25                     &nbsp;|&nbsp;
26                     <a @click="edit1(record.id)">分配菜單</a>
27                 </div>
28             </template>
29         </template>
30     </a-table>
31     <a-pagination v-model:current="pagination.current" :total="pagination.total" @change="change" />
32     <a-modal ref="modalRoleRef" v-model:visible="visible" okText="保存" cancelText="取消" :wrap-style="{ overflow: 'hidden' }" @ok="handleOk">
33         <div>
34             <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="角色管理" sub-title="新增或編輯角色信息" />
35             <br />
36             <a-form :model="addEditFormState">
37                 <a-form-item label="角色名">
38                     <a-input v-model:value="addEditFormState.name" />
39                 </a-form-item>
40                 <a-form-item label="描述">
41                     <a-input v-model:value="addEditFormState.description" />
42                 </a-form-item>
43             </a-form>
44         </div>
45     </a-modal>
46     <a-modal ref="modalMenuRef" v-model:visible="visible1" okText="保存" cancelText="取消" :wrap-style="{ overflow: 'hidden' }" @ok="handleOk1">
47         <div class="rolemenu">
48             <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="角色分配菜單" sub-title="菜單分配信息" />
49             <br />
50             <div>
51                 <div style="margin-bottom: 8px">
52                     <span style="margin-left: 8px">
53                         <template v-if="hasSelected">
54                             {{ `選擇了 ${selectedRowKeys.length} 個菜單` }}
55                         </template>
56                     </span>
57                 </div>
58                 <a-table :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :columns="columnMenus" :data-source="menuDataSource" :pagination="false" :row-key="record => record.id" />
59             </div>
60         </div>
61     </a-modal>
62 </template>

角色模塊,截圖如下所示:

菜單管理

菜單管理,主要用於管理導航相關配置,包括圖標,順序,層級等相關內容,如下所示:

 1 <template>
 2     <a-page-header style="border: 1px solid rgb(235, 237, 240)" title="菜單管理" sub-title="慘淡信息基本操作" />
 3     <a-form :model="formState" name="horizontal_query" layout="inline" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
 4         <a-form-item label="菜單名">
 5             <a-input v-model:value="formState.menuName"></a-input>
 6         </a-form-item>
 7         <a-form-item>
 8             <a-button type="primary" html-type="submit">查詢</a-button>
 9         </a-form-item>
10         <a-form-item>
11             <a-button type="primary" @click="add">新增</a-button>
12         </a-form-item>
13     </a-form>
14     <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :row-key="record => record.id">
15         <template #bodyCell="{ column, text, record }">
16             <template v-if="[ 'name','id','parentId','sortId','description','url'].includes(column.dataIndex)">
17                 <div>{{ text }}</div>
18             </template>
19             <template v-else-if="[ 'icon'].includes(column.dataIndex)">
20                 <div> 
21                     <a-image :width="20" :height="20" :src="text"/>
22                 </div>
23             </template>
24             <template v-else-if="column.dataIndex === 'operation'">
25                 <div class="editable-row-operations">
26                     <a @click="edit(record.id)">編輯</a>
27                 </div>
28             </template>
29         </template>
30     </a-table>
31     <a-pagination v-model:current="pagination.current" :total="pagination.total" @change="change" />
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天我會進行StoneDB資料庫在Debian系統下的安裝。 官方文檔中沒有說明在Debian系統的安裝步驟,我來試試能否順利安裝。 準備Debian系統 我是在本地使用虛擬機安裝的Debian 11.2系統,安裝過程比較順利,安裝完成後。先為Debian系統裝上SSH,然後通過SSH連接虛擬機命令 ...
  • 簡述 實時數據處理領域中,使用 Flink 方式,除了從日誌服務訂閱埋點數據外,總離不開從關係型資料庫訂閱並處理相關業務數據,這時就需要監測並捕獲資料庫增量數據,將變更按發生的順序寫入到消息中間件以供計算(或消費)。 本文主要介紹如何通過 CloudCanal 快速構建一條高效穩定運行的 MySQL ...
  • 今天我會進行StoneDB資料庫在CentOS 7系統下的安裝。 官方的快速部署文檔中已有詳細的安裝流程,我會嚴格按照流程操作。 準備CentOS系統 我在本地虛擬機上安裝好了CentOS 7系統的2207版本。安裝過程比較順利,裝完系統後開啟ssh服務,就可以用ssh客戶端連接,先使用下麵的系統更 ...
  • DDL(Data Definition Languages)語句: 資料庫定義語句:用來創建資料庫中的表、索引、視圖、存儲過程、觸發器等 常用的語句關鍵字有:create,alter,drop,truncate,comment,rename DML(Data Manipulation Languag ...
  • 在地圖或地理信息有關的場景里,地址關鍵詞的檢索尤其重要。比如打開百度地圖,想要查詢某個位置的信息“北京市海澱區清華東路17號中國農業大學”,往往我們輸入的是關鍵詞“中國農業大學”而不是精確到街道的詳細地址信息。 ...
  • 對於想買車的用戶來說,如果走在路上刷社交軟體時突然在App里收到一條廣告:“前方500米商圈裡的某品牌汽車正在做優惠,力度大福利多。”不管買不買,八成都會去看看,原因有三:距離近、需求匹配、有優惠。那麼這就是一條成功的投放廣告,廣告最重要的就是尋找關鍵的客戶目標群,所以各App的營銷人員都在思考如何 ...
  • 1. 丐版 HelloWebGPU 最簡單的 WebGPU 程式應該是這樣的: <script> const init = () => { if ('gpu' in navigator) { console.log(navigator.gpu) } else { console.log('瀏覽器不支 ...
  • 8 JSON 因平時工作時,使用JSON的場景比較多,其JSON語法不再介紹,僅介紹在JavaScript中JSON的解析和序列化。 8.1 JSON 對象 JSON對象有兩個方法: stringify():將JavaScript序列化為JSON字元串 parse():將JSON解析為原生JavaS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...