VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(一)

简介: VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(一)

在B/S系统开发中,前后端分离开发设计已成为一种标准,而VUE作为前端三大主流框架之一,越来越受到大家的青睐,Antdv是Antd在Vue中的实现。本系列文章主要通过Antdv和Asp.net WebApi开发学生信息管理系统,简述前后端分离开发的主要相关内容,仅供学习分享使用,如有不足之处,还请指正。

什么是Antdv ?

Antdv【ant-design-vue】是Antd在Vue中的实现,为 Web 应用提供了丰富的基础 UI 组件,我们还将持续探索企业级应用的最佳 UI 实践。

在本示例项目中,主要包含两大部分:1.前端web项目【vsims.web】2.后端webapi项目【vsims.webapi】,本文先讲解前端web项目相关内容。

创建前端项目

通过命令vue create vsims.web 创建学生管理系统前端项目,在创建过程中,选择手动创建模式,选择Babel,TypeScripe和Router等,如下所示:

安装Antdv组件

切换到项目目录,然后安装Antdv组件,命令如下:

npm i --save ant-design-vue

安装组件示例截图如下所示:

vsims.web项目组成

通过脚手架创建项目且安装Antdv组件后,在HbuilderX中打开,如下所示:

注册Antdv组件

在安装组件后,并不能直接使用,需要进行注册后,才可以在项目中使用,注册分为全局完整注册,全局部分注册,和局部注册,本文为了简便,采用全局完整注册的方式。

通过主文件【main.js】进行注册,如下所示:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
//1. 引入Antdv组件和样式
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
const app = createApp(App);
app.use(router).use(Antd).mount('#app')

定制主题

由于本项目使用VUE3.0,所以定制主题,需要在项目中创建vue.config.js文件,然后添加主题配置代码,如下所示:

const {
    defineConfig
} = require('@vue/cli-service')
module.exports = defineConfig({
    css: {
        loaderOptions: {
            less: {
                lessOptions: {
                    modifyVars: {
                        'primary-color': '#1DA57A',
                        'link-color': '#1DA57A',
                        'border-radius-base': '2px',
                    },
                    javascriptEnabled: true,
                },
            },
        },
    },
    chainWebpack: config => {
        config
        .plugin('html')
        .tap(args => {
            args[0].title = 'SIMS'
            return args
        })
    },
    transpileDependencies: true
})

运行项目(一)

在项目目录下,打开命令行,运行npm run serve启动项目,如下所示:

在浏览器中输入网址http://localhost:8080/,打开如下所示:

如上图所示,则表示上述配置成功。

添加路由

删除掉App.vue中默认生成的代码,然后添加路由视图【router-view】,代码如下所示:

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>
<style>
</style>

注意:因为路由在创建项目时已经添加,所以可以直接使用。

系统布局

在学生信息管理系统中,采用传统的上,中【左右】,下布局。在views视图文件中,新建HomeView.vue视图文件,如下所示:

<template>
    <div id="layout">
        <a-layout>
            <a-layout-header>Header</a-layout-header>
            <a-layout>
                <a-layout-sider>Sider</a-layout-sider>
                <a-layout-content>Content</a-layout-content>
            </a-layout>
            <a-layout-footer>Footer</a-layout-footer>
        </a-layout>
    </div>
</template>
<script>
    export default {
        name: 'App',
        components: {
        }
    }
</script>
<style>
    #app{
        height: inherit;
    }
    #layout{
        height: inherit;
    }
    .ant-layout{
        height: inherit;
    }
    #layout .code-box-demo {
        text-align: center;
    }
    #layout .ant-layout-header,
    #layout .ant-layout-footer {
        color: #fff;
        background: #7dbcea;
    }
    [data-theme='dark'] #layout .ant-layout-header {
        background: #6aa0c7;
    }
    [data-theme='dark'] #layout .ant-layout-footer {
        background: #6aa0c7;
    }
    #layout .ant-layout-footer {
        line-height: 1.5;
    }
    #layout .ant-layout-sider {
        color: #fff;
        line-height: 120px;
        background: #3ba0e9;
    }
    [data-theme='dark'] #layout .ant-layout-sider {
        background: #3499ec;
    }
    #layout .ant-layout-content {
        min-height: 120px;
        color: #fff;
        line-height: 120px;
        background: rgba(16, 142, 233, 1);
    }
    [data-theme='dark'] #layout .ant-layout-content {
        background: #107bcb;
    }
    #layout>.code-box-demo>.ant-layout+.ant-layout {
        margin-top: 48px;
    }
