# Conflicts:
#	src/views/Home/comps/jwc-undo.vue
This commit is contained in:
2025-08-26 11:14:37 +08:00
42 changed files with 1809 additions and 744 deletions

View File

@@ -1,4 +1,4 @@
import request from '@/utils/request'
import request from "@/utils/request";
/**
* 获取聊天历史记录
@@ -9,29 +9,24 @@ import request from '@/utils/request'
* @param {string} [params.beforeId] 获取此ID之前的记录
* @returns {Promise} 包含历史记录的Promise
*/
export const getHistory = ({
conversationId,
user,
limit = 20,
beforeId
}) => {
export const getHistory = ({ conversationId, user, limit = 20, beforeId }) => {
const params = {
conversationId,
user,
limit
}
limit,
};
// 如果有beforeId参数添加到请求中后端参数名为firstId
if (beforeId) {
params.firstId = beforeId
params.firstId = beforeId;
}
return request({
url: '/aitutor/aichat/getMessagesToUser',
method: 'get',
params
})
}
url: "/aitutor/aichat/getMessagesToUser",
method: "get",
params,
});
};
/**
* 发送反馈(点赞/点踩)
@@ -41,21 +36,17 @@ export const getHistory = ({
* @param {string} params.user 用户ID
* @returns {Promise} 包含操作结果的Promise
*/
export const sendFeedback = ({
messageId,
action,
user
}) => {
export const sendFeedback = ({ messageId, action, user }) => {
return request({
url: '/aitutor/aichat/feedback',
method: 'post',
url: "/aitutor/aichat/feedback",
method: "post",
data: {
message_id: messageId,
rating: action === 1 ? 'like' : 'dislike',
user
}
})
}
rating: action === 1 ? "like" : "dislike",
user,
},
});
};
/**
* 上传文件
@@ -64,16 +55,16 @@ export const sendFeedback = ({
* @returns {Promise} 包含文件URL的Promise
*/
export const uploadFile = (formData, user) => {
formData.append('user', user)
formData.append("user", user);
return request({
url: '/aitutor/aichat/files/upload',
method: 'post',
url: "/aitutor/aichat/files/upload",
method: "post",
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
"Content-Type": "multipart/form-data",
},
});
};
/**
* 创建新会话
@@ -83,14 +74,14 @@ export const uploadFile = (formData, user) => {
*/
export const createConversation = (user, title) => {
return request({
url: '/aitutor/aichat/conversation/create',
method: 'post',
url: "/aitutor/aichat/conversation/create",
method: "post",
data: {
user,
title
}
})
}
title,
},
});
};
/**
* 删除会话
@@ -100,11 +91,11 @@ export const createConversation = (user, title) => {
*/
export const deleteConversation = (conversationId, user) => {
return request({
url: '/aitutor/aichat/conversation/delete',
method: 'post',
url: "/aitutor/aichat/conversation/delete",
method: "post",
data: {
conversation_id: conversationId,
user
}
})
}
user,
},
});
};

View File

@@ -42,3 +42,11 @@ export function delIdentifytexs(id) {
method: 'post'
})
}
// 班级信息列表
export function deptDataList() {
return request({
url: '/comprehensive/identifytexs/deptdata',
method: 'get'
})
}

View File

@@ -47,6 +47,13 @@ export function listView(params) {
})
}
export function checkRoles() {
return request({
url: '/dormitory/daily/checkRoles',
method: 'get'
})
}
// 查询学生宿舍打卡列表

View File

