This commit is contained in:
李旭明 committed 2025-07-24 10:18:35 +08:00
1 parent 225a268e32
commit b49b6f8ec2
45 files changed
+11407 -13

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -0,0 +1,946 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>心理咨询预约管理 - 杭州第一技师学院</title>
<!-- Element Plus 图标字体 -->
<link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css">
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/element-plus/dist/index.full.js"></script>
<script src="https://unpkg.com/@element-plus/icons-vue/dist/index.iife.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background-color: #f5f5f5;
color: #606266;
font-size: 14px;
line-height: 1.5;
}
.p-2 {
padding: 8px;
}
.page-container {
padding: 8px;
}
.mb-10 {
margin-bottom: 10px;
}
.mb-10px {
margin-bottom: 10px;
}
/* 卡片样式 */
.el-card {
background: #fff;
border: 1px solid #ebeef5;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
overflow: hidden;
margin-bottom: 10px;
}
.el-card.hover {
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.el-card-body {
padding: 20px;
}
.el-card-header {
padding: 18px 20px;
border-bottom: 1px solid #ebeef5;
background-color: #fafafa;
}
/* 表单样式 */
.el-form {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.el-form-item {
display: flex;
flex-direction: column;
margin-bottom: 18px;
min-width: 200px;
}
.el-form-item label {
font-size: 14px;
color: #606266;
line-height: 1.5;
padding: 0 12px 0 0;
box-sizing: border-box;
margin-bottom: 5px;
font-weight: 400;
}
.el-input {
position: relative;
font-size: 14px;
display: inline-block;
width: 100%;
}
.el-input input {
background-color: #fff;
border: 1px solid #dcdfe6;
border-radius: 4px;
box-sizing: border-box;
color: #606266;
display: inline-block;
font-size: 14px;
height: 32px;
line-height: 32px;
outline: none;
padding: 0 11px;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
width: 100%;
}
.el-input input:focus {
border-color: #409eff;
outline: none;
}
.el-select {
display: inline-block;
position: relative;
width: 100%;
}
.el-select select {
background-color: #fff;
border: 1px solid #dcdfe6;
border-radius: 4px;
box-sizing: border-box;
color: #606266;
display: inline-block;
font-size: 14px;
height: 32px;
line-height: 32px;
outline: none;
padding: 0 11px;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
width: 100%;
}
.el-select select:focus {
border-color: #409eff;
outline: none;
}
/* 按钮样式 */
.el-button {
display: inline-flex;
align-items: center;
justify-content: center;
line-height: 1;
white-space: nowrap;
cursor: pointer;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
transition: 0.1s;
font-weight: 400;
padding: 8px 15px;
font-size: 14px;
border-radius: 6px;
text-decoration: none;
margin-right: 8px;
min-height: 32px;
}
.el-button:hover {
color: #409eff;
border-color: #c6e2ff;
background-color: #ecf5ff;
}
.el-button--primary {
color: #fff;
background-color: #409eff;
border-color: #409eff;
}
.el-button--primary:hover {
background: #66b1ff;
border-color: #66b1ff;
color: #fff;
}
.el-button--primary.is-plain {
color: #409eff;
background: #ecf5ff;
border-color: #b3d8ff;
}
.el-button--primary.is-plain:hover {
background: #409eff;
border-color: #409eff;
color: #fff;
}
/* 搜索和重置按钮样式 */
.el-button {
font-size: 14px;
padding: 8px 15px;
border-radius: 4px;
}
.el-button:disabled {
color: #c0c4cc;
cursor: not-allowed;
background-image: none;
background-color: #fff;
border-color: #ebeef5;
}
.el-button i {
margin-right: 5px;
}
/* 表格样式 */
.el-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
background-color: #fff;
font-size: 14px;
color: #606266;
margin-bottom: 0;
}
.el-table th,
.el-table td {
padding: 12px 0;
min-width: 0;
box-sizing: border-box;
text-overflow: ellipsis;
vertical-align: middle;
position: relative;
text-align: left;
border-bottom: 1px solid #ebeef5;
}
.el-table th {
background-color: #fafafa;
color: #909399;
font-weight: 500;
border-bottom: 1px solid #ebeef5;
}
.el-table tr:hover {
background-color: #f5f7fa;
}
.el-table--border {
border: 1px solid #ebeef5;
}
.el-table--border th,
.el-table--border td {
border-right: 1px solid #ebeef5;
padding-left: 10px;
padding-right: 10px;
}
.el-table-column--selection {
width: 55px;
text-align: center;
}
/* 状态标签 */
.el-tag {
background-color: #ecf5ff;
border: 1px solid #d9ecff;
color: #409eff;
display: inline-block;
height: 32px;
padding: 0 10px;
line-height: 30px;
font-size: 12px;
border-radius: 4px;
box-sizing: border-box;
white-space: nowrap;
}
.el-tag--success {
background-color: #f0f9ff;
border-color: #e1f3d8;
color: #67c23a;
}
.el-tag--warning {
background-color: #fdf6ec;
border-color: #faecd8;
color: #e6a23c;
}
.el-tag--danger {
background-color: #fef0f0;
border-color: #fde2e2;
color: #f56c6c;
}
.el-tag--info {
background-color: #f4f4f5;
border-color: #e9e9eb;
color: #909399;
}
/* 分页样式 */
.pagination-container {
display: flex;
justify-content: flex-end;
padding: 16px 20px 0 0;
background-color: #fff;
margin-top: 0px;
}
.el-pagination {
white-space: nowrap;
padding: 2px 5px;
color: #303133;
font-weight: 700;
}
.el-pagination button {
display: inline-block;
font-size: 13px;
min-width: 35.5px;
height: 28px;
line-height: 28px;
vertical-align: top;
box-sizing: border-box;
background: #fff;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 0 4px;
text-align: center;
margin: 0 5px;
cursor: pointer;
color: #606266;
transition: all 0.3s;
}
.el-pagination button:hover {
color: #409eff;
}
/* 操作按钮 */
.el-button--text {
border-color: transparent;
color: #606266;
background: transparent;
padding: 4px 8px;
margin-right: 4px;
border-radius: 4px;
min-height: 28px;
width: 28px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.el-button--text:hover {
background-color: #f5f7fa;
border-color: transparent;
}
.el-button--text.el-button--primary {
color: #409eff;
}
.el-button--text.el-button--primary:hover {
color: #409eff;
background-color: #ecf5ff;
}
.el-button--text.el-button--danger {
color: #f56c6c;
}
.el-button--text.el-button--danger:hover {
color: #f56c6c;
background-color: #fef0f0;
}
.el-button--text.el-button--info {
color: #909399;
}
.el-button--text.el-button--info:hover {
color: #909399;
background-color: #f4f4f5;
}
/* 工具提示 */
.el-tooltip {
display: inline-block;
}
/* 行和列布局 */
.el-row {
display: flex;
flex-wrap: wrap;
}
.el-col {
flex: 0 0 auto;
}
.el-col-1-5 {
width: 12.5%;
}
.mb8 {
margin-bottom: 8px;
}
/* Element Plus 图标样式 */
.el-icon {
width: 1em;
height: 1em;
display: inline-block;
vertical-align: middle;
fill: currentColor;
margin-right: 6px;
}
/* 操作按钮图标样式 */
.el-button--text .el-icon {
margin-right: 0;
font-size: 16px;
}
/* 图标样式 */
.icon {
display: inline-block;
width: 16px;
height: 16px;
margin-right: 5px;
vertical-align: middle;
}
/* 模态框样式 */
.el-dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: none;
z-index: 1000;
align-items: center;
justify-content: center;
}
.el-dialog__wrapper {
background: #fff;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
width: 90%;
max-width: 800px;
max-height: 90vh;
overflow-y: auto;
}
.el-dialog__header {
padding: 20px 20px 10px;
border-bottom: 1px solid #ebeef5;
}
.el-dialog__title {
line-height: 24px;
font-size: 18px;
color: #303133;
}
.el-dialog__body {
padding: 30px 20px;
color: #606266;
font-size: 14px;
}
.el-dialog__footer {
padding: 10px 20px 20px;
text-align: right;
border-top: 1px solid #ebeef5;
}
.el-dialog__close {
position: absolute;
top: 20px;
right: 20px;
cursor: pointer;
font-size: 16px;
color: #909399;
}
.el-dialog__close:hover {
color: #409eff;
}
/* 表单行样式 */
.form-row {
display: flex;
gap: 20px;
margin-bottom: 20px;
}
.form-row .el-form-item {
flex: 1;
}
/* 表格单元格样式 */
.el-table td {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
/* 右侧工具栏 */
.right-toolbar {
float: right;
}
.toolbar-item {
display: inline-block;
margin-left: 10px;
cursor: pointer;
color: #606266;
font-size: 16px;
}
.toolbar-item:hover {
color: #409eff;
}
/* 表格卡片布局 */
.table-card {
margin-top: 0;
}
.table-card .el-card-body {
padding: 0px 20px 20px 20px !important;
}
/* 移除按钮栏底部边框 */
.el-card-header {
border-bottom: none !important;
}
/* 表格横向滚动容器 */
.table-container {
overflow-x: auto;
overflow-y: hidden;
width: 100%;
}
.table-container::-webkit-scrollbar {
height: 8px;
}
.table-container::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
.table-container::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
.table-container::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}
</style>
</head>
<body>
<div class="p-2 page-container">
<!-- 搜索动画过渡 -->
<transition name="search-animate">
<!-- 搜索区域 -->
<div class="mb-10px">
<div class="el-card hover" style="box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);">
<div class="el-card-body">
<form class="el-form" label-width="100px">
<div class="el-form-item">
<label>学生姓名</label>
<div class="el-input">
<input type="text" placeholder="请输入学生姓名" />
</div>
</div>
<div class="el-form-item">
<label>学号</label>
<div class="el-input">
<input type="text" placeholder="请输入学号" />
</div>
</div>
<div class="el-form-item">
<label>专业</label>
<div class="el-input">
<input type="text" placeholder="请输入专业" />
</div>
</div>
<div class="el-form-item">
<label>班级</label>
<div class="el-input">
<input type="text" placeholder="请输入班级" />
</div>
</div>
<div class="el-form-item">
<label>咨询师</label>
<div class="el-select">
<select>
<option value="">请选择咨询师</option>
<option value="1">张心理老师</option>
<option value="2">李心理老师</option>
<option value="3">王心理老师</option>
</select>
</div>
</div>
<div class="el-form-item">
<label>预约状态</label>
<div class="el-select">
<select>
<option value="">请选择预约状态</option>
<option value="pending">待处理</option>
<option value="confirmed">已确认</option>
<option value="completed">已完成</option>
<option value="cancelled">已取消</option>
<option value="no_show">未到访</option>
</select>
</div>
</div>
<div class="el-form-item">
<label>预约日期</label>
<div class="el-input">
<input type="date" />
</div>
</div>
<div class="el-form-item">
<label></label>
<div>
<button type="button" class="el-button el-button--primary">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M795.904 750.72l124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704z"></path></svg>
搜索
</button>
<button type="button" class="el-button">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v145.28a32 32 0 1 1-64 0v-46.848zM276.288 295.616A384 384 0 0 1 896 512h-64a320 320 0 0 0-555.712-216.448H369.28a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V182.272a32 32 0 1 1 64 0v113.344z"></path></svg>
重置
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</transition>
<!-- 表格区域 -->
<div class="el-card">
<div class="el-card-header">
<div class="el-row mb8">
<div class="el-col el-col-1-5">
<button class="el-button el-button--primary is-plain">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z"></path></svg>
新增
</button>
</div>
<div class="el-col el-col-1-5">
<button class="el-button" disabled>
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"></path><path d="m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"></path></svg>
修改
</button>
</div>
<div class="el-col el-col-1-5">
<button class="el-button">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z"></path></svg>
删除
</button>
</div>
<div class="el-col el-col-1-5">
<button class="el-button">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M336 176h352a48 48 0 0 1 48 48v224a48 48 0 0 1-48 48H336a48 48 0 0 1-48-48V224a48 48 0 0 1 48-48zm368 96a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16V272z"></path><path d="M112 80h192v48a112 112 0 0 0 112 112h192a112 112 0 0 0 112-112V80h192a32 32 0 1 1 0 64H112a32 32 0 0 1 0-64zm0 144h192v176a144 144 0 0 0 144 144h128a144 144 0 0 0 144-144V224h192a32 32 0 1 1 0 64H112a32 32 0 0 1 0-64zm688 0v176a144 144 0 0 1-144 144H368a144 144 0 0 1-144-144V224h576z"></path></svg>
导出
</button>
</div>
<div class="right-toolbar">
<span class="toolbar-item" onclick="toggleSearch()">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M795.904 750.72l124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704z"></path></svg>
</span>
<span class="toolbar-item" onclick="refreshTable()">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v145.28a32 32 0 1 1-64 0v-46.848zM276.288 295.616A384 384 0 0 1 896 512h-64a320 320 0 0 0-555.712-216.448H369.28a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V182.272a32 32 0 1 1 64 0v113.344z"></path></svg>
</span>
</div>
</div>
</div>
<div class="table-container">
<table class="el-table el-table--border" style="margin-bottom: 0; min-width: 1400px;">
<thead>
<tr>
<th class="el-table-column--selection">
<input type="checkbox" />
</th>
<th style="min-width: 80px;">学生姓名</th>
<th style="min-width: 100px;">学号</th>
<th style="min-width: 120px;">手机号</th>
<th style="min-width: 140px;">专业</th>
<th style="min-width: 80px;">班级</th>
<th style="min-width: 100px;">咨询师</th>
<th style="min-width: 100px;">预约日期</th>
<th style="min-width: 140px;">预约时段</th>
<th style="min-width: 80px;">预约状态</th>
<th style="min-width: 80px;">到访情况</th>
<th style="min-width: 140px;">申请时间</th>
<th style="min-width: 120px;">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td class="el-table-column--selection">
<input type="checkbox" />
</td>
<td>张三</td>
<td>2024001</td>
<td>13800138001</td>
<td>计算机应用技术</td>
<td>2024-1班</td>
<td>张心理老师</td>
<td>2025-01-10</td>
<td>上午 09:00-11:00</td>
<td><span class="el-tag el-tag--warning">待处理</span></td>
<td>-</td>
<td>2025-01-08 14:30</td>
<td>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--info" title="查看">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448zm0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"></path></svg>
</button>
</div>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--primary" title="处理">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"></path><path d="m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"></path></svg>
</button>
</div>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--danger" title="取消">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z"></path></svg>
</button>
</div>
</td>
</tr>
<tr>
<td class="el-table-column--selection">
<input type="checkbox" />
</td>
<td>李四</td>
<td>2024002</td>
<td>13800138002</td>
<td>电子商务</td>
<td>2024-2班</td>
<td>李心理老师</td>
<td>2025-01-11</td>
<td>下午 14:00-17:00</td>
<td><span class="el-tag el-tag--success">已确认</span></td>
<td>-</td>
<td>2025-01-07 16:20</td>
<td>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--info" title="查看">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448zm0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"></path></svg>
</button>
</div>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--primary" title="记录">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"></path><path d="m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"></path></svg>
</button>
</div>
</td>
</tr>
<tr>
<td class="el-table-column--selection">
<input type="checkbox" />
</td>
<td>王五</td>
<td>2024003</td>
<td>13800138003</td>
<td>机械制造与自动化</td>
<td>2024-3班</td>
<td>王心理老师</td>
<td>2025-01-08</td>
<td>上午 09:00-11:00</td>
<td><span class="el-tag el-tag--success">已完成</span></td>
<td><span class="el-tag el-tag--success">已到访</span></td>
<td>2025-01-06 10:15</td>
<td>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--info" title="查看">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448zm0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"></path></svg>
</button>
</div>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--primary" title="编辑记录">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"></path><path d="m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"></path></svg>
</button>
</div>
</td>
</tr>
<tr>
<td class="el-table-column--selection">
<input type="checkbox" />
</td>
<td>赵六</td>
<td>2024004</td>
<td>13800138004</td>
<td>汽车检测与维修</td>
<td>2024-1班</td>
<td>张心理老师</td>
<td>2025-01-07</td>
<td>下午 14:00-17:00</td>
<td><span class="el-tag el-tag--info">已完成</span></td>
<td><span class="el-tag el-tag--danger">未到访</span></td>
<td>2025-01-05 09:30</td>
<td>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--info" title="查看">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448zm0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"></path></svg>
</button>
</div>
<div class="el-tooltip">
<button class="el-button el-button--text el-button--primary" title="重新预约">
<svg class="el-icon" viewBox="0 0 1024 1024"><path d="M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v145.28a32 32 0 1 1-64 0v-46.848zM276.288 295.616A384 384 0 0 1 896 512h-64a320 320 0 0 0-555.712-216.448H369.28a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V182.272a32 32 0 1 1 64 0v113.344z"></path></svg>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pagination-container">
<div class="el-pagination">
<button>上一页</button>
<span style="margin: 0 10px; color: #606266;">第 1 页,共 5 页</span>
<button>下一页</button>
</div>
</div>
</div>
</div>
<!-- 处理预约模态框 -->
<div id="processModal" class="el-dialog">
<div class="el-dialog__wrapper">
<div class="el-dialog__header">
<h3 class="el-dialog__title">处理预约申请</h3>
<span class="el-dialog__close" onclick="closeProcessModal()">&times;</span>
</div>
<div class="el-dialog__body">
<div class="form-row">
<div class="el-form-item">
<label>学生姓名</label>
<div class="el-input">
<input type="text" value="张三" readonly />
</div>
</div>
<div class="el-form-item">
<label>预约时间</label>
<div class="el-input">
<input type="text" value="2025-01-10 09:00-11:00" readonly />
</div>
</div>
</div>
<div class="form-row">
<div class="el-form-item">
<label>处理结果</label>
<div class="el-select">
<select>
<option value="confirmed">确认预约</option>
<option value="rejected">拒绝预约</option>
</select>
</div>
</div>
<div class="el-form-item">
<label>咨询师</label>
<div class="el-select">
<select>
<option value="1">张心理老师</option>
<option value="2">李心理老师</option>
<option value="3">王心理老师</option>
</select>
</div>
</div>
</div>
<div class="el-form-item">
<label>备注</label>
<div class="el-input">
<textarea style="width: 100%; height: 80px; padding: 10px; border: 1px solid #dcdfe6; border-radius: 4px; resize: vertical;" placeholder="请输入处理备注"></textarea>
</div>
</div>
</div>
<div class="el-dialog__footer">
<button class="el-button" onclick="closeProcessModal()">取消</button>
<button class="el-button el-button--primary" onclick="submitProcess()">确定</button>
</div>
</div>
</div>
<script>
// 切换搜索区域显示
function toggleSearch() {
const searchArea = document.querySelector('.mb-10');
searchArea.style.display = searchArea.style.display === 'none' ? 'block' : 'none';
}
// 刷新表格
function refreshTable() {
alert('刷新表格数据');
}
// 打开处理模态框
function openProcessModal() {
document.getElementById('processModal').style.display = 'flex';
}
// 关闭处理模态框
function closeProcessModal() {
document.getElementById('processModal').style.display = 'none';
}
// 提交处理结果
function submitProcess() {
alert('处理结果已提交');
closeProcessModal();
}
// 点击模态框外部关闭
window.onclick = function(event) {
const modal = document.getElementById('processModal');
if (event.target === modal) {
closeProcessModal();
}
}
</script>
</body>
</html>
File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
@@ -0,0 +1,227 @@
# 心理健康测评模块数据库表字段调整记录
**日期**:2025-07-02
**操作人**:lixuming
## 变更内容
### 1. 问题描述
在访问心理健康测评模块时,系统报错:
```
Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'create_dept' in 'field list'
```
经分析,问题是数据库表字段与实体类定义不一致。实体类通过继承 `BaseEntity` 包含 `createDept` 字段,但数据库表中不存在对应的 `create_dept` 列。
### 2. 解决方案
在数据库表中添加缺失的 `create_dept` 字段,并设置初始值。
### 3. 执行的SQL语句
```sql
-- 向xljk_evaluation表添加create_dept字段
ALTER TABLE xljk_evaluation ADD COLUMN create_dept bigint NOT NULL COMMENT '创建部门' AFTER tenant_id;
-- 向xljk_evaluation_detail表添加create_dept字段
ALTER TABLE xljk_evaluation_detail ADD COLUMN create_dept bigint NOT NULL COMMENT '创建部门' AFTER tenant_id;
-- 设置初始值:使用create_by字段的值作为create_dept的值
UPDATE xljk_evaluation SET create_dept = create_by;
UPDATE xljk_evaluation_detail SET create_dept = create_by;
```
### 4. 变更结果
两个表都成功添加了 `create_dept` 字段,并设置了初始值。
### 5. 影响范围
此变更使数据库表结构与实体类定义一致,解决了因字段缺失导致的SQL查询错误,使心理健康测评模块可以正常访问和使用。
## 相关文档
- 实体类: `org.dromara.xljk.domain.XljkEvaluation` 继承自 `TenantEntity`,后者继承自 `BaseEntity`
- `BaseEntity` 类包含 `createDept` 字段,对应数据库中的 `create_dept` 列
---
# 心理健康测评模块添加院系字段
**日期**:2025-07-02
**操作人**:lixuming
## 变更内容
### 1. 需求描述
在心理健康测评新增界面中,需要在专业字段上方增加一个院系字段,实现院系-专业的两级联动。
### 2. 解决方案
在数据库表中添加院系ID和院系名称字段,并为已有数据设置默认值。
### 3. 执行的SQL语句
```sql
-- 在心理健康测评表中添加院系ID和院系名称字段
ALTER TABLE xljk_evaluation
ADD COLUMN department_id bigint NOT NULL COMMENT '院系ID' AFTER id,
ADD COLUMN department_name varchar(100) NOT NULL COMMENT '院系名称' AFTER department_id;
-- 更新已有数据,设置默认值
UPDATE xljk_evaluation SET department_id = 103, department_name = '智能控制学院' WHERE 1=1;
-- 为院系ID字段添加索引以提高查询效率
ALTER TABLE xljk_evaluation ADD INDEX idx_department_id (department_id);
```
### 4. 变更结果
成功添加了院系字段,并为已有数据设置了默认值。
### 5. 后续工作
需要更新以下组件以支持院系字段:
1. 前端类型定义和API接口
2. 新增和编辑表单界面
3. 列表和详情页面
4. 后端实体类、VO类和Mapper文件
## 相关文档
- SQL脚本: `docs/设计文档/database/心理健康测评/xljk_add_department_fields.sql`
- 参考院系数据: 来自系统 `sys_dept` 表,其中二级学院ID为101
---
# 心理健康测评功能增强:院系-专业联动实现
**日期**:2025-07-02
**操作人**:lixuming
## 变更内容
### 1. 需求实现
完成了心理健康测评模块的院系-专业两级联动功能,使得用户可以先选择院系,再选择该院系下的专业和班级。主要变更内容如下:
### 2. 后端实现
1. 在实体类和VO类中添加院系ID和院系名称字段
2. 添加获取院系列表的API接口
3. 修改获取专业班级API接口,支持按院系过滤
4. 在XML映射文件中添加院系字段映射
### 3. 前端实现
1. 添加院系相关的类型定义
- 添加`DepartmentOption`接口
- 在`XljkEvaluationVO`和`XljkEvaluationForm`中添加院系字段
2. 添加院系相关的API接口
- 添加`getDepartmentOptions`函数获取院系列表
- 更新`getMajorClassOptions`函数支持院系过滤
3. 界面实现
- 在新增和编辑页面的专业字段上方添加院系选择
- 在列表页面查询条件和表格中添加院系字段
- 实现院系选择后联动刷新专业选项
### 4. 数据关联和联动
- 院系选择变化时,清空专业和班级选项,并重新加载该院系下的专业
- 专业选择变化时,清空班级选项,并加载该专业下的班级
- 列表查询时可按院系、专业、班级多级筛选
## 文件变更
1. **后端文件**:
- `XljkEvaluation.java` - 添加院系字段
- `XljkEvaluationVo.java` - 添加院系字段
- `XljkEvaluationMapper.xml` - 添加字段映射
- `XljkEvaluationController.java` - 添加院系API
- `IXljkEvaluationService.java` - 添加院系服务接口
- `XljkEvaluationServiceImpl.java` - 实现院系数据获取
2. **前端文件**:
- `types.ts` - 添加院系相关类型
- `index.ts` - 添加院系API接口
- `add.vue` - 添加院系选择和联动
- `edit.vue` - 添加院系字段
- `index.vue` - 添加院系查询和显示
## 效果总结
通过添加院系字段和实现联动,使心理健康测评的数据组织更符合学校管理结构,提高了数据管理的层次性和使用体验。用户可以按院系-专业-班级的自然组织结构进行操作,提升了系统易用性。
---
# 心理健康测评模块与学生信息管理关联适配
**日期**:2025-07-02
**操作人**:lixuming
## 变更内容
### 1. 需求背景
由于学生信息管理模块尚未完全开发完成,需要关联现有的xg_student_info表数据用于心理健康测评的业务验证。主要调整内容包括:
- 将院系字段关联至xg_student_info.college_name
- 将专业字段关联至xg_student_info.major_name
- 将班级字段关联至xg_student_info.class_name
- 学期字段由下拉选择改为手动填写
### 2. 后端实现
1. 添加获取学生信息数据的API接口:
- GET /xljk/evaluation/options/colleges - 获取院系列表
- GET /xljk/evaluation/options/majors - 获取专业列表
- GET /xljk/evaluation/options/classes - 获取班级列表
- GET /xljk/evaluation/students - 获取学生列表
2. 实现数据查询方法:
- 通过SQL直接查询xg_student_info表,获取所需数据
- 实现层级过滤:根据院系过滤专业,根据院系和专业过滤班级,根据院系、专业、班级获取学生信息
### 3. 前端实现
1. 类型定义调整:
- 替换原有的院系、专业、班级相关类型定义
- 新增CollegeOption、MajorOption、ClassOption类型
- 调整StudentInfo类型适配学生信息表结构
2. 前端API调整:
- 替换原有API接口调用
- 实现新的数据获取和联动机制
3. 界面交互调整:
- 使用院系、专业、班级的名称进行数据交互
- 学期字段改为手动输入方式
- 修改学生性别显示规则,适配M/F字段
### 4. 核心调整点
1. **数据源切换**:从系统自建模拟数据切换到直接查询xg_student_info表
2. **字段匹配**:根据xg_student_info表结构对接对应字段
3. **查询策略**:使用动态SQL实现多级联动查询
4. **ID处理**:兼容保留原有ID字段,但实际使用名称字段进行数据关联
5. **前端适配**:调整前端代码使其适配新的数据结构和交互方式
## 文件变更
1. **后端文件**:
- XljkEvaluationController.java - 添加新API接口
- IXljkEvaluationService.java - 添加新服务方法
- XljkEvaluationServiceImpl.java - 实现学生信息查询逻辑
2. **前端文件**:
- types.ts - 更新数据类型定义
- index.ts - 更新API调用接口
- add.vue - 更新表单处理逻辑
## 效果总结
通过此次调整,实现了心理健康测评功能与现有学生信息表的对接,使得测试过程中可以使用真实学生数据进行业务验证。此方案作为临时适配方案,待学生信息管理模块完全开发完成后,可考虑采用更规范的数据服务调用方式进行优化。
@@ -0,0 +1,41 @@
# 代码调整记录 - 2025-07-03 - lixuming
## 变更时间:2025-07-03 14:30:00
## 变更内容
### 数据库连接配置修改
1. 修改了应用配置文件中的数据库连接,从阿里云数据库改为本地数据库
2. 修改文件:`backend/ruoyi-admin/src/main/resources/application-dev.yml`
3. 具体修改:
```yaml
# 修改前
url: jdbc:mysql://47.99.164.66:3306/hzdyjs_xg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: hn02le.34lkdLKD
# 修改后
url: jdbc:mysql://localhost:3306/hzdyjs_xg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: 'DP@xp117'
```
## 变更原因
1. 将应用数据库连接从阿里云改为本地开发环境,方便本地开发和调试
2. Redis连接保持不变,继续使用阿里云Redis服务
## 变更影响
1. 应用将从本地数据库读取数据,确保本地数据库中存在相应的表结构和数据
2. 多租户配置需要注意,确保表 `xljk_evaluation` 包含在排除表列表中或数据有正确的租户ID
## 相关文件
- `backend/ruoyi-admin/src/main/resources/application-dev.yml`
## 备注
使用本地数据库后,需确保本地数据库中的表结构和初始数据与原阿里云数据库一致。
特别注意多租户配置,心理健康测评表中的租户ID需设置为 `000000`。
@@ -0,0 +1,803 @@
# 心理健康测评API文档
## 1. API概述
心理健康测评模块提供班主任对班级学生进行心理健康状况评估的功能,包括测评创建、学生数据加载、心理状态评估、测评统计等功能。
### 1.1 基本信息
- **模块名称**:心理健康测评模块
- **模块代码**:ruoyi-xljk
- **API前缀**:/xljk
- **数据表**:xljk_evaluation, xljk_evaluation_detail
- **开发负责人**:Cursor AI
- **创建日期**:2025-07-02
### 1.2 功能列表
| 功能 | 描述 |
| ---- | ---- |
| 测评管理 | 创建、查询、修改、删除测评 |
| 测评明细管理 | 查询、修改学生心理状态 |
| 测评流程 | 发布测评、完成测评 |
| 数据统计 | 测评统计、重点关注学生统计 |
## 2. API列表
### 2.1 测评管理API
#### 2.1.1 查询测评列表
- **接口URL**:/xljk/evaluation/list
- **请求方式**:GET
- **接口权限**:xljk:evaluation:list
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| pageNum | int | 否 | 当前页码,默认为1 |
| pageSize | int | 否 | 每页记录数,默认为10 |
| evaluationName | string | 否 | 测评名称,支持模糊查询 |
| majorId | long | 否 | 专业ID |
| classId | long | 否 | 班级ID |
| semester | string | 否 | 学期 |
| status | string | 否 | 状态(0-草稿,1-已发布,2-已完成) |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 3,
"rows": [
{
"id": 1,
"evaluationName": "2024上学期计算机2301班心理健康测评",
"majorId": 101,
"majorName": "计算机应用技术",
"classId": 1001,
"className": "计算机2301班",
"semester": "2024上学期",
"status": "2",
"createName": "张班主任",
"remark": "期末测评",
"createBy": 2001,
"createTime": "2025-01-10 09:00:00",
"updateBy": 2001,
"updateTime": "2025-01-10 10:30:00",
"studentCount": 5,
"focusCount": 2
},
{
"id": 2,
"evaluationName": "2024上学期电子2302班心理健康测评",
"majorId": 102,
"majorName": "电子商务",
"classId": 1002,
"className": "电子2302班",
"semester": "2024上学期",
"status": "0",
"createName": "李班主任",
"remark": "期末测评草稿",
"createBy": 2002,
"createTime": "2025-01-11 14:00:00",
"updateBy": 2002,
"updateTime": "2025-01-11 14:30:00",
"studentCount": 0,
"focusCount": 0
}
]
}
}
```
#### 2.1.2 获取测评详情
- **接口URL**:/xljk/evaluation/{id}
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| id | long | 是 | 测评ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"evaluationName": "2024上学期计算机2301班心理健康测评",
"majorId": 101,
"majorName": "计算机应用技术",
"classId": 1001,
"className": "计算机2301班",
"semester": "2024上学期",
"status": "2",
"createName": "张班主任",
"remark": "期末测评",
"createBy": 2001,
"createTime": "2025-01-10 09:00:00",
"updateBy": 2001,
"updateTime": "2025-01-10 10:30:00",
"studentCount": 5,
"focusCount": 2
}
}
```
#### 2.1.3 新增测评
- **接口URL**:/xljk/evaluation
- **请求方式**:POST
- **接口权限**:xljk:evaluation:add
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| evaluationName | string | 是 | 测评名称 |
| majorId | long | 是 | 专业ID |
| majorName | string | 是 | 专业名称 |
| classId | long | 是 | 班级ID |
| className | string | 是 | 班级名称 |
| semester | string | 是 | 学期 |
| remark | string | 否 | 备注 |
- **请求示例**:
```json
{
"evaluationName": "2024下学期计算机2301班心理健康测评",
"majorId": 101,
"majorName": "计算机应用技术",
"classId": 1001,
"className": "计算机2301班",
"semester": "2024下学期",
"remark": "期末测评"
}
```
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": 3
}
```
#### 2.1.4 修改测评
- **接口URL**:/xljk/evaluation
- **请求方式**:PUT
- **接口权限**:xljk:evaluation:edit
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| id | long | 是 | 测评ID |
| evaluationName | string | 是 | 测评名称 |
| majorId | long | 是 | 专业ID |
| majorName | string | 是 | 专业名称 |
| classId | long | 是 | 班级ID |
| className | string | 是 | 班级名称 |
| semester | string | 是 | 学期 |
| remark | string | 否 | 备注 |
- **请求示例**:
```json
{
"id": 3,
"evaluationName": "2024下学期计算机2301班心理健康测评(修改)",
"majorId": 101,
"majorName": "计算机应用技术",
"classId": 1001,
"className": "计算机2301班",
"semester": "2024下学期",
"remark": "期末测评(修改)"
}
```
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.1.5 删除测评
- **接口URL**:/xljk/evaluation/{ids}
- **请求方式**:DELETE
- **接口权限**:xljk:evaluation:remove
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| ids | long[] | 是 | 测评ID数组 |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.1.6 获取专业和班级选项
- **接口URL**:/xljk/evaluation/options/majorAndClass
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:无
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"majors": [
{
"id": 101,
"name": "计算机应用技术"
},
{
"id": 102,
"name": "电子商务"
},
{
"id": 103,
"name": "会计"
}
],
"classes": [
{
"id": 1001,
"name": "计算机2301班",
"majorId": 101
},
{
"id": 1002,
"name": "电子2302班",
"majorId": 102
},
{
"id": 1003,
"name": "会计2303班",
"majorId": 103
}
]
}
}
```
#### 2.1.7 获取学期选项
- **接口URL**:/xljk/evaluation/options/semester
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:无
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": [
"2023上学期",
"2023下学期",
"2024上学期",
"2024下学期",
"2025上学期",
"2025下学期"
]
}
```
#### 2.1.8 发布测评
- **接口URL**:/xljk/evaluation/{id}/publish
- **请求方式**:PUT
- **接口权限**:xljk:evaluation:publish
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| id | long | 是 | 测评ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.1.9 完成测评
- **接口URL**:/xljk/evaluation/{id}/complete
- **请求方式**:PUT
- **接口权限**:xljk:evaluation:complete
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| id | long | 是 | 测评ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.1.10 导出测评
- **接口URL**:/xljk/evaluation/export
- **请求方式**:POST
- **接口权限**:xljk:evaluation:export
- **请求参数**:同查询测评列表接口
- **返回结果**:Excel文件流
### 2.2 测评明细API
#### 2.2.1 查询测评明细列表
- **接口URL**:/xljk/evaluation/detail/list
- **请求方式**:GET
- **接口权限**:xljk:evaluation:list
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| pageNum | int | 否 | 当前页码,默认为1 |
| pageSize | int | 否 | 每页记录数,默认为10 |
| evaluationId | long | 否 | 测评ID |
| studentName | string | 否 | 学生姓名,支持模糊查询 |
| studentNo | string | 否 | 学号,支持模糊查询 |
| gender | string | 否 | 性别(0-男,1-女,2-未知) |
| mentalStatus | string | 否 | 心理状态(1-健康,2-良好,3-重点关注) |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 5,
"rows": [
{
"id": 101,
"evaluationId": 1,
"studentId": 10001,
"studentNo": "2024001",
"studentName": "张三",
"gender": "0",
"birthDate": "2005-06-15",
"phone": "13800138001",
"mentalStatus": "1",
"score": null,
"remark": null,
"createBy": 2001,
"createTime": "2025-01-10 09:10:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:10:00",
"evaluationName": "2024上学期计算机2301班心理健康测评",
"className": "计算机2301班",
"majorName": "计算机应用技术",
"semester": "2024上学期"
},
{
"id": 103,
"evaluationId": 1,
"studentId": 10003,
"studentNo": "2024003",
"studentName": "王五",
"gender": "0",
"birthDate": "2005-09-10",
"phone": "13800138003",
"mentalStatus": "3",
"score": 75,
"remark": "近期学习压力大,需要关注",
"createBy": 2001,
"createTime": "2025-01-10 09:20:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:20:00",
"evaluationName": "2024上学期计算机2301班心理健康测评",
"className": "计算机2301班",
"majorName": "计算机应用技术",
"semester": "2024上学期"
}
]
}
}
```
#### 2.2.2 根据测评ID查询明细列表
- **接口URL**:/xljk/evaluation/detail/evaluation/{evaluationId}
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| evaluationId | long | 是 | 测评ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 101,
"evaluationId": 1,
"studentId": 10001,
"studentNo": "2024001",
"studentName": "张三",
"gender": "0",
"birthDate": "2005-06-15",
"phone": "13800138001",
"mentalStatus": "1",
"score": null,
"remark": null,
"createBy": 2001,
"createTime": "2025-01-10 09:10:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:10:00"
},
{
"id": 102,
"evaluationId": 1,
"studentId": 10002,
"studentNo": "2024002",
"studentName": "李四",
"gender": "0",
"birthDate": "2005-03-22",
"phone": "13800138002",
"mentalStatus": "2",
"score": null,
"remark": null,
"createBy": 2001,
"createTime": "2025-01-10 09:15:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:15:00"
}
]
}
```
#### 2.2.3 获取学生信息
- **接口URL**:/xljk/evaluation/detail/students/{classId}
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| classId | long | 是 | 班级ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 10001,
"studentNo": "2024001",
"studentName": "张三",
"gender": "0",
"birthDate": "2005-06-15",
"phone": "13800138001"
},
{
"id": 10002,
"studentNo": "2024002",
"studentName": "李四",
"gender": "0",
"birthDate": "2005-03-22",
"phone": "13800138002"
}
]
}
```
#### 2.2.4 批量新增测评明细
- **接口URL**:/xljk/evaluation/detail/batch
- **请求方式**:POST
- **接口权限**:xljk:evaluation:add
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| 数组 | array | 是 | 测评明细数组 |
- **请求示例**:
```json
[
{
"evaluationId": 3,
"studentId": 10001,
"studentNo": "2024001",
"studentName": "张三",
"gender": "0",
"birthDate": "2005-06-15",
"phone": "13800138001"
},
{
"evaluationId": 3,
"studentId": 10002,
"studentNo": "2024002",
"studentName": "李四",
"gender": "0",
"birthDate": "2005-03-22",
"phone": "13800138002"
}
]
```
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.2.5 批量更新学生心理状态
- **接口URL**:/xljk/evaluation/detail/batch/mentalStatus
- **请求方式**:PUT
- **接口权限**:xljk:evaluation:edit
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| 数组 | array | 是 | 学生心理状态数组 |
- **请求示例**:
```json
[
{
"id": 101,
"mentalStatus": "1"
},
{
"id": 102,
"mentalStatus": "2"
},
{
"id": 103,
"mentalStatus": "3",
"score": 75,
"remark": "近期学习压力大,需要关注"
}
]
```
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 2.2.6 获取重点关注学生列表
- **接口URL**:/xljk/evaluation/detail/focus
- **请求方式**:GET
- **接口权限**:xljk:evaluation:query
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| pageNum | int | 否 | 当前页码,默认为1 |
| pageSize | int | 否 | 每页记录数,默认为10 |
| evaluationId | long | 否 | 测评ID |
| studentName | string | 否 | 学生姓名,支持模糊查询 |
| studentNo | string | 否 | 学号,支持模糊查询 |
| gender | string | 否 | 性别(0-男,1-女,2-未知) |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 2,
"rows": [
{
"id": 103,
"evaluationId": 1,
"studentId": 10003,
"studentNo": "2024003",
"studentName": "王五",
"gender": "0",
"birthDate": "2005-09-10",
"phone": "13800138003",
"mentalStatus": "3",
"score": 75,
"remark": "近期学习压力大,需要关注",
"createBy": 2001,
"createTime": "2025-01-10 09:20:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:20:00",
"evaluationName": "2024上学期计算机2301班心理健康测评",
"className": "计算机2301班",
"majorName": "计算机应用技术",
"semester": "2024上学期"
},
{
"id": 105,
"evaluationId": 1,
"studentId": 10005,
"studentNo": "2024005",
"studentName": "钱七",
"gender": "1",
"birthDate": "2005-07-20",
"phone": "13800138005",
"mentalStatus": "3",
"score": 80,
"remark": "家庭情况特殊,需要关注",
"createBy": 2001,
"createTime": "2025-01-10 09:30:00",
"updateBy": 2001,
"updateTime": "2025-01-10 09:30:00",
"evaluationName": "2024上学期计算机2301班心理健康测评",
"className": "计算机2301班",
"majorName": "计算机应用技术",
"semester": "2024上学期"
}
]
}
}
```
### 2.3 统计分析API
#### 2.3.1 获取测评统计数据
- **接口URL**:/xljk/evaluation/{id}/statistics
- **请求方式**:GET
- **接口权限**:xljk:evaluation:statistics
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| id | long | 是 | 测评ID |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"evaluationName": "2024上学期计算机2301班心理健康测评",
"className": "计算机2301班",
"semester": "2024上学期",
"createName": "张班主任",
"createTime": "2025-01-10 09:00:00",
"totalCount": 5,
"healthyCount": 2,
"goodCount": 1,
"focusCount": 2,
"healthyPercent": 40.0,
"goodPercent": 20.0,
"focusPercent": 40.0,
"maleCount": 3,
"femaleCount": 2,
"maleFocusCount": 1,
"femaleFocusCount": 1
}
}
```
#### 2.3.2 获取重点关注学生统计
- **接口URL**:/xljk/evaluation/statistics/focus
- **请求方式**:GET
- **接口权限**:xljk:evaluation:statistics
- **请求参数**:
| 参数名 | 类型 | 是否必须 | 描述 |
| ------ | ---- | -------- | ---- |
| majorId | long | 否 | 专业ID |
| classId | long | 否 | 班级ID |
| semester | string | 否 | 学期 |
- **返回示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"totalStudentCount": 10,
"totalFocusCount": 4,
"totalFocusRate": 40.0,
"classStats": [
{
"className": "计算机2301班",
"studentCount": 5,
"focusCount": 2,
"focusRate": 40.0
},
{
"className": "电子2302班",
"studentCount": 5,
"focusCount": 2,
"focusRate": 40.0
}
],
"semesterStats": [
{
"semester": "2023下学期",
"studentCount": 5,
"focusCount": 2,
"focusRate": 40.0
},
{
"semester": "2024上学期",
"studentCount": 5,
"focusCount": 2,
"focusRate": 40.0
}
]
}
}
```
## 3. 数据字典
### 3.1 测评状态(xljk_evaluation_status)
| 编码 | 标签 | 描述 |
| ---- | ---- | ---- |
| 0 | 草稿 | 测评创建后的初始状态 |
| 1 | 已发布 | 测评发布后的状态 |
| 2 | 已完成 | 测评完成后的状态 |
### 3.2 心理状态(xljk_mental_status)
| 编码 | 标签 | 描述 |
| ---- | ---- | ---- |
| 1 | 健康 | 心理状态健康 |
| 2 | 良好 | 心理状态良好 |
| 3 | 重点关注 | 需要重点关注的心理状态 |
## 4. 注意事项
1. 测评状态流转:草稿 -> 已发布 -> 已完成,不能跳过中间状态
2. 草稿状态的测评可以修改和删除,已发布和已完成状态的测评不能删除
3. 已完成状态的测评不能修改学生心理状态
4. 重点关注状态的学生必须填写分数
5. 测评完成后,会统计各状态学生人数和比例
6. 班主任只能查看和管理自己创建的测评
@@ -0,0 +1,27 @@
-- 心理健康测评表增加院系字段脚本
-- 日期:2025-07-02
-- 作者:lixuming
-- 在心理健康测评表中添加院系ID和院系名称字段
ALTER TABLE xljk_evaluation
ADD COLUMN department_id bigint NOT NULL COMMENT '院系ID' AFTER id,
ADD COLUMN department_name varchar(100) NOT NULL COMMENT '院系名称' AFTER department_id;
-- 更新已有数据,设置默认值
-- 这里使用智能控制学院(103)作为示例默认值
UPDATE xljk_evaluation SET department_id = 103, department_name = '智能控制学院' WHERE 1=1;
-- 为院系ID字段添加索引以提高查询效率
ALTER TABLE xljk_evaluation ADD INDEX idx_department_id (department_id);
-- 系统院系参考数据(来自sys_dept表)
-- 101 是二级学院的父级ID
/*
智能控制学院(103)
智能制造学院(104)
医药健康学院(105)
餐饮休闲学院(106)
数字信息学院(107)
人文学院(1938483954134245378)
生态园林学院(1938484049621770242)
*/
@@ -0,0 +1,81 @@
-- ----------------------------
-- 心理健康测评模块数据表
-- ----------------------------
-- ----------------------------
-- 心理健康测评表
-- ----------------------------
DROP TABLE IF EXISTS `xljk_evaluation`;
CREATE TABLE `xljk_evaluation` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`evaluation_name` varchar(100) NOT NULL COMMENT '测评名称',
`major_id` bigint(20) NOT NULL COMMENT '专业ID',
`major_name` varchar(100) NOT NULL COMMENT '专业名称',
`class_id` bigint(20) NOT NULL COMMENT '班级ID',
`class_name` varchar(100) NOT NULL COMMENT '班级名称',
`semester` varchar(50) NOT NULL COMMENT '学期(如2024上学期)',
`status` char(1) NOT NULL DEFAULT '0' COMMENT '状态(0-草稿,1-已发布,2-已完成)',
`create_by` bigint(20) NOT NULL COMMENT '创建者ID(班主任ID)',
`create_name` varchar(50) NOT NULL COMMENT '创建者姓名',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`deleted` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0-存在,1-删除)',
PRIMARY KEY (`id`),
KEY `idx_class_id` (`class_id`),
KEY `idx_semester` (`semester`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心理健康测评表';
-- ----------------------------
-- 心理健康测评明细表
-- ----------------------------
DROP TABLE IF EXISTS `xljk_evaluation_detail`;
CREATE TABLE `xljk_evaluation_detail` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`evaluation_id` bigint(20) NOT NULL COMMENT '测评表ID',
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
`student_no` varchar(50) NOT NULL COMMENT '学号',
`student_name` varchar(50) NOT NULL COMMENT '学生姓名',
`gender` char(1) DEFAULT NULL COMMENT '性别(0-男,1-女,2-未知)',
`birth_date` date DEFAULT NULL COMMENT '出生日期',
`phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
`mental_status` char(1) NOT NULL COMMENT '心理状态(1-健康,2-良好,3-重点关注)',
`score` int(11) DEFAULT NULL COMMENT '分数(仅重点关注时填写)',
`create_by` bigint(20) NOT NULL COMMENT '创建者',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`deleted` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0-存在,1-删除)',
PRIMARY KEY (`id`),
KEY `idx_evaluation_id` (`evaluation_id`),
KEY `idx_student_id` (`student_id`),
KEY `idx_mental_status` (`mental_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心理健康测评明细表';
-- ----------------------------
-- 示例数据
-- ----------------------------
-- 插入测评表示例数据
INSERT INTO `xljk_evaluation` VALUES (1, '2024上学期计算机2301班心理健康测评', 101, '计算机应用技术', 1001, '计算机2301班', '2024上学期', '2', 2001, '张班主任', '2025-01-10 09:00:00', 2001, '2025-01-10 10:30:00', '期末测评', '000000', '0');
INSERT INTO `xljk_evaluation` VALUES (2, '2024上学期电子2302班心理健康测评', 102, '电子商务', 1002, '电子2302班', '2024上学期', '0', 2002, '李班主任', '2025-01-11 14:00:00', 2002, '2025-01-11 14:30:00', '期末测评草稿', '000000', '0');
INSERT INTO `xljk_evaluation` VALUES (3, '2023下学期计算机2301班心理健康测评', 101, '计算机应用技术', 1001, '计算机2301班', '2023下学期', '2', 2001, '张班主任', '2024-12-15 09:00:00', 2001, '2024-12-15 11:00:00', '期末测评', '000000', '0');
-- 插入测评明细示例数据
INSERT INTO `xljk_evaluation_detail` VALUES (101, 1, 10001, '2024001', '张三', '0', '2005-06-15', '13800138001', '1', NULL, 2001, '2025-01-10 09:10:00', 2001, '2025-01-10 09:10:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (102, 1, 10002, '2024002', '李四', '0', '2005-03-22', '13800138002', '2', NULL, 2001, '2025-01-10 09:15:00', 2001, '2025-01-10 09:15:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (103, 1, 10003, '2024003', '王五', '0', '2005-09-10', '13800138003', '3', 75, 2001, '2025-01-10 09:20:00', 2001, '2025-01-10 09:20:00', '近期学习压力大,需要关注', '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (104, 1, 10004, '2024004', '赵六', '1', '2005-11-05', '13800138004', '1', NULL, 2001, '2025-01-10 09:25:00', 2001, '2025-01-10 09:25:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (105, 1, 10005, '2024005', '钱七', '1', '2005-07-20', '13800138005', '3', 80, 2001, '2025-01-10 09:30:00', 2001, '2025-01-10 09:30:00', '家庭情况特殊,需要关注', '000000', '0');
-- 插入第三个测评的明细示例数据
INSERT INTO `xljk_evaluation_detail` VALUES (201, 3, 10001, '2024001', '张三', '0', '2005-06-15', '13800138001', '1', NULL, 2001, '2024-12-15 09:10:00', 2001, '2024-12-15 09:10:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (202, 3, 10002, '2024002', '李四', '0', '2005-03-22', '13800138002', '1', NULL, 2001, '2024-12-15 09:15:00', 2001, '2024-12-15 09:15:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (203, 3, 10003, '2024003', '王五', '0', '2005-09-10', '13800138003', '3', 70, 2001, '2024-12-15 09:20:00', 2001, '2024-12-15 09:20:00', '期末考试压力大', '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (204, 3, 10004, '2024004', '赵六', '1', '2005-11-05', '13800138004', '2', NULL, 2001, '2024-12-15 09:25:00', 2001, '2024-12-15 09:25:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (205, 3, 10005, '2024005', '钱七', '1', '2005-07-20', '13800138005', '3', 85, 2001, '2024-12-15 09:30:00', 2001, '2024-12-15 09:30:00', '家庭情况特殊,需要关注', '000000', '0');
@@ -0,0 +1,26 @@
-- 心理健康测评数据库字段更新脚本
-- 日期:2025-07-02
-- 作者:lixuming
-- 在心理健康测评表中添加create_dept字段
ALTER TABLE xljk_evaluation ADD COLUMN create_dept bigint NOT NULL COMMENT '创建部门' AFTER tenant_id;
-- 在心理健康测评明细表中添加create_dept字段
ALTER TABLE xljk_evaluation_detail ADD COLUMN create_dept bigint NOT NULL COMMENT '创建部门' AFTER tenant_id;
-- 初始化create_dept字段,将create_by的值作为create_dept的初始值
UPDATE xljk_evaluation SET create_dept = create_by;
UPDATE xljk_evaluation_detail SET create_dept = create_by;
-- 更新心理健康测评表的XML映射文件:
-- 在backend/ruoyi-modules/ruoyi-xljk/src/main/resources/mapper/XljkEvaluationMapper.xml文件中添加:
-- <result property="createDept" column="create_dept"/>
-- 更新心理健康测评明细表的XML映射文件:
-- 在backend/ruoyi-modules/ruoyi-xljk/src/main/resources/mapper/XljkEvaluationDetailMapper.xml文件中添加:
-- <result property="createDept" column="create_dept"/>
-- 说明:
-- 此脚本用于修复心理健康测评模块中因字段缺失导致的SQL错误
-- 错误:Unknown column 'create_dept' in 'field list'
-- 原因:实体类通过继承BaseEntity获得了createDept字段,但数据库表中不存在对应的create_dept列
@@ -0,0 +1,89 @@
-- ==========================================
-- 心理健康测评模块菜单权限配置脚本
-- 版本:V1.0.1
-- 功能:心理健康测评模块菜单权限配置
-- 作者:lixuming
-- 时间:2025-07-02
-- 依据文档:docs/需求文档/心理测评需求/心理健康测评系统设计说明.md
-- 更新:将心理健康设置为一级菜单,与首页、系统管理平级
-- ==========================================
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 心理健康测评模块菜单结构(二级层级)
-- ----------------------------
-- 1. 心理健康一级菜单(与首页、系统管理平级)
INSERT INTO `sys_menu` (
`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`
) VALUES
(2300, '心理健康', 0, 8, 'xljk', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'heart', 103, 1, NOW(), 1, NOW(), '心理健康一级菜单');
-- 2. 心理健康测评二级功能菜单
INSERT INTO `sys_menu` (
`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`
) VALUES
(2310, '心理健康测评', 2300, 1, 'evaluation', 'xljk/evaluation/index', NULL, 1, 0, 'C', '0', '0', 'xljk:evaluation:list', 'form', 103, 1, NOW(), 1, NOW(), '心理健康测评页面');
-- 3. 心理健康测评功能按钮
INSERT INTO `sys_menu` (
`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`
) VALUES
-- 心理健康测评按钮
(2311, '测评查询', 2310, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'xljk:evaluation:query', '#', 103, 1, NOW(), 1, NOW(), '测评查询'),
(2312, '测评新增', 2310, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'xljk:evaluation:add', '#', 103, 1, NOW(), 1, NOW(), '测评新增'),
(2313, '测评修改', 2310, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'xljk:evaluation:edit', '#', 103, 1, NOW(), 1, NOW(), '测评修改'),
(2314, '测评删除', 2310, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'xljk:evaluation:remove', '#', 103, 1, NOW(), 1, NOW(), '测评删除'),
(2315, '测评导出', 2310, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'xljk:evaluation:export', '#', 103, 1, NOW(), 1, NOW(), '测评导出');
-- ----------------------------
-- 角色菜单权限配置
-- ----------------------------
-- 为超级管理员角色分配所有权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT 1, menu_id FROM `sys_menu` WHERE menu_id = 2300 OR (menu_id >= 2310 AND menu_id <= 2315);
-- 为学生处管理员角色分配全部权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT 2, menu_id FROM `sys_menu` WHERE menu_id = 2300 OR (menu_id >= 2310 AND menu_id <= 2315);
-- 为二级学院管理员角色分配权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT 3, menu_id FROM `sys_menu` WHERE menu_id = 2300 OR (menu_id >= 2310 AND menu_id <= 2315);
-- 为辅导员角色分配权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(4, 2300), -- 心理健康一级菜单
(4, 2310), -- 心理健康测评
(4, 2311), -- 测评查询
(4, 2312), -- 测评新增
(4, 2313), -- 测评修改
(4, 2315); -- 测评导出
-- 为班级教师角色分配基础权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(5, 2300), -- 心理健康一级菜单
(5, 2310), -- 心理健康测评
(5, 2311); -- 测评查询
-- 为学生角色分配查看权限
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(6, 2300), -- 心理健康一级菜单
(6, 2310), -- 心理健康测评
(6, 2311); -- 测评查询
-- 添加心理健康测评状态字典
INSERT INTO `sys_dict_type` VALUES(1000, '心理测评状态', 'evaluation_status', '0', 1, NOW(), NULL, NULL, '心理健康测评状态');
INSERT INTO `sys_dict_data` VALUES(1001, 0, '草稿', '0', 'evaluation_status', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '草稿状态');
INSERT INTO `sys_dict_data` VALUES(1002, 1, '已发布', '1', 'evaluation_status', '', 'primary', 'N', '0', 1, NOW(), 1, NOW(), '已发布状态');
INSERT INTO `sys_dict_data` VALUES(1003, 2, '已完成', '2', 'evaluation_status', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '已完成状态');
SET FOREIGN_KEY_CHECKS = 1;
-- 验证菜单配置结果
SELECT '心理健康测评菜单权限配置完成!' AS result;
SELECT CONCAT('心理健康测评菜单:', COUNT(*), '个') AS menu_info FROM sys_menu WHERE menu_id BETWEEN 2300 AND 2315;
@@ -0,0 +1,198 @@
# 心理健康测评系统设计说明
## 设计目标
设计一个简单实用的心理健康测评系统,由班主任为班级学生进行心理健康状况评估,并记录重点关注的学生,为学校心理健康管理提供有效支持。
## 数据表设计
### 1. 心理健康测评表 (`xljk_evaluation`)
**主要功能**: 管理班级心理健康测评的基本信息
**字段说明**:
- **标准字段**: 按要求包含 `id`、`tenant_id`、`create_by`、`create_time`、`update_by`、`update_time`、`deleted`
- **业务字段**:
- `evaluation_name`: 测评名称
- `major_id`: 专业ID
- `major_name`: 专业名称
- `class_id`: 班级ID
- `class_name`: 班级名称
- `semester`: 学期(如2024上学期)
- `status`: 状态(0-草稿,1-已发布,2-已完成)
- `create_name`: 创建者姓名(班主任姓名)
- `remark`: 备注
### 2. 心理健康测评明细表 (`xljk_evaluation_detail`)
**主要功能**: 记录每个学生的心理健康评估结果
**字段说明**:
- **标准字段**: 按要求包含 `id`、`tenant_id`、`create_by`、`create_time`、`update_by`、`update_time`、`deleted`
- **学生信息**:
- `evaluation_id`: 关联测评表ID
- `student_id`: 学生ID
- `student_no`: 学号
- `student_name`: 学生姓名
- `gender`: 性别(0-男,1-女,2-未知)
- `birth_date`: 出生日期
- `phone`: 联系电话
- **评估信息**:
- `mental_status`: 心理状态(1-健康,2-良好,3-重点关注)
- `score`: 分数(仅重点关注时填写)
- `remark`: 备注
## 核心功能流程
### 1. 测评创建
- 班主任创建新测评表
- 选择专业、班级、学年(如2024上学期)
- 系统自动加载该班级学生信息(专业、班级、学号、姓名、性别、出生日期、联系电话)
- 初始状态为"草稿"
### 2. 测评填写
- 班主任为每个学生选择心理状态:健康、良好、重点关注
- 选择"重点关注"时,需要填写分数
- 无固定分数标准,重点关注由班主任自行判断
- 可保存为草稿,随时继续编辑
### 3. 测评提交
- 班主任确认所有学生评估完成后提交
- 提交后状态改为"已完成"
- 提交后保存历史测评记录
- 无需流转审批
### 4. 测评统计
- 统计重点关注学生数量和比例
- 生成重点关注学生名单
- 支持按学期、专业、班级查看统计数据
## 设计特点
### 简化原则
- 无固定测评周期,由班主任自行发起测评
- 测评直接提交完成,无需流转审批
- 重点关注无固定分数标准,由班主任自行判断
### 数据关联
- 测评明细表通过 `evaluation_id` 关联测评主表
- 学生信息从学生信息管理模块同步获取
- 保存历史测评记录,支持趋势分析
### 数据完整性
- 使用雪花ID作为主键,保证唯一性
- 外键约束确保测评明细表与测评表的关联
- 必填字段设置 NOT NULL 约束
- 合理的索引设计提高查询效率
## 角色权限
### 班主任
- 创建和填写心理健康测评表
- 查看本班学生的心理测评历史记录
- 查看本班学生的心理咨询预约情况
### 心理健康管理员
- 查看所有班级的测评统计数据
- 查看重点关注学生名单
- 无权修改测评数据
### 心理咨询师
- 查看重点关注学生名单
- 查看学生的测评历史
- 无权修改测评数据
## SQL建表语句
```sql
-- 心理健康测评表
CREATE TABLE `xljk_evaluation` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`evaluation_name` varchar(100) NOT NULL COMMENT '测评名称',
`major_id` bigint(20) NOT NULL COMMENT '专业ID',
`major_name` varchar(100) NOT NULL COMMENT '专业名称',
`class_id` bigint(20) NOT NULL COMMENT '班级ID',
`class_name` varchar(100) NOT NULL COMMENT '班级名称',
`semester` varchar(50) NOT NULL COMMENT '学期(如2024上学期)',
`status` char(1) NOT NULL DEFAULT '0' COMMENT '状态(0-草稿,1-已发布,2-已完成)',
`create_by` bigint(20) NOT NULL COMMENT '创建者ID(班主任ID)',
`create_name` varchar(50) NOT NULL COMMENT '创建者姓名',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`deleted` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0-存在,1-删除)',
PRIMARY KEY (`id`),
KEY `idx_class_id` (`class_id`),
KEY `idx_semester` (`semester`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心理健康测评表';
-- 心理健康测评明细表
CREATE TABLE `xljk_evaluation_detail` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`evaluation_id` bigint(20) NOT NULL COMMENT '测评表ID',
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
`student_no` varchar(50) NOT NULL COMMENT '学号',
`student_name` varchar(50) NOT NULL COMMENT '学生姓名',
`gender` char(1) DEFAULT NULL COMMENT '性别(0-男,1-女,2-未知)',
`birth_date` date DEFAULT NULL COMMENT '出生日期',
`phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
`mental_status` char(1) NOT NULL COMMENT '心理状态(1-健康,2-良好,3-重点关注)',
`score` int(11) DEFAULT NULL COMMENT '分数(仅重点关注时填写)',
`create_by` bigint(20) NOT NULL COMMENT '创建者',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`deleted` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0-存在,1-删除)',
PRIMARY KEY (`id`),
KEY `idx_evaluation_id` (`evaluation_id`),
KEY `idx_student_id` (`student_id`),
KEY `idx_mental_status` (`mental_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心理健康测评明细表';
```
## 示例数据
```sql
-- 插入测评表示例数据
INSERT INTO `xljk_evaluation` VALUES (1, '2024上学期计算机2301班心理健康测评', 101, '计算机应用技术', 1001, '计算机2301班', '2024上学期', '2', 2001, '张班主任', '2025-01-10 09:00:00', 2001, '2025-01-10 10:30:00', '期末测评', '000000', '0');
INSERT INTO `xljk_evaluation` VALUES (2, '2024上学期电子2302班心理健康测评', 102, '电子商务', 1002, '电子2302班', '2024上学期', '0', 2002, '李班主任', '2025-01-11 14:00:00', 2002, '2025-01-11 14:30:00', '期末测评草稿', '000000', '0');
INSERT INTO `xljk_evaluation` VALUES (3, '2023下学期计算机2301班心理健康测评', 101, '计算机应用技术', 1001, '计算机2301班', '2023下学期', '2', 2001, '张班主任', '2024-12-15 09:00:00', 2001, '2024-12-15 11:00:00', '期末测评', '000000', '0');
-- 插入测评明细示例数据
INSERT INTO `xljk_evaluation_detail` VALUES (101, 1, 10001, '2024001', '张三', '0', '2005-06-15', '13800138001', '1', NULL, 2001, '2025-01-10 09:10:00', 2001, '2025-01-10 09:10:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (102, 1, 10002, '2024002', '李四', '0', '2005-03-22', '13800138002', '2', NULL, 2001, '2025-01-10 09:15:00', 2001, '2025-01-10 09:15:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (103, 1, 10003, '2024003', '王五', '0', '2005-09-10', '13800138003', '3', 75, 2001, '2025-01-10 09:20:00', 2001, '2025-01-10 09:20:00', '近期学习压力大,需要关注', '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (104, 1, 10004, '2024004', '赵六', '1', '2005-11-05', '13800138004', '1', NULL, 2001, '2025-01-10 09:25:00', 2001, '2025-01-10 09:25:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (105, 1, 10005, '2024005', '钱七', '1', '2005-07-20', '13800138005', '3', 80, 2001, '2025-01-10 09:30:00', 2001, '2025-01-10 09:30:00', '家庭情况特殊,需要关注', '000000', '0');
-- 插入第三个测评的明细示例数据
INSERT INTO `xljk_evaluation_detail` VALUES (201, 3, 10001, '2024001', '张三', '0', '2005-06-15', '13800138001', '1', NULL, 2001, '2024-12-15 09:10:00', 2001, '2024-12-15 09:10:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (202, 3, 10002, '2024002', '李四', '0', '2005-03-22', '13800138002', '1', NULL, 2001, '2024-12-15 09:15:00', 2001, '2024-12-15 09:15:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (203, 3, 10003, '2024003', '王五', '0', '2005-09-10', '13800138003', '3', 70, 2001, '2024-12-15 09:20:00', 2001, '2024-12-15 09:20:00', '期末考试压力大', '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (204, 3, 10004, '2024004', '赵六', '1', '2005-11-05', '13800138004', '2', NULL, 2001, '2024-12-15 09:25:00', 2001, '2024-12-15 09:25:00', NULL, '000000', '0');
INSERT INTO `xljk_evaluation_detail` VALUES (205, 3, 10005, '2024005', '钱七', '1', '2005-07-20', '13800138005', '3', 85, 2001, '2024-12-15 09:30:00', 2001, '2024-12-15 09:30:00', '家庭情况特殊,需要关注', '000000', '0');
```
## 使用说明
1. 执行上述SQL脚本创建数据表和示例数据
2. 系统会从学生信息管理模块同步学生基础信息
3. 班主任可以根据需要随时发起心理健康测评
4. 测评完成后,可以查看重点关注学生名单和统计数据