</style>

重新打开浏览器,如下所示:

添加菜单

在默认布局中创建成功后,在左侧布局容器中,添加菜单内容,如下所示:

<a-layout-sider v-model:collapsed="collapsed">
    <a-button type="primary" style="margin-bottom: 5px" @click="toggleCollapsed">
        <MenuUnfoldOutlined v-if="collapsed" />
        <MenuFoldOutlined v-else />
    </a-button>
    <a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" mode="inline" theme="dark" :inline-collapsed="collapsed">
        <a-menu-item key="1">
            <template #icon><HomeOutlined /></template>
            <router-link to="/main">首页</router-link>
        </a-menu-item>
        <a-sub-menu key="sub1">
            <template #icon>
                <ReadOutlined />
            </template>
            <template #title>
                <span class="onemenu">学生管理</span>
            </template>
            <a-menu-item key="5">
                <img src="../assets/icon_student.png" class="icon" />
                <router-link to="/student">学生管理</router-link>
            </a-menu-item>
            <a-menu-item key="6">
                <img src="../assets/icon_classes.png" class="icon" />
                <router-link to="/classes">班级管理</router-link>
            </a-menu-item>
            <a-menu-item key="7">
                <img src="../assets/icon_course.png" class="icon" />
                <router-link to="/course">课程管理</router-link>
                </a-menu-item>
            <a-menu-item key="8">
                <img src="../assets/icon_score.png" class="icon" />
                <router-link to="score">成绩管理</router-link>
                </a-menu-item>
        </a-sub-menu>
        <a-sub-menu key="sub2">
            <template #icon>
                <AppstoreOutlined />
            </template>
            <template #title>
                <span class="onemenu">系统管理</span>
            </template>
            <a-menu-item key="9">
                <img src="../assets/icon_personal.png" class="icon" />
                <router-link to="/personal">个人信息</router-link>
                </a-menu-item>
            <a-menu-item key="10">
                <img src="../assets/icon_user.png" class="icon" />
                <router-link to="/user">用户管理</router-link>
                </a-menu-item>
            <a-menu-item key="11">
                <img src="../assets/icon_role.png" class="icon" />
                <router-link to="/role">角色管理</router-link>
                </a-menu-item>
        </a-sub-menu>
    </a-menu>
</a-layout-sider>

在内容布局中,添加路由视图,作为二级视图,如下所示:

<a-layout-content>
    <router-view></router-view>
</a-layout-content>

添加菜单对应的视图

根据系统设计,主要包含学生管理,成绩管理,班级管理,课程管理,以及系统管理等相关内容,每一个功能对应一个页面视图,如下所示:

每一个视图对应以路由,视图创建完成后,修改router\index.ts文件,添加路由,如下所示:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import LoginView from '../views/LoginView.vue'
import MainView from '../views/MainView.vue'
import StudentView from '../views/StudentView.vue'
import ClassesView from '../views/ClassesView.vue'
import CourseView from '../views/CourseView.vue'
import ScoreView from '../views/ScoreView.vue'
import PersonalView from '../views/PersonalView.vue'
import MenuView from '../views/MenuView.vue'
import RoleView from '../views/RoleView.vue'
import UserView from '../views/UserView.vue'
const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'home1',
    component: HomeView
  },
  {
    path: '/home',
    name: 'home',
    component: HomeView,
    children:[
        {
            path:'/main',
            name:'main',
            component:MainView
        },
        {
            path:'/student',
            name:'student',
            component:StudentView
        },
        {
            path:'/classes',
            name:'classes',
            component:ClassesView
        },
        {
            path:'/course',
            name:'course',
            component:CourseView
        },
        {
            path:'/score',
            name:'score',
            component:ScoreView
        },
        {
            path:'/personal',
            name:'personal',
            component:PersonalView
        },
        {
            path:'/menu',
            name:'menu',
            component:MenuView
        },
        {
            path:'/user',
            name:'user',
            component:UserView
        },
        {
            path:'/role',
            name:'role',
            component:RoleView
        }
    ]
  },
  {
    path:'/login',
    name:'login',
    component:LoginView
  },
]
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})
export default router

