Former-commit-id: c0fb45dae966f9fce616b8428e193b54879857bf
Former-commit-id: 1b8b693498d2b423218db4ba3993371139fe1564
1.0
wanggang 5 years ago
parent 669c616e9f
commit f265374a4b

@ -7,7 +7,7 @@
var controller = this.ViewContext.RouteData.Values["controller"].ToString();
var action = this.ViewContext.RouteData.Values["action"].ToString();
var url = HtmlAction ?? (ViewData.Keys.Any(o => o.ToLower() == "returnurl") ? Url.Action(null, null, new { ReturnUrl = ViewData["ReturnUrl"] }) : Url.Action(null, null));
var props = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit);
var props = ViewData.ModelMetadata.Properties;
}
<div class="card card-info">
<form action="@url" method="post" class="form-horizontal">

@ -38,9 +38,15 @@ namespace TeacherExt.Controllers
Request.HttpContext.JwtSignIn(model.UserName, model.RememberMe);
return RedirectToAction("Index","Home");
}
ModelState.AddModelError(nameof(model.Password), "密码错误");
else
{
ModelState.AddModelError(nameof(model.Password), "密码错误");
}
}
else
{
ModelState.AddModelError(nameof(model.UserName), "用户不存在");
}
ModelState.AddModelError(nameof(model.UserName), "用户不存在");
}
return View();
}

