四川省城乡住房和城乡建设厅网站首页云南设计网

web/2025/10/1 16:12:35/文章来源:
四川省城乡住房和城乡建设厅网站首页,云南设计网,临沂 网站推广,拉米拉网站建设本篇实现主页面功能#xff0c;包括主页面排版布局#xff0c;学生管理模块实现#xff0c;后台接口实现等功能。 目录 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码…本篇实现主页面功能包括主页面排版布局学生管理模块实现后台接口实现等功能。 目录 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码 2.1 代码结构 2.2 代码实现 3.后端代码 3.1 代码结构 3.2 代码实现 4.其他 4.1 vscode快速编写正则表达式 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码 2.1 代码结构 2.2 代码实现 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm i qs -D import qs from qs//登录接口 export function login(data) {return service({method: post,url: /login,data}) }//学生信息查询接口 export function students(params) {return service({method: get,url: /api/students,params}) }//删除学生信息 export function delstudentsbyid(id) {return service({method: get,//此处应用模板字符串传参url: /api/students/del?id${id}}) }export function delstudentsbyreqid(id) {return service({method: get,//此处应用模板字符串传参url: /api/students/del/${id}}) }export function addStudent(data) {//data qs.stringify(data)return service({method: post,url: /api/info,data}) }export function updateStudent(data) {return service({method: post,url: /api/updateinfo,data}) }export function getInfo() {return service({method: get,url: /api/getinfo}) }export function delinfo(id) {return service({method: get,//此处应用模板字符串传参url: /api/info/del/id${id}}) } src/components/common/students/InfoList.vue !-- 信息列表页面 -- templatediv classinfoList!-- 新增表单 --el-form :inlinetrue :modelform classdemo-form-inline sizesmallel-form-itemel-button typeprimary clickadd(form)新增/el-button/el-form-item/el-formel-table:datatableDataborderstylewidth: 100%el-table-columnpropnamelabel姓名aligncenter/el-table-columnel-table-columnpropagelabel年龄aligncenter/el-table-columnel-table-columnpropsexlabel性别aligncenter/el-table-columnel-table-columnpropfatherlabel父亲aligncenter/el-table-columnel-table-columnpropmotherlabel母亲aligncenter/el-table-columnel-table-columnproptimelabel入校时间aligncenter/el-table-columnel-table-columnpropaddresslabel家庭住址aligncenter/el-table-columnel-table-columnpropphonelabel联系方式aligncenter/el-table-column!-- scope.row表示点击的当前行包含当前行的所有数据 --el-table-columnlabel操作 aligncentertemplate slot-scopescopeel-button typedanger sizemini iconel-icon-editclickedit(scope.row)/el-buttonel-button typedanger sizemini iconel-icon-deleteclickdel(scope.row)/el-button/template/el-table-column/el-tableel-dialog :titlestate ? 添加学生信息 : 修改学生信息 :visible.syncdialogFormVisible width500pxel-form :modelform :rulesrules refformel-form-item label姓名 :label-widthformLabelWidth propnameel-input v-modelform.name autocompleteoff/el-input/el-form-itemel-form-item label年龄 :label-widthformLabelWidth propageel-input v-modelform.age autocompleteoff/el-input/el-form-itemel-form-item label性别 :label-widthformLabelWidth propsexel-radio v-modelform.sex label1男/el-radioel-radio v-modelform.sex label2女/el-radio/el-form-itemel-form-item label父亲 :label-widthformLabelWidth propfatherel-input v-modelform.father autocompleteoff/el-input/el-form-itemel-form-item label母亲 :label-widthformLabelWidth propmotherel-input v-modelform.mother autocompleteoff/el-input/el-form-itemel-form-item label入校时间 :label-widthformLabelWidth proptimeel-date-pickerv-modelform.timeformatyyyy 年 MM 月 dd 日typedateplaceholder选择日期/el-date-picker/el-form-itemel-form-item label家庭住址 :label-widthformLabelWidth propaddressel-input v-modelform.address autocompleteoff/el-input/el-form-itemel-form-item label联系方式 :label-widthformLabelWidth propphoneel-input v-modelform.phone autocompleteoff/el-input/el-form-item/el-formspan slotfooter classdialog-footerel-button clickcloseForm(form)取消/el-buttonel-button typeprimary clicksure(form)确认/el-button/span/el-dialog/div /templatescript import { addStudent, getInfo, updateStudent, delinfo } from /api/api.jsexport default {data() {return {tableData: [],dialogFormVisible: false,form: {name: ,age: ,sex: 1,father: ,mother: ,time: ,address: ,phone: },formLabelWidth: 80px,rules: {name: [{required: true, message: 请输入姓名}],age: [{required: true, message: 请输入年龄}],sex: [{required: true, message: 请选择性别}],time: [{required: true, message: 请选择入校时间}],address: [{required: true, message: 请输入家庭住址}],phone: [{required: true, message: 请输入联系方式}]},total: 0,state: true}},created() {this.getData()},methods: {getData() {getInfo().then((res) {if (res.data.status 200) {this.tableData res.data.datathis.total res.data.total}})},add(form) {this.state truethis.form {name: ,age: ,sex: 1,father: ,mother: ,time: ,address: ,phone: }//this.$refs[form].resetFields()this.dialogFormVisible true},edit(row) {this.state false//此处需要扩展赋值this.form {...row}this.dialogFormVisible true},del(row) {this.$alert(确定要删除吗, 提示, {confirmButtonText: 确定,callback: () {delinfo(row.id).then(res {if (res.data.status 200) {this.getData()this.$message({message: res.data.msg, type: success})}})}})delinfo},closeForm(form) {//清调校验规则this.$refs[form].resetFields()this.dialogFormVisible false},sure(form) {this.$refs[form].validate(valid {if (valid) {console.log(form, this.form)if (this.state) {addStudent(this.form).then((res) {console.log(res)if (res.data.status 200) {this.getData()this.dialogFormVisible falsethis.$refs[form].resetFields()this.$message({message: res.data.msg, type: success})}})}else {updateStudent(this.form).then((res) {console.log(res)if (res.data.status 200) {this.getData()this.dialogFormVisible falsethis.$refs[form].resetFields()this.$message({message: res.data.msg, type: success})}})}}})}}} /scriptstyle langscss .infoList {.demo-form-inline, .el-form-item {text-align: left;}.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/common/students/InfoLists.vue !-- 信息管理页面 -- templatediv classinfoList!-- 新增表单 --el-form :inlinetrue :modelform classdemo-form-inline sizesmallel-form-itemel-button typeprimary clickadd(form)新增/el-button/el-form-item/el-formel-table:datatableDataborderstylewidth: 100%el-table-columnpropnamelabel姓名aligncenter/el-table-columnel-table-columnpropagelabel年龄aligncenter/el-table-columnel-table-columnpropsexlabel性别aligncenter/el-table-columnel-table-columnpropfatherlabel父亲aligncenter/el-table-columnel-table-columnpropmotherlabel母亲aligncenter/el-table-columnel-table-columnproptimelabel入校时间aligncenter/el-table-columnel-table-columnpropaddresslabel家庭住址aligncenter/el-table-columnel-table-columnpropphonelabel联系方式aligncenter/el-table-column!-- scope.row表示点击的当前行包含当前行的所有数据 --el-table-columnlabel操作 aligncentertemplate slot-scopescopeel-button typedanger sizemini iconel-icon-editclickedit(scope.row)/el-buttonel-button typedanger sizemini iconel-icon-deleteclickdel(scope.row)/el-button/template/el-table-column/el-tableel-dialog :titlestate ? 添加学生信息 : 修改学生信息 :visible.syncdialogFormVisible width500pxel-form :modelform :rulesrules refformel-form-item label姓名 :label-widthformLabelWidth propnameel-input v-modelform.name autocompleteoff/el-input/el-form-itemel-form-item label年龄 :label-widthformLabelWidth propageel-input v-modelform.age autocompleteoff/el-input/el-form-itemel-form-item label性别 :label-widthformLabelWidth propsexel-radio v-modelform.sex label1男/el-radioel-radio v-modelform.sex label2女/el-radio/el-form-itemel-form-item label父亲 :label-widthformLabelWidth propfatherel-input v-modelform.father autocompleteoff/el-input/el-form-itemel-form-item label母亲 :label-widthformLabelWidth propmotherel-input v-modelform.mother autocompleteoff/el-input/el-form-itemel-form-item label入校时间 :label-widthformLabelWidth proptimeel-date-pickerv-modelform.timeformatyyyy 年 MM 月 dd 日typedateplaceholder选择日期/el-date-picker/el-form-itemel-form-item label家庭住址 :label-widthformLabelWidth propaddressel-input v-modelform.address autocompleteoff/el-input/el-form-itemel-form-item label联系方式 :label-widthformLabelWidth propphoneel-input v-modelform.phone autocompleteoff/el-input/el-form-item/el-formspan slotfooter classdialog-footerel-button clickcloseForm(form)取消/el-buttonel-button typeprimary clicksure(form)确认/el-button/span/el-dialog/div /templatescript import { getData, changeInfo, delData } from /utils/table.jsexport default {data() {return {tableData: [],dialogFormVisible: false,form: {name: ,age: ,sex: 1,father: ,mother: ,time: ,address: ,phone: },formLabelWidth: 80px,rules: {name: [{required: true, message: 请输入姓名}],age: [{required: true, message: 请输入年龄}],sex: [{required: true, message: 请选择性别}],time: [{required: true, message: 请选择入校时间}],address: [{required: true, message: 请输入家庭住址}],phone: [{required: true, message: 请输入联系方式}]},total: 0,state: true}},created() {getData(this, /api/getinfo)},methods: {add(form) {this.state truethis.form {name: ,age: ,sex: 1,father: ,mother: ,time: ,address: ,phone: }//this.$refs[form].resetFields()this.dialogFormVisible true},edit(row) {this.state false//此处需要扩展赋值this.form {...row}this.dialogFormVisible true},del(row) {console.log(row.id, row.id)delData(this, /api/info/del/, row.id, getData, /api/getinfo)},closeForm(form) {//清调校验规则this.$refs[form].resetFields()this.dialogFormVisible false},sure(form) {this.$refs[form].validate(valid {if (valid) {console.log(form, this.form)let url this.state ? url /api/info : url /api/updateinfochangeInfo(this, post, url, this.form, getData, /api/getinfo)}})}}} /scriptstyle langscss .infoList {.demo-form-inline, .el-form-item {text-align: left;}.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/common/students/StudentList.vue !-- 学生列表页面 -- templatediv classstudentList!-- 查询重置表单 --el-form :inlinetrue :modelformInline classdemo-form-inline sizesmallel-form-item label姓名el-input v-modelformInline.name placeholder姓名查询/el-input/el-form-itemel-form-itemel-button typeprimary clickonFind查询/el-button/el-form-itemel-form-itemel-button typeprimary clickonReset重置/el-button/el-form-item/el-form!-- 学生列表 --el-table:datacompDataborderstylewidth: 100%el-table-columnpropnamelabel姓名aligncenter/el-table-columnel-table-columnpropagelabel年龄aligncenter/el-table-columnel-table-columnpropsex_textlabel性别aligncenter/el-table-columnel-table-columnpropnumberlabel学号aligncenter/el-table-columnel-table-columnpropclasslabel班级aligncenter/el-table-columnel-table-columnpropstate_textlabel状态aligncenter/el-table-columnel-table-columnpropaddresslabel住址aligncenter/el-table-columnel-table-columnpropphonelabel电话aligncenter/el-table-column!-- scope.row表示点击的当前行包含当前行的所有数据 --el-table-columnlabel操作 aligncentertemplate slot-scopescopeel-button typedanger sizemini iconel-icon-deleteclickdel(scope.row)/el-button/template/el-table-column/el-tableel-paginationsize-changehandleSizeChangecurrent-changehandleCurrentChange:current-page.synccurrentPage:page-sizes[10, 20, 30, 50]:page-sizepageSizelayouttotal, sizes, prev, pager, next, jumper:totaltotal/el-pagination/div /templatescript import { students, delstudentsbyreqid } from /api/api.jsexport default {data() {return {tableData: [],currentPage: 1,pageSize: 10,total: 0,formInline: {name: }}},computed: {compData() {return this.tableData.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize)}},created() {this.getData()},methods: {onFind() {console.log(this.formInline)this.getData(this.formInline)},onReset() {console.log(this.formInline)this.formInline {}this.getData(this.formInline)},handleSizeChange(val) {this.pageSize valthis.currentPage 1},handleCurrentChange(val) {this.currentPage val},getData(param) {students(param).then((res) {console.log(res)if (res.data.status 200) {this.total res.data.totalthis.tableData res.data.datathis.tableData.forEach(item {//尽量不要修改原始数据因为原始数据后面可能会用item.sex 1 ? item.sex_text 男 : item.sex_text 女item.state 1 ? item.state_text 已入学 : item.state 2? item.state_text 未入学 : item.state_text 休学中})}})},del(row) {console.log(row, row.id, row.address)delstudentsbyreqid(row.id).then((res) {console.log(res)if (res.data.status 200) {this.$message({message: 删除数据成功, type: success})//删除成功后再重新请求一次this.getData()}})},onSubmit() {console.log(submit!)}}} /scriptstyle.studentList {.demo-form-inline, .el-form-item {text-align: left;}.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/common/students/WorkList.vue !-- 作业列表页面 -- templatediv classworkListel-table :datatableData v-loadingloading border stylewidth: 100%el-table-columnpropidlabel用户IDaligncenter/el-table-columnel-table-columnpropuserIdlabel所属班级aligncenter/el-table-columnel-table-columnproptitlelabel作业名称aligncenter/el-table-columnel-table-columnpropcompleted_textlabel完成情况aligncenter/el-table-column/el-tableel-paginationsize-changehandleSizeChangecurrent-changehandleCurrentChange:current-pagepage:page-sizes[10, 20, 30, 50]:page-sizesizelayouttotal, sizes, prev, pager, next, jumper:totaltotal/el-pagination/div /templatescript import { getTableData } from /utils/table.jsexport default {data() {return {tableData: [],total: 0,page: 1,size: 10,loading: true}},created() {//采用后端分页方法getTableData(this, /api/works, {page: this.page, size: this.size}, [completed])},methods: {handleSizeChange(val) {this.size valthis.page 1getTableData(this, /api/works, {page: this.page, size: val}, [completed])},handleCurrentChange(val) {this.page valgetTableData(this, /api/works, {page: val, size: this.size}, [completed])},}} /scriptstyle langscss.workList {.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/common/students/WorkMent.vue !-- 作业管理页面 -- templatediv classworkMentel-table :datatableData v-loadingloading border stylewidth: 100%el-table-columnpropidlabel用户IDaligncenter/el-table-columnel-table-columnpropuserIdlabel所属班级aligncenter/el-table-columnel-table-columnproptitlelabel作业名称aligncenter/el-table-columnel-table-columnpropcompleted_textlabel完成情况aligncenter/el-table-column/el-table!-- 通过传参调用分页子组件 模块化和组件化思想 total url由当前页面传递给子组件Page --Page :totaltotal :urlurl //div /templatescript import Page from ../Pageing.vueexport default {//注册分页组件Pagecomponents: {Page},data() {return {tableData: [],total: 0,loading: true,url: /api/works}}} /scriptstyle langscss.workMent {.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/common/Breadcrumb.vue templatediv classfooter!-- el-card包裹是为了好看而已 组件中属性名前面:表明该属性的值是动态获取的--el-cardel-breadcrumb separator-classel-icon-arrow-rightel-breadcrumb-item :to{ path: / }首页/el-breadcrumb-itemel-breadcrumb-item v-for(item, index) in $route.matched :keyindex{{item.name}}/el-breadcrumb-item/el-breadcrumb/el-card/div /template src/components/common/Footer.vue templatediv classfooterel-card welcome to 2023/el-card/div /templatescriptexport default {data() {return {}}} /scriptstyle langscss/style src/components/common/Header.vue templatediv classheaderel-headerdiv classtitle业务后台管理系统/divdiv{{name}}/div/el-header/div /templatescript import { getToken } from /utils/dealtoken.js export default {data() {return {name: }},created() {this.name getToken(username)} } /scriptstyle langscss .header {.el-header {background-color: #409eff;color: #333;text-align: center;line-height: 60px;display: flex;justify-content: space-between;.title {width: 200px;font-size: 24px;}} } /style src/components/common/Menu.vue templatediv classmenuel-aside width200px el-menurouterdefault-active2classel-menu-vertical-demobackground-color#409efftext-color#fffactive-text-color#ffd04btemplate v-for(item, index) in menusel-submenu :indexindex :keyindex v-if!item.hiddentemplate slottitlei :classitem.iconClass/ispan{{item.name}}/span/templateel-menu-item-group v-for(child, index) in item.children :keyindexel-menu-item :indexchild.pathi :classitem.iconClass/i{{child.name}}/el-menu-item/el-menu-item-group/el-submenu/template/el-menu/el-aside /div /templatescriptexport default {data() {return {menus: []}},created() {console.log(this.$router.options.routes)this.menus [...this.$router.options.routes]}} /scriptstyle langscss .menu {.el-aside {height: 100%;.el-menu {height: 100%;.fa {margin-right: 10px;}}//解决左右.el-submenu .el-menu-item {min-width: 0;}} } /style src/components/common/Pageing.vue 封装的分页组件 !-- 分页管理组件封装 -- !-- 为了多个页面复用将路由引入 :urlurl -- templatediv classpageMentel-paginationsize-changehandleSizeChangecurrent-changehandleCurrentChange:current-pagepage:page-sizes[10, 20, 30, 50]:page-sizesizelayouttotal, sizes, prev, pager, next, jumper:totaltotal:urlurl/el-pagination/div /templatescript import { getTableData } from /utils/table.jsexport default {//校验外部传入参数props用来接收父组件传递进来的参数props: {total: Number,url: String},data() {return {page: 1, //当前页size: 10 //每页显示条数}},created() {//console.log(this, this)//采用后端分页方法this.$parent代表父页面getTableData(this.$parent, this.url, {page: this.page, size: this.size}, [completed])},methods: {handleSizeChange(val) {this.size valthis.page 1getTableData(this.$parent, this.url, {page: this.page, size: val}, [completed])},handleCurrentChange(val) {this.page valgetTableData(this.$parent, this.url, {page: val, size: this.size}, [completed])},}} /scriptstyle langscss.pageMent {.el-pagination {text-align: left;margin-top: 20px;}} /stylesrc/components/Home.vue templatediv classhomeHeader /el-container classcontentMenu /el-containerBread /el-maindiv classcont!-- 添加菜单路由出口 --router-view/router-view/div/el-mainel-footerFooter //el-footer/el-container/el-container/div /templatescript import Menu from /components/common/Menu import Footer from ./common/Footer.vue import Header from ./common/Header.vue import Bread from ./common/Breadcrumb.vueexport default {components: {Header,Footer,Menu,Bread},data() {return {}} } /scriptstyle langscss.home {width: 100%;height: 100%;.content {position: absolute;width: 100%;top: 60px;bottom: 0;.cont {margin: 20px 0;}}} //import url(../assets/css/reset.css) /style src/components/Login.vue templatediv classloginel-card classbox-carddiv slotheader classclearfixspan业务后台管理系统/span/divel-form label-width100px :modelform refform :rulesrulesel-form-item label用户名 propusernameel-input v-modelform.username/el-input/el-form-itemel-form-item label密码 proppasswordel-input typepassword v-modelform.password/el-input/el-form-itemel-form-itemel-button typeprimary clicklogin(form)登录/el-button/el-form-item/el-form/el-card/div /template/* 原生AJAX和Axios在使用上存在一定的区别。Axios可以支持多种方式包括浏览器环境、node环境而AJAX则只能在浏览器环境中使用。 Axios还支持多种请求方式,包括GET、POST、PUT、DELETE等而AJAX只能支持GET和POST方式发送请求。此外Axios还可以拦截请求和响应。 */script//登录验证的封装 import {login} from /api/api.js import {nameRule, passRule} from ../utils/validate.js import {setToken} from /utils/dealtoken.jsexport default {data () {return {form: {username: ,password: },rules: {username: [{validator: nameRule, required: true, trigger: blur}],password: [{validator: passRule, required: true, trigger: blur}]}}},methods: {login(form) {this.$refs[form].validate((valid) {if (valid) {console.log(this.form)login(this.form).then(res {if (res.data.status 200) {setToken(token, res.data.token)setToken(username, res.data.Name)this.$message({message: res.data.msg, type: success})this.$router.push(/home)}})} else {console.error(this.form)}})}} } /scriptstyle langscss.login {width: 100%;height: 100%;position: absolute;//background: #409EFF;background: url(../assets/logo.png) center no-repeat;.el-card {background: #65768557;}.box-card {width: 450px;margin: 200px auto;color: #fff;.el-form .el-form-item_label {color: #fff;}.el-card_header {font-size: 34px;}.el-button {width: 100%;}}} /style src/components/NotFound.vue templatediv classnotfounddiv classbig页面不见了/divdiv首页瞧瞧点击router-link to/这里/router-link进入首页./div/div/templatescriptexport default {data() {return {};},};/scriptstyle langscss.notfound {width: 100%;height: 100%;position: absolute;background: #409EFF;background: url(../assets/404page.jpg) center no-repeat;}/style src/router/index.js import Vue from vue import Home from /components/Home import VueRouter from vue-routerVue.use(VueRouter)const routes [{ path: /, redirect: /login, hidden: true, component: () import(/components/Login) },{ path: /login, name: Login, hidden: true, component: () import(/components/Login) },{ path: /home, name: 学生管理,iconClass: fa fa-users,redirect: /home/student,component: Home,children: [{path: /home/student,name: 学生列表,iconClass: fa fa-list,component: () import(/components/common/students/StudentList)},{path: /home/info,name: 信息列表,iconClass: fa fa-list-alt,component: () import(/components/common/students/InfoList)},{path: /home/infoman,name: 信息管理,iconClass: fa fa-list-alt,component: () import(/components/common/students/InfoLists)},{path: /home/work,name: 作业列表,iconClass: fa fa-list-ul,component: () import(/components/common/students/WorkList)},{path: /home/works,name: 作业管理,iconClass: fa fa-th-list,component: () import(/components/common/students/WorkMent)}]},{ path: /data, name: 数据分析,iconClass: fa fa-bar-chart,component: Home,children: [{path: /data/dataview,name: 数据概览,iconClass: fa fa-line-chart,component: () import(/components/common/dataanalyse/DataView)},{path: /data/mapview,name: 视图概览,iconClass: fa fa-line-chart,component: () import(/components/common/dataanalyse/MapView)},{path: /data/score,name: 分数视图,iconClass: fa fa-line-chart,component: () import(/components/common/dataanalyse/ScoreMap)},{path: /data/travel,name: 旅游视图,iconClass: fa fa-line-chart,component: () import(/components/common/dataanalyse/TravelMap)}]},{ path: /users, name: 用户中心,iconClass: fa fa-user,component: Home,children: [{path: /users/user,name: 数据概览,iconClass: fa fa-user,component: () import(/components/common/users/User)}]},{ path: *, name: NotFound, hidden: true, component: () import(/components/NotFound) } ]export default new VueRouter({mode: history,routes: routes })src/utils/dealtoken.js // Token的封装 Token存放在localStorage export function setToken(tokenkey, token) {console.log(tokenkey, token)return localStorage.setItem(tokenkey, token) }export function getToken(tokenkey) {console.log(tokenkey)return localStorage.getItem(tokenkey) }export function removeToken(tokenkey) {return localStorage.removeItem(tokenkey) } src/utils/table.js //表格操作封装import { call } from file-loader//获取表格数据 export function getData (root, url, params) {root.service.get(url, {params: params || {}}).then(res {if (res.data.status 200) {root.tableData res.data.dataroot.total res.data.total}}).catch(err {throw err}) }//新增或修改表格数据 export function changeInfo (root, method, url, form, callback, callurl) {root.service[method](url, form).then(res {if (res.data.status 200) {callback(root, callurl)root.dialogFormVisible falseroot.$refs[form].resetFields()root.$message({message: res.data.msg, type: success})}}).catch(err {throw err}) }//删除方法封装 export function delData (root, url, id, callback, callurl) {root.$alert(确定要删除吗, 提示, {confirmButtonText: 确定,callback: () {root.service.get(url id).then(res {if (res.data.status 200) {callback(root, callurl)root.$message({message: res.data.msg, type: success})}})}}).catch(err {throw err}) }//作业列表获取数据封装 export function getTableData (root, url, params, arr) {root.service.get(url, {params: params || {}}).then(res {if (res.data.status 200) {root.tableData res.data.dataroot.total res.data.totalroot.tableData.map(item {arr.map(aItem [item[aItem] ? item[aItem _text] 是 : item[aItem _text] 否])})root.loading false}}).catch(err {throw err}) } src/utils/validate.js //用户名匹配 export function nameRule (rule, value, callback) {let reg /(^[a-zA-Z0-9]{4,10}$)/;if (value ) {callback(new Error(请输入用户名));} else if (!reg.test(value)) {callback(new Error(请输入4-10用户名));} else {callback();} }//密码匹配 export function passRule (rule, value, callback) {let pass /^\S*(?\S{6,12})(?\S*\d)(?\S*[A-Z])(?\S*[a-z])(?\S*[!#$%^*? ])\S*$/;if (value ) {callback(new Error(请输入密码));} else if (!pass.test(value)) {callback(new Error(请输入6-12位密码需要包含大小写和数字及特殊字符));} else {callback();} } src/App.vue template div router-view/router-view /div /template src/main.js import Vue from vue import App from ./App import font-awesome/css/font-awesome.min.css //import axios from axios import router from ./router import service from ./service// 挂载到原型就可以全局使用 //Vue.prototype.axios axios Vue.prototype.service service //Vue.config.productionTip falseimport ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI)new Vue({router,render: h h(App) }).$mount(#myapp)src/service.js import axios from axios; import { getToken } from /utils/dealtoken.js import { Promise } from core-js import { Message } from element-ui;// axios二次封装const service axios.create({// baseURL还可以使用代理baseURL: http://127.0.0.1:8181, timeout: 3000 })// 请求拦截器 service.interceptors.request.use((config) {//对请求做一些额外处理config.headers[token] getToken(token)config.headers[username] getToken(username)return config }, (error) {return Promise.reject(error) })// 响应拦截器 service.interceptors.response.use((response) {//对响应做一些处理let {status, msg} response.dataif (status ! 200) {Message({message: msg || error, type: warning})}console.log(response, status, msg)return response }, (error) {return Promise.reject(error) })export default service index.html !DOCTYPE html htmlheadmeta charsetutf-8meta nameviewport contentwidthdevice-width,initial-scale1.0titledemo/title/headbodydiv idmyapp/div!-- built files will be auto injected --/body /html3.后端代码 3.1 代码结构 3.2 代码实现 controller/login.go package controllerimport (encoding/jsonfmtio/ioutilnet/httppath/filepathgithub.com/gin-gonic/gin )// post http://127.0.0.1:8181/login // axios.post 和 post json处理 func LoginPost(ctx *gin.Context) {fmt.Println(ctx, ctx)fmt.Println(ctx.Request, ctx.Request)version : ctx.DefaultQuery(version, V1.0.0.1)//前端使用axios直接传递form时,axios会默认使用json,必须使用下面方式获取json数据,解析后再使用data, _ : ioutil.ReadAll(ctx.Request.Body)fmt.Println(data, data)type UserInfo struct {Username stringPassword string}var u UserInfoerr : json.Unmarshal(data, u)if err ! nil {fmt.Println(err)}username : u.Usernamepassword : u.Passwordfmt.Println(login info:: , version, username, password)if username 123456 password 1234abcdE {ctx.JSON(http.StatusOK, gin.H{status: 200,Name: username,Password: password,msg: 登录成功,token: abcd1234ABCD,})} else {ctx.JSON(http.StatusOK, gin.H{status: -1,Name: username,Password: password,msg: 用户名或密码错误,})} }// http://127.0.0.1:8181/formlogin // form表单提交处理 application/x-www-form-urlencoded 或者 application/form-data func FormLoginPost(ctx *gin.Context) {fmt.Println(ctx, ctx)fmt.Println(ctx.Request, ctx.Request)username : ctx.PostForm(username)password : ctx.PostForm(password)fmt.Println(FormLoginPost :: , username, password)if username 123456 password 1234abcdE {ctx.JSON(http.StatusOK, gin.H{status: 200,Name: username,Password: password,msg: 登录成功,token: abcd1234ABCD,})} else {ctx.JSON(http.StatusOK, gin.H{status: -1,Name: username,Password: password,msg: 用户名或密码错误,})} }// form表单提交文件上传处理 multipart/form-data func UploadFile(ctx *gin.Context) {file, _ : ctx.FormFile(uploadfile)fmt.Println(file.Filename)file_path : upload/ filepath.Base(file.Filename)fmt.Println(file_path)ctx.SaveUploadedFile(file, file_path)ctx.String(http.StatusOK, 上传成功) }controller/student.go package controllerimport (encoding/jsonfmtio/ioutilnet/httpgithub.com/gin-gonic/gin )/* type User struct {Name string json:nameAge int json:age }user : User{Tom, 18} jsonData, err : json.Marshal(user) if err ! nil { c.AbortWithError(500, err) } c.Data(200, application/json, jsonData) *//* 在 Go 语言中可以使用内置的 copy 函数来将数组转换为切片。 // 将 arr 转换为切片 arr : [3]int{1, 2, 3} sl : make([]int, len(arr)) copy(sl, arr[:])// 将切片转换为数组 var arr2 [3]int copy(arr2[:], sl) */var students []map[string]interface{}{{id: 1, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 2, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 3, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 4, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 5, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 6, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 7, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 8, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 9, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 10, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 11, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 12, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 13, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 14, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 15, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 16, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 17, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 18, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 19, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 20, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 21, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 22, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 23, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 24, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 25, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 26, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 27, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 28, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 29, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 30, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 31, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 32, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 33, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 34, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 35, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 36, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 37, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 38, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 39, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 40, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 41, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 42, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 43, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 44, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 45, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 46, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 47, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 48, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345},{id: 47, name: 张三, age: 10, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 北京市 朝阳区, phone: 18818812345},{id: 50, name: 李四, age: 11, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 2, address: 天津市 朝阳区, phone: 18818812345},{id: 51, name: 王五, age: 12, sex: 2, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 3, address: 上海市 朝阳区, phone: 18818812345},{id: 52, name: 赵六, age: 9, sex: 1, time: 2023-08-05, father: 爸爸, mother: 妈妈, number: 2, class: 2, state: 1, address: 重庆市 朝阳区, phone: 18818812345}, }// get http://127.0.0.1:8181/api/students func GetStudentList(ctx *gin.Context) {name : ctx.Query(name)fmt.Println(name :: , name)//sex: 1 - 男 2 - 女//state: 1:已入学 2:未入学 3:休学中selstudents : []map[string]interface{}{}if len(name) ! 0 {for index, value : range students {if value[name] name {selstudents append(selstudents, students[index])}}} else {for index, _ : range students {selstudents append(selstudents, students[index])}}/*selstudents : list.New()if len(name) ! 0 {for _, value : range students {if value[name] name {selstudents.PushBack(value)}}} else {for _, value : range students {selstudents.PushBack(value)}}selstudents.Len()*/ctx.JSON(http.StatusOK, gin.H{status: 200,msg: 获取学生信息成功,data: selstudents,total: len(selstudents),}) }// GET请求 http://127.0.0.1:8181/api/students/del?id1 func DelStudent(ctx *gin.Context) {id : ctx.Query(id)fmt.Println(del student id :: , id)ctx.JSON(http.StatusOK, gin.H{status: 200,msg: 删除学生信息成功,id: id,}) }// GET请求 http://127.0.0.1:8181/api/students/del/1 func DelStudentByReq(ctx *gin.Context) {// 使用Param获取URL参数id : ctx.Param(id)// 返回请求参数ctx.JSON(200, gin.H{status: 200,msg: 删除学生信息成功,id: id,}) }type UserInfo struct {Name string //json:nameAge string //json:ageSex string //json:sexFather string //json:fatherMother string //json:motherTime string //json:timeAddress string //json:addressPhone string //json:phone }func AddStudent(ctx *gin.Context) {data, _ : ioutil.ReadAll(ctx.Request.Body)var u UserInfoerr : json.Unmarshal(data, u)if err ! nil {fmt.Println(err)}fmt.Println(AddStudent :: , u.Name, u.Age, u.Sex, u.Father, u.Mother, u.Time, u.Address, u.Phone)ctx.JSON(http.StatusOK, gin.H{status: 200,name: u.Name,msg: 增加成功,})}// get http://127.0.0.1:8181/api/getinfo func GetInfo(ctx *gin.Context) {name : ctx.Query(name)fmt.Println(name :: , name)//sex: 1 - 男 2 - 女//state: 1:已入学 2:未入学 3:休学中selstudents : []map[string]interface{}{}if len(name) ! 0 {for index, value : range students {if value[name] name {selstudents append(selstudents, students[index])}}} else {for index, _ : range students {selstudents append(selstudents, students[index])}}ctx.JSON(http.StatusOK, gin.H{status: 200,msg: 获取学生信息成功,data: selstudents,total: len(selstudents),}) }func UpdateStudent(ctx *gin.Context) {data, _ : ioutil.ReadAll(ctx.Request.Body)var u UserInfoerr : json.Unmarshal(data, u)if err ! nil {fmt.Println(err)}fmt.Println(UpdateStudent :: , u.Name, u.Age, u.Sex, u.Father, u.Mother, u.Time, u.Address, u.Phone)ctx.JSON(http.StatusOK, gin.H{status: 200,name: u.Name,msg: 修改成功,})}// GET请求 http://127.0.0.1:8181/api/info/del/1 func DelIfo(ctx *gin.Context) {// 使用Param获取URL参数id : ctx.Param(id)// 返回请求参数ctx.JSON(200, gin.H{status: 200,msg: 删除信息成功,id: id,}) }var works []map[string]interface{}{{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false},{id: 1, userId: 110, title: JS, completed: true},{id: 2, userId: 111, title: C, completed: false},{id: 3, userId: 112, title: Java, completed: true},{id: 4, userId: 113, title: Golang, completed: false}, }// get请求支持分页查询 func Works(ctx *gin.Context) {page : ctx.Query(page)size : ctx.Query(size)fmt.Println(Works :: , page, size)//数据分页处理ctx.JSON(200, gin.H{status: 200,msg: 获取作业成功,data: works,total: len(works),}) }server.go package mainimport (main/controllernet/httpgithub.com/gin-contrib/corsgithub.com/gin-gonic/gin )/* // 错误 server.go:4:2: package main/controller is not in GOROOT (/home/tiger/go/go/src/main/controller) go mod init main//错误 server.go:7:2: no required module provides package github.com/gin-gonic/gin; to add it: go get github.com/gin-gonic/gin//处理跨域框架 go get github.com/gin-contrib/cors *//* 当客户端尤其是基于 Web 的客户端想要访问 API 时服务器会决定允许哪些客户端发送请求。这是通过使用称为 CORS 来完成的它代表跨源资源共享。 跨域资源共享 CORS 是一种机制允许从提供第一个资源的域之外的另一个域请求网页上的受限资源。 */func CrosHandler() gin.HandlerFunc {return func(context *gin.Context) {context.Writer.Header().Set(Access-Control-Allow-Origin, *)context.Header(Access-Control-Allow-Origin, *) // 设置允许访问所有域context.Header(Access-Control-Allow-Methods, POST,GET,OPTIONS,PUT,DELETE,UPDATE)context.Header(Access-Control-Allow-Headers, Authorization, Content-Length, X-CSRF-Token, Token,session,X_Requested_With,Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language,DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Pragma,token,openid,opentoken)context.Header(Access-Control-Expose-Headers, Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar)context.Header(Access-Control-Max-Age, 172800)context.Header(Access-Control-Allow-Credentials, true)context.Set(content-type, application/json) //设置返回格式是json//处理请求context.Next()} }// http://127.0.0.1:8181/ping // http://127.0.0.1:8181/index func main() {r : gin.Default()// 设置全局跨域访问//r.Use(CrosHandler())//cors处理跨域corsConfig : cors.DefaultConfig()corsConfig.AllowCredentials truecorsConfig.AllowHeaders []string{content-type, Origin, token, username}corsConfig.AllowOrigins []string{http://localhost:8080, http://localhost:8081}corsConfig.AllowMethods []string{POST, GET, OPTIONS, PUT, DELETE, UPDATE}r.Use(cors.New(corsConfig))//r.Use(cors.Default())// 返回一个json数据r.GET(/ping, func(c *gin.Context) {c.JSON(200, gin.H{message: pong,num: 888,})})// 返回一个html页面r.LoadHTMLGlob(templates/*)r.GET(/index, func(c *gin.Context) {c.HTML(http.StatusOK, index.html, nil)})r.POST(/login, controller.LoginPost)r.POST(/formlogin, controller.FormLoginPost)r.POST(/upload, controller.UploadFile)r.GET(/api/students, controller.GetStudentList)r.GET(/api/students/del, controller.DelStudent)r.GET(/api/students/del/:id, controller.DelStudentByReq)r.POST(/api/info, controller.AddStudent)r.GET(/api/getinfo, controller.GetInfo)r.POST(api/updateinfo, controller.UpdateStudent)r.GET(/api/info/del/:id, controller.DelIfo)r.GET(api/works, controller.Works)//r.Run() // r.Run(:8080) 监听并在 0.0.0.0:8080 上启动服务r.Run(:8181) }4.其他 4.1 vscode快速编写正则表达式 安装any-rule插件 ctrl shift p 调出正则表达式选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兰州网站排名优化公司seo网站诊断方案