@@ -122,6 +122,14 @@ export function updateNewRecord(data) {
export function delNewRecord(id) {
return request({
url: '/dormitory/newRecord/' + id,
method: 'post'
method: 'delete'
})
}
// 一键确认未进行住宿费用确认的学生
export function confirmUnconfirmedStudents() {
return request({
url: '/dormitory/newRecord/confirmUnconfirmedStudents',
method: 'POST'
})
}

File diff suppressed because it is too large Load Diff

View File

@@ -21,7 +21,7 @@
<!-- 其他页面内容 -->
<!-- 触发按钮控制弹窗显示隐藏 -->
<div class="ai-hover" @click="toggleAI">
<span v-if="!showAI" style="font-size: 14px; font-weight: bold;">AI</span>
<span v-if="!showAI" style="font-size: 30px; font-weight: bold;">AI</span>
<i v-else class="el-icon-close" style="font-size: 20px;"></i>
</div>
<!-- 聊天弹窗通过 v-if 控制显隐 -->
@@ -192,22 +192,7 @@ export default {
}
// ai悬停
.ai-hover {
position: fixed;
bottom: 20px;
right: 20px;
z-index: 999;
width: 50px;
height: 50px;
border-radius: 50%;
background-color: #409eff;
color: #fff;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
//AI
.ai-hover {
@@ -215,8 +200,8 @@ export default {
right: 20px;
bottom: 20px;
/* 和弹窗拉开距离 */
width: 40px;
height: 40px;
width: 5vw;
height: 7vh;
background-color: #409eff;
border-radius: 50%;
display: flex;

View File

@@ -3,6 +3,7 @@ import {
getTokenKeySessionStorage,
removeToken,
setTokenKeySessionStorage,
clearAllUserCache,
} from "@/utils/auth";
const user = {
@@ -92,7 +93,9 @@ const user = {
commit("SET_TOKEN", "");
commit("SET_ROLES", []);
commit("SET_PERMISSIONS", []);
removeToken();
commit("SET_USERINFO", {});
// 清理所有用户相关的缓存数据包括conversation_id
clearAllUserCache();
resolve();
})
.catch((error) => {
@@ -105,7 +108,11 @@ const user = {
FedLogOut({ commit }) {
return new Promise((resolve) => {
commit("SET_TOKEN", "");
removeToken();
commit("SET_ROLES", []);
commit("SET_PERMISSIONS", []);
commit("SET_USERINFO", {});
// 清理所有用户相关的缓存数据包括conversation_id
clearAllUserCache();
resolve();
});
},

View File

@@ -5,7 +5,8 @@ import { showToast } from "@/utils/toast"; // 请替换为你的Toast组件
// 创建axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_API_BASE_URL || 'http://localhost:8088',
// baseURL: process.env.VUE_APP_API_BASE_URL || 'http://localhost:8088',
baseURL: process.env.VUE_APP_BASE_API,
timeout: 15000,
headers: {
"Content-Type": "application/json",

View File

@@ -23,3 +23,28 @@ export function getTokenKeySessionStorage() {
export function removeToken() {
return Cookies.remove(TokenKey)
}
// 清理sessionStorage中的token
export function removeTokenFromSessionStorage() {
sessionStorage.removeItem(TokenKey)
}
// 清理AI聊天相关的localStorage数据
export function clearAIChatCache() {
localStorage.removeItem('conversation_id')
// 可以根据需要添加其他AI聊天相关的缓存清理
}
// 清理所有用户相关的缓存数据
export function clearAllUserCache() {
// 清理token相关
removeToken()
removeTokenFromSessionStorage()
// 清理AI聊天缓存
clearAIChatCache()
// 清理其他用户相关的localStorage数据
localStorage.removeItem('userId')
localStorage.removeItem('userName')
}

View File

@@ -1,15 +1,22 @@
<template>
<div>
<div class="six-action-container">
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i">
<div class="bubble"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }">
<div
style="padding: 1rem"
class="six-action-item"
v-for="(v, i) in taskList"
:key="i"
>
<div
class="bubble"
:style="{
backgroundImage: `url(${require('@/assets/index_bg/' +
(i + 1) +
'.png')})`,
}"
>
<div class="act-text">
<div class="title">
{{ v.label }}·待办
</div>
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div>
@@ -22,7 +29,6 @@
</template>
<script>
import { isEmpty } from "@/api/helpFunc";
import { countDeptUnTodo as getUndo } from "@/api/workstudy/post";
@@ -33,20 +39,21 @@ export default {
name: "zzbld-qgzx",
data() {
return {
hasPrem:false,
taskList: [
],
hasPrem: false,
taskList: [],
myChartStyle: {
float: "left",
width: "400px",
height: "300px",
margin: 0,
}, //图表样式
myChartStyle: { float: "left", width: "400px", height: "300px", margin: 0 },//图表样式
init_park_list: []
}
init_park_list: [],
};
},
created() {
if (checkPermi(['home:dept:qgzx'])) {
if (checkPermi(["home:dept:qgzx"])) {
this.getUndo();
this.hasPrem = true;
}
@@ -62,13 +69,13 @@ export default {
label: "部门·学生岗位审核",
name: "post",
value: data.post,
url: "/workstudy/post/dept"
url: "/workstudy/post/dept",
});
this.taskList.push({
label: "部门·薪资审核",
name: "money",
value: data.money,
url: "/workstudy/money/dept"
url: "/workstudy/money/dept",
});
}
},
@@ -78,10 +85,8 @@ export default {
this.$router.push(url);
}
},
}
}
},
};
</script>
<style scoped lang="scss">
@@ -111,7 +116,6 @@ export default {
z-index: 2;
margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;

View File

@@ -110,7 +110,28 @@ export default {
name: "knzzgl",
value: 0,
url: "/hard/gl/fdy"
}
},
// 陈冠元
{
label: "辅导员·自治区人民政府奖学金审核",
name: "knzzzzq",
value: 0,
url: "/hard/zzq/fdy",
},
//知无涯
{
label: "辅导员·中职升高职补助审核",
name: "zsg",
value: 0,
url: "hard/zsg/fdy"
},
//邵政文
{
label: "辅导员·住宿费用确认审核",
name: "zsfy",
value: 0,
url: "/dormitory/new/FdyConfirm"
},
],

View File

