学生管理功能和后台文件上传下载功能

main
龙政林 2 years ago
parent 81c326a3d1
commit b49d7edc62

@ -1,16 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@localhost" uuid="2c7ac471-219a-482b-8be5-26a81aa38c0d">
<data-source source="LOCAL" name="@localhost" uuid="d0b56518-2a5d-4a9b-933b-039146f54f65">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">

@ -21,4 +21,18 @@ CREATE TABLE course (
teacher varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);
drop table course,admin;
# drop table course,admin;
drop table student;
CREATE TABLE student (
id INT PRIMARY KEY ,
username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
password VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
phone VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
email varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
sex varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
birth varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
avatar varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
role varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

@ -0,0 +1,60 @@
package com.example.controller;
import cn.hutool.core.io.FileUtil;
import com.example.common.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
@RestController
@RequestMapping("/files")
public class FileController {
@Value("${ip}")
private String ip;
@Value("${server.port}")
private String port;
private static final String ROOT_PATH = System.getProperty("user.dir") + "/files";
/**文件上传**/
@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
String originalFilename = file.getOriginalFilename();//获取原始文件名
long flag = System.currentTimeMillis();//唯一标识
String fileName = flag + "_" + originalFilename;
File finalFile = new File(ROOT_PATH + "/" + fileName);// 最终存到磁盘的文件对象
if (!finalFile.getParentFile().exists()) {//如果父级目录不存在,就创建
finalFile.getParentFile().mkdirs();
}
file.transferTo(finalFile);
//返回文件的url
//String url = "http://localhost:9090/files/download?fileName=" + fileName;
String url = "http://" + ip + ":" + port + "/files/download?fileName=" + fileName;
return Result.success(url);
}
/**文件下载**/
@GetMapping("/download")
public void download(String fileName, HttpServletResponse response) throws IOException {
File file = new File(ROOT_PATH + "/" + fileName); //文件在磁盘存储的对象
ServletOutputStream os = response.getOutputStream();
response.setHeader("Content-Disposition","attachment; filename=\"" + URLEncoder.encode(fileName,"UTF-8"));
response.setContentType("application/octet-stream");
FileUtil.writeToStream(file, os);
os.flush();
os.close();
}
}

@ -1,4 +1,47 @@
package com.example.controller;
import com.example.common.Result;
import com.example.entity.Student;
import com.example.service.StudentService;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/student")
public class StudentController {
@Resource
StudentService studentService;
/**新增**/
@PostMapping("/add")
public Result add(@RequestBody Student student){
studentService.add(student);
return Result.success();
}
/**删除**/
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id){
studentService.deleteById(id);
return Result.success();
}
/**更新**/
@PutMapping("/update")
public Result update(@RequestBody Student student){
studentService.updateById(student);
return Result.success();
}
/**分页查询**/
@GetMapping("/selectPage")
public Result selectPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
Student student){
PageInfo<Student> pageInfo = studentService.selectPage(pageNum,pageSize,student);
return Result.success(pageInfo);
}
}