在Web开发的世界里,JavaScript无疑是最为璀璨的明星之一,它赋予了网页动态交互的能力,让互联网变得更加生动有趣。而JavaScript的标准化规范——ECMAScript,则是这一切奇迹背后的基石。本文将深入探讨ECMAScript的基本概念、发展历…

企业网站域名网站建设管理报告

如果我们需要在Bing Maps中加入一个小图钉标记&#xff0c;该如何实现了&#xff1f; Bing Maps控件已经为我们提供了这个功能&#xff0c;在Microsoft.Maps.MapControl名称空间下提供了实现图钉应用的图钉层Pushpin类用该类来实现普通标识 在Xaml中添加<map:Pushpin Locati…

做网站商机制作网页的12个步骤

一. 简介 前面简单学习了设备树文件的内容&#xff0c;语法&#xff0c;以及如何向设备树文件中添加设备节点信息。学习了驱动开发时&#xff0c;会使用到的设备树常用OF操作函数。本文我们就开始第一个基于设备树的 Linux 驱动实验-LED驱动实现。 本文具体学习在设备树文件添…

溧阳网站设计外国知名个人网站

1.sync.Mutex互斥锁底层实现 2.sync.RwMutex读写锁底层实现 1.sync.Mutex互斥锁底层实现 通过cas原子操作加锁&#xff0c;通过信号量实现协程唤醒 锁有两种模式&#xff0c;正常模式和饥饿模式 正常模式(非公平锁)&#xff1a;所有阻塞在等待队列的go协程会按顺序获取锁&…