@ -3,6 +3,7 @@ using Infrastructure.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NPOI.SS.UserModel;
@ -45,8 +46,14 @@ namespace TeacherExt.Controllers
.Take(model.PageSize)
.ToList()
.Select(o => {
var m = o.To<EditTeacherModel>();
this.EntityToModel(o, m);
var m = o.Teacher != null?o.Teacher.To<EditTeacherModel>() : new EditTeacherModel();
if(o.Teacher!=null)
{
this.EntityToModel(o.Teacher, m);
}
m.UserId = o.Id;
m.Organ = o.Organ.Name;
m.RealName = o.RealName;
return m;
}).ToList();
model.List.AddRange(list);
@ -70,11 +77,51 @@ namespace TeacherExt.Controllers
return View(model);
}
public IActionResult Edit(Guid id)
public IActionResult Edit(Guid userId)
{
var entity = this._teacherRepo.ReadOnlyTable().FirstOrDefault(o => o.Id == id);
var entity = this._userRepo.ReadOnlyTable()
.Include(o=>o.Organ)
.Include(o=>o.Teacher)
.FirstOrDefault(o => o.Id == userId);
var model = entity.To<EditTeacherModel>();
this.ToEditModel(entity, model);
model.UserId = entity.Id;
model.Organ = entity.Organ.Name;
model.RealName = entity.RealName;
this.EntityToModel(entity.Teacher, model);
this.ToEditModel(entity.Teacher, model);
return View(model);
}
[HttpPost]
public IActionResult Add(EditTeacherModel model)
{
if(ModelState.IsValid)
{
var entity = new Teacher();
entity.From(model);
this._teacherRepo.Add(entity);
this._teacherRepo.SaveChanges();
return RedirectToAction("Index");
}
this.ToEditModel(null, model);
return View(model);
}
[HttpPost]
public IActionResult Edit(EditTeacherModel model)
{
var entity = this._userRepo.Table().FirstOrDefault(o => o.Id == model.UserId);
if (ModelState.IsValid)
{
if(entity.Teacher==null)
{
entity.Teacher = new Teacher().From(model);
}
this._userRepo.SaveChanges();
return RedirectToAction("Index");
}
this.EntityToModel(entity?.Teacher, model);
this.ToEditModel(entity?.Teacher, model);
return View(model);
}
@ -97,10 +144,9 @@ namespace TeacherExt.Controllers
return File(ms.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"教师列表_{DateTime.Now.ToString("yyyy_MM-dd_HH_mm_ss")}.xlsx");
}
private IQueryable<Teacher> Query(QueryTeacherModel model)
private IQueryable<User> Query(QueryTeacherModel model)
{
var userName = User.Identity.Name;
var query = this._teacherRepo.ReadOnlyTable();
var organId = this._userRepo.ReadOnlyTable().Where(o => o.UserName == userName).Select(o => o.OrganId).FirstOrDefault();
model.OrganId = model.OrganId.HasValue ? model.OrganId : organId;
if (User.IsInRole("局管理员"))
@ -111,17 +157,18 @@ namespace TeacherExt.Controllers
{
model.Organs = this._organRepo.ReadOnlyTable().ToList().Where(o => o.Id == organId).ToList();
}
var query = this._userRepo.ReadOnlyTable().Include(o=>o.Organ).Include(o=>o.Teacher).AsQueryable();
if (User.IsInRole("校管理员"))
{
query = query.Where(o => o.User.OrganId == organId);
query = query.Where(o => o.OrganId == organId);
}
else
{
query = query.Where(o => o.User.UserName == userName);
query = query.Where(o => o.UserName == userName);
}
query = query
.WhereIf(!string.IsNullOrEmpty(model.RequestEditStatus), o => o.RequestEditStatus == model.RequestEditStatus)
.WhereIf(!string.IsNullOrEmpty(model.CheckStatus), o => o.CheckStatus == model.CheckStatus)
.WhereIf(!string.IsNullOrEmpty(model.RequestEditStatus), o => o.Teacher.RequestEditStatus == model.RequestEditStatus)
.WhereIf(!string.IsNullOrEmpty(model.CheckStatus), o => o.Teacher.CheckStatus == model.CheckStatus)
.WhereIf(!string.IsNullOrEmpty(model.RealName), o => o.RealName.Contains(model.RealName));
return query;
}
@ -136,8 +183,14 @@ namespace TeacherExt.Controllers
var list = this.Query(model)
.ToList()
.Select(o => {
var m = o.To<EditTeacherModel>();
this.EntityToModel(o, m);
var m = o.Teacher != null ? o.Teacher.To<EditTeacherModel>() : new EditTeacherModel();
if (o.Teacher != null)
{
this.EntityToModel(o.Teacher, m);
}
m.UserId = o.Id;
m.Organ = o.Organ.Name;
m.RealName = o.RealName;
return m;
})
.ToList();
@ -281,15 +334,18 @@ namespace TeacherExt.Controllers
public void EntityToModel(Teacher entity, EditTeacherModel model)
{
if (!string.IsNullOrEmpty(entity.IdNumber))
if(entity!=null)
{
var value = entity.IdNumber.Length == 15 ? $"19{entity.IdNumber.Substring(6, 6)}" : entity.IdNumber.Substring(6, 8);
var birthday = DateTime.ParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture);
model.Age = DateTime.Now.Year - birthday.Year;
}
if (entity.JobStart.HasValue)
{
model.JobAge = DateTime.Now.Year - entity.JobStart.Value.Year;
if (!string.IsNullOrEmpty(entity.IdNumber))
{
var value = entity.IdNumber.Length == 15 ? $"19{entity.IdNumber.Substring(6, 6)}" : entity.IdNumber.Substring(6, 8);
var birthday = DateTime.ParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture);
model.Age = DateTime.Now.Year - birthday.Year;
}
if (entity.JobStart.HasValue)
{
model.JobAge = DateTime.Now.Year - entity.JobStart.Value.Year;
}
}
}

@ -15,13 +15,21 @@ namespace TeacherExt.Models
[HiddenInput]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = -3, Name = "申请修改状态")]
public Guid UserId { get; set; }
[SkipSearch, SkipList]
[HiddenInput]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = -2, Name = "申请修改状态")]
public Guid Id { get; set; } = Guid.NewGuid();
[HiddenInput]
[ReadOnly(true)]
[Required(ErrorMessage = "必填项")]
[Display(Order = -1, Name = "申请修改状态")]
public string RequestEditStatus { get; set; }
public string RequestEditStatus { get; set; } = "未申请";
[SelectList]
[HiddenInput]
@ -44,9 +52,9 @@ namespace TeacherExt.Models
public string UserType { get; set; }
[Description("使用并修改已有字段[教师姓名][]")]
[ReadOnly(true)]
[Required(ErrorMessage = "必填项")]
[StringLength(4,MinimumLength =2,ErrorMessage ="{0}的长度在{2}-{1}之间")]
[RegularExpression(@"[\u4e00-\u9fa5]+", ErrorMessage = "")]
[RegularExpression(@"^[\u4e00-\u9fa5]+$", ErrorMessage = "")]
[Display(Order = 30, Name = "姓名")]
public string RealName { get; set; }