创建登录视图

在学生信息管理系统中,进入主页面之前,需要先进行登录,如下所示,

<template>
    <div id="login">
        <a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
            <div id="title">
                <h1>学生信息管理系统</h1>
            </div>
            <a-form-item label="Username" name="username" :rules="[{ required: true, message: 'Please input your username!' }]">
                <a-input v-model:value="formState.username" />
            </a-form-item>
            <a-form-item label="Password" name="password" :rules="[{ required: true, message: 'Please input your password!' }]">
                <a-input-password v-model:value="formState.password" />
            </a-form-item>
            <a-form-item name="remember" :wrapper-col="{ offset: 8, span: 16 }">
                <a-checkbox v-model:checked="formState.remember">Remember me</a-checkbox>
            </a-form-item>
            <a-form-item :wrapper-col="{ offset: 8, span: 16 }">
                <a-button style="margin-right: 10px;">Cancel</a-button>
                <a-button type="primary" html-type="submit">Submit</a-button>
            </a-form-item>
        </a-form>
    </div>
</template>
<script lang="ts">
    import {
        defineComponent,
        reactive,
    } from 'vue';
    import {
        useRouter,
        //useRoute
    } from 'vue-router'
    interface FormState {
        username: string;
        password: string;
        remember: boolean;
    }
    export default defineComponent({
        setup() {
            const router = useRouter();
            //const route= useRoute();
            const formState = reactive < FormState > ({
                username: '',
                password: '',
                remember: true,
            });
            const onFinish = (values: any) => {
                console.log(values);
                console.log('Success:', values);
                router.push('/home');
                //this.$router.push('/home');
            };
            const onFinishFailed = (errorInfo: any) => {
                console.log('Failed:', errorInfo);
            };
            return {
                formState,
                onFinish,
                onFinishFailed,
            };
        },
    });
</script>
<style>
    body{
        background-image: url(../assets/bg.gif);
        background-repeat: no-repeat;
        background-size: 100% 100%;
    }
    #login{
        position: absolute;
        left: 35%;
        top: 30%;
    }
    #title h1{
        color: #FFFFFF;
    }
    .ant-form{
        width: 60vh;
        height: 35vh;
        background-color:rgba(10,10,10,0.2);
        padding: 0.625rem !important;
    }
</style>

运行项目(二)

当系统搭建完成后,启动项目,然后在浏览器中打开,如下所示:

以上就是Antdv+Asp.net WebApi开发学生信息管理系统的开篇介绍,因为是前后端分离项目,还未涉及到后端内容,所以有些是写成固定值,后续会进一步优化成动态加载内容。

备注

新的开始,新的篇章。学习编程,从关注【老码识途】开始!!!

相关文章
|
5月前
|
开发框架 .NET BI
ASP.NET公立医院健康体检信息管理系统源码
健康体检信息管理系统是专门针对医院体检中心的日常业务运作的特点和流程,结合数字化医院建设要求进行设计研发的一套应用系统。该系统覆盖体检中心的所有业务,完成从预约、登记、收费、检查、检验、出报告、分析、报表等所有工作,规范了体检流程,提高了工作效率。体检系统为每个体检者建立一套完整的体检档案,与病人的门诊、住院诊疗信息有机集成, 真正体现数字化医院以病人为中心的建设原则。
93 1
|
5月前
|
开发框架 安全 .NET
ASP.NET三甲医院手术麻醉信息管理系统源码 对接麻醉机、监护仪、血气分析仪
辅助医院建设 •支持三级医院评级需求 •支持智慧医院评级需求 •支持互联互通评级需求 •支持电子病历评级需求
58 0
|
5月前
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
61 1
|
2月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
39 8
|
1月前
|
开发框架 JavaScript 前端开发
|
3月前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
4月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
71 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
154 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
159 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
196 0

相关实验场景

更多
下一篇
无影云桌面