@@ -1,13 +1,22 @@
<template>
<div>
<div class="six-action-container">
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i">
<div class="bubble"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }">
<div
style="padding: 1rem"
class="six-action-item"
v-for="(v, i) in taskList"
:key="i"
>
<div
class="bubble"
:style="{
backgroundImage: `url(${require('@/assets/index_bg/' +
(i + 1) +
'.png')})`,
}"
>
<div class="act-text">
<div class="title">
{{ v.label }}·待办
</div>
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div>
@@ -20,91 +29,128 @@
</template>
<script>
import { countJwcUnDo as countUndo } from "@/api/stuCQS/good/apply";
import { isEmpty } from "@/api/helpFunc";
import { checkPermi } from "@/utils/permission";
export default {
name: "jwc-undo",
data() {
return {
hasPrem:false,
hasPrem: false,
taskList: [
{
label: "学工·评优评先审核",
name: "good",
value: 0,
url: "/stuGood/about-good/jwc"
url: "/stuGood/about-good/jwc",
},
{
label: "学工·静湖之星审核",
name: "lake",
value: 0,
url: "/stuGood/about-lake/jwc"
url: "/stuGood/about-lake/jwc",
},
{
label: "学工·优秀毕业生审核",
name: "biye",
value: 0,
url: "/stuGood/good-graduate/jwc"
url: "/stuGood/good-graduate/jwc",
},
{
label: "学工·困难认定审核",
name: "kn",
value: 0,
url: "/hard/pks/jwc"
url: "/hard/pks/jwc",
},
{
label: "学工·助学金审核",
name: "zx",
value: 0,
url: "/hard/zxj/jwc"
url: "/hard/zxj/jwc",
},
{
label: "学工·宿舍管理审核",
name: "dms",
value: 0,
url: "/dormitory/stuDormitoryManage/final"
url: "/dormitory/stuDormitoryManage/final",
},
{
label: "学工·任务管理审核",
name: "rwgl",
value: 0,
url: "/task/todo"
url: "/task/todo",
},
{
label: "学工·困难资助审核",
name: "knzz",
value: 0,
url: "hard/tufa/xg"
url: "hard/tufa/xg",
},
// 宁博
{
label: "学工·国家励志奖学金审核",
name: "knzzgl",
value: 0,
url: "/hard/gl/xg"
url: "/hard/gl/xg",
},
// 陈冠元
{
label: "学工·自治区人民政府奖学金审核",
name: "knzzzzq",
value: 0,
url: "/hard/zzq/xg",
},
{
label: "学工·学生证补办审核",
name: "xszb",
value: 0,
url: "/routine/sicr/learningIndustrialProductionAudit"
url: "/routine/sicr/learningIndustrialProductionAudit",
},
{
label: "学工·在校证明审核",
name: "zxzm",
value: 0,
url: "/routine/school/learning"
}
]
}
url: "/routine/school/learning",
},
//知无涯 学工·中职升高职补助审核
{
label: "学工·中职升高职补助审核",
name: "zsg",
value: 0,
url: "/hard/zsg/xg",
},
{
label: "学工·辅导员综合绩效审核初审",
name: "jx",
value: 0,
url: "teacher/performance/evaluate/learn",
},
// 宁博
{
label: "学工·辅导员管理-成果绩效审核",
name: "cg",
value: 0,
url: "/teacher/achievement/achievementCheck",
},
// 陈冠元
{
label: "学工·辅导员管理-业绩考核-科室复审",
name: "yj",
value: 0,
url: "/teacher/teacherKpiFilling/studentAffairsOfficeAudit/KSAuditList",
},
{
label: "学工·辅导员管理-业绩考核-学工处长审核",
name: "bj",
value: 0,
url: "/teacher/teacherKpiFilling/studentAffairsOfficeAudit/XGCZAuditList",
},
],
};
},
created() {
if (checkPermi(['home:xg:undo1'])) {
if (checkPermi(["home:xg:undo1"])) {
this.countUndo();
this.hasPrem = true;
}
@@ -114,8 +160,8 @@ export default {
let res = await countUndo();
if (res.code == 200) {
let data = [...res.data];
this.taskList.map(x => {
let temp = data.filter(y => y.startsWith(x.name));
this.taskList.map((x) => {
let temp = data.filter((y) => y.startsWith(x.name));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
@@ -129,10 +175,8 @@ export default {
this.$router.push(url);
}
},
}
}
},
};
</script>
<style scoped lang="scss">
@@ -162,7 +206,6 @@ export default {
z-index: 2;
margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;

View File

@@ -1,13 +1,22 @@
<template>
<div>
<div class="six-action-container">
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i">
<div class="bubble"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }">
<div
style="padding: 1rem"
class="six-action-item"
v-for="(v, i) in taskList"
:key="i"
>
<div
class="bubble"
:style="{
backgroundImage: `url(${require('@/assets/index_bg/' +
(i + 1) +
'.png')})`,
}"
>
<div class="act-text">
<div class="title">
{{ v.label }}·待办
</div>
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div>
@@ -20,15 +29,14 @@
</template>
<script>
import {countSjUnDo as countUndo} from "@/api/stuCQS/good/apply";
import { countSjUnDo as countUndo } from "@/api/stuCQS/good/apply";
import { isEmpty } from "@/api/helpFunc";
import { checkPermi } from "@/utils/permission";
export default {
name: "sj-undo",
data() {
return {
hasPrem:false,
hasPrem: false,
taskList: [
{
@@ -36,13 +44,32 @@ export default {
name: "rwgl",
value: 0,
url: "/task/todo",
}
]
}
},
{
label: "书记·辅导员综合绩效审核",
name: "jx",
value: 0,
url: "teacher/performance/evaluate/party",
},
// 宁博
{
label: "书记·辅导员管理-成果绩效审核",
name: "cg",
value: 0,
url: "/teacher/achievement/achievementCheck",
},
// 陈冠元
{
label: "书记·辅导员管理-业绩考核",
name: "yj",
value: 0,
url: "/teacher/teacherKpiFilling/collegeAudit/DZZSJAuditList",
},
],
};
},
created() {
if (checkPermi(['home:sj:undo1'])) {
if (checkPermi(["home:sj:undo1"])) {
this.countUndo();
this.hasPrem = true;
}
@@ -52,8 +79,8 @@ export default {
let res = await countUndo();
if (res.code == 200) {
let data = [...res.data];
this.taskList.map(x => {
let temp = data.filter(y => y.startsWith(x.name));
this.taskList.map((x) => {
let temp = data.filter((y) => y.startsWith(x.name));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
@@ -67,9 +94,8 @@ export default {
this.$router.push(url);
}
},
}
}
},
};
</script>
<style scoped lang="scss">
@@ -99,7 +125,6 @@ export default {
z-index: 2;
margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;

View File

@@ -95,6 +95,27 @@ export default {
value: 0,
url: "/hard/gl/xw",
},
// 陈冠元
{
label: "学务·自治区人民政府奖学金审核",
name: "knzzzzq",
value: 0,
url: "/hard/zzq/xw",
},
// 宁博
{
label: "学务·辅导员管理-成果绩效审核",
name: "cg",
value: 0,
url: "/teacher/achievement/achievementCheck",
},
// 陈冠元
{
label: "学务·辅导员管理-业绩考核",
name: "yj",
value: 0,
url: "/teacher/teacherKpiFilling/collegeAudit/XWAuditList",
},
],
};
},

View File

@@ -70,6 +70,18 @@ export default {
value: data.workLog,
url: "/workstudy/worklog/zdls"
});
this.taskList.push({
label: "学工处长综合绩效审核",
name: "jx",
value: data.jx || 0,
url: "teacher/performance/studentW/director"
});
this.taskList.push({
label: "科室综合绩效复核",
name: "jx",
value: data.jx || 0,
url: "teacher/performance/studentW/department"
});
}
},