对网站建设有什么样意见广州学习做网站建设的学校

http://jinnianshilongnian.iteye.com/category/231099转载于:https://www.cnblogs.com/sishahu/p/5368018.html

昆明网站营销网站排名英文

Tickeys for Mac 是一款为 macOS 设计的虚拟键盘音效生成器。它通过模拟机械键盘的声音&#xff0c;为打字和输入操作增添了音效反馈&#xff0c;让用户在使用电脑时感受到更加真实的键盘反馈体验。用户可以根据个人喜好选择不同类型的键盘声音和音效设置&#xff0c;让键盘操作…

网站文章删除了怎么做404抖音权重查询

四、评估(评估已建立的模型) 目录 四、评估(评估已建立的模型)1.评估什么2.交叉验证1 回归问题的验证2 分类问题的验证3 精确率和召回率1.精确率Precision2.召回率Recall 4 F值5 K折交叉验证 3.正则化1 正则化的方法2 正则化的效果3 分类的正则化4 包含正则化项的表达式的微分1…

系统网站推广方案怎么做商城网站设计公司怎么样

1. 富有远见&#xff0c;乐在其中。 如果你能很好地预见自己的公司所在领域在很多年后的样子&#xff0c;这能保证你在该领域取得长久的发展。很多人能在商业领域取得成功并不是因为他们彻底的废旧立新&#xff0c;而是因为他们乘风破浪&#xff0c;能在现有的基础上有所改进和…