@ -1,2 +1,46 @@
@model LoginModel
@Html.EditorForModel()
<form action="@Url.Action("Login")" method="post">
<div class="card card-info">
<div class="row">
@Html.AntiForgeryToken()
<div class="col-sm-6">
<div class="form-group row">
<div class="col-sm-4 col-form-label"></div>
@Html.ValidationSummary(true, "错误:", new { @class = "text-danger col-sm-8" }, "div")
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
@Html.TextBoxFor(o => o.UserName, new { @class= "form-control",placeholder = "用户名" })
@Html.ValidationMessageFor(o => o.UserName)
</div>
</div>
<div class="form-group row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
@Html.PasswordFor(o => o.Password, new { @class = "form-control", placeholder = "密码" })
@Html.ValidationMessageFor(o => o.Password)
</div>
</div>
<div class="form-group row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
<label>@Html.EditorFor(o => o.RememberMe)记住我</label>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
<button class="btn btn-primary" type="submit">
确定
</button>
</div>
</div>
</div>
</div>
</div>
</form>

@ -13,7 +13,7 @@
</div>
</div>
<div class="col-sm-8">
<form method="post" action="/">
<form method="post" action="/" target="_self">
<div class="card">
<div class="card-header">
<div class="row">
@ -45,7 +45,7 @@
</div>
<div class="row">
<div class="col-12">
<button type="button" id="query" class="btn btn-primary" data-action="@Url.Action(null,null)">
<button type="button" id="query" class="btn btn-primary" data-method="get" data-target="_self" data-action="@Url.Action("Index")">
查询
</button>
@if (User.IsInRole("局管理员") || User.IsInRole("校管理员"))
@ -53,17 +53,18 @@
<a class="btn btn-success" href="@Url.Action("Add")">
新建
</a>
<button type="submit" class="action confirm btn btn-danger" data-action="@Url.Action("Delete")">
<button type="submit" class="action confirm btn btn-danger" data-method="post" data-target="_self" data-action="@Url.Action("Delete")">
删除
</button>
<button type="button" class="btn btn-primary" data-target="_blank" data-action="@Url.Action("Export")">导出</button>
<button type="button" class="btn btn-primary" data-method="get" data-target="_blank" data-action="@Url.Action("Export")">导出</button>
}
</div>
</div>
</div>
<div class="card-body">
<table>
<table class="table table-hover text-nowrap">
<tr>
<th><input type="checkbox" class="select_all" /></th>
<th>行号</th>
<th>申请修改状态</th>
<th>审核状态</th>
@ -71,13 +72,19 @@
<th>性别</th>
<th>民族</th>
<th>籍贯</th>
<th>查看</th>
<th>修改</th>
@if (User.IsInRole("局管理员") || User.IsInRole("校管理员"))
{
<th>审核</th>
}
<th>编辑</th>
</tr>
@foreach (var item in Model.List)
{
index++;
<tr>
<td>
<input type="checkbox" name="list[]" value="@item.Id" />
</td>
<td>@index</td>
<td>@item.RequestEditStatus</td>
<td>@item.CheckStatus</td>
@ -85,8 +92,11 @@
<td>@item.Sex</td>
<td>@item.Nation</td>
<td>@item.NativePlace</td>
<td><a href="#">查看</a></td>
<td><a href="#">编辑</a></td>
@if (User.IsInRole("局管理员") || User.IsInRole("校管理员"))
{
<td><a href="#">审核</a></td>
}
<td><a href="@Url.Action("Edit",new { userId=item.UserId})">编辑</a></td>
</tr>
}
</table>
@ -128,13 +138,10 @@
@section scripts{
<script>
$('[data-action]').click(function () {
var url = $(this).attr('data-action') + '?' + $(this).parents('form').serialize();
if ($(this).attr('data-target')==='_blank') {
window.open(url);
}
else {
window.location.href = url;
}
});
$(this).parents('form').attr('action') = $(this).attr('data-action');
$(this).parents('form').attr('method') = $(this).attr('data-method');
$(this).parents('form').attr('target') = $(this).attr('data-target');
$(this).parents('form')[0].submit();
});
</script>
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,234 @@

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="stylesheet" href="lib/fontawesome-free/css/all.min.css" />
<link rel="stylesheet" href="lib/ionicons/css/ionicons.min.css" />
<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.min.css" />
<link rel="stylesheet" href="lib/admin-lte/css/adminlte.min.css" />
<link rel="stylesheet" href="lib/fancybox/jquery.fancybox.min.css" />
<link rel="stylesheet" href="lib/sweetalert2/dist/sweetalert2.min.css" />
<link rel="stylesheet" href="lib/jquery-datetimepicker/jquery.datetimepicker.min.css" />
<link rel="stylesheet" href="lib/sweetalert2/dist/sweetalert2.min.css" />
<link rel="stylesheet" href="lib/select2/css/select2.min.css" />
<link rel="stylesheet" href="lib/select2/dist/select2-bootstrap4.min.css" />
<link rel="stylesheet" href="lib/kindeditor/themes/default/default.css" />
<link rel="stylesheet" href="lib/toastr/toastr.min.css">
<link rel="stylesheet" href="css/site.css">
<title></title>
<style>
.navbar-nav li {
list-style: none;
}
</style>
</head>
<body class="hold-transition layout-top-nav text-sm">
<div id="app">
<div class="wrapper">
<nav class="main-header navbar navbar-expand navbar-dark navbar-gray-dark text-sm">
<div class="container">
<a href="/" class="navbar-brand">
<img src="images/logo.png" alt="" class="brand-image img-circle elevation-3" style="opacity: .8">
<span class="brand-text font-weight-light">教师信息管理</span>
</a>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a href="/Account" class="nav-link">admin</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/Account/Logout" click="logout">退出</a>
</li>
</ul>
</div>
</nav>
<div class="content-wrapper">
<div class="content">
<noscript>
<div class="callout callout-danger">
<h4><i class="icon fa fa-ban"></i> 警告!</h4>
<p>Javascript处于禁用状态</p>
</div>
</noscript>
<div class="container">
<div class="row">
<div class="col-sm-4">
<div class="card">
<div class="card-body">
<ul class="navbar-nav">
<li class="navbar-nav">
<a class="nav-link active" href="/?organId=70d12954-e88b-44e8-b2a0-5a628f68f6e7">教育局</a>
<ul class="nav-treeview">
<li class="navbar-nav">
<a class="nav-link" href="/?organId=923516b3-7c3f-4d3b-817b-da09178a8a9b">学校2</a>
</li>
<li class="navbar-nav">
<a class="nav-link" href="/?organId=0b018b9b-e1e4-40ef-8fbd-340d7ff599f2">学校1</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="col-sm-8">
<form method="post" action="/" target="_self">
<div class="card">
<div class="card-header">
<div class="row">
<div class="col-sm-4">
<div class="form-group row">
<label class="col-sm-4 col-form-label" for="RequestEditStatus">申请状态</label>
<div class="col-sm-8">
<select class="form-control select2bs4" id="RequestEditStatus" name="RequestEditStatus">
<option value="">请选择</option>
<option value="未申请">未申请</option>
<option value="已申请">已申请</option>
</select>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group row">
<label class="col-sm-4 col-form-label" for="CheckStatus">审核状态</label>
<div class="col-sm-8">
<select class="form-control select2bs4" id="CheckStatus" name="CheckStatus">
<option value="">请选择</option>
<option value="未提交">未提交</option>
<option value="待校级审核">待校级审核</option>
<option value="校级审核失败">校级审核失败</option>
<option value="待局级审核">待局级审核</option>
<option value="局级审核失败">局级审核失败</option>
<option value="局级审核成功">局级审核成功</option>
</select>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group row">
<label class="col-sm-4 col-form-label" for="RealName">姓名</label>
<div class="col-sm-8">
<input class="form-control" id="RealName" name="RealName" type="text" value="" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="button" id="query" class="btn btn-primary" data-method="get" data-target="_self" data-action="/">
查询
</button>
<!--<a class="btn btn-success" href="/Home/Add">
新建
</a>
<button type="submit" class="action confirm btn btn-danger" data-method="post" data-target="_self" data-action="/Home/Delete">
删除
</button>-->
<button type="button" class="btn btn-primary" data-method="get" data-target="_blank" data-action="/Home/Export">导出</button>
</div>
</div>
</div>
<div class="card-body">
<table>
<tr>
<th><input type="checkbox" class="select_all" /></th>
<th>行号</th>
<th>申请修改状态</th>
<th>审核状态</th>
<th>姓名</th>
<th>性别</th>
<th>民族</th>
<th>籍贯</th>
<th>查看</th>
<th>修改</th>
</tr>
</table>
</div>
<div class="card-footer">
<div class="row">
<div class="col-sm-12 col-md-5"><div class="dataTables_info"><span style="color:#000;font-weight:bold;"> 0 </span>条 当前<span style="color:#000;"> 1</span>/0</div></div> <div class="col-sm-12 col-md-7">
<div class="dataTables_paginate paging_simple_numbers">
<ul class="pagination pagination-sm m-0 float-right">
<li class="page-item"><a class="page-link" href="/">首页</a></li>
<li class="page-item"><a class="page-link" href="javascript:;">上一页</a></li>
<li class="page-item"><a class="page-link" href="javascript:;">下一页</a></li>
<li class="page-item"><a class="page-link" href="javascript:;">末页</a></li>
<li class="page-item"><a class="page-link" href="javascript:;">1 / 0</a></li>
<li class="page-item">
<select class="page-link" data-val="true" data-val-required="The PageSize field is required." id="PageSize" name="PageSize">
<option selected="selected" value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<footer class="main-footer">
<p style="text-align:center;">
版权所有 <span>v 1.0.0.0</span>
</p>
</footer>
</div>
<div id="loadingToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<i class="weui-loading weui-icon_toast"></i>
<p class="weui-toast__content">加载中</p>
</div>
</div>
</div>
<script src="lib/jquery/jquery.min.js"></script>
<script src="lib/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="lib/admin-lte/js/adminlte.min.js"></script>
<script src="lib/axios/axios.min.js"></script>
<script src="lib/signalr/signalr.min.js"></script>
<script src="lib/vue/vue.min.js"></script>
<script src="lib/linq/linq.min.js"></script>
<script src="lib/jquery-validation/jquery.validate.min.js"></script>
<script src="lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script>
<script src="lib/fancybox/jquery.fancybox.min.js"></script>
<script src="lib/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script src="lib/jquery-datetimepicker/jquery.datetimepicker.full.min.js"></script>
<script src="lib/select2/js/select2.full.min.js"></script>
<script src="lib/select2/js/i18n/zh-CN.js"></script>
<script src="lib/urijs/URI.min.js"></script>
<script src="lib/chart.js/Chart.bundle.min.js"></script>
<script src="lib/kindeditor/kindeditor-all-min.js"></script>
<script src="lib/flv.js/flv.min.js"></script>
<script src="lib/toastr/toastr.min.js"></script>
<script>
$('[data-action]').click(function () {
$(this).parents('form').attr('action') = $(this).attr('data-action');
$(this).parents('form').attr('method') = $(this).attr('data-method');
$(this).parents('form').attr('target') = $(this).attr('data-target');
$(this).parents('form')[0].submit();
});
</script>
<script src="js/site.js"></script>
</body>
</html>
Loading…
Cancel
Save