@ -1,8 +1,12 @@
package com.example.mapper;
import com.example.entity.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface StudentMapper {
@ -12,4 +16,14 @@ public interface StudentMapper {
@Insert("insert into student (username,password,name,phone,email,sex,birth,avatar,role) " +
"values (#{username},#{password},#{name},#{phone},#{email},#{sex},#{birth},#{avatar},#{role})")
void insert(Student student);
@Delete("delete from student where id = #{id}")
void deleteById(Integer id);
@Update("update student set username = #{username}, password = #{password}, name = #{name}, phone = #{phone}, " +
"email = #{email}, sex = #{sex}, birth = #{birth}, avatar = #{avatar} where id = #{id}")
void updateById(Student student);
@Select("select * from student where username like concat('%', #{username}, '%') and name like concat('%', #{name}, '%') order by id desc")
List<Student> selectAll(Student student);
}

@ -6,10 +6,13 @@ import com.example.entity.Account;
import com.example.entity.Student;
import com.example.exception.CustomException;
import com.example.mapper.StudentMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class StudentService {
@ -48,7 +51,7 @@ public class StudentService {
*
*/
private void add(Student student) {
public void add(Student student) {
Student dbStudent = studentMapper.selectByUsername(student.getUsername());
if (dbStudent != null) { //已有同名账号,不允许插入
throw new CustomException("账号已存在");
@ -60,4 +63,19 @@ public class StudentService {
studentMapper.insert(student);
}
public void deleteById(Integer id){
studentMapper.deleteById(id);
}
public void updateById(Student student){
studentMapper.updateById(student);
}
public PageInfo<Student> selectPage(Integer pageNum,Integer pageSize,Student student){
PageHelper.startPage(pageNum,pageSize);
List<Student> studentList = studentMapper.selectAll(student);
return PageInfo.of(studentList);
}
}

@ -18,3 +18,5 @@ mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
ip: localhost

@ -18,3 +18,5 @@ mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
ip: localhost

@ -1,13 +1,19 @@
com\example\common\Result.class
com\example\entity\Course.class
com\example\entity\Account.class
com\example\common\CorsConfig.class
com\example\service\AdminService.class
com\example\service\CourseService.class
com\example\exception\GlobalExceptionHandler.class
com\example\common\RoleEnum.class
com\example\service\StudentService.class
com\example\SpringbootApplication.class
com\example\exception\CustomException.class
com\example\mapper\CourseMapper.class
com\example\mapper\StudentMapper.class
com\example\entity\Student.class
com\example\entity\Admin.class
com\example\controller\WebController.class
com\example\controller\StudentController.class
com\example\controller\CourseController.class
com\example\mapper\AdminMapper.class

@ -1,13 +1,19 @@
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\entity\Admin.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\common\CorsConfig.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\service\CourseService.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\entity\Course.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\exception\GlobalExceptionHandler.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\exception\CustomException.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\common\Result.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\service\AdminService.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\controller\WebController.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\mapper\CourseMapper.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\SpringbootApplication.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\mapper\AdminMapper.java
C:\Users\28344\Desktop\1111\student\springboot\src\main\java\com\example\controller\CourseController.java
E:\information work\1111\student\springboot\src\main\java\com\example\entity\Student.java
E:\information work\1111\student\springboot\src\main\java\com\example\exception\CustomException.java
E:\information work\1111\student\springboot\src\main\java\com\example\controller\CourseController.java
E:\information work\1111\student\springboot\src\main\java\com\example\common\CorsConfig.java
E:\information work\1111\student\springboot\src\main\java\com\example\common\Result.java
E:\information work\1111\student\springboot\src\main\java\com\example\common\RoleEnum.java
E:\information work\1111\student\springboot\src\main\java\com\example\service\CourseService.java
E:\information work\1111\student\springboot\src\main\java\com\example\exception\GlobalExceptionHandler.java
E:\information work\1111\student\springboot\src\main\java\com\example\controller\StudentController.java
E:\information work\1111\student\springboot\src\main\java\com\example\service\StudentService.java
E:\information work\1111\student\springboot\src\main\java\com\example\mapper\StudentMapper.java
E:\information work\1111\student\springboot\src\main\java\com\example\controller\WebController.java
E:\information work\1111\student\springboot\src\main\java\com\example\entity\Course.java
E:\information work\1111\student\springboot\src\main\java\com\example\service\AdminService.java
E:\information work\1111\student\springboot\src\main\java\com\example\mapper\CourseMapper.java
E:\information work\1111\student\springboot\src\main\java\com\example\SpringbootApplication.java
E:\information work\1111\student\springboot\src\main\java\com\example\entity\Admin.java
E:\information work\1111\student\springboot\src\main\java\com\example\mapper\AdminMapper.java
E:\information work\1111\student\springboot\src\main\java\com\example\entity\Account.java

@ -1,182 +1,203 @@
{
"hash": "d1968438",
"browserHash": "789678f7",
"hash": "82ca05bc",
"browserHash": "30e3c515",
"optimized": {
"@element-plus/icons-vue": {
"src": "../../@element-plus/icons-vue/dist/index.js",
"file": "@element-plus_icons-vue.js",
"fileHash": "6737cd0b",
"fileHash": "7a7a85e8",
"needsInterop": false
},
"axios": {
"src": "../../axios/index.js",
"file": "axios.js",
"fileHash": "9371faa0",
"fileHash": "8d6edd4f",
"needsInterop": false
},
"element-plus": {
"src": "../../element-plus/es/index.mjs",
"file": "element-plus.js",
"fileHash": "d1f722a2",
"fileHash": "5df4713b",
"needsInterop": false
},
"element-plus/dist/locale/zh-cn.mjs": {
"src": "../../element-plus/dist/locale/zh-cn.mjs",
"file": "element-plus_dist_locale_zh-cn__mjs.js",
"fileHash": "7f472726",
"fileHash": "eadea350",
"needsInterop": false
},
"vue": {
"src": "../../vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "405c694e",
"fileHash": "8dfef241",
"needsInterop": false
},
"vue-router": {
"src": "../../vue-router/dist/vue-router.mjs",
"file": "vue-router.js",
"fileHash": "a78189e3",
"fileHash": "8f1bd0a7",
"needsInterop": false
},
"element-plus/es": {
"src": "../../element-plus/es/index.mjs",
"file": "element-plus_es.js",
"fileHash": "2bda321b",
"fileHash": "cc889878",
"needsInterop": false
},
"element-plus/es/components/base/style/index": {
"src": "../../element-plus/es/components/base/style/index.mjs",
"file": "element-plus_es_components_base_style_index.js",
"fileHash": "bdfd0768",
"fileHash": "6e79f21c",
"needsInterop": false
},
"element-plus/es/components/menu/style/index": {
"src": "../../element-plus/es/components/menu/style/index.mjs",
"file": "element-plus_es_components_menu_style_index.js",
"fileHash": "437eb4ed",
"fileHash": "cbf10689",
"needsInterop": false
},
"element-plus/es/components/sub-menu/style/index": {
"src": "../../element-plus/es/components/sub-menu/style/index.mjs",
"file": "element-plus_es_components_sub-menu_style_index.js",
"fileHash": "f9792828",
"fileHash": "fed3b9fa",
"needsInterop": false
},
"element-plus/es/components/menu-item/style/index": {
"src": "../../element-plus/es/components/menu-item/style/index.mjs",
"file": "element-plus_es_components_menu-item_style_index.js",
"fileHash": "7d163c88",
"fileHash": "817537c1",
"needsInterop": false
},
"element-plus/es/components/icon/style/index": {
"src": "../../element-plus/es/components/icon/style/index.mjs",
"file": "element-plus_es_components_icon_style_index.js",
"fileHash": "1555eb62",
"fileHash": "61f07503",
"needsInterop": false
},
"element-plus/es/components/message/style/index": {
"src": "../../element-plus/es/components/message/style/index.mjs",
"file": "element-plus_es_components_message_style_index.js",
"fileHash": "6d65b2fb",
"fileHash": "83075195",
"needsInterop": false
},
"element-plus/es/components/dialog/style/index": {
"src": "../../element-plus/es/components/dialog/style/index.mjs",
"file": "element-plus_es_components_dialog_style_index.js",
"fileHash": "4cc7260f",
"fileHash": "0e7f69a1",
"needsInterop": false
},
"element-plus/es/components/form/style/index": {
"src": "../../element-plus/es/components/form/style/index.mjs",
"file": "element-plus_es_components_form_style_index.js",
"fileHash": "73c341cf",
"fileHash": "bc7267a8",
"needsInterop": false
},
"element-plus/es/components/date-picker/style/index": {
"src": "../../element-plus/es/components/date-picker/style/index.mjs",
"file": "element-plus_es_components_date-picker_style_index.js",
"fileHash": "8db0354a",
"needsInterop": false
},
"element-plus/es/components/radio-group/style/index": {
"src": "../../element-plus/es/components/radio-group/style/index.mjs",
"file": "element-plus_es_components_radio-group_style_index.js",
"fileHash": "ae9573a7",
"needsInterop": false
},
"element-plus/es/components/radio/style/index": {
"src": "../../element-plus/es/components/radio/style/index.mjs",
"file": "element-plus_es_components_radio_style_index.js",
"fileHash": "423c77e3",
"needsInterop": false
},
"element-plus/es/components/form-item/style/index": {
"src": "../../element-plus/es/components/form-item/style/index.mjs",
"file": "element-plus_es_components_form-item_style_index.js",
"fileHash": "dd08233b",
"fileHash": "da8fb80a",
"needsInterop": false
},
"element-plus/es/components/pagination/style/index": {
"src": "../../element-plus/es/components/pagination/style/index.mjs",
"file": "element-plus_es_components_pagination_style_index.js",
"fileHash": "0d70548b",
"fileHash": "e2a76335",
"needsInterop": false
},
"element-plus/es/components/table/style/index": {
"src": "../../element-plus/es/components/table/style/index.mjs",
"file": "element-plus_es_components_table_style_index.js",
"fileHash": "2abc2d53",
"fileHash": "7ced676d",
"needsInterop": false
},
"element-plus/es/components/table-column/style/index": {
"src": "../../element-plus/es/components/table-column/style/index.mjs",
"file": "element-plus_es_components_table-column_style_index.js",
"fileHash": "2678282d",
"fileHash": "2c0d5087",
"needsInterop": false
},
"element-plus/es/components/button/style/index": {
"src": "../../element-plus/es/components/button/style/index.mjs",
"file": "element-plus_es_components_button_style_index.js",
"fileHash": "74ac65e2",
"fileHash": "d6ca0a44",
"needsInterop": false
},
"element-plus/es/components/input/style/index": {
"src": "../../element-plus/es/components/input/style/index.mjs",
"file": "element-plus_es_components_input_style_index.js",
"fileHash": "17a82be3",
"fileHash": "0f725729",
"needsInterop": false
},
"element-plus/es/components/message-box/style/index": {
"src": "../../element-plus/es/components/message-box/style/index.mjs",
"file": "element-plus_es_components_message-box_style_index.js",
"fileHash": "8eda919b",
"fileHash": "e144e16a",
"needsInterop": false
},
"element-plus/es/components/select/style/index": {
"src": "../../element-plus/es/components/select/style/index.mjs",
"file": "element-plus_es_components_select_style_index.js",
"fileHash": "dceb3de3",
"fileHash": "c09791c7",
"needsInterop": false
},
"element-plus/es/components/option/style/index": {
"src": "../../element-plus/es/components/option/style/index.mjs",
"file": "element-plus_es_components_option_style_index.js",
"fileHash": "ba3fe8b2",
"fileHash": "1fed85f8",
"needsInterop": false
}
},
"chunks": {
"chunk-V4VQS4OV": {
"file": "chunk-V4VQS4OV.js"
"chunk-WQX2S47E": {
"file": "chunk-WQX2S47E.js"
},
"chunk-AYEHESJ3": {
"file": "chunk-AYEHESJ3.js"
"chunk-ROTADC2C": {
"file": "chunk-ROTADC2C.js"
},
"chunk-DGDJFXZF": {
"file": "chunk-DGDJFXZF.js"
"chunk-NHSPTBWR": {
"file": "chunk-NHSPTBWR.js"
},
"chunk-A5CFU6IU": {
"file": "chunk-A5CFU6IU.js"
"chunk-4ORR6HVR": {
"file": "chunk-4ORR6HVR.js"
},
"chunk-AO5DG4NS": {
"file": "chunk-AO5DG4NS.js"
"chunk-YENZLIFH": {
"file": "chunk-YENZLIFH.js"
},
"chunk-OSV6IDCE": {
"file": "chunk-OSV6IDCE.js"
"chunk-Y2A3P2KJ": {
"file": "chunk-Y2A3P2KJ.js"
},
"chunk-HWC2XRY6": {
"file": "chunk-HWC2XRY6.js"
"chunk-FEGR7JD2": {
"file": "chunk-FEGR7JD2.js"
},
"chunk-6YLF2CKD": {
"file": "chunk-6YLF2CKD.js"
"chunk-QEJGXXI6": {
"file": "chunk-QEJGXXI6.js"
},
"chunk-2DAU5UIR": {
"file": "chunk-2DAU5UIR.js"
"chunk-D77GAYGH": {
"file": "chunk-D77GAYGH.js"
},
"chunk-AZC2C57S": {
"file": "chunk-AZC2C57S.js"
"chunk-LMGJIVAK": {
"file": "chunk-LMGJIVAK.js"
},
"chunk-XWS6SUIF": {
"file": "chunk-XWS6SUIF.js"
},
"chunk-MFXAVKGL": {
"file": "chunk-MFXAVKGL.js"
@ -189,9 +210,6 @@
},
"chunk-5WWUZCGV": {
"file": "chunk-5WWUZCGV.js"
},
"chunk-AV3DMDAN": {
"file": "chunk-AV3DMDAN.js"
}
}
}

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/tag/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/tag.scss";
//# sourceMappingURL=chunk-2DAU5UIR.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/button/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/button.scss";
//# sourceMappingURL=chunk-4ORR6HVR.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/popper/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/popper.scss";
//# sourceMappingURL=chunk-6YLF2CKD.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/checkbox/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/checkbox.scss";
//# sourceMappingURL=chunk-A5CFU6IU.js.map

@ -1,6 +0,0 @@
// node_modules/element-plus/es/components/option-group/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/option-group.scss";
// node_modules/element-plus/es/components/select/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/select.scss";
//# sourceMappingURL=chunk-AO5DG4NS.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/base/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/base.scss";
//# sourceMappingURL=chunk-AV3DMDAN.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/tooltip/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/tooltip.scss";
//# sourceMappingURL=chunk-AYEHESJ3.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/option/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/option.scss";
//# sourceMappingURL=chunk-AZC2C57S.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/popper/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/popper.scss";
//# sourceMappingURL=chunk-D77GAYGH.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/overlay/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/overlay.scss";
//# sourceMappingURL=chunk-DGDJFXZF.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/scrollbar/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/scrollbar.scss";
//# sourceMappingURL=chunk-FEGR7JD2.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/input/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/input.scss";
//# sourceMappingURL=chunk-HWC2XRY6.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/option/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/option.scss";
//# sourceMappingURL=chunk-LMGJIVAK.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/overlay/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/overlay.scss";
//# sourceMappingURL=chunk-NHSPTBWR.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/scrollbar/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/scrollbar.scss";
//# sourceMappingURL=chunk-OSV6IDCE.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/input/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/input.scss";
//# sourceMappingURL=chunk-QEJGXXI6.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/tooltip/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/tooltip.scss";
//# sourceMappingURL=chunk-ROTADC2C.js.map

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/button/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/button.scss";
//# sourceMappingURL=chunk-V4VQS4OV.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/checkbox/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/checkbox.scss";
//# sourceMappingURL=chunk-WQX2S47E.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/base/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/base.scss";
//# sourceMappingURL=chunk-XWS6SUIF.js.map

@ -0,0 +1,3 @@
// node_modules/element-plus/es/components/tag/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/tag.scss";
//# sourceMappingURL=chunk-Y2A3P2KJ.js.map

@ -0,0 +1,6 @@
// node_modules/element-plus/es/components/option-group/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/option-group.scss";
// node_modules/element-plus/es/components/select/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/select.scss";
//# sourceMappingURL=chunk-YENZLIFH.js.map

@ -1,2 +1,2 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
//# sourceMappingURL=element-plus_es_components_base_style_index.js.map

@ -1,3 +1,3 @@
import "./chunk-V4VQS4OV.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-4ORR6HVR.js";
import "./chunk-XWS6SUIF.js";
//# sourceMappingURL=element-plus_es_components_button_style_index.js.map

@ -0,0 +1,9 @@
import "./chunk-4ORR6HVR.js";
import "./chunk-FEGR7JD2.js";
import "./chunk-QEJGXXI6.js";
import "./chunk-D77GAYGH.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/date-picker/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/date-picker.scss";
//# sourceMappingURL=element-plus_es_components_date-picker_style_index.js.map

@ -0,0 +1,7 @@
{
"version": 3,
"sources": ["../../element-plus/es/components/date-picker/style/index.mjs"],
"sourcesContent": ["import '../../base/style/index.mjs';\r\nimport 'element-plus/theme-chalk/src/date-picker.scss';\r\nimport '../../input/style/index.mjs';\r\nimport '../../scrollbar/style/index.mjs';\r\nimport '../../popper/style/index.mjs';\r\nimport '../../button/style/index.mjs';\r\n//# sourceMappingURL=index.mjs.map\r\n"],
"mappings": ";;;;;;;AACA,OAAO;",
"names": []
}

@ -1,6 +1,6 @@
import "./chunk-DGDJFXZF.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-NHSPTBWR.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/dialog/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/dialog.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/dialog.scss";
//# sourceMappingURL=element-plus_es_components_dialog_style_index.js.map

@ -1,5 +1,5 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/form-item/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/form-item.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/form-item.scss";
//# sourceMappingURL=element-plus_es_components_form-item_style_index.js.map

@ -1,5 +1,5 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/form/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/form.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/form.scss";
//# sourceMappingURL=element-plus_es_components_form_style_index.js.map

@ -1,5 +1,5 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/icon/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/icon.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/icon.scss";
//# sourceMappingURL=element-plus_es_components_icon_style_index.js.map

@ -1,3 +1,3 @@
import "./chunk-HWC2XRY6.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-QEJGXXI6.js";
import "./chunk-XWS6SUIF.js";
//# sourceMappingURL=element-plus_es_components_input_style_index.js.map

@ -1,5 +1,5 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/menu-item/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/menu-item.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/menu-item.scss";
//# sourceMappingURL=element-plus_es_components_menu-item_style_index.js.map

@ -1,7 +1,7 @@
import "./chunk-AYEHESJ3.js";
import "./chunk-6YLF2CKD.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-ROTADC2C.js";
import "./chunk-D77GAYGH.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/menu/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/menu.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/menu.scss";
//# sourceMappingURL=element-plus_es_components_menu_style_index.js.map

@ -1,8 +1,8 @@
import "./chunk-V4VQS4OV.js";
import "./chunk-DGDJFXZF.js";
import "./chunk-HWC2XRY6.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-NHSPTBWR.js";
import "./chunk-4ORR6HVR.js";
import "./chunk-QEJGXXI6.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/message-box/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/message-box.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/message-box.scss";
//# sourceMappingURL=element-plus_es_components_message-box_style_index.js.map

@ -1,8 +1,8 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/badge/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/badge.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/badge.scss";
// node_modules/element-plus/es/components/message/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/message.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/message.scss";
//# sourceMappingURL=element-plus_es_components_message_style_index.js.map

@ -1,3 +1,3 @@
import "./chunk-AZC2C57S.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-LMGJIVAK.js";
import "./chunk-XWS6SUIF.js";
//# sourceMappingURL=element-plus_es_components_option_style_index.js.map

@ -1,11 +1,11 @@
import "./chunk-AO5DG4NS.js";
import "./chunk-OSV6IDCE.js";
import "./chunk-HWC2XRY6.js";
import "./chunk-6YLF2CKD.js";
import "./chunk-2DAU5UIR.js";
import "./chunk-AZC2C57S.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-YENZLIFH.js";
import "./chunk-Y2A3P2KJ.js";
import "./chunk-FEGR7JD2.js";
import "./chunk-QEJGXXI6.js";
import "./chunk-D77GAYGH.js";
import "./chunk-LMGJIVAK.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/pagination/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/pagination.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/pagination.scss";
//# sourceMappingURL=element-plus_es_components_pagination_style_index.js.map

@ -0,0 +1,5 @@
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/radio-group/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/radio-group.scss";
//# sourceMappingURL=element-plus_es_components_radio-group_style_index.js.map

@ -0,0 +1,7 @@
{
"version": 3,
"sources": ["../../element-plus/es/components/radio-group/style/index.mjs"],
"sourcesContent": ["import '../../base/style/index.mjs';\r\nimport 'element-plus/theme-chalk/src/radio-group.scss';\r\n//# sourceMappingURL=index.mjs.map\r\n"],
"mappings": ";;;AACA,OAAO;",
"names": []
}

@ -0,0 +1,5 @@
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/radio/style/index.mjs
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/radio.scss";
//# sourceMappingURL=element-plus_es_components_radio_style_index.js.map

@ -0,0 +1,7 @@
{
"version": 3,
"sources": ["../../element-plus/es/components/radio/style/index.mjs"],
"sourcesContent": ["import '../../base/style/index.mjs';\r\nimport 'element-plus/theme-chalk/src/radio.scss';\r\n//# sourceMappingURL=index.mjs.map\r\n"],
"mappings": ";;;AACA,OAAO;",
"names": []
}

@ -1,8 +1,8 @@
import "./chunk-AO5DG4NS.js";
import "./chunk-OSV6IDCE.js";
import "./chunk-HWC2XRY6.js";
import "./chunk-6YLF2CKD.js";
import "./chunk-2DAU5UIR.js";
import "./chunk-AZC2C57S.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-YENZLIFH.js";
import "./chunk-Y2A3P2KJ.js";
import "./chunk-FEGR7JD2.js";
import "./chunk-QEJGXXI6.js";
import "./chunk-D77GAYGH.js";
import "./chunk-LMGJIVAK.js";
import "./chunk-XWS6SUIF.js";
//# sourceMappingURL=element-plus_es_components_select_style_index.js.map

@ -1,5 +1,5 @@
import "./chunk-AV3DMDAN.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/sub-menu/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/sub-menu.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/sub-menu.scss";
//# sourceMappingURL=element-plus_es_components_sub-menu_style_index.js.map

@ -1,7 +1,7 @@
import "./chunk-A5CFU6IU.js";
import "./chunk-2DAU5UIR.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-WQX2S47E.js";
import "./chunk-Y2A3P2KJ.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/table-column/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/table-column.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/table-column.scss";
//# sourceMappingURL=element-plus_es_components_table-column_style_index.js.map

@ -1,9 +1,9 @@
import "./chunk-AYEHESJ3.js";
import "./chunk-A5CFU6IU.js";
import "./chunk-OSV6IDCE.js";
import "./chunk-6YLF2CKD.js";
import "./chunk-AV3DMDAN.js";
import "./chunk-WQX2S47E.js";
import "./chunk-ROTADC2C.js";
import "./chunk-FEGR7JD2.js";
import "./chunk-D77GAYGH.js";
import "./chunk-XWS6SUIF.js";
// node_modules/element-plus/es/components/table/style/index.mjs
import "C:/Users/28344/Desktop/1111/student/vue/node_modules/element-plus/theme-chalk/src/table.scss";
import "E:/information work/1111/student/vue/node_modules/element-plus/theme-chalk/src/table.scss";
//# sourceMappingURL=element-plus_es_components_table_style_index.js.map

@ -11,6 +11,7 @@ const router = createRouter({
children: [
{ path: 'home', name: 'Home', component: () => import('@/views/manager/Home.vue')},
{ path: 'course', name: 'Course', component: () => import('@/views/manager/Course.vue')},
{ path: 'student', name: 'Student', component: () => import('@/views/manager/Student.vue')},
]
},
{ path: '/login', name: 'Login', component: () => import('@/views/Login.vue'),},

@ -9,7 +9,7 @@
</div>
<div style="width: fit-content; padding-right: 10px; display: flex; align-items: center;">
<img src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png" alt="" style="width: 40px; height: 40px">
<span style="margin-left: 5px">管理员</span>
<span style="margin-left: 5px">{{ user.name }}</span>
</div>
</div>
@ -35,6 +35,16 @@
<span>课程信息</span>
</el-menu-item>
</el-sub-menu>
<el-sub-menu index="3" v-if="user.role=== 'ADMIN'">
<template #title>
<el-icon><User /></el-icon>
<span>用户管理</span>
</template>
<el-menu-item index="/student">
<el-icon><UserFilled /></el-icon>
<span>学生信息</span>
</el-menu-item>
</el-sub-menu>
<el-menu-item index="/person">
<el-icon><User /></el-icon>
<span>个人资料</span>
@ -57,7 +67,7 @@
<script setup>
import { useRoute } from 'vue-router'
const $route = useRoute()
console.log($route.path)
const user = JSON.parse(localStorage.getItem('student-user') || '{}')
const logout = () => {
localStorage.removeItem('student-user')

@ -0,0 +1,181 @@
<template>
<div>
<div class="card" style="margin-bottom: 10px">
<el-input style="width: 260px; margin-right: 10px" placeholder="请输入账号查询" prefix-icon="Search" v-model="data.username" icon="el-icon-search"></el-input>
<el-input style="width: 260px; margin-right: 10px" placeholder="请输入名称查询" prefix-icon="Search" v-model="data.name" icon="el-icon-search"></el-input>
<el-button type="primary" style="margin-left: 10px" @click="load"></el-button>
<el-button type="primary" @click="reset"></el-button>
</div>
<div class="card" style="margin-bottom: 10px">
<div style="margin-bottom: 10px">
<el-button type="primary" @click = "handleAdd">新增</el-button>
</div>
<div>
<el-table :data="data.tableData" style="width: 100%">
<el-table-column prop="id" label="序号" width="70"></el-table-column>
<el-table-column prop="username" label="学生账号"></el-table-column>
<el-table-column prop="name" label="学生名称"></el-table-column>
<el-table-column prop="phone" label="学生手机号"></el-table-column>
<el-table-column prop="email" label="学生邮箱"></el-table-column>
<el-table-column prop="sex" label="性别"></el-table-column>
<el-table-column prop="birth" label="生日"></el-table-column>
<el-table-column prop="avatar" label="头像"></el-table-column>
<el-table-column label="操作" with="180">
<template #default="scope">
<el-button type="primary" @click = "handleEdit(scope.row)" plain>编辑</el-button>
<el-button type="danger" @click = "del(scope.row.id)" plain>删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div calss="card">
<el-pagination v-model:current-page="data.pageNum" v-model:page-size="data.pageSize"
@current-change="handelCurrentChange"
background layout="prev, pager, next" :total="data.total" ></el-pagination>
</div>
<el-dialog width = "35%" v-model="data.formVisible" title="学生信息">
<el-form :model="data.form" :rules="rules" ref="formRef" label-width="100px" label-position = "right" style = "padding-right: 40px">
<el-form-item label="学生账号" prop="username">
<el-input v-model="data.form.username" autocomplete="off" />
</el-form-item>
<el-form-item label="学生密码" prop="password">
<el-input show-password v-model="data.form.password" autocomplete="off" />
</el-form-item>
<el-form-item label="学生名称">
<el-input v-model="data.form.name" autocomplete="off" />
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="data.form.phone" autocomplete="off" />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="data.form.email" autocomplete="off" />
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="data.form.sex">
<el-radio label="男"></el-radio>
<el-radio label="女"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="生日">
<el-date-picker style="width: 100%" format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="data.form.birth"></el-date-picker>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="data.formVisible = false">取消</el-button>
<el-button type="primary" @click="save"></el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import {ref,reactive} from "vue";
import {Search} from "@element-plus/icons-vue";
import request from "@/utils/request";
import {ElMessage, ElMessageBox} from "element-plus";
const baseUrl = '/student'
const data = reactive({
username:'',
name:'',
tableData: [],
total: 0,
pageNum: 1, //
pageSize: 5, //
formVisible:false,
form:{}
})
const load = () => {
request.get(baseUrl + '/selectPage',{
params :{
pageNum: data.pageNum,
pageSize: data.pageSize,
username: data.username,
name: data.name,
}
}).then(res =>{
data.tableData = res.data?.list || []
data.total = res.data?.total || 0
})
}
load()
const handelCurrentChange = (pageNum) => {
load()
}
const reset = () => {
data.username = ''
data.name = ''
load()
}
const formRef = ref()
const rules = reactive({
username: [
{ required: true, message: '请输入账号', trigger: 'blur' },
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
],
})
const handleAdd = () =>{
data.form={}
data.formVisible = true
}
//
const save = () =>{
formRef.value.validate((valid) => {
if(valid){
request.request({
url: data.form.id ? baseUrl + '/update' : baseUrl + '/add',
method: data.form.id ? 'PUT' : 'POST',
data: data.form
}).then (res => {
if(res.code === '200'){
load() //
data.formVisible = false; //
ElMessage.success("操作成功")
}else{
ElMessage.error(res.msg)
}
})
}
})
}
const handleEdit = (row) => {
data.form = JSON.parse(JSON.stringify(row))
data.formVisible = true
}
const del = (id) => {
ElMessageBox.confirm('确认删除吗?','删除确认',{type: 'warning'}).then(res => {
request.delete(baseUrl + '/delete/' + id).then(res => {
if (res.code === '200') {
load() //
ElMessage.success("操作成功")
} else {
ElMessage.error(res.msg)
}
})
}).catch(res => {
ElMessage({
type: 'info',
message: 'Delete canceled',
})
}).catch(res => {})
}
</script>
Loading…
Cancel
Save