新公司网站建设有限责任公司和有限公司有啥区别

定位和检测: 定位是找到检测图像中带有一个给定标签的单个目标 检测是找到图像中带有给定标签的所有目标 图像分割和目标检测的区别&#xff1a; 图像分割即为检测出物体的完整轮廓&#xff0c;而目标检测则是检测出对应的目标。&#xff08;使用框框把物体框出来&#xff…

江苏省建设部网站盐城建设公司网站

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论你是初学者还是资深开发者,这里都有适合你的内容。…

北京计算机培训机构山西seo优化公司

全世界只有3.14 % 的人关注了青少年数学之旅在微信的订阅号中&#xff0c;每人最多有12个常读公众号。可公众号这么多&#xff0c;哪些公众号值得关注呢&#xff1f;今天给大家推荐的几个公众号&#xff0c;不仅生产优质的时效性内容&#xff0c;还会提供各种多元化的内容角度&…

国外photoshop教程网站沈阳网站建设哪家公司好

一)方法区: java虚拟机中有一个方法区&#xff0c;该区域被所有的java线程都是共享&#xff0c;虚拟机一启动&#xff0c;运行时数据区就被开辟好了&#xff0c;官网上说了方法区可以不压缩还可以不进行GC&#xff0c;JAVA虚拟机就相当于是接口&#xff0c;具体的HotSpot就是虚…