View File

@@ -372,7 +372,7 @@
</template>
<template v-slot="scope">
<button class="action-button" @click="going(scope.row.url)">
查看更多
点击前往处理
</button>
</template>
</el-table-column>

View File

@@ -4,7 +4,22 @@
<el-form-item label="学号" prop="studentCode">
<el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="班级" prop="deptId">
<el-form-item label="班级" prop="classId" v-if="xflag">
<el-select
v-model="queryParams.classId"
placeholder="请选择班级"
clearable
filterable
style="width: 300px;">
<el-option
v-for="item in cascaderData"
:key="item.classId"
:label="item.className"
:value="item.classId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="班级" prop="deptId" v-else>
<el-cascader v-model="queryParams.classId" ref="cas" style="width: 500px;" :options="cascaderData"
:props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader>
</el-form-item>
@@ -479,7 +494,7 @@
</template>
<script>
import { listIdentifytexs, getIdentifytexs, delIdentifytexs, addIdentifytexs, updateIdentifytexs } from "@/api/comprehensive/identifytexs";
import { listIdentifytexs, getIdentifytexs, delIdentifytexs, addIdentifytexs, updateIdentifytexs, deptDataList } from "@/api/comprehensive/identifytexs";
import { treeStudent } from "@/api/stuCQS/basedata/student";
import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year";
import * as XLSX from 'xlsx';
@@ -519,6 +534,7 @@ export default {
biaoJi: null,
excelName: null,
redingData: false,
xflag: false,
// 查询参数
queryParams: {
pageNum: 1,
@@ -595,13 +611,20 @@ export default {
},
// 获取级联数据
async getCascaderData() {
const res = await treeStudent()
const res = await deptDataList()
this.cascaderData = res.data
if(this.cascaderData.length > 0) {
this.xflag = true;
return;
}
const ress = await treeStudent()
this.cascaderData = ress.data
this.cascaderData.forEach(dept => {
dept.children.forEach(major => {
major.children.forEach(c => { delete c.children })
})
});
//console.log(this.cascaderData, "班级数据");
},
// 获取学年信息
async listAllStuYear() {

View File

@@ -4,7 +4,22 @@
<el-form-item label="学号" prop="studentCode">
<el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="班级" prop="deptId">
<el-form-item label="班级" prop="classId" v-if="xflag">
<el-select
v-model="queryParams.classId"
placeholder="请选择班级"
clearable
filterable
style="width: 300px;">
<el-option
v-for="item in cascaderData"
:key="item.classId"
:label="item.className"
:value="item.classId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="班级" prop="deptId" v-else>
<el-cascader v-model="queryParams.classId" ref="cas" style="width: 500px;" :options="cascaderData"
:props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader>
</el-form-item>
@@ -388,6 +403,7 @@
<script>
import { listRemarkstext, getRemarkstext, delRemarkstext, addRemarkstext, updateRemarkstext } from "@/api/comprehensive/remarkstext";
import { treeStudent } from "@/api/stuCQS/basedata/student";
import { deptDataList } from "@/api/comprehensive/identifytexs";
import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year";
import * as XLSX from 'xlsx';
import { excelDateToJSDate } from '@/utils/index';
@@ -426,6 +442,7 @@ export default {
excelName: null,
mode: 'add',
redingdata: false,
xflag: false,
// 查询参数
queryParams: {
pageNum: 1,
@@ -492,8 +509,14 @@ export default {
},
// 获取级联数据
async getCascaderData() {
const res = await treeStudent()
const res = await deptDataList()
this.cascaderData = res.data
if(this.cascaderData.length > 0) {
this.xflag = true
return;
}
const ress = await treeStudent()
this.cascaderData = ress.data
this.cascaderData.forEach(dept => {
dept.children.forEach(major => {
major.children.forEach(c => { delete c.children })

View File

@@ -204,7 +204,10 @@ export default {
let res = await initRecord(sdata);
loading.close();
if (res.code == 200) {
this.$message.success(res.msg);
this.$message.success(res.msg + ",住宿费用确认消息已发送给相关学生");
this.getList(); // 刷新列表
} else {
this.$message.error(res.msg || "初始化失败");
}
},
async listAllGrade() {

View File

@@ -40,7 +40,7 @@
<el-form-item label="学院" prop="deptId">
<el-select @change="changeDept" v-model="queryParams.deptId" placeholder="请选择学院" filterable
clearable>
<el-option v-for="(v, i) in deptList" :key="i" :label="v.label" :value="v.value">
<el-option v-for="(v, i) in deptList" :key="i" :label="v.label" :value="v.value" :disabled="v.disabled">
</el-option>
</el-select>
</el-form-item>
@@ -88,6 +88,43 @@
</el-collapse-item>
</el-collapse>
<!-- 角色切换按钮 -->
<el-form-item label="查看权限" v-if="showRoleSwitch">
<el-button-group>
<!-- 学工+辅导员组合 -->
<template v-if="userRoleInfo && userRoleInfo.isXuegong && userRoleInfo.isFudaoyuan">
<el-button
:type="queryParams.roleType === 'xuegong' ? 'primary' : 'default'"
size="mini"
@click="switchRole('xuegong')">
学工数据全部
</el-button>
<el-button
:type="queryParams.roleType === 'teacher' ? 'primary' : 'default'"
size="mini"
@click="switchRole('teacher')">
个人班级
</el-button>
</template>
<!-- 学务干事+辅导员组合 -->
<template v-else-if="userRoleInfo && userRoleInfo.isXuewu && userRoleInfo.isFudaoyuan">
<el-button
:type="queryParams.roleType === 'dept' ? 'primary' : 'default'"
size="mini"
@click="switchRole('dept')">
学院数据
</el-button>
<el-button
:type="queryParams.roleType === 'teacher' ? 'primary' : 'default'"
size="mini"
@click="switchRole('teacher')">
个人班级
</el-button>
</template>
</el-button-group>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -119,7 +156,7 @@
</template>
<script>
import { listView as getList, sendMail } from "@/api/dormitory/daily";
import { listView as getList, sendMail, checkRoles } from "@/api/dormitory/daily";
import { cleanNotStu } from "@/api/dormitory/basedata/dormitory";
import { fullLoading, groupBy, getChineseKey, getImg, isEmpty } from "@/api/helpFunc";
@@ -139,8 +176,7 @@ export default {
dicts: ['dorm_in_status'],
data() {
return {
searInputS: ['1', '2'],
// 遮罩层
// 加载层
loading: true,
// 选中数组
ids: [],
@@ -162,75 +198,67 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
campusId: null,
parkId: null,
buildingId: null,
floorId: null,
dormitoryId: null,
bedId: null,
deptId: null,
majorId: null,
classId: null,
gradeId: null,
stuNo: null,
isDormitoryHead: null,
status: null,
checkinTime: null,
inStatus: null
stuName: null,
teacherName: null,
idCard: null,
submitTime: null,
roleType: null
},
// 表单参数
form: {},
// 表单校验
rules: {
dormitoryId: [
{ required: true, message: "宿舍ID不能为空", trigger: "blur" }
],
bedId: [
{ required: true, message: "床位ID不能为空", trigger: "blur" }
],
stuNo: [
{ required: true, message: "学生学号不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态(0未缴费不能为空", trigger: "change" }
],
checkinTime: [
{ required: true, message: "入住时间不能为空", trigger: "blur" }
],
},
fastForm: {
campusId: null,
parkId: null,
buildingId: null,
floorId: null,
dormitoryId: null,
},
deptList: [],//学院列表
majorList: [],//专业列表
classList: [],//班级列表
gradeList: [],//年级列表
searInputS: ['1', '2'],
campus_list: [],
park_list: [],
building_list: [],
floor_list: [],
room_list: [],
exportV: false,
campus_list: [],
fast_park_list: [],
fast_building_list: [],
fast_floor_list: [],
fast_class_list: [],
fast_major_list: [],
fast_room_list: [],
uploadV: false,
deptList: [],
majorList: [],
classList: [],
gradeList: [],
userRoleInfo: null,
showRoleSwitch: false,
// 导入参数
upload: {
// 是否显示弹出层(导入)
open: false,
// 弹出层标题(导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getTokenKeySessionStorage() },
url: process.env.VUE_APP_BASE_API + '/dormitory/srs-dormitory-student/importData',
// 上传的地址
url: process.env.VUE_APP_BASE_API + '/dormitory/srs-dormitory-student/importData'
},
allLoading: false
};
},
created() {
this.listDept();
async created() {
await this.getUserRoles();
await this.listDept();
this.listGrade();
this.getList();
this.listAllCampus();
@@ -247,8 +275,8 @@ export default {
},
async changeFloor(val) {
this.queryParams.dormitoryId = null;
this.room_list = [];
if (!isEmpty(val)) {
let res = await listAllRoomByFloor(this.queryParams.floorId);
if (res.code == 200) {
@@ -259,9 +287,10 @@ export default {
async changeBuilding(val) {
this.queryParams.floorId = null;
this.queryParams.dormitoryId = null;
this.floor_list = [];
this.room_list = [];
this.queryParams.dormitoryId = null;
if (!isEmpty(val)) {
let res = await listFloorByBuilding(this.queryParams.buildingId);
if (res.code == 200) {
@@ -273,7 +302,6 @@ export default {
this.queryParams.buildingId = null;
this.queryParams.floorId = null;
this.queryParams.dormitoryId = null;
this.building_list = [];
this.floor_list = [];
this.room_list = [];
@@ -291,7 +319,6 @@ export default {
this.queryParams.buildingId = null;
this.queryParams.floorId = null;
this.queryParams.dormitoryId = null;
this.park_list = [];
this.building_list = [];
this.floor_list = [];
@@ -304,44 +331,43 @@ export default {
}
}
},
async listGrade() {
let res = await listGrade();
this.gradeList = [...res.rows];
},
async changeMajor() {
if (!isEmpty(this.queryParams.majorId)) {
let sdata = {
majorId: this.queryParams.majorId
}
let res = await listClass(sdata);
this.classList = [...res.data];
} else {
async changeMajor(val) {
this.queryParams.classId = null;
this.classList = [];
if (!isEmpty(val)) {
let res = await listClass({ majorId: this.queryParams.majorId });
if (res.code == 200) {
this.classList = [...res.data];
}
}
},
async changeDept() {
if (!isEmpty(this.queryParams.deptId)) {
let sdata = {
collegeId: this.queryParams.deptId,
pageNum: 1,
pageSize: 100
}
let res = await listMajors(sdata);
this.majorList = [...res.rows];
} else {
async changeDept(val) {
this.queryParams.majorId = null;
this.queryParams.classId = null;
this.majorList = [];
this.classList = [];
if (!isEmpty(val)) {
let res = await listMajors({ collegeId: this.queryParams.deptId, pageNum: 1, pageSize: 100 });
if (res.code == 200) {
this.majorList = [...res.rows];
}
}
},
async listDept() {
let res = await getDeptName();
this.deptList = [...res.data];
let allDepts = [...res.data];
// 如果是学务干事或辅导员(但不是学工),只显示其所属的学院
// 学工角色可以查看所有学院
if (this.userRoleInfo && (this.userRoleInfo.isXuewu || this.userRoleInfo.isFudaoyuan) && !this.userRoleInfo.isXuegong && this.userRoleInfo.userDeptName) {
this.deptList = allDepts.filter(dept => dept.label === this.userRoleInfo.userDeptName);
} else {
this.deptList = allDepts;
}
},
@@ -353,42 +379,40 @@ export default {
},
async changeFastFloor(val) {
this.form.dormitoryId = null;
this.fast_room_list = [];
this.fastForm.dormitoryId = null;
this.room_list = [];
if (!isEmpty(val)) {
let res = await listAllRoomByFloor(this.fastForm.floorId);
if (res.code == 200) {
this.fast_room_list = [...res.data];
this.room_list = [...res.data];
}
}
},
async changeFastBuilding(val) {
this.fastForm.floorId = null;
this.fast_floor_list = [];
this.fast_room_list = [];
this.form.dormitoryId = null;
this.fastForm.dormitoryId = null;
this.floor_list = [];
this.room_list = [];
if (!isEmpty(val)) {
let res = await listFloorByBuilding(this.fastForm.buildingId);
if (res.code == 200) {
this.fast_floor_list = [...res.data];
this.floor_list = [...res.data];
}
}
},
async changeFastPark(val) {
this.fastForm.buildingId = null;
this.fastForm.floorId = null;
this.form.dormitoryId = null;
this.fast_building_list = [];
this.fast_floor_list = [];
this.fast_room_list = [];
this.fastForm.dormitoryId = null;
this.building_list = [];
this.floor_list = [];
this.room_list = [];
if (!isEmpty(val)) {
let res = await listBuildingByPark(this.fastForm.parkId);
if (res.code == 200) {
this.fast_building_list = [...res.data];
this.building_list = [...res.data];
}
}
},
@@ -397,17 +421,16 @@ export default {
this.fastForm.parkId = null;
this.fastForm.buildingId = null;
this.fastForm.floorId = null;
this.form.dormitoryId = null;
this.fast_park_list = [];
this.fast_building_list = [];
this.fast_floor_list = [];
this.fast_room_list = [];
this.fastForm.dormitoryId = null;
this.park_list = [];
this.building_list = [];
this.floor_list = [];
this.room_list = [];
if (!isEmpty(val)) {
let res = await listParkByCampus(this.fastForm.campusId);
if (res.code == 200) {
this.fast_park_list = [...res.data];
this.park_list = [...res.data];
}
}
},
@@ -441,13 +464,13 @@ export default {
reset() {
this.form = {
id: null,
stuId: null,
dormitoryId: null,
bedId: null,
stuNo: null,
isDormitoryHead: null,
status: null,
checkinTime: null,
inStatus: null
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
};
this.resetForm("form");
},
@@ -462,7 +485,33 @@ export default {
this.handleQuery();
},
/** 获取用户角色信息 */
async getUserRoles() {
try {
let res = await checkRoles();
if (res.code === 200 && res.data) {
this.userRoleInfo = res.data;
// 只有在多角色情况下才显示角色切换按钮
if (res.data.hasMultipleRoles) {
this.showRoleSwitch = true;
} else {
this.showRoleSwitch = false;
}
// 设置默认角色类型
this.queryParams.roleType = res.data.defaultRole;
}
} catch (error) {
console.error('获取用户角色信息失败:', error);
}
},
/** 切换角色 */
switchRole(roleType) {
this.queryParams.roleType = roleType;
// 角色切换时重新加载学院列表,确保权限正确
this.listDept();
this.handleQuery();
},
}
};
</script>
@@ -473,3 +522,4 @@ export default {
}
}
</style>

View File

@@ -42,6 +42,7 @@
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="success" icon="el-icon-check" size="mini" @click="fastConfirm">一键确认所有辅导员已确认的记录</el-button>
<el-button type="success" icon="el-icon-check" size="mini" @click="confirmUnconfirmedStudents">一键确认未进行住宿费用确认的学生</el-button>
</el-form-item>
</el-form>
@@ -152,7 +153,7 @@
</template>
<script>
import { fastConfirm, jwcConfirm, listNewRecord, getNewRecord, delNewRecord, addNewRecord, updateNewRecord } from "@/api/dormitory/new/record";
import { fastConfirm, jwcConfirm, listNewRecord, getNewRecord, delNewRecord, addNewRecord, updateNewRecord, confirmUnconfirmedStudents } from "@/api/dormitory/new/record";
import { listAllYear } from "@/api/stuCQS/basedata/year";
@@ -358,6 +359,26 @@ export default {
this.download('dormitory/newRecord/export', {
...this.queryParams
}, `newRecord_${new Date().getTime()}.xlsx`)
},
/** 一键确认未进行住宿费用确认的学生 */
confirmUnconfirmedStudents() {
this.$modal.confirm('确定要一键确认所有未进行住宿费用确认的学生吗?').then(() => {
this.loading = true;
confirmUnconfirmedStudents().then(response => {
this.loading = false;
if (response.code === 200) {
this.$modal.msgSuccess(response.msg || "确认成功");
this.getList();
} else {
this.$modal.msgError(response.msg || "确认失败");
}
}).catch(error => {
this.loading = false;
this.$modal.msgError("操作失败,请稍后重试");
});
}).catch(() => {
// 用户取消操作
});
}
}
};

View File

@@ -42,6 +42,14 @@
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -56,6 +56,11 @@
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -121,6 +121,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
@@ -185,6 +189,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
@@ -265,6 +273,11 @@
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -56,6 +56,11 @@
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -58,6 +58,11 @@
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -42,7 +42,7 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button
type="primary"
plain
@@ -64,7 +64,7 @@
v-hasPermi="['system:deployment:remove']"
>删除</el-button
>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@@ -90,12 +90,12 @@
prop="procDefName"
:show-overflow-tooltip="true"
/>
<el-table-column
<!-- <el-table-column
label="流程类别"
align="center"
prop="category"
width="100px"
/>
/> -->
<!-- <el-table-column label="流程版本" align="center" width="80px">
<template slot-scope="scope">
<el-tag size="medium">v{{ scope.row.procDefVersion }}</el-tag>
@@ -159,6 +159,7 @@
>删除</el-button
>
</template>
<a href=""></a>
</el-table-column>
</el-table>

View File

@@ -42,6 +42,14 @@
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}

View File

@@ -57,6 +57,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>

View File

@@ -123,6 +123,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
@@ -195,6 +199,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
@@ -274,6 +282,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯:/自治区/直辖市 </template>

View File

@@ -57,6 +57,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>

View File

@@ -57,6 +57,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>

View File

@@ -41,6 +41,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}

View File

@@ -23,16 +23,16 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['routine:disciplinaryApplication:add']">新增</el-button>
v-hasPermi="['routine:disciplinaryApplication:add']">发起处分</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['routine:disciplinaryApplication:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['routine:disciplinaryApplication:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['routine:disciplinaryApplication:export']">导出</el-button>
@@ -136,6 +136,18 @@
<el-input v-model="form.mz" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="politicalStatus">
<el-select v-model="form.politicalStatus" placeholder="请选择政治面貌" clearable>
<el-option label="群众" value="群众"></el-option>
<el-option label="团员" value="团员"></el-option>
<el-option label="中共党员" value="中共党员"></el-option>
<el-option label="其他" value="其他"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="出生日期" prop="birthday">
<el-input v-model="form.birthday" placeholder="" />
@@ -267,6 +279,7 @@ export default {
gradeName: [{ required: true, message: '请输入年级', trigger: 'blur' }],
className: [{ required: true, message: '请输入班级', trigger: 'blur' }],
mz: [{ required: true, message: '请输入民族', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
birthday: [{ required: true, message: '请输入出生日期', trigger: 'blur' }],
jg: [{ required: true, message: '请选择籍贯', trigger: 'blur' }],
violationDate: [{ required: true, message: '请选择违纪时间', trigger: 'blur' }],

View File

@@ -19,16 +19,16 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['routine:disqualification:add']">新增</el-button>
v-hasPermi="['routine:disqualification:add']">给予学生退学申请</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['routine:disqualification:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['routine:disqualification:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['routine:disqualification:export']">导出</el-button>
@@ -240,7 +240,9 @@ export default {
departmentName: [{ required: true, message: '部门不能为空', trigger: 'blur' }],
gradeName: [{ required: true, message: '年级不能为空', trigger: 'blur' }],
className: [{ required: true, message: '班级不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
ideologicalEducation: [{ required: true, message: '请输入辅导员联系情况及学生不在校情况说明', trigger: 'blur' }],
instructionSchoolHours: [{ required: true, message: '在校时间说明', trigger: 'blur' }],

View File

@@ -41,6 +41,10 @@
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 政治面貌 </template>
{{ form.politicalStatus }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:relieve:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:relieve:add']">发起解除</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['routine:relieve:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['routine:relieve:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:relieve:export']">导出</el-button>
</el-col>
@@ -119,6 +119,18 @@
<el-input v-model="form.mz" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="politicalStatus">
<el-select v-model="form.politicalStatus" placeholder="请选择政治面貌" clearable>
<el-option label="群众" value="群众"></el-option>
<el-option label="团员" value="团员"></el-option>
<el-option label="中共党员" value="中共党员"></el-option>
<el-option label="其他" value="其他"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="出生日期" prop="birthday">
<el-input v-model="form.birthday" placeholder="" />
@@ -247,6 +259,7 @@ export default {
gradeName: [{ required: true, message: '请输入年级', trigger: 'blur' }],
className: [{ required: true, message: '请输入班级', trigger: 'blur' }],
mz: [{ required: true, message: '请输入民族', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
birthday: [{ required: true, message: '请输入出生日期', trigger: 'blur' }],
jg: [{ required: true, message: '请选择籍贯', trigger: 'blur' }],
penaltyNumber: [{ required: true, message: '请输入处分文号', trigger: 'blur' }],

View File

@@ -20,14 +20,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuDropOutSchool:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuDropOutSchool:add']">发起退学</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['routine:rtStuDropOutSchool:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['routine:rtStuDropOutSchool:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuDropOutSchool:export']">导出</el-button>
</el-col>
@@ -304,6 +304,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuQuitSchool:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuQuitSchool:add']">发起休学</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['routine:rtStuQuitSchool:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['routine:rtStuQuitSchool:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuQuitSchool:export']">导出</el-button>
</el-col>
@@ -293,6 +293,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuReentrySchool:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['routine:rtStuReentrySchool:add']">发起复学</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['routine:rtStuReentrySchool:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['routine:rtStuReentrySchool:remove']">删除</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuReentrySchool:export']">导出</el-button>
</el-col>
@@ -308,6 +308,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -237,7 +237,7 @@ export default {
});
},
/** 查询多级审核
列表 */
列表 */
getList() {
this.loading = true;
listStuMultiLevelReview(this.queryParams).then(response => {
@@ -353,7 +353,7 @@ export default {
stuName: null,
stuNo: null,
reason: null,
messageContent: "你申请办理的学生证制作完成,长堽校区前往xxx领取里建校区前往xxx领取",
messageContent: "你申请办理的学生证制作完成,长堽校区前往经管楼学工处1-1办公室领取里建校区前往“一站式”学生社区大厅领取",
id: null
};
this.resetForm("completedForm");