为网站网站做代理被判缓刑建筑行业征信查询平台

第一部分&#xff1a;构建基础命令行博客系统 代码仓库 章节 1&#xff1a;Go语言快速入门 1.1 Go语言简介 Go语言&#xff0c;也称作Golang&#xff0c;是由Google开发的一种静态强类型、编译型语言&#xff0c;具有垃圾回收功能。它在2009年公开发布&#xff0c;由Robert…

老网站文章突然无收录营销网站策划

1.java关键字的使用 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串&#xff08;单词&#xff09; 特点&#xff1a;关键字中所字母都为小写 具体哪些关键字&#xff1a; 2.保留字&#xff1a;现Java版本尚未使用&#xff0c;但以后版本可能会作…

开发网站需要什么语言网站开发技术的现状及发展趋势

今天在网上看到尤雨溪推荐的这款拖拽组件&#xff0c;试了一下非常不错&#xff0c;同样推荐给大家。 VueDraggablePlus 是一个专为 Vue 打造的拖拽排序模块&#xff0c;基于 Sortablejs 封装&#xff0c;支持 Vue3 或 Vue 2.7&#xff0c;本月的 21 日&#xff0c;Vue 作者尤…

企业网站优化三层含义golang和php 做网站

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

网站建设验收确认书DANI主题wordpress

一、源码特点 PHP 药品管理系统 是一套完善的web设计系统,系统采用smarty框架进行开发设计&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 药店管理系统mysql数据库web结构apache计 下载地址…

网站建设公司怎样选jquery网站发展历史时间轴

时间&#xff1a;2009-07-06 8756次阅读【网友评论2条我要评论】收藏在使用MOS管设计开关电源或者马达驱动电路的时候&#xff0c;大部分人都会考虑MOS的导通电阻&#xff0c;最大电压等&#xff0c;最大电流等&#xff0c;也有很多人仅仅考虑这些因素。这样的电路也许是可以工…

炎陵网站建设网站开发单子

题目链接&#xff1a;http://poj.org/problem?id3041 没看题&#xff0c;网上搜最大二分匹配搜到的 匈牙利算法&#xff0c;深搜一次最多增加一个匹配 代码&#xff1a; #include <stdio.h> #include <stdlib.h> int tu[505][505]; int mx[505],my[505]; int flag…

免费样机素材网站做vi设计的国外网站

文章目录 问题描述解决方案结束语 大家好&#xff01;今天是2023年12月212日 | 农历十一月初九(距离2024年还有一周左右的时间)&#xff0c;最近还是比较忙的&#xff0c;忙着搞钱&#xff0c;毕竟马上过年啦。 问题描述 感谢大家对我一直以来的支持与帮助&#xff0c;